@create-ui/cli 0.5.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-RMTTHCB3.js → chunk-2ELKDGGM.js} +3 -3
- package/dist/{chunk-RMTTHCB3.js.map → chunk-2ELKDGGM.js.map} +1 -1
- package/dist/chunk-643QI2I2.js +102 -0
- package/dist/chunk-643QI2I2.js.map +1 -0
- package/dist/{chunk-NQFMXHMH.js → chunk-KQTXDVKV.js} +3 -3
- package/dist/chunk-KQTXDVKV.js.map +1 -0
- package/dist/index.d.ts +360 -360
- package/dist/index.js +26 -26
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.js +1 -1
- package/dist/schema/index.d.ts +715 -715
- package/dist/skills/createui/SKILL.md +199 -177
- package/dist/skills/createui/agents/openai.yml +1 -1
- package/dist/skills/createui/cli.md +42 -42
- package/dist/skills/createui/customization.md +20 -15
- package/dist/skills/createui/evals/evals.json +68 -5
- package/dist/skills/createui/mcp.md +14 -5
- package/dist/skills/createui/reference/accordion.md +127 -0
- package/dist/skills/createui/reference/app-store-badge.md +88 -0
- package/dist/skills/createui/reference/aspect-ratio.md +52 -0
- package/dist/skills/createui/reference/avatar.md +230 -0
- package/dist/skills/createui/reference/badge.md +110 -0
- package/dist/skills/createui/reference/breadcrumb.md +153 -0
- package/dist/skills/createui/reference/button-group.md +116 -0
- package/dist/skills/createui/reference/button.md +104 -0
- package/dist/skills/createui/reference/checkbox-group.md +118 -0
- package/dist/skills/createui/reference/checkbox.md +79 -0
- package/dist/skills/createui/reference/chip.md +115 -0
- package/dist/skills/createui/reference/close-button.md +83 -0
- package/dist/skills/createui/reference/country-flag.md +109 -0
- package/dist/skills/createui/reference/credit-card-input.md +76 -0
- package/dist/skills/createui/reference/date-input.md +71 -0
- package/dist/skills/createui/reference/dropdown-menu.md +164 -0
- package/dist/skills/createui/reference/field.md +186 -0
- package/dist/skills/createui/reference/info-tooltip.md +110 -0
- package/dist/skills/createui/reference/inline-alert.md +146 -0
- package/dist/skills/createui/reference/input-group.md +171 -0
- package/dist/skills/createui/reference/input-otp.md +130 -0
- package/dist/skills/createui/reference/input-stepper.md +120 -0
- package/dist/skills/createui/reference/input.md +118 -0
- package/dist/skills/createui/reference/label.md +121 -0
- package/dist/skills/createui/reference/pagination.md +157 -0
- package/dist/skills/createui/reference/phone-input.md +77 -0
- package/dist/skills/createui/reference/progress.md +158 -0
- package/dist/skills/createui/reference/radio-group.md +133 -0
- package/dist/skills/createui/reference/radio.md +79 -0
- package/dist/skills/createui/reference/scroll-area.md +212 -0
- package/dist/skills/createui/reference/segmented-control.md +146 -0
- package/dist/skills/createui/reference/select.md +204 -0
- package/dist/skills/createui/reference/separator.md +99 -0
- package/dist/skills/createui/reference/social-login-button.md +130 -0
- package/dist/skills/createui/reference/spinner.md +68 -0
- package/dist/skills/createui/reference/status-badge.md +89 -0
- package/dist/skills/createui/reference/switch-group.md +122 -0
- package/dist/skills/createui/reference/switch.md +75 -0
- package/dist/skills/createui/reference/tab-menu.md +165 -0
- package/dist/skills/createui/reference/text-link.md +84 -0
- package/dist/skills/createui/reference/textarea.md +50 -0
- package/dist/skills/createui/reference/toast.md +162 -0
- package/dist/skills/createui/reference/tooltip.md +63 -0
- package/dist/skills/createui/rules/composition.md +41 -25
- package/dist/skills/createui/rules/design.md +266 -0
- package/dist/skills/createui/rules/forms.md +44 -15
- package/dist/skills/createui/rules/icons.md +64 -18
- package/dist/skills/createui/rules/styling.md +53 -14
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-M5DYT2NE.js +0 -64
- package/dist/chunk-M5DYT2NE.js.map +0 -1
- package/dist/chunk-NQFMXHMH.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {U}from'./chunk-
|
|
2
|
-
export{I as a};//# sourceMappingURL=chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {U}from'./chunk-KQTXDVKV.js';import {u}from'./chunk-Y7WZRQWW.js';import R from'fuzzysort';import {z as z$1}from'zod';async function I(r,t){let{query:a,limit:n,offset:g,useCache:i}=t||{},e=[];for(let u of r){let y=((await U(u,{useCache:i})).items||[]).map(l=>({name:l.name,type:l.type,description:l.description,registry:u,addCommandArgument:E(l.name,u)}));e=e.concat(y);}a&&(e=z(e,{query:a,limit:e.length,keys:["name","description"]}));let s=g||0,m=n||e.length,c=e.length,f={pagination:{total:c,offset:s,limit:m,hasMore:s+m<c},items:e.slice(s,s+m)};return u.parse(f)}var x=z$1.object({name:z$1.string(),type:z$1.string().optional(),description:z$1.string().optional(),registry:z$1.string().optional(),addCommandArgument:z$1.string().optional()}).passthrough();function z(r,t){t={limit:100,threshold:-1e4,...t};let n=R.go(t.query,r,{keys:t.keys,threshold:t.threshold,limit:t.limit}).map(g=>g.obj);return z$1.array(x).parse(n)}function A(r){try{return new URL(r),!0}catch{return false}}function E(r,t){if(!A(t))return r;let a=t.indexOf("://")+3,n=t.indexOf("/",a);if(n===-1){let h=t.indexOf("?",a);if(h!==-1){let y=t.substring(0,h),b=t.substring(h).replace(/\bregistry\b/g,r);return y+b}return t}let g=t.substring(0,n),i=t.substring(n),e=i.indexOf("?")!==-1?i.indexOf("?"):i.length,s=i.substring(0,e),m=i.substring(e),c=s.lastIndexOf("registry"),f=s;c!==-1&&(f=s.substring(0,c)+r+s.substring(c+8));let u=m.replace(/\bregistry\b/g,r);return g+f+u}
|
|
2
|
+
export{I as a};//# sourceMappingURL=chunk-2ELKDGGM.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-2ELKDGGM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/search.ts"],"names":["searchRegistries","registries","options","query","limit","offset","useCache","allItems","registry","itemsWithRegistry","getRegistry","item","buildRegistryItemNameFromRegistry","searchItems","paginationOffset","paginationLimit","totalItems","result","searchResultsSchema","searchableItemSchema","z","items","results","fuzzysort","isUrl","string","name","protocolEnd","hostEnd","queryStart","beforeQuery","updatedQuery","hostPart","pathAndQuery","pathEnd","pathOnly","queryAndAfter","lastIndex","updatedPath"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/registry/search.ts"],"names":["searchRegistries","registries","options","query","limit","offset","useCache","allItems","registry","itemsWithRegistry","getRegistry","item","buildRegistryItemNameFromRegistry","searchItems","paginationOffset","paginationLimit","totalItems","result","searchResultsSchema","searchableItemSchema","z","items","results","fuzzysort","isUrl","string","name","protocolEnd","hostEnd","queryStart","beforeQuery","updatedQuery","hostPart","pathAndQuery","pathEnd","pathOnly","queryAndAfter","lastIndex","updatedPath"],"mappings":"4HAOA,eAAsBA,CAAAA,CACpBC,CAAAA,CACAC,CAAAA,CAOA,CACA,GAAM,CAAE,KAAA,CAAAC,EAAO,KAAA,CAAAC,CAAAA,CAAO,OAAAC,CAAAA,CAAQ,QAAA,CAAAC,CAAS,CAAA,CAAIJ,GAAW,EAAC,CAEnDK,EAAqD,EAAC,CAE1D,QAAWC,CAAAA,IAAYP,CAAAA,CAAY,CAGjC,IAAMQ,CAAAA,CAAAA,CAAAA,CAFe,MAAMC,CAAAA,CAAYF,CAAAA,CAAU,CAAE,QAAA,CAAAF,CAAS,CAAC,CAAA,EAErB,KAAA,EAAS,EAAC,EAAG,IAAKK,CAAAA,GAAU,CAClE,KAAMA,CAAAA,CAAK,IAAA,CACX,KAAMA,CAAAA,CAAK,IAAA,CACX,YAAaA,CAAAA,CAAK,WAAA,CAClB,SAAUH,CAAAA,CACV,kBAAA,CAAoBI,EAClBD,CAAAA,CAAK,IAAA,CACLH,CACF,CACF,CAAA,CAAE,CAAA,CAEFD,CAAAA,CAAWA,EAAS,MAAA,CAAOE,CAAiB,EAC9C,CAEIN,CAAAA,GACFI,EAAWM,CAAAA,CAAYN,CAAAA,CAAU,CAC/B,KAAA,CAAAJ,CAAAA,CACA,MAAOI,CAAAA,CAAS,MAAA,CAChB,KAAM,CAAC,MAAA,CAAQ,aAAa,CAC9B,CAAC,CAAA,CAAA,CAGH,IAAMO,EAAmBT,CAAAA,EAAU,CAAA,CAC7BU,EAAkBX,CAAAA,EAASG,CAAAA,CAAS,OACpCS,CAAAA,CAAaT,CAAAA,CAAS,MAAA,CAEtBU,CAAAA,CAA8C,CAClD,UAAA,CAAY,CACV,MAAOD,CAAAA,CACP,MAAA,CAAQF,EACR,KAAA,CAAOC,CAAAA,CACP,OAAA,CAASD,CAAAA,CAAmBC,EAAkBC,CAChD,CAAA,CACA,MAAOT,CAAAA,CAAS,KAAA,CAAMO,EAAkBA,CAAAA,CAAmBC,CAAe,CAC5E,CAAA,CAEA,OAAOG,EAAoB,KAAA,CAAMD,CAAM,CACzC,CAEA,IAAME,EAAuBC,GAAAA,CAC1B,MAAA,CAAO,CACN,IAAA,CAAMA,IAAE,MAAA,EAAO,CACf,KAAMA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAC1B,YAAaA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CACjC,SAAUA,GAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAC9B,kBAAA,CAAoBA,GAAAA,CAAE,QAAO,CAAE,QAAA,EACjC,CAAC,CAAA,CACA,aAAY,CAIf,SAASP,EASPQ,CAAAA,CACAnB,CAAAA,CAGA,CACAA,CAAAA,CAAU,CACR,MAAO,GAAA,CACP,SAAA,CAAW,KACX,GAAGA,CACL,CAAA,CAQA,IAAMoB,EANgBC,CAAAA,CAAU,EAAA,CAAGrB,EAAQ,KAAA,CAAOmB,CAAAA,CAAO,CACvD,IAAA,CAAMnB,CAAAA,CAAQ,IAAA,CACd,SAAA,CAAWA,EAAQ,SAAA,CACnB,KAAA,CAAOA,EAAQ,KACjB,CAAC,EAE6B,GAAA,CAAKe,CAAAA,EAAWA,CAAAA,CAAO,GAAG,EAExD,OAAOG,GAAAA,CAAE,MAAMD,CAAoB,CAAA,CAAE,MAAMG,CAAO,CACpD,CAEA,SAASE,CAAAA,CAAMC,EAAyB,CACtC,GAAI,CACF,OAAA,IAAI,GAAA,CAAIA,CAAM,CAAA,CACP,CAAA,CACT,CAAA,KAAQ,CACN,OAAO,MACT,CACF,CAKO,SAASb,CAAAA,CACdc,EACAlB,CAAAA,CACA,CAEA,GAAI,CAACgB,CAAAA,CAAMhB,CAAQ,CAAA,CACjB,OAAOkB,EAIT,IAAMC,CAAAA,CAAcnB,EAAS,OAAA,CAAQ,KAAK,CAAA,CAAI,CAAA,CACxCoB,EAAUpB,CAAAA,CAAS,OAAA,CAAQ,IAAKmB,CAAW,CAAA,CAEjD,GAAIC,CAAAA,GAAY,EAAA,CAAI,CAElB,IAAMC,CAAAA,CAAarB,EAAS,OAAA,CAAQ,GAAA,CAAKmB,CAAW,CAAA,CACpD,GAAIE,IAAe,EAAA,CAAI,CAErB,IAAMC,CAAAA,CAActB,EAAS,SAAA,CAAU,CAAA,CAAGqB,CAAU,CAAA,CAG9CE,CAAAA,CAFgBvB,EAAS,SAAA,CAAUqB,CAAU,CAAA,CAEhB,OAAA,CAAQ,gBAAiBH,CAAI,CAAA,CAChE,OAAOI,CAAAA,CAAcC,CACvB,CAEA,OAAOvB,CACT,CAGA,IAAMwB,EAAWxB,CAAAA,CAAS,SAAA,CAAU,EAAGoB,CAAO,CAAA,CACxCK,EAAezB,CAAAA,CAAS,SAAA,CAAUoB,CAAO,CAAA,CAIzCM,CAAAA,CACJD,EAAa,OAAA,CAAQ,GAAG,IAAM,EAAA,CAC1BA,CAAAA,CAAa,QAAQ,GAAG,CAAA,CACxBA,CAAAA,CAAa,MAAA,CACbE,EAAWF,CAAAA,CAAa,SAAA,CAAU,EAAGC,CAAO,CAAA,CAC5CE,EAAgBH,CAAAA,CAAa,SAAA,CAAUC,CAAO,CAAA,CAG9CG,CAAAA,CAAYF,EAAS,WAAA,CAAY,UAAU,EAC7CG,CAAAA,CAAcH,CAAAA,CACdE,IAAc,EAAA,GAChBC,CAAAA,CACEH,CAAAA,CAAS,SAAA,CAAU,EAAGE,CAAS,CAAA,CAC/BX,EACAS,CAAAA,CAAS,SAAA,CAAUE,EAAY,CAAiB,CAAA,CAAA,CAIpD,IAAMN,CAAAA,CAAeK,CAAAA,CAAc,QAAQ,eAAA,CAAiBV,CAAI,EAEhE,OAAOM,CAAAA,CAAWM,EAAcP,CAClC","file":"chunk-2ELKDGGM.js","sourcesContent":["import { searchResultItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport fuzzysort from \"fuzzysort\"\nimport { z } from \"zod\"\n\nimport { getRegistry } from \"./api\"\n\nexport async function searchRegistries(\n registries: string[],\n options?: {\n query?: string\n limit?: number\n offset?: number\n config?: Partial<Config>\n useCache?: boolean\n }\n) {\n const { query, limit, offset, useCache } = options || {}\n\n let allItems: z.infer<typeof searchResultItemSchema>[] = []\n\n for (const registry of registries) {\n const registryData = await getRegistry(registry, { useCache })\n\n const itemsWithRegistry = (registryData.items || []).map((item) => ({\n name: item.name,\n type: item.type,\n description: item.description,\n registry: registry,\n addCommandArgument: buildRegistryItemNameFromRegistry(\n item.name,\n registry\n ),\n }))\n\n allItems = allItems.concat(itemsWithRegistry)\n }\n\n if (query) {\n allItems = searchItems(allItems, {\n query,\n limit: allItems.length,\n keys: [\"name\", \"description\"],\n }) as z.infer<typeof searchResultItemSchema>[]\n }\n\n const paginationOffset = offset || 0\n const paginationLimit = limit || allItems.length\n const totalItems = allItems.length\n\n const result: z.infer<typeof searchResultsSchema> = {\n pagination: {\n total: totalItems,\n offset: paginationOffset,\n limit: paginationLimit,\n hasMore: paginationOffset + paginationLimit < totalItems,\n },\n items: allItems.slice(paginationOffset, paginationOffset + paginationLimit),\n }\n\n return searchResultsSchema.parse(result)\n}\n\nconst searchableItemSchema = z\n .object({\n name: z.string(),\n type: z.string().optional(),\n description: z.string().optional(),\n registry: z.string().optional(),\n addCommandArgument: z.string().optional(),\n })\n .passthrough()\n\ntype SearchableItem = z.infer<typeof searchableItemSchema>\n\nfunction searchItems<\n T extends {\n name: string\n type?: string\n description?: string\n addCommandArgument?: string\n [key: string]: any\n } = SearchableItem\n>(\n items: T[],\n options: {\n query: string\n } & Pick<Parameters<typeof fuzzysort.go>[2], \"keys\" | \"threshold\" | \"limit\">\n) {\n options = {\n limit: 100,\n threshold: -10000,\n ...options,\n }\n\n const searchResults = fuzzysort.go(options.query, items, {\n keys: options.keys,\n threshold: options.threshold,\n limit: options.limit,\n })\n\n const results = searchResults.map((result) => result.obj)\n\n return z.array(searchableItemSchema).parse(results)\n}\n\nfunction isUrl(string: string): boolean {\n try {\n new URL(string)\n return true\n } catch {\n return false\n }\n}\n\n// Builds the registry item name for the add command.\n// For the built-in registry, returns the bare item name (e.g. \"button\").\n// For URL registries, replaces \"registry\" with the item name in the URL.\nexport function buildRegistryItemNameFromRegistry(\n name: string,\n registry: string\n) {\n // The built-in registry is referenced by bare item name.\n if (!isUrl(registry)) {\n return name\n }\n\n // Find where the host part ends in the original string.\n const protocolEnd = registry.indexOf(\"://\") + 3\n const hostEnd = registry.indexOf(\"/\", protocolEnd)\n\n if (hostEnd === -1) {\n // No path, check for query params.\n const queryStart = registry.indexOf(\"?\", protocolEnd)\n if (queryStart !== -1) {\n // Has query params but no path.\n const beforeQuery = registry.substring(0, queryStart)\n const queryAndAfter = registry.substring(queryStart)\n // Replace \"registry\" with itemName in query params only.\n const updatedQuery = queryAndAfter.replace(/\\bregistry\\b/g, name)\n return beforeQuery + updatedQuery\n }\n // No path or query, return as is.\n return registry\n }\n\n // Split at host boundary.\n const hostPart = registry.substring(0, hostEnd)\n const pathAndQuery = registry.substring(hostEnd)\n\n // Find all occurrences of \"registry\" in path and query.\n // Replace only the last occurrence in the path segment.\n const pathEnd =\n pathAndQuery.indexOf(\"?\") !== -1\n ? pathAndQuery.indexOf(\"?\")\n : pathAndQuery.length\n const pathOnly = pathAndQuery.substring(0, pathEnd)\n const queryAndAfter = pathAndQuery.substring(pathEnd)\n\n // Replace the last occurrence of \"registry\" in the path.\n const lastIndex = pathOnly.lastIndexOf(\"registry\")\n let updatedPath = pathOnly\n if (lastIndex !== -1) {\n updatedPath =\n pathOnly.substring(0, lastIndex) +\n name +\n pathOnly.substring(lastIndex + \"registry\".length)\n }\n\n // Replace all occurrences of \"registry\" in query params.\n const updatedQuery = queryAndAfter.replace(/\\bregistry\\b/g, name)\n\n return hostPart + updatedPath + updatedQuery\n}\n"]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import {a}from'./chunk-2ELKDGGM.js';import {V,G,f,F}from'./chunk-KQTXDVKV.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import o from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function j(r,{withFallback:e}={withFallback:false}){let n=await detect({programmatic:true,cwd:r});if(n==="yarn@berry")return "yarn";if(n==="pnpm@6")return "pnpm";if(n==="bun")return "bun";if(n==="deno")return "deno";if(!e)return n??"npm";let i=process.env.npm_config_user_agent||"";return i.startsWith("yarn")?"yarn":i.startsWith("pnpm")?"pnpm":i.startsWith("bun")?"bun":"npm"}async function v(r){let e=await j(r);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var C="@create-ui/cli";async function u(r){return `${await v(process.cwd())} ${C} ${r}`}function y(r){return r.startsWith("@")&&r.includes("/")?r.slice(r.indexOf("/")+1):r}async function d(r=process.cwd()){try{let e=await f(r);if(e)return e}catch{}return F({})}async function x(r,e){let{query:n,registries:i}=e||{},a=await Promise.all(r.items.map(async c=>{let l=[`- ${c.name}`];return c.type&&l.push(`(${c.type})`),c.description&&l.push(`- ${c.description}`),c.registry&&l.push(`[${c.registry}]`),l.push(`
|
|
2
|
+
Add command: \`${await u(`add ${c.addCommandArgument}`)}\``),l.join(" ")})),s=`Found ${r.pagination.total} items`;n&&(s+=` matching "${n}"`),i&&i.length>0&&(s+=` in registries ${i.join(", ")}`),s+=":";let m=`Showing items ${r.pagination.offset+1}-${Math.min(r.pagination.offset+r.pagination.limit,r.pagination.total)} of ${r.pagination.total}:`,g=`${s}
|
|
3
|
+
|
|
4
|
+
${m}
|
|
5
|
+
|
|
6
|
+
${a.join(`
|
|
7
|
+
|
|
8
|
+
`)}`;return r.pagination.hasMore&&(g+=`
|
|
9
|
+
|
|
10
|
+
More items available. Use offset: ${r.pagination.offset+r.pagination.limit} to see the next page.`),r.items.some(c=>c.type==="registry:ui")&&(g+=`
|
|
11
|
+
|
|
12
|
+
Next: call get_item_examples_from_registries with "<item-name>-demo" before writing usage code for any of these components.`),g}function I(r){return r.map(e=>[`## ${e.name}`,e.description?`
|
|
13
|
+
${e.description}
|
|
14
|
+
`:"",e.type?`**Type:** ${e.type}`:"",e.files&&e.files.length>0?`**Files:** ${e.files.length} file(s)`:"",e.dependencies&&e.dependencies.length>0?`**Dependencies:** ${e.dependencies.join(", ")}`:"",e.devDependencies&&e.devDependencies.length>0?`**Dev Dependencies:** ${e.devDependencies.join(", ")}`:"",e.type==="registry:ui"?`**Usage examples:** call get_item_examples_from_registries with "${e.name}-demo" or "${e.name}-example" before writing usage code.`:""].filter(Boolean).join(`
|
|
15
|
+
`))}function $(r,e){let n=r.map(a=>{let s=[`## Example: ${a.name}`,a.description?`
|
|
16
|
+
${a.description}
|
|
17
|
+
`:""];return a.files?.length&&a.files.forEach(m=>{m.content&&(s.push(`### Code (${m.path}):
|
|
18
|
+
`),s.push("```tsx"),s.push(m.content),s.push("```"));}),s.filter(Boolean).join(`
|
|
19
|
+
`)});return `# Usage Examples
|
|
20
|
+
|
|
21
|
+
Found ${r.length} example${r.length>1?"s":""} matching "${e}":
|
|
22
|
+
`+n.join(`
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
`)}var S=new Server({name:"createui",version:"1.0.0"},{capabilities:{resources:{},tools:{}},instructions:o`Create UI registry server. Create UI is its own design system with its own registry (@createui), CLI (npx @create-ui/cli), semantic tokens, and component APIs. Do not assume shadcn/ui conventions.
|
|
27
|
+
|
|
28
|
+
Workflow for writing UI:
|
|
29
|
+
1. Find components with search_items_in_registries or list_items_in_registries.
|
|
30
|
+
2. Inspect with view_items_in_registries (source + metadata).
|
|
31
|
+
3. ALWAYS call get_item_examples_from_registries (query "<item>-demo" or "<item>-example") BEFORE writing usage code for a component you haven't used yet.
|
|
32
|
+
4. Install with the command from get_add_command_for_items; never import a component that hasn't been added.
|
|
33
|
+
5. Run get_audit_checklist after generating code.
|
|
34
|
+
|
|
35
|
+
Create UI API contract (differs from shadcn):
|
|
36
|
+
- Icons go through props, never as children next to text: leadingIcon / trailingIcon on Button, Badge, SegmentedControlItem, TabMenuItem, BreadcrumbItem, TextLink (plus iconOnly where supported). Chip takes its icon or Avatar as the FIRST CHILD (auto-slotted). InlineAlert and Toast use dedicated Icon subcomponents. Icons import from @create-ui/assets/icons (Remix Ri*), never lucide-react.
|
|
37
|
+
- Styling props: variant (color intent) + appearance (solid | outline | soft | ghost) + size + shape. There is no variant="outline", variant="secondary", or variant="destructive".
|
|
38
|
+
- Never hand-roll a pattern the registry covers: tabs = tab-menu (render content panels yourself, keyed by value), option toggles = segmented-control (value/onValueChange), tags = badge, removable tags = chip, callouts = inline-alert, loading buttons = the Button loading prop, initials avatars = Avatar + AvatarText (AvatarFallback does not exist).
|
|
39
|
+
- Semantic tokens only: bg-static, bg-weak, text-body, text-placeholder, bg-primary-base, border-light. Never raw palette colors or hex values.
|
|
40
|
+
- Forms: FieldGroup + Field. Field owns size (xs | sm | md); nested Input/Select/Textarea inherit it via context.
|
|
41
|
+
- @createui is the only registry; never configure another.
|
|
42
|
+
|
|
43
|
+
If the createui Agent Skill is installed, follow it. Run \`npx @create-ui/cli info\` for the project's aliases, icon library, and config.`});S.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"get_project_registries",description:"Get the registry used by this project. createui uses a single built-in @createui registry.",inputSchema:zodToJsonSchema(z.object({}))},{name:"list_items_in_registries",description:"List items from registries (requires components.json - use init_project if missing)",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),limit:z.number().optional().describe("Maximum number of items to return"),offset:z.number().optional().describe("Number of items to skip for pagination")}))},{name:"search_items_in_registries",description:"Search for components in registries using fuzzy matching (requires components.json). Always follow up with get_item_examples_from_registries for any item you plan to use - Create UI component APIs differ from shadcn and the examples show the correct usage.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),query:z.string().describe("Search query string for fuzzy matching against item names and descriptions"),limit:z.number().optional().describe("Maximum number of items to return"),offset:z.number().optional().describe("Number of items to skip for pagination")}))},{name:"view_items_in_registries",description:"View detailed information about specific registry items including the name, description, type and files content. Before writing usage code for an item, also call get_item_examples_from_registries - the component source alone does not show canonical usage (icon props, composition, variants).",inputSchema:zodToJsonSchema(z.object({items:z.array(z.string()).describe("Array of item names (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.")}))},{name:"get_item_examples_from_registries",description:"Find usage examples and demos with their complete code. Call this BEFORE first use of any component. Search for patterns like '{item}-demo' (canonical usage), '{item}-example' (full gallery), or facet names like 'switch-thumb-icon', 'segmented-control-appearance', 'badge-with-icon'. Returns full implementation code with dependencies.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@createui', '@acme'])"),query:z.string().describe("Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'")}))},{name:"get_add_command_for_items",description:"Get the createui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.",inputSchema:zodToJsonSchema(z.object({items:z.array(z.string()).describe("Array of items to get the add command for (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.")}))},{name:"get_audit_checklist",description:"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.",inputSchema:zodToJsonSchema(z.object({}))}]}));S.setRequestHandler(CallToolRequestSchema,async r=>{try{if(!r.params.arguments)throw new Error("No tool arguments provided.");switch(r.params.name){case "get_project_registries":return {content:[{type:"text",text:o`This project uses the built-in \`@createui\` registry.
|
|
44
|
+
|
|
45
|
+
You can view an item by running:
|
|
46
|
+
\`${await u("view <item-name>")}\`
|
|
47
|
+
|
|
48
|
+
For example: \`${await u("view button")}\`.`}]};case "search_items_in_registries":{let n=z.object({registries:z.array(z.string()),query:z.string(),limit:z.number().optional(),offset:z.number().optional()}).parse(r.params.arguments),i=await a(n.registries,{query:n.query,limit:n.limit,offset:n.offset,config:await d(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:o`No items found matching "${n.query}" in registries ${n.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:await x(i,{query:n.query,registries:n.registries})}]}}case "list_items_in_registries":{let n=z.object({registries:z.array(z.string()),limit:z.number().optional(),offset:z.number().optional(),cwd:z.string().optional()}).parse(r.params.arguments),i=await a(n.registries,{limit:n.limit,offset:n.offset,config:await d(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:o`No items found in registries ${n.registries.join(", ")}.`}]}:{content:[{type:"text",text:await x(i,{registries:n.registries})}]}}case "view_items_in_registries":{let n=z.object({items:z.array(z.string())}).parse(r.params.arguments),i=await V(n.items.map(y),{config:await d(process.cwd()),useCache:!1});if(i?.length===0)return {content:[{type:"text",text:o`No items found for: ${n.items.join(", ")}
|
|
49
|
+
|
|
50
|
+
Make sure the item names are correct (e.g., button, card).`}]};let a=I(i);return {content:[{type:"text",text:o`Item Details:
|
|
51
|
+
|
|
52
|
+
${a.join(`
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
`)}`}]}}case "get_item_examples_from_registries":{let n=z.object({query:z.string(),registries:z.array(z.string())}).parse(r.params.arguments),i=await d(),a$1=await a(n.registries,{query:n.query,config:i,useCache:!1});if(a$1.items.length===0)return {content:[{type:"text",text:o`No examples found for query "${n.query}".
|
|
57
|
+
|
|
58
|
+
Try searching with patterns like:
|
|
59
|
+
- "accordion-demo" for accordion examples
|
|
60
|
+
- "button demo" or "button example"
|
|
61
|
+
- Component name followed by "-demo" or "example"
|
|
62
|
+
|
|
63
|
+
You can also:
|
|
64
|
+
1. Use search_items_in_registries to find all items matching your query
|
|
65
|
+
2. View the main component with view_items_in_registries for inline usage documentation`}]};let s=a$1.items.map(g=>g.addCommandArgument),m=await V(s,{config:i,useCache:!1});return {content:[{type:"text",text:$(m,n.query)}]}}case "get_add_command_for_items":{let e=z.object({items:z.array(z.string())}).parse(r.params.arguments);return {content:[{type:"text",text:await u(`add ${e.items.map(y).join(" ")}`)}]}}case "get_audit_checklist":return {content:[{type:"text",text:o`## Create UI Audit Checklist
|
|
66
|
+
|
|
67
|
+
After adding or generating components, verify the generated code against Create UI's API contract:
|
|
68
|
+
|
|
69
|
+
### Component usage
|
|
70
|
+
- [ ] Icons are passed via \`leadingIcon\` / \`trailingIcon\` props (Button, Badge, SegmentedControlItem, TabMenuItem, BreadcrumbItem, TextLink) - never as children next to text, never with sizing classes like \`size-4\`.
|
|
71
|
+
- [ ] Icons are imported from \`@create-ui/assets/icons\` (Remix \`Ri*\`), never from \`lucide-react\`.
|
|
72
|
+
- [ ] No hand-rolled equivalents of registry components: tabs use \`tab-menu\`, option toggles use \`segmented-control\` (\`value\`/\`onValueChange\`, not a row of Buttons), tags use \`badge\`, removable tags use \`chip\`, callouts use \`inline-alert\`, loading buttons use the \`loading\` prop.
|
|
73
|
+
- [ ] Avatar fallback initials use \`AvatarText\` (\`AvatarFallback\` does not exist).
|
|
74
|
+
- [ ] No invalid prop values: there is no \`variant="outline"\` / \`"secondary"\` / \`"destructive"\` - outline is \`appearance="outline"\`, destructive is \`variant="danger"\`.
|
|
75
|
+
|
|
76
|
+
### Styling
|
|
77
|
+
- [ ] Only semantic tokens (\`bg-static\`, \`bg-weak\`, \`text-body\`, \`text-placeholder\`, \`bg-primary-base\`, \`border-light\`) - no raw palette colors or hex values.
|
|
78
|
+
- [ ] Focus styles use \`outline-*\`, never \`ring-*\`.
|
|
79
|
+
- [ ] Vertical stacks use \`flex flex-col gap-*\`, not \`space-y-*\`.
|
|
80
|
+
- [ ] Badges/Chips are not stretched full-width by their container; Buttons that should be full-width use explicit \`w-full\`.
|
|
81
|
+
- [ ] Showcase/marketing UI is not bare-default: switches exercise variant/thumbIcon/ioTrigger, badges vary appearance deliberately, pricing toggles use the grouped segmented control.
|
|
82
|
+
- [ ] Footers and other neutral surfaces stay neutral (bg-static/bg-weak + border-light) - no saturated raw colors.
|
|
83
|
+
- [ ] One appearance="solid" primary action per section; secondary actions use soft/ghost/outline.
|
|
84
|
+
|
|
85
|
+
### Forms
|
|
86
|
+
- [ ] Forms use \`FieldGroup\` + \`Field\`; \`size\` is set once on \`Field\` and inherited (never re-set on children).
|
|
87
|
+
- [ ] Validation uses \`data-invalid\` on \`Field\` and \`aria-invalid\` on the control.
|
|
88
|
+
|
|
89
|
+
### Project health
|
|
90
|
+
- [ ] Imports use the project's aliases from components.json (run \`npx @create-ui/cli info\`).
|
|
91
|
+
- [ ] All dependencies are installed; no imports of components that were never added.
|
|
92
|
+
- [ ] No linting or TypeScript errors.
|
|
93
|
+
- [ ] Use the Playwright MCP if available to verify rendering.
|
|
94
|
+
`}]};default:throw new Error(`Tool ${r.params.name} not found`)}}catch(e){if(e instanceof z.ZodError)return {content:[{type:"text",text:o`Invalid input parameters:
|
|
95
|
+
${e.errors.map(i=>`- ${i.path.join(".")}: ${i.message}`).join(`
|
|
96
|
+
`)}
|
|
97
|
+
`}],isError:true};if(e instanceof G){let i=e.message;return e.suggestion&&(i+=`
|
|
98
|
+
|
|
99
|
+
\u{1F4A1} ${e.suggestion}`),e.context&&(i+=`
|
|
100
|
+
|
|
101
|
+
Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:o`Error (${e.code}): ${i}`}],isError:true}}let n=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:o`Error: ${n}`}],isError:true}}});export{j as a,S as b};//# sourceMappingURL=chunk-643QI2I2.js.map
|
|
102
|
+
//# sourceMappingURL=chunk-643QI2I2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/get-package-manager.ts","../src/mcp/utils.ts","../src/mcp/index.ts"],"names":["getPackageManager","targetDir","withFallback","packageManager","detect","userAgent","getPackageRunner","cwd","createui_CLI_COMMAND","npxcreateui","command","normalizeRegistryItemName","item","getMcpConfig","config","getConfig","configWithDefaults","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","dedent","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"qWAEA,eAAsBA,CAAAA,CACpBC,CAAAA,CACA,CAAE,YAAA,CAAAC,CAAa,CAAA,CAAgC,CAC7C,YAAA,CAAc,KAChB,CAAA,CACmD,CACnD,IAAMC,CAAAA,CAAiB,MAAMC,MAAAA,CAAO,CAAE,YAAA,CAAc,IAAA,CAAM,GAAA,CAAKH,CAAU,CAAC,CAAA,CAE1E,GAAIE,CAAAA,GAAmB,YAAA,CAAc,OAAO,MAAA,CAC5C,GAAIA,CAAAA,GAAmB,QAAA,CAAU,OAAO,MAAA,CACxC,GAAIA,CAAAA,GAAmB,KAAA,CAAO,OAAO,KAAA,CACrC,GAAIA,CAAAA,GAAmB,MAAA,CAAQ,OAAO,MAAA,CACtC,GAAI,CAACD,CAAAA,CACH,OAAOC,CAAAA,EAAkB,KAAA,CAI3B,IAAME,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAyB,EAAA,CAEvD,OAAIA,CAAAA,CAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,KAAK,CAAA,CACrB,KAAA,CAGF,KACT,CAEA,eAAsBC,CAAAA,CAAiBC,CAAAA,CAAa,CAClD,IAAMJ,CAAAA,CAAiB,MAAMH,CAAAA,CAAkBO,CAAG,CAAA,CAElD,OAAIJ,CAAAA,GAAmB,MAAA,CAAe,UAAA,CAElCA,CAAAA,GAAmB,KAAA,CAAc,MAAA,CAE9B,KACT,CCtCA,IAAMK,CAAAA,CAAuB,gBAAA,CAE7B,eAAsBC,CAAAA,CAAYC,CAAAA,CAAiB,CAEjD,OAAO,CAAA,EADe,MAAMJ,CAAAA,CAAiB,OAAA,CAAQ,GAAA,EAAK,CACnC,CAAA,CAAA,EAAIE,CAAoB,CAAA,CAAA,EAAIE,CAAO,CAAA,CAC5D,CAKO,SAASC,CAAAA,CAA0BC,CAAAA,CAAc,CACtD,OAAIA,CAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAKA,CAAAA,CAAK,QAAA,CAAS,GAAG,CAAA,CACpCA,CAAAA,CAAK,KAAA,CAAMA,CAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,CAAI,CAAC,CAAA,CAGlCA,CACT,CAEA,eAAsBC,CAAAA,CAAaN,CAAAA,CAAM,OAAA,CAAQ,GAAA,EAAI,CAAG,CACtD,GAAI,CACF,IAAMO,CAAAA,CAAS,MAAMC,CAAAA,CAAUR,CAAG,CAAA,CAClC,GAAIO,CAAAA,CACF,OAAOA,CAEX,CAAA,KAAQ,CAER,CAEA,OAAOE,CAAAA,CAAmB,EAAE,CAC9B,CAEA,eAAsBC,CAAAA,CACpBC,CAAAA,CACAC,CAAAA,CAIA,CACA,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAW,CAAA,CAAIF,CAAAA,EAAW,EAAC,CAEpCG,CAAAA,CAAiB,MAAM,OAAA,CAAQ,GAAA,CACnCJ,CAAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,MAAON,CAAAA,EAAS,CAChC,IAAMW,CAAAA,CAAkB,CAAC,CAAA,EAAA,EAAKX,CAAAA,CAAK,IAAI,CAAA,CAAE,CAAA,CAEzC,OAAIA,CAAAA,CAAK,IAAA,EACPW,CAAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAIX,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA,CAGzBA,CAAAA,CAAK,WAAA,EACPW,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAKX,CAAAA,CAAK,WAAW,CAAA,CAAE,CAAA,CAGhCA,CAAAA,CAAK,QAAA,EACPW,CAAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAIX,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAG,CAAA,CAGjCW,CAAAA,CAAM,IAAA,CACJ;AAAA,iBAAA,EAAsB,MAAMd,CAAAA,CAC1B,CAAA,IAAA,EAAOG,CAAAA,CAAK,kBAAkB,CAAA,CAChC,CAAC,CAAA,EAAA,CACH,CAAA,CAEOW,CAAAA,CAAM,IAAA,CAAK,GAAG,CACvB,CAAC,CACH,CAAA,CAEIC,CAAAA,CAAS,CAAA,MAAA,EAASN,CAAAA,CAAQ,UAAA,CAAW,KAAK,SAC1CE,CAAAA,GACFI,CAAAA,EAAU,CAAA,WAAA,EAAcJ,CAAK,CAAA,CAAA,CAAA,CAAA,CAE3BC,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,IACpCG,CAAAA,EAAU,CAAA,eAAA,EAAkBH,CAAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAEnDG,CAAAA,EAAU,IAEV,IAAMC,CAAAA,CAAe,CAAA,cAAA,EACnBP,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAAS,CAC9B,CAAA,CAAA,EAAI,KAAK,GAAA,CACPA,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAASA,CAAAA,CAAQ,UAAA,CAAW,KAAA,CAC/CA,CAAAA,CAAQ,WAAW,KACrB,CAAC,CAAA,IAAA,EAAOA,CAAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,CAAA,CAAA,CAE5BQ,CAAAA,CAAS,GAAGF,CAAM;;AAAA,EAAOC,CAAY;;AAAA,EAAOH,EAAe,IAAA,CAAK;;AAAA,CAAM,CAAC,CAAA,CAAA,CAE3E,OAAIJ,CAAAA,CAAQ,UAAA,CAAW,UACrBQ,CAAAA,EAAU;;AAAA,kCAAA,EACRR,CAAAA,CAAQ,UAAA,CAAW,MAAA,CAASA,CAAAA,CAAQ,WAAW,KACjD,CAAA,sBAAA,CAAA,CAAA,CAGEA,CAAAA,CAAQ,KAAA,CAAM,KAAMN,CAAAA,EAASA,CAAAA,CAAK,IAAA,GAAS,aAAa,IAC1Dc,CAAAA,EAAU;;AAAA,2HAAA,CAAA,CAAA,CAGLA,CACT,CAEO,SAASC,CAAAA,CACdC,CAAAA,CACA,CACA,OAAOA,CAAAA,CAAM,GAAA,CAAKhB,CAAAA,EACQ,CACtB,CAAA,GAAA,EAAMA,CAAAA,CAAK,IAAI,CAAA,CAAA,CACfA,EAAK,WAAA,CAAc;AAAA,EAAKA,EAAK,WAAW;AAAA,CAAA,CAAO,EAAA,CAC/CA,CAAAA,CAAK,IAAA,CAAO,CAAA,UAAA,EAAaA,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAK,EAAA,CACvCA,CAAAA,CAAK,KAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CAC9B,CAAA,WAAA,EAAcA,CAAAA,CAAK,KAAA,CAAM,MAAM,CAAA,QAAA,CAAA,CAC/B,EAAA,CACJA,CAAAA,CAAK,YAAA,EAAgBA,CAAAA,CAAK,YAAA,CAAa,MAAA,CAAS,CAAA,CAC5C,CAAA,kBAAA,EAAqBA,CAAAA,CAAK,aAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjD,EAAA,CACJA,CAAAA,CAAK,eAAA,EAAmBA,CAAAA,CAAK,eAAA,CAAgB,MAAA,CAAS,CAAA,CAClD,CAAA,sBAAA,EAAyBA,CAAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACxD,EAAA,CACJA,CAAAA,CAAK,IAAA,GAAS,aAAA,CACV,CAAA,iEAAA,EAAoEA,CAAAA,CAAK,IAAI,CAAA,WAAA,EAAcA,CAAAA,CAAK,IAAI,CAAA,oCAAA,CAAA,CACpG,EACN,CAAA,CACa,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK;AAAA,CAAI,CACvC,CACH,CAEO,SAASiB,EACdD,CAAAA,CACAR,CAAAA,CACA,CACA,IAAMU,CAAAA,CAAWF,CAAAA,CAAM,IAAKhB,CAAAA,EAAS,CACnC,IAAMW,CAAAA,CAAkB,CACtB,eAAeX,CAAAA,CAAK,IAAI,CAAA,CAAA,CACxBA,CAAAA,CAAK,WAAA,CAAc;AAAA,EAAKA,EAAK,WAAW;AAAA,CAAA,CAAO,EACjD,CAAA,CAEA,OAAIA,CAAAA,CAAK,KAAA,EAAO,QACdA,CAAAA,CAAK,KAAA,CAAM,OAAA,CAASmB,CAAAA,EAAS,CACvBA,CAAAA,CAAK,OAAA,GACPR,EAAM,IAAA,CAAK,CAAA,UAAA,EAAaQ,EAAK,IAAI,CAAA;AAAA,CAAM,CAAA,CACvCR,EAAM,IAAA,CAAK,QAAQ,EACnBA,CAAAA,CAAM,IAAA,CAAKQ,EAAK,OAAO,CAAA,CACvBR,EAAM,IAAA,CAAK,KAAK,GAEpB,CAAC,CAAA,CAGIA,EAAM,MAAA,CAAO,OAAO,EAAE,IAAA,CAAK;AAAA,CAAI,CACxC,CAAC,CAAA,CAMD,OAJe,CAAA;;AAAA,MAAA,EAA6BK,CAAAA,CAAM,MAAM,CAAA,QAAA,EACtDA,CAAAA,CAAM,OAAS,CAAA,CAAI,GAAA,CAAM,EAC3B,CAAA,WAAA,EAAcR,CAAK,CAAA;AAAA,CAAA,CAEHU,EAAS,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAC7C,CCzIO,IAAME,CAAAA,CAAS,IAAIC,MAAAA,CACxB,CACE,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,OACX,EACA,CACE,YAAA,CAAc,CACZ,SAAA,CAAW,GACX,KAAA,CAAO,EACT,CAAA,CACA,YAAA,CAAcC,CAAAA,CAAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,+IAAA,CAkBhB,CACF,EAEAF,CAAAA,CAAO,iBAAA,CAAkBG,sBAAAA,CAAwB,UACxC,CACL,KAAA,CAAO,CACL,CACE,IAAA,CAAM,wBAAA,CACN,WAAA,CACE,6FACF,WAAA,CAAaC,eAAAA,CAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CAAA,CACA,CACE,IAAA,CAAM,0BAAA,CACN,WAAA,CACE,qFAAA,CACF,YAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,kEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA,CAC/C,MAAA,CAAQA,CAAAA,CACL,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CACtD,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,4BAAA,CACN,WAAA,CACE,kQAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,kEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,CACC,4EACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA,CAC/C,MAAA,CAAQA,CAAAA,CACL,MAAA,EAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CACtD,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,0BAAA,CACN,WAAA,CACE,qSAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,EAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,yFACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,mCAAA,CACN,WAAA,CACE,iVAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,kEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,CACC,8NACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,2BAAA,CACN,WAAA,CACE,sIAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,+GACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,qBAAA,CACN,WAAA,CACE,2NAAA,CACF,WAAA,CAAaD,eAAAA,CAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CACF,CACF,CAAA,CACD,CAAA,CAEDL,CAAAA,CAAO,iBAAA,CAAkBM,qBAAAA,CAAuB,MAAOC,CAAAA,EAAY,CACjE,GAAI,CACF,GAAI,CAACA,CAAAA,CAAQ,MAAA,CAAO,SAAA,CAClB,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAAA,CAG/C,OAAQA,CAAAA,CAAQ,MAAA,CAAO,IAAA,EACrB,KAAK,wBAAA,CACH,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAML,CAAAA,CAAAA;;AAAA;AAAA,kBAAA,EAGA,MAAMzB,CAAAA,CAAY,kBAAkB,CAAC,CAAA;;AAAA,+BAAA,EAExB,MAAMA,CAAAA,CAAY,aAAa,CAAC,KACrD,CACF,CACF,CAAA,CAGF,KAAK,4BAAA,CAA8B,CAQjC,IAAM+B,CAAAA,CAPcH,EAAE,MAAA,CAAO,CAC3B,UAAA,CAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,EAC9B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAChB,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,UAAS,CAC3B,MAAA,CAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EACrB,CAAC,EAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAMuB,CAAAA,CAAiBD,EAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,OAAQA,CAAAA,CAAK,MAAA,CACb,MAAA,CAAQ,MAAM3B,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,EACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIK,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,EACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMgB,CAAAA,CAAAA,yBAAAA,EACJM,EAAK,KACP,CAAA,gBAAA,EAAmBA,CAAAA,CAAK,UAAA,CAAW,IAAA,CACjC,IACF,CAAC,CAAA,mDAAA,CACH,CACF,CACF,CAAA,CAGK,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,KAAM,MAAMvB,CAAAA,CAAkCC,CAAAA,CAAS,CACrD,KAAA,CAAOsB,CAAAA,CAAK,KAAA,CACZ,UAAA,CAAYA,EAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,2BAA4B,CAQ/B,IAAMA,CAAAA,CAPcH,CAAAA,CAAE,MAAA,CAAO,CAC3B,UAAA,CAAYA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,UAAS,CAC3B,MAAA,CAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC5B,GAAA,CAAKA,EAAE,MAAA,EAAO,CAAE,QAAA,EAClB,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,OAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAMuB,CAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,MAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,MAAA,CAAQ,MAAM3B,CAAAA,CAAa,QAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIK,EAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMgB,CAAAA,CAAAA,6BAAAA,EAAsCM,CAAAA,CAAK,UAAA,CAAW,IAAA,CAC1D,IACF,CAAC,CAAA,CAAA,CACH,CACF,CACF,CAAA,CAGK,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,KAAM,MAAMvB,CAAAA,CAAkCC,CAAAA,CAAS,CACrD,UAAA,CAAYsB,CAAAA,CAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,0BAAA,CAA4B,CAK/B,IAAMA,EAJcH,CAAAA,CAAE,MAAA,CAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAC3B,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDG,EAAgB,MAAMC,CAAAA,CAC1BH,CAAAA,CAAK,KAAA,CAAM,GAAA,CAAI7B,CAAyB,CAAA,CACxC,CACE,OAAQ,MAAME,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CACF,CAAA,CAEA,GAAI6B,CAAAA,EAAe,MAAA,GAAW,CAAA,CAC5B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMR,CAAAA,CAAAA,oBAAAA,EAA6BM,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA,0EAAA,CAG1D,CACF,CACF,CAAA,CAGF,IAAMlB,EAAiBK,CAAAA,CAAoBe,CAAa,CAAA,CAExD,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMR,CAAAA,CAAAA;;AAAA,cAAA,EAEJZ,EAAe,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAAC,CAAA,CACtC,CACF,CACF,CACF,CAEA,KAAK,mCAAA,CAAqC,CAMxC,IAAMkB,CAAAA,CALcH,CAAAA,CAAE,OAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAChB,UAAA,CAAYA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAChC,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDzB,CAAAA,CAAS,MAAMD,CAAAA,EAAa,CAE5BK,GAAAA,CAAU,MAAMuB,CAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAA1B,CAAAA,CACA,SAAU,CAAA,CACZ,CAAC,CAAA,CAED,GAAII,GAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CAC3B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMgB,CAAAA,CAAAA,6BAAAA,EAAsCM,EAAK,KAAK,CAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uGAAA,CAUxD,CACF,CACF,CAAA,CAGF,IAAMI,EAAY1B,GAAAA,CAAQ,KAAA,CAAM,IAAKN,CAAAA,EAASA,CAAAA,CAAK,kBAAkB,CAAA,CAC/DiC,CAAAA,CAAY,MAAMF,CAAAA,CAAiBC,CAAAA,CAAW,CAClD,MAAA,CAAA9B,CAAAA,CACA,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMe,CAAAA,CAAmBgB,EAAWL,CAAAA,CAAK,KAAK,CAChD,CACF,CACF,CACF,CAEA,KAAK,4BAA6B,CAChC,IAAMA,CAAAA,CAAOH,CAAAA,CACV,MAAA,CAAO,CACN,MAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAC3B,CAAC,CAAA,CACA,MAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CAEjC,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,MAAM9B,CAAAA,CACV,CAAA,IAAA,EAAO+B,EAAK,KAAA,CAAM,GAAA,CAAI7B,CAAyB,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAC5D,CACF,CACF,CACF,CACF,CAEA,KAAK,sBACH,OAAO,CACL,QAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,CA8BR,CACF,CACF,CAAA,CAGF,QACE,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQK,CAAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,UAAA,CAAY,CAC3D,CACF,CAAA,MAASO,CAAAA,CAAO,CACd,GAAIA,CAAAA,YAAiBT,CAAAA,CAAE,QAAA,CACrB,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMH,CAAAA,CAAAA;AAAA,cAAA,EACFY,CAAAA,CAAM,MAAA,CACL,GAAA,CAAKC,CAAAA,EAAM,KAAKA,CAAAA,CAAE,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA,EAAA,EAAKA,CAAAA,CAAE,OAAO,CAAA,CAAE,EAChD,IAAA,CAAK;AAAA,CAAI,CAAC;AAAA,cAAA,CAEjB,CACF,CAAA,CACA,OAAA,CAAS,IACX,CAAA,CAGF,GAAID,CAAAA,YAAiBE,CAAAA,CAAe,CAClC,IAAIC,EAAeH,CAAAA,CAAM,OAAA,CAEzB,OAAIA,CAAAA,CAAM,aACRG,CAAAA,EAAgB;;AAAA,UAAA,EAAUH,CAAAA,CAAM,UAAU,CAAA,CAAA,CAAA,CAGxCA,CAAAA,CAAM,UACRG,CAAAA,EAAgB;;AAAA,SAAA,EAAgB,IAAA,CAAK,SAAA,CAAUH,CAAAA,CAAM,OAAA,CAAS,IAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAA,CAGjE,CACL,OAAA,CAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAMZ,CAAAA,CAAAA,OAAAA,EAAgBY,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMG,CAAY,CAAA,CACpD,CACF,CAAA,CACA,OAAA,CAAS,IACX,CACF,CAEA,IAAMA,CAAAA,CAAeH,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,OAAA,CAAU,OAAOA,CAAK,CAAA,CAC1E,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMZ,CAAAA,CAAAA,OAAAA,EAAgBe,CAAY,CAAA,CACpC,CACF,CAAA,CACA,OAAA,CAAS,IACX,CACF,CACF,CAAC,CAAA","file":"chunk-643QI2I2.js","sourcesContent":["import { detect } from \"@antfu/ni\"\n\nexport async function getPackageManager(\n targetDir: string,\n { withFallback }: { withFallback?: boolean } = {\n withFallback: false,\n }\n): Promise<\"yarn\" | \"pnpm\" | \"bun\" | \"npm\" | \"deno\"> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\n\n if (packageManager === \"yarn@berry\") return \"yarn\"\n if (packageManager === \"pnpm@6\") return \"pnpm\"\n if (packageManager === \"bun\") return \"bun\"\n if (packageManager === \"deno\") return \"deno\"\n if (!withFallback) {\n return packageManager ?? \"npm\"\n }\n\n // Fallback to user agent if not detected.\n const userAgent = process.env.npm_config_user_agent || \"\"\n\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\"\n }\n\n if (userAgent.startsWith(\"pnpm\")) {\n return \"pnpm\"\n }\n\n if (userAgent.startsWith(\"bun\")) {\n return \"bun\"\n }\n\n return \"npm\"\n}\n\nexport async function getPackageRunner(cwd: string) {\n const packageManager = await getPackageManager(cwd)\n\n if (packageManager === \"pnpm\") return \"pnpm dlx\"\n\n if (packageManager === \"bun\") return \"bunx\"\n\n return \"npx\"\n}\n","import { configWithDefaults } from \"@/src/registry/config\"\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\nimport { z } from \"zod\"\n\nconst createui_CLI_COMMAND = \"@create-ui/cli\"\n\nexport async function npxcreateui(command: string) {\n const packageRunner = await getPackageRunner(process.cwd())\n return `${packageRunner} ${createui_CLI_COMMAND} ${command}`\n}\n\n// Single-provider: items resolve by bare name (e.g. \"button\"). The MCP tools\n// historically accepted a \"@registry/item\" convention, so strip an optional\n// leading \"@registry/\" prefix. URLs and local file paths are returned untouched.\nexport function normalizeRegistryItemName(item: string) {\n if (item.startsWith(\"@\") && item.includes(\"/\")) {\n return item.slice(item.indexOf(\"/\") + 1)\n }\n\n return item\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n try {\n const config = await getConfig(cwd)\n if (config) {\n return config\n }\n } catch {\n // Fall back to defaults when components.json is missing or invalid.\n }\n\n return configWithDefaults({})\n}\n\nexport async function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n }\n) {\n const { query, registries } = options || {}\n\n const formattedItems = await Promise.all(\n results.items.map(async (item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${await npxcreateui(\n `add ${item.addCommandArgument}`\n )}\\``\n )\n\n return parts.join(\" \")\n })\n )\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(\", \")}`\n }\n header += \":\"\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join(\"\\n\\n\")}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n if (results.items.some((item) => item.type === \"registry:ui\")) {\n output += `\\n\\nNext: call get_item_examples_from_registries with \"<item-name>-demo\" before writing usage code for any of these components.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[]\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n item.type ? `**Type:** ${item.type}` : \"\",\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : \"\",\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(\", \")}`\n : \"\",\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(\", \")}`\n : \"\",\n item.type === \"registry:ui\"\n ? `**Usage examples:** call get_item_examples_from_registries with \"${item.name}-demo\" or \"${item.name}-example\" before writing usage code.`\n : \"\",\n ]\n return parts.filter(Boolean).join(\"\\n\")\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : \"\",\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push(\"```tsx\")\n parts.push(file.content)\n parts.push(\"```\")\n }\n })\n }\n\n return parts.filter(Boolean).join(\"\\n\")\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? \"s\" : \"\"\n } matching \"${query}\":\\n`\n\n return header + sections.join(\"\\n\\n---\\n\\n\")\n}\n","import { getRegistryItems, searchRegistries } from \"@/src/registry\"\nimport { RegistryError } from \"@/src/registry/errors\"\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\"\nimport dedent from \"dedent\"\nimport { z } from \"zod\"\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n normalizeRegistryItemName,\n npxcreateui,\n} from \"./utils\"\n\nexport const server = new Server(\n {\n name: \"createui\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n instructions: dedent`Create UI registry server. Create UI is its own design system with its own registry (@createui), CLI (npx @create-ui/cli), semantic tokens, and component APIs. Do not assume shadcn/ui conventions.\n\n Workflow for writing UI:\n 1. Find components with search_items_in_registries or list_items_in_registries.\n 2. Inspect with view_items_in_registries (source + metadata).\n 3. ALWAYS call get_item_examples_from_registries (query \"<item>-demo\" or \"<item>-example\") BEFORE writing usage code for a component you haven't used yet.\n 4. Install with the command from get_add_command_for_items; never import a component that hasn't been added.\n 5. Run get_audit_checklist after generating code.\n\n Create UI API contract (differs from shadcn):\n - Icons go through props, never as children next to text: leadingIcon / trailingIcon on Button, Badge, SegmentedControlItem, TabMenuItem, BreadcrumbItem, TextLink (plus iconOnly where supported). Chip takes its icon or Avatar as the FIRST CHILD (auto-slotted). InlineAlert and Toast use dedicated Icon subcomponents. Icons import from @create-ui/assets/icons (Remix Ri*), never lucide-react.\n - Styling props: variant (color intent) + appearance (solid | outline | soft | ghost) + size + shape. There is no variant=\"outline\", variant=\"secondary\", or variant=\"destructive\".\n - Never hand-roll a pattern the registry covers: tabs = tab-menu (render content panels yourself, keyed by value), option toggles = segmented-control (value/onValueChange), tags = badge, removable tags = chip, callouts = inline-alert, loading buttons = the Button loading prop, initials avatars = Avatar + AvatarText (AvatarFallback does not exist).\n - Semantic tokens only: bg-static, bg-weak, text-body, text-placeholder, bg-primary-base, border-light. Never raw palette colors or hex values.\n - Forms: FieldGroup + Field. Field owns size (xs | sm | md); nested Input/Select/Textarea inherit it via context.\n - @createui is the only registry; never configure another.\n\n If the createui Agent Skill is installed, follow it. Run \\`npx @create-ui/cli info\\` for the project's aliases, icon library, and config.`,\n }\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: \"get_project_registries\",\n description:\n \"Get the registry used by this project. createui uses a single built-in @createui registry.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: \"list_items_in_registries\",\n description:\n \"List items from registries (requires components.json - use init_project if missing)\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"search_items_in_registries\",\n description:\n \"Search for components in registries using fuzzy matching (requires components.json). Always follow up with get_item_examples_from_registries for any item you plan to use - Create UI component APIs differ from shadcn and the examples show the correct usage.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query string for fuzzy matching against item names and descriptions\"\n ),\n limit: z\n .number()\n .optional()\n .describe(\"Maximum number of items to return\"),\n offset: z\n .number()\n .optional()\n .describe(\"Number of items to skip for pagination\"),\n })\n ),\n },\n {\n name: \"view_items_in_registries\",\n description:\n \"View detailed information about specific registry items including the name, description, type and files content. Before writing usage code for an item, also call get_item_examples_from_registries - the component source alone does not show canonical usage (icon props, composition, variants).\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of item names (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\n ),\n })\n ),\n },\n {\n name: \"get_item_examples_from_registries\",\n description:\n \"Find usage examples and demos with their complete code. Call this BEFORE first use of any component. Search for patterns like '{item}-demo' (canonical usage), '{item}-example' (full gallery), or facet names like 'switch-thumb-icon', 'segmented-control-appearance', 'badge-with-icon'. Returns full implementation code with dependencies.\",\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n \"Array of registry names to search (e.g., ['@createui', '@acme'])\"\n ),\n query: z\n .string()\n .describe(\n \"Search query for examples (e.g., 'accordion-demo', 'button demo', 'card example', 'tooltip-demo', 'example-booking-form', 'example-hero'). Common patterns: '{item-name}-demo', '{item-name} example', 'example {item-name}'\"\n ),\n })\n ),\n },\n {\n name: \"get_add_command_for_items\",\n description:\n \"Get the createui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.\",\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n \"Array of items to get the add command for (e.g., ['button', 'card']). A '@createui/' prefix is also accepted.\"\n ),\n })\n ),\n },\n {\n name: \"get_audit_checklist\",\n description:\n \"After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.\",\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error(\"No tool arguments provided.\")\n }\n\n switch (request.params.name) {\n case \"get_project_registries\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`This project uses the built-in \\`@createui\\` registry.\n\n You can view an item by running:\n \\`${await npxcreateui(\"view <item-name>\")}\\`\n\n For example: \\`${await npxcreateui(\"view button\")}\\`.`,\n },\n ],\n }\n }\n\n case \"search_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n \", \"\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: await formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"list_items_in_registries\": {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found in registries ${args.registries.join(\n \", \"\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: await formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case \"view_items_in_registries\": {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(\n args.items.map(normalizeRegistryItemName),\n {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n }\n )\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No items found for: ${args.items.join(\", \")}\n\n Make sure the item names are correct (e.g., button, card).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Item Details:\n\n ${formattedItems.join(\"\\n\\n---\\n\\n\")}`,\n },\n ],\n }\n }\n\n case \"get_item_examples_from_registries\": {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map((item) => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: \"text\",\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case \"get_add_command_for_items\": {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: \"text\",\n text: await npxcreateui(\n `add ${args.items.map(normalizeRegistryItemName).join(\" \")}`\n ),\n },\n ],\n }\n }\n\n case \"get_audit_checklist\": {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`## Create UI Audit Checklist\n\n After adding or generating components, verify the generated code against Create UI's API contract:\n\n ### Component usage\n - [ ] Icons are passed via \\`leadingIcon\\` / \\`trailingIcon\\` props (Button, Badge, SegmentedControlItem, TabMenuItem, BreadcrumbItem, TextLink) - never as children next to text, never with sizing classes like \\`size-4\\`.\n - [ ] Icons are imported from \\`@create-ui/assets/icons\\` (Remix \\`Ri*\\`), never from \\`lucide-react\\`.\n - [ ] No hand-rolled equivalents of registry components: tabs use \\`tab-menu\\`, option toggles use \\`segmented-control\\` (\\`value\\`/\\`onValueChange\\`, not a row of Buttons), tags use \\`badge\\`, removable tags use \\`chip\\`, callouts use \\`inline-alert\\`, loading buttons use the \\`loading\\` prop.\n - [ ] Avatar fallback initials use \\`AvatarText\\` (\\`AvatarFallback\\` does not exist).\n - [ ] No invalid prop values: there is no \\`variant=\"outline\"\\` / \\`\"secondary\"\\` / \\`\"destructive\"\\` - outline is \\`appearance=\"outline\"\\`, destructive is \\`variant=\"danger\"\\`.\n\n ### Styling\n - [ ] Only semantic tokens (\\`bg-static\\`, \\`bg-weak\\`, \\`text-body\\`, \\`text-placeholder\\`, \\`bg-primary-base\\`, \\`border-light\\`) - no raw palette colors or hex values.\n - [ ] Focus styles use \\`outline-*\\`, never \\`ring-*\\`.\n - [ ] Vertical stacks use \\`flex flex-col gap-*\\`, not \\`space-y-*\\`.\n - [ ] Badges/Chips are not stretched full-width by their container; Buttons that should be full-width use explicit \\`w-full\\`.\n - [ ] Showcase/marketing UI is not bare-default: switches exercise variant/thumbIcon/ioTrigger, badges vary appearance deliberately, pricing toggles use the grouped segmented control.\n - [ ] Footers and other neutral surfaces stay neutral (bg-static/bg-weak + border-light) - no saturated raw colors.\n - [ ] One appearance=\"solid\" primary action per section; secondary actions use soft/ghost/outline.\n\n ### Forms\n - [ ] Forms use \\`FieldGroup\\` + \\`Field\\`; \\`size\\` is set once on \\`Field\\` and inherited (never re-set on children).\n - [ ] Validation uses \\`data-invalid\\` on \\`Field\\` and \\`aria-invalid\\` on the control.\n\n ### Project health\n - [ ] Imports use the project's aliases from components.json (run \\`npx @create-ui/cli info\\`).\n - [ ] All dependencies are installed; no imports of components that were never added.\n - [ ] No linting or TypeScript errors.\n - [ ] Use the Playwright MCP if available to verify rendering.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n } catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Invalid input parameters:\n ${error.errors\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\n .join(\"\\n\")}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: \"text\",\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {m,l,d,b,a,c,n,s,o,q as q$1,r,w as w$1,e}from'./chunk-Y7WZRQWW.js';import {z as z$1}from'zod';import*as h from'path';import h__default,{basename}from'path';import*as z from'fs/promises';import Fr,{tmpdir,homedir}from'os';import {green,cyan,yellow,red}from'kleur/colors';import {loadConfig,createMatchPath}from'tsconfig-paths';import {cosmiconfig}from'cosmiconfig';import ge from'fast-glob';import ue from'fs-extra';import Ee,{existsSync,statSync,promises}from'fs';import Gt from'ora';import {Project,SyntaxKind,ScriptKind}from'ts-morph';import {transformFromAstSync}from'@babel/core';import {parse}from'@babel/parser';import Xt from'@babel/plugin-transform-typescript';import*as xe from'recast';import fr from'prompts';import Z from'deepmerge';import {HttpsProxyAgent}from'https-proxy-agent';import $r from'node-fetch';import {createHash}from'crypto';var U={NOT_FOUND:"NOT_FOUND",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",FETCH_ERROR:"FETCH_ERROR",LOCAL_FILE_ERROR:"LOCAL_FILE_ERROR",PARSE_ERROR:"PARSE_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR"},O=class extends Error{code;statusCode;context;suggestion;timestamp;cause;constructor(t,r={}){super(t),this.name="RegistryError",this.code=r.code||U.UNKNOWN_ERROR,this.statusCode=r.statusCode,this.cause=r.cause,this.context=r.context,this.suggestion=r.suggestion,this.timestamp=new Date,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}toJSON(){return {name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,context:this.context,suggestion:this.suggestion,timestamp:this.timestamp,stack:this.stack}}},oe=class extends O{constructor(r,s){let n=`The item at ${r} was not found. It may not exist at the registry.`;super(n,{code:U.NOT_FOUND,statusCode:404,cause:s,context:{url:r},suggestion:"Check if the item name is correct and the registry URL is accessible."});this.url=r;this.name="RegistryNotFoundError";}},ae=class extends O{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:U.UNAUTHORIZED,statusCode:401,cause:s,context:{url:r},suggestion:"If this is a pro component, run `createui login` to authenticate."});this.url=r;this.name="RegistryUnauthorizedError";}},ce=class extends O{constructor(r,s){let n=`You are not authorized to access the item at ${r}. If this is a remote registry, you may need to authenticate.`;super(n,{code:U.FORBIDDEN,statusCode:403,cause:s,context:{url:r},suggestion:"Pro components require a developer seat. See https://createui.co/pricing"});this.url=r;this.name="RegistryForbiddenError";}},le=class extends O{constructor(r,s,n,i){let o=s?`Failed to fetch from registry (${s}): ${r}`:`Failed to fetch from registry: ${r}`,a=typeof i=="string"&&i?`${o} - ${i}`:o,p="Check your network connection and try again.";s===404?p="The requested resource was not found. Check the URL or item name.":s===500?p="The registry server encountered an error. Try again later.":s&&s>=400&&s<500&&(p="There was a client error. Check your request parameters.");super(a,{code:U.FETCH_ERROR,statusCode:s,cause:i,context:{url:r,responseBody:n},suggestion:p});this.url=r;this.responseBody=n;this.name="RegistryFetchError";}},Q=class extends O{constructor(r,s){super(`Failed to read local registry file: ${r}`,{code:U.LOCAL_FILE_ERROR,cause:s,context:{filePath:r},suggestion:"Check if the file exists and you have read permissions."});this.filePath=r;this.name="RegistryLocalFileError";}},A=class extends O{constructor(r,s){let n=`Failed to parse registry item: ${r}`;s instanceof z$1.ZodError&&(n=`Failed to parse registry item: ${r}
|
|
2
2
|
${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
|
|
3
|
-
`)}`);super(n,{code:U.PARSE_ERROR,cause:s,context:{item:r},suggestion:"The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See https://createui.co/schema/registry-item.json."});this.item=r;this.parseError=s,this.name="RegistryParseError";}parseError};var M=process.env.REGISTRY_URL??"https://createui.co/r",Rt=[{name:"indigo",label:"Indigo"},{name:"lime",label:"Lime"},{name:"green",label:"Green"},{name:"red",label:"Red"},{name:"orange",label:"Orange"},{name:"yellow",label:"Yellow"},{name:"cyan",label:"Cyan"},{name:"blue",label:"Blue"}],Et=Rt,bt=[{name:"gray",label:"Gray"},{name:"slate",label:"Slate"},{name:"zinc",label:"Zinc"},{name:"base",label:"Base"},{name:"stone",label:"Stone"}];Et.map(e=>e.name);var Zr=bt.map(e=>e.name),Xr="gray",fe=[{name:"v1",label:"Default (Geist + JetBrains Mono)"}],Qr=fe.map(e=>e.name),es="v1";var ts=[
|
|
3
|
+
`)}`);super(n,{code:U.PARSE_ERROR,cause:s,context:{item:r},suggestion:"The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See https://createui.co/schema/registry-item.json."});this.item=r;this.parseError=s,this.name="RegistryParseError";}parseError};var M=process.env.REGISTRY_URL??"https://createui.co/r",Rt=[{name:"indigo",label:"Indigo"},{name:"lime",label:"Lime"},{name:"green",label:"Green"},{name:"red",label:"Red"},{name:"orange",label:"Orange"},{name:"yellow",label:"Yellow"},{name:"cyan",label:"Cyan"},{name:"blue",label:"Blue"}],Et=Rt,bt=[{name:"gray",label:"Gray"},{name:"slate",label:"Slate"},{name:"zinc",label:"Zinc"},{name:"base",label:"Base"},{name:"stone",label:"Stone"}];Et.map(e=>e.name);var Zr=bt.map(e=>e.name),Xr="gray",fe=[{name:"v1",label:"Default (Geist + JetBrains Mono)"}],Qr=fe.map(e=>e.name),es="v1";var ts=[];var C={"next-app":{name:"next-app",label:"Next.js",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/nextjs"}},remix:{name:"remix",label:"Remix",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/remix"}},"react-router":{name:"react-router",label:"React Router",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/installation/framework-guides/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/vite"}},astro:{name:"astro",label:"Astro",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/installation/using-postcss"}},gatsby:{name:"gatsby",label:"Gatsby",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/guides/gatsby"}},expo:{name:"expo",label:"Expo",links:{installation:"https://createui.co/docs/installation",tailwind:"https://www.nativewind.dev/docs/getting-started/installation"}},manual:{name:"manual",label:"Manual",links:{installation:"https://createui.co/docs/installation",tailwind:"https://tailwindcss.com/docs/installation"}}};var k={error:red,warn:yellow,info:cyan,success:green};async function T(e,t){return createMatchPath(t.absoluteBaseUrl,t.paths)(e,void 0,()=>true,[".ts",".tsx",".jsx",".js",".css"])}var ds="@/components",hs="@/lib/utils",ys="app/globals.css",xs="tailwind.config.js";var Nt=cosmiconfig("components",{searchPlaces:["components.json"]});async function pe(e){let t=await Ot(e);return t?(t.iconLibrary||(t.iconLibrary="createui"),await Pe(e,t)):null}async function Pe(e,t){let r=await loadConfig(e);if(r.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${r.message??""}`.trim());return b.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?h__default.resolve(e,t.tailwind.config):"",tailwindCss:h__default.resolve(e,t.tailwind.css),utils:await T(t.aliases.utils,r),components:await T(t.aliases.components,r),ui:t.aliases.ui?await T(t.aliases.ui,r):h__default.resolve(await T(t.aliases.components,r)??e,"ui"),lib:t.aliases.lib?await T(t.aliases.lib,r):h__default.resolve(await T(t.aliases.utils,r)??e,".."),hooks:t.aliases.hooks?await T(t.aliases.hooks,r):h__default.resolve(await T(t.aliases.components,r)??e,"..","hooks")}})}async function Ot(e){try{let t=await Nt.search(e);return t?a.parse(t.config):null}catch{let r=`${e}/components.json`;throw new Error(`Invalid configuration found in ${k.info(r)}.`)}}async function ws(e){let t={};for(let s of Object.keys(e.aliases)){if(!$t(s,e))continue;let n=e.resolvedPaths[s],i=await At(e.resolvedPaths.cwd,n);if(!i){t[s]=e;continue}t[s]=await pe(i);}let r=c.safeParse(t);return r.success?r.data:null}async function At(e,t){let r=Dt(e,t),s=h__default.relative(r,t),i=(await ge.glob("**/package.json",{cwd:r,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(o=>h__default.dirname(o)).find(o=>s.startsWith(o));return i?h__default.join(r,i):null}function $t(e,t){return Object.keys(t.resolvedPaths).filter(r=>r!=="utils").includes(e)}function Dt(e,t){let r=e.split(h__default.sep),s=t.split(h__default.sep),n=[];for(let i=0;i<Math.min(r.length,s.length)&&r[i]===s[i];i++)n.push(r[i]);return n.join(h__default.sep)}function Ge(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:"",tailwindCss:"",utils:"",components:"",ui:"",lib:"",hooks:""},tailwind:{config:"",css:"",baseColor:"",cssVariables:false},rsc:false,tsx:true,aliases:{components:"",utils:""}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths||{}},tailwind:{...t.tailwind,...e.tailwind||{}},aliases:{...t.aliases,...e.aliases||{}}}:t}function Ce(e="",t=true){let r=h__default.join(e,"package.json");return ue.readJSONSync(r,{throws:t})}var de=["**/node_modules/**",".next","public","dist","build"];z$1.object({compilerOptions:z$1.object({paths:z$1.record(z$1.string().or(z$1.array(z$1.string())))})});async function H(e){let[t,r,s,n,i,o,a,p]=await Promise.all([ge.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:de}),ue.pathExists(h__default.resolve(e,"src")),Bt(e),Kt(e),Vt(e),Ut(e),Mt(e),Ce(e,false)]),l=await ue.pathExists(h__default.resolve(e,`${r?"src/":""}app`)),c={framework:C.manual,isSrcDir:r,isRSC:false,isTsx:s,tailwindConfigFile:n,tailwindCssFile:i,tailwindVersion:o,frameworkVersion:null,aliasPrefix:a};if(t.find(m=>m.startsWith("next.config."))?.length)return c.framework=l?C["next-app"]:C["next-pages"],c.isRSC=l,c.frameworkVersion=await Wt(c.framework,p),c;if(t.find(m=>m.startsWith("astro.config."))?.length)return c.framework=C.astro,c;if(t.find(m=>m.startsWith("gatsby-config."))?.length)return c.framework=C.gatsby,c;if(t.find(m=>m.startsWith("composer.json"))?.length)return c.framework=C.laravel,c;if(Object.keys(p?.dependencies??{}).find(m=>m.startsWith("@remix-run/")))return c.framework=C.remix,c;if([...Object.keys(p?.dependencies??{}),...Object.keys(p?.devDependencies??{})].find(m=>m.startsWith("@tanstack/react-start")))return c.framework=C["tanstack-start"],c;if(t.find(m=>m.startsWith("react-router.config."))?.length)return c.framework=C["react-router"],c;if(t.find(m=>m.startsWith("vite.config."))?.length)return c.framework=C.vite,c;let d=t.find(m=>m.startsWith("app.config"));return d?.length&&(await ue.readFile(h__default.resolve(e,d),"utf8")).includes("defineConfig")?(c.framework=C.vite,c):(p?.dependencies?.expo&&(c.framework=C.expo),c)}async function Wt(e,t){if(!t||!["next-app","next-pages"].includes(e.name))return null;let r=t.dependencies?.next||t.devDependencies?.next;if(!r)return null;let s=r.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(s)return s[1];let n=r.match(/(\d+\.\d+\.\d+)/);return n?n[1]:r}async function Ut(e){let[t,r]=await Promise.all([Ce(e,false),pe(e)]);return r?.tailwind?.config===""?"v4":!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:"v4"}async function Vt(e){let t=await ge.glob(["**/*.css","**/*.scss"],{cwd:e,deep:5,ignore:de});if(!t.length)return null;for(let r of t){let s=await ue.readFile(h__default.resolve(e,r),"utf8");if(s.includes('@import "tailwindcss"')||s.includes("@import 'tailwindcss'"))return r}return null}async function Kt(e){let t=await ge.glob("tailwind.config.*",{cwd:e,deep:3,ignore:de});return t.length?t[0]:null}async function Mt(e){let t=await loadConfig(e);if(t?.resultType==="failed"||!Object.entries(t?.paths).length)return null;for(let[r,s]of Object.entries(t.paths))if(s.includes("./*")||s.includes("./src/*")||s.includes("./app/*")||s.includes("./resources/js/*"))return r.replace(/\/\*$/,"")??null;return Object.keys(t?.paths)?.[0].replace(/\/\*$/,"")??null}async function Bt(e){return (await ge.glob("tsconfig.*",{cwd:e,deep:1,ignore:de})).length>0}async function $s(e,t=null){let[r,s]=await Promise.all([pe(e),t?Promise.resolve(t):H(e)]);if(r)return r;if(!s||!s.tailwindCssFile)return null;let n={$schema:"https://createui.co/schema.json",rsc:s.isRSC,tsx:s.isTsx,tailwind:{config:s.tailwindConfigFile??"",baseColor:"zinc",css:s.tailwindCssFile,cssVariables:true,prefix:""},iconLibrary:"createui",aliases:{components:`${s.aliasPrefix}/components`,ui:`${s.aliasPrefix}/components/ui`,hooks:`${s.aliasPrefix}/hooks`,lib:`${s.aliasPrefix}/lib`,utils:`${s.aliasPrefix}/lib/utils`}};return await Pe(e,n)}function Je(e,t,r={}){let{ignoreImports:s=false}=r,n=e.replace(/\r\n/g,`
|
|
4
4
|
`).trim(),i=t.replace(/\r\n/g,`
|
|
5
5
|
`).trim();if(n===i)return true;if(!s)return false;let o=/^(import\s+(?:type\s+)?(?:\*\s+as\s+\w+|\{[^}]*\}|\w+)?(?:\s*,\s*(?:\{[^}]*\}|\w+))?\s+from\s+["'])([^"']+)(["'])/gm,a=c=>c.replace(o,(d,m,u,y)=>{if(u.startsWith("."))return `${m}${u}${y}`;let g=u.split("/"),v=g[g.length-1];return `${m}@normalized/${v}${y}`}),p=a(n),l=a(i);return p===l}function V(e){let t=h__default.basename(e);return /^\.env(\.|$)/.test(t)}function Ye(e){let t=[".env.local",".env",".env.development.local",".env.development"];for(let r of t){let s=h__default.join(e,r);if(existsSync(s))return s}return null}function G(e){let t=e.split(`
|
|
6
6
|
`),r={};for(let s of t){let n=s.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let o=n.substring(0,i).trim(),a=n.substring(i+1).trim();o&&(r[o]=a.replace(/^["']|["']$/g,""));}return r}function Ze(e,t){let r=G(e),s=G(t),n=[];for(let i of Object.keys(s))i in r||n.push(i);return n}function Xe(e,t){let r=G(e),s=G(t),n=e.trimEnd();n&&!n.endsWith(`
|
|
@@ -15,5 +15,5 @@ ${s.errors.map(i=>` - ${i.path.join(".")}: ${i.message}`).join(`
|
|
|
15
15
|
`);});let y={};s$1.forEach(f=>{y=Z(y,f.envVars??{});});let g=await lt(s$1.map(f=>f.files??[]),t),v=[];for(let f of s$1)if(f.type==="registry:font-variant"&&f.fontVariant)for(let x of ["display","body","numeric"]){let E=f.fontVariant[x];E&&v.push({name:`${f.name}-${x}`,type:"registry:font",role:x,font:E});}let S=s.parse({dependencies:Z.all(s$1.map(f=>f.dependencies??[])),devDependencies:Z.all(s$1.map(f=>f.devDependencies??[])),files:g,tailwind:c,cssVars:d,css:m,docs:u,fonts:v.length>0?v:void 0});return Object.keys(y).length>0&&(S.envVars=y),S}async function be(e,t,r={},s=new Set){let n=[],i=[];for(let o of e)if(!s.has(o))if(s.add(o),F(o)||Re(o)){let[a]=await se([o],r);if(a&&(n.push(a),a.registryDependencies)){let p=await be(a.registryDependencies,t,r,s);n.push(...p.items),i.push(...p.registryNames);}}else {i.push(o);try{let[a]=await se([o],r);if(a&&a.registryDependencies){let p=await be(a.registryDependencies,t,r,s);n.push(...p.items),i.push(...p.registryNames);}}catch{}}return {items:n,registryNames:i}}async function zr(e,t,r={}){if(F(e))return [e];let{registryNames:s}=await be([e],t,r,new Set),n=s.map(i=>q(F(i)?i:`${i}.json`));return Array.from(new Set(n))}function W(e,t){let r=t||e.name,s=createHash("sha256").update(r).digest("hex").substring(0,8);return `${e.name}::${s}`}function Wr(e){if(F(e)){let r=new URL(e).pathname,s=r.match(/\/([^/]+)\.json$/),n=s?s[1]:h__default.basename(r,".json");return {name:n,hash:W({name:n},e)}}if(Re(e)){let t=e.match(/\/([^/]+)\.json$/),r=t?t[1]:h__default.basename(e,".json");return {name:r,hash:W({name:r},e)}}return {name:e,hash:W({name:e},e)}}function Ur(e,t){let r=new Map,s=new Map,n=new Map,i=new Map;e.forEach(l=>{let c=t.get(l)||l.name,d=W(l,c);r.set(d,l),s.set(d,l),n.set(d,0),i.set(d,[]);});let o=new Map;e.forEach(l=>{let c=t.get(l)||l.name,d=W(l,c);o.has(l.name)||o.set(l.name,[]),o.get(l.name).push(d),c!==l.name&&(o.has(c)||o.set(c,[]),o.get(c).push(d));}),e.forEach(l=>{let c=t.get(l)||l.name,d=W(l,c);l.registryDependencies&&l.registryDependencies.forEach(m=>{let u,y=o.get(m)||[];if(y.length===1)u=y[0];else if(y.length>1)u=y[0];else {let{name:g}=Wr(m),v=o.get(g)||[];v.length>0&&(u=v[0]);}u&&r.has(u)&&(i.get(u).push(d),n.set(d,n.get(d)+1));});});let a=[],p=[];for(n.forEach((l,c)=>{l===0&&a.push(c);});a.length>0;){let l=a.shift(),c=r.get(l);p.push(c),i.get(l).forEach(d=>{let m=n.get(d)-1;n.set(d,m),m===0&&a.push(d);});}if(p.length!==e.length){console.warn("Circular dependency detected in registry items");let l=new Set(p.map(c=>{let d=t.get(c)||c.name;return W(c,d)}));e.forEach(c=>{let d=t.get(c)||c.name,m=W(c,d);l.has(m)||p.push(c);});}return p}function Se(e){if(w.break(),w.error("Something went wrong. Please check the error below for more details."),w.error("If the problem persists, please open an issue on GitHub."),w.error(""),typeof e=="string"&&(w.error(e),w.break(),process.exit(1)),e instanceof O&&(e.message&&(w.error(e.cause?"Error:":"Message:"),w.error(e.message)),e.cause&&(w.error(`
|
|
16
16
|
Message:`),w.error(e.cause)),e.suggestion&&(w.error(`
|
|
17
17
|
Suggestion:`),w.error(e.suggestion)),w.break(),process.exit(1)),e instanceof z$1.ZodError){w.error("Validation failed:");for(let[t,r]of Object.entries(e.flatten().fieldErrors))w.error(`- ${k.info(t)}: ${r}`);w.break(),process.exit(1);}e instanceof Error&&(w.error(e.message),w.break(),process.exit(1)),w.break(),process.exit(1);}async function Mr(e,t){let{useCache:r}=t||{},s=F(e)?e:q("registry.json"),[n]=await $([s],{useCache:r});try{return o.parse(n)}catch(i){throw new A(e,i)}}async function eo(e,t){let{useCache:r=false}=t||{};return se(e,{useCache:r})}async function to(e,t){let{config:r,useCache:s=false}=t||{};return wt(e,ft(r),{useCache:s})}async function Oe(){try{return (await Mr("registry.json")).items}catch(e){w.error(`
|
|
18
|
-
`),Se(e);}}async function ro(){try{let[e]=await $(["styles/index.json"]);return q$1.parse(e)}catch{return []}}async function so(){try{let[e]=await $(["icons/index.json"]);return r.parse(e)}catch(e){return Se(e),{}}}async function Br(e,t){let r=[];for(let s of t){let n=e.find(i=>i.name===s);if(n&&(r.push(n),n.registryDependencies)){let i=await Br(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function no(e,t){try{let r=t.map(n=>`${n.name}.json`);return (await $(r)).map(n$1=>n.parse(n$1))}catch(r){return Se(r),[]}}async function io(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[s,n]=t.type?.split(":")??[];return s in e.resolvedPaths?h__default.join(e.resolvedPaths[s],n):null}async function Hr(e){e={useCache:true,...e};let t=`${M}/config.json`,[r]=await $([t],{useCache:e.useCache});return w$1.parse(r).presets}async function oo(e,t){return (await Hr(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}function Gr(e){return (e.split(",")[0]?.trim().replace(/^['"]|['"]$/g,"")??e).replace(/\s*variable$/i,"").trim()}async function ao(){try{let e=await Oe()??[],t=[];for(let r of e){if(r.type!=="registry:font-variant"||!r.fontVariant)continue;let s=Array.from(new Set([r.fontVariant.display?.family,r.fontVariant.numeric?.family].filter(i=>!!i).map(Gr))),n=r.title??r.name;t.push({name:r.name.replace(/^font-variant-/,""),label:s.length?`${n} (${s.join(" + ")})`:n});}return t.length?t:[...fe]}catch{return [...fe]}}export{no as $,tt as A,$n as B,Cr as C,F as D,Jn as E,ft as F,O as G,oe as H,ae as I,ce as J,le as K,Q as L,A as M,te as N,li as O,fi as P,pi as Q,$ as R,wt as S,Se as T,Mr as U,eo as V,to as W,Oe as X,ro as Y,so as Z,Br as _,k as a,io as aa,ds as b,Hr as ba,hs as c,oo as ca,ys as d,ao as da,xs as e,pe as f,Pe as g,ws as h,At as i,Dt as j,Ge as k,Ce as l,H as m,$s as n,w as o,ee as p,Rt as q,bt as r,Zr as s,Xr as t,Qr as u,es as v,ts as w,Ye as x,Ze as y,Xe as z};//# sourceMappingURL=chunk-
|
|
19
|
-
//# sourceMappingURL=chunk-
|
|
18
|
+
`),Se(e);}}async function ro(){try{let[e]=await $(["styles/index.json"]);return q$1.parse(e)}catch{return []}}async function so(){try{let[e]=await $(["icons/index.json"]);return r.parse(e)}catch(e){return Se(e),{}}}async function Br(e,t){let r=[];for(let s of t){let n=e.find(i=>i.name===s);if(n&&(r.push(n),n.registryDependencies)){let i=await Br(e,n.registryDependencies);r.push(...i);}}return r.filter((s,n,i)=>i.findIndex(o=>o.name===s.name)===n)}async function no(e,t){try{let r=t.map(n=>`${n.name}.json`);return (await $(r)).map(n$1=>n.parse(n$1))}catch(r){return Se(r),[]}}async function io(e,t,r){if(r)return r;if(t.type==="registry:ui")return e.resolvedPaths.ui??e.resolvedPaths.components;let[s,n]=t.type?.split(":")??[];return s in e.resolvedPaths?h__default.join(e.resolvedPaths[s],n):null}async function Hr(e){e={useCache:true,...e};let t=`${M}/config.json`,[r]=await $([t],{useCache:e.useCache});return w$1.parse(r).presets}async function oo(e,t){return (await Hr(t)).find(s=>s.name.toLowerCase()===e.toLowerCase())??null}function Gr(e){return (e.split(",")[0]?.trim().replace(/^['"]|['"]$/g,"")??e).replace(/\s*variable$/i,"").trim()}async function ao(){try{let e=await Oe()??[],t=[];for(let r of e){if(r.type!=="registry:font-variant"||!r.fontVariant)continue;let s=Array.from(new Set([r.fontVariant.display?.family,r.fontVariant.numeric?.family].filter(i=>!!i).map(Gr))),n=r.title??r.name;t.push({name:r.name.replace(/^font-variant-/,""),label:s.length?`${n} (${s.join(" + ")})`:n});}return t.length?t:[...fe]}catch{return [...fe]}}export{no as $,tt as A,$n as B,Cr as C,F as D,Jn as E,ft as F,O as G,oe as H,ae as I,ce as J,le as K,Q as L,A as M,te as N,li as O,fi as P,pi as Q,$ as R,wt as S,Se as T,Mr as U,eo as V,to as W,Oe as X,ro as Y,so as Z,Br as _,k as a,io as aa,ds as b,Hr as ba,hs as c,oo as ca,ys as d,ao as da,xs as e,pe as f,Pe as g,ws as h,At as i,Dt as j,Ge as k,Ce as l,H as m,$s as n,w as o,ee as p,Rt as q,bt as r,Zr as s,Xr as t,Qr as u,es as v,ts as w,Ye as x,Ze as y,Xe as z};//# sourceMappingURL=chunk-KQTXDVKV.js.map
|
|
19
|
+
//# sourceMappingURL=chunk-KQTXDVKV.js.map
|