@frontic/ui 0.8.0 → 0.8.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/dist/mcp/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import "../registry-B-cUULNn.js";
1
+ import "../registry-Clu-arot.js";
2
2
  import "../schema-DgHN-d0T.js";
3
- import { t as server } from "../mcp-CrpA36mf.js";
3
+ import { t as server } from "../mcp-YYoOe4c2.js";
4
4
 
5
5
  export { server };
@@ -1,4 +1,4 @@
1
- import { Y as RegistryError, i as getRegistriesConfig, t as searchRegistries, u as getRegistryItems } from "./registry-B-cUULNn.js";
1
+ import { Y as RegistryError, i as getRegistriesConfig, t as searchRegistries, u as getRegistryItems } from "./registry-Clu-arot.js";
2
2
  import { z } from "zod";
3
3
  import { detectPackageManager } from "nypm";
4
4
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
@@ -301,4 +301,4 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
301
301
 
302
302
  //#endregion
303
303
  export { server as t };
304
- //# sourceMappingURL=mcp-CrpA36mf.js.map
304
+ //# sourceMappingURL=mcp-YYoOe4c2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-CrpA36mf.js","names":["parts: string[]"],"sources":["../src/mcp/utils.ts","../src/mcp/index.ts"],"sourcesContent":["import type { z } from 'zod'\nimport type { registryItemSchema, searchResultsSchema } from '@/src/schema'\nimport { detectPackageManager } from 'nypm'\nimport { getRegistriesConfig } from '@/src/registry/api'\n\nconst SHADCN_CLI_COMMAND = '@frontic/ui'\n\nexport async function npxShadcnVue(command: string) {\n const packageRunner = await detectPackageManager(process.cwd())\n\n return `${packageRunner?.name} ${SHADCN_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd)\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n },\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxShadcnVue(`add ${item.addCommandArgument}`)}\\``,\n )\n\n return parts.join(' ')\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(', ')}`\n }\n header += ':'\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total,\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join('\\n\\n')}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[],\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n item.type ? `**Type:** ${item.type}` : '',\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : '',\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(', ')}`\n : '',\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(', ')}`\n : '',\n ]\n return parts.filter(Boolean).join('\\n')\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string,\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push('```tsx')\n parts.push(file.content)\n parts.push('```')\n }\n })\n }\n\n return parts.filter(Boolean).join('\\n')\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? 's' : ''\n } matching \"${query}\":\\n`\n\n return header + sections.join('\\n\\n---\\n\\n')\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js'\nimport dedent from 'dedent'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { getRegistryItems, searchRegistries } from '@/src/registry'\nimport { RegistryError } from '@/src/registry/errors'\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxShadcnVue,\n} from './utils'\n\nexport const server = new Server(\n {\n name: 'frontic-ui',\n version: '1.0.0',\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n },\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'get_project_registries',\n description:\n 'Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: 'list_items_in_registries',\n description:\n 'List items from registries (requires components.json - use init_project if missing)',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'search_items_in_registries',\n description:\n 'Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query string for fuzzy matching against item names and descriptions',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'view_items_in_registries',\n description:\n 'View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of item names with registry prefix (e.g., [\\'@frontic/button\\', \\'@frontic/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_item_examples_from_registries',\n description:\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.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query for examples (e.g., \\'accordion-demo\\', \\'button demo\\', \\'card example\\', \\'tooltip-demo\\', \\'example-booking-form\\', \\'example-hero\\'). Common patterns: \\'{item-name}-demo\\', \\'{item-name} example\\', \\'example {item-name}\\'',\n ),\n }),\n ),\n },\n {\n name: 'get_add_command_for_items',\n description:\n 'Get the @frontic/ui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of items to get the add command for prefixed with the registry name (e.g., [\\'@frontic/button\\', \\'@frontic/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_audit_checklist',\n description:\n 'After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error('No tool arguments provided.')\n }\n\n switch (request.params.name) {\n case 'get_project_registries': {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map(registry => `- ${registry}`)\n .join('\\n')}\n\n You can view the items in a registry by running:\n \\`${await npxShadcnVue('view @name-of-registry')}\\`\n\n For example: \\`${await npxShadcnVue(\n 'view @frontic',\n )}\\` or \\`${await npxShadcnVue(\n 'view @frontic @acme',\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case 'search_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n ', ',\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'list_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found in registries ${args.registries.join(\n ', ',\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'view_items_in_registries': {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found for: ${args.items.join(', ')}\n\n Make sure the item names are correct and include the registry prefix (e.g., @frontic/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Item Details:\n\n ${formattedItems.join('\\n\\n---\\n\\n')}`,\n },\n ],\n }\n }\n\n case 'get_item_examples_from_registries': {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map(item => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: 'text',\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case 'get_add_command_for_items': {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: 'text',\n text: await npxShadcnVue(`add ${args.items.join(' ')}`),\n },\n ],\n }\n }\n\n case 'get_audit_checklist': {\n return {\n content: [\n {\n type: 'text',\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n }\n catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`Invalid input parameters:\n ${error.errors\n .map(e => `- ${e.path.join('.')}: ${e.message}`)\n .join('\\n')}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"],"mappings":";;;;;;;;;AAKA,MAAM,qBAAqB;AAE3B,eAAsB,aAAa,SAAiB;AAGlD,QAAO,IAFe,MAAM,qBAAqB,QAAQ,KAAK,CAAC,GAEtC,KAAK,GAAG,mBAAmB,GAAG;;AAGzD,eAAsB,aAAa,MAAM,QAAQ,KAAK,EAAE;AAGtD,QAAO,EACL,aAHa,MAAM,oBAAoB,IAAI,EAGxB,YACpB;;AAGH,SAAgB,kCACd,SACA,SAIA;CACA,MAAM,EAAE,OAAO,eAAe,WAAW,EAAE;CAE3C,MAAM,iBAAiB,QAAQ,MAAM,KAAK,SAAS;EACjD,MAAMA,QAAkB,CAAC,KAAK,KAAK,OAAO;AAE1C,MAAI,KAAK,KACP,OAAM,KAAK,IAAI,KAAK,KAAK,GAAG;AAG9B,MAAI,KAAK,YACP,OAAM,KAAK,KAAK,KAAK,cAAc;AAGrC,MAAI,KAAK,SACP,OAAM,KAAK,IAAI,KAAK,SAAS,GAAG;AAGlC,QAAM,KACJ,sBAAsB,aAAa,OAAO,KAAK,qBAAqB,CAAC,IACtE;AAED,SAAO,MAAM,KAAK,IAAI;GACtB;CAEF,IAAI,SAAS,SAAS,QAAQ,WAAW,MAAM;AAC/C,KAAI,MACF,WAAU,cAAc,MAAM;AAEhC,KAAI,cAAc,WAAW,SAAS,EACpC,WAAU,kBAAkB,WAAW,KAAK,KAAK;AAEnD,WAAU;CAEV,MAAM,eAAe,iBACnB,QAAQ,WAAW,SAAS,EAC7B,GAAG,KAAK,IACP,QAAQ,WAAW,SAAS,QAAQ,WAAW,OAC/C,QAAQ,WAAW,MACpB,CAAC,MAAM,QAAQ,WAAW,MAAM;CAEjC,IAAI,SAAS,GAAG,OAAO,MAAM,aAAa,MAAM,eAAe,KAAK,OAAO;AAE3E,KAAI,QAAQ,WAAW,QACrB,WAAU,yCACR,QAAQ,WAAW,SAAS,QAAQ,WAAW,MAChD;AAGH,QAAO;;AAGT,SAAgB,oBACd,OACA;AACA,QAAO,MAAM,KAAK,SAAS;AAezB,SAdwB;GACtB,MAAM,KAAK;GACX,KAAK,cAAc,KAAK,KAAK,YAAY,MAAM;GAC/C,KAAK,OAAO,aAAa,KAAK,SAAS;GACvC,KAAK,SAAS,KAAK,MAAM,SAAS,IAC9B,cAAc,KAAK,MAAM,OAAO,YAChC;GACJ,KAAK,gBAAgB,KAAK,aAAa,SAAS,IAC5C,qBAAqB,KAAK,aAAa,KAAK,KAAK,KACjD;GACJ,KAAK,mBAAmB,KAAK,gBAAgB,SAAS,IAClD,yBAAyB,KAAK,gBAAgB,KAAK,KAAK,KACxD;GACL,CACY,OAAO,QAAQ,CAAC,KAAK,KAAK;GACvC;;AAGJ,SAAgB,mBACd,OACA,OACA;CACA,MAAM,WAAW,MAAM,KAAK,SAAS;EACnC,MAAMA,QAAkB,CACtB,eAAe,KAAK,QACpB,KAAK,cAAc,KAAK,KAAK,YAAY,MAAM,GAChD;AAED,MAAI,KAAK,OAAO,OACd,MAAK,MAAM,SAAS,SAAS;AAC3B,OAAI,KAAK,SAAS;AAChB,UAAM,KAAK,aAAa,KAAK,KAAK,MAAM;AACxC,UAAM,KAAK,SAAS;AACpB,UAAM,KAAK,KAAK,QAAQ;AACxB,UAAM,KAAK,MAAM;;IAEnB;AAGJ,SAAO,MAAM,OAAO,QAAQ,CAAC,KAAK,KAAK;GACvC;AAMF,QAJe,6BAA6B,MAAM,OAAO,UACvD,MAAM,SAAS,IAAI,MAAM,GAC1B,aAAa,MAAM,QAEJ,SAAS,KAAK,cAAc;;;;;AC9G9C,MAAa,SAAS,IAAI,OACxB;CACE,MAAM;CACN,SAAS;CACV,EACD,EACE,cAAc;CACZ,WAAW,EAAE;CACb,OAAO,EAAE;CACV,EACF,CACF;AAED,OAAO,kBAAkB,wBAAwB,YAAY;AAC3D,QAAO,EACL,OAAO;EACL;GACE,MAAM;GACN,aACE;GACF,aAAa,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;GAC3C;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBACX,EAAE,OAAO;IACP,YAAY,EACT,MAAM,EAAE,QAAQ,CAAC,CACjB,SACC,kEACD;IACH,OAAO,EACJ,QAAQ,CACR,UAAU,CACV,SAAS,oCAAoC;IAChD,QAAQ,EACL,QAAQ,CACR,UAAU,CACV,SAAS,yCAAyC;IACtD,CAAC,CACH;GACF;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBACX,EAAE,OAAO;IACP,YAAY,EACT,MAAM,EAAE,QAAQ,CAAC,CACjB,SACC,kEACD;IACH,OAAO,EACJ,QAAQ,CACR,SACC,6EACD;IACH,OAAO,EACJ,QAAQ,CACR,UAAU,CACV,SAAS,oCAAoC;IAChD,QAAQ,EACL,QAAQ,CACR,UAAU,CACV,SAAS,yCAAyC;IACtD,CAAC,CACH;GACF;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBACX,EAAE,OAAO,EACP,OAAO,EACJ,MAAM,EAAE,QAAQ,CAAC,CACjB,SACC,wFACD,EACJ,CAAC,CACH;GACF;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBACX,EAAE,OAAO;IACP,YAAY,EACT,MAAM,EAAE,QAAQ,CAAC,CACjB,SACC,kEACD;IACH,OAAO,EACJ,QAAQ,CACR,SACC,+NACD;IACJ,CAAC,CACH;GACF;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBACX,EAAE,OAAO,EACP,OAAO,EACJ,MAAM,EAAE,QAAQ,CAAC,CACjB,SACC,yHACD,EACJ,CAAC,CACH;GACF;EACD;GACE,MAAM;GACN,aACE;GACF,aAAa,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC;GAC3C;EACF,EACF;EACD;AAEF,OAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,KAAI;AACF,MAAI,CAAC,QAAQ,OAAO,UAClB,OAAM,IAAI,MAAM,8BAA8B;AAGhD,UAAQ,QAAQ,OAAO,MAAvB;GACE,KAAK,0BAA0B;IAC7B,MAAM,SAAS,MAAM,aAAa,QAAQ,KAAK,CAAC;AAEhD,QAAI,CAAC,QAAQ,WACX,QAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM;;;;;KAKb,CACF,EACF;AAGH,WAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM;;kBAER,OAAO,KAAK,OAAO,WAAW,CAC7B,KAAI,aAAY,KAAK,WAAW,CAChC,KAAK,KAAK,CAAC;;;oBAGV,MAAM,aAAa,yBAAyB,CAAC;;iCAEhC,MAAM,aACrB,gBACD,CAAC,UAAU,MAAM,aAChB,sBACD,CAAC;;KAEL,CACF,EACF;;GAGH,KAAK,8BAA8B;IAQjC,MAAM,OAPc,EAAE,OAAO;KAC3B,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC/B,OAAO,EAAE,QAAQ;KACjB,OAAO,EAAE,QAAQ,CAAC,UAAU;KAC5B,QAAQ,EAAE,QAAQ,CAAC,UAAU;KAC9B,CAAC,CAEuB,MAAM,QAAQ,OAAO,UAAU;IACxD,MAAM,UAAU,MAAM,iBAAiB,KAAK,YAAY;KACtD,OAAO,KAAK;KACZ,OAAO,KAAK;KACZ,QAAQ,KAAK;KACb,QAAQ,MAAM,aAAa,QAAQ,KAAK,CAAC;KACzC,UAAU;KACX,CAAC;AAEF,QAAI,QAAQ,MAAM,WAAW,EAC3B,QAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM,4BACV,KAAK,MACN,kBAAkB,KAAK,WAAW,KACjC,KACD,CAAC;KACH,CACF,EACF;AAGH,WAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,kCAAkC,SAAS;MAC/C,OAAO,KAAK;MACZ,YAAY,KAAK;MAClB,CAAC;KACH,CACF,EACF;;GAGH,KAAK,4BAA4B;IAQ/B,MAAM,OAPc,EAAE,OAAO;KAC3B,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC;KAC/B,OAAO,EAAE,QAAQ,CAAC,UAAU;KAC5B,QAAQ,EAAE,QAAQ,CAAC,UAAU;KAC7B,KAAK,EAAE,QAAQ,CAAC,UAAU;KAC3B,CAAC,CAEuB,MAAM,QAAQ,OAAO,UAAU;IACxD,MAAM,UAAU,MAAM,iBAAiB,KAAK,YAAY;KACtD,OAAO,KAAK;KACZ,QAAQ,KAAK;KACb,QAAQ,MAAM,aAAa,QAAQ,KAAK,CAAC;KACzC,UAAU;KACX,CAAC;AAEF,QAAI,QAAQ,MAAM,WAAW,EAC3B,QAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM,gCAAgC,KAAK,WAAW,KAC1D,KACD,CAAC;KACH,CACF,EACF;AAGH,WAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,kCAAkC,SAAS,EAC/C,YAAY,KAAK,YAClB,CAAC;KACH,CACF,EACF;;GAGH,KAAK,4BAA4B;IAK/B,MAAM,OAJc,EAAE,OAAO,EAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC3B,CAAC,CAEuB,MAAM,QAAQ,OAAO,UAAU;IACxD,MAAM,gBAAgB,MAAM,iBAAiB,KAAK,OAAO;KACvD,QAAQ,MAAM,aAAa,QAAQ,KAAK,CAAC;KACzC,UAAU;KACX,CAAC;AAEF,QAAI,eAAe,WAAW,EAC5B,QAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM,uBAAuB,KAAK,MAAM,KAAK,KAAK,CAAC;;;KAG1D,CACF,EACF;AAKH,WAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM;;gBANK,oBAAoB,cAAc,CAQlC,KAAK,cAAc;KACrC,CACF,EACF;;GAGH,KAAK,qCAAqC;IAMxC,MAAM,OALc,EAAE,OAAO;KAC3B,OAAO,EAAE,QAAQ;KACjB,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC;KAChC,CAAC,CAEuB,MAAM,QAAQ,OAAO,UAAU;IACxD,MAAM,SAAS,MAAM,cAAc;IAEnC,MAAM,UAAU,MAAM,iBAAiB,KAAK,YAAY;KACtD,OAAO,KAAK;KACZ;KACA,UAAU;KACX,CAAC;AAEF,QAAI,QAAQ,MAAM,WAAW,EAC3B,QAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM,gCAAgC,KAAK,MAAM;;;;;;;;;;KAUxD,CACF,EACF;AASH,WAAO,EACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,mBATM,MAAM,iBADN,QAAQ,MAAM,KAAI,SAAQ,KAAK,mBAAmB,EAChB;MAClD;MACA,UAAU;MACX,CAAC,EAMwC,KAAK,MAAM;KAChD,CACF,EACF;;GAGH,KAAK,4BAOH,QAAO,EACL,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM,aAAa,OAVlB,EACV,OAAO,EACN,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC3B,CAAC,CACD,MAAM,QAAQ,OAAO,UAAU,CAMS,MAAM,KAAK,IAAI,GAAG;IACxD,CACF,EACF;GAGH,KAAK,sBACH,QAAO,EACL,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM;;;;;;;;;;;IAWb,CACF,EACF;GAGH,QACE,OAAM,IAAI,MAAM,QAAQ,QAAQ,OAAO,KAAK,YAAY;;UAGvD,OAAO;AACZ,MAAI,iBAAiB,EAAE,SACrB,QAAO;GACL,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM;gBACR,MAAM,OACL,KAAI,MAAK,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,UAAU,CAC/C,KAAK,KAAK,CAAC;;IAEjB,CACF;GACD,SAAS;GACV;AAGH,MAAI,iBAAiB,eAAe;GAClC,IAAI,eAAe,MAAM;AAEzB,OAAI,MAAM,WACR,iBAAgB,UAAU,MAAM;AAGlC,OAAI,MAAM,QACR,iBAAgB,gBAAgB,KAAK,UAAU,MAAM,SAAS,MAAM,EAAE;AAGxE,UAAO;IACL,SAAS,CACP;KACE,MAAM;KACN,MAAM,MAAM,UAAU,MAAM,KAAK,KAAK;KACvC,CACF;IACD,SAAS;IACV;;AAIH,SAAO;GACL,SAAS,CACP;IACE,MAAM;IACN,MAAM,MAAM,UALG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;IAMtE,CACF;GACD,SAAS;GACV;;EAEH"}
1
+ {"version":3,"file":"mcp-YYoOe4c2.js","names":["parts: string[]"],"sources":["../src/mcp/utils.ts","../src/mcp/index.ts"],"sourcesContent":["import type { z } from 'zod'\nimport type { registryItemSchema, searchResultsSchema } from '@/src/schema'\nimport { detectPackageManager } from 'nypm'\nimport { getRegistriesConfig } from '@/src/registry/api'\n\nconst SHADCN_CLI_COMMAND = '@frontic/ui'\n\nexport async function npxShadcnVue(command: string) {\n const packageRunner = await detectPackageManager(process.cwd())\n\n return `${packageRunner?.name} ${SHADCN_CLI_COMMAND} ${command}`\n}\n\nexport async function getMcpConfig(cwd = process.cwd()) {\n const config = await getRegistriesConfig(cwd)\n\n return {\n registries: config.registries,\n }\n}\n\nexport function formatSearchResultsWithPagination(\n results: z.infer<typeof searchResultsSchema>,\n options?: {\n query?: string\n registries?: string[]\n },\n) {\n const { query, registries } = options || {}\n\n const formattedItems = results.items.map((item) => {\n const parts: string[] = [`- ${item.name}`]\n\n if (item.type) {\n parts.push(`(${item.type})`)\n }\n\n if (item.description) {\n parts.push(`- ${item.description}`)\n }\n\n if (item.registry) {\n parts.push(`[${item.registry}]`)\n }\n\n parts.push(\n `\\n Add command: \\`${npxShadcnVue(`add ${item.addCommandArgument}`)}\\``,\n )\n\n return parts.join(' ')\n })\n\n let header = `Found ${results.pagination.total} items`\n if (query) {\n header += ` matching \"${query}\"`\n }\n if (registries && registries.length > 0) {\n header += ` in registries ${registries.join(', ')}`\n }\n header += ':'\n\n const showingRange = `Showing items ${\n results.pagination.offset + 1\n }-${Math.min(\n results.pagination.offset + results.pagination.limit,\n results.pagination.total,\n )} of ${results.pagination.total}:`\n\n let output = `${header}\\n\\n${showingRange}\\n\\n${formattedItems.join('\\n\\n')}`\n\n if (results.pagination.hasMore) {\n output += `\\n\\nMore items available. Use offset: ${\n results.pagination.offset + results.pagination.limit\n } to see the next page.`\n }\n\n return output\n}\n\nexport function formatRegistryItems(\n items: z.infer<typeof registryItemSchema>[],\n) {\n return items.map((item) => {\n const parts: string[] = [\n `## ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n item.type ? `**Type:** ${item.type}` : '',\n item.files && item.files.length > 0\n ? `**Files:** ${item.files.length} file(s)`\n : '',\n item.dependencies && item.dependencies.length > 0\n ? `**Dependencies:** ${item.dependencies.join(', ')}`\n : '',\n item.devDependencies && item.devDependencies.length > 0\n ? `**Dev Dependencies:** ${item.devDependencies.join(', ')}`\n : '',\n ]\n return parts.filter(Boolean).join('\\n')\n })\n}\n\nexport function formatItemExamples(\n items: z.infer<typeof registryItemSchema>[],\n query: string,\n) {\n const sections = items.map((item) => {\n const parts: string[] = [\n `## Example: ${item.name}`,\n item.description ? `\\n${item.description}\\n` : '',\n ]\n\n if (item.files?.length) {\n item.files.forEach((file) => {\n if (file.content) {\n parts.push(`### Code (${file.path}):\\n`)\n parts.push('```tsx')\n parts.push(file.content)\n parts.push('```')\n }\n })\n }\n\n return parts.filter(Boolean).join('\\n')\n })\n\n const header = `# Usage Examples\\n\\nFound ${items.length} example${\n items.length > 1 ? 's' : ''\n } matching \"${query}\":\\n`\n\n return header + sections.join('\\n\\n---\\n\\n')\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js'\nimport dedent from 'dedent'\nimport { z } from 'zod'\nimport { zodToJsonSchema } from 'zod-to-json-schema'\nimport { getRegistryItems, searchRegistries } from '@/src/registry'\nimport { RegistryError } from '@/src/registry/errors'\n\nimport {\n formatItemExamples,\n formatRegistryItems,\n formatSearchResultsWithPagination,\n getMcpConfig,\n npxShadcnVue,\n} from './utils'\n\nexport const server = new Server(\n {\n name: 'frontic-ui',\n version: '1.0.0',\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n },\n)\n\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'get_project_registries',\n description:\n 'Get configured registry names from components.json - Returns error if no components.json exists (use init_project to create one)',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n {\n name: 'list_items_in_registries',\n description:\n 'List items from registries (requires components.json - use init_project if missing)',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'search_items_in_registries',\n description:\n 'Search for components in registries using fuzzy matching (requires components.json). After finding an item, use get_item_examples_from_registries to see usage examples.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query string for fuzzy matching against item names and descriptions',\n ),\n limit: z\n .number()\n .optional()\n .describe('Maximum number of items to return'),\n offset: z\n .number()\n .optional()\n .describe('Number of items to skip for pagination'),\n }),\n ),\n },\n {\n name: 'view_items_in_registries',\n description:\n 'View detailed information about specific registry items including the name, description, type and files content. For usage examples, use get_item_examples_from_registries instead.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of item names with registry prefix (e.g., [\\'@frontic/button\\', \\'@frontic/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_item_examples_from_registries',\n description:\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.',\n inputSchema: zodToJsonSchema(\n z.object({\n registries: z\n .array(z.string())\n .describe(\n 'Array of registry names to search (e.g., [\\'@frontic\\', \\'@acme\\'])',\n ),\n query: z\n .string()\n .describe(\n 'Search query for examples (e.g., \\'accordion-demo\\', \\'button demo\\', \\'card example\\', \\'tooltip-demo\\', \\'example-booking-form\\', \\'example-hero\\'). Common patterns: \\'{item-name}-demo\\', \\'{item-name} example\\', \\'example {item-name}\\'',\n ),\n }),\n ),\n },\n {\n name: 'get_add_command_for_items',\n description:\n 'Get the @frontic/ui CLI add command for specific items in a registry. This is useful for adding one or more components to your project.',\n inputSchema: zodToJsonSchema(\n z.object({\n items: z\n .array(z.string())\n .describe(\n 'Array of items to get the add command for prefixed with the registry name (e.g., [\\'@frontic/button\\', \\'@frontic/card\\'])',\n ),\n }),\n ),\n },\n {\n name: 'get_audit_checklist',\n description:\n 'After creating new components or generating new code files, use this tool for a quick checklist to verify that everything is working as expected. Make sure to run the tool after all required steps have been completed.',\n inputSchema: zodToJsonSchema(z.object({})),\n },\n ],\n }\n})\n\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n if (!request.params.arguments) {\n throw new Error('No tool arguments provided.')\n }\n\n switch (request.params.name) {\n case 'get_project_registries': {\n const config = await getMcpConfig(process.cwd())\n\n if (!config?.registries) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No components.json found or no registries configured.\n\n To fix this:\n 1. Use the \\`init\\` command to create a components.json file\n 2. Or manually create components.json with a registries section`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`The following registries are configured in the current project:\n\n ${Object.keys(config.registries)\n .map(registry => `- ${registry}`)\n .join('\\n')}\n\n You can view the items in a registry by running:\n \\`${await npxShadcnVue('view @name-of-registry')}\\`\n\n For example: \\`${await npxShadcnVue(\n 'view @frontic',\n )}\\` or \\`${await npxShadcnVue(\n 'view @frontic @acme',\n )}\\` to view multiple registries.\n `,\n },\n ],\n }\n }\n\n case 'search_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n query: z.string(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n query: args.query,\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found matching \"${\n args.query\n }\" in registries ${args.registries.join(\n ', ',\n )}, Try searching with a different query or registry.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n query: args.query,\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'list_items_in_registries': {\n const inputSchema = z.object({\n registries: z.array(z.string()),\n limit: z.number().optional(),\n offset: z.number().optional(),\n cwd: z.string().optional(),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const results = await searchRegistries(args.registries, {\n limit: args.limit,\n offset: args.offset,\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found in registries ${args.registries.join(\n ', ',\n )}.`,\n },\n ],\n }\n }\n\n return {\n content: [\n {\n type: 'text',\n text: formatSearchResultsWithPagination(results, {\n registries: args.registries,\n }),\n },\n ],\n }\n }\n\n case 'view_items_in_registries': {\n const inputSchema = z.object({\n items: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const registryItems = await getRegistryItems(args.items, {\n config: await getMcpConfig(process.cwd()),\n useCache: false,\n })\n\n if (registryItems?.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No items found for: ${args.items.join(', ')}\n\n Make sure the item names are correct and include the registry prefix (e.g., @frontic/button).`,\n },\n ],\n }\n }\n\n const formattedItems = formatRegistryItems(registryItems)\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Item Details:\n\n ${formattedItems.join('\\n\\n---\\n\\n')}`,\n },\n ],\n }\n }\n\n case 'get_item_examples_from_registries': {\n const inputSchema = z.object({\n query: z.string(),\n registries: z.array(z.string()),\n })\n\n const args = inputSchema.parse(request.params.arguments)\n const config = await getMcpConfig()\n\n const results = await searchRegistries(args.registries, {\n query: args.query,\n config,\n useCache: false,\n })\n\n if (results.items.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`No examples found for query \"${args.query}\".\n\n Try searching with patterns like:\n - \"accordion-demo\" for accordion examples\n - \"button demo\" or \"button example\"\n - Component name followed by \"-demo\" or \"example\"\n\n You can also:\n 1. Use search_items_in_registries to find all items matching your query\n 2. View the main component with view_items_in_registries for inline usage documentation`,\n },\n ],\n }\n }\n\n const itemNames = results.items.map(item => item.addCommandArgument)\n const fullItems = await getRegistryItems(itemNames, {\n config,\n useCache: false,\n })\n\n return {\n content: [\n {\n type: 'text',\n text: formatItemExamples(fullItems, args.query),\n },\n ],\n }\n }\n\n case 'get_add_command_for_items': {\n const args = z\n .object({\n items: z.array(z.string()),\n })\n .parse(request.params.arguments)\n\n return {\n content: [\n {\n type: 'text',\n text: await npxShadcnVue(`add ${args.items.join(' ')}`),\n },\n ],\n }\n }\n\n case 'get_audit_checklist': {\n return {\n content: [\n {\n type: 'text',\n text: dedent`## Component Audit Checklist\n\n After adding or generating components, check the following common issues:\n\n - [ ] Ensure imports are correct i.e named vs default imports\n - [ ] If using next/image, ensure images.remotePatterns next.config.js is configured correctly.\n - [ ] Ensure all dependencies are installed.\n - [ ] Check for linting errors or warnings\n - [ ] Check for TypeScript errors\n - [ ] Use the Playwright MCP if available.\n `,\n },\n ],\n }\n }\n\n default:\n throw new Error(`Tool ${request.params.name} not found`)\n }\n }\n catch (error) {\n if (error instanceof z.ZodError) {\n return {\n content: [\n {\n type: 'text',\n text: dedent`Invalid input parameters:\n ${error.errors\n .map(e => `- ${e.path.join('.')}: ${e.message}`)\n .join('\\n')}\n `,\n },\n ],\n isError: true,\n }\n }\n\n if (error instanceof RegistryError) {\n let errorMessage = error.message\n\n if (error.suggestion) {\n errorMessage += `\\n\\n💡 ${error.suggestion}`\n }\n\n if (error.context) {\n errorMessage += `\\n\\nContext: ${JSON.stringify(error.context, null, 2)}`\n }\n\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error (${error.code}): ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n\n const errorMessage = error instanceof Error ? error.message : String(error)\n return {\n content: [\n {\n type: 'text',\n text: dedent`Error: ${errorMessage}`,\n },\n ],\n isError: true,\n }\n }\n})\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { $ as RegistryLocalFileError, J as RegistriesIndexParseError, Q as RegistryInvalidNamespaceError, X as RegistryFetchError, Y as RegistryError, Z as RegistryForbiddenError, a as getRegistriesIndex, et as RegistryMissingEnvironmentVariablesError, it as RegistryUnauthorizedError, nt as RegistryNotFoundError, o as getRegistry, p as resolveRegistryItems, rt as RegistryParseError, t as searchRegistries, tt as RegistryNotConfiguredError, u as getRegistryItems } from "../registry-B-cUULNn.js";
1
+ import { $ as RegistryLocalFileError, J as RegistriesIndexParseError, Q as RegistryInvalidNamespaceError, X as RegistryFetchError, Y as RegistryError, Z as RegistryForbiddenError, a as getRegistriesIndex, et as RegistryMissingEnvironmentVariablesError, it as RegistryUnauthorizedError, nt as RegistryNotFoundError, o as getRegistry, p as resolveRegistryItems, rt as RegistryParseError, t as searchRegistries, tt as RegistryNotConfiguredError, u as getRegistryItems } from "../registry-Clu-arot.js";
2
2
  import "../schema-DgHN-d0T.js";
3
3
 
4
4
  export { RegistriesIndexParseError, RegistryError, RegistryFetchError, RegistryForbiddenError, RegistryInvalidNamespaceError, RegistryLocalFileError, RegistryMissingEnvironmentVariablesError, RegistryNotConfiguredError, RegistryNotFoundError, RegistryParseError, RegistryUnauthorizedError, getRegistriesIndex, getRegistry, getRegistryItems, resolveRegistryItems, searchRegistries };
@@ -28,7 +28,7 @@ const FRAMEWORKS = {
28
28
  name: "vite",
29
29
  label: "Vite",
30
30
  links: {
31
- installation: "https://frontic.io/docs/installation/vite",
31
+ installation: "https://ui.frontic.com/docs/installation/vite",
32
32
  tailwind: "https://tailwindcss.com/docs/guides/vite"
33
33
  }
34
34
  },
@@ -36,7 +36,7 @@ const FRAMEWORKS = {
36
36
  name: "nuxt3",
37
37
  label: "Nuxt 3",
38
38
  links: {
39
- installation: "https://frontic.io/docs/installation/nuxt",
39
+ installation: "https://ui.frontic.com/docs/installation/nuxt",
40
40
  tailwind: "https://tailwindcss.com/docs/guides/nuxtjs"
41
41
  }
42
42
  },
@@ -44,7 +44,7 @@ const FRAMEWORKS = {
44
44
  name: "nuxt4",
45
45
  label: "Nuxt 4",
46
46
  links: {
47
- installation: "https://frontic.io/docs/installation/nuxt",
47
+ installation: "https://ui.frontic.com/docs/installation/nuxt",
48
48
  tailwind: "https://tailwindcss.com/docs/guides/nuxtjs"
49
49
  }
50
50
  },
@@ -52,7 +52,7 @@ const FRAMEWORKS = {
52
52
  name: "astro",
53
53
  label: "Astro",
54
54
  links: {
55
- installation: "https://frontic.io/docs/installation/astro",
55
+ installation: "https://ui.frontic.com/docs/installation/astro",
56
56
  tailwind: "https://tailwindcss.com/docs/guides/astro"
57
57
  }
58
58
  },
@@ -60,7 +60,7 @@ const FRAMEWORKS = {
60
60
  name: "laravel",
61
61
  label: "Laravel",
62
62
  links: {
63
- installation: "https://frontic.io/docs/installation/laravel",
63
+ installation: "https://ui.frontic.com/docs/installation/laravel",
64
64
  tailwind: "https://tailwindcss.com/docs/guides/laravel"
65
65
  }
66
66
  },
@@ -68,7 +68,7 @@ const FRAMEWORKS = {
68
68
  name: "manual",
69
69
  label: "Manual",
70
70
  links: {
71
- installation: "https://frontic.io/docs/installation/manual",
71
+ installation: "https://ui.frontic.com/docs/installation/manual",
72
72
  tailwind: "https://tailwindcss.com/docs/installation"
73
73
  }
74
74
  },
@@ -76,7 +76,7 @@ const FRAMEWORKS = {
76
76
  name: "inertia",
77
77
  label: "Inertia",
78
78
  links: {
79
- installation: "https://frontic.io/docs/installation/manual",
79
+ installation: "https://ui.frontic.com/docs/installation/manual",
80
80
  tailwind: "https://tailwindcss.com/docs/installation"
81
81
  }
82
82
  }
@@ -84,7 +84,7 @@ const FRAMEWORKS = {
84
84
 
85
85
  //#endregion
86
86
  //#region src/registry/constants.ts
87
- const REGISTRY_URL = process.env.REGISTRY_URL ?? "https://registry.frontic.io/r";
87
+ const REGISTRY_URL = process.env.REGISTRY_URL ?? "https://registry.ui.frontic.com/r";
88
88
  const FALLBACK_STYLE = "new-york-v4";
89
89
  const BASE_COLORS = [
90
90
  {
@@ -278,7 +278,7 @@ var RegistryParseError = class extends RegistryError {
278
278
  code: RegistryErrorCode.PARSE_ERROR,
279
279
  cause: parseError,
280
280
  context: { item },
281
- suggestion: "The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See https://schema.frontic.io/schema/registry-item.json."
281
+ suggestion: "The registry item may be corrupted or have an invalid format. Please make sure it returns a valid JSON object. See https://ui.frontic.com/schema/registry-item.json."
282
282
  });
283
283
  this.item = item;
284
284
  this.parseError = parseError;
@@ -632,7 +632,7 @@ async function getProjectConfig(cwd, defaultProjectInfo = null) {
632
632
  if (existingConfig) return existingConfig;
633
633
  if (!projectInfo || !projectInfo.tailwindCssFile || projectInfo.tailwindVersion === "v3" && !projectInfo.tailwindConfigFile) return null;
634
634
  return await resolveConfigPaths(cwd, {
635
- $schema: "https://schema.frontic.io/schema.json",
635
+ $schema: "https://ui.frontic.com/schema.json",
636
636
  typescript: projectInfo.typescript,
637
637
  style: "new-york",
638
638
  tailwind: {
@@ -2635,4 +2635,4 @@ function buildRegistryItemNameFromRegistry(name, registry) {
2635
2635
 
2636
2636
  //#endregion
2637
2637
  export { RegistryLocalFileError as $, mergeEnvContent as A, DEFAULT_TAILWIND_CSS as B, configWithDefaults as C, ICON_LIBRARIES as D, transform$2 as E, getProjectInfo as F, getConfig as G, createConfig as H, getProjectTailwindVersionFromConfig as I, RegistriesIndexParseError as J, getWorkspaceConfig as K, getPackageInfo as L, spinner as M, logger as N, findExistingEnvFile as O, getProjectConfig as P, RegistryInvalidNamespaceError as Q, DEFAULT_COMPONENTS as R, clearRegistryContext as S, updateFiles as T, findCommonRoot$1 as U, DEFAULT_UTILS as V, findPackageRoot as W, RegistryFetchError as X, RegistryError as Y, RegistryForbiddenError as Z, _createSourceFile as _, getRegistriesIndex as a, highlighter as at, handleError as b, getRegistryBaseColors as c, DEPRECATED_COMPONENTS as ct, getRegistryStyles as d, RegistryMissingEnvironmentVariablesError as et, getShadcnRegistryIndex as f, resolveRegistryTree as g, fetchRegistryItems as h, getRegistriesConfig as i, RegistryUnauthorizedError as it, parseRegistryAndItemFromString as j, getNewEnvKeys as k, getRegistryIcons as l, REGISTRY_URL as lt, resolveTree as m, fetchTree as n, RegistryNotFoundError as nt, getRegistry as o, BASE_COLORS as ot, resolveRegistryItems as p, resolveConfigPaths as q, getItemTargetPath as r, RegistryParseError as rt, getRegistryBaseColor as s, BUILTIN_REGISTRIES as st, searchRegistries as t, RegistryNotConfiguredError as tt, getRegistryItems as u, _getQuoteChar as v, isUniversalRegistryItem as w, buildUrlAndHeadersForRegistryItem as x, updateTailwindConfig as y, DEFAULT_TAILWIND_CONFIG as z };
2638
- //# sourceMappingURL=registry-B-cUULNn.js.map
2638
+ //# sourceMappingURL=registry-Clu-arot.js.map