dga-ui-kit 0.0.2

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 shadcn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # shadcn
2
+
3
+ A CLI for adding components to your project.
4
+
5
+ ## create
6
+
7
+ Use the `create` command to create a new project. You will be taken to a website to build your custom design system and choose your framework.
8
+
9
+ ```bash
10
+ npx shadcn create
11
+ ```
12
+
13
+ ## init
14
+
15
+ Use the `init` command to initialize dependencies for a new project.
16
+
17
+ The `init` command installs dependencies, adds the `cn` util, configures Tailwind CSS, and CSS variables for the project.
18
+
19
+ ```bash
20
+ npx shadcn init
21
+ ```
22
+
23
+ ## add
24
+
25
+ Use the `add` command to add components to your project.
26
+
27
+ The `add` command adds a component to your project and installs all required dependencies.
28
+
29
+ ```bash
30
+ npx shadcn add [component]
31
+ ```
32
+
33
+ ### Example
34
+
35
+ ```bash
36
+ npx shadcn add alert-dialog
37
+ ```
38
+
39
+ You can also run the command without any arguments to view a list of all available components:
40
+
41
+ ```bash
42
+ npx shadcn add
43
+ ```
44
+
45
+ ## Documentation
46
+
47
+ Visit https://ui.shadcn.com/docs/cli to view the documentation.
48
+
49
+ ## License
50
+
51
+ Licensed under the [MIT license](https://github.com/shadcn-ui/ui/blob/main/LICENSE.md).
@@ -0,0 +1,72 @@
1
+ import {oa,$ as $$1,v,ba}from'./chunk-TUBV3KOD.js';import {Server}from'@modelcontextprotocol/sdk/server/index.js';import {ListToolsRequestSchema,CallToolRequestSchema}from'@modelcontextprotocol/sdk/types.js';import a from'dedent';import {z}from'zod';import {zodToJsonSchema}from'zod-to-json-schema';import {detect}from'@antfu/ni';async function k(n,{withFallback:e}={withFallback:false}){let r=await detect({programmatic:true,cwd:n});if(r==="yarn@berry")return "yarn";if(r==="pnpm@6")return "pnpm";if(r==="bun")return "bun";if(r==="deno")return "deno";if(!e)return r??"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 b(n){let e=await k(n);return e==="pnpm"?"pnpm dlx":e==="bun"?"bunx":"npx"}var C="shadcn@latest";async function g(n){return `${await b(process.cwd())} ${C} ${n}`}async function u(n=process.cwd()){return {registries:(await ba(n,{useCache:false})).registries}}function y(n,e){let{query:r,registries:i}=e||{},s=n.items.map(c=>{let f=[`- ${c.name}`];return c.type&&f.push(`(${c.type})`),c.description&&f.push(`- ${c.description}`),c.registry&&f.push(`[${c.registry}]`),f.push(`
2
+ Add command: \`${g(`add ${c.addCommandArgument}`)}\``),f.join(" ")}),o=`Found ${n.pagination.total} items`;r&&(o+=` matching "${r}"`),i&&i.length>0&&(o+=` in registries ${i.join(", ")}`),o+=":";let m=`Showing items ${n.pagination.offset+1}-${Math.min(n.pagination.offset+n.pagination.limit,n.pagination.total)} of ${n.pagination.total}:`,d=`${o}
3
+
4
+ ${m}
5
+
6
+ ${s.join(`
7
+
8
+ `)}`;return n.pagination.hasMore&&(d+=`
9
+
10
+ More items available. Use offset: ${n.pagination.offset+n.pagination.limit} to see the next page.`),d}function w(n){return n.map(e=>[`## ${e.name}`,e.description?`
11
+ ${e.description}
12
+ `:"",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(", ")}`:""].filter(Boolean).join(`
13
+ `))}function $(n,e){let r=n.map(s=>{let o=[`## Example: ${s.name}`,s.description?`
14
+ ${s.description}
15
+ `:""];return s.files?.length&&s.files.forEach(m=>{m.content&&(o.push(`### Code (${m.path}):
16
+ `),o.push("```tsx"),o.push(m.content),o.push("```"));}),o.filter(Boolean).join(`
17
+ `)});return `# Usage Examples
18
+
19
+ Found ${n.length} example${n.length>1?"s":""} matching "${e}":
20
+ `+r.join(`
21
+
22
+ ---
23
+
24
+ `)}var j=new Server({name:"shadcn",version:"1.0.0"},{capabilities:{resources:{},tools:{}}});j.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:"get_project_registries",description:"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)",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., ['@shadcn', '@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). After finding an item, use get_item_examples_from_registries to see usage examples.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@shadcn', '@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. For usage examples, use get_item_examples_from_registries instead.",inputSchema:zodToJsonSchema(z.object({items:z.array(z.string()).describe("Array of item names with registry prefix (e.g., ['@shadcn/button', '@shadcn/card'])")}))},{name:"get_item_examples_from_registries",description:"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.",inputSchema:zodToJsonSchema(z.object({registries:z.array(z.string()).describe("Array of registry names to search (e.g., ['@shadcn', '@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 shadcn 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 prefixed with the registry name (e.g., ['@shadcn/button', '@shadcn/card'])")}))},{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({}))}]}));j.setRequestHandler(CallToolRequestSchema,async n=>{try{if(!n.params.arguments)throw new Error("No tool arguments provided.");switch(n.params.name){case "get_project_registries":{let e=await u(process.cwd());return e?.registries?{content:[{type:"text",text:a`The following registries are configured in the current project:
25
+
26
+ ${Object.keys(e.registries).map(r=>`- ${r}`).join(`
27
+ `)}
28
+
29
+ You can view the items in a registry by running:
30
+ \`${await g("view @name-of-registry")}\`
31
+
32
+ For example: \`${await g("view @shadcn")}\` or \`${await g("view @shadcn @acme")}\` to view multiple registries.
33
+ `}]}:{content:[{type:"text",text:a`No components.json found or no registries configured.
34
+
35
+ To fix this:
36
+ 1. Use the \`init\` command to create a components.json file
37
+ 2. Or manually create components.json with a registries section`}]}}case "search_items_in_registries":{let r=z.object({registries:z.array(z.string()),query:z.string(),limit:z.number().optional(),offset:z.number().optional()}).parse(n.params.arguments),i=await oa(r.registries,{query:r.query,limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found matching "${r.query}" in registries ${r.registries.join(", ")}, Try searching with a different query or registry.`}]}:{content:[{type:"text",text:y(i,{query:r.query,registries:r.registries})}]}}case "list_items_in_registries":{let r=z.object({registries:z.array(z.string()),limit:z.number().optional(),offset:z.number().optional(),cwd:z.string().optional()}).parse(n.params.arguments),i=await oa(r.registries,{limit:r.limit,offset:r.offset,config:await u(process.cwd()),useCache:!1});return i.items.length===0?{content:[{type:"text",text:a`No items found in registries ${r.registries.join(", ")}.`}]}:{content:[{type:"text",text:y(i,{registries:r.registries})}]}}case "view_items_in_registries":{let r=z.object({items:z.array(z.string())}).parse(n.params.arguments),i=await $$1(r.items,{config:await u(process.cwd()),useCache:!1});if(i?.length===0)return {content:[{type:"text",text:a`No items found for: ${r.items.join(", ")}
38
+
39
+ Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`}]};let s=w(i);return {content:[{type:"text",text:a`Item Details:
40
+
41
+ ${s.join(`
42
+
43
+ ---
44
+
45
+ `)}`}]}}case "get_item_examples_from_registries":{let r=z.object({query:z.string(),registries:z.array(z.string())}).parse(n.params.arguments),i=await u(),s=await oa(r.registries,{query:r.query,config:i,useCache:!1});if(s.items.length===0)return {content:[{type:"text",text:a`No examples found for query "${r.query}".
46
+
47
+ Try searching with patterns like:
48
+ - "accordion-demo" for accordion examples
49
+ - "button demo" or "button example"
50
+ - Component name followed by "-demo" or "example"
51
+
52
+ You can also:
53
+ 1. Use search_items_in_registries to find all items matching your query
54
+ 2. View the main component with view_items_in_registries for inline usage documentation`}]};let o=s.items.map(d=>d.addCommandArgument),m=await $$1(o,{config:i,useCache:!1});return {content:[{type:"text",text:$(m,r.query)}]}}case "get_add_command_for_items":{let e=z.object({items:z.array(z.string())}).parse(n.params.arguments);return {content:[{type:"text",text:await g(`add ${e.items.join(" ")}`)}]}}case "get_audit_checklist":return {content:[{type:"text",text:a`## Component Audit Checklist
55
+
56
+ After adding or generating components, check the following common issues:
57
+
58
+ - [ ] Ensure imports are correct i.e named vs default imports
59
+ - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.
60
+ - [ ] Ensure all dependencies are installed.
61
+ - [ ] Check for linting errors or warnings
62
+ - [ ] Check for TypeScript errors
63
+ - [ ] Use the Playwright MCP if available.
64
+ `}]};default:throw new Error(`Tool ${n.params.name} not found`)}}catch(e){if(e instanceof z.ZodError)return {content:[{type:"text",text:a`Invalid input parameters:
65
+ ${e.errors.map(i=>`- ${i.path.join(".")}: ${i.message}`).join(`
66
+ `)}
67
+ `}],isError:true};if(e instanceof v){let i=e.message;return e.suggestion&&(i+=`
68
+
69
+ \u{1F4A1} ${e.suggestion}`),e.context&&(i+=`
70
+
71
+ Context: ${JSON.stringify(e.context,null,2)}`),{content:[{type:"text",text:a`Error (${e.code}): ${i}`}],isError:true}}let r=e instanceof Error?e.message:String(e);return {content:[{type:"text",text:a`Error: ${r}`}],isError:true}}});export{k as a,j as b};//# sourceMappingURL=chunk-2PLUVDEJ.js.map
72
+ //# sourceMappingURL=chunk-2PLUVDEJ.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","SHADCN_CLI_COMMAND","npxShadcn","command","getMcpConfig","getRegistriesConfig","formatSearchResultsWithPagination","results","options","query","registries","formattedItems","item","parts","header","showingRange","output","formatRegistryItems","items","formatItemExamples","sections","file","server","Server","ListToolsRequestSchema","zodToJsonSchema","z","CallToolRequestSchema","request","config","dedent","registry","args","searchRegistries","registryItems","getRegistryItems","itemNames","fullItems","error","e","RegistryError","errorMessage"],"mappings":"0UAEA,eAAsBA,EACpBC,CAAAA,CACA,CAAE,YAAA,CAAAC,CAAa,CAAA,CAAgC,CAC7C,aAAc,KAChB,CAAA,CACmD,CACnD,IAAMC,CAAAA,CAAiB,MAAMC,OAAO,CAAE,YAAA,CAAc,IAAA,CAAM,GAAA,CAAKH,CAAU,CAAC,EAE1E,GAAIE,CAAAA,GAAmB,YAAA,CAAc,OAAO,MAAA,CAC5C,GAAIA,IAAmB,QAAA,CAAU,OAAO,OACxC,GAAIA,CAAAA,GAAmB,MAAO,OAAO,KAAA,CACrC,GAAIA,CAAAA,GAAmB,MAAA,CAAQ,OAAO,OACtC,GAAI,CAACD,CAAAA,CACH,OAAOC,CAAAA,EAAkB,KAAA,CAI3B,IAAME,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAyB,EAAA,CAEvD,OAAIA,EAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,MAAM,CAAA,CACtB,MAAA,CAGLA,CAAAA,CAAU,UAAA,CAAW,KAAK,CAAA,CACrB,MAGF,KACT,CAEA,eAAsBC,CAAAA,CAAiBC,CAAAA,CAAa,CAClD,IAAMJ,CAAAA,CAAiB,MAAMH,CAAAA,CAAkBO,CAAG,CAAA,CAElD,OAAIJ,IAAmB,MAAA,CAAe,UAAA,CAElCA,IAAmB,KAAA,CAAc,MAAA,CAE9B,KACT,CCvCA,IAAMK,CAAAA,CAAqB,eAAA,CAE3B,eAAsBC,CAAAA,CAAUC,EAAiB,CAE/C,OAAO,CAAA,EADe,MAAMJ,CAAAA,CAAiB,OAAA,CAAQ,KAAK,CACnC,CAAA,CAAA,EAAIE,CAAkB,CAAA,CAAA,EAAIE,CAAO,EAC1D,CAEA,eAAsBC,CAAAA,CAAaJ,CAAAA,CAAM,OAAA,CAAQ,GAAA,GAAO,CAKtD,OAAO,CACL,UAAA,CAAA,CALa,MAAMK,EAAAA,CAAoBL,EAAK,CAC5C,QAAA,CAAU,KACZ,CAAC,CAAA,EAGoB,UACrB,CACF,CAEO,SAASM,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CAIA,CACA,GAAM,CAAE,KAAA,CAAAC,EAAO,UAAA,CAAAC,CAAW,EAAIF,CAAAA,EAAW,EAAC,CAEpCG,CAAAA,CAAiBJ,CAAAA,CAAQ,KAAA,CAAM,IAAKK,CAAAA,EAAS,CACjD,IAAMC,CAAAA,CAAkB,CAAC,CAAA,EAAA,EAAKD,EAAK,IAAI,CAAA,CAAE,CAAA,CAEzC,OAAIA,CAAAA,CAAK,IAAA,EACPC,EAAM,IAAA,CAAK,CAAA,CAAA,EAAID,CAAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA,CAGzBA,EAAK,WAAA,EACPC,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAKD,CAAAA,CAAK,WAAW,EAAE,CAAA,CAGhCA,CAAAA,CAAK,QAAA,EACPC,CAAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAID,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAA,CAGjCC,CAAAA,CAAM,IAAA,CACJ;AAAA,iBAAA,EAAsBX,CAAAA,CAAU,CAAA,IAAA,EAAOU,CAAAA,CAAK,kBAAkB,CAAA,CAAE,CAAC,CAAA,EAAA,CACnE,CAAA,CAEOC,CAAAA,CAAM,IAAA,CAAK,GAAG,CACvB,CAAC,CAAA,CAEGC,CAAAA,CAAS,CAAA,MAAA,EAASP,CAAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,MAAA,CAAA,CAC1CE,CAAAA,GACFK,CAAAA,EAAU,CAAA,WAAA,EAAcL,CAAK,CAAA,CAAA,CAAA,CAAA,CAE3BC,CAAAA,EAAcA,CAAAA,CAAW,MAAA,CAAS,CAAA,GACpCI,GAAU,CAAA,eAAA,EAAkBJ,CAAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,CAEnDI,CAAAA,EAAU,GAAA,CAEV,IAAMC,CAAAA,CAAe,CAAA,cAAA,EACnBR,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,CAE5BS,CAAAA,CAAS,GAAGF,CAAM;;AAAA,EAAOC,CAAY;;AAAA,EAAOJ,EAAe,IAAA,CAAK;;AAAA,CAAM,CAAC,CAAA,CAAA,CAE3E,OAAIJ,CAAAA,CAAQ,UAAA,CAAW,UACrBS,CAAAA,EAAU;;AAAA,kCAAA,EACRT,CAAAA,CAAQ,WAAW,MAAA,CAASA,CAAAA,CAAQ,WAAW,KACjD,CAAA,sBAAA,CAAA,CAAA,CAGKS,CACT,CAEO,SAASC,CAAAA,CACdC,EACA,CACA,OAAOA,CAAAA,CAAM,GAAA,CAAKN,CAAAA,EACQ,CACtB,MAAMA,CAAAA,CAAK,IAAI,CAAA,CAAA,CACfA,CAAAA,CAAK,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,OAAS,CAAA,CAC9B,CAAA,WAAA,EAAcA,CAAAA,CAAK,KAAA,CAAM,MAAM,CAAA,QAAA,CAAA,CAC/B,GACJA,CAAAA,CAAK,YAAA,EAAgBA,CAAAA,CAAK,YAAA,CAAa,MAAA,CAAS,CAAA,CAC5C,qBAAqBA,CAAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACjD,GACJA,CAAAA,CAAK,eAAA,EAAmBA,CAAAA,CAAK,eAAA,CAAgB,MAAA,CAAS,CAAA,CAClD,yBAAyBA,CAAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CACxD,EACN,CAAA,CACa,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK;AAAA,CAAI,CACvC,CACH,CAEO,SAASO,EACdD,CAAAA,CACAT,CAAAA,CACA,CACA,IAAMW,CAAAA,CAAWF,CAAAA,CAAM,IAAKN,CAAAA,EAAS,CACnC,IAAMC,CAAAA,CAAkB,CACtB,eAAeD,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,CAASS,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,EAAcT,CAAK,CAAA;AAAA,CAAA,CAEHW,EAAS,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAC7C,CChHO,IAAME,CAAAA,CAAS,IAAIC,MAAAA,CACxB,CACE,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,OACX,CAAA,CACA,CACE,YAAA,CAAc,CACZ,SAAA,CAAW,EAAC,CACZ,KAAA,CAAO,EACT,CACF,CACF,EAEAD,CAAAA,CAAO,iBAAA,CAAkBE,sBAAAA,CAAwB,UACxC,CACL,MAAO,CACL,CACE,IAAA,CAAM,wBAAA,CACN,WAAA,CACE,kIAAA,CACF,WAAA,CAAaC,eAAAA,CAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CAAA,CACA,CACE,KAAM,0BAAA,CACN,WAAA,CACE,qFAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,WAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,EACF,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,YACE,0KAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,MAAA,EAAO,CACP,QAAA,CACC,4EACF,CAAA,CACF,KAAA,CAAOA,CAAAA,CACJ,QAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,mCAAmC,CAAA,CAC/C,MAAA,CAAQA,CAAAA,CACL,QAAO,CACP,QAAA,EAAS,CACT,QAAA,CAAS,wCAAwC,CACtD,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,0BAAA,CACN,WAAA,CACE,qLAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,qFACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,mCAAA,CACN,WAAA,CACE,4LAAA,CACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,UAAA,CAAYA,CAAAA,CACT,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,gEACF,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,qIACF,WAAA,CAAaD,eAAAA,CACXC,CAAAA,CAAE,MAAA,CAAO,CACP,KAAA,CAAOA,CAAAA,CACJ,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAAA,CAChB,QAAA,CACC,sHACF,CACJ,CAAC,CACH,CACF,CAAA,CACA,CACE,IAAA,CAAM,qBAAA,CACN,WAAA,CACE,2NAAA,CACF,WAAA,CAAaD,gBAAgBC,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAC3C,CACF,CACF,EACD,CAAA,CAEDJ,CAAAA,CAAO,iBAAA,CAAkBK,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,yBAA0B,CAC7B,IAAMC,CAAAA,CAAS,MAAMzB,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,EAE/C,OAAKyB,CAAAA,EAAQ,UAAA,CAeN,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMC,CAAAA,CAAAA;;AAAA,gBAAA,EAEF,MAAA,CAAO,IAAA,CAAKD,CAAAA,CAAO,UAAU,CAAA,CAC5B,GAAA,CAAKE,CAAAA,EAAa,CAAA,EAAA,EAAKA,CAAQ,CAAA,CAAE,CAAA,CACjC,IAAA,CAAK;AAAA,CAAI,CAAC;;AAAA;AAAA,kBAAA,EAGT,MAAM7B,CAAAA,CAAU,wBAAwB,CAAC,CAAA;;AAAA,+BAAA,EAE5B,MAAMA,EACrB,cACF,CAAC,WAAW,MAAMA,CAAAA,CAClB,oBACF,CAAC,CAAA;AAAA,gBAAA,CAEH,CACF,CACF,CAAA,CAnCS,CACL,QAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAM4B,CAAAA,CAAAA;;AAAA;AAAA;AAAA,+EAAA,CAKR,CACF,CACF,CAyBJ,CAEA,KAAK,4BAAA,CAA8B,CAQjC,IAAME,CAAAA,CAPcN,CAAAA,CAAE,MAAA,CAAO,CAC3B,WAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAC9B,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAChB,KAAA,CAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS,CAC3B,OAAQA,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EACrB,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,WAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,EAAK,MAAA,CACb,MAAA,CAAQ,MAAM5B,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,SAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIG,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,yBAAAA,EACJE,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,KAAM1B,CAAAA,CAAkCC,CAAAA,CAAS,CAC/C,KAAA,CAAOyB,CAAAA,CAAK,KAAA,CACZ,UAAA,CAAYA,CAAAA,CAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,2BAA4B,CAQ/B,IAAMA,CAAAA,CAPcN,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,CAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAClB,CAAC,CAAA,CAEwB,KAAA,CAAME,EAAQ,MAAA,CAAO,SAAS,CAAA,CACjDrB,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,MAAA,CAAQ,MAAM5B,EAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,OAAIG,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CACpB,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,6BAAAA,EAAsCE,CAAAA,CAAK,UAAA,CAAW,IAAA,CAC1D,IACF,CAAC,CAAA,CAAA,CACH,CACF,CACF,CAAA,CAGK,CACL,OAAA,CAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAM1B,CAAAA,CAAkCC,CAAAA,CAAS,CAC/C,UAAA,CAAYyB,CAAAA,CAAK,UACnB,CAAC,CACH,CACF,CACF,CACF,CAEA,KAAK,0BAAA,CAA4B,CAK/B,IAAMA,CAAAA,CAJcN,CAAAA,CAAE,MAAA,CAAO,CAC3B,KAAA,CAAOA,CAAAA,CAAE,KAAA,CAAMA,EAAE,MAAA,EAAQ,CAC3B,CAAC,CAAA,CAEwB,KAAA,CAAME,CAAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CACjDM,CAAAA,CAAgB,MAAMC,GAAAA,CAAiBH,CAAAA,CAAK,KAAA,CAAO,CACvD,MAAA,CAAQ,MAAM5B,CAAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CACxC,QAAA,CAAU,CAAA,CACZ,CAAC,CAAA,CAED,GAAI8B,CAAAA,EAAe,MAAA,GAAW,CAAA,CAC5B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMJ,CAAAA,CAAAA,oBAAAA,EAA6BE,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC;;AAAA,4GAAA,CAG1D,CACF,CACF,CAAA,CAGF,IAAMrB,EAAiBM,CAAAA,CAAoBiB,CAAa,CAAA,CAExD,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,OACN,IAAA,CAAMJ,CAAAA,CAAAA;;AAAA,cAAA,EAEJnB,EAAe,IAAA,CAAK;;AAAA;;AAAA,CAAa,CAAC,CAAA,CACtC,CACF,CACF,CACF,CAEA,KAAK,mCAAA,CAAqC,CAMxC,IAAMqB,CAAAA,CALcN,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,CACjDC,CAAAA,CAAS,MAAMzB,CAAAA,EAAa,CAE5BG,CAAAA,CAAU,MAAM0B,EAAAA,CAAiBD,CAAAA,CAAK,UAAA,CAAY,CACtD,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAAH,CAAAA,CACA,SAAU,CAAA,CACZ,CAAC,CAAA,CAED,GAAItB,CAAAA,CAAQ,KAAA,CAAM,MAAA,GAAW,CAAA,CAC3B,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMuB,CAAAA,CAAAA,6BAAAA,EAAsCE,EAAK,KAAK,CAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,uGAAA,CAUxD,CACF,CACF,CAAA,CAGF,IAAMI,EAAY7B,CAAAA,CAAQ,KAAA,CAAM,IAAKK,CAAAA,EAASA,CAAAA,CAAK,kBAAkB,CAAA,CAC/DyB,CAAAA,CAAY,MAAMF,GAAAA,CAAiBC,CAAAA,CAAW,CAClD,MAAA,CAAAP,CAAAA,CACA,SAAU,CAAA,CACZ,CAAC,EAED,OAAO,CACL,QAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAMV,EAAmBkB,CAAAA,CAAWL,CAAAA,CAAK,KAAK,CAChD,CACF,CACF,CACF,CAEA,KAAK,2BAAA,CAA6B,CAChC,IAAMA,CAAAA,CAAON,CAAAA,CACV,OAAO,CACN,KAAA,CAAOA,EAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAC3B,CAAC,CAAA,CACA,KAAA,CAAME,EAAQ,MAAA,CAAO,SAAS,EAEjC,OAAO,CACL,QAAS,CACP,CACE,KAAM,MAAA,CACN,IAAA,CAAM,MAAM1B,CAAAA,CAAU,CAAA,IAAA,EAAO8B,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CACrD,CACF,CACF,CACF,CAEA,KAAK,sBACH,OAAO,CACL,QAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMF,CAAAA,CAAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,CAWR,CACF,CACF,CAAA,CAGF,QACE,MAAM,IAAI,KAAA,CAAM,CAAA,KAAA,EAAQF,CAAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,UAAA,CAAY,CAC3D,CACF,CAAA,MAASU,CAAAA,CAAO,CACd,GAAIA,CAAAA,YAAiBZ,CAAAA,CAAE,QAAA,CACrB,OAAO,CACL,OAAA,CAAS,CACP,CACE,IAAA,CAAM,MAAA,CACN,IAAA,CAAMI,CAAAA,CAAAA;AAAA,cAAA,EACFQ,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,CAAMR,CAAAA,CAAAA,OAAAA,EAAgBQ,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,CAAMR,CAAAA,CAAAA,OAAAA,EAAgBW,CAAY,CAAA,CACpC,CACF,CAAA,CACA,OAAA,CAAS,IACX,CACF,CACF,CAAC,CAAA","file":"chunk-2PLUVDEJ.js","sourcesContent":["import { detect } from \"@antfu/ni\"\r\n\r\nexport async function getPackageManager(\r\n targetDir: string,\r\n { withFallback }: { withFallback?: boolean } = {\r\n withFallback: false,\r\n }\r\n): Promise<\"yarn\" | \"pnpm\" | \"bun\" | \"npm\" | \"deno\"> {\r\n const packageManager = await detect({ programmatic: true, cwd: targetDir })\r\n\r\n if (packageManager === \"yarn@berry\") return \"yarn\"\r\n if (packageManager === \"pnpm@6\") return \"pnpm\"\r\n if (packageManager === \"bun\") return \"bun\"\r\n if (packageManager === \"deno\") return \"deno\"\r\n if (!withFallback) {\r\n return packageManager ?? \"npm\"\r\n }\r\n\r\n // Fallback to user agent if not detected.\r\n const userAgent = process.env.npm_config_user_agent || \"\"\r\n\r\n if (userAgent.startsWith(\"yarn\")) {\r\n return \"yarn\"\r\n }\r\n\r\n if (userAgent.startsWith(\"pnpm\")) {\r\n return \"pnpm\"\r\n }\r\n\r\n if (userAgent.startsWith(\"bun\")) {\r\n return \"bun\"\r\n }\r\n\r\n return \"npm\"\r\n}\r\n\r\nexport async function getPackageRunner(cwd: string) {\r\n const packageManager = await getPackageManager(cwd)\r\n\r\n if (packageManager === \"pnpm\") return \"pnpm dlx\"\r\n\r\n if (packageManager === \"bun\") return \"bunx\"\r\n\r\n return \"npx\"\r\n}\r\n","import { getRegistriesConfig } from \"@/src/registry/api\"\r\nimport { registryItemSchema, searchResultsSchema } from \"@/src/schema\"\r\nimport { getPackageRunner } from \"@/src/utils/get-package-manager\"\r\nimport { z } from \"zod\"\r\n\r\nconst SHADCN_CLI_COMMAND = \"shadcn@latest\"\r\n\r\nexport async function npxShadcn(command: string) {\r\n const packageRunner = await getPackageRunner(process.cwd())\r\n return `${packageRunner} ${SHADCN_CLI_COMMAND} ${command}`\r\n}\r\n\r\nexport async function getMcpConfig(cwd = process.cwd()) {\r\n const config = await getRegistriesConfig(cwd, {\r\n useCache: false,\r\n })\r\n\r\n return {\r\n registries: config.registries,\r\n }\r\n}\r\n\r\nexport function formatSearchResultsWithPagination(\r\n results: z.infer<typeof searchResultsSchema>,\r\n options?: {\r\n query?: string\r\n registries?: string[]\r\n }\r\n) {\r\n const { query, registries } = options || {}\r\n\r\n const formattedItems = results.items.map((item) => {\r\n const parts: string[] = [`- ${item.name}`]\r\n\r\n if (item.type) {\r\n parts.push(`(${item.type})`)\r\n }\r\n\r\n if (item.description) {\r\n parts.push(`- ${item.description}`)\r\n }\r\n\r\n if (item.registry) {\r\n parts.push(`[${item.registry}]`)\r\n }\r\n\r\n parts.push(\r\n `\\n Add command: \\`${npxShadcn(`add ${item.addCommandArgument}`)}\\``\r\n )\r\n\r\n return parts.join(\" \")\r\n })\r\n\r\n let header = `Found ${results.pagination.total} items`\r\n if (query) {\r\n header += ` matching \"${query}\"`\r\n }\r\n if (registries && registries.length > 0) {\r\n header += ` in registries ${registries.join(\", \")}`\r\n }\r\n header += \":\"\r\n\r\n const showingRange = `Showing items ${\r\n results.pagination.offset + 1\r\n }-${Math.min(\r\n results.pagination.offset + results.pagination.limit,\r\n results.pagination.total\r\n )} of ${results.pagination.total}:`\r\n\r\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join(\"\\n\\n\")}`\r\n\r\n if (results.pagination.hasMore) {\r\n output += `\\n\\nMore items available. Use offset: ${\r\n results.pagination.offset + results.pagination.limit\r\n } to see the next page.`\r\n }\r\n\r\n return output\r\n}\r\n\r\nexport function formatRegistryItems(\r\n items: z.infer<typeof registryItemSchema>[]\r\n) {\r\n return items.map((item) => {\r\n const parts: string[] = [\r\n `## ${item.name}`,\r\n item.description ? `\\n${item.description}\\n` : \"\",\r\n item.type ? `**Type:** ${item.type}` : \"\",\r\n item.files && item.files.length > 0\r\n ? `**Files:** ${item.files.length} file(s)`\r\n : \"\",\r\n item.dependencies && item.dependencies.length > 0\r\n ? `**Dependencies:** ${item.dependencies.join(\", \")}`\r\n : \"\",\r\n item.devDependencies && item.devDependencies.length > 0\r\n ? `**Dev Dependencies:** ${item.devDependencies.join(\", \")}`\r\n : \"\",\r\n ]\r\n return parts.filter(Boolean).join(\"\\n\")\r\n })\r\n}\r\n\r\nexport function formatItemExamples(\r\n items: z.infer<typeof registryItemSchema>[],\r\n query: string\r\n) {\r\n const sections = items.map((item) => {\r\n const parts: string[] = [\r\n `## Example: ${item.name}`,\r\n item.description ? `\\n${item.description}\\n` : \"\",\r\n ]\r\n\r\n if (item.files?.length) {\r\n item.files.forEach((file) => {\r\n if (file.content) {\r\n parts.push(`### Code (${file.path}):\\n`)\r\n parts.push(\"```tsx\")\r\n parts.push(file.content)\r\n parts.push(\"```\")\r\n }\r\n })\r\n }\r\n\r\n return parts.filter(Boolean).join(\"\\n\")\r\n })\r\n\r\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\r\n items.length > 1 ? \"s\" : \"\"\r\n } matching \"${query}\":\\n`\r\n\r\n return header + sections.join(\"\\n\\n---\\n\\n\")\r\n}\r\n","import { getRegistryItems, searchRegistries } from \"@/src/registry\"\r\nimport { RegistryError } from \"@/src/registry/errors\"\r\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\"\r\nimport {\r\n CallToolRequestSchema,\r\n ListToolsRequestSchema,\r\n} from \"@modelcontextprotocol/sdk/types.js\"\r\nimport dedent from \"dedent\"\r\nimport { z } from \"zod\"\r\nimport { zodToJsonSchema } from \"zod-to-json-schema\"\r\n\r\nimport {\r\n formatItemExamples,\r\n formatRegistryItems,\r\n formatSearchResultsWithPagination,\r\n getMcpConfig,\r\n npxShadcn,\r\n} from \"./utils\"\r\n\r\nexport const server = new Server(\r\n {\r\n name: \"shadcn\",\r\n version: \"1.0.0\",\r\n },\r\n {\r\n capabilities: {\r\n resources: {},\r\n tools: {},\r\n },\r\n }\r\n)\r\n\r\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\r\n return {\r\n tools: [\r\n {\r\n name: \"get_project_registries\",\r\n description:\r\n \"Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)\",\r\n inputSchema: zodToJsonSchema(z.object({})),\r\n },\r\n {\r\n name: \"list_items_in_registries\",\r\n description:\r\n \"List items from registries (requires components.json - use init_project if missing)\",\r\n inputSchema: zodToJsonSchema(\r\n z.object({\r\n registries: z\r\n .array(z.string())\r\n .describe(\r\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\r\n ),\r\n limit: z\r\n .number()\r\n .optional()\r\n .describe(\"Maximum number of items to return\"),\r\n offset: z\r\n .number()\r\n .optional()\r\n .describe(\"Number of items to skip for pagination\"),\r\n })\r\n ),\r\n },\r\n {\r\n name: \"search_items_in_registries\",\r\n description:\r\n \"Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.\",\r\n inputSchema: zodToJsonSchema(\r\n z.object({\r\n registries: z\r\n .array(z.string())\r\n .describe(\r\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\r\n ),\r\n query: z\r\n .string()\r\n .describe(\r\n \"Search query string for fuzzy matching against item names and descriptions\"\r\n ),\r\n limit: z\r\n .number()\r\n .optional()\r\n .describe(\"Maximum number of items to return\"),\r\n offset: z\r\n .number()\r\n .optional()\r\n .describe(\"Number of items to skip for pagination\"),\r\n })\r\n ),\r\n },\r\n {\r\n name: \"view_items_in_registries\",\r\n description:\r\n \"View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.\",\r\n inputSchema: zodToJsonSchema(\r\n z.object({\r\n items: z\r\n .array(z.string())\r\n .describe(\r\n \"Array of item names with registry prefix (e.g., ['@shadcn/button', '@shadcn/card'])\"\r\n ),\r\n })\r\n ),\r\n },\r\n {\r\n name: \"get_item_examples_from_registries\",\r\n description:\r\n \"Find usage examples and demos with their complete code. Search for patterns like 'accordion-demo', 'button example', 'card-demo', etc. Returns full implementation code with dependencies.\",\r\n inputSchema: zodToJsonSchema(\r\n z.object({\r\n registries: z\r\n .array(z.string())\r\n .describe(\r\n \"Array of registry names to search (e.g., ['@shadcn', '@acme'])\"\r\n ),\r\n query: z\r\n .string()\r\n .describe(\r\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}'\"\r\n ),\r\n })\r\n ),\r\n },\r\n {\r\n name: \"get_add_command_for_items\",\r\n description:\r\n \"Get the shadcn CLI add command for specific items in a registry. This is useful for adding one or more components to your project.\",\r\n inputSchema: zodToJsonSchema(\r\n z.object({\r\n items: z\r\n .array(z.string())\r\n .describe(\r\n \"Array of items to get the add command for prefixed with the registry name (e.g., ['@shadcn/button', '@shadcn/card'])\"\r\n ),\r\n })\r\n ),\r\n },\r\n {\r\n name: \"get_audit_checklist\",\r\n description:\r\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.\",\r\n inputSchema: zodToJsonSchema(z.object({})),\r\n },\r\n ],\r\n }\r\n})\r\n\r\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\r\n try {\r\n if (!request.params.arguments) {\r\n throw new Error(\"No tool arguments provided.\")\r\n }\r\n\r\n switch (request.params.name) {\r\n case \"get_project_registries\": {\r\n const config = await getMcpConfig(process.cwd())\r\n\r\n if (!config?.registries) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`No components.json found or no registries configured.\r\n\r\n To fix this:\r\n 1. Use the \\`init\\` command to create a components.json file\r\n 2. Or manually create components.json with a registries section`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`The following registries are configured in the current project:\r\n\r\n ${Object.keys(config.registries)\r\n .map((registry) => `- ${registry}`)\r\n .join(\"\\n\")}\r\n\r\n You can view the items in a registry by running:\r\n \\`${await npxShadcn(\"view @name-of-registry\")}\\`\r\n\r\n For example: \\`${await npxShadcn(\r\n \"view @shadcn\"\r\n )}\\` or \\`${await npxShadcn(\r\n \"view @shadcn @acme\"\r\n )}\\` to view multiple registries.\r\n `,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"search_items_in_registries\": {\r\n const inputSchema = z.object({\r\n registries: z.array(z.string()),\r\n query: z.string(),\r\n limit: z.number().optional(),\r\n offset: z.number().optional(),\r\n })\r\n\r\n const args = inputSchema.parse(request.params.arguments)\r\n const results = await searchRegistries(args.registries, {\r\n query: args.query,\r\n limit: args.limit,\r\n offset: args.offset,\r\n config: await getMcpConfig(process.cwd()),\r\n useCache: false,\r\n })\r\n\r\n if (results.items.length === 0) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`No items found matching \"${\r\n args.query\r\n }\" in registries ${args.registries.join(\r\n \", \"\r\n )}, Try searching with a different query or registry.`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: formatSearchResultsWithPagination(results, {\r\n query: args.query,\r\n registries: args.registries,\r\n }),\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"list_items_in_registries\": {\r\n const inputSchema = z.object({\r\n registries: z.array(z.string()),\r\n limit: z.number().optional(),\r\n offset: z.number().optional(),\r\n cwd: z.string().optional(),\r\n })\r\n\r\n const args = inputSchema.parse(request.params.arguments)\r\n const results = await searchRegistries(args.registries, {\r\n limit: args.limit,\r\n offset: args.offset,\r\n config: await getMcpConfig(process.cwd()),\r\n useCache: false,\r\n })\r\n\r\n if (results.items.length === 0) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`No items found in registries ${args.registries.join(\r\n \", \"\r\n )}.`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: formatSearchResultsWithPagination(results, {\r\n registries: args.registries,\r\n }),\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"view_items_in_registries\": {\r\n const inputSchema = z.object({\r\n items: z.array(z.string()),\r\n })\r\n\r\n const args = inputSchema.parse(request.params.arguments)\r\n const registryItems = await getRegistryItems(args.items, {\r\n config: await getMcpConfig(process.cwd()),\r\n useCache: false,\r\n })\r\n\r\n if (registryItems?.length === 0) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`No items found for: ${args.items.join(\", \")}\r\n\r\n Make sure the item names are correct and include the registry prefix (e.g., @shadcn/button).`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n const formattedItems = formatRegistryItems(registryItems)\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`Item Details:\r\n\r\n ${formattedItems.join(\"\\n\\n---\\n\\n\")}`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"get_item_examples_from_registries\": {\r\n const inputSchema = z.object({\r\n query: z.string(),\r\n registries: z.array(z.string()),\r\n })\r\n\r\n const args = inputSchema.parse(request.params.arguments)\r\n const config = await getMcpConfig()\r\n\r\n const results = await searchRegistries(args.registries, {\r\n query: args.query,\r\n config,\r\n useCache: false,\r\n })\r\n\r\n if (results.items.length === 0) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`No examples found for query \"${args.query}\".\r\n\r\n Try searching with patterns like:\r\n - \"accordion-demo\" for accordion examples\r\n - \"button demo\" or \"button example\"\r\n - Component name followed by \"-demo\" or \"example\"\r\n\r\n You can also:\r\n 1. Use search_items_in_registries to find all items matching your query\r\n 2. View the main component with view_items_in_registries for inline usage documentation`,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n const itemNames = results.items.map((item) => item.addCommandArgument)\r\n const fullItems = await getRegistryItems(itemNames, {\r\n config,\r\n useCache: false,\r\n })\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: formatItemExamples(fullItems, args.query),\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"get_add_command_for_items\": {\r\n const args = z\r\n .object({\r\n items: z.array(z.string()),\r\n })\r\n .parse(request.params.arguments)\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: await npxShadcn(`add ${args.items.join(\" \")}`),\r\n },\r\n ],\r\n }\r\n }\r\n\r\n case \"get_audit_checklist\": {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`## Component Audit Checklist\r\n\r\n After adding or generating components, check the following common issues:\r\n\r\n - [ ] Ensure imports are correct i.e named vs default imports\r\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\r\n - [ ] Ensure all dependencies are installed.\r\n - [ ] Check for linting errors or warnings\r\n - [ ] Check for TypeScript errors\r\n - [ ] Use the Playwright MCP if available.\r\n `,\r\n },\r\n ],\r\n }\r\n }\r\n\r\n default:\r\n throw new Error(`Tool ${request.params.name} not found`)\r\n }\r\n } catch (error) {\r\n if (error instanceof z.ZodError) {\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`Invalid input parameters:\r\n ${error.errors\r\n .map((e) => `- ${e.path.join(\".\")}: ${e.message}`)\r\n .join(\"\\n\")}\r\n `,\r\n },\r\n ],\r\n isError: true,\r\n }\r\n }\r\n\r\n if (error instanceof RegistryError) {\r\n let errorMessage = error.message\r\n\r\n if (error.suggestion) {\r\n errorMessage += `\\n\\n💡 ${error.suggestion}`\r\n }\r\n\r\n if (error.context) {\r\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\r\n }\r\n\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`Error (${error.code}): ${errorMessage}`,\r\n },\r\n ],\r\n isError: true,\r\n }\r\n }\r\n\r\n const errorMessage = error instanceof Error ? error.message : String(error)\r\n return {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: dedent`Error: ${errorMessage}`,\r\n },\r\n ],\r\n isError: true,\r\n }\r\n }\r\n})\r\n"]}
@@ -0,0 +1,3 @@
1
+ var e={lucide:{name:"lucide",title:"Lucide",packages:["lucide-react"],import:"import { ICON } from 'lucide-react'",usage:"<ICON />",export:"lucide-react"},tabler:{name:"tabler",title:"Tabler Icons",packages:["@tabler/icons-react"],import:"import { ICON } from '@tabler/icons-react'",usage:"<ICON />",export:"@tabler/icons-react"},hugeicons:{name:"hugeicons",title:"HugeIcons",packages:["@hugeicons/react","@hugeicons/core-free-icons"],import:`import { HugeiconsIcon } from '@hugeicons/react'
2
+ import { ICON } from '@hugeicons/core-free-icons';`,usage:"<HugeiconsIcon icon={ICON} strokeWidth={2} />",export:"@hugeicons/core-free-icons"},phosphor:{name:"phosphor",title:"Phosphor Icons",packages:["@phosphor-icons/react"],import:"import { ICON } from '@phosphor-icons/react'",usage:"<ICON strokeWidth={2} />",export:"@phosphor-icons/react"},remixicon:{name:"remixicon",title:"Remix Icon",packages:["@remixicon/react"],import:"import { ICON } from '@remixicon/react'",usage:"<ICON />",export:"@remixicon/react"}};export{e as a};//# sourceMappingURL=chunk-LPFYQC24.js.map
3
+ //# sourceMappingURL=chunk-LPFYQC24.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icons/libraries.ts"],"names":["iconLibraries"],"mappings":"AAAO,IAAMA,CAAAA,CAAgB,CAC3B,MAAA,CAAQ,CACN,KAAM,QAAA,CACN,KAAA,CAAO,SACP,QAAA,CAAU,CAAC,cAAc,CAAA,CACzB,MAAA,CAAQ,sCACR,KAAA,CAAO,UAAA,CACP,OAAQ,cACV,CAAA,CACA,MAAA,CAAQ,CACN,IAAA,CAAM,QAAA,CACN,MAAO,cAAA,CACP,QAAA,CAAU,CAAC,qBAAqB,CAAA,CAChC,OAAQ,4CAAA,CACR,KAAA,CAAO,UAAA,CACP,MAAA,CAAQ,qBACV,CAAA,CACA,UAAW,CACT,IAAA,CAAM,YACN,KAAA,CAAO,WAAA,CACP,SAAU,CAAC,kBAAA,CAAoB,4BAA4B,CAAA,CAC3D,MAAA,CACE,CAAA;AAAA,kDAAA,CAAA,CACF,MAAO,+CAAA,CACP,MAAA,CAAQ,4BACV,CAAA,CACA,SAAU,CACR,IAAA,CAAM,UAAA,CACN,KAAA,CAAO,iBACP,QAAA,CAAU,CAAC,uBAAuB,CAAA,CAClC,MAAA,CAAQ,+CACR,KAAA,CAAO,0BAAA,CACP,MAAA,CAAQ,uBACV,EACA,SAAA,CAAW,CACT,IAAA,CAAM,WAAA,CACN,MAAO,YAAA,CACP,QAAA,CAAU,CAAC,kBAAkB,EAC7B,MAAA,CAAQ,yCAAA,CACR,MAAO,UAAA,CACP,MAAA,CAAQ,kBACV,CACF","file":"chunk-LPFYQC24.js","sourcesContent":["export const iconLibraries = {\r\n lucide: {\r\n name: \"lucide\",\r\n title: \"Lucide\",\r\n packages: [\"lucide-react\"],\r\n import: \"import { ICON } from 'lucide-react'\",\r\n usage: \"<ICON />\",\r\n export: \"lucide-react\",\r\n },\r\n tabler: {\r\n name: \"tabler\",\r\n title: \"Tabler Icons\",\r\n packages: [\"@tabler/icons-react\"],\r\n import: \"import { ICON } from '@tabler/icons-react'\",\r\n usage: \"<ICON />\",\r\n export: \"@tabler/icons-react\",\r\n },\r\n hugeicons: {\r\n name: \"hugeicons\",\r\n title: \"HugeIcons\",\r\n packages: [\"@hugeicons/react\", \"@hugeicons/core-free-icons\"],\r\n import:\r\n \"import { HugeiconsIcon } from '@hugeicons/react'\\nimport { ICON } from '@hugeicons/core-free-icons';\",\r\n usage: \"<HugeiconsIcon icon={ICON} strokeWidth={2} />\",\r\n export: \"@hugeicons/core-free-icons\",\r\n },\r\n phosphor: {\r\n name: \"phosphor\",\r\n title: \"Phosphor Icons\",\r\n packages: [\"@phosphor-icons/react\"],\r\n import: \"import { ICON } from '@phosphor-icons/react'\",\r\n usage: \"<ICON strokeWidth={2} />\",\r\n export: \"@phosphor-icons/react\",\r\n },\r\n remixicon: {\r\n name: \"remixicon\",\r\n title: \"Remix Icon\",\r\n packages: [\"@remixicon/react\"],\r\n import: \"import { ICON } from '@remixicon/react'\",\r\n usage: \"<ICON />\",\r\n export: \"@remixicon/react\",\r\n },\r\n} as const\r\n\r\nexport type IconLibraries = typeof iconLibraries\r\n\r\nexport type IconLibrary = IconLibraries[keyof IconLibraries]\r\n\r\nexport type IconLibraryName = keyof IconLibraries\r\n"]}
@@ -0,0 +1,3 @@
1
+ import {a}from'./chunk-LPFYQC24.js';import {SyntaxKind,Project,ScriptKind}from'ts-morph';var H=async({sourceFile:i,config:e})=>{let s=e.iconLibrary;if(!s||!(s in a))return i;let r=s,t=a[r],a$1=[];for(let l of i.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)){if(l.getTagNameNode()?.getText()!=="IconPlaceholder")continue;let f=l.getAttributes().find(g=>g.getKind()!==SyntaxKind.JsxAttribute?false:g.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()===r);if(!f)continue;let n=f.asKindOrThrow(SyntaxKind.JsxAttribute),c=n.getInitializer()?.getText().replace(/^["']|["']$/g,"");if(!c)continue;a$1.includes(c)||a$1.push(c);let u=t.usage.match(/<(\w+)([^>]*)\s*\/>/);n.remove();for(let g of l.getAttributes()){if(g.getKind()!==SyntaxKind.JsxAttribute)continue;let x=g.asKindOrThrow(SyntaxKind.JsxAttribute);x.getNameNode().getText()in a&&x.remove();}if(!u){l.getTagNameNode()?.replaceWithText(c);continue}let[,N,A]=u;if(N==="ICON"){let g=l.getAttributes().filter(x=>x.getKind()!==SyntaxKind.JsxAttribute?true:!(x.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(x=>x.getText()).join(" ");g.trim()?l.replaceWithText(`<${c} ${g} />`):l.getTagNameNode()?.replaceWithText(c);}else {let g=new Set(l.getAttributes().filter(m=>m.getKind()===SyntaxKind.JsxAttribute).map(m=>m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText())),S=A.replace(/\{ICON\}/g,`{${c}}`).trim().split(/\s+(?=\w+=)/).filter(m=>m).map(m=>{let K=m.split("=")[0];return K&&!g.has(K)?m:null}).filter(Boolean),E=l.getAttributes().filter(m=>m.getKind()!==SyntaxKind.JsxAttribute?true:!(m.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()in a)).map(m=>m.getText()).join(" "),$=[...S,E].filter(Boolean).join(" ");l.replaceWithText(`<${N} ${$} />`);}}for(let l of i.getImportDeclarations()??[])if(l.getModuleSpecifier()?.getText()?.includes("icon-placeholder")){let c=(l.getNamedImports()??[]).find(d=>d.getName()==="IconPlaceholder");c&&c.remove(),l.getNamedImports()?.length===0&&l.remove();}if(a$1.length>0){let l=t.import.split(`
2
+ `),f=[];for(let n of l){let c=n.match(/import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]/);if(!c)continue;let[,d,u]=c,N=d.split(",").map(g=>g.trim()).map(g=>g==="ICON"?a$1.map(x=>({name:x})):{name:g}).flat(),A=i.addImportDeclaration({moduleSpecifier:u,namedImports:N});f.push(A);}if(!L(i))for(let n of f)n.replaceWithText(n.getText().replace(";",""));}return i};function L(i){return i.getImportDeclarations()?.[0]?.getText().endsWith(";")??false}var F=async({sourceFile:i,config:e,baseColor:s})=>(e.tailwind?.cssVariables||!s?.inlineColors||i.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach(r=>{let t=r.getLiteralText(),a=z(t,s.inlineColors).trim();a!==t&&r.setLiteralValue(a);}),i);function I(i){if(!i.includes("/")&&!i.includes(":"))return [null,i,null];let e=-1,s=0;for(let n=i.length-1;n>=0;n--){let c=i[n];if(c==="]")s++;else if(c==="[")s--;else if(c===":"&&s===0){e=n;break}}let r=null,t;e===-1?t=i:(r=i.slice(0,e),t=i.slice(e+1));let a=t.lastIndexOf("/");if(a===-1)return [r,t,null];let l=t.slice(0,a),f=t.slice(a+1);return [r,l,f]}var D=["bg-","text-","border-","ring-offset-","ring-"];function z(i,e){i.includes(" border ")&&(i=i.replace(" border "," border border-border "));let s=i.split(" "),r=new Set,t=new Set;for(let a of s){let[l,f,n]=I(a),c=D.find(u=>f?.startsWith(u));if(!c){r.has(a)||r.add(a);continue}let d=f?.replace(c,"");if(d&&d in e.light){r.add([l,`${c}${e.light[d]}`].filter(Boolean).join(":")+(n?`/${n}`:"")),t.add(["dark",l,`${c}${e.dark[d]}`].filter(Boolean).join(":")+(n?`/${n}`:""));continue}r.has(a)||r.add(a);}return [...Array.from(r),...Array.from(t)].join(" ").trim()}var v=[["-ml-","-ms-"],["-mr-","-me-"],["ml-","ms-"],["mr-","me-"],["pl-","ps-"],["pr-","pe-"],["-left-","-start-"],["-right-","-end-"],["left-","start-"],["right-","end-"],["inset-l-","inset-inline-start-"],["inset-r-","inset-inline-end-"],["rounded-tl-","rounded-ss-"],["rounded-tr-","rounded-se-"],["rounded-bl-","rounded-es-"],["rounded-br-","rounded-ee-"],["rounded-l-","rounded-s-"],["rounded-r-","rounded-e-"],["border-l-","border-s-"],["border-r-","border-e-"],["border-l","border-s"],["border-r","border-e"],["text-left","text-start"],["text-right","text-end"],["scroll-ml-","scroll-ms-"],["scroll-mr-","scroll-me-"],["scroll-pl-","scroll-ps-"],["scroll-pr-","scroll-pe-"],["float-left","float-start"],["float-right","float-end"],["clear-left","clear-start"],["clear-right","clear-end"],["origin-top-left","origin-top-start"],["origin-top-right","origin-top-end"],["origin-bottom-left","origin-bottom-start"],["origin-bottom-right","origin-bottom-end"],["origin-left","origin-start"],["origin-right","origin-end"]],w=[["-translate-x-","translate-x-"],["translate-x-","-translate-x-"]],M=[["space-x-","space-x-reverse"],["divide-x-","divide-x-reverse"]],R=[["cursor-w-resize","cursor-e-resize"],["cursor-e-resize","cursor-w-resize"]],j=[["data-[side=inline-start]","slide-in-from-right","slide-in-from-end"],["data-[side=inline-start]","slide-out-to-right","slide-out-to-end"],["data-[side=inline-end]","slide-in-from-left","slide-in-from-start"],["data-[side=inline-end]","slide-out-to-left","slide-out-to-start"]],J="cn-rtl-flip",P=["ContextMenuContent","ContextMenuSubContent","DropdownMenuSubContent"],y={right:"inline-end",left:"inline-start"},V=["-left-","-right-","left-","right-"],nt=async({sourceFile:i,config:e})=>(e.rtl&&C(i),i);async function st(i,e){if(!e)return i;let r=new Project({useInMemoryFileSystem:true}).createSourceFile("component.tsx",i,{scriptKind:ScriptKind.TSX,overwrite:true});return C(r),r.getText()}function b(i){return i.replace(/^["']|["']$/g,"")}function h(i){let e=b(i.getText()??"");i.replaceWithText(`"${B(e)}"`);}function B(i){return i.split(" ").flatMap(e=>{if(e.startsWith("rtl:")||e.startsWith("ltr:"))return [e];if(e===J)return ["rtl:rotate-180"];let[s,r,t]=I(e);if(!r)return [e];for(let[n,c]of w)if(r.startsWith(n)){let d=r.replace(n,c),u=s?`rtl:${s}:${d}${t?`/${t}`:""}`:`rtl:${d}${t?`/${t}`:""}`;return [e,u]}for(let[n,c]of M)if(r.startsWith(n)){let d=s?`rtl:${s}:${c}`:`rtl:${c}`;return [e,d]}for(let[n,c]of R)if(r===n){let d=s?`rtl:${s}:${c}`:`rtl:${c}`;return [e,d]}for(let[n,c,d]of j)if(s?.includes(n)&&r.startsWith(c)){let u=r.replace(c,d);return [t?`${s}:${u}/${t}`:`${s}:${u}`]}let a=s?.includes("data-[side=left]")||s?.includes("data-[side=right]"),l=r;for(let[n,c]of v)if(!(a&&V.some(d=>n.startsWith(d)))&&r.startsWith(n)){if(!n.endsWith("-")&&r!==n)continue;l=r.replace(n,c);break}let f;return s?f=t?`${s}:${l}/${t}`:`${s}:${l}`:f=t?`${l}/${t}`:l,[f]}).join(" ")}function C(i){i.getDescendantsOfKind(SyntaxKind.CallExpression).filter(e=>e.getExpression().getText()==="cva").forEach(e=>{let s=e.getArguments()[0];s?.isKind(SyntaxKind.StringLiteral)&&h(s),e.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)&&e.getArguments()[1]?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).find(r=>r.getName()==="variants")?.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(r=>{r.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(t=>{let a=t.getInitializerIfKind(SyntaxKind.StringLiteral);a&&h(a);});});}),i.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach(e=>{if(e.getNameNode().getText()==="className"){let s=e.getInitializer();if(s?.isKind(SyntaxKind.StringLiteral)&&h(s),e.getInitializer()?.isKind(SyntaxKind.JsxExpression)){let r=e.getInitializer()?.getDescendantsOfKind(SyntaxKind.CallExpression).find(t=>t.getExpression().getText()==="cn");r&&r.getArguments().forEach(t=>{(t.isKind(SyntaxKind.ConditionalExpression)||t.isKind(SyntaxKind.BinaryExpression))&&t.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h),t.isKind(SyntaxKind.StringLiteral)&&h(t);});}}e.getNameNode().getText()==="classNames"&&e.getInitializer()?.isKind(SyntaxKind.JsxExpression)&&e.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach(s=>{if(s.getInitializer()?.isKind(SyntaxKind.CallExpression)){let t=s.getInitializerIfKind(SyntaxKind.CallExpression);t&&t.getArguments().forEach(a=>{a.isKind(SyntaxKind.ConditionalExpression)&&a.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h),a.isKind(SyntaxKind.StringLiteral)&&h(a);});}let r=s.getInitializer();r?.isKind(SyntaxKind.StringLiteral)&&s.getNameNode().getText()!=="variant"&&h(r);});}),i.getDescendantsOfKind(SyntaxKind.CallExpression).filter(e=>e.getExpression().getText()==="mergeProps").forEach(e=>{let s=e.getArguments()[0];if(s?.isKind(SyntaxKind.ObjectLiteralExpression)){let r=s.getProperties().find(t=>t.isKind(SyntaxKind.PropertyAssignment)&&t.getName()==="className");if(r?.isKind(SyntaxKind.PropertyAssignment)){let t=r.getInitializer();t?.isKind(SyntaxKind.CallExpression)&&t.getExpression().getText()==="cn"&&t.getArguments().forEach(a=>{a.isKind(SyntaxKind.StringLiteral)&&h(a),(a.isKind(SyntaxKind.ConditionalExpression)||a.isKind(SyntaxKind.BinaryExpression))&&a.getChildrenOfKind(SyntaxKind.StringLiteral).forEach(h);}),t?.isKind(SyntaxKind.StringLiteral)&&h(t);}}}),[...i.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),...i.getDescendantsOfKind(SyntaxKind.JsxOpeningElement)].forEach(e=>{let s=e.getTagNameNode().getText();if(!P.includes(s))return;let r=e.getAttributes().find(f=>f.isKind(SyntaxKind.JsxAttribute)&&f.getNameNode().getText()==="side");if(!r?.isKind(SyntaxKind.JsxAttribute))return;let t=r.getInitializer();if(!t?.isKind(SyntaxKind.StringLiteral))return;let a=b(t.getText()??""),l=y[a];l&&t.replaceWithText(`"${l}"`);}),i.getDescendantsOfKind(SyntaxKind.BindingElement).forEach(e=>{if(e.getNameNode().getText()!=="side")return;let t=e.getFirstAncestorByKind(SyntaxKind.FunctionDeclaration)?.getName();if(!t||!P.includes(t))return;let a=e.getInitializer();if(!a?.isKind(SyntaxKind.StringLiteral))return;let l=b(a.getText()??""),f=y[l];f&&a.replaceWithText(`"${f}"`);});}var lt=async({sourceFile:i,config:e})=>{let r=e.menuColor==="inverted"?"dark":"";for(let t of i.getDescendantsOfKind(SyntaxKind.JsxAttribute)){if(t.getNameNode().getText()!=="className")continue;let l=t.getInitializer();if(!l)continue;let f=l.getText();if(!f.includes("cn-menu-target"))continue;let n=f.replace(/cn-menu-target/g,r);r||(n=n.replace(/\s{2,}/g," "),n=n.replace(/"\s+/g,'"'),n=n.replace(/\s+"/g,'"'),n=n.replace(/,\s*""\s*,/g,","),n=n.replace(/\(\s*""\s*,/g,"("),n=n.replace(/,\s*""\s*\)/g,")")),t.setInitializer(n);}return i};export{F as a,I as b,H as c,nt as d,st as e,lt as f};//# sourceMappingURL=chunk-QBEUCOED.js.map
3
+ //# sourceMappingURL=chunk-QBEUCOED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/transformers/transform-icons.ts","../src/utils/transformers/transform-css-vars.ts","../src/utils/transformers/transform-rtl.ts","../src/utils/transformers/transform-menu.ts"],"names":["transformIcons","sourceFile","config","iconLibrary","iconLibraries","targetLibrary","libraryConfig","transformedIcons","element","SyntaxKind","libraryPropAttr","attr","jsxIconAttr","targetIconName","usageMatch","jsxAttr","componentName","defaultPropsStr","userAttributes","existingPropNames","defaultPropsToAdd","prop","propName","allProps","importDeclaration","iconPlaceholderImport","specifier","importStatements","addedImports","importStmt","importMatch","importedNames","modulePath","namedImports","name","icon","newImport","_useSemicolon","importDecl","transformCssVars","baseColor","node","raw","mapped","applyColorMapping","splitClassName","className","lastColonIndex","bracketDepth","i","char","variant","nameWithAlpha","slashIndex","alpha","PREFIXES","input","mapping","classNames","lightMode","darkMode","value","modifier","prefix","needle","RTL_MAPPINGS","RTL_TRANSLATE_X_MAPPINGS","RTL_REVERSE_MAPPINGS","RTL_SWAP_MAPPINGS","RTL_LOGICAL_SIDE_SLIDE_MAPPINGS","RTL_FLIP_MARKER","RTL_SIDE_PROP_COMPONENTS","RTL_SIDE_PROP_MAPPINGS","POSITIONING_PREFIXES","transformRtl","applyRtlTransformToSourceFile","transformDirection","source","rtl","Project","ScriptKind","stripQuotes","str","transformStringLiteralNode","text","applyRtlMapping","physical","rtlPhysical","rtlValue","rtlClass","reverseClass","swapped","variantPattern","logical","mappedValue","isPhysicalSideVariant","p","result","firstArg","initializer","callExpression","arg","propInit","classNameProp","init","tagName","sideAttr","sideValue","currentValue","functionName","transformMenu","replacement","newText"],"mappings":"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","file":"chunk-QBEUCOED.js","sourcesContent":["import { iconLibraries, type IconLibraryName } from \"@/src/icons/libraries\"\r\nimport { Transformer } from \"@/src/utils/transformers\"\r\nimport { SourceFile, SyntaxKind } from \"ts-morph\"\r\n\r\nexport const transformIcons: Transformer = async ({ sourceFile, config }) => {\r\n const iconLibrary = config.iconLibrary\r\n\r\n // Fail silently if the icon library is not supported.\r\n // This is for legacy icon libraries.\r\n if (!iconLibrary || !(iconLibrary in iconLibraries)) {\r\n return sourceFile\r\n }\r\n\r\n const targetLibrary = iconLibrary as IconLibraryName\r\n const libraryConfig = iconLibraries[targetLibrary]\r\n let transformedIcons: string[] = []\r\n\r\n for (const element of sourceFile.getDescendantsOfKind(\r\n SyntaxKind.JsxSelfClosingElement\r\n )) {\r\n if (element.getTagNameNode()?.getText() !== \"IconPlaceholder\") {\r\n continue\r\n }\r\n\r\n // Find the library-specific prop (e.g., \"lucide\", \"tabler\", \"hugeicons\")\r\n const libraryPropAttr = element.getAttributes().find((attr) => {\r\n if (attr.getKind() !== SyntaxKind.JsxAttribute) {\r\n return false\r\n }\r\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute)\r\n return jsxAttr.getNameNode().getText() === targetLibrary\r\n })\r\n\r\n if (!libraryPropAttr) {\r\n continue // No icon specified for this library\r\n }\r\n\r\n const jsxIconAttr = libraryPropAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\r\n const targetIconName = jsxIconAttr\r\n .getInitializer()\r\n ?.getText()\r\n .replace(/^[\"']|[\"']$/g, \"\")\r\n\r\n if (!targetIconName) {\r\n continue\r\n }\r\n\r\n if (!transformedIcons.includes(targetIconName)) {\r\n transformedIcons.push(targetIconName)\r\n }\r\n\r\n const usage = libraryConfig.usage\r\n const usageMatch = usage.match(/<(\\w+)([^>]*)\\s*\\/>/)\r\n\r\n // Remove the library-specific prop\r\n jsxIconAttr.remove()\r\n\r\n // Remove all other library-specific props\r\n for (const attr of element.getAttributes()) {\r\n if (attr.getKind() !== SyntaxKind.JsxAttribute) {\r\n continue\r\n }\r\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute)\r\n const attrName = jsxAttr.getNameNode().getText()\r\n // Filter out library-specific props (lucide, tabler, hugeicons, etc.)\r\n if (attrName in iconLibraries) {\r\n jsxAttr.remove()\r\n }\r\n }\r\n\r\n if (!usageMatch) {\r\n element.getTagNameNode()?.replaceWithText(targetIconName)\r\n continue\r\n }\r\n\r\n const [, componentName, defaultPropsStr] = usageMatch\r\n\r\n if (componentName === \"ICON\") {\r\n // Get remaining user attributes (non-library props)\r\n const userAttributes = element\r\n .getAttributes()\r\n .filter((attr) => {\r\n if (attr.getKind() !== SyntaxKind.JsxAttribute) {\r\n return true\r\n }\r\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute)\r\n const attrName = jsxAttr.getNameNode().getText()\r\n // Filter out library-specific props (lucide, tabler, hugeicons, etc.)\r\n return !(attrName in iconLibraries)\r\n })\r\n .map((attr) => attr.getText())\r\n .join(\" \")\r\n\r\n if (userAttributes.trim()) {\r\n element.replaceWithText(`<${targetIconName} ${userAttributes} />`)\r\n } else {\r\n element.getTagNameNode()?.replaceWithText(targetIconName)\r\n }\r\n } else {\r\n const existingPropNames = new Set(\r\n element\r\n .getAttributes()\r\n .filter((attr) => attr.getKind() === SyntaxKind.JsxAttribute)\r\n .map((attr) =>\r\n attr.asKindOrThrow(SyntaxKind.JsxAttribute).getNameNode().getText()\r\n )\r\n )\r\n\r\n // Replace ICON placeholder in defaultPropsStr with actual icon name\r\n const defaultPropsWithIcon = defaultPropsStr.replace(\r\n /\\{ICON\\}/g,\r\n `{${targetIconName}}`\r\n )\r\n\r\n const defaultPropsToAdd = defaultPropsWithIcon\r\n .trim()\r\n .split(/\\s+(?=\\w+=)/)\r\n .filter((prop) => prop)\r\n .map((prop) => {\r\n const propName = prop.split(\"=\")[0]\r\n return propName && !existingPropNames.has(propName) ? prop : null\r\n })\r\n .filter(Boolean)\r\n\r\n const userAttributes = element\r\n .getAttributes()\r\n .filter((attr) => {\r\n if (attr.getKind() !== SyntaxKind.JsxAttribute) {\r\n return true\r\n }\r\n const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute)\r\n const attrName = jsxAttr.getNameNode().getText()\r\n // Filter out library-specific props (lucide, tabler, hugeicons, etc.)\r\n return !(attrName in iconLibraries)\r\n })\r\n .map((attr) => attr.getText())\r\n .join(\" \")\r\n\r\n const allProps = [...defaultPropsToAdd, userAttributes]\r\n .filter(Boolean)\r\n .join(\" \")\r\n\r\n element.replaceWithText(`<${componentName} ${allProps} />`)\r\n }\r\n }\r\n\r\n for (const importDeclaration of sourceFile.getImportDeclarations() ?? []) {\r\n const moduleSpecifier = importDeclaration.getModuleSpecifier()?.getText()\r\n if (moduleSpecifier?.includes(\"icon-placeholder\")) {\r\n const namedImports = importDeclaration.getNamedImports() ?? []\r\n const iconPlaceholderImport = namedImports.find(\r\n (specifier) => specifier.getName() === \"IconPlaceholder\"\r\n )\r\n\r\n if (iconPlaceholderImport) {\r\n iconPlaceholderImport.remove()\r\n }\r\n\r\n if (importDeclaration.getNamedImports()?.length === 0) {\r\n importDeclaration.remove()\r\n }\r\n }\r\n }\r\n\r\n if (transformedIcons.length > 0) {\r\n const importStatements = libraryConfig.import.split(\"\\n\")\r\n const addedImports = []\r\n\r\n for (const importStmt of importStatements) {\r\n const importMatch = importStmt.match(\r\n /import\\s+{([^}]+)}\\s+from\\s+['\"]([^'\"]+)['\"]/\r\n )\r\n\r\n if (!importMatch) continue\r\n\r\n const [, importedNames, modulePath] = importMatch\r\n const namedImports = importedNames\r\n .split(\",\")\r\n .map((name) => name.trim())\r\n .map((name) => {\r\n if (name === \"ICON\") {\r\n return transformedIcons.map((icon) => ({ name: icon }))\r\n }\r\n return { name }\r\n })\r\n .flat()\r\n\r\n const newImport = sourceFile.addImportDeclaration({\r\n moduleSpecifier: modulePath,\r\n namedImports,\r\n })\r\n\r\n addedImports.push(newImport)\r\n }\r\n\r\n if (!_useSemicolon(sourceFile)) {\r\n for (const importDecl of addedImports) {\r\n importDecl.replaceWithText(importDecl.getText().replace(\";\", \"\"))\r\n }\r\n }\r\n }\r\n\r\n return sourceFile\r\n}\r\n\r\nfunction _useSemicolon(sourceFile: SourceFile) {\r\n return (\r\n sourceFile.getImportDeclarations()?.[0]?.getText().endsWith(\";\") ?? false\r\n )\r\n}\r\n","import { registryBaseColorSchema } from \"@/src/schema\"\r\nimport { Transformer } from \"@/src/utils/transformers\"\r\nimport { ScriptKind, SyntaxKind } from \"ts-morph\"\r\nimport { z } from \"zod\"\r\n\r\nexport const transformCssVars: Transformer = async ({\r\n sourceFile,\r\n config,\r\n baseColor,\r\n}) => {\r\n // No transform if using css variables.\r\n if (config.tailwind?.cssVariables || !baseColor?.inlineColors) {\r\n return sourceFile\r\n }\r\n\r\n // Find jsx attributes with the name className.\r\n // const openingElements = sourceFile.getDescendantsOfKind(SyntaxKind.JsxElement)\r\n // console.log(openingElements)\r\n // const jsxAttributes = sourceFile\r\n // .getDescendantsOfKind(SyntaxKind.JsxAttribute)\r\n // .filter((node) => node.getName() === \"className\")\r\n\r\n // for (const jsxAttribute of jsxAttributes) {\r\n // const value = jsxAttribute.getInitializer()?.getText()\r\n // if (value) {\r\n // const valueWithColorMapping = applyColorMapping(\r\n // value.replace(/\"/g, \"\"),\r\n // baseColor.inlineColors\r\n // )\r\n // jsxAttribute.setInitializer(`\"${valueWithColorMapping}\"`)\r\n // }\r\n // }\r\n sourceFile.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach((node) => {\r\n const raw = node.getLiteralText()\r\n const mapped = applyColorMapping(raw, baseColor.inlineColors).trim()\r\n if (mapped !== raw) {\r\n node.setLiteralValue(mapped)\r\n }\r\n })\r\n\r\n return sourceFile\r\n}\r\n\r\n// export default function transformer(file: FileInfo, api: API) {\r\n// const j = api.jscodeshift.withParser(\"tsx\")\r\n\r\n// // Replace bg-background with \"bg-white dark:bg-slate-950\"\r\n// const $j = j(file.source)\r\n// return $j\r\n// .find(j.JSXAttribute, {\r\n// name: {\r\n// name: \"className\",\r\n// },\r\n// })\r\n// .forEach((path) => {\r\n// const { node } = path\r\n// if (node?.value?.type) {\r\n// if (node.value.type === \"StringLiteral\") {\r\n// node.value.value = applyColorMapping(node.value.value)\r\n// console.log(node.value.value)\r\n// }\r\n\r\n// if (\r\n// node.value.type === \"JSXExpressionContainer\" &&\r\n// node.value.expression.type === \"CallExpression\"\r\n// ) {\r\n// const callee = node.value.expression.callee\r\n// if (callee.type === \"Identifier\" && callee.name === \"cn\") {\r\n// node.value.expression.arguments.forEach((arg) => {\r\n// if (arg.type === \"StringLiteral\") {\r\n// arg.value = applyColorMapping(arg.value)\r\n// }\r\n\r\n// if (\r\n// arg.type === \"LogicalExpression\" &&\r\n// arg.right.type === \"StringLiteral\"\r\n// ) {\r\n// arg.right.value = applyColorMapping(arg.right.value)\r\n// }\r\n// })\r\n// }\r\n// }\r\n// }\r\n// })\r\n// .toSource()\r\n// }\r\n\r\n// // export function splitClassName(input: string): (string | null)[] {\r\n// // const parts = input.split(\":\")\r\n// // const classNames = parts.map((part) => {\r\n// // const match = part.match(/^\\[?(.+)\\]$/)\r\n// // if (match) {\r\n// // return match[1]\r\n// // } else {\r\n// // return null\r\n// // }\r\n// // })\r\n\r\n// // return classNames\r\n// // }\r\n\r\n// Splits a className into [variant, name, alpha].\r\n// eg. hover:bg-primary-100 -> [hover, bg-primary, 100]\r\n// eg. sm:group-data-[size=default]/alert-dialog-content:text-left -> [sm:group-data-[size=default]/alert-dialog-content, text-left, null]\r\nexport function splitClassName(className: string): (string | null)[] {\r\n if (!className.includes(\"/\") && !className.includes(\":\")) {\r\n return [null, className, null]\r\n }\r\n\r\n // Find the last colon that's not inside brackets to split variant from name.\r\n let lastColonIndex = -1\r\n let bracketDepth = 0\r\n for (let i = className.length - 1; i >= 0; i--) {\r\n const char = className[i]\r\n if (char === \"]\") bracketDepth++\r\n else if (char === \"[\") bracketDepth--\r\n else if (char === \":\" && bracketDepth === 0) {\r\n lastColonIndex = i\r\n break\r\n }\r\n }\r\n\r\n let variant: string | null = null\r\n let nameWithAlpha: string\r\n\r\n if (lastColonIndex === -1) {\r\n // No colon outside brackets, entire string is the name (possibly with alpha).\r\n nameWithAlpha = className\r\n } else {\r\n variant = className.slice(0, lastColonIndex)\r\n nameWithAlpha = className.slice(lastColonIndex + 1)\r\n }\r\n\r\n // Now split nameWithAlpha by \"/\" for alpha modifier.\r\n // Alpha modifiers are numeric (e.g., /50) or arbitrary (e.g., /[50%]).\r\n // Named groups like /alert-dialog-content would have been part of variant.\r\n const slashIndex = nameWithAlpha.lastIndexOf(\"/\")\r\n if (slashIndex === -1) {\r\n return [variant, nameWithAlpha, null]\r\n }\r\n\r\n const name = nameWithAlpha.slice(0, slashIndex)\r\n const alpha = nameWithAlpha.slice(slashIndex + 1)\r\n\r\n return [variant, name, alpha]\r\n}\r\n\r\nconst PREFIXES = [\"bg-\", \"text-\", \"border-\", \"ring-offset-\", \"ring-\"]\r\n\r\nexport function applyColorMapping(\r\n input: string,\r\n mapping: z.infer<typeof registryBaseColorSchema>[\"inlineColors\"]\r\n) {\r\n // Handle border classes.\r\n if (input.includes(\" border \")) {\r\n input = input.replace(\" border \", \" border border-border \")\r\n }\r\n\r\n // Build color mappings.\r\n const classNames = input.split(\" \")\r\n const lightMode = new Set<string>()\r\n const darkMode = new Set<string>()\r\n for (let className of classNames) {\r\n const [variant, value, modifier] = splitClassName(className)\r\n const prefix = PREFIXES.find((prefix) => value?.startsWith(prefix))\r\n if (!prefix) {\r\n if (!lightMode.has(className)) {\r\n lightMode.add(className)\r\n }\r\n continue\r\n }\r\n\r\n const needle = value?.replace(prefix, \"\")\r\n if (needle && needle in mapping.light) {\r\n lightMode.add(\r\n [variant, `${prefix}${mapping.light[needle]}`]\r\n .filter(Boolean)\r\n .join(\":\") + (modifier ? `/${modifier}` : \"\")\r\n )\r\n\r\n darkMode.add(\r\n [\"dark\", variant, `${prefix}${mapping.dark[needle]}`]\r\n .filter(Boolean)\r\n .join(\":\") + (modifier ? `/${modifier}` : \"\")\r\n )\r\n continue\r\n }\r\n\r\n if (!lightMode.has(className)) {\r\n lightMode.add(className)\r\n }\r\n }\r\n\r\n return [...Array.from(lightMode), ...Array.from(darkMode)].join(\" \").trim()\r\n}\r\n","import { Transformer } from \"@/src/utils/transformers\"\r\nimport { Project, ScriptKind, SourceFile, SyntaxKind } from \"ts-morph\"\r\n\r\nimport { splitClassName } from \"./transform-css-vars\"\r\n\r\n// Physical → logical Tailwind class mappings (direct replacement).\r\n// Order matters to avoid partial matches:\r\n// - Negative prefixes before positive (e.g., -ml- before ml-).\r\n// - Specific corners before general ones e.g. rounded-tl- before rounded-l-.\r\n// - With-value variants before without-value (e.g., border-l- before border-l).\r\nconst RTL_MAPPINGS: [string, string][] = [\r\n [\"-ml-\", \"-ms-\"],\r\n [\"-mr-\", \"-me-\"],\r\n [\"ml-\", \"ms-\"],\r\n [\"mr-\", \"me-\"],\r\n [\"pl-\", \"ps-\"],\r\n [\"pr-\", \"pe-\"],\r\n [\"-left-\", \"-start-\"],\r\n [\"-right-\", \"-end-\"],\r\n [\"left-\", \"start-\"],\r\n [\"right-\", \"end-\"],\r\n [\"inset-l-\", \"inset-inline-start-\"],\r\n [\"inset-r-\", \"inset-inline-end-\"],\r\n [\"rounded-tl-\", \"rounded-ss-\"],\r\n [\"rounded-tr-\", \"rounded-se-\"],\r\n [\"rounded-bl-\", \"rounded-es-\"],\r\n [\"rounded-br-\", \"rounded-ee-\"],\r\n [\"rounded-l-\", \"rounded-s-\"],\r\n [\"rounded-r-\", \"rounded-e-\"],\r\n [\"border-l-\", \"border-s-\"],\r\n [\"border-r-\", \"border-e-\"],\r\n [\"border-l\", \"border-s\"],\r\n [\"border-r\", \"border-e\"],\r\n [\"text-left\", \"text-start\"],\r\n [\"text-right\", \"text-end\"],\r\n [\"scroll-ml-\", \"scroll-ms-\"],\r\n [\"scroll-mr-\", \"scroll-me-\"],\r\n [\"scroll-pl-\", \"scroll-ps-\"],\r\n [\"scroll-pr-\", \"scroll-pe-\"],\r\n [\"float-left\", \"float-start\"],\r\n [\"float-right\", \"float-end\"],\r\n [\"clear-left\", \"clear-start\"],\r\n [\"clear-right\", \"clear-end\"],\r\n [\"origin-top-left\", \"origin-top-start\"],\r\n [\"origin-top-right\", \"origin-top-end\"],\r\n [\"origin-bottom-left\", \"origin-bottom-start\"],\r\n [\"origin-bottom-right\", \"origin-bottom-end\"],\r\n [\"origin-left\", \"origin-start\"],\r\n [\"origin-right\", \"origin-end\"],\r\n]\r\n\r\n// Translate-x: adds rtl: variant (negative ↔ positive).\r\nconst RTL_TRANSLATE_X_MAPPINGS: [string, string][] = [\r\n [\"-translate-x-\", \"translate-x-\"],\r\n [\"translate-x-\", \"-translate-x-\"],\r\n]\r\n\r\n// Classes that need rtl:*-reverse (no logical equivalents).\r\nconst RTL_REVERSE_MAPPINGS: [string, string][] = [\r\n [\"space-x-\", \"space-x-reverse\"],\r\n [\"divide-x-\", \"divide-x-reverse\"],\r\n]\r\n\r\n// Classes that need rtl: variant with swapped value.\r\nconst RTL_SWAP_MAPPINGS: [string, string][] = [\r\n [\"cursor-w-resize\", \"cursor-e-resize\"],\r\n [\"cursor-e-resize\", \"cursor-w-resize\"],\r\n]\r\n\r\n// Slide animations inside logical side variants: [variant, physical, logical].\r\nconst RTL_LOGICAL_SIDE_SLIDE_MAPPINGS: [string, string, string][] = [\r\n [\"data-[side=inline-start]\", \"slide-in-from-right\", \"slide-in-from-end\"],\r\n [\"data-[side=inline-start]\", \"slide-out-to-right\", \"slide-out-to-end\"],\r\n [\"data-[side=inline-end]\", \"slide-in-from-left\", \"slide-in-from-start\"],\r\n [\"data-[side=inline-end]\", \"slide-out-to-left\", \"slide-out-to-start\"],\r\n]\r\n\r\n// Marker class for icons that should get rtl:rotate-180.\r\nconst RTL_FLIP_MARKER = \"cn-rtl-flip\"\r\n\r\n// Components with side prop transformed to logical values.\r\nconst RTL_SIDE_PROP_COMPONENTS = [\r\n \"ContextMenuContent\",\r\n \"ContextMenuSubContent\",\r\n \"DropdownMenuSubContent\",\r\n]\r\n\r\n// Side prop value mappings.\r\nconst RTL_SIDE_PROP_MAPPINGS: Record<string, string> = {\r\n right: \"inline-end\",\r\n left: \"inline-start\",\r\n}\r\n\r\n// Positioning prefixes to skip for physical side variants.\r\nconst POSITIONING_PREFIXES = [\"-left-\", \"-right-\", \"left-\", \"right-\"]\r\n\r\nexport const transformRtl: Transformer = async ({ sourceFile, config }) => {\r\n if (!config.rtl) {\r\n return sourceFile\r\n }\r\n\r\n applyRtlTransformToSourceFile(sourceFile)\r\n\r\n return sourceFile\r\n}\r\n\r\n// Standalone function to transform source code for RTL.\r\n// This is used by the build script.\r\nexport async function transformDirection(source: string, rtl: boolean) {\r\n if (!rtl) {\r\n return source\r\n }\r\n\r\n const project = new Project({\r\n useInMemoryFileSystem: true,\r\n })\r\n\r\n const sourceFile = project.createSourceFile(\"component.tsx\", source, {\r\n scriptKind: ScriptKind.TSX,\r\n overwrite: true,\r\n })\r\n\r\n applyRtlTransformToSourceFile(sourceFile)\r\n\r\n return sourceFile.getText()\r\n}\r\n\r\nfunction stripQuotes(str: string) {\r\n return str.replace(/^[\"']|[\"']$/g, \"\")\r\n}\r\n\r\n// Transforms a string literal node by applying RTL mappings.\r\nfunction transformStringLiteralNode(node: {\r\n getText(): string\r\n replaceWithText(text: string): void\r\n}) {\r\n const text = stripQuotes(node.getText() ?? \"\")\r\n node.replaceWithText(`\"${applyRtlMapping(text)}\"`)\r\n}\r\n\r\nexport function applyRtlMapping(input: string) {\r\n return input\r\n .split(\" \")\r\n .flatMap((className) => {\r\n // Skip classes that already have rtl: or ltr: prefix.\r\n if (className.startsWith(\"rtl:\") || className.startsWith(\"ltr:\")) {\r\n return [className]\r\n }\r\n\r\n // Replace the cn-rtl-flip marker with rtl:rotate-180.\r\n if (className === RTL_FLIP_MARKER) {\r\n return [\"rtl:rotate-180\"]\r\n }\r\n const [variant, value, modifier] = splitClassName(className)\r\n\r\n if (!value) {\r\n return [className]\r\n }\r\n\r\n // Check for translate-x patterns first (add rtl: variant, don't replace).\r\n for (const [physical, rtlPhysical] of RTL_TRANSLATE_X_MAPPINGS) {\r\n if (value.startsWith(physical)) {\r\n const rtlValue = value.replace(physical, rtlPhysical)\r\n const rtlClass = variant\r\n ? `rtl:${variant}:${rtlValue}${modifier ? `/${modifier}` : \"\"}`\r\n : `rtl:${rtlValue}${modifier ? `/${modifier}` : \"\"}`\r\n return [className, rtlClass]\r\n }\r\n }\r\n\r\n // Check for space-x/divide-x patterns (add rtl:*-reverse variant).\r\n for (const [prefix, reverseClass] of RTL_REVERSE_MAPPINGS) {\r\n if (value.startsWith(prefix)) {\r\n const rtlClass = variant\r\n ? `rtl:${variant}:${reverseClass}`\r\n : `rtl:${reverseClass}`\r\n return [className, rtlClass]\r\n }\r\n }\r\n\r\n // Check for cursor and other swap patterns (add rtl: variant with swapped value).\r\n for (const [physical, swapped] of RTL_SWAP_MAPPINGS) {\r\n if (value === physical) {\r\n const rtlClass = variant\r\n ? `rtl:${variant}:${swapped}`\r\n : `rtl:${swapped}`\r\n return [className, rtlClass]\r\n }\r\n }\r\n\r\n // Check for slide animations inside logical side variants.\r\n // e.g., data-[side=inline-start]:slide-in-from-right-2 → data-[side=inline-start]:slide-in-from-end-2\r\n for (const [\r\n variantPattern,\r\n physical,\r\n logical,\r\n ] of RTL_LOGICAL_SIDE_SLIDE_MAPPINGS) {\r\n if (variant?.includes(variantPattern) && value.startsWith(physical)) {\r\n const mappedValue = value.replace(physical, logical)\r\n const result = modifier\r\n ? `${variant}:${mappedValue}/${modifier}`\r\n : `${variant}:${mappedValue}`\r\n return [result]\r\n }\r\n }\r\n\r\n // Skip positioning transformations for physical side variants.\r\n // e.g., data-[side=left]:-right-1 should NOT become data-[side=left]:-end-1.\r\n const isPhysicalSideVariant =\r\n variant?.includes(\"data-[side=left]\") ||\r\n variant?.includes(\"data-[side=right]\")\r\n\r\n // Find matching RTL mapping for direct replacement.\r\n let mappedValue = value\r\n for (const [physical, logical] of RTL_MAPPINGS) {\r\n if (\r\n isPhysicalSideVariant &&\r\n POSITIONING_PREFIXES.some((p) => physical.startsWith(p))\r\n ) {\r\n continue\r\n }\r\n\r\n if (value.startsWith(physical)) {\r\n // For patterns without trailing '-', require exact match to avoid\r\n // partial matches like border-ring matching border-r.\r\n if (!physical.endsWith(\"-\") && value !== physical) {\r\n continue\r\n }\r\n mappedValue = value.replace(physical, logical)\r\n break\r\n }\r\n }\r\n\r\n // Reassemble with variant and modifier.\r\n let result: string\r\n if (variant) {\r\n result = modifier\r\n ? `${variant}:${mappedValue}/${modifier}`\r\n : `${variant}:${mappedValue}`\r\n } else {\r\n result = modifier ? `${mappedValue}/${modifier}` : mappedValue\r\n }\r\n\r\n return [result]\r\n })\r\n .join(\" \")\r\n}\r\n\r\n// Core RTL transformation logic that operates on a SourceFile.\r\n// Extracted to be reusable by both transformRtl (CLI) and transformDirection (build script).\r\nfunction applyRtlTransformToSourceFile(sourceFile: SourceFile) {\r\n // Find the cva function calls.\r\n sourceFile\r\n .getDescendantsOfKind(SyntaxKind.CallExpression)\r\n .filter((node) => node.getExpression().getText() === \"cva\")\r\n .forEach((node) => {\r\n // cva(base, ...).\r\n const firstArg = node.getArguments()[0]\r\n if (firstArg?.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(firstArg)\r\n }\r\n\r\n // cva(..., { variants: { ... } }).\r\n if (node.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)) {\r\n node\r\n .getArguments()[1]\r\n ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment)\r\n .find((node) => node.getName() === \"variants\")\r\n ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment)\r\n .forEach((node) => {\r\n node\r\n .getDescendantsOfKind(SyntaxKind.PropertyAssignment)\r\n .forEach((prop) => {\r\n const classNames = prop.getInitializerIfKind(\r\n SyntaxKind.StringLiteral\r\n )\r\n if (classNames) {\r\n transformStringLiteralNode(classNames)\r\n }\r\n })\r\n })\r\n }\r\n })\r\n\r\n // Find all jsx attributes with the name className.\r\n sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((node) => {\r\n if (node.getNameNode().getText() === \"className\") {\r\n // className=\"...\".\r\n const initializer = node.getInitializer()\r\n if (initializer?.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(initializer)\r\n }\r\n\r\n // className={...}.\r\n if (node.getInitializer()?.isKind(SyntaxKind.JsxExpression)) {\r\n // Check if it's a call to cn().\r\n const callExpression = node\r\n .getInitializer()\r\n ?.getDescendantsOfKind(SyntaxKind.CallExpression)\r\n .find((node) => node.getExpression().getText() === \"cn\")\r\n if (callExpression) {\r\n callExpression.getArguments().forEach((arg) => {\r\n if (\r\n arg.isKind(SyntaxKind.ConditionalExpression) ||\r\n arg.isKind(SyntaxKind.BinaryExpression)\r\n ) {\r\n arg\r\n .getChildrenOfKind(SyntaxKind.StringLiteral)\r\n .forEach(transformStringLiteralNode)\r\n }\r\n if (arg.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(arg)\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n // classNames={...}.\r\n if (node.getNameNode().getText() === \"classNames\") {\r\n if (node.getInitializer()?.isKind(SyntaxKind.JsxExpression)) {\r\n node\r\n .getDescendantsOfKind(SyntaxKind.PropertyAssignment)\r\n .forEach((node) => {\r\n if (node.getInitializer()?.isKind(SyntaxKind.CallExpression)) {\r\n const callExpression = node.getInitializerIfKind(\r\n SyntaxKind.CallExpression\r\n )\r\n if (callExpression) {\r\n callExpression.getArguments().forEach((arg) => {\r\n if (arg.isKind(SyntaxKind.ConditionalExpression)) {\r\n arg\r\n .getChildrenOfKind(SyntaxKind.StringLiteral)\r\n .forEach(transformStringLiteralNode)\r\n }\r\n if (arg.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(arg)\r\n }\r\n })\r\n }\r\n }\r\n\r\n const propInit = node.getInitializer()\r\n if (propInit?.isKind(SyntaxKind.StringLiteral)) {\r\n if (node.getNameNode().getText() !== \"variant\") {\r\n transformStringLiteralNode(propInit)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n })\r\n\r\n // Find mergeProps calls with className property containing cn().\r\n sourceFile\r\n .getDescendantsOfKind(SyntaxKind.CallExpression)\r\n .filter((node) => node.getExpression().getText() === \"mergeProps\")\r\n .forEach((node) => {\r\n const firstArg = node.getArguments()[0]\r\n if (firstArg?.isKind(SyntaxKind.ObjectLiteralExpression)) {\r\n // Find className property.\r\n const classNameProp = firstArg\r\n .getProperties()\r\n .find(\r\n (prop) =>\r\n prop.isKind(SyntaxKind.PropertyAssignment) &&\r\n prop.getName() === \"className\"\r\n )\r\n if (classNameProp?.isKind(SyntaxKind.PropertyAssignment)) {\r\n const init = classNameProp.getInitializer()\r\n // Handle cn() call.\r\n if (init?.isKind(SyntaxKind.CallExpression)) {\r\n if (init.getExpression().getText() === \"cn\") {\r\n init.getArguments().forEach((arg) => {\r\n if (arg.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(arg)\r\n }\r\n if (\r\n arg.isKind(SyntaxKind.ConditionalExpression) ||\r\n arg.isKind(SyntaxKind.BinaryExpression)\r\n ) {\r\n arg\r\n .getChildrenOfKind(SyntaxKind.StringLiteral)\r\n .forEach(transformStringLiteralNode)\r\n }\r\n })\r\n }\r\n }\r\n // Handle plain string literal.\r\n if (init?.isKind(SyntaxKind.StringLiteral)) {\r\n transformStringLiteralNode(init)\r\n }\r\n }\r\n }\r\n })\r\n\r\n // Transform side prop to logical values for specific components.\r\n ;[\r\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),\r\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),\r\n ].forEach((element) => {\r\n const tagName = element.getTagNameNode().getText()\r\n if (!RTL_SIDE_PROP_COMPONENTS.includes(tagName)) {\r\n return\r\n }\r\n\r\n const sideAttr = element\r\n .getAttributes()\r\n .find(\r\n (attr) =>\r\n attr.isKind(SyntaxKind.JsxAttribute) &&\r\n attr.getNameNode().getText() === \"side\"\r\n )\r\n\r\n if (!sideAttr?.isKind(SyntaxKind.JsxAttribute)) {\r\n return\r\n }\r\n\r\n const sideValue = sideAttr.getInitializer()\r\n if (!sideValue?.isKind(SyntaxKind.StringLiteral)) {\r\n return\r\n }\r\n\r\n const currentValue = stripQuotes(sideValue.getText() ?? \"\")\r\n const mappedValue = RTL_SIDE_PROP_MAPPINGS[currentValue]\r\n if (mappedValue) {\r\n sideValue.replaceWithText(`\"${mappedValue}\"`)\r\n }\r\n })\r\n\r\n // Transform default parameter values for side prop (e.g., side = \"right\").\r\n // Only for functions whose names are in the whitelist.\r\n sourceFile.getDescendantsOfKind(SyntaxKind.BindingElement).forEach((node) => {\r\n const paramName = node.getNameNode().getText()\r\n if (paramName !== \"side\") {\r\n return\r\n }\r\n\r\n // Check if this binding element is inside a whitelisted function.\r\n const functionDecl = node.getFirstAncestorByKind(\r\n SyntaxKind.FunctionDeclaration\r\n )\r\n const functionName = functionDecl?.getName()\r\n if (!functionName || !RTL_SIDE_PROP_COMPONENTS.includes(functionName)) {\r\n return\r\n }\r\n\r\n const initializer = node.getInitializer()\r\n if (!initializer?.isKind(SyntaxKind.StringLiteral)) {\r\n return\r\n }\r\n\r\n const currentValue = stripQuotes(initializer.getText() ?? \"\")\r\n const mappedValue = RTL_SIDE_PROP_MAPPINGS[currentValue]\r\n if (mappedValue) {\r\n initializer.replaceWithText(`\"${mappedValue}\"`)\r\n }\r\n })\r\n}\r\n","import { Transformer } from \"@/src/utils/transformers\"\r\nimport { SyntaxKind } from \"ts-morph\"\r\n\r\n// Transforms cn-menu-target class based on config.menuColor.\r\n// If menuColor is \"inverted\", replaces cn-menu-target with \"dark\".\r\n// Otherwise, removes cn-menu-target entirely.\r\nexport const transformMenu: Transformer = async ({ sourceFile, config }) => {\r\n const menuColor = config.menuColor\r\n\r\n // If menuColor is not set or is \"default\", we remove the placeholder.\r\n const replacement = menuColor === \"inverted\" ? \"dark\" : \"\"\r\n\r\n for (const attr of sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {\r\n const attrName = attr.getNameNode().getText()\r\n if (attrName !== \"className\") {\r\n continue\r\n }\r\n\r\n const initializer = attr.getInitializer()\r\n if (!initializer) {\r\n continue\r\n }\r\n\r\n const text = initializer.getText()\r\n if (!text.includes(\"cn-menu-target\")) {\r\n continue\r\n }\r\n\r\n // Replace cn-menu-target with the replacement value.\r\n let newText = text.replace(/cn-menu-target/g, replacement)\r\n\r\n // Clean up extra spaces if we removed the class.\r\n if (!replacement) {\r\n // Remove double spaces.\r\n newText = newText.replace(/\\s{2,}/g, \" \")\r\n // Clean up leading/trailing spaces in strings.\r\n newText = newText.replace(/\"\\s+/g, '\"')\r\n newText = newText.replace(/\\s+\"/g, '\"')\r\n // Clean up empty strings in cn() calls.\r\n newText = newText.replace(/,\\s*\"\"\\s*,/g, \",\")\r\n newText = newText.replace(/\\(\\s*\"\"\\s*,/g, \"(\")\r\n newText = newText.replace(/,\\s*\"\"\\s*\\)/g, \")\")\r\n }\r\n\r\n attr.setInitializer(newText)\r\n }\r\n\r\n return sourceFile\r\n}\r\n"]}
@@ -0,0 +1,2 @@
1
+ import {z as z$1}from'zod';var c=z$1.union([z$1.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),z$1.object({url:z$1.string().refine(e=>e.includes("{name}"),{message:"Registry URL must include {name} placeholder"}),params:z$1.record(z$1.string(),z$1.string()).optional(),headers:z$1.record(z$1.string(),z$1.string()).optional()})]),l=z$1.record(z$1.string().refine(e=>e.startsWith("@"),{message:"Registry names must start with @ (e.g., @v0, @acme)"}),c),n=z$1.object({$schema:z$1.string().optional(),style:z$1.string(),rsc:z$1.coerce.boolean().default(false),tsx:z$1.coerce.boolean().default(true),tailwind:z$1.object({config:z$1.string().optional(),css:z$1.string(),baseColor:z$1.string(),cssVariables:z$1.boolean().default(true),prefix:z$1.string().default("").optional()}),iconLibrary:z$1.string().optional(),rtl:z$1.coerce.boolean().default(false).optional(),menuColor:z$1.enum(["default","inverted"]).default("default").optional(),menuAccent:z$1.enum(["subtle","bold"]).default("subtle").optional(),aliases:z$1.object({components:z$1.string(),utils:z$1.string(),ui:z$1.string().optional(),lib:z$1.string().optional(),hooks:z$1.string().optional()}),registries:l.optional()}).strict(),p=n.extend({resolvedPaths:z$1.object({cwd:z$1.string(),tailwindConfig:z$1.string(),tailwindCss:z$1.string(),utils:z$1.string(),components:z$1.string(),lib:z$1.string(),hooks:z$1.string(),ui:z$1.string()})}),x=z$1.record(p),s=z$1.enum(["registry:lib","registry:block","registry:component","registry:ui","registry:hook","registry:page","registry:file","registry:theme","registry:style","registry:item","registry:base","registry:font","registry:example","registry:internal"]),m=z$1.discriminatedUnion("type",[z$1.object({path:z$1.string(),content:z$1.string().optional(),type:z$1.enum(["registry:file","registry:page"]),target:z$1.string()}),z$1.object({path:z$1.string(),content:z$1.string().optional(),type:s.exclude(["registry:file","registry:page"]),target:z$1.string().optional()})]),y=z$1.object({config:z$1.object({content:z$1.array(z$1.string()).optional(),theme:z$1.record(z$1.string(),z$1.any()).optional(),plugins:z$1.array(z$1.string()).optional()}).optional()}),i=z$1.object({theme:z$1.record(z$1.string(),z$1.string()).optional(),light:z$1.record(z$1.string(),z$1.string()).optional(),dark:z$1.record(z$1.string(),z$1.string()).optional()}),o=z$1.lazy(()=>z$1.union([z$1.string(),z$1.array(z$1.union([z$1.string(),z$1.record(z$1.string(),z$1.string())])),z$1.record(z$1.string(),o)])),d=z$1.record(z$1.string(),o),u=z$1.record(z$1.string(),z$1.string()),a=z$1.object({family:z$1.string(),provider:z$1.literal("google"),import:z$1.string(),variable:z$1.string(),weight:z$1.array(z$1.string()).optional(),subsets:z$1.array(z$1.string()).optional()}),r=z$1.object({$schema:z$1.string().optional(),extends:z$1.string().optional(),name:z$1.string(),title:z$1.string().optional(),author:z$1.string().min(2).optional(),description:z$1.string().optional(),dependencies:z$1.array(z$1.string()).optional(),devDependencies:z$1.array(z$1.string()).optional(),registryDependencies:z$1.array(z$1.string()).optional(),files:z$1.array(m).optional(),tailwind:y.optional(),cssVars:i.optional(),css:d.optional(),envVars:u.optional(),meta:z$1.record(z$1.string(),z$1.any()).optional(),docs:z$1.string().optional(),categories:z$1.array(z$1.string()).optional()}),g=z$1.discriminatedUnion("type",[r.extend({type:z$1.literal("registry:base"),config:n.deepPartial().optional()}),r.extend({type:z$1.literal("registry:font"),font:a}),r.extend({type:s.exclude(["registry:base","registry:font"])})]),S=z$1.object({name:z$1.string(),homepage:z$1.string(),items:z$1.array(g)}),j=z$1.array(g),I=z$1.array(z$1.object({name:z$1.string(),label:z$1.string()})),C=z$1.record(z$1.string(),z$1.record(z$1.string(),z$1.string())),R=z$1.object({inlineColors:z$1.object({light:z$1.record(z$1.string(),z$1.string()),dark:z$1.record(z$1.string(),z$1.string())}),cssVars:i,cssVarsV4:i.optional(),inlineColorsTemplate:z$1.string(),cssVarsTemplate:z$1.string()}),v=r.pick({dependencies:true,devDependencies:true,files:true,tailwind:true,cssVars:true,css:true,envVars:true,docs:true}).extend({fonts:z$1.array(r.extend({type:z$1.literal("registry:font"),font:a})).optional()}),f=z$1.object({name:z$1.string(),type:z$1.string().optional(),description:z$1.string().optional(),registry:z$1.string(),addCommandArgument:z$1.string()}),V=z$1.object({pagination:z$1.object({total:z$1.number(),offset:z$1.number(),limit:z$1.number(),hasMore:z$1.boolean()}),items:z$1.array(f)}),w=z$1.record(z$1.string().regex(/^@[a-zA-Z0-9][a-zA-Z0-9-_]*$/),z$1.string()),z=z$1.array(z$1.object({name:z$1.string(),homepage:z$1.string().optional(),url:z$1.string(),description:z$1.string().optional()})),h=z$1.object({name:z$1.string(),title:z$1.string(),description:z$1.string(),base:z$1.string(),style:z$1.string(),baseColor:z$1.string(),theme:z$1.string(),iconLibrary:z$1.string(),font:z$1.string(),rtl:z$1.coerce.boolean().default(false),menuAccent:z$1.enum(["subtle","bold"]),menuColor:z$1.enum(["default","inverted"]),radius:z$1.string()}),k=z$1.object({presets:z$1.array(h)});export{c as a,l as b,n as c,p as d,x as e,s as f,m as g,y as h,i,d as j,u as k,a as l,r as m,g as n,S as o,j as p,I as q,C as r,R as s,v as t,f as u,V as v,w,z as x,h as y,k as z};//# sourceMappingURL=chunk-RKP3CU2J.js.map
2
+ //# sourceMappingURL=chunk-RKP3CU2J.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/registry/schema.ts"],"names":["registryConfigItemSchema","z","s","registryConfigSchema","key","rawConfigSchema","configSchema","workspaceConfigSchema","registryItemTypeSchema","registryItemFileSchema","registryItemTailwindSchema","registryItemCssVarsSchema","cssValueSchema","registryItemCssSchema","registryItemEnvVarsSchema","registryItemFontSchema","registryItemCommonSchema","registryItemSchema","registrySchema","registryIndexSchema","stylesSchema","iconsSchema","registryBaseColorSchema","registryResolvedItemsTreeSchema","searchResultItemSchema","searchResultsSchema","registriesIndexSchema","registriesSchema","presetSchema","configJsonSchema"],"mappings":"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","file":"chunk-RKP3CU2J.js","sourcesContent":["import { z } from \"zod\"\r\n\r\n// Note: if you edit the schema here, you must also edit the schema in the\r\n// apps/v4/public/schema/registry-item.json file.\r\n\r\nexport const registryConfigItemSchema = z.union([\r\n // Simple string format: \"https://example.com/{name}.json\"\r\n z.string().refine((s) => s.includes(\"{name}\"), {\r\n message: \"Registry URL must include {name} placeholder\",\r\n }),\r\n // Advanced object format with auth options\r\n z.object({\r\n url: z.string().refine((s) => s.includes(\"{name}\"), {\r\n message: \"Registry URL must include {name} placeholder\",\r\n }),\r\n params: z.record(z.string(), z.string()).optional(),\r\n headers: z.record(z.string(), z.string()).optional(),\r\n }),\r\n])\r\n\r\nexport const registryConfigSchema = z.record(\r\n z.string().refine((key) => key.startsWith(\"@\"), {\r\n message: \"Registry names must start with @ (e.g., @v0, @acme)\",\r\n }),\r\n registryConfigItemSchema\r\n)\r\n\r\nexport const rawConfigSchema = z\r\n .object({\r\n $schema: z.string().optional(),\r\n style: z.string(),\r\n rsc: z.coerce.boolean().default(false),\r\n tsx: z.coerce.boolean().default(true),\r\n tailwind: z.object({\r\n config: z.string().optional(),\r\n css: z.string(),\r\n baseColor: z.string(),\r\n cssVariables: z.boolean().default(true),\r\n prefix: z.string().default(\"\").optional(),\r\n }),\r\n iconLibrary: z.string().optional(),\r\n rtl: z.coerce.boolean().default(false).optional(),\r\n menuColor: z.enum([\"default\", \"inverted\"]).default(\"default\").optional(),\r\n menuAccent: z.enum([\"subtle\", \"bold\"]).default(\"subtle\").optional(),\r\n aliases: z.object({\r\n components: z.string(),\r\n utils: z.string(),\r\n ui: z.string().optional(),\r\n lib: z.string().optional(),\r\n hooks: z.string().optional(),\r\n }),\r\n registries: registryConfigSchema.optional(),\r\n })\r\n .strict()\r\n\r\nexport const configSchema = rawConfigSchema.extend({\r\n resolvedPaths: z.object({\r\n cwd: z.string(),\r\n tailwindConfig: z.string(),\r\n tailwindCss: z.string(),\r\n utils: z.string(),\r\n components: z.string(),\r\n lib: z.string(),\r\n hooks: z.string(),\r\n ui: z.string(),\r\n }),\r\n})\r\n\r\n// TODO: type the key.\r\n// Okay for now since I don't want a breaking change.\r\nexport const workspaceConfigSchema = z.record(configSchema)\r\n\r\nexport const registryItemTypeSchema = z.enum([\r\n \"registry:lib\",\r\n \"registry:block\",\r\n \"registry:component\",\r\n \"registry:ui\",\r\n \"registry:hook\",\r\n \"registry:page\",\r\n \"registry:file\",\r\n \"registry:theme\",\r\n \"registry:style\",\r\n \"registry:item\",\r\n \"registry:base\",\r\n \"registry:font\",\r\n\r\n // Internal use only.\r\n \"registry:example\",\r\n \"registry:internal\",\r\n])\r\n\r\nexport const registryItemFileSchema = z.discriminatedUnion(\"type\", [\r\n // Target is required for registry:file and registry:page\r\n z.object({\r\n path: z.string(),\r\n content: z.string().optional(),\r\n type: z.enum([\"registry:file\", \"registry:page\"]),\r\n target: z.string(),\r\n }),\r\n z.object({\r\n path: z.string(),\r\n content: z.string().optional(),\r\n type: registryItemTypeSchema.exclude([\"registry:file\", \"registry:page\"]),\r\n target: z.string().optional(),\r\n }),\r\n])\r\n\r\nexport const registryItemTailwindSchema = z.object({\r\n config: z\r\n .object({\r\n content: z.array(z.string()).optional(),\r\n theme: z.record(z.string(), z.any()).optional(),\r\n plugins: z.array(z.string()).optional(),\r\n })\r\n .optional(),\r\n})\r\n\r\nexport const registryItemCssVarsSchema = z.object({\r\n theme: z.record(z.string(), z.string()).optional(),\r\n light: z.record(z.string(), z.string()).optional(),\r\n dark: z.record(z.string(), z.string()).optional(),\r\n})\r\n\r\n// Recursive type for CSS properties that supports empty objects at any level.\r\nconst cssValueSchema: z.ZodType<any> = z.lazy(() =>\r\n z.union([\r\n z.string(),\r\n z.array(z.union([z.string(), z.record(z.string(), z.string())])),\r\n z.record(z.string(), cssValueSchema),\r\n ])\r\n)\r\n\r\nexport const registryItemCssSchema = z.record(z.string(), cssValueSchema)\r\n\r\nexport const registryItemEnvVarsSchema = z.record(z.string(), z.string())\r\n\r\n// Font metadata schema for registry:font items.\r\nexport const registryItemFontSchema = z.object({\r\n family: z.string(),\r\n provider: z.literal(\"google\"),\r\n import: z.string(),\r\n variable: z.string(),\r\n weight: z.array(z.string()).optional(),\r\n subsets: z.array(z.string()).optional(),\r\n})\r\n\r\n// Common fields shared by all registry items.\r\nexport const registryItemCommonSchema = z.object({\r\n $schema: z.string().optional(),\r\n extends: z.string().optional(),\r\n name: z.string(),\r\n title: z.string().optional(),\r\n author: z.string().min(2).optional(),\r\n description: z.string().optional(),\r\n dependencies: z.array(z.string()).optional(),\r\n devDependencies: z.array(z.string()).optional(),\r\n registryDependencies: z.array(z.string()).optional(),\r\n files: z.array(registryItemFileSchema).optional(),\r\n tailwind: registryItemTailwindSchema.optional(),\r\n cssVars: registryItemCssVarsSchema.optional(),\r\n css: registryItemCssSchema.optional(),\r\n envVars: registryItemEnvVarsSchema.optional(),\r\n meta: z.record(z.string(), z.any()).optional(),\r\n docs: z.string().optional(),\r\n categories: z.array(z.string()).optional(),\r\n})\r\n\r\n// registry:base has a config field, registry:font has a font field.\r\nexport const registryItemSchema = z.discriminatedUnion(\"type\", [\r\n registryItemCommonSchema.extend({\r\n type: z.literal(\"registry:base\"),\r\n config: rawConfigSchema.deepPartial().optional(),\r\n }),\r\n registryItemCommonSchema.extend({\r\n type: z.literal(\"registry:font\"),\r\n font: registryItemFontSchema,\r\n }),\r\n registryItemCommonSchema.extend({\r\n type: registryItemTypeSchema.exclude([\"registry:base\", \"registry:font\"]),\r\n }),\r\n])\r\n\r\nexport type RegistryItem = z.infer<typeof registryItemSchema>\r\n\r\n// Helper type for registry:base items specifically.\r\nexport type RegistryBaseItem = Extract<RegistryItem, { type: \"registry:base\" }>\r\n\r\n// Helper type for registry:font items specifically.\r\nexport type RegistryFontItem = Extract<RegistryItem, { type: \"registry:font\" }>\r\n\r\nexport const registrySchema = z.object({\r\n name: z.string(),\r\n homepage: z.string(),\r\n items: z.array(registryItemSchema),\r\n})\r\n\r\nexport type Registry = z.infer<typeof registrySchema>\r\n\r\nexport const registryIndexSchema = z.array(registryItemSchema)\r\n\r\nexport const stylesSchema = z.array(\r\n z.object({\r\n name: z.string(),\r\n label: z.string(),\r\n })\r\n)\r\n\r\nexport const iconsSchema = z.record(\r\n z.string(),\r\n z.record(z.string(), z.string())\r\n)\r\n\r\nexport const registryBaseColorSchema = z.object({\r\n inlineColors: z.object({\r\n light: z.record(z.string(), z.string()),\r\n dark: z.record(z.string(), z.string()),\r\n }),\r\n cssVars: registryItemCssVarsSchema,\r\n cssVarsV4: registryItemCssVarsSchema.optional(),\r\n inlineColorsTemplate: z.string(),\r\n cssVarsTemplate: z.string(),\r\n})\r\n\r\nexport const registryResolvedItemsTreeSchema = registryItemCommonSchema\r\n .pick({\r\n dependencies: true,\r\n devDependencies: true,\r\n files: true,\r\n tailwind: true,\r\n cssVars: true,\r\n css: true,\r\n envVars: true,\r\n docs: true,\r\n })\r\n .extend({\r\n fonts: z\r\n .array(\r\n registryItemCommonSchema.extend({\r\n type: z.literal(\"registry:font\"),\r\n font: registryItemFontSchema,\r\n })\r\n )\r\n .optional(),\r\n })\r\n\r\nexport const searchResultItemSchema = z.object({\r\n name: z.string(),\r\n type: z.string().optional(),\r\n description: z.string().optional(),\r\n registry: z.string(),\r\n addCommandArgument: z.string(),\r\n})\r\n\r\nexport const searchResultsSchema = z.object({\r\n pagination: z.object({\r\n total: z.number(),\r\n offset: z.number(),\r\n limit: z.number(),\r\n hasMore: z.boolean(),\r\n }),\r\n items: z.array(searchResultItemSchema),\r\n})\r\n\r\n// Legacy schema for getRegistriesIndex() backward compatibility.\r\nexport const registriesIndexSchema = z.record(\r\n z.string().regex(/^@[a-zA-Z0-9][a-zA-Z0-9-_]*$/),\r\n z.string()\r\n)\r\n\r\n// New schema for getRegistries().\r\nexport const registriesSchema = z.array(\r\n z.object({\r\n name: z.string(),\r\n homepage: z.string().optional(),\r\n url: z.string(),\r\n description: z.string().optional(),\r\n })\r\n)\r\n\r\nexport const presetSchema = z.object({\r\n name: z.string(),\r\n title: z.string(),\r\n description: z.string(),\r\n base: z.string(),\r\n style: z.string(),\r\n baseColor: z.string(),\r\n theme: z.string(),\r\n iconLibrary: z.string(),\r\n font: z.string(),\r\n rtl: z.coerce.boolean().default(false),\r\n menuAccent: z.enum([\"subtle\", \"bold\"]),\r\n menuColor: z.enum([\"default\", \"inverted\"]),\r\n radius: z.string(),\r\n})\r\n\r\nexport type Preset = z.infer<typeof presetSchema>\r\n\r\nexport const configJsonSchema = z.object({\r\n presets: z.array(presetSchema),\r\n})\r\n\r\nexport type ConfigJson = z.infer<typeof configJsonSchema>\r\n"]}