diff --git a/README.md b/README.md index d518216..1d76877 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Author is `plugin.json` `author.name` when present, else Reforma. Shelf is the p Root `marketplace.json` lists plugins under `categories[].plugins`. `source` is a path in this repo or a GitHub `tree/…` URL. `"disabled": true` skips pack (folder stays) when the hosted MCP only accepts catalog clients (Figma waitlist). OAuth apps you register yourself (Drive, Dropbox, Slack, GitHub) stay enabled — credentials go in IN → OAuth clients, not here. -Local plugins live under `marketplace///`. Origin (first-party vs vendored) is `plugin.json` `author`, not the folder tree. Remote pins stay as GitHub URLs. Optional `displayName` / `description` on the listing, plus `marketplace/_brand//logo.*`, overlay the packed manifest — upstream Cursor plugins often ship repo-slug names and “plugin for Cursor” blurbs. +Local plugins live under `marketplace///`. Origin (first-party vs vendored) is `plugin.json` `author`, not the folder tree. Remote pins stay as GitHub URLs. Optional `displayName` / `description` on the listing, plus `marketplace/_brand//logo.*` (and `logo-small.*`), overlay the packed manifest — upstream Cursor plugins often ship repo-slug names and “plugin for Cursor” blurbs. ``` plugins/ @@ -94,10 +94,11 @@ A plugin folder: marketplace/// ├── .reforma-plugin/plugin.json ├── assets/logo.svg +├── assets/logo-small.svg # optional 12–14px glyph └── …convention folders (skills/, rules/, hooks/, …) ``` -`interface.brandColor` is the hex plate behind the logo. Optional `interface.brandColorDark` is the same plate in dark theme. +`interface.brandColor` is the hex plate behind the market `logo`. Optional `interface.brandColorDark` is the same plate in dark theme. Optional `logoSmall` is the chip / chat-chrome mark — not the plated card art. ```sh bun install diff --git a/marketplace/_brand/appwrite/logo-small.svg b/marketplace/_brand/appwrite/logo-small.svg new file mode 100644 index 0000000..f007ecc --- /dev/null +++ b/marketplace/_brand/appwrite/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/convex/logo-small.svg b/marketplace/_brand/convex/logo-small.svg new file mode 100644 index 0000000..ad669ab --- /dev/null +++ b/marketplace/_brand/convex/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/firebase/logo-small.png b/marketplace/_brand/firebase/logo-small.png new file mode 100644 index 0000000..77d53c6 Binary files /dev/null and b/marketplace/_brand/firebase/logo-small.png differ diff --git a/marketplace/_brand/gsap/logo-small.png b/marketplace/_brand/gsap/logo-small.png new file mode 100644 index 0000000..5c09afd Binary files /dev/null and b/marketplace/_brand/gsap/logo-small.png differ diff --git a/marketplace/_brand/linear/logo-small.svg b/marketplace/_brand/linear/logo-small.svg new file mode 100644 index 0000000..2a4f735 --- /dev/null +++ b/marketplace/_brand/linear/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/mapbox/logo-small.svg b/marketplace/_brand/mapbox/logo-small.svg new file mode 100644 index 0000000..f06f200 --- /dev/null +++ b/marketplace/_brand/mapbox/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/motion/logo-small.png b/marketplace/_brand/motion/logo-small.png new file mode 100644 index 0000000..6034708 Binary files /dev/null and b/marketplace/_brand/motion/logo-small.png differ diff --git a/marketplace/_brand/notion-workspace/logo-small.svg b/marketplace/_brand/notion-workspace/logo-small.svg new file mode 100644 index 0000000..14a424f --- /dev/null +++ b/marketplace/_brand/notion-workspace/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/notion/logo-small.svg b/marketplace/_brand/notion/logo-small.svg new file mode 100644 index 0000000..14a424f --- /dev/null +++ b/marketplace/_brand/notion/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/prisma/logo-small.svg b/marketplace/_brand/prisma/logo-small.svg new file mode 100644 index 0000000..710a919 --- /dev/null +++ b/marketplace/_brand/prisma/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/quiver/logo-small.svg b/marketplace/_brand/quiver/logo-small.svg new file mode 100644 index 0000000..f818c49 --- /dev/null +++ b/marketplace/_brand/quiver/logo-small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/marketplace/_brand/remotion/logo-small.png b/marketplace/_brand/remotion/logo-small.png new file mode 100644 index 0000000..c17ab6e Binary files /dev/null and b/marketplace/_brand/remotion/logo-small.png differ diff --git a/marketplace/_brand/resend/logo-small.svg b/marketplace/_brand/resend/logo-small.svg new file mode 100644 index 0000000..959ad60 --- /dev/null +++ b/marketplace/_brand/resend/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/sentry/logo-small.svg b/marketplace/_brand/sentry/logo-small.svg new file mode 100644 index 0000000..3797307 --- /dev/null +++ b/marketplace/_brand/sentry/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/stripe/logo-small.svg b/marketplace/_brand/stripe/logo-small.svg new file mode 100644 index 0000000..37e73bb --- /dev/null +++ b/marketplace/_brand/stripe/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/_brand/supabase/logo-small.svg b/marketplace/_brand/supabase/logo-small.svg new file mode 100644 index 0000000..ed8a55d --- /dev/null +++ b/marketplace/_brand/supabase/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/analytics/posthog/.reforma-plugin/plugin.json b/marketplace/analytics/posthog/.reforma-plugin/plugin.json index 0f7b4c6..1684388 100644 --- a/marketplace/analytics/posthog/.reforma-plugin/plugin.json +++ b/marketplace/analytics/posthog/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "PostHog", "brandColor": "#000000", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/analytics/posthog/assets/logo-small.svg b/marketplace/analytics/posthog/assets/logo-small.svg new file mode 100644 index 0000000..4855dee --- /dev/null +++ b/marketplace/analytics/posthog/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/auth/clerk/.reforma-plugin/plugin.json b/marketplace/auth/clerk/.reforma-plugin/plugin.json index da09778..71e8c79 100644 --- a/marketplace/auth/clerk/.reforma-plugin/plugin.json +++ b/marketplace/auth/clerk/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "mcpServers": "./mcp.json", "interface": { "displayName": "Clerk", - "brandColor": "#131316" - } + "brandColor": "#131316", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/auth/clerk/assets/logo-small.svg b/marketplace/auth/clerk/assets/logo-small.svg new file mode 100644 index 0000000..c9325e3 --- /dev/null +++ b/marketplace/auth/clerk/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/automation/composio/.reforma-plugin/plugin.json b/marketplace/automation/composio/.reforma-plugin/plugin.json index 9221b70..01c951c 100644 --- a/marketplace/automation/composio/.reforma-plugin/plugin.json +++ b/marketplace/automation/composio/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "Composio", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/automation/composio/assets/logo-small.png b/marketplace/automation/composio/assets/logo-small.png new file mode 100644 index 0000000..f22a214 Binary files /dev/null and b/marketplace/automation/composio/assets/logo-small.png differ diff --git a/marketplace/cms/sanity/.reforma-plugin/plugin.json b/marketplace/cms/sanity/.reforma-plugin/plugin.json index 14053ef..e597025 100644 --- a/marketplace/cms/sanity/.reforma-plugin/plugin.json +++ b/marketplace/cms/sanity/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "Sanity", "brandColor": "#0D0E12", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/cms/sanity/assets/logo-small.svg b/marketplace/cms/sanity/assets/logo-small.svg new file mode 100644 index 0000000..7f61f22 --- /dev/null +++ b/marketplace/cms/sanity/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/design/figma/.reforma-plugin/plugin.json b/marketplace/design/figma/.reforma-plugin/plugin.json index 5e01146..e6c779e 100644 --- a/marketplace/design/figma/.reforma-plugin/plugin.json +++ b/marketplace/design/figma/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "Figma", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/design/figma/assets/logo-small.png b/marketplace/design/figma/assets/logo-small.png new file mode 100644 index 0000000..70e4f03 Binary files /dev/null and b/marketplace/design/figma/assets/logo-small.png differ diff --git a/marketplace/media/elevenlabs/.reforma-plugin/plugin.json b/marketplace/media/elevenlabs/.reforma-plugin/plugin.json index d980a5d..fb0ba21 100644 --- a/marketplace/media/elevenlabs/.reforma-plugin/plugin.json +++ b/marketplace/media/elevenlabs/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "ElevenLabs", "brandColor": "#000000", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/media/elevenlabs/assets/logo-small.svg b/marketplace/media/elevenlabs/assets/logo-small.svg new file mode 100644 index 0000000..08731fe --- /dev/null +++ b/marketplace/media/elevenlabs/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/media/heygen/.reforma-plugin/plugin.json b/marketplace/media/heygen/.reforma-plugin/plugin.json index c9e7a32..efe104d 100644 --- a/marketplace/media/heygen/.reforma-plugin/plugin.json +++ b/marketplace/media/heygen/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "HeyGen", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/media/heygen/assets/logo-small.png b/marketplace/media/heygen/assets/logo-small.png new file mode 100644 index 0000000..5960250 Binary files /dev/null and b/marketplace/media/heygen/assets/logo-small.png differ diff --git a/marketplace/media/recraft/.reforma-plugin/plugin.json b/marketplace/media/recraft/.reforma-plugin/plugin.json index aaa480e..e77146e 100644 --- a/marketplace/media/recraft/.reforma-plugin/plugin.json +++ b/marketplace/media/recraft/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "Recraft", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/media/recraft/assets/logo-small.png b/marketplace/media/recraft/assets/logo-small.png new file mode 100644 index 0000000..49fbd6b Binary files /dev/null and b/marketplace/media/recraft/assets/logo-small.png differ diff --git a/marketplace/media/replicate/.reforma-plugin/plugin.json b/marketplace/media/replicate/.reforma-plugin/plugin.json index 49c66c0..38d9edf 100644 --- a/marketplace/media/replicate/.reforma-plugin/plugin.json +++ b/marketplace/media/replicate/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "Replicate", "brandColor": "#000000", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/media/replicate/assets/logo-small.svg b/marketplace/media/replicate/assets/logo-small.svg new file mode 100644 index 0000000..0e7a79f --- /dev/null +++ b/marketplace/media/replicate/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/media/svgator/.reforma-plugin/plugin.json b/marketplace/media/svgator/.reforma-plugin/plugin.json index 8caddeb..8c6084b 100644 --- a/marketplace/media/svgator/.reforma-plugin/plugin.json +++ b/marketplace/media/svgator/.reforma-plugin/plugin.json @@ -10,6 +10,8 @@ "interface": { "displayName": "SVGator", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/media/svgator/assets/logo-small.png b/marketplace/media/svgator/assets/logo-small.png new file mode 100644 index 0000000..c274815 Binary files /dev/null and b/marketplace/media/svgator/assets/logo-small.png differ diff --git a/marketplace/moods/bro-mode/assets/logo.svg b/marketplace/moods/bro-mode/assets/logo.svg index ab5d8e8..befb395 100644 --- a/marketplace/moods/bro-mode/assets/logo.svg +++ b/marketplace/moods/bro-mode/assets/logo.svg @@ -1,9 +1,11 @@ - - - \ No newline at end of file + + + + + + + + + + + diff --git a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json index 91f748f..c7259ca 100644 --- a/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/frontend-design/.reforma-plugin/plugin.json @@ -14,6 +14,8 @@ }, "interface": { "displayName": "Frontend Design", - "brandColor": "#000000" - } + "brandColor": "#000000", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/playbooks/frontend-design/assets/logo-small.svg b/marketplace/playbooks/frontend-design/assets/logo-small.svg new file mode 100644 index 0000000..7a83321 --- /dev/null +++ b/marketplace/playbooks/frontend-design/assets/logo-small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json index bff8f52..b261e8a 100644 --- a/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/react-best-practices/.reforma-plugin/plugin.json @@ -15,6 +15,8 @@ }, "interface": { "displayName": "React Best Practices", - "brandColor": "#000000" - } + "brandColor": "#000000", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/playbooks/react-best-practices/assets/logo-small.svg b/marketplace/playbooks/react-best-practices/assets/logo-small.svg new file mode 100644 index 0000000..657c276 --- /dev/null +++ b/marketplace/playbooks/react-best-practices/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/playbooks/web-design-guidelines/.reforma-plugin/plugin.json b/marketplace/playbooks/web-design-guidelines/.reforma-plugin/plugin.json index 6a6bda6..a7d6e15 100644 --- a/marketplace/playbooks/web-design-guidelines/.reforma-plugin/plugin.json +++ b/marketplace/playbooks/web-design-guidelines/.reforma-plugin/plugin.json @@ -11,6 +11,8 @@ "license": "MIT", "interface": { "displayName": "Web Design Guidelines", - "brandColor": "#000000" - } + "brandColor": "#000000", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/playbooks/web-design-guidelines/assets/logo-small.svg b/marketplace/playbooks/web-design-guidelines/assets/logo-small.svg new file mode 100644 index 0000000..b3a51f9 --- /dev/null +++ b/marketplace/playbooks/web-design-guidelines/assets/logo-small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json index 879460c..b46862a 100644 --- a/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json +++ b/marketplace/scheduling/cal-com/.reforma-plugin/plugin.json @@ -10,7 +10,9 @@ "interface": { "displayName": "Cal.com", "brandColor": "#000000", - "logo": "assets/logo.svg" + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" }, - "mcpServers": "./mcp.json" + "mcpServers": "./mcp.json", + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/scheduling/cal-com/assets/logo-small.svg b/marketplace/scheduling/cal-com/assets/logo-small.svg new file mode 100644 index 0000000..7c68155 --- /dev/null +++ b/marketplace/scheduling/cal-com/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/system/nextjs/.reforma-plugin/plugin.json b/marketplace/system/nextjs/.reforma-plugin/plugin.json index 78cec21..d024dee 100644 --- a/marketplace/system/nextjs/.reforma-plugin/plugin.json +++ b/marketplace/system/nextjs/.reforma-plugin/plugin.json @@ -7,6 +7,8 @@ "interface": { "displayName": "Next.js", "brandColor": "#000000", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/system/nextjs/assets/logo-small.svg b/marketplace/system/nextjs/assets/logo-small.svg new file mode 100644 index 0000000..7167462 --- /dev/null +++ b/marketplace/system/nextjs/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json index 561c2e3..3b84aaa 100644 --- a/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json +++ b/marketplace/system/shadcn-tailwind/.reforma-plugin/plugin.json @@ -12,6 +12,8 @@ "interface": { "displayName": "shadcn", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/system/shadcn-tailwind/assets/logo-small.png b/marketplace/system/shadcn-tailwind/assets/logo-small.png new file mode 100644 index 0000000..1027935 Binary files /dev/null and b/marketplace/system/shadcn-tailwind/assets/logo-small.png differ diff --git a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md index 90e0c1d..a472611 100644 --- a/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md +++ b/marketplace/system/shadcn-tailwind/skills/shadcn/SKILL.md @@ -11,7 +11,7 @@ description: >- Starter already has `components.json`, Tailwind 4, shadcn v4 (Base UI), and Reforma tokens. Do not re-init. Do not add a second UI framework. -Official registry is the default. Other `@ns` kit registries only when that kit's card is installed — the kit **Install** hook writes `registries` in `components.json`. MCP reads every registry in that file. +Official registry is the default. Other `@ns` kit registries only when that kit's card is installed — the kit **Install** hook runs `shadcn registry add`. CLI writes the namespace into `components.json` if that file exists, otherwise into `package.json`. Layout classes, `gap-*`, `size-*`: **Skill** `tailwind`. Colors: **Skill** `tokens`. diff --git a/marketplace/system/visuals/.reforma-plugin/plugin.json b/marketplace/system/visuals/.reforma-plugin/plugin.json index ef0aa8e..fcaf60d 100644 --- a/marketplace/system/visuals/.reforma-plugin/plugin.json +++ b/marketplace/system/visuals/.reforma-plugin/plugin.json @@ -5,6 +5,8 @@ "logo": "assets/logo.svg", "interface": { "displayName": "Visuals", - "brandColor": "#000000" - } + "brandColor": "#000000", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/system/visuals/assets/logo-small.svg b/marketplace/system/visuals/assets/logo-small.svg new file mode 100644 index 0000000..040e561 --- /dev/null +++ b/marketplace/system/visuals/assets/logo-small.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/marketplace/ui/aceternity/.reforma-plugin/plugin.json b/marketplace/ui/aceternity/.reforma-plugin/plugin.json index b65abda..8fd19a7 100644 --- a/marketplace/ui/aceternity/.reforma-plugin/plugin.json +++ b/marketplace/ui/aceternity/.reforma-plugin/plugin.json @@ -13,6 +13,8 @@ "interface": { "displayName": "Aceternity", "brandColor": "#000000", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/ui/aceternity/assets/logo-small.png b/marketplace/ui/aceternity/assets/logo-small.png new file mode 100644 index 0000000..ab6a3b2 Binary files /dev/null and b/marketplace/ui/aceternity/assets/logo-small.png differ diff --git a/marketplace/ui/aceternity/hooks/install.sh b/marketplace/ui/aceternity/hooks/install.sh index 75251d2..70a66d5 100755 --- a/marketplace/ui/aceternity/hooks/install.sh +++ b/marketplace/ui/aceternity/hooks/install.sh @@ -1,8 +1,4 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 -if bun -e 'const j = JSON.parse(await Bun.file("components.json").text()); process.exit(j.registries?.["@aceternity"] ? 0 : 1)'; then - exit 0 -fi bunx shadcn registry add '@aceternity=https://ui.aceternity.com/registry/{name}.json' --silent diff --git a/marketplace/ui/aceternity/hooks/uninstall.sh b/marketplace/ui/aceternity/hooks/uninstall.sh index 25f5175..0412aa6 100755 --- a/marketplace/ui/aceternity/hooks/uninstall.sh +++ b/marketplace/ui/aceternity/hooks/uninstall.sh @@ -1,12 +1,14 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 bun -e ' -const p = "components.json"; -const j = JSON.parse(await Bun.file(p).text()); -if (!j.registries?.["@aceternity"]) process.exit(0); -delete j.registries["@aceternity"]; -if (Object.keys(j.registries).length === 0) delete j.registries; -await Bun.write(p, JSON.stringify(j, null, 4) + "\n"); +const ns = "@aceternity"; +for (const p of ["components.json", "package.json"]) { + if (!await Bun.file(p).exists()) continue; + const j = JSON.parse(await Bun.file(p).text()); + if (!j.registries?.[ns]) continue; + delete j.registries[ns]; + if (Object.keys(j.registries).length === 0) delete j.registries; + await Bun.write(p, JSON.stringify(j, null, 2) + "\n"); +} ' diff --git a/marketplace/ui/aceternity/skills/aceternity/SKILL.md b/marketplace/ui/aceternity/skills/aceternity/SKILL.md index 828cc1a..8d60fd1 100644 --- a/marketplace/ui/aceternity/skills/aceternity/SKILL.md +++ b/marketplace/ui/aceternity/skills/aceternity/SKILL.md @@ -16,7 +16,7 @@ Some items on the site are paid. Install only names the registry actually return ## Register -The **Install** hook writes `@aceternity` into `components.json`. If that key is missing, add `@aceternity` → `https://ui.aceternity.com/registry/{name}.json`, then continue. +The **Install** hook runs `bunx shadcn registry add`. If `@aceternity` is missing, run `bunx shadcn registry add '@aceternity=https://ui.aceternity.com/registry/{name}.json'`, then continue. ## Find diff --git a/marketplace/ui/coss/.reforma-plugin/plugin.json b/marketplace/ui/coss/.reforma-plugin/plugin.json index 9cf1c12..6f07c9a 100644 --- a/marketplace/ui/coss/.reforma-plugin/plugin.json +++ b/marketplace/ui/coss/.reforma-plugin/plugin.json @@ -14,6 +14,8 @@ }, "interface": { "displayName": "coss", - "brandColor": "#111111" - } + "brandColor": "#111111", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/ui/coss/assets/logo-small.svg b/marketplace/ui/coss/assets/logo-small.svg new file mode 100644 index 0000000..a6d9372 --- /dev/null +++ b/marketplace/ui/coss/assets/logo-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/marketplace/ui/coss/hooks/install.sh b/marketplace/ui/coss/hooks/install.sh index c4a2edc..1709fa1 100755 --- a/marketplace/ui/coss/hooks/install.sh +++ b/marketplace/ui/coss/hooks/install.sh @@ -1,8 +1,4 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 -if bun -e 'const j = JSON.parse(await Bun.file("components.json").text()); process.exit(j.registries?.["@coss"] ? 0 : 1)'; then - exit 0 -fi bunx shadcn registry add '@coss=https://coss.com/ui/r/{name}.json' --silent diff --git a/marketplace/ui/coss/hooks/uninstall.sh b/marketplace/ui/coss/hooks/uninstall.sh index e4e0ee6..ec51f45 100755 --- a/marketplace/ui/coss/hooks/uninstall.sh +++ b/marketplace/ui/coss/hooks/uninstall.sh @@ -1,12 +1,14 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 bun -e ' -const p = "components.json"; -const j = JSON.parse(await Bun.file(p).text()); -if (!j.registries?.["@coss"]) process.exit(0); -delete j.registries["@coss"]; -if (Object.keys(j.registries).length === 0) delete j.registries; -await Bun.write(p, JSON.stringify(j, null, 4) + "\n"); +const ns = "@coss"; +for (const p of ["components.json", "package.json"]) { + if (!await Bun.file(p).exists()) continue; + const j = JSON.parse(await Bun.file(p).text()); + if (!j.registries?.[ns]) continue; + delete j.registries[ns]; + if (Object.keys(j.registries).length === 0) delete j.registries; + await Bun.write(p, JSON.stringify(j, null, 2) + "\n"); +} ' diff --git a/marketplace/ui/coss/skills/coss/SKILL.md b/marketplace/ui/coss/skills/coss/SKILL.md index 9f7e5df..8583cf4 100644 --- a/marketplace/ui/coss/skills/coss/SKILL.md +++ b/marketplace/ui/coss/skills/coss/SKILL.md @@ -16,7 +16,7 @@ Do not add `@coss/ui` or `@coss/style` wholesale (fights the starter theme). One ## Register -The **Install** hook writes `@coss` into `components.json`. If that key is missing, add `@coss` → `https://coss.com/ui/r/{name}.json`, then continue. +The **Install** hook runs `bunx shadcn registry add`. If `@coss` is missing, run `bunx shadcn registry add '@coss=https://coss.com/ui/r/{name}.json'`, then continue. ## Find diff --git a/marketplace/ui/flexnative/.reforma-plugin/plugin.json b/marketplace/ui/flexnative/.reforma-plugin/plugin.json index 65bf935..aabd9ea 100644 --- a/marketplace/ui/flexnative/.reforma-plugin/plugin.json +++ b/marketplace/ui/flexnative/.reforma-plugin/plugin.json @@ -15,6 +15,8 @@ "interface": { "displayName": "Flexnative", "brandColor": "#0A0A0A", - "logo": "assets/logo.png" - } + "logo": "assets/logo.png", + "logoSmall": "assets/logo-small.png" + }, + "logoSmall": "assets/logo-small.png" } diff --git a/marketplace/ui/flexnative/assets/logo-small.png b/marketplace/ui/flexnative/assets/logo-small.png new file mode 100644 index 0000000..6d732ee Binary files /dev/null and b/marketplace/ui/flexnative/assets/logo-small.png differ diff --git a/marketplace/ui/flexnative/hooks/install.sh b/marketplace/ui/flexnative/hooks/install.sh index 8e3379e..f0580cf 100755 --- a/marketplace/ui/flexnative/hooks/install.sh +++ b/marketplace/ui/flexnative/hooks/install.sh @@ -1,8 +1,4 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 -if bun -e 'const j = JSON.parse(await Bun.file("components.json").text()); process.exit(j.registries?.["@flx"] ? 0 : 1)'; then - exit 0 -fi bunx shadcn registry add '@flx=https://ui.flexnative.com/r/{name}.json' --silent diff --git a/marketplace/ui/flexnative/hooks/uninstall.sh b/marketplace/ui/flexnative/hooks/uninstall.sh index 760797e..ad41b7b 100755 --- a/marketplace/ui/flexnative/hooks/uninstall.sh +++ b/marketplace/ui/flexnative/hooks/uninstall.sh @@ -1,12 +1,14 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 bun -e ' -const p = "components.json"; -const j = JSON.parse(await Bun.file(p).text()); -if (!j.registries?.["@flx"]) process.exit(0); -delete j.registries["@flx"]; -if (Object.keys(j.registries).length === 0) delete j.registries; -await Bun.write(p, JSON.stringify(j, null, 4) + "\n"); +const ns = "@flx"; +for (const p of ["components.json", "package.json"]) { + if (!await Bun.file(p).exists()) continue; + const j = JSON.parse(await Bun.file(p).text()); + if (!j.registries?.[ns]) continue; + delete j.registries[ns]; + if (Object.keys(j.registries).length === 0) delete j.registries; + await Bun.write(p, JSON.stringify(j, null, 2) + "\n"); +} ' diff --git a/marketplace/ui/flexnative/skills/flexnative/SKILL.md b/marketplace/ui/flexnative/skills/flexnative/SKILL.md index 5c4bf1e..ae927fa 100644 --- a/marketplace/ui/flexnative/skills/flexnative/SKILL.md +++ b/marketplace/ui/flexnative/skills/flexnative/SKILL.md @@ -14,7 +14,7 @@ Registry: `@flx` → `https://ui.flexnative.com/r/{name}.json`. Browse: `https:/ ## Register -The **Install** hook writes `@flx` into `components.json`. If that key is missing, add `@flx` → `https://ui.flexnative.com/r/{name}.json`, then continue. +The **Install** hook runs `bunx shadcn registry add`. If `@flx` is missing, run `bunx shadcn registry add '@flx=https://ui.flexnative.com/r/{name}.json'`, then continue. ## Find diff --git a/marketplace/ui/magic-ui/hooks/install.sh b/marketplace/ui/magic-ui/hooks/install.sh index 824247c..44311dd 100755 --- a/marketplace/ui/magic-ui/hooks/install.sh +++ b/marketplace/ui/magic-ui/hooks/install.sh @@ -1,8 +1,4 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 -if bun -e 'const j = JSON.parse(await Bun.file("components.json").text()); process.exit(j.registries?.["@magicui"] ? 0 : 1)'; then - exit 0 -fi bunx shadcn registry add '@magicui=https://magicui.design/r/{name}.json' --silent diff --git a/marketplace/ui/magic-ui/hooks/uninstall.sh b/marketplace/ui/magic-ui/hooks/uninstall.sh index 34ca6c1..635b5ec 100755 --- a/marketplace/ui/magic-ui/hooks/uninstall.sh +++ b/marketplace/ui/magic-ui/hooks/uninstall.sh @@ -1,12 +1,14 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 bun -e ' -const p = "components.json"; -const j = JSON.parse(await Bun.file(p).text()); -if (!j.registries?.["@magicui"]) process.exit(0); -delete j.registries["@magicui"]; -if (Object.keys(j.registries).length === 0) delete j.registries; -await Bun.write(p, JSON.stringify(j, null, 4) + "\n"); +const ns = "@magicui"; +for (const p of ["components.json", "package.json"]) { + if (!await Bun.file(p).exists()) continue; + const j = JSON.parse(await Bun.file(p).text()); + if (!j.registries?.[ns]) continue; + delete j.registries[ns]; + if (Object.keys(j.registries).length === 0) delete j.registries; + await Bun.write(p, JSON.stringify(j, null, 2) + "\n"); +} ' diff --git a/marketplace/ui/magic-ui/skills/magic-ui/SKILL.md b/marketplace/ui/magic-ui/skills/magic-ui/SKILL.md index 9a7c287..792d69c 100644 --- a/marketplace/ui/magic-ui/skills/magic-ui/SKILL.md +++ b/marketplace/ui/magic-ui/skills/magic-ui/SKILL.md @@ -14,7 +14,7 @@ Registry: `@magicui` → `https://magicui.design/r/{name}.json`. Browse: `https: ## Register -The **Install** hook writes `@magicui` into `components.json`. If that key is missing, add `@magicui` → `https://magicui.design/r/{name}.json`, then continue. +The **Install** hook runs `bunx shadcn registry add`. If `@magicui` is missing, run `bunx shadcn registry add '@magicui=https://magicui.design/r/{name}.json'`, then continue. ## Find diff --git a/marketplace/ui/tailark/hooks/install.sh b/marketplace/ui/tailark/hooks/install.sh index eed67d2..4f11630 100755 --- a/marketplace/ui/tailark/hooks/install.sh +++ b/marketplace/ui/tailark/hooks/install.sh @@ -1,8 +1,4 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 -if bun -e 'const j = JSON.parse(await Bun.file("components.json").text()); process.exit(j.registries?.["@tailark-oss"] ? 0 : 1)'; then - exit 0 -fi bunx shadcn registry add '@tailark-oss=https://oss.tailark.com/r/{name}.json' --silent diff --git a/marketplace/ui/tailark/hooks/uninstall.sh b/marketplace/ui/tailark/hooks/uninstall.sh index dd6641c..3feb8ac 100755 --- a/marketplace/ui/tailark/hooks/uninstall.sh +++ b/marketplace/ui/tailark/hooks/uninstall.sh @@ -1,12 +1,14 @@ #!/bin/sh set -e cd "${REFORMA_PROJECT_DIR:?}" -[ -f components.json ] || exit 0 bun -e ' -const p = "components.json"; -const j = JSON.parse(await Bun.file(p).text()); -if (!j.registries?.["@tailark-oss"]) process.exit(0); -delete j.registries["@tailark-oss"]; -if (Object.keys(j.registries).length === 0) delete j.registries; -await Bun.write(p, JSON.stringify(j, null, 4) + "\n"); +const ns = "@tailark-oss"; +for (const p of ["components.json", "package.json"]) { + if (!await Bun.file(p).exists()) continue; + const j = JSON.parse(await Bun.file(p).text()); + if (!j.registries?.[ns]) continue; + delete j.registries[ns]; + if (Object.keys(j.registries).length === 0) delete j.registries; + await Bun.write(p, JSON.stringify(j, null, 2) + "\n"); +} ' diff --git a/marketplace/ui/tailark/skills/tailark/SKILL.md b/marketplace/ui/tailark/skills/tailark/SKILL.md index e394f9f..848f64b 100644 --- a/marketplace/ui/tailark/skills/tailark/SKILL.md +++ b/marketplace/ui/tailark/skills/tailark/SKILL.md @@ -21,7 +21,7 @@ Paid Quartz content is a separate namespace (`@tailark` → `https://tailark.com ## Register -The **Install** hook writes `@tailark-oss` into `components.json`. If that key is missing, add `@tailark-oss` → `https://oss.tailark.com/r/{name}.json`, then continue. +The **Install** hook runs `bunx shadcn registry add`. If `@tailark-oss` is missing, run `bunx shadcn registry add '@tailark-oss=https://oss.tailark.com/r/{name}.json'`, then continue. ## Find diff --git a/marketplace/workspace/context7/.reforma-plugin/plugin.json b/marketplace/workspace/context7/.reforma-plugin/plugin.json index a87f455..be58882 100644 --- a/marketplace/workspace/context7/.reforma-plugin/plugin.json +++ b/marketplace/workspace/context7/.reforma-plugin/plugin.json @@ -5,11 +5,13 @@ "homepage": "https://context7.com/docs/howto/oauth", "interface": { "brandColor": "#000000", - "displayName": "Context7" + "displayName": "Context7", + "logoSmall": "assets/logo-small.svg" }, "mcpServers": "./mcp.json", "agent": { "discover": true, "installApproval": false - } + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/workspace/context7/assets/logo-small.svg b/marketplace/workspace/context7/assets/logo-small.svg new file mode 100644 index 0000000..cf2201e --- /dev/null +++ b/marketplace/workspace/context7/assets/logo-small.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json index 8d01a27..f30bafd 100644 --- a/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json +++ b/marketplace/workspace/github-mcp/.reforma-plugin/plugin.json @@ -13,6 +13,8 @@ "interface": { "displayName": "GitHub", "brandColor": "#FFFFFF", - "logo": "assets/logo.svg" - } + "logo": "assets/logo.svg", + "logoSmall": "assets/logo-small.svg" + }, + "logoSmall": "assets/logo-small.svg" } diff --git a/marketplace/workspace/github-mcp/assets/logo-small.svg b/marketplace/workspace/github-mcp/assets/logo-small.svg new file mode 100644 index 0000000..2b13789 --- /dev/null +++ b/marketplace/workspace/github-mcp/assets/logo-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/scripts/pack/logos.test.ts b/scripts/pack/logos.test.ts index a329593..8354cd7 100644 --- a/scripts/pack/logos.test.ts +++ b/scripts/pack/logos.test.ts @@ -83,4 +83,32 @@ describe("applyCatalogOverlay", () => { interface: { logo: "https://stripe.com/favicon.ico" }, }); }); + + it("stamps logoSmall from the listing", () => { + const dir = mkdtempSync(join(tmpdir(), "overlay-")); + const pluginDir = join(dir, "gsap"); + + dirs.push(dir); + mkdirSync(join(pluginDir, ".reforma-plugin"), { recursive: true }); + writeFileSync( + join(pluginDir, ".reforma-plugin/plugin.json"), + `${JSON.stringify({ name: "gsap-skills" }, null, 4)}\n`, + ); + + applyCatalogOverlay(pluginDir, { + name: "gsap", + source: "https://github.com/greensock/gsap-skills/tree/abc", + category: "ui", + logoSmall: "https://example.com/gsap-small.svg", + }); + + expect( + JSON.parse( + readFileSync(join(pluginDir, ".reforma-plugin/plugin.json"), "utf8"), + ), + ).toMatchObject({ + logoSmall: "https://example.com/gsap-small.svg", + interface: { logoSmall: "https://example.com/gsap-small.svg" }, + }); + }); }); diff --git a/scripts/pack/logos.ts b/scripts/pack/logos.ts index ddc5250..735faab 100644 --- a/scripts/pack/logos.ts +++ b/scripts/pack/logos.ts @@ -112,7 +112,7 @@ export async function materializeLogo( export function readLogoFields(json: Record): { logo?: string; - logoDark?: string; + logoSmall?: string; } { const iface = isRecord(json.interface) ? json.interface : undefined; @@ -123,11 +123,11 @@ export function readLogoFields(json: Record): { : typeof iface?.logo === "string" ? iface.logo : undefined, - logoDark: - typeof json.logoDark === "string" - ? json.logoDark - : typeof iface?.logoDark === "string" - ? iface.logoDark + logoSmall: + typeof json.logoSmall === "string" + ? json.logoSmall + : typeof iface?.logoSmall === "string" + ? iface.logoSmall : undefined, }; } @@ -135,14 +135,28 @@ export function readLogoFields(json: Record): { export function writeLogoFields( json: Record, logo: string, - logoDark: string, + logoSmall?: string, ): void { json.logo = logo; - json.logoDark = logoDark; if (isRecord(json.interface)) { json.interface.logo = logo; - json.interface.logoDark = logoDark; + } + + if (logoSmall && logoSmall !== logo) { + json.logoSmall = logoSmall; + + if (isRecord(json.interface)) { + json.interface.logoSmall = logoSmall; + } + + return; + } + + delete json.logoSmall; + + if (isRecord(json.interface)) { + delete json.interface.logoSmall; } } @@ -166,37 +180,39 @@ export async function normalizePluginLogos(pluginDir: string): Promise { } const logo = await materializeLogo(pluginDir, fields.logo, "logo"); - const logoDark = - fields.logoDark && fields.logoDark !== fields.logo - ? await materializeLogo(pluginDir, fields.logoDark, "logo-dark") - : logo; + const logoSmall = + fields.logoSmall && fields.logoSmall !== fields.logo + ? await materializeLogo(pluginDir, fields.logoSmall, "logo-small") + : undefined; if (!logo) { delete json.logo; - delete json.logoDark; + delete json.logoSmall; if (isRecord(json.interface)) { delete json.interface.logo; - delete json.interface.logoDark; + delete json.interface.logoSmall; } writeFileSync(manifestPath, `${JSON.stringify(json, null, 4)}\n`); return; } - writeLogoFields(json, logo, logoDark ?? logo); + writeLogoFields(json, logo, logoSmall); writeFileSync(manifestPath, `${JSON.stringify(json, null, 4)}\n`); } -function listingBrandLogo(name: string): string | undefined { +function listingBrandFile(name: string, stem: string): string | undefined { const dir = join(ROOT, "marketplace/_brand", name); if (!existsSync(dir)) { return undefined; } + const prefix = `${stem}.`; + for (const file of readdirSync(dir)) { - if (file.startsWith("logo.") && LOGO_EXT.has(extOf(file))) { + if (file.startsWith(prefix) && LOGO_EXT.has(extOf(file))) { return join(dir, file); } } @@ -204,9 +220,50 @@ function listingBrandLogo(name: string): string | undefined { return undefined; } +function overlayLogo( + pluginDir: string, + listingValue: string | undefined, + name: string, + stem: string, +): string | undefined { + const http = + listingValue && /^https?:\/\//i.test(listingValue) + ? listingValue + : undefined; + const fromListing = + listingValue && !http ? join(ROOT, listingValue) : undefined; + const file = fromListing ?? (http ? undefined : listingBrandFile(name, stem)); + + if (http) { + return http; + } + + if (!file) { + return undefined; + } + + if (!existsSync(file)) { + throw new Error(`overlay ${stem} missing ${file}`); + } + + const ext = extOf(file); + + if (!LOGO_EXT.has(ext)) { + throw new Error(`unsupported overlay ${stem} ${file}`); + } + + const suffix = extname(file).toLowerCase() === ".jpeg" ? ".jpg" : extname(file).toLowerCase(); + const rel = `assets/${stem}${suffix}`; + + mkdirSync(join(pluginDir, "assets"), { recursive: true }); + cpSync(file, join(pluginDir, rel)); + + return rel; +} + function stampInterface( json: Record, - patch: { displayName?: string; brandColor?: string; logo?: string }, + patch: { displayName?: string; brandColor?: string; logo?: string; logoSmall?: string }, ): void { const iface = isRecord(json.interface) ? json.interface : {}; @@ -222,10 +279,14 @@ function stampInterface( iface.logo = patch.logo; } + if (patch.logoSmall) { + iface.logoSmall = patch.logoSmall; + } + json.interface = iface; } -/** Overlay display name, description, and logo from marketplace.json / `_brand`. */ +/** Overlay display name, description, and logos from marketplace.json / `_brand`. */ export function applyCatalogOverlay( pluginDir: string, listing: MarketplaceListing, @@ -242,38 +303,20 @@ export function applyCatalogOverlay( throw new Error(`invalid plugin.json ${manifestPath}`); } - const httpLogo = - listing.logo && /^https?:\/\//i.test(listing.logo) - ? listing.logo - : undefined; - const fromListing = - listing.logo && !httpLogo ? join(ROOT, listing.logo) : undefined; - const file = fromListing ?? (httpLogo ? undefined : listingBrandLogo(listing.name)); - let logo = httpLogo; - - if (file) { - if (!existsSync(file)) { - throw new Error(`overlay logo missing ${file}`); - } - - const ext = extOf(file); - - if (!LOGO_EXT.has(ext)) { - throw new Error(`unsupported overlay logo ${file}`); - } - - const rel = `assets/logo${extname(file).toLowerCase() === ".jpeg" ? ".jpg" : extname(file).toLowerCase()}`; - - mkdirSync(join(pluginDir, "assets"), { recursive: true }); - cpSync(file, join(pluginDir, rel)); - logo = rel; - } + const logo = overlayLogo(pluginDir, listing.logo, listing.name, "logo"); + const logoSmall = overlayLogo( + pluginDir, + listing.logoSmall, + listing.name, + "logo-small", + ); if ( !listing.displayName && !listing.description && !listing.brandColor && - !logo + !logo && + !logoSmall ) { return; } @@ -295,6 +338,11 @@ export function applyCatalogOverlay( stampInterface(json, { logo }); } + if (logoSmall) { + json.logoSmall = logoSmall; + stampInterface(json, { logoSmall }); + } + writeFileSync(manifestPath, `${JSON.stringify(json, null, 4)}\n`); } diff --git a/scripts/pack/shared.ts b/scripts/pack/shared.ts index e4fb7de..2ea46a6 100644 --- a/scripts/pack/shared.ts +++ b/scripts/pack/shared.ts @@ -49,6 +49,7 @@ export type MarketplaceListing = { displayName?: string; description?: string; logo?: string; + logoSmall?: string; brandColor?: string; }; @@ -137,6 +138,7 @@ export function parseMarketplace(raw: unknown): { ...optionalListingField(plugin, "displayName"), ...optionalListingField(plugin, "description"), ...optionalListingField(plugin, "logo"), + ...optionalListingField(plugin, "logoSmall"), ...optionalListingField(plugin, "brandColor"), }); } @@ -151,7 +153,7 @@ export function parseMarketplace(raw: unknown): { function optionalListingField( plugin: Record, - key: "displayName" | "description" | "logo" | "brandColor", + key: "displayName" | "description" | "logo" | "logoSmall" | "brandColor", ): Partial> { const value = plugin[key];