@create-ui/cli 0.1.0-beta.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/preflights/preflight-init.ts","../src/utils/is-safe-target.ts","../src/utils/updaters/update-css.ts","../src/utils/updaters/update-css-vars.ts","../src/utils/updaters/update-dependencies.ts","../src/utils/updaters/update-env-vars.ts","../src/utils/updaters/update-fonts.ts","../src/utils/updaters/update-tailwind-config.ts","../src/utils/add-components.ts","../src/utils/create-project.ts","../src/utils/env-loader.ts","../src/utils/file-helper.ts","../src/commands/init.ts","../src/preflights/preflight-add.ts","../src/utils/update-app-index.ts","../src/commands/add.ts","../src/preflights/preflight-build.ts","../src/commands/build.ts","../src/commands/create.ts","../src/commands/diff.ts","../src/commands/info.ts","../src/commands/mcp.ts","../src/migrations/migrate-icons.ts","../src/migrations/migrate-radix.ts","../src/preflights/preflight-migrate.ts","../src/commands/migrate.ts","../src/preflights/preflight-registry.ts","../src/commands/registry/build.ts","../src/commands/registry/mcp.ts","../src/commands/search.ts","../src/commands/view.ts","../package.json","../src/index.ts"],"names":["preFlightInit","options","errors","fs","path","projectSpinner","spinner","logger","highlighter","frameworkSpinner","projectInfo","getProjectInfo","tailwindSpinnerMessage","tailwindSpinner","tsConfigSpinner","isSafeTarget","targetPath","cwd","decodedPath","prevPath","normalizedTarget","normalizedRoot","hasPathTraversal","cleanPath","cleanTarget","cleanDecoded","pattern","resolvedPath","updateCss","css","config","cssFilepath","cssFilepathRelative","cssSpinner","raw","output","transformCss","input","plugins","updateCssPlugin","result","postcss","root","lastNode","selector","properties","atRuleMatch","name","params","node","importRule","importNodes","lastImport","quotedParams","normalizeParams","p","pluginRule","pluginNodes","lastPlugin","variantNode","customVariantNodes","lastVariant","newAtRule","themeInline","existingKeyframesRule","keyframesRule","step","stepProps","processRule","utilityAtRule","prop","value","existingDecl","decl","atRule","processAtRule","childSelector","childProps","nestedMatch","nestedName","nestedParams","tempRule","rule","clone","error","parent","atRuleName","atRuleParams","nestedSelector","RESPONSIVE_CATEGORIES","formatResponsiveValue","trimmed","NO_PX_SUFFIXES","splitResponsiveVars","vars","category","categoryAddsUnit","desktop","tablet","mobile","key","rawValue","addUnit","suffix","d","t","m","s","expandKeys","updateCssVars","cssVars","cssVarsSpinner","transformCssVars","packageInfo","getPackageInfo","addCustomImport","cleanupDefaultNextStylesPlugin","updateCssVarsPluginV4","updateThemePlugin","updateTailwindConfigPlugin","updateTailwindConfigAnimationPlugin","updateTailwindConfigKeyframesPlugin","removeConflictVars","rootRule","propsToRemove","bodyRule","darkRootRule","upsertVarsIntoRule","ruleNode","isLocalHSLValue","newDecl","upsertMediaQueryVars","maxWidth","mediaParams","mediaNode","modes","themeNode","upsertThemeNode","keys","varName","propValue","customVariantNode","importNode","tailwindConfig","quote","getQuoteType","lastPluginNode","plugin","pluginName","pluginNode","existingKeyFrameNodes","keyframeValueSchema","z","keyframeName","keyframeValue","parsedKeyframeValue","keyframeNode","values","existingAnimationNodes","parsedAnimationValue","animationNode","chunks","chunk","updateDependencies","dependencies","devDependencies","dependenciesSpinner","packageManager","getUpdateDependenciesPackageManager","flag","shouldPromptForNpmFlag","confirmation","prompts","installWithPackageManager","hasReact19","hasReactDayPicker8","getPackageManager","installWithNpm","installWithDeno","installWithExpo","execa","installIndividually","flagArgs","command","packages","failed","pkg","dep","updateEnvVars","envVars","envSpinner","projectRoot","envFilePath","existingEnvFile","findExistingEnvFile","envFileExists","existsSync","envFileName","newEnvContent","envVarsAdded","envFileUpdated","envFileCreated","existingContent","mergedContent","mergeEnvContent","getNewEnvKeys","massageTreeForFonts","tree","font","addedImports","fontSourceDependency","updateFonts","fonts","fontsSpinner","updateNextFonts","layoutPath","findLayoutFile","layoutContent","updatedContent","transformLayoutFonts","isSrcDir","ext","possiblePaths","relativePath","fullPath","_config","sourceFile","Project","ScriptKind","googleFonts","f","fontVariableNames","importName","_","c","existingImport","fontOptions","buildFontOptions","imp","existingVarDecl","findFontVariableDeclaration","insertPosition","findInsertPosition","VariableDeclarationKind","managedVariables","removeOldFontDeclarations","cleanupUnusedFontImports","updateHtmlClassName","cleanupBodyClassName","variable","variableStatements","statement","declaration","initializer","SyntaxKind","args","argText","imports","jsxElements","element","classNameAttr","variableExpressions","ensureCnImport","jsxAttr","newVarExpressions","currentValue","jsxExpr","expr","exprText","v","cleanedExpr","removeFontVariablesFromCn","newExpr","insertFontVariablesIntoCn","cnArgs","parseTemplateLiteralToCnArgs","arg","utilsImport","templateLiteral","staticArgs","variableArgs","parts","part","staticParts","staticPart","statementsToRemove","variableMatch","cssVariable","fontImport","namedImports","fullText","namedImport","importLine","textWithoutImport","content","staticClasses","cleaned","argsMatch","a","cnExpr","fontVars","varsStr","updateTailwindConfig","addComponents","components","workspaceConfig","getWorkspaceConfig","addWorkspaceComponents","addProjectComponents","registrySpinner","resolveRegistryTree","configWithDefaults","handleError","validateFilesTarget","overwriteCssVars","shouldOverwriteCssVars","updateFiles","filesCreated","filesUpdated","filesSkipped","rootSpinner","mainTargetConfig","workspaceRoot","findCommonRoot","filesByType","file","type","typeFiles","targetConfig","typeWorkspaceRoot","packageRoot","findPackageRoot","files","getRegistryItems","registryItemSchema","component","GITHUB_TEMPLATE_URL","TEMPLATES","createProject","template","projectName","nextVersion","isRemoteComponent","fetchRegistry","meta","projectPath","createNextProject","createMonorepoProject","createViteProject","createStartProject","createSpinner","templatePath","os","response","tarPath","extractedPath","packageJsonPath","packageJsonContent","packageJson","lockFilePath","loadEnvFiles","envFiles","envFile","envPath","join","FILE_BACKUP_SUFFIX","createFileBackup","filePath","fsExtra","backupPath","restoreFileBackup","deleteFileBackup","code","initOptionsSchema","val","rawConfigSchema","init","Command","NEUTRAL_THEME_NAMES","FONT_VARIANT_NAMES","opts","shadowConfig","createConfig","componentsJsonPath","existingConfig","baseConfig","item","deepmerge","runInit","newProjectTemplate","preflight","getConfig","projectConfig","getProjectConfig","configResult","promptForMinimalConfig","promptForConfig","proceed","themeName","neutralName","DEFAULT_NEUTRAL_THEME","fontVariantName","DEFAULT_FONT_VARIANT","componentSpinner","mergeConfig","base","override","fullConfig","resolveConfigPaths","defaultConfig","THEMES","theme","NEUTRAL_THEMES","FONT_VARIANTS","variant","DEFAULT_TAILWIND_CSS","DEFAULT_TAILWIND_CONFIG","DEFAULT_COMPONENTS","DEFAULT_UTILS","cssVariables","iconLibrary","preFlightAdd","updateAppIndex","indexPath","registryItem","addOptionsSchema","add","initialConfig","itemType","shouldInstallBaseStyle","isUniversalRegistryItem","confirm","promptForRegistryComponents","deprecatedComponents","DEPRECATED_COMPONENTS","initHasRun","shouldUpdateAppIndex","registryIndex","getcreateuiRegistryIndex","entry","preFlightBuild","resolvePaths","buildOptionsSchema","build","registry","he","ne","registrySchema","buildSpinner","createui_URL","CREATE_TEMPLATES","create","createUrl","getcreateuiCreateUrl","open","enteredName","validateProjectName","selectedTemplate","presetResult","handlePresetOption","initUrl","baseColor","buildInitUrl","registryBaseConfig","templateFiles","getTemplateFiles","preset","getcreateuiInitUrl","presetArg","presets","getPresets","selectedPreset","url","isUrl","getPreset","presetNames","dedent","updateOptionsSchema","diff","targetDir","projectComponents","componentsWithUpdates","changes","diffComponent","change","printDiff","payload","fetchTree","getItemTargetPath","fileContent","registryContent","transform","patch","diffLines","info","createui_MCP_PACKAGE","CLIENTS","DEPENDENCIES","mcp","transport","StdioServerTransport","server","mcpInitOptionsSchema","client","installCommand","devFlag","installSpinner","configSpinner","configPath","runMcpInit","overwriteMerge","sourceArray","clientInfo","dir","mergedConfig","migrateIcons","uiPath","registryIcons","fg","getRegistryIcons","libraryChoices","LEGACY_ICON_LIBRARIES","migrateOptions","sourceLibrary","targetLibrary","migrationSpinner","migrateIconsFile","iconsMapping","sourceLibraryImport","targetLibraryImport","tmpdir","project","tempFile","randomBytes","targetedIcons","importDeclaration","specifier","iconName","targetedIcon","icon","toPascalCase","str","processNamedImports","isTypeOnly","packageName","namedImportList","importItem","inlineTypeMatch","aliasMatch","importAlias","migrateRadix","foundPackages","replacedPackages","migrateRadixFile","packageSpinner","foundPackagesArray","dependencyTypes","depType","radixImportPattern","linesToRemove","quoteStyle","hasSemicolon","match","fullMatch","typeKeyword","namespaceAlias","semicolon","componentName","uniqueImports","index","self","i","unifiedImport","typePrefix","acc","line","transformedLine","offset","string","beforeMatch","openQuotes","openSingleQuotes","uniqueReplacedPackages","preFlightMigrate","migrations","migrateOptionsSchema","migration","migrate","preFlightRegistryBuild","buildRegistry","fe","resolvedRegistry","resolveRegistryItems","absPath","err","results","recursivelyResolveFileImports","searchOptionsSchema","search","registries","partialConfig","searchRegistries","viewOptionsSchema","view","items","package_default","main","program"],"mappings":"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","file":"index.js","sourcesContent":["import path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightInit(\n options: z.infer<typeof initOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n projectInfo: null,\n }\n }\n\n const projectSpinner = spinner(`Preflight checks.`, {\n silent: options.silent,\n }).start()\n\n if (\n fs.existsSync(path.resolve(options.cwd, \"components.json\")) &&\n !options.force\n ) {\n projectSpinner?.fail()\n logger.break()\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file already exists at ${highlighter.info(\n options.cwd\n )}.\\nTo start over, remove the ${highlighter.info(\n \"components.json\"\n )} file and run ${highlighter.info(\"init\")} again.`\n )\n logger.break()\n process.exit(1)\n }\n\n projectSpinner?.succeed()\n\n const frameworkSpinner = spinner(`Verifying framework.`, {\n silent: options.silent,\n }).start()\n const projectInfo = await getProjectInfo(options.cwd)\n if (!projectInfo || projectInfo?.framework.name === \"manual\") {\n errors[ERRORS.UNSUPPORTED_FRAMEWORK] = true\n frameworkSpinner?.fail()\n logger.break()\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `We could not detect a supported framework at ${highlighter.info(\n options.cwd\n )}.\\n` +\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to manually configure your project.\\nOnce configured, you can use the cli to add components.`\n )\n }\n logger.break()\n process.exit(1)\n }\n frameworkSpinner?.succeed(\n `Verifying framework. Found ${highlighter.info(\n projectInfo.framework.label\n )}.`\n )\n\n const tailwindSpinnerMessage =\n projectInfo.tailwindVersion === \"v4\"\n ? `Validating Tailwind CSS config. Found ${highlighter.info(\"v4\")}.`\n : \"Validating Tailwind CSS.\"\n\n const tailwindSpinner = spinner(tailwindSpinnerMessage, {\n silent: options.silent,\n }).start()\n if (\n (projectInfo.tailwindVersion === \"v4\" && !projectInfo?.tailwindCssFile) ||\n !projectInfo.tailwindVersion\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else {\n tailwindSpinner?.succeed()\n }\n\n const tsConfigSpinner = spinner(`Validating import alias.`, {\n silent: options.silent,\n }).start()\n if (!projectInfo?.aliasPrefix) {\n errors[ERRORS.IMPORT_ALIAS_MISSING] = true\n tsConfigSpinner?.fail()\n } else {\n tsConfigSpinner?.succeed()\n }\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.TAILWIND_NOT_CONFIGURED]) {\n logger.break()\n logger.error(\n `No Tailwind CSS configuration found at ${highlighter.info(\n options.cwd\n )}.`\n )\n logger.error(\n `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`\n )\n logger.error(`Install Tailwind CSS then try again.`)\n if (projectInfo?.framework.links.tailwind) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.tailwind\n )} to get started.`\n )\n }\n }\n\n if (errors[ERRORS.IMPORT_ALIAS_MISSING]) {\n logger.break()\n logger.error(`No import alias found in your tsconfig.json file.`)\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to learn how to set an import alias.`\n )\n }\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n projectInfo,\n }\n}\n","import path from \"path\"\n\nexport function isSafeTarget(targetPath: string, cwd: string): boolean {\n // Check for null bytes which can be used to bypass validations.\n if (targetPath.includes(\"\\0\")) {\n return false\n }\n\n // Decode URL-encoded sequences to catch encoded traversal attempts.\n let decodedPath: string\n try {\n // Decode multiple times to catch double-encoded sequences.\n decodedPath = targetPath\n let prevPath = \"\"\n while (decodedPath !== prevPath && decodedPath.includes(\"%\")) {\n prevPath = decodedPath\n decodedPath = decodeURIComponent(decodedPath)\n }\n } catch {\n // If decoding fails, treat as unsafe.\n return false\n }\n\n // Normalize both paths to handle different path separators.\n // Convert Windows backslashes to forward slashes for consistent handling.\n const normalizedTarget = path.normalize(decodedPath.replace(/\\\\/g, \"/\"))\n const normalizedRoot = path.normalize(cwd)\n\n // Check for explicit path traversal sequences in both encoded and decoded forms.\n // Allow [...] pattern which is common in framework routing (e.g., [...slug])\n const hasPathTraversal = (path: string) => {\n // Remove [...] patterns before checking for ..\n const withoutBrackets = path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n return withoutBrackets.includes(\"..\")\n }\n\n if (\n hasPathTraversal(normalizedTarget) ||\n hasPathTraversal(decodedPath) ||\n hasPathTraversal(targetPath)\n ) {\n return false\n }\n\n // Check for current directory references that might be used in traversal.\n // First, remove [...] patterns to avoid false positives\n const cleanPath = (path: string) => path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n const cleanTarget = cleanPath(targetPath)\n const cleanDecoded = cleanPath(decodedPath)\n\n const suspiciousPatterns = [\n /\\.\\.[\\/\\\\]/, // ../ or ..\\\n /[\\/\\\\]\\.\\./, // /.. or \\..\n /\\.\\./, // .. anywhere\n /\\.\\.%/, // URL encoded traversal\n /\\x00/, // null byte\n /[\\x01-\\x1f]/, // control characters\n ]\n\n if (\n suspiciousPatterns.some(\n (pattern) => pattern.test(cleanTarget) || pattern.test(cleanDecoded)\n )\n ) {\n return false\n }\n\n // Allow ~/ at the start (home directory expansion within project) but reject ~/../ patterns.\n if (\n (targetPath.includes(\"~\") || decodedPath.includes(\"~\")) &&\n (targetPath.includes(\"../\") || decodedPath.includes(\"../\"))\n ) {\n return false\n }\n\n // Check for Windows drive letters (even on non-Windows systems for safety).\n const driveLetterRegex = /^[a-zA-Z]:[\\/\\\\]/\n if (driveLetterRegex.test(decodedPath)) {\n // On Windows, check if it starts with the project root.\n if (process.platform === \"win32\") {\n return decodedPath.toLowerCase().startsWith(cwd.toLowerCase())\n }\n // On non-Windows systems, reject all Windows absolute paths.\n return false\n }\n\n // If it's an absolute path, ensure it's within the project root.\n if (path.isAbsolute(normalizedTarget)) {\n return normalizedTarget.startsWith(normalizedRoot + path.sep)\n }\n\n // For relative paths, resolve and check if within project bounds.\n const resolvedPath = path.resolve(normalizedRoot, normalizedTarget)\n return (\n resolvedPath.startsWith(normalizedRoot + path.sep) ||\n resolvedPath === normalizedRoot\n )\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemCssSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Declaration from \"postcss/lib/declaration\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCss(\n css: z.infer<typeof registryItemCssSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (\n !config.resolvedPaths.tailwindCss ||\n !css ||\n Object.keys(css).length === 0\n ) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssSpinner = spinner(\n `Updating ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCss(raw, css)\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssSpinner.succeed()\n}\n\nexport async function transformCss(\n input: string,\n css: z.infer<typeof registryItemCssSchema>\n) {\n const plugins = [updateCssPlugin(css)]\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n // PostCSS doesn't add semicolons to at-rules without bodies when they're the last node.\n // We need to manually ensure they have semicolons.\n const root = result.root\n if (root.nodes && root.nodes.length > 0) {\n const lastNode = root.nodes[root.nodes.length - 1]\n if (\n lastNode.type === \"atrule\" &&\n !lastNode.nodes &&\n !output.trimEnd().endsWith(\";\")\n ) {\n output = output.trimEnd() + \";\"\n }\n }\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n output = output.trimEnd()\n\n return output\n}\n\nfunction updateCssPlugin(css: z.infer<typeof registryItemCssSchema>) {\n return {\n postcssPlugin: \"update-css\",\n Once(root: Root) {\n for (const [selector, properties] of Object.entries(css)) {\n if (selector.startsWith(\"@\")) {\n // Handle at-rules (@layer, @utility, etc.)\n const atRuleMatch = selector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (!atRuleMatch) continue\n\n const [, name, params] = atRuleMatch\n\n // Special handling for imports - place them at the top.\n if (name === \"import\") {\n // Check if this import already exists.\n const existingImport = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"import\" &&\n node.params === params\n )\n\n if (!existingImport) {\n const importRule = postcss.atRule({\n name: \"import\",\n params,\n raws: { semicolon: true },\n })\n\n // Find the last import to insert after, or insert at beginning.\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (importNodes && importNodes.length > 0) {\n // Insert after the last existing import.\n const lastImport = importNodes[importNodes.length - 1]\n importRule.raws.before = \"\\n\"\n root.insertAfter(lastImport, importRule)\n } else {\n // No imports exist, insert at the very beginning.\n // Check if the file is empty.\n if (!root.nodes || root.nodes.length === 0) {\n importRule.raws.before = \"\"\n } else {\n importRule.raws.before = \"\"\n }\n root.prepend(importRule)\n }\n }\n }\n // Special handling for plugins - place them after imports.\n else if (name === \"plugin\") {\n // Ensure plugin name is quoted if not already.\n let quotedParams = params\n if (params && !params.startsWith('\"') && !params.startsWith(\"'\")) {\n quotedParams = `\"${params}\"`\n }\n\n // Normalize params for comparison (remove quotes).\n const normalizeParams = (p: string) => {\n if (p.startsWith('\"') && p.endsWith('\"')) {\n return p.slice(1, -1)\n }\n if (p.startsWith(\"'\") && p.endsWith(\"'\")) {\n return p.slice(1, -1)\n }\n return p\n }\n\n // Find existing plugin with same normalized params.\n const existingPlugin = root.nodes?.find((node): node is AtRule => {\n if (node.type !== \"atrule\" || node.name !== \"plugin\") {\n return false\n }\n return normalizeParams(node.params) === normalizeParams(params)\n })\n\n if (!existingPlugin) {\n const pluginRule = postcss.atRule({\n name: \"plugin\",\n params: quotedParams,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n // Find the last import or plugin node to insert after\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const pluginNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n if (pluginNodes && pluginNodes.length > 0) {\n // Insert after the last existing plugin\n const lastPlugin = pluginNodes[pluginNodes.length - 1]\n root.insertAfter(lastPlugin, pluginRule)\n } else if (importNodes && importNodes.length > 0) {\n // Insert after the last import if no plugins exist\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, pluginRule)\n // Add a break comment before the first plugin to create spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports or plugins, insert at the beginning\n root.prepend(pluginRule)\n // Add a break comment before the first plugin for spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n }\n // Special handling for custom-variant - place after imports, preserving declaration order.\n else if (name === \"custom-variant\") {\n const existing = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"custom-variant\" &&\n node.params === params\n )\n\n if (!existing) {\n const variantNode = postcss.atRule({\n name: \"custom-variant\",\n params,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n const customVariantNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (customVariantNodes && customVariantNodes.length > 0) {\n // Append after the last existing custom-variant to preserve declaration order.\n const lastVariant =\n customVariantNodes[customVariantNodes.length - 1]\n root.insertAfter(lastVariant, variantNode)\n } else if (importNodes && importNodes.length > 0) {\n // First custom-variant: insert after the last import, with a break.\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, variantNode)\n root.insertBefore(\n variantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n root.prepend(variantNode)\n }\n }\n }\n // Check if this is any at-rule with no body (empty object).\n else if (\n typeof properties === \"object\" &&\n Object.keys(properties).length === 0\n ) {\n // Handle any at-rule with no body (e.g., @apply, @tailwind, etc.).\n const atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n const newAtRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true },\n })\n\n root.append(newAtRule)\n root.insertBefore(\n newAtRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n // Special handling for keyframes - place them under @theme inline.\n else if (name === \"keyframes\") {\n let themeInline = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n ) as AtRule | undefined\n\n if (!themeInline) {\n themeInline = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeInline)\n root.insertBefore(\n themeInline,\n postcss.comment({ text: \"---break---\" })\n )\n }\n\n // Check if a keyframe with the same name already exists\n const existingKeyframesRule = themeInline.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === params\n )\n\n let keyframesRule: AtRule\n if (existingKeyframesRule) {\n // Replace existing keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n existingKeyframesRule.replaceWith(keyframesRule)\n } else {\n // Create new keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n themeInline.append(keyframesRule)\n }\n\n if (typeof properties === \"object\") {\n for (const [step, stepProps] of Object.entries(properties)) {\n processRule(keyframesRule, step, stepProps)\n }\n }\n }\n // Special handling for utility classes to preserve property values\n else if (name === \"utility\") {\n const utilityAtRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!utilityAtRule) {\n const atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n\n root.append(atRule)\n root.insertBefore(\n atRule,\n postcss.comment({ text: \"---break---\" })\n )\n\n // Add declarations with their values preserved\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n atRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(atRule, prop, value)\n }\n }\n }\n } else {\n // Update existing utility class\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const existingDecl = utilityAtRule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n existingDecl\n ? existingDecl.replaceWith(decl)\n : utilityAtRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(utilityAtRule, prop, value)\n }\n }\n }\n }\n }\n // Handle at-property as regular CSS rules\n else if (name === \"property\") {\n processRule(root, selector, properties)\n } else {\n // Handle other at-rules normally\n processAtRule(root, name, params, properties)\n }\n } else {\n // Handle regular CSS rules\n processRule(root, selector, properties)\n }\n }\n },\n }\n}\n\nfunction processAtRule(\n root: Root | AtRule,\n name: string,\n params: string,\n properties: any\n) {\n // Find or create the at-rule\n let atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === name && node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(atRule)\n root.insertBefore(atRule, postcss.comment({ text: \"---break---\" }))\n }\n\n // Process children of this at-rule\n if (typeof properties === \"object\") {\n for (const [childSelector, childProps] of Object.entries(properties)) {\n if (childSelector.startsWith(\"@\")) {\n // Nested at-rule\n const nestedMatch = childSelector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (nestedMatch) {\n const [, nestedName, nestedParams] = nestedMatch\n processAtRule(atRule, nestedName, nestedParams, childProps)\n }\n } else {\n // CSS rule within at-rule\n processRule(atRule, childSelector, childProps)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the at-rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Create a rule for the at-rule if needed\n const rule = postcss.rule({\n selector: \"temp\",\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule.append(clone)\n }\n })\n\n // Only add the rule if it has declarations\n if (rule.nodes?.length) {\n atRule.append(rule)\n }\n }\n } catch (error) {\n console.error(\"Error parsing at-rule content:\", properties, error)\n throw error\n }\n }\n}\n\nfunction processRule(parent: Root | AtRule, selector: string, properties: any) {\n let rule = parent.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n ) as Rule | undefined\n\n if (!rule) {\n rule = postcss.rule({\n selector,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n parent.append(rule)\n }\n\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n // Check if this is any at-rule with empty object (no body).\n if (\n prop.startsWith(\"@\") &&\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 0\n ) {\n // Parse the at-rule.\n const atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (atRuleMatch) {\n const [, atRuleName, atRuleParams] = atRuleMatch\n const atRule = postcss.atRule({\n name: atRuleName,\n params: atRuleParams,\n raws: { semicolon: true, before: \"\\n \" },\n })\n rule.append(atRule)\n }\n } else if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n // Replace existing property or add new one.\n const existingDecl = rule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(decl) : rule.append(decl)\n } else if (typeof value === \"object\") {\n // Nested selector (including & selectors).\n const nestedSelector = prop.startsWith(\"&\")\n ? selector.replace(/^([^:]+)/, `$1${prop.substring(1)}`)\n : prop // Use the original selector for other nested elements.\n processRule(parent, nestedSelector, value)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule?.append(clone)\n }\n })\n }\n } catch (error) {\n console.error(\"Error parsing rule content:\", selector, properties, error)\n throw error\n }\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n registryItemCssVarsSchema,\n registryItemTailwindSchema,\n} from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\n// Responsive value system\n// Categories whose values are numeric and get a `px` unit suffix.\nconst RESPONSIVE_CATEGORIES = new Set([\"text\", \"spacing\", \"radius\"])\n\nexport function formatResponsiveValue(value: string): string {\n const trimmed = value.trim()\n if (trimmed === \"\" || isNaN(Number(trimmed))) {\n return trimmed\n }\n return `${trimmed}px`\n}\n\nexport interface ResponsiveBreakdown {\n desktop: Record<string, string>\n tablet: Record<string, string>\n mobile: Record<string, string>\n}\n\n// Keys ending with these suffixes should never get a px unit suffix.\nconst NO_PX_SUFFIXES = [\"--font-weight\"]\n\nexport function splitResponsiveVars(\n vars: Record<string, string>,\n category: string\n): ResponsiveBreakdown {\n const categoryAddsUnit = RESPONSIVE_CATEGORIES.has(category)\n const desktop: Record<string, string> = {}\n const tablet: Record<string, string> = {}\n const mobile: Record<string, string> = {}\n\n for (const [key, rawValue] of Object.entries(vars)) {\n const addUnit =\n categoryAddsUnit && !NO_PX_SUFFIXES.some((suffix) => key.endsWith(suffix))\n\n if (rawValue.includes(\"|\")) {\n const [d, t, m] = rawValue.split(\"|\").map((s) => s.trim())\n desktop[key] = addUnit ? formatResponsiveValue(d) : d\n // Only include tablet if different from desktop\n if (t !== d) {\n tablet[key] = addUnit ? formatResponsiveValue(t) : t\n }\n // Only include mobile if different from tablet\n if (m !== t) {\n mobile[key] = addUnit ? formatResponsiveValue(m) : m\n }\n } else {\n desktop[key] = addUnit ? formatResponsiveValue(rawValue) : rawValue\n }\n }\n\n return { desktop, tablet, mobile }\n}\n\n/**\n * Reconstructs full CSS variable names from category + short keys.\n * Empty key → category name only (e.g. \"\" in radius → \"radius\").\n * Non-empty key → \"category-key\" (e.g. \"sm\" in radius → \"radius-sm\").\n */\nexport function expandKeys(\n category: string,\n vars: Record<string, string>\n): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(vars)) {\n result[key ? `${category}-${key}` : category] = value\n }\n return result\n}\n\nexport async function updateCssVars(\n cssVars: z.infer<typeof registryItemCssVarsSchema> | undefined,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n overwriteCssVars?: boolean\n initIndex?: boolean\n silent?: boolean\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n }\n) {\n if (!config.resolvedPaths.tailwindCss || !Object.keys(cssVars ?? {}).length) {\n return\n }\n\n options = {\n cleanupDefaultNextStyles: false,\n silent: false,\n overwriteCssVars: false,\n initIndex: true,\n ...options,\n }\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssVarsSpinner = spinner(\n `Updating CSS variables in ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCssVars(raw, cssVars ?? {}, config, {\n cleanupDefaultNextStyles: options.cleanupDefaultNextStyles,\n tailwindConfig: options.tailwindConfig,\n overwriteCssVars: options.overwriteCssVars,\n initIndex: options.initIndex,\n })\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssVarsSpinner.succeed()\n}\n\nexport async function transformCssVars(\n input: string,\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n overwriteCssVars?: boolean\n initIndex?: boolean\n } = {\n cleanupDefaultNextStyles: false,\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n }\n) {\n options = {\n cleanupDefaultNextStyles: false,\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n ...options,\n }\n\n let plugins: postcss.AcceptedPlugin[] = []\n\n // Only add tw-animate-css if project does not have tailwindcss-animate\n if (config.resolvedPaths?.cwd) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd)\n if (\n !packageInfo?.dependencies?.[\"tailwindcss-animate\"] &&\n !packageInfo?.devDependencies?.[\"tailwindcss-animate\"] &&\n options.initIndex\n ) {\n plugins.push(addCustomImport({ params: \"tw-animate-css\" }))\n }\n }\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n plugins.push(\n updateCssVarsPluginV4(cssVars, {\n overwriteCssVars: options.overwriteCssVars,\n })\n )\n plugins.push(updateThemePlugin(cssVars))\n\n if (options.tailwindConfig) {\n plugins.push(updateTailwindConfigPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigAnimationPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigKeyframesPlugin(options.tailwindConfig))\n }\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n\n return output\n}\n\nfunction updateBaseLayerPlugin() {\n return {\n postcssPlugin: \"update-base-layer\",\n Once(root: Root) {\n const requiredRules = [\n {\n selector: \"*\",\n apply: \"border-border outline-ring/50\",\n },\n { selector: \"body\", apply: \"bg-white text-strongest\" },\n ]\n\n let baseLayer = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\" &&\n requiredRules.every(({ selector, apply }) =>\n node.nodes?.some(\n (rule): rule is Rule =>\n rule.type === \"rule\" &&\n rule.selector === selector &&\n rule.nodes.some(\n (applyRule): applyRule is AtRule =>\n applyRule.type === \"atrule\" &&\n applyRule.name === \"apply\" &&\n applyRule.params === apply\n )\n )\n )\n ) as AtRule | undefined\n\n if (!baseLayer) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n requiredRules.forEach(({ selector, apply }) => {\n const existingRule = baseLayer?.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!existingRule) {\n baseLayer?.append(\n postcss.rule({\n selector,\n nodes: [\n postcss.atRule({\n name: \"apply\",\n params: apply,\n raws: { semicolon: true, before: \"\\n \" },\n }),\n ],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n )\n }\n })\n },\n }\n}\n\nfunction removeConflictVars(root: Rule | Root) {\n const rootRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \":root\"\n )\n\n if (rootRule) {\n const propsToRemove = [\"--background\", \"--foreground\"]\n\n rootRule.nodes\n .filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && propsToRemove.includes(node.prop)\n )\n .forEach((node) => node.remove())\n\n if (rootRule.nodes.length === 0) {\n rootRule.remove()\n }\n }\n}\n\nfunction cleanupDefaultNextStylesPlugin() {\n return {\n postcssPlugin: \"cleanup-default-next-styles\",\n Once(root: Root) {\n const bodyRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \"body\"\n )\n if (bodyRule) {\n // Remove color from the body node.\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"color\" &&\n [\"rgb(var(--foreground-rgb))\", \"var(--foreground)\"].includes(\n node.value\n )\n )\n ?.remove()\n\n // Remove background: linear-gradient.\n bodyRule.nodes\n .find((node): node is postcss.Declaration => {\n return (\n node.type === \"decl\" &&\n node.prop === \"background\" &&\n // This is only going to run on create project, so all good.\n (node.value.startsWith(\"linear-gradient\") ||\n node.value === \"var(--background)\")\n )\n })\n ?.remove()\n\n // Remove font-family: Arial, Helvetica, sans-serif;\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"font-family\" &&\n node.value === \"Arial, Helvetica, sans-serif\"\n )\n ?.remove()\n\n // If the body rule is empty, remove it.\n if (bodyRule.nodes.length === 0) {\n bodyRule.remove()\n }\n }\n\n removeConflictVars(root)\n\n const darkRootRule = root.nodes.find(\n (node): node is Rule =>\n node.type === \"atrule\" &&\n node.params === \"(prefers-color-scheme: dark)\"\n )\n\n if (darkRootRule) {\n removeConflictVars(darkRootRule)\n if (darkRootRule.nodes.length === 0) {\n darkRootRule.remove()\n }\n }\n },\n }\n}\n\nfunction updateCssVarsPluginV4(\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n options: {\n overwriteCssVars?: boolean\n }\n) {\n return {\n postcssPlugin: \"update-css-vars-v4\",\n Once(root: Root) {\n // Helper to upsert vars into a :root or .dark rule\n const upsertVarsIntoRule = (\n selector: string,\n vars: Record<string, string>\n ) => {\n let ruleNode = root.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode && Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(ruleNode)\n root.insertBefore(ruleNode, postcss.comment({ text: \"---break---\" }))\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n\n if (isLocalHSLValue(value)) {\n value = `hsl(${value})`\n }\n\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n ruleNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n ruleNode?.append(newDecl)\n }\n }\n })\n }\n\n // Helper to upsert vars into a media query at root level\n const upsertMediaQueryVars = (\n maxWidth: string,\n selector: string,\n vars: Record<string, string>\n ) => {\n if (Object.keys(vars).length === 0) return\n\n const mediaParams = `(max-width: ${maxWidth})`\n let mediaNode = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"media\" &&\n node.params === mediaParams\n ) as AtRule | undefined\n\n if (!mediaNode) {\n mediaNode = postcss.atRule({\n name: \"media\",\n params: mediaParams,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(mediaNode)\n root.insertBefore(mediaNode, postcss.comment({ text: \"---break---\" }))\n }\n\n let ruleNode = mediaNode.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n mediaNode.append(ruleNode)\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n if (options.overwriteCssVars) {\n existingDecl\n ? existingDecl.replaceWith(newDecl)\n : ruleNode?.append(newDecl)\n } else {\n if (!existingDecl) ruleNode?.append(newDecl)\n }\n })\n }\n\n // Iterate categories, then light/dark within each\n for (const [category, modes] of Object.entries(cssVars)) {\n if (RESPONSIVE_CATEGORIES.has(category)) {\n if (modes.light) {\n const { desktop, tablet, mobile } = splitResponsiveVars(\n modes.light,\n category\n )\n upsertVarsIntoRule(\":root\", expandKeys(category, desktop))\n upsertMediaQueryVars(\n \"1199px\",\n \":root\",\n expandKeys(category, tablet)\n )\n upsertMediaQueryVars(\"699px\", \":root\", expandKeys(category, mobile))\n }\n if (modes.dark) {\n const { desktop, tablet, mobile } = splitResponsiveVars(\n modes.dark,\n category\n )\n upsertVarsIntoRule(\".dark\", expandKeys(category, desktop))\n upsertMediaQueryVars(\n \"1199px\",\n \".dark\",\n expandKeys(category, tablet)\n )\n upsertMediaQueryVars(\"699px\", \".dark\", expandKeys(category, mobile))\n }\n } else {\n if (modes.light) {\n upsertVarsIntoRule(\":root\", expandKeys(category, modes.light))\n }\n if (modes.dark) {\n upsertVarsIntoRule(\".dark\", expandKeys(category, modes.dark))\n }\n }\n }\n },\n }\n}\n\nfunction updateThemePlugin(cssVars: z.infer<typeof registryItemCssVarsSchema>) {\n return {\n postcssPlugin: \"update-theme\",\n Once(root: Root) {\n // Skip if there are no categories with variables\n if (Object.keys(cssVars).length === 0) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n\n // Collect all unique keys across all categories and modes\n for (const [category, modes] of Object.entries(cssVars)) {\n const keys = Array.from(\n new Set([\n ...Object.keys(modes.light ?? {}),\n ...Object.keys(modes.dark ?? {}),\n ])\n )\n\n for (const key of keys) {\n const varName = key ? `${category}-${key}` : category\n const prop = `--${varName}`\n const propValue = `var(--${varName})`\n\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n if (!existingDecl) {\n themeNode?.append(\n postcss.decl({\n prop,\n value: propValue,\n raws: { semicolon: true },\n })\n )\n }\n }\n }\n },\n }\n}\n\nfunction upsertThemeNode(root: Root): AtRule {\n let themeNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n )\n\n if (!themeNode) {\n themeNode = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeNode)\n root.insertBefore(themeNode, postcss.comment({ text: \"---break---\" }))\n }\n\n return themeNode\n}\n\nfunction addCustomImport({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-import\",\n Once(root: Root) {\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n // Find custom variant node (to ensure we insert before it)\n const customVariantNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n // Check if our specific import already exists\n const hasImport = importNodes.some(\n (node) => node.params.replace(/[\"']/g, \"\") === params\n )\n\n if (!hasImport) {\n const importNode = postcss.atRule({\n name: \"import\",\n params: `\"${params}\"`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // If there are existing imports, add after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, importNode)\n } else if (customVariantNode) {\n // If no imports but has custom-variant, insert before it\n root.insertBefore(customVariantNode, importNode)\n root.insertBefore(\n customVariantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports and no custom-variant, insert at the start\n root.prepend(importNode)\n root.insertAfter(importNode, postcss.comment({ text: \"---break---\" }))\n }\n }\n },\n }\n}\n\nfunction updateTailwindConfigPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config\",\n Once(root: Root) {\n if (!tailwindConfig?.plugins) {\n return\n }\n\n const quoteType = getQuoteType(root)\n const quote = quoteType === \"single\" ? \"'\" : '\"'\n\n const pluginNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n const lastPluginNode =\n pluginNodes[pluginNodes.length - 1] || root.nodes[0]\n\n for (const plugin of tailwindConfig.plugins) {\n const pluginName = plugin.replace(/^require\\([\"']|[\"']\\)$/g, \"\")\n\n // Check if the plugin is already present.\n if (\n pluginNodes.some((node) => {\n return node.params.replace(/[\"']/g, \"\") === pluginName\n })\n ) {\n continue\n }\n\n const pluginNode = postcss.atRule({\n name: \"plugin\",\n params: `${quote}${pluginName}${quote}`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n root.insertAfter(lastPluginNode, pluginNode)\n root.insertBefore(pluginNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction updateTailwindConfigKeyframesPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-keyframes\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.keyframes) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingKeyFrameNodes = themeNode.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"keyframes\"\n )\n\n const keyframeValueSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n )\n\n for (const [keyframeName, keyframeValue] of Object.entries(\n tailwindConfig.theme.extend.keyframes\n )) {\n if (typeof keyframeName !== \"string\") {\n continue\n }\n\n const parsedKeyframeValue = keyframeValueSchema.safeParse(keyframeValue)\n\n if (!parsedKeyframeValue.success) {\n continue\n }\n\n if (\n existingKeyFrameNodes?.find(\n (node): node is postcss.AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === keyframeName\n )\n ) {\n continue\n }\n\n const keyframeNode = postcss.atRule({\n name: \"keyframes\",\n params: keyframeName,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n for (const [key, values] of Object.entries(parsedKeyframeValue.data)) {\n const rule = postcss.rule({\n selector: key,\n nodes: Object.entries(values).map(([key, value]) =>\n postcss.decl({\n prop: key,\n value,\n raws: { semicolon: true, before: \"\\n \", between: \": \" },\n })\n ),\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n keyframeNode.append(rule)\n }\n\n themeNode.append(keyframeNode)\n themeNode.insertBefore(\n keyframeNode,\n postcss.comment({ text: \"---break---\" })\n )\n }\n },\n }\n}\n\nfunction updateTailwindConfigAnimationPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-animation\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.animation) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingAnimationNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--animate-\")\n )\n\n const parsedAnimationValue = z\n .record(z.string(), z.string())\n .safeParse(tailwindConfig.theme.extend.animation)\n if (!parsedAnimationValue.success) {\n return\n }\n\n for (const [key, value] of Object.entries(parsedAnimationValue.data)) {\n const prop = `--animate-${key}`\n if (\n existingAnimationNodes?.find(\n (node): node is postcss.Declaration => node.prop === prop\n )\n ) {\n continue\n }\n\n const animationNode = postcss.decl({\n prop,\n value,\n raws: { semicolon: true, between: \": \", before: \"\\n \" },\n })\n themeNode.append(animationNode)\n }\n },\n }\n}\n\nfunction getQuoteType(root: Root): \"single\" | \"double\" {\n const firstNode = root.nodes[0]\n const raw = firstNode.toString()\n\n if (raw.includes(\"'\")) {\n return \"single\"\n }\n return \"double\"\n}\n\nexport function isLocalHSLValue(value: string) {\n if (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\")\n ) {\n return false\n }\n\n const chunks = value.split(\" \")\n\n return (\n chunks.length === 3 &&\n chunks.slice(1, 3).every((chunk) => chunk.includes(\"%\"))\n )\n}\n\nexport function isColorValue(value: string) {\n return (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\") ||\n value.includes(\"--color-\") ||\n value.includes(\"--primary-\")\n )\n}\n","import { RegistryItem } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport prompts from \"prompts\"\n\nexport async function updateDependencies(\n dependencies: RegistryItem[\"dependencies\"],\n devDependencies: RegistryItem[\"devDependencies\"],\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n dependencies = Array.from(new Set(dependencies))\n devDependencies = Array.from(new Set(devDependencies))\n\n if (!dependencies?.length && !devDependencies?.length) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const dependenciesSpinner = spinner(`Installing dependencies.`, {\n silent: options.silent,\n })?.start()\n const packageManager = await getUpdateDependenciesPackageManager(config)\n\n // Offer to use --force or --legacy-peer-deps if using React 19 with npm.\n let flag = \"\"\n if (shouldPromptForNpmFlag(config) && packageManager === \"npm\") {\n if (options.silent) {\n flag = \"force\"\n } else {\n dependenciesSpinner.stopAndPersist()\n logger.warn(\n \"\\nIt looks like you are using React 19. \\nSome packages may fail to install due to peer dependency issues in npm (see https://dev.createui.co/react-19).\\n\"\n )\n const confirmation = await prompts([\n {\n type: \"select\",\n name: \"flag\",\n message: \"How would you like to proceed?\",\n choices: [\n { title: \"Use --force\", value: \"force\" },\n { title: \"Use --legacy-peer-deps\", value: \"legacy-peer-deps\" },\n ],\n },\n ])\n\n if (confirmation) {\n flag = confirmation.flag\n }\n }\n }\n\n dependenciesSpinner?.start()\n\n await installWithPackageManager(\n packageManager,\n dependencies,\n devDependencies,\n config.resolvedPaths.cwd,\n flag\n )\n\n dependenciesSpinner?.succeed()\n}\n\nfunction shouldPromptForNpmFlag(config: Config) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageInfo?.dependencies?.react) {\n return false\n }\n\n const hasReact19 = /^(?:\\^|~)?19(?:\\.\\d+)*(?:-.*)?$/.test(\n packageInfo.dependencies.react\n )\n const hasReactDayPicker8 =\n packageInfo.dependencies[\"react-day-picker\"]?.startsWith(\"8\")\n\n return hasReact19 && hasReactDayPicker8\n}\n\nasync function getUpdateDependenciesPackageManager(config: Config) {\n const expoVersion = getPackageInfo(config.resolvedPaths.cwd, false)\n ?.dependencies?.expo\n\n if (expoVersion) {\n // Ensures package versions match the React Native version.\n // https://docs.expo.dev/more/expo-cli/#install\n return \"expo\"\n }\n\n return getPackageManager(config.resolvedPaths.cwd)\n}\n\nasync function installWithPackageManager(\n packageManager: Awaited<\n ReturnType<typeof getUpdateDependenciesPackageManager>\n >,\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (packageManager === \"npm\") {\n return installWithNpm(dependencies, devDependencies, cwd, flag)\n }\n\n if (packageManager === \"deno\") {\n return installWithDeno(dependencies, devDependencies, cwd)\n }\n\n if (packageManager === \"expo\") {\n return installWithExpo(dependencies, devDependencies, cwd)\n }\n\n if (dependencies?.length) {\n try {\n await execa(packageManager, [\"add\", ...dependencies], {\n cwd,\n })\n } catch {\n // Batch install failed. Try installing packages individually\n // so that missing/unpublished packages don't block the rest.\n await installIndividually(packageManager, \"add\", dependencies, cwd)\n }\n }\n\n if (devDependencies?.length) {\n try {\n await execa(packageManager, [\"add\", \"-D\", ...devDependencies], { cwd })\n } catch {\n await installIndividually(packageManager, \"add -D\", devDependencies, cwd)\n }\n }\n}\n\nasync function installWithNpm(\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n const flagArgs = flag ? [`--${flag}`] : []\n\n if (dependencies.length) {\n try {\n await execa(\"npm\", [\"install\", ...flagArgs, ...dependencies], { cwd })\n } catch {\n await installIndividually(\n \"npm\",\n `install${flagArgs.length ? ` ${flagArgs.join(\" \")}` : \"\"}`,\n dependencies,\n cwd\n )\n }\n }\n\n if (devDependencies.length) {\n try {\n await execa(\"npm\", [\"install\", ...flagArgs, \"-D\", ...devDependencies], {\n cwd,\n })\n } catch {\n await installIndividually(\n \"npm\",\n `install${flagArgs.length ? ` ${flagArgs.join(\" \")}` : \"\"} -D`,\n devDependencies,\n cwd\n )\n }\n }\n}\n\nasync function installIndividually(\n packageManager: string,\n command: string,\n packages: string[],\n cwd: string\n) {\n const failed: string[] = []\n\n for (const pkg of packages) {\n try {\n await execa(packageManager, [...command.split(\" \"), pkg], { cwd })\n } catch {\n failed.push(pkg)\n }\n }\n\n if (failed.length > 0) {\n logger.warn(\n `\\nFailed to install: ${failed.join(\n \", \"\n )}. You may need to install them manually.\\n`\n )\n }\n}\n\nasync function installWithDeno(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies?.length) {\n await execa(\"deno\", [\"add\", ...dependencies.map((dep) => `npm:${dep}`)], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(\n \"deno\",\n [\"add\", \"-D\", ...devDependencies.map((dep) => `npm:${dep}`)],\n { cwd }\n )\n }\n}\n\nasync function installWithExpo(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", ...dependencies], { cwd })\n }\n\n if (devDependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", \"-- -D\", ...devDependencies], {\n cwd,\n })\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemEnvVarsSchema } from \"@/src/schema\"\nimport {\n findExistingEnvFile,\n getNewEnvKeys,\n mergeEnvContent,\n} from \"@/src/utils/env-helpers\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { z } from \"zod\"\n\nexport async function updateEnvVars(\n envVars: z.infer<typeof registryItemEnvVarsSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!envVars || Object.keys(envVars).length === 0) {\n return {\n envVarsAdded: [],\n envFileUpdated: null,\n envFileCreated: null,\n }\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const envSpinner = spinner(`Adding environment variables.`, {\n silent: options.silent,\n })?.start()\n\n const projectRoot = config.resolvedPaths.cwd\n\n // Find existing env file or use .env.local as default.\n let envFilePath = path.join(projectRoot, \".env.local\")\n const existingEnvFile = findExistingEnvFile(projectRoot)\n\n if (existingEnvFile) {\n envFilePath = existingEnvFile\n }\n\n const envFileExists = existsSync(envFilePath)\n const envFileName = path.basename(envFilePath)\n\n // Convert envVars object to env file format\n const newEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")\n\n let envVarsAdded: string[] = []\n let envFileUpdated: string | null = null\n let envFileCreated: string | null = null\n\n if (envFileExists) {\n const existingContent = await fs.readFile(envFilePath, \"utf-8\")\n const mergedContent = mergeEnvContent(existingContent, newEnvContent)\n envVarsAdded = getNewEnvKeys(existingContent, newEnvContent)\n\n if (envVarsAdded.length > 0) {\n await fs.writeFile(envFilePath, mergedContent, \"utf-8\")\n envFileUpdated = path.relative(projectRoot, envFilePath)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n } else {\n envSpinner?.stop()\n }\n } else {\n // Create new env file\n await fs.writeFile(envFilePath, newEnvContent + \"\\n\", \"utf-8\")\n envFileCreated = path.relative(projectRoot, envFilePath)\n envVarsAdded = Object.keys(envVars)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n }\n\n if (!options.silent && envVarsAdded.length > 0) {\n logger.break()\n }\n\n return {\n envVarsAdded,\n envFileUpdated,\n envFileCreated,\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { RegistryFontItem, registryResolvedItemsTreeSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport {\n CallExpression,\n Project,\n ScriptKind,\n SyntaxKind,\n VariableDeclarationKind,\n} from \"ts-morph\"\nimport z from \"zod\"\n\nexport async function massageTreeForFonts(\n tree: z.infer<typeof registryResolvedItemsTreeSchema>,\n config: Config\n) {\n if (!tree.fonts?.length) {\n return tree\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return tree\n }\n\n tree.cssVars ??= {}\n tree.cssVars.font ??= { light: {} }\n tree.cssVars.font.light ??= {}\n\n if (\n projectInfo.framework.name === \"next-app\" ||\n projectInfo.framework.name === \"next-pages\"\n ) {\n for (const font of tree.fonts) {\n tree.cssVars.font.light[font.role] = `var(${font.font.variable})`\n }\n return tree\n }\n\n // Other frameworks will use fontsource for now.\n const addedImports = new Set<string>()\n for (const font of tree.fonts) {\n const fontName = font.name\n .replace(\"font-\", \"\")\n .replace(/-display|-body|-numeric/, \"\")\n const fontSourceDependency = `@fontsource-variable/${fontName}`\n\n if (!addedImports.has(fontSourceDependency)) {\n addedImports.add(fontSourceDependency)\n tree.dependencies ??= []\n tree.dependencies.push(fontSourceDependency)\n tree.css ??= {}\n tree.css[`@import \"${fontSourceDependency}\"`] = {}\n }\n\n tree.cssVars.font.light[font.role] = font.font.family\n }\n\n return tree\n}\n\nexport async function updateFonts(\n fonts: RegistryFontItem[] | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!fonts?.length) {\n return\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return\n }\n\n if (\n projectInfo.framework.name !== \"next-app\" &&\n projectInfo.framework.name !== \"next-pages\"\n ) {\n return\n }\n\n const fontsSpinner = spinner(\"Updating fonts.\", {\n silent: options.silent,\n })?.start()\n\n try {\n await updateNextFonts(fonts, config, projectInfo)\n fontsSpinner?.succeed(\"Updating fonts.\")\n } catch (error) {\n fontsSpinner?.fail(`Failed to update fonts.`)\n throw error\n }\n}\n\nasync function updateNextFonts(\n fonts: RegistryFontItem[],\n config: Config,\n projectInfo: ProjectInfo\n) {\n // Find layout file.\n const layoutPath = await findLayoutFile(config, projectInfo)\n\n if (!layoutPath) {\n return\n }\n\n const layoutContent = await fs.readFile(layoutPath, \"utf-8\")\n const updatedContent = await transformLayoutFonts(\n layoutContent,\n fonts,\n config\n )\n\n if (updatedContent !== layoutContent) {\n await fs.writeFile(layoutPath, updatedContent, \"utf-8\")\n }\n}\n\nasync function findLayoutFile(\n config: Config,\n projectInfo: ProjectInfo\n): Promise<string | null> {\n const cwd = config.resolvedPaths.cwd\n const isSrcDir = projectInfo.isSrcDir\n const isTsx = projectInfo.isTsx\n const ext = isTsx ? \"tsx\" : \"jsx\"\n\n const possiblePaths = isSrcDir\n ? [`src/app/layout.${ext}`, `app/layout.${ext}`]\n : [`app/layout.${ext}`]\n\n for (const relativePath of possiblePaths) {\n const fullPath = path.join(cwd, relativePath)\n if (existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nexport async function transformLayoutFonts(\n input: string,\n fonts: RegistryFontItem[],\n _config: Config\n) {\n const project = new Project({\n compilerOptions: {},\n })\n\n const sourceFile = project.createSourceFile(\"layout.tsx\", input, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Only process Google fonts for now.\n const googleFonts = fonts.filter((f) => f.font.provider === \"google\")\n\n // Track which font variables we're adding.\n const fontVariableNames: string[] = []\n\n // Process Google fonts.\n for (const font of googleFonts) {\n const importName = font.font.import\n if (!importName) {\n continue\n }\n\n // Generate a variable name from the CSS variable (e.g., \"--font-display\" -> \"fontDisplay\").\n // This ensures unique names even when the same physical font serves multiple roles.\n const varName = font.font.variable\n .replace(/^--/, \"\")\n .replace(/-([a-z])/g, (_: string, c: string) => c.toUpperCase())\n\n // Check if import already exists.\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier === \"next/font/google\"\n })\n\n // Build font options.\n const fontOptions = buildFontOptions(font)\n\n if (existingImport) {\n // Check if this specific font is already imported.\n const namedImports = existingImport.getNamedImports()\n const hasImport = namedImports.some((imp) => imp.getName() === importName)\n\n if (!hasImport) {\n existingImport.addNamedImport(importName)\n }\n } else {\n // Add new import.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"next/font/google\",\n namedImports: [importName],\n })\n }\n\n // Check if variable declaration already exists with same variable CSS property.\n const existingVarDecl = findFontVariableDeclaration(\n sourceFile,\n font.font.variable\n )\n\n if (existingVarDecl) {\n // Replace the initializer of the existing declaration.\n existingVarDecl.setInitializer(`${importName}(${fontOptions})`)\n // Update the variable name if different.\n if (existingVarDecl.getName() !== varName) {\n existingVarDecl.rename(varName)\n }\n } else {\n // Find the last import or existing font declaration to insert after.\n const insertPosition = findInsertPosition(sourceFile)\n\n // Add variable declaration.\n const statement = sourceFile.insertVariableStatement(insertPosition, {\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: varName,\n initializer: `${importName}(${fontOptions})`,\n },\n ],\n })\n\n // Add a blank line after the declaration.\n statement.appendWhitespace(\"\\n\")\n }\n\n fontVariableNames.push(varName)\n }\n\n // Collect the CSS variables we're managing.\n const managedVariables = new Set(googleFonts.map((f) => f.font.variable))\n\n // Remove old font variable declarations that aren't part of our new fonts.\n removeOldFontDeclarations(sourceFile, managedVariables)\n\n // Clean up unused next/font/google imports.\n cleanupUnusedFontImports(sourceFile)\n\n // Update html className to include font variables.\n if (fontVariableNames.length > 0) {\n updateHtmlClassName(sourceFile, fontVariableNames)\n }\n\n // Clean up body className to remove references to removed font variables.\n cleanupBodyClassName(sourceFile, fontVariableNames)\n\n return sourceFile.getFullText()\n}\n\nfunction buildFontOptions(font: RegistryFontItem) {\n const options: Record<string, unknown> = {}\n\n if (font.font.subsets?.length) {\n options.subsets = font.font.subsets\n }\n\n if (font.font.weight?.length) {\n options.weight = font.font.weight\n }\n\n options.variable = font.font.variable\n\n return JSON.stringify(options)\n .replace(/\"([^\"]+)\":/g, \"$1:\") // Remove quotes from keys.\n .replace(/\"/g, \"'\") // Use single quotes for strings.\n}\n\nfunction findFontVariableDeclaration(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n variable: string\n) {\n // Find variable declarations that call a font function with matching variable.\n const variableStatements = sourceFile.getVariableStatements()\n\n for (const statement of variableStatements) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n\n // Check if it's a call expression.\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n\n // Get the arguments.\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n // Check if any argument contains our variable.\n const argText = args[0].getText()\n if (argText.includes(`variable:`) && argText.includes(variable)) {\n return declaration\n }\n }\n }\n\n return null\n}\n\nfunction findInsertPosition(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n const imports = sourceFile.getImportDeclarations()\n if (imports.length > 0) {\n const lastImport = imports[imports.length - 1]\n return lastImport.getChildIndex() + 1\n }\n return 0\n}\n\nfunction updateHtmlClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find the <html> JSX element.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"html\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) {\n // Add className attribute with font variables.\n const variableExpressions = fontVariableNames\n .map((name) => `${name}.variable`)\n .join(\", \")\n\n if (fontVariableNames.length === 1) {\n element.addAttribute({\n name: \"className\",\n initializer: `{${variableExpressions}}`,\n })\n } else {\n // Need to use cn() for multiple fonts.\n ensureCnImport(sourceFile)\n element.addAttribute({\n name: \"className\",\n initializer: `{cn(${variableExpressions})}`,\n })\n }\n return\n }\n\n // Handle existing className.\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) {\n return\n }\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n\n if (!initializer) return\n\n // Build the new variable expressions.\n const newVarExpressions = fontVariableNames.map(\n (name) => `${name}.variable`\n )\n\n if (initializer.getKind() === SyntaxKind.StringLiteral) {\n // className=\"some-class\" -> className={cn(\"some-class\", font.variable)}\n const currentValue = initializer.getText().slice(1, -1) // Remove quotes.\n ensureCnImport(sourceFile)\n jsxAttr.setInitializer(\n `{cn(\"${currentValue}\", ${newVarExpressions.join(\", \")})}`\n )\n } else if (initializer.getKind() === SyntaxKind.JsxExpression) {\n // className={...} - need to analyze the expression.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) return\n\n const exprText = expr.getText()\n\n // Check if it's already using cn().\n if (exprText.startsWith(\"cn(\")) {\n // Check if cn() already has exactly our font variables.\n const hasAllFontVars = newVarExpressions.every((v) =>\n exprText.includes(v)\n )\n if (hasAllFontVars) {\n // Already has our font variables, skip.\n continue\n }\n\n // Remove existing font variables and add new ones.\n const cleanedExpr = removeFontVariablesFromCn(exprText)\n const newExpr = insertFontVariablesIntoCn(\n cleanedExpr,\n newVarExpressions\n )\n jsxExpr.replaceWithText(`{${newExpr}}`)\n } else if (/^\\w+\\.variable$/.test(exprText)) {\n // Single font variable like {inter.variable}.\n // Check if it's already one of our font variables.\n if (newVarExpressions.includes(exprText)) {\n // Already using our font variable, skip.\n continue\n }\n // Replace with our font variables.\n if (newVarExpressions.length === 1) {\n jsxExpr.replaceWithText(`{${newVarExpressions[0]}}`)\n } else {\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(`{cn(${newVarExpressions.join(\", \")})}`)\n }\n } else if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal - parse and convert to cn() arguments.\n // Filter out old font variable references (e.g. geistSans.variable)\n // since we're replacing them with our new font variables.\n const cnArgs = parseTemplateLiteralToCnArgs(exprText).filter(\n (arg) => !/^\\w+\\.variable$/.test(arg)\n )\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${[...cnArgs, ...newVarExpressions].join(\", \")})}`\n )\n } else {\n // Some other expression (variable, etc.), wrap with cn().\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${exprText}, ${newVarExpressions.join(\", \")})}`\n )\n }\n }\n }\n}\n\nfunction ensureCnImport(sourceFile: ReturnType<Project[\"createSourceFile\"]>) {\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const namedImports = decl.getNamedImports()\n return namedImports.some((imp) => imp.getName() === \"cn\")\n })\n\n if (!existingImport) {\n // Try to find the lib/utils import pattern.\n const utilsImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier.includes(\"/lib/utils\")\n })\n\n if (utilsImport) {\n const namedImports = utilsImport.getNamedImports()\n if (!namedImports.some((imp) => imp.getName() === \"cn\")) {\n utilsImport.addNamedImport(\"cn\")\n }\n } else {\n // Add a new import for cn.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@/lib/utils\",\n namedImports: [\"cn\"],\n })\n }\n }\n}\n\nfunction parseTemplateLiteralToCnArgs(templateLiteral: string) {\n // Parse template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // into cn() arguments with static strings first, then variables:\n // [\"antialiased\", geistSans.variable, geistMono.variable]\n const staticArgs: string[] = []\n const variableArgs: string[] = []\n\n // Remove the backticks.\n const content = templateLiteral.slice(1, -1)\n\n // Split by ${...} expressions and static parts.\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n\n for (const part of parts) {\n if (!part) continue\n\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Expression like ${geistSans.variable}.\n const expr = part.slice(2, -1).trim()\n if (expr) {\n variableArgs.push(expr)\n }\n } else {\n // Static string - split by whitespace and add non-empty parts as quoted strings.\n const staticParts = part.trim().split(/\\s+/).filter(Boolean)\n for (const staticPart of staticParts) {\n staticArgs.push(`\"${staticPart}\"`)\n }\n }\n }\n\n // Return static strings first, then variables.\n return [...staticArgs, ...variableArgs]\n}\n\nfunction removeOldFontDeclarations(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n managedVariables: Set<string>\n) {\n // Find all variable statements that call a next/font/google function\n // with a `variable` option NOT in our managed set, and remove them.\n const statementsToRemove: ReturnType<\n ReturnType<Project[\"createSourceFile\"]>[\"getVariableStatements\"]\n > = []\n\n for (const statement of sourceFile.getVariableStatements()) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n const argText = args[0].getText()\n if (!argText.includes(\"variable:\")) continue\n\n // Extract the CSS variable value from the argument.\n const variableMatch = argText.match(/variable:\\s*['\"]([^'\"]+)['\"]/)\n if (!variableMatch) continue\n\n const cssVariable = variableMatch[1]\n if (!managedVariables.has(cssVariable)) {\n statementsToRemove.push(statement)\n }\n }\n }\n\n for (const statement of statementsToRemove) {\n statement.remove()\n }\n}\n\nfunction cleanupUnusedFontImports(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n // Find next/font/google imports and remove named imports that are no longer\n // referenced in the file (outside of import declarations).\n const fontImport = sourceFile.getImportDeclaration((decl) => {\n return decl.getModuleSpecifierValue() === \"next/font/google\"\n })\n\n if (!fontImport) return\n\n const namedImports = fontImport.getNamedImports()\n const fullText = sourceFile.getFullText()\n\n for (const namedImport of namedImports) {\n const name = namedImport.getName()\n // Check if the name is used anywhere outside of import declarations.\n // Simple approach: count occurrences in the file text minus import line.\n const importLine = fontImport.getText()\n const textWithoutImport = fullText.replace(importLine, \"\")\n\n // Check for usage as a function call (e.g., `Geist(`) or as a type reference.\n const usagePattern = new RegExp(`\\\\b${name}\\\\b`)\n if (!usagePattern.test(textWithoutImport)) {\n namedImport.remove()\n }\n }\n\n // If no named imports left, remove the entire import declaration.\n if (fontImport.getNamedImports().length === 0) {\n fontImport.remove()\n }\n}\n\nfunction cleanupBodyClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find <body> element and clean up its className.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"body\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) continue\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) continue\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n if (!initializer) continue\n\n if (initializer.getKind() === SyntaxKind.JsxExpression) {\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) continue\n\n const exprText = expr.getText()\n\n if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // Extract static class names, discard old font variable references.\n const content = exprText.slice(1, -1)\n const staticClasses: string[] = []\n\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n for (const part of parts) {\n if (!part) continue\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Skip font variable expressions — they're being replaced.\n continue\n }\n const trimmed = part.trim().split(/\\s+/).filter(Boolean)\n staticClasses.push(...trimmed)\n }\n\n if (staticClasses.length > 0) {\n jsxAttr.setInitializer(`\"${staticClasses.join(\" \")}\"`)\n } else {\n jsxAttr.remove()\n }\n } else if (exprText.startsWith(\"cn(\")) {\n // Remove any font variable references from cn() call.\n let cleaned = exprText\n // Remove any \"word.variable\" patterns.\n cleaned = cleaned.replace(/,?\\s*\\w+\\.variable/g, \"\")\n cleaned = cleaned.replace(/cn\\(\\s*,/, \"cn(\")\n // If cn() is effectively empty or has only one arg, simplify.\n const argsMatch = cleaned.match(/^cn\\((.+)\\)$/)\n if (argsMatch) {\n const args = argsMatch[1]\n .split(\",\")\n .map((a) => a.trim())\n .filter(Boolean)\n if (args.length === 0) {\n jsxAttr.remove()\n } else if (args.length === 1 && args[0].startsWith('\"')) {\n // Single string arg — just use it directly.\n jsxAttr.setInitializer(args[0])\n } else {\n jsxExpr.replaceWithText(`{${cleaned}}`)\n }\n }\n }\n }\n }\n}\n\nfunction removeFontVariablesFromCn(cnExpr: string) {\n // Remove patterns like \"fontName.variable\" from cn() call.\n // This is a simple regex-based approach.\n return cnExpr.replace(/,?\\s*\\w+\\.variable/g, \"\").replace(/cn\\(\\s*,/, \"cn(\")\n}\n\nfunction insertFontVariablesIntoCn(cnExpr: string, fontVars: string[]) {\n // Insert font variables at the end of cn() arguments.\n const varsStr = fontVars.join(\", \")\n return cnExpr.replace(/\\)$/, `, ${varsStr})`)\n}\n","import { registryItemTailwindSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { z } from \"zod\"\n\nexport async function updateTailwindConfig(\n tailwindConfig:\n | z.infer<typeof registryItemTailwindSchema>[\"config\"]\n | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n // v4 does not use a tailwind config file. This is a no-op.\n return\n}\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { resolveRegistryTree } from \"@/src/registry/resolver\"\nimport {\n configSchema,\n registryItemFileSchema,\n registryItemSchema,\n workspaceConfigSchema,\n} from \"@/src/schema\"\nimport {\n findCommonRoot,\n findPackageRoot,\n getWorkspaceConfig,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { isSafeTarget } from \"@/src/utils/is-safe-target\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateCss } from \"@/src/utils/updaters/update-css\"\nimport { updateCssVars } from \"@/src/utils/updaters/update-css-vars\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { updateEnvVars } from \"@/src/utils/updaters/update-env-vars\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport {\n massageTreeForFonts,\n updateFonts,\n} from \"@/src/utils/updaters/update-fonts\"\nimport { updateTailwindConfig } from \"@/src/utils/updaters/update-tailwind-config\"\nimport { z } from \"zod\"\n\nexport async function addComponents(\n components: string[],\n config: Config,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n registryHeaders?: Record<string, Record<string, string>>\n path?: string\n }\n) {\n options = {\n overwrite: false,\n silent: false,\n isNewProject: false,\n baseStyle: true,\n ...options,\n }\n\n const workspaceConfig = await getWorkspaceConfig(config)\n if (\n workspaceConfig &&\n workspaceConfig.ui &&\n workspaceConfig.ui.resolvedPaths.cwd !== config.resolvedPaths.cwd\n ) {\n return await addWorkspaceComponents(components, config, workspaceConfig, {\n ...options,\n isRemote:\n components?.length === 1 && !!components[0].match(/^https?:\\/\\//),\n })\n }\n\n return await addProjectComponents(components, config, options)\n}\n\nasync function addProjectComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n let tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n tree = await massageTreeForFonts(tree, config)\n\n await updateTailwindConfig(tree.tailwind?.config, config, {\n silent: options.silent,\n })\n\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, config, {\n cleanupDefaultNextStyles: options.isNewProject,\n silent: options.silent,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n initIndex: options.baseStyle,\n })\n\n // Add CSS updater\n await updateCss(tree.css, config, {\n silent: options.silent,\n })\n\n await updateEnvVars(tree.envVars, config, {\n silent: options.silent,\n })\n\n // Update fonts and files before installing dependencies so that\n // file-system changes are applied even if npm install fails.\n await updateFonts(tree.fonts, config, {\n silent: options.silent,\n })\n\n await updateFiles(tree.files, config, {\n overwrite: options.overwrite,\n silent: options.silent,\n path: options.path,\n })\n\n await updateDependencies(tree.dependencies, tree.devDependencies, config, {\n silent: options.silent,\n })\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function addWorkspaceComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n workspaceConfig: z.infer<typeof workspaceConfigSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n isRemote?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n const tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n const filesCreated: string[] = []\n const filesUpdated: string[] = []\n const filesSkipped: string[] = []\n\n const rootSpinner = spinner(`Installing components.`)?.start()\n\n // Process global updates (tailwind, css vars, dependencies) first for the main target.\n // These should typically go to the UI package in a workspace.\n const mainTargetConfig = workspaceConfig.ui\n const workspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n mainTargetConfig.resolvedPaths.ui\n )\n\n // 1. Update tailwind config.\n if (tree.tailwind?.config) {\n await updateTailwindConfig(tree.tailwind?.config, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(\n workspaceRoot,\n mainTargetConfig.resolvedPaths.tailwindConfig\n )\n )\n }\n\n // 2. Update css vars.\n if (tree.cssVars) {\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, mainTargetConfig, {\n silent: true,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 3. Update CSS\n if (tree.css) {\n await updateCss(tree.css, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 4. Update environment variables\n if (tree.envVars) {\n await updateEnvVars(tree.envVars, mainTargetConfig, {\n silent: true,\n })\n }\n\n // 5. Update fonts.\n await updateFonts(tree.fonts, mainTargetConfig, {\n silent: true,\n })\n\n // 6. Update dependencies.\n await updateDependencies(\n tree.dependencies,\n tree.devDependencies,\n mainTargetConfig,\n {\n silent: true,\n }\n )\n\n // 7. Group files by their type to determine target config and update files.\n const filesByType = new Map<string, typeof tree.files>()\n\n for (const file of tree.files ?? []) {\n const type = file.type || \"registry:ui\"\n if (!filesByType.has(type)) {\n filesByType.set(type, [])\n }\n filesByType.get(type)!.push(file)\n }\n\n // Process each type of component with its appropriate target config.\n for (const type of Array.from(filesByType.keys())) {\n const typeFiles = filesByType.get(type)!\n\n let targetConfig = type === \"registry:ui\" ? workspaceConfig.ui : config\n\n const typeWorkspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n targetConfig.resolvedPaths.ui || targetConfig.resolvedPaths.cwd\n )\n const packageRoot =\n (await findPackageRoot(\n typeWorkspaceRoot,\n targetConfig.resolvedPaths.cwd\n )) ?? targetConfig.resolvedPaths.cwd\n\n // Update files for this type.\n const files = await updateFiles(typeFiles, targetConfig, {\n overwrite: options.overwrite,\n silent: true,\n rootSpinner,\n isRemote: options.isRemote,\n isWorkspace: true,\n path: options.path,\n })\n\n filesCreated.push(\n ...files.filesCreated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesUpdated.push(\n ...files.filesUpdated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesSkipped.push(\n ...files.filesSkipped.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n }\n\n rootSpinner?.succeed()\n\n // Sort files.\n filesCreated.sort()\n filesUpdated.sort()\n filesSkipped.sort()\n\n const hasUpdatedFiles = filesCreated.length || filesUpdated.length\n if (!hasUpdatedFiles && !filesSkipped.length) {\n spinner(`No files updated.`, {\n silent: options.silent,\n })?.info()\n }\n\n if (filesCreated.length) {\n spinner(\n `Created ${filesCreated.length} ${\n filesCreated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.succeed()\n for (const file of filesCreated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesUpdated.length) {\n spinner(\n `Updated ${filesUpdated.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesUpdated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesSkipped.length) {\n spinner(\n `Skipped ${filesSkipped.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }: (use --overwrite to overwrite)`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesSkipped) {\n logger.log(` - ${file}`)\n }\n }\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function shouldOverwriteCssVars(\n components: z.infer<typeof registryItemSchema>[\"name\"][],\n config: z.infer<typeof configSchema>\n) {\n const result = await getRegistryItems(components, { config })\n const payload = z.array(registryItemSchema).parse(result)\n\n return payload.some(\n (component) =>\n component.type === \"registry:theme\" ||\n component.type === \"registry:font-variant\" ||\n component.type === \"registry:base\"\n )\n}\n\nfunction validateFilesTarget(\n files: z.infer<typeof registryItemFileSchema>[],\n cwd: string\n) {\n for (const file of files) {\n if (!file?.target) {\n continue\n }\n\n if (!isSafeTarget(file.target, cwd)) {\n throw new Error(\n `We found an unsafe file path \"${file.target} in the registry item. Installation aborted.`\n )\n }\n }\n}\n","import os from \"os\"\nimport path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport { fetchRegistry } from \"@/src/registry/fetcher\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport fs from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nconst GITHUB_TEMPLATE_URL =\n \"https://codeload.github.com/createui-ui/ui/tar.gz/main\"\n\nexport const TEMPLATES = {\n next: \"next\",\n \"next-monorepo\": \"next-monorepo\",\n vite: \"vite\",\n start: \"start\",\n} as const\n\nexport async function createProject(\n options: Pick<\n z.infer<typeof initOptionsSchema>,\n \"cwd\" | \"name\" | \"force\" | \"srcDir\" | \"components\" | \"template\"\n >\n) {\n options = {\n srcDir: false,\n ...options,\n }\n\n let template: keyof typeof TEMPLATES =\n options.template && TEMPLATES[options.template as keyof typeof TEMPLATES]\n ? (options.template as keyof typeof TEMPLATES)\n : \"next\"\n let projectName: string =\n options.name ??\n (template === TEMPLATES.next ||\n template === TEMPLATES.vite ||\n template === TEMPLATES.start\n ? \"my-app\"\n : \"my-monorepo\")\n let nextVersion = \"latest\"\n\n const isRemoteComponent =\n options.components?.length === 1 &&\n !!options.components[0].match(/^https?:\\/\\//)\n\n if (options.components && isRemoteComponent) {\n try {\n const [result] = await fetchRegistry(options.components)\n const { meta } = z\n .object({\n meta: z.object({\n nextVersion: z.string(),\n }),\n })\n .parse(result)\n nextVersion = meta.nextVersion\n\n // Force template to next for remote components.\n template = TEMPLATES.next\n } catch (error) {\n logger.break()\n handleError(error)\n }\n }\n\n if (!options.force) {\n const { type, name } = await prompts([\n {\n type: options.template || isRemoteComponent ? null : \"select\",\n name: \"type\",\n message: `The path ${highlighter.info(\n options.cwd\n )} does not contain a package.json file.\\n Would you like to start a new project?`,\n choices: [\n { title: \"Next.js\", value: \"next\" },\n { title: \"Next.js (Monorepo)\", value: \"next-monorepo\" },\n { title: \"Vite\", value: \"vite\" },\n { title: \"TanStack Start\", value: \"start\" },\n ],\n initial: 0,\n },\n {\n type: options.name ? null : \"text\",\n name: \"name\",\n message: \"What is your project named?\",\n initial: projectName,\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n },\n ])\n\n template = type ?? template\n projectName = name ?? projectName\n }\n\n const packageManager = await getPackageManager(options.cwd, {\n withFallback: true,\n })\n\n const projectPath = `${options.cwd}/${projectName}`\n\n // Check if path is writable.\n try {\n await fs.access(options.cwd, fs.constants.W_OK)\n } catch (error) {\n logger.break()\n logger.error(`The path ${highlighter.info(options.cwd)} is not writable.`)\n logger.error(\n `It is likely you do not have write permissions for this folder or the path ${highlighter.info(\n options.cwd\n )} does not exist.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (fs.existsSync(path.resolve(options.cwd, projectName, \"package.json\"))) {\n logger.break()\n logger.error(\n `A project with the name ${highlighter.info(projectName)} already exists.`\n )\n logger.error(`Please choose a different name and try again.`)\n logger.break()\n process.exit(1)\n }\n\n if (template === TEMPLATES.next) {\n await createNextProject(projectPath, {\n version: nextVersion,\n cwd: options.cwd,\n packageManager,\n srcDir: !!options.srcDir,\n })\n }\n\n if (template === TEMPLATES[\"next-monorepo\"]) {\n await createMonorepoProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.vite) {\n await createViteProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.start) {\n await createStartProject(projectPath, {\n packageManager,\n })\n }\n\n return {\n projectPath,\n projectName,\n template,\n }\n}\n\nasync function createNextProject(\n projectPath: string,\n options: {\n version: string\n cwd: string\n packageManager: string\n srcDir: boolean\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js project. This may take a few minutes.`\n ).start()\n\n // Note: pnpm fails here. Fallback to npx with --use-PACKAGE-MANAGER.\n const args = [\n \"--tailwind\",\n \"--eslint\",\n \"--typescript\",\n \"--app\",\n options.srcDir ? \"--src-dir\" : \"--no-src-dir\",\n \"--no-import-alias\",\n `--use-${options.packageManager}`,\n ]\n\n if (\n options.version.startsWith(\"15\") ||\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--turbopack\")\n }\n\n if (\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--no-react-compiler\")\n }\n\n try {\n await execa(\n \"npx\",\n [`create-next-app@${options.version}`, projectPath, \"--silent\", ...args],\n {\n cwd: options.cwd,\n }\n )\n } catch (error) {\n logger.break()\n logger.error(\n `Something went wrong creating a new Next.js project. Please try again.`\n )\n process.exit(1)\n }\n\n createSpinner?.succeed(\"Creating a new Next.js project.\")\n}\n\nasync function createMonorepoProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js monorepo. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/monorepo-next\",\n ])\n const extractedPath = path.resolve(templatePath, \"monorepo-next\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n // await execa(\"cd\", [cwd])\n\n // Write project name to the package.json\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n const cwd = process.cwd()\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Next.js monorepo.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Next.js monorepo.\")\n handleError(error)\n }\n}\n\nasync function createViteProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Vite project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/vite-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"vite-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Vite project.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Vite project.\")\n handleError(error)\n }\n}\n\nasync function createStartProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new TanStack Start project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=2\",\n \"ui-main/templates/start-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"start-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new TanStack Start project.\")\n } catch (error) {\n createSpinner?.fail(\n \"Something went wrong creating a new TanStack Start project.\"\n )\n handleError(error)\n }\n}\n","import { existsSync } from \"fs\"\nimport { join } from \"path\"\nimport { logger } from \"@/src/utils/logger\"\n\nexport async function loadEnvFiles(cwd: string = process.cwd()): Promise<void> {\n try {\n const { config } = await import(\"@dotenvx/dotenvx\")\n const envFiles = [\n \".env.local\",\n \".env.development.local\",\n \".env.development\",\n \".env\",\n ]\n\n for (const envFile of envFiles) {\n const envPath = join(cwd, envFile)\n if (existsSync(envPath)) {\n config({\n path: envPath,\n overload: false,\n quiet: true,\n })\n }\n }\n } catch (error) {\n logger.warn(\"Failed to load env files:\", error)\n }\n}\n","import fsExtra from \"fs-extra\"\n\nexport const FILE_BACKUP_SUFFIX = \".bak\"\n\nexport function createFileBackup(filePath: string): string | null {\n if (!fsExtra.existsSync(filePath)) {\n return null\n }\n\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n try {\n fsExtra.renameSync(filePath, backupPath)\n return backupPath\n } catch (error) {\n console.error(`Failed to create backup of ${filePath}: ${error}`)\n return null\n }\n}\n\nexport function restoreFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.renameSync(backupPath, filePath)\n return true\n } catch (error) {\n console.error(\n `Warning: Could not restore backup file ${backupPath}: ${error}`\n )\n return false\n }\n}\n\nexport function deleteFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.unlinkSync(backupPath)\n return true\n } catch (error) {\n // Best effort - don't log as this is just cleanup\n return false\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { preFlightInit } from \"@/src/preflights/preflight-init\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport {\n DEFAULT_FONT_VARIANT,\n DEFAULT_NEUTRAL_THEME,\n FONT_VARIANTS,\n FONT_VARIANT_NAMES,\n NEUTRAL_THEMES,\n NEUTRAL_THEME_NAMES,\n THEMES,\n} from \"@/src/registry/constants\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { TEMPLATES, createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport {\n FILE_BACKUP_SUFFIX,\n createFileBackup,\n deleteFileBackup,\n restoreFileBackup,\n} from \"@/src/utils/file-helper\"\nimport {\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_TAILWIND_CSS,\n DEFAULT_UTILS,\n createConfig,\n getConfig,\n resolveConfigPaths,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { getProjectConfig, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nprocess.on(\"exit\", (code) => {\n const filePath = path.resolve(process.cwd(), \"components.json\")\n\n // Delete backup if successful.\n if (code === 0) {\n return deleteFileBackup(filePath)\n }\n\n // Restore backup if error.\n return restoreFileBackup(filePath)\n})\n\nexport const initOptionsSchema = z.object({\n cwd: z.string(),\n name: z.string().optional(),\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n defaults: z.boolean(),\n force: z.boolean(),\n silent: z.boolean(),\n isNewProject: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n template: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return TEMPLATES[val as keyof typeof TEMPLATES]\n }\n return true\n },\n {\n message:\n \"Invalid template. Please use 'next', 'vite', 'start' or 'next-monorepo'.\",\n }\n ),\n baseColor: z.string().optional(),\n theme: z.string().optional(),\n neutral: z.string().optional(),\n fontVariant: z.string().optional(),\n baseStyle: z.boolean(),\n // Config from registry:base item to merge into components.json.\n registryBaseConfig: rawConfigSchema.deepPartial().optional(),\n})\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize your project and install dependencies\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. (next, start, vite, next-monorepo)\"\n )\n .option(\n \"-b, --base-color <base-color>\",\n \"deprecated: use --theme instead.\",\n undefined\n )\n .option(\n \"--theme <theme>\",\n \"the primary color theme. (indigo, blue, lime, rose, etc.)\",\n undefined\n )\n .option(\n \"--neutral <neutral>\",\n `neutral color theme. (${NEUTRAL_THEME_NAMES.join(\", \")})`,\n undefined\n )\n .option(\n \"--font-variant <fontVariant>\",\n `font variant. (${FONT_VARIANT_NAMES.join(\", \")})`,\n undefined\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-d, --defaults,\", \"use default configuration.\", false)\n .option(\"-f, --force\", \"force overwrite of existing configuration.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .option(\"--no-base-style\", \"do not install the base createui style.\")\n .action(async (components, opts) => {\n try {\n // Apply defaults when --defaults flag is set.\n if (opts.defaults) {\n opts.template = opts.template || \"next\"\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n isNewProject: false,\n components,\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n // We need to check if we're initializing with a new style.\n // This will allow us to determine if we need to install the base style.\n // And if we should prompt the user for a base color.\n if (components.length > 0) {\n // We don't know the full config at this point.\n // So we'll use a shadow config to fetch the first item.\n let shadowConfig = configWithDefaults(\n createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n )\n\n // Check if there's a components.json file.\n // If so, we'll merge with our shadow config.\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const config = rawConfigSchema.partial().parse(existingConfig)\n const baseConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n shadowConfig = configWithDefaults({\n ...config,\n resolvedPaths: {\n ...baseConfig.resolvedPaths,\n cwd: options.cwd,\n },\n })\n\n // Since components.json might not be valid at this point.\n // Temporarily rename components.json to allow preflight to run.\n // We'll rename it back after preflight.\n createFileBackup(componentsJsonPath)\n }\n\n const [item] = await getRegistryItems([components[0]], {\n config: shadowConfig,\n })\n\n // Set options from registry:base.\n if (item?.type === \"registry:base\") {\n if (item.config) {\n // Merge config values into shadowConfig.\n shadowConfig = configWithDefaults(\n deepmerge(shadowConfig, item.config)\n )\n // Store config to be merged into components.json later.\n options.registryBaseConfig = item.config\n }\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n }\n\n await runInit(options)\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n\n // We need when running with custom cwd.\n deleteFileBackup(path.resolve(options.cwd, \"components.json\"))\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nexport async function runInit(\n options: z.infer<typeof initOptionsSchema> & {\n skipPreflight?: boolean\n }\n) {\n let projectInfo\n let newProjectTemplate\n if (!options.skipPreflight) {\n const preflight = await preFlightInit(options)\n if (preflight.errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject(options)\n if (!projectPath) {\n process.exit(1)\n }\n options.cwd = projectPath\n options.isNewProject = true\n newProjectTemplate = template\n // Re-get project info for the newly created project.\n projectInfo = await getProjectInfo(options.cwd)\n } else {\n projectInfo = preflight.projectInfo\n }\n } else {\n projectInfo = await getProjectInfo(options.cwd)\n }\n\n if (newProjectTemplate === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n return await getConfig(options.cwd)\n }\n\n const projectConfig = await getProjectConfig(options.cwd, projectInfo)\n\n let configResult = projectConfig\n ? await promptForMinimalConfig(projectConfig, options)\n : await promptForConfig(await getConfig(options.cwd))\n let config = configResult.config\n // Set theme from prompt if not already set via CLI flag.\n if (!options.theme && configResult.theme) {\n options.theme = configResult.theme\n }\n // Set neutral from prompt if not already set via CLI flag.\n if (!options.neutral && configResult.neutral) {\n options.neutral = configResult.neutral\n }\n // Set fontVariant from prompt if not already set via CLI flag.\n if (!options.fontVariant && configResult.fontVariant) {\n options.fontVariant = configResult.fontVariant\n }\n\n if (!options.yes) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `Write configuration to ${highlighter.info(\n \"components.json\"\n )}. Proceed?`,\n initial: true,\n })\n\n if (!proceed) {\n process.exit(0)\n }\n }\n\n // Prepare the list of components to be added.\n // Resolve theme: --theme flag, --base-color (legacy), or default \"neutral\".\n const themeName = options.theme ?? options.baseColor ?? \"indigo\"\n // Resolve neutral: --neutral flag or default.\n const neutralName = options.neutral ?? DEFAULT_NEUTRAL_THEME\n // Resolve font variant: --font-variant flag or default.\n const fontVariantName = options.fontVariant ?? DEFAULT_FONT_VARIANT\n const components = [\n // \"index\" is the default createui base style (registry:base).\n ...(options.baseStyle ? [\"index\"] : []),\n // Add the selected primary theme as a registry:theme item.\n ...(options.baseStyle ? [`theme-${themeName}`] : []),\n // Add the selected neutral theme as a registry:theme item.\n ...(options.baseStyle ? [`neutral-${neutralName}`] : []),\n // Add the selected font variant.\n ...(options.baseStyle ? [`font-variant-${fontVariantName}`] : []),\n ...(options.components ?? []),\n ]\n\n const componentSpinner = spinner(`Writing components.json.`).start()\n const targetPath = path.resolve(options.cwd, \"components.json\")\n const backupPath = `${targetPath}${FILE_BACKUP_SUFFIX}`\n\n const mergeConfig = (base: typeof config, override: object) =>\n deepmerge(base, override) as typeof config\n\n // Merge with backup config if it exists and not using --force.\n if (!options.force && fsExtra.existsSync(backupPath)) {\n const existingConfig = await fsExtra.readJson(backupPath)\n config = mergeConfig(existingConfig, config)\n }\n\n // Merge config from registry:base item.\n if (options.registryBaseConfig) {\n config = mergeConfig(config, options.registryBaseConfig)\n }\n\n // Write components.json.\n await fs.writeFile(targetPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\")\n componentSpinner.succeed()\n\n // Add components.\n const fullConfig = await resolveConfigPaths(options.cwd, config)\n await addComponents(components, fullConfig, {\n // Init will always overwrite files.\n overwrite: true,\n silent: options.silent,\n baseStyle: options.baseStyle,\n isNewProject:\n options.isNewProject || projectInfo?.framework.name === \"next-app\",\n })\n\n return fullConfig\n}\n\nasync function promptForConfig(defaultConfig: Config | null = null) {\n logger.info(\"\")\n const options = await prompts([\n {\n type: \"toggle\",\n name: \"typescript\",\n message: `Would you like to use ${highlighter.info(\n \"TypeScript\"\n )} (recommended)?`,\n initial: defaultConfig?.tsx ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"select\",\n name: \"theme\",\n message: `Which ${highlighter.info(\n \"primary\"\n )} color would you like to use?`,\n choices: THEMES.map((theme) => ({\n title: theme.label,\n value: theme.name,\n })),\n },\n {\n type: \"select\",\n name: \"neutral\",\n message: `Which ${highlighter.info(\n \"neutral\"\n )} color would you like to use?`,\n choices: NEUTRAL_THEMES.map((theme) => ({\n title:\n theme.name === DEFAULT_NEUTRAL_THEME\n ? `${theme.label} (Default)`\n : theme.label,\n value: theme.name,\n })),\n },\n {\n type: \"select\",\n name: \"fontVariant\",\n message: `Which ${highlighter.info(\n \"font variant\"\n )} would you like to use?`,\n choices: FONT_VARIANTS.map((variant) => ({\n title:\n variant.name === DEFAULT_FONT_VARIANT\n ? `${variant.label} (Default)`\n : variant.label,\n value: variant.name,\n })),\n },\n {\n type: \"text\",\n name: \"tailwindCss\",\n message: `Where is your ${highlighter.info(\"global CSS\")} file?`,\n initial: defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS,\n },\n {\n type: \"toggle\",\n name: \"tailwindCssVariables\",\n message: `Would you like to use ${highlighter.info(\n \"CSS variables\"\n )} for theming?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"text\",\n name: \"tailwindPrefix\",\n message: `Are you using a custom ${highlighter.info(\n \"tailwind prefix eg. tw-\"\n )}? (Leave blank if not)`,\n initial: \"\",\n },\n {\n type: \"text\",\n name: \"tailwindConfig\",\n message: `Where is your ${highlighter.info(\n \"tailwind.config.js\"\n )} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: \"text\",\n name: \"components\",\n message: `Configure the import alias for ${highlighter.info(\n \"components\"\n )}:`,\n initial: defaultConfig?.aliases[\"components\"] ?? DEFAULT_COMPONENTS,\n },\n {\n type: \"text\",\n name: \"utils\",\n message: `Configure the import alias for ${highlighter.info(\"utils\")}:`,\n initial: defaultConfig?.aliases[\"utils\"] ?? DEFAULT_UTILS,\n },\n {\n type: \"toggle\",\n name: \"rsc\",\n message: `Are you using ${highlighter.info(\"React Server Components\")}?`,\n initial: defaultConfig?.rsc ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n ])\n\n const themeName = (options.theme as string) ?? \"indigo\"\n const neutralName = (options.neutral as string) ?? DEFAULT_NEUTRAL_THEME\n const fontVariantName =\n (options.fontVariant as string) ?? DEFAULT_FONT_VARIANT\n\n return {\n config: rawConfigSchema.parse({\n $schema: \"https://dev.createui.co/schema.json\",\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: themeName,\n cssVariables: options.tailwindCssVariables,\n prefix: options.tailwindPrefix,\n },\n rsc: options.rsc,\n tsx: options.typescript,\n aliases: {\n utils: options.utils,\n components: options.components,\n // TODO: fix this.\n lib: options.components.replace(/\\/components$/, \"lib\"),\n hooks: options.components.replace(/\\/components$/, \"hooks\"),\n },\n }),\n theme: themeName,\n neutral: neutralName,\n fontVariant: fontVariantName,\n }\n}\n\nasync function promptForMinimalConfig(\n defaultConfig: Config,\n opts: z.infer<typeof initOptionsSchema>\n) {\n let cssVariables = defaultConfig.tailwind.cssVariables\n let iconLibrary = defaultConfig.iconLibrary ?? \"lucide\"\n\n if (!opts.defaults) {\n const options = await prompts([\n {\n type: opts.theme ? null : \"select\",\n name: \"theme\",\n message: `Which ${highlighter.info(\n \"primary\"\n )} color would you like to use?`,\n choices: THEMES.map((theme) => ({\n title: theme.label,\n value: theme.name,\n })),\n initial: 0,\n },\n {\n type: opts.neutral ? null : \"select\",\n name: \"neutral\",\n message: `Which ${highlighter.info(\n \"neutral\"\n )} color would you like to use?`,\n choices: NEUTRAL_THEMES.map((theme) => ({\n title:\n theme.name === DEFAULT_NEUTRAL_THEME\n ? `${theme.label} (Default)`\n : theme.label,\n value: theme.name,\n })),\n initial: 0,\n },\n {\n type: opts.fontVariant ? null : \"select\",\n name: \"fontVariant\",\n message: `Which ${highlighter.info(\n \"font variant\"\n )} would you like to use?`,\n choices: FONT_VARIANTS.map((variant) => ({\n title:\n variant.name === DEFAULT_FONT_VARIANT\n ? `${variant.label} (Default)`\n : variant.label,\n value: variant.name,\n })),\n initial: 0,\n },\n ])\n\n opts.theme = options.theme ?? opts.theme ?? \"indigo\"\n opts.neutral = options.neutral ?? opts.neutral ?? DEFAULT_NEUTRAL_THEME\n opts.fontVariant =\n options.fontVariant ?? opts.fontVariant ?? DEFAULT_FONT_VARIANT\n cssVariables = opts.cssVariables\n }\n\n const themeName = opts.theme ?? \"indigo\"\n const neutralName = opts.neutral ?? DEFAULT_NEUTRAL_THEME\n const fontVariantName = opts.fontVariant ?? DEFAULT_FONT_VARIANT\n\n return {\n config: rawConfigSchema.parse({\n $schema: defaultConfig?.$schema,\n tailwind: {\n ...defaultConfig?.tailwind,\n baseColor: themeName,\n cssVariables,\n },\n rsc: defaultConfig?.rsc,\n tsx: defaultConfig?.tsx,\n iconLibrary,\n aliases: defaultConfig?.aliases,\n }),\n theme: themeName,\n neutral: neutralName,\n fontVariant: fontVariantName,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightAdd(options: z.infer<typeof addOptionsSchema>) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can add components, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://dev.createui.co/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import fs from \"fs/promises\"\nimport path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { Config } from \"@/src/utils/get-config\"\n\nexport async function updateAppIndex(component: string, config: Config) {\n const indexPath = path.join(config.resolvedPaths.cwd, \"app/page.tsx\")\n\n if (!(await fs.stat(indexPath)).isFile()) {\n return\n }\n\n const [registryItem] = await getRegistryItems([component], { config })\n if (\n !registryItem?.meta?.importSpecifier ||\n !registryItem?.meta?.moduleSpecifier\n ) {\n return\n }\n\n // Overwrite the index file with the new import.\n const content = `import { ${registryItem?.meta?.importSpecifier} } from \"${registryItem.meta.moduleSpecifier}\"\\n\\nexport default function Page() {\\n return <${registryItem?.meta?.importSpecifier} />\\n}`\n await fs.writeFile(indexPath, content, \"utf8\")\n}\n","import path from \"path\"\nimport { runInit } from \"@/src/commands/init\"\nimport { preFlightAdd } from \"@/src/preflights/preflight-add\"\nimport { getRegistryItems, getcreateuiRegistryIndex } from \"@/src/registry/api\"\nimport { DEPRECATED_COMPONENTS } from \"@/src/registry/constants\"\nimport { registryItemTypeSchema } from \"@/src/registry/schema\"\nimport { isUniversalRegistryItem } from \"@/src/registry/utils\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { updateAppIndex } from \"@/src/utils/update-app-index\"\nimport { Command } from \"commander\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nexport const addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n silent: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n})\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n cwd: path.resolve(opts.cwd),\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n let initialConfig = await getConfig(options.cwd)\n if (!initialConfig) {\n initialConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n }\n\n let itemType: z.infer<typeof registryItemTypeSchema> | undefined\n let shouldInstallBaseStyle = true\n if (components.length > 0) {\n const [registryItem] = await getRegistryItems([components[0]], {\n config: initialConfig,\n })\n itemType = registryItem?.type\n shouldInstallBaseStyle = itemType !== \"registry:theme\"\n\n if (isUniversalRegistryItem(registryItem)) {\n await addComponents(components, initialConfig, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n return\n }\n\n if (!options.yes && itemType === \"registry:theme\") {\n logger.break()\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: highlighter.warn(\n `You are about to install a new ${itemType.replace(\n \"registry:\",\n \"\"\n )}. \\nExisting CSS variables and components will be overwritten. Continue?`\n ),\n })\n if (!confirm) {\n logger.break()\n logger.log(`Installation cancelled.`)\n logger.break()\n process.exit(1)\n }\n }\n }\n\n if (!options.components?.length) {\n options.components = await promptForRegistryComponents(options)\n }\n\n const deprecatedComponents = DEPRECATED_COMPONENTS.filter((component) =>\n options.components?.includes(component.name)\n )\n\n if (deprecatedComponents?.length) {\n logger.break()\n deprecatedComponents.forEach((component) => {\n logger.warn(highlighter.warn(component.message))\n })\n logger.break()\n process.exit(1)\n }\n\n let { errors, config } = await preFlightAdd(options)\n\n // No components.json file. Prompt the user to run init.\n let initHasRun = false\n if (errors[ERRORS.MISSING_CONFIG]) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `You need to create a ${highlighter.info(\n \"components.json\"\n )} file to add components. Proceed?`,\n initial: true,\n })\n\n if (!proceed) {\n logger.break()\n process.exit(1)\n }\n\n config = await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: false,\n silent: options.silent,\n isNewProject: false,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n components: options.components,\n })\n initHasRun = true\n }\n\n let shouldUpdateAppIndex = false\n\n if (errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject({\n cwd: options.cwd,\n force: options.overwrite,\n srcDir: options.srcDir,\n components: options.components,\n })\n if (!projectPath) {\n logger.break()\n process.exit(1)\n }\n options.cwd = projectPath\n\n if (template === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n config = await getConfig(options.cwd)\n } else {\n config = await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: true,\n silent: options.silent,\n isNewProject: true,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n components: options.components,\n })\n initHasRun = true\n\n shouldUpdateAppIndex =\n options.components?.length === 1 &&\n !!options.components[0].match(/\\/chat\\/b\\//)\n }\n }\n\n if (!config) {\n throw new Error(\n `Failed to read config at ${highlighter.info(options.cwd)}.`\n )\n }\n\n if (!initHasRun) {\n await addComponents(options.components, config, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n }\n\n // If we're adding a single component from a remote registry,\n // let's update the app/page.tsx file to import the component.\n if (shouldUpdateAppIndex) {\n await updateAppIndex(options.components[0], config)\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nasync function promptForRegistryComponents(\n options: z.infer<typeof addOptionsSchema>\n) {\n const registryIndex = await getcreateuiRegistryIndex()\n if (!registryIndex) {\n logger.break()\n handleError(new Error(\"Failed to fetch registry index.\"))\n return []\n }\n\n if (options.all) {\n return registryIndex\n .map((entry) => entry.name)\n .filter(\n (component) => !DEPRECATED_COMPONENTS.some((c) => c.name === component)\n )\n }\n\n if (options.components?.length) {\n return options.components\n }\n\n const { components } = await prompts({\n type: \"multiselect\",\n name: \"components\",\n message: \"Which components would you like to add?\",\n hint: \"Space to select. A to toggle all. Enter to submit.\",\n instructions: false,\n choices: registryIndex\n .filter(\n (entry) =>\n entry.type === \"registry:ui\" &&\n !DEPRECATED_COMPONENTS.some(\n (component) => component.name === entry.name\n )\n )\n .map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: options.all ? true : options.components?.includes(entry.name),\n })),\n })\n\n if (!components?.length) {\n logger.warn(\"No components selected. Exiting.\")\n logger.info(\"\")\n process.exit(1)\n }\n\n const result = z.array(z.string()).safeParse(components)\n if (!result.success) {\n logger.error(\"\")\n handleError(new Error(\"Something went wrong. Please try again.\"))\n return []\n }\n return result.data\n}\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE]) {\n logger.break()\n logger.error(\n `The path ${highlighter.info(\n resolvePaths.registryFile\n )} does not exist.`\n )\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n resolvePaths,\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightBuild } from \"@/src/preflights/preflight-build\"\nimport { registryItemSchema, registrySchema } from \"@/src/schema\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n})\n\nexport const build = new Command()\n .name(\"build\")\n .description(\"build components for a createui registry\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (registry: string, opts) => {\n try {\n const options = buildOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n })\n\n const { resolvePaths } = await preFlightBuild(options)\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n for (const registryItem of result.data.items) {\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://dev.createui.co/schema/registry-item.json\"\n\n // Loop through each file in the files array.\n for (const file of registryItem.files ?? []) {\n file[\"content\"] = await fs.readFile(\n path.resolve(resolvePaths.cwd, file.path),\n \"utf-8\"\n )\n }\n\n // Validate the registry item.\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getPreset, getPresets, getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { isUrl } from \"@/src/registry/utils\"\nimport { Preset } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport { Command } from \"commander\"\nimport dedent from \"dedent\"\nimport open from \"open\"\nimport prompts from \"prompts\"\nimport validateProjectName from \"validate-npm-package-name\"\n\nimport { initOptionsSchema, runInit } from \"./init\"\n\nconst createui_URL = \"https://dev.createui.co\"\n\nconst CREATE_TEMPLATES = {\n next: \"Next.js\",\n vite: \"Vite\",\n start: \"TanStack Start\",\n} as const\n\ntype Template = keyof typeof CREATE_TEMPLATES\n\nexport const create = new Command()\n .name(\"create\")\n .description(\"create a new project with createui\")\n .argument(\"[name]\", \"the name of your project\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. e.g. next, start or vite\"\n )\n .option(\"-p, --preset [name]\", \"use a preset configuration\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .action(async (name, opts) => {\n try {\n // If no arguments or options provided, show initial prompt.\n const hasNoArgs = !name && !opts.template && !opts.preset\n if (hasNoArgs) {\n const createUrl = getcreateuiCreateUrl()\n logger.log(\"Build your own createui.\")\n logger.log(\n `You will be taken to ${highlighter.info(\n createUrl\n )} to build your custom design system.`\n )\n logger.break()\n\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Open in browser?\",\n initial: true,\n })\n\n if (proceed) {\n await open(createUrl)\n }\n\n process.exit(0)\n }\n\n // Prompt for project name if not provided.\n let projectName = name\n if (!projectName) {\n const { enteredName } = await prompts({\n type: \"text\",\n name: \"enteredName\",\n message: \"What is your project named?\",\n initial: opts.template ? `${opts.template}-app` : \"my-app\",\n format: (value: string) => value.trim(),\n validate: (name) => {\n const validation = validateProjectName(\n path.basename(path.resolve(name))\n )\n if (validation.validForNewPackages) {\n return true\n }\n return \"Invalid project name. Name should be lowercase, URL-friendly, and not start with a period or underscore.\"\n },\n })\n\n if (!enteredName) {\n process.exit(0)\n }\n\n projectName = enteredName\n }\n\n // Prompt for template if not provided.\n let template = opts.template\n if (!template) {\n const { selectedTemplate } = await prompts({\n type: \"select\",\n name: \"selectedTemplate\",\n message: `Which ${highlighter.info(\n \"template\"\n )} would you like to use?`,\n choices: Object.entries(CREATE_TEMPLATES).map(([key, value]) => ({\n title: value,\n value: key,\n })),\n })\n\n if (!selectedTemplate) {\n process.exit(0)\n }\n\n template = selectedTemplate\n }\n\n // Handle preset selection.\n const presetResult = await handlePresetOption(opts.preset ?? true)\n\n if (!presetResult) {\n process.exit(0)\n }\n\n // Determine initUrl and baseColor based on preset type.\n let initUrl: string\n let baseColor: string\n\n if (\"_isUrl\" in presetResult) {\n // User provided a URL directly.\n initUrl = presetResult.url\n const url = new URL(presetResult.url)\n baseColor = url.searchParams.get(\"theme\") ?? \"indigo\"\n } else {\n // User selected a preset by name.\n initUrl = buildInitUrl(presetResult)\n baseColor = presetResult.theme\n }\n\n // Fetch the registry:base item to get its config.\n const shadowConfig = configWithDefaults({})\n\n const [item] = await getRegistryItems([initUrl], {\n config: shadowConfig,\n })\n\n // Extract config from registry:base item.\n let registryBaseConfig = undefined\n if (item?.type === \"registry:base\" && item.config) {\n registryBaseConfig = item.config\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n name: projectName,\n components: [initUrl],\n yes: opts.yes,\n defaults: false,\n force: false,\n silent: false,\n isNewProject: true,\n srcDir: opts.srcDir,\n cssVariables: true,\n template,\n baseColor,\n baseStyle: false,\n registryBaseConfig,\n skipPreflight: false,\n })\n\n const config = await runInit(options)\n\n // Add component example.\n if (config) {\n await addComponents([\"component-example\"], config, {\n baseStyle: false,\n silent: true,\n overwrite: true,\n })\n\n const templateFiles = getTemplateFiles(template as Template)\n if (templateFiles.length > 0) {\n await updateFiles(templateFiles, config, {\n overwrite: true,\n silent: true,\n })\n }\n }\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nfunction buildInitUrl(preset: Preset) {\n const params = new URLSearchParams({\n theme: preset.theme,\n neutralTheme: preset.neutralTheme,\n iconLibrary: preset.iconLibrary,\n fontVariant: preset.fontVariant,\n menuAccent: preset.menuAccent,\n menuColor: preset.menuColor,\n })\n\n return `${getcreateuiInitUrl()}?${params.toString()}`\n}\n\nasync function handlePresetOption(presetArg: string | boolean) {\n // If --preset is used without a name, show interactive list.\n if (presetArg === true) {\n const presets = await getPresets()\n\n const { selectedPreset } = await prompts({\n type: \"select\",\n name: \"selectedPreset\",\n message: `Which ${highlighter.info(\"preset\")} would you like to use?`,\n choices: [\n ...presets.map((preset) => ({\n title: preset.title,\n description: preset.description,\n value: preset.name,\n })),\n {\n title: \"Custom\",\n description: \"Build your own on https://dev.createui.co\",\n value: \"custom\",\n },\n ],\n })\n\n if (!selectedPreset) {\n return null\n }\n\n if (selectedPreset === \"custom\") {\n const url = getcreateuiCreateUrl()\n logger.info(`\\nOpening ${highlighter.info(url)} in your browser...\\n`)\n await open(url)\n return null\n }\n\n return presets.find((p) => p.name === selectedPreset) ?? null\n }\n\n // If --preset NAME or URL is provided.\n if (typeof presetArg === \"string\") {\n // Check if it's a URL.\n if (isUrl(presetArg)) {\n return { _isUrl: true, url: presetArg } as const\n }\n\n // Otherwise, fetch that preset by name.\n const preset = await getPreset(presetArg)\n\n if (!preset) {\n const presets = await getPresets()\n const presetNames = presets.map((p) => p.name).join(\", \")\n logger.error(\n `Preset \"${presetArg}\" not found. Available presets: ${presetNames}`\n )\n process.exit(1)\n }\n\n return preset\n }\n\n return null\n}\n\nfunction getTemplateFiles(template: Template) {\n switch (template) {\n case \"vite\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/App.tsx\",\n target: \"src/App.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport function App() {\n return <ComponentExample />;\n}\n\nexport default App;\n`,\n },\n ]\n case \"next\":\n return [\n {\n type: \"registry:page\" as const,\n path: \"app/page.tsx\",\n target: \"app/page.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport default function Page() {\n return <ComponentExample />;\n}\n`,\n },\n ]\n case \"start\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/routes/index.tsx\",\n target: \"src/routes/index.tsx\",\n content: dedent`import { createFileRoute } from \"@tanstack/react-router\";\nimport { ComponentExample } from \"@/components/component-example\";\n\nexport const Route = createFileRoute(\"/\")({ component: App });\n\nfunction App() {\n return (\n <ComponentExample />\n );\n}\n`,\n },\n ]\n default:\n return []\n }\n}\n\nfunction getcreateuiCreateUrl() {\n return `${createui_URL}/create`\n}\n\nfunction getcreateuiInitUrl() {\n return `${createui_URL}/init`\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n fetchTree,\n getItemTargetPath,\n getcreateuiRegistryIndex,\n} from \"@/src/registry/api\"\nimport { registryIndexSchema } from \"@/src/schema\"\nimport { Config, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { transform } from \"@/src/utils/transformers\"\nimport { Command } from \"commander\"\nimport { diffLines, type Change } from \"diff\"\nimport { z } from \"zod\"\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name(\"diff\")\n .description(\"check for updates against the registry\")\n .argument(\"[component]\", \"the component name\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${highlighter.success(\n `init`\n )} to create a components.json file.`\n )\n process.exit(1)\n }\n\n const registryIndex = await getcreateuiRegistryIndex()\n\n if (!registryIndex) {\n handleError(new Error(\"Failed to fetch registry index.\"))\n process.exit(1)\n }\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n if (existsSync(filePath)) {\n return true\n }\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info(\"No updates found.\")\n process.exit(0)\n }\n\n logger.info(\"The following components have updates available:\")\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes) {\n logger.info(` - ${change.filePath}`)\n }\n }\n logger.break()\n logger.info(\n `Run ${highlighter.success(`diff <component>`)} to see the changes.`\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n (item) => item.name === options.component\n )\n\n if (!component) {\n logger.error(\n `The component ${highlighter.success(\n options.component\n )} does not exist.`\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n await printDiff(change.patch)\n logger.info(\"\")\n }\n } catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config\n) {\n const payload = await fetchTree(\"\", [component])\n\n if (!payload) {\n return []\n }\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir) {\n continue\n }\n\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n\n if (!existsSync(filePath)) {\n continue\n }\n\n const fileContent = await fs.readFile(filePath, \"utf8\")\n\n if (typeof file === \"string\" || !file.content) {\n continue\n }\n\n const registryContent = await transform({\n filename: file.path,\n raw: file.content,\n config,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\nasync function printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added) {\n return process.stdout.write(highlighter.success(part.value))\n }\n if (part.removed) {\n return process.stdout.write(highlighter.error(part.value))\n }\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const info = new Command()\n .name(\"info\")\n .description(\"get information about your project\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (opts) => {\n try {\n logger.info(\"> project info\")\n console.log(await getProjectInfo(opts.cwd))\n logger.break()\n logger.info(\"> components.json\")\n console.log(await getConfig(opts.cwd))\n } catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { server } from \"@/src/mcp\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport { execa } from \"execa\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport z from \"zod\"\n\n// The published CLI package (bin: `createui`). Mirror the spec used by\n// `npxcreateui` in src/mcp/utils.ts so generated client configs and the\n// installed devDependency point at the real package.\nconst createui_MCP_PACKAGE = \"@create-ui/cli@beta\"\n\nconst CLIENTS = [\n {\n name: \"claude\",\n label: \"Claude Code\",\n configPath: \".mcp.json\",\n config: {\n mcpServers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"cursor\",\n label: \"Cursor\",\n configPath: \".cursor/mcp.json\",\n config: {\n mcpServers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"vscode\",\n label: \"VS Code\",\n configPath: \".vscode/mcp.json\",\n config: {\n servers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"codex\",\n label: \"Codex\",\n configPath: \".codex/config.toml\",\n config: `[mcp_servers.createui]\ncommand = \"npx\"\nargs = [\"${createui_MCP_PACKAGE}\", \"mcp\"]\n`,\n },\n {\n name: \"opencode\",\n label: \"OpenCode\",\n configPath: \"opencode.json\",\n config: {\n $schema: \"https://opencode.ai/config.json\",\n mcp: {\n createui: {\n type: \"local\",\n command: [\"npx\", createui_MCP_PACKAGE, \"mcp\"],\n enabled: true,\n },\n },\n },\n },\n] as const\n\nconst DEPENDENCIES = [createui_MCP_PACKAGE]\n\nexport const mcp = new Command()\n .name(\"mcp\")\n .description(\"MCP server and configuration commands\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (options) => {\n try {\n await loadEnvFiles(options.cwd)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nconst mcpInitOptionsSchema = z.object({\n client: z.enum([\"claude\", \"cursor\", \"vscode\", \"codex\", \"opencode\"]),\n cwd: z.string(),\n})\n\nmcp\n .command(\"init\")\n .description(\"Initialize MCP configuration for your client\")\n .option(\n \"--client <client>\",\n `MCP client (${CLIENTS.map((c) => c.name).join(\", \")})`\n )\n .action(async (opts, command) => {\n try {\n // Get the cwd from parent command.\n const parentOpts = command.parent?.opts() || {}\n const cwd = parentOpts.cwd || process.cwd()\n\n let client = opts.client\n\n if (!client) {\n const response = await prompts({\n type: \"select\",\n name: \"client\",\n message: \"Which MCP client are you using?\",\n choices: CLIENTS.map((c) => ({\n title: c.label,\n value: c.name,\n })),\n })\n\n if (!response.client) {\n logger.break()\n process.exit(1)\n }\n\n client = response.client\n }\n\n const options = mcpInitOptionsSchema.parse({\n client,\n cwd,\n })\n\n const config = await getConfig(options.cwd)\n\n if (options.client === \"codex\") {\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.log(\"To configure the createui MCP server in Codex:\")\n logger.break()\n logger.log(\n `1. Open or create the file ${highlighter.info(\n \"~/.codex/config.toml\"\n )}`\n )\n logger.log(\"2. Add the following configuration:\")\n logger.log()\n logger.info(`[mcp_servers.createui]\ncommand = \"npx\"\nargs = [\"${createui_MCP_PACKAGE}\", \"mcp\"]`)\n logger.break()\n logger.info(\"3. Restart Codex to load the MCP server\")\n logger.break()\n process.exit(0)\n }\n\n const configSpinner = spinner(\"Configuring MCP server...\").start()\n const configPath = await runMcpInit(options)\n configSpinner.succeed(\"Configuring MCP server.\")\n\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.success(`Configuration saved to ${configPath}.`)\n logger.break()\n } catch (error) {\n handleError(error)\n }\n })\n\nconst overwriteMerge = (_: any[], sourceArray: any[]) => sourceArray\n\nasync function runMcpInit(options: z.infer<typeof mcpInitOptionsSchema>) {\n const { client, cwd } = options\n\n const clientInfo = CLIENTS.find((c) => c.name === client)\n if (!clientInfo) {\n throw new Error(\n `Unknown client: ${client}. Available clients: ${CLIENTS.map(\n (c) => c.name\n ).join(\", \")}`\n )\n }\n\n const configPath = path.join(cwd, clientInfo.configPath)\n const dir = path.dirname(configPath)\n await fsExtra.ensureDir(dir)\n\n // Handle JSON format.\n let existingConfig = {}\n try {\n const content = await fs.readFile(configPath, \"utf-8\")\n existingConfig = JSON.parse(content)\n } catch {}\n\n const mergedConfig = deepmerge(\n existingConfig,\n clientInfo.config as Record<string, unknown>,\n { arrayMerge: overwriteMerge }\n )\n\n await fs.writeFile(\n configPath,\n JSON.stringify(mergedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n\n return clientInfo.configPath\n}\n","import { randomBytes } from \"crypto\"\nimport { promises as fs } from \"fs\"\nimport { tmpdir } from \"os\"\nimport path from \"path\"\nimport { getRegistryIcons } from \"@/src/registry/api\"\nimport { iconsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { LEGACY_ICON_LIBRARIES } from \"@/src/utils/legacy-icon-libraries\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\nimport { Project, ScriptKind, SyntaxKind } from \"ts-morph\"\nimport { z } from \"zod\"\n\nexport async function migrateIcons(config: Config) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const [files, registryIcons] = await Promise.all([\n fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n }),\n getRegistryIcons(),\n ])\n\n if (Object.keys(registryIcons).length === 0) {\n throw new Error(\"Something went wrong fetching the registry icons.\")\n }\n\n const libraryChoices = Object.entries(LEGACY_ICON_LIBRARIES).map(\n ([name, iconLibrary]) => ({\n title: iconLibrary.name,\n value: name,\n })\n )\n\n const migrateOptions = await prompts([\n {\n type: \"select\",\n name: \"sourceLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate from\"\n )}?`,\n choices: libraryChoices,\n },\n {\n type: \"select\",\n name: \"targetLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate to\"\n )}?`,\n choices: libraryChoices,\n },\n ])\n\n if (migrateOptions.sourceLibrary === migrateOptions.targetLibrary) {\n throw new Error(\n \"You cannot migrate to the same icon library. Please choose a different icon library.\"\n )\n }\n\n if (\n !(\n migrateOptions.sourceLibrary in LEGACY_ICON_LIBRARIES &&\n migrateOptions.targetLibrary in LEGACY_ICON_LIBRARIES\n )\n ) {\n throw new Error(\"Invalid icon library. Please choose a valid icon library.\")\n }\n\n const sourceLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.sourceLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const targetLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.targetLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} from ${highlighter.info(sourceLibrary.name)} to ${highlighter.info(\n targetLibrary.name\n )}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n\n if (targetLibrary.package) {\n await updateDependencies([targetLibrary.package], [], config, {\n silent: false,\n })\n }\n\n const migrationSpinner = spinner(`Migrating icons...`)?.start()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const content = await migrateIconsFile(\n fileContent,\n migrateOptions.sourceLibrary,\n migrateOptions.targetLibrary,\n registryIcons\n )\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migration complete.\")\n}\n\nexport async function migrateIconsFile(\n content: string,\n sourceLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n targetLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n iconsMapping: z.infer<typeof iconsSchema>\n) {\n const sourceLibraryImport = LEGACY_ICON_LIBRARIES[sourceLibrary]?.import\n const targetLibraryImport = LEGACY_ICON_LIBRARIES[targetLibrary]?.import\n\n const dir = await fs.mkdtemp(path.join(tmpdir(), \"createui-\"))\n const project = new Project({\n compilerOptions: {},\n })\n\n const tempFile = path.join(\n dir,\n `createui-icons-${randomBytes(4).toString(\"hex\")}.tsx`\n )\n const sourceFile = project.createSourceFile(tempFile, content, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Find all sourceLibrary imports.\n let targetedIcons: string[] = []\n for (const importDeclaration of sourceFile.getImportDeclarations() ?? []) {\n if (\n importDeclaration.getModuleSpecifier()?.getText() !==\n `\"${sourceLibraryImport}\"`\n ) {\n continue\n }\n\n for (const specifier of importDeclaration.getNamedImports() ?? []) {\n const iconName = specifier.getName()\n\n // TODO: this is O(n^2) but okay for now.\n const targetedIcon = Object.values(iconsMapping).find(\n (icon) => icon[sourceLibrary] === iconName\n )?.[targetLibrary]\n\n if (!targetedIcon || targetedIcons.includes(targetedIcon)) {\n continue\n }\n\n targetedIcons.push(targetedIcon)\n\n // Remove the named import.\n specifier.remove()\n\n // Replace with the targeted icon.\n sourceFile\n .getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n .filter((node) => node.getTagNameNode()?.getText() === iconName)\n .forEach((node) => node.getTagNameNode()?.replaceWithText(targetedIcon))\n }\n\n // If the named import is empty, remove the import declaration.\n if (importDeclaration.getNamedImports()?.length === 0) {\n importDeclaration.remove()\n }\n }\n\n if (targetedIcons.length > 0) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: targetLibraryImport,\n namedImports: targetedIcons.map((icon) => ({\n name: icon,\n })),\n })\n }\n\n return await sourceFile.getText()\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\n\nfunction toPascalCase(str: string): string {\n return str\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\")\n}\n\nfunction processNamedImports(\n namedImports: string,\n isTypeOnly: boolean,\n imports: Array<{ name: string; alias?: string; isType?: boolean }>,\n packageName: string\n) {\n // Clean up multi-line imports.\n // Remove comments and whitespace.\n const cleanedImports = namedImports\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n\n const namedImportList = cleanedImports\n .split(\",\")\n .map((importItem) => importItem.trim())\n .filter(Boolean)\n\n for (const importItem of namedImportList) {\n const inlineTypeMatch = importItem.match(/^type\\s+(\\w+)(?:\\s+as\\s+(\\w+))?$/)\n const aliasMatch = importItem.match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n\n if (inlineTypeMatch) {\n // Inline type: \"type DialogProps\" or \"type DialogProps as Props\"\n const importName = inlineTypeMatch[1]\n const importAlias = inlineTypeMatch[2]\n\n if (packageName === \"slot\" && importName === \"Slot\" && !importAlias) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: true,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: true,\n })\n }\n } else if (aliasMatch) {\n // Regular import with alias: \"Root as DialogRoot\"\n const importName = aliasMatch[1]\n const importAlias = aliasMatch[2]\n\n if (\n packageName === \"slot\" &&\n importName === \"Slot\" &&\n importAlias === \"Slot\"\n ) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: isTypeOnly,\n })\n }\n } else {\n // Simple import: \"Root\"\n // Special handling for Slot: always alias it as SlotPrimitive\n if (packageName === \"slot\" && importItem === \"Slot\") {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importItem,\n isType: isTypeOnly,\n })\n }\n }\n }\n}\n\nexport async function migrateRadix(\n config: Config,\n options: { yes?: boolean } = {}\n) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const files = await fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n })\n\n if (!options.yes) {\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} to ${highlighter.info(\"radix-ui\")}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n }\n\n const migrationSpinner = spinner(`Migrating imports...`)?.start()\n const foundPackages = new Set<string>()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const { content, replacedPackages } = await migrateRadixFile(fileContent)\n\n // Track which packages we found\n replacedPackages.forEach((pkg) => foundPackages.add(pkg))\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migrating imports.\")\n\n // Update package.json dependencies\n const packageSpinner = spinner(`Updating package.json...`)?.start()\n\n try {\n const packageJson = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageJson) {\n packageSpinner.fail(\"Could not read package.json\")\n logger.warn(\n \"Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n return\n }\n\n const foundPackagesArray = Array.from(foundPackages)\n\n // Remove packages from both dependencies and devDependencies if found in source files\n const dependencyTypes = [\"dependencies\", \"devDependencies\"] as const\n for (const depType of dependencyTypes) {\n if (packageJson[depType]) {\n for (const pkg of foundPackagesArray) {\n if (packageJson[depType]![pkg]) {\n delete packageJson[depType]![pkg]\n }\n }\n }\n }\n\n // Add radix-ui if we found any Radix packages.\n if (foundPackagesArray.length > 0) {\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n packageJson.dependencies[\"radix-ui\"] = \"latest\"\n\n const packageJsonPath = path.join(\n config.resolvedPaths.cwd,\n \"package.json\"\n )\n await fs.writeFile(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\"\n )\n\n packageSpinner.succeed(`Updated package.json.`)\n\n // Install radix-ui dependency.\n await updateDependencies([\"radix-ui\"], [], config, { silent: false })\n } else {\n packageSpinner.succeed(\"No packages found in source files.\")\n }\n } catch (error) {\n packageSpinner.fail(\"Failed to update package.json\")\n logger.warn(\n \"You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n }\n}\n\nexport async function migrateRadixFile(\n content: string\n): Promise<{ content: string; replacedPackages: string[] }> {\n // Enhanced regex to handle type-only imports, but exclude react-icons\n // Also capture optional semicolon at the end\n const radixImportPattern =\n /import\\s+(?:(type)\\s+)?(?:\\*\\s+as\\s+(\\w+)|{([^}]+)})\\s+from\\s+([\"'])@radix-ui\\/react-([^\"']+)\\4(;?)/g\n\n const imports: Array<{ name: string; alias?: string; isType?: boolean }> = []\n const linesToRemove: string[] = []\n const replacedPackages: string[] = []\n let quoteStyle = '\"' // Default to double quotes\n let hasSemicolon = false // Track if any import had a semicolon\n\n let result = content\n let match\n\n // Find all Radix imports\n while ((match = radixImportPattern.exec(content)) !== null) {\n const [\n fullMatch,\n typeKeyword,\n namespaceAlias,\n namedImports,\n quote,\n packageName,\n semicolon,\n ] = match\n\n // Skip react-icons package and any sub-paths (like react-icons/dist/types)\n if (packageName === \"icons\" || packageName.startsWith(\"icons/\")) {\n continue\n }\n\n linesToRemove.push(fullMatch)\n\n // Use the quote style and semicolon style from the first import\n if (linesToRemove.length === 1) {\n quoteStyle = quote\n hasSemicolon = semicolon === \";\"\n }\n\n // Track which package we're replacing\n replacedPackages.push(`@radix-ui/react-${packageName}`)\n\n const isTypeOnly = Boolean(typeKeyword)\n\n if (namespaceAlias) {\n // Handle namespace imports: import * as DialogPrimitive from \"@radix-ui/react-dialog\"\n const componentName = toPascalCase(packageName)\n imports.push({\n name: componentName,\n alias: namespaceAlias,\n isType: isTypeOnly,\n })\n } else if (namedImports) {\n // Handle named imports: import { Root, Trigger } from \"@radix-ui/react-dialog\"\n // or import type { DialogProps } from \"@radix-ui/react-dialog\"\n // or import { type DialogProps, Root } from \"@radix-ui/react-dialog\"\n\n processNamedImports(namedImports, isTypeOnly, imports, packageName)\n }\n }\n\n if (imports.length === 0) {\n return {\n content,\n replacedPackages: [],\n }\n }\n\n // Remove duplicates.\n // Considering name, alias, and type status.\n const uniqueImports = imports.filter(\n (importName, index, self) =>\n index ===\n self.findIndex(\n (i) =>\n i.name === importName.name &&\n i.alias === importName.alias &&\n i.isType === importName.isType\n )\n )\n\n // Create the unified import with preserved quote style and type annotations\n const importList = uniqueImports\n .map((imp) => {\n const typePrefix = imp.isType ? \"type \" : \"\"\n return imp.alias\n ? `${typePrefix}${imp.name} as ${imp.alias}`\n : `${typePrefix}${imp.name}`\n })\n .join(\", \")\n\n const unifiedImport = `import { ${importList} } from ${quoteStyle}radix-ui${quoteStyle}${\n hasSemicolon ? \";\" : \"\"\n }`\n\n // Replace first import with unified import, remove the rest\n result = linesToRemove.reduce((acc, line, index) => {\n return acc.replace(line, index === 0 ? unifiedImport : \"\")\n }, result)\n\n // Clean up extra blank lines\n result = result.replace(/\\n\\s*\\n\\s*\\n/g, \"\\n\\n\")\n\n // Handle special case for Slot usage transformation\n // Now that we import { Slot as SlotPrimitive }, we need to:\n // 1. Transform: const Comp = asChild ? Slot : [ANYTHING] -> const Comp = asChild ? SlotPrimitive.Slot : [ANYTHING]\n // 2. Transform: React.ComponentProps<typeof Slot> -> React.ComponentProps<typeof SlotPrimitive.Slot>\n const hasSlotImport = uniqueImports.some(\n (imp) => imp.name === \"Slot\" && imp.alias === \"SlotPrimitive\"\n )\n\n if (hasSlotImport) {\n // Find all lines that are NOT import lines to avoid transforming the import statement itself\n const lines = result.split(\"\\n\")\n const transformedLines = lines.map((line) => {\n // Skip import lines\n if (line.trim().startsWith(\"import \")) {\n return line\n }\n\n let transformedLine = line\n\n // Handle all Slot references in one comprehensive pass\n // Use placeholders to avoid double replacements\n\n // First, mark specific patterns with placeholders\n transformedLine = transformedLine.replace(\n /\\b(asChild\\s*\\?\\s*)Slot(\\s*:)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bReact\\.ComponentProps<typeof\\s+Slot>/g,\n \"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bComponentProps<typeof\\s+Slot>/g,\n \"ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /(<\\/?)Slot(\\s*\\/?>)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n // Handle any other standalone Slot usage\n transformedLine = transformedLine.replace(\n /\\bSlot\\b/g,\n (match, offset, string) => {\n // Don't transform if it's inside quotes\n const beforeMatch = string.substring(0, offset)\n const openQuotes = (beforeMatch.match(/\"/g) || []).length\n const openSingleQuotes = (beforeMatch.match(/'/g) || []).length\n\n // If we're inside quotes, don't transform\n if (openQuotes % 2 !== 0 || openSingleQuotes % 2 !== 0) {\n return match\n }\n\n return \"__SLOT_PLACEHOLDER__\"\n }\n )\n\n // Finally, replace all placeholders with SlotPrimitive.Slot\n transformedLine = transformedLine.replace(\n /__SLOT_PLACEHOLDER__/g,\n \"SlotPrimitive.Slot\"\n )\n\n return transformedLine\n })\n\n result = transformedLines.join(\"\\n\")\n }\n\n // Remove duplicate packages\n const uniqueReplacedPackages = Array.from(new Set(replacedPackages))\n\n return {\n content: result,\n replacedPackages: uniqueReplacedPackages,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport { migrateOptionsSchema } from \"@/src/commands/migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightMigrate(\n options: z.infer<typeof migrateOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can run a migration, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://dev.createui.co/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import path from \"path\"\nimport { migrateIcons } from \"@/src/migrations/migrate-icons\"\nimport { migrateRadix } from \"@/src/migrations/migrate-radix\"\nimport { preFlightMigrate } from \"@/src/preflights/preflight-migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const migrations = [\n {\n name: \"icons\",\n description: \"migrate your ui components to a different icon library.\",\n },\n {\n name: \"radix\",\n description: \"migrate to radix-ui.\",\n },\n] as const\n\nexport const migrateOptionsSchema = z.object({\n cwd: z.string(),\n list: z.boolean(),\n yes: z.boolean(),\n migration: z\n .string()\n .refine(\n (value) =>\n value && migrations.some((migration) => migration.name === value),\n {\n message:\n \"You must specify a valid migration. Run `createui migrate --list` to see available migrations.\",\n }\n )\n .optional(),\n})\n\nexport const migrate = new Command()\n .name(\"migrate\")\n .description(\"run a migration.\")\n .argument(\"[migration]\", \"the migration to run.\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-l, --list\", \"list all migrations.\", false)\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .action(async (migration, opts) => {\n try {\n const options = migrateOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n migration,\n list: opts.list,\n yes: opts.yes,\n })\n\n if (options.list || !options.migration) {\n logger.info(\"Available migrations:\")\n for (const migration of migrations) {\n logger.info(`- ${migration.name}: ${migration.description}`)\n }\n return\n }\n\n if (!options.migration) {\n throw new Error(\n \"You must specify a migration. Run `createui migrate --list` to see available migrations.\"\n )\n }\n\n let { errors, config } = await preFlightMigrate(options)\n\n if (\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] ||\n errors[ERRORS.MISSING_CONFIG]\n ) {\n throw new Error(\n \"No `components.json` file found. Ensure you are at the root of your project.\"\n )\n }\n\n if (!config) {\n throw new Error(\n \"Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.\"\n )\n }\n\n if (options.migration === \"icons\") {\n await migrateIcons(config)\n }\n\n if (options.migration === \"radix\") {\n await migrateRadix(config, { yes: options.yes })\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightRegistryBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n resolvePaths,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can build the registry, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightRegistryBuild } from \"@/src/preflights/preflight-registry\"\nimport { recursivelyResolveFileImports } from \"@/src/registry/utils\"\nimport { configSchema, registryItemSchema, registrySchema } from \"@/src/schema\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n verbose: z.boolean().optional().default(false),\n})\n\nexport const build = new Command()\n .name(\"registry:build\")\n .description(\"builds the registry [EXPERIMENTAL]\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-v, --verbose\", \"verbose output\")\n .action(async (registry: string, opts) => {\n await buildRegistry({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n verbose: opts.verbose,\n })\n })\n\nasync function buildRegistry(opts: z.infer<typeof buildOptionsSchema>) {\n try {\n const options = buildOptionsSchema.parse(opts)\n\n const [{ errors, resolvePaths, config }, projectInfo] = await Promise.all([\n preFlightRegistryBuild(options),\n getProjectInfo(options.cwd),\n ])\n\n if (errors[ERRORS.MISSING_CONFIG] || !config || !projectInfo) {\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file is required to build the registry. Run ${highlighter.info(\n \"createui init\"\n )} to create one.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] || !resolvePaths) {\n logger.error(\n `We could not find a registry file at ${highlighter.info(\n path.resolve(options.cwd, options.registryFile)\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n\n // Recursively resolve the registry items.\n const resolvedRegistry = await resolveRegistryItems(\n result.data,\n config,\n projectInfo\n )\n\n // Loop through the registry items and remove duplicates files i.e same path.\n for (const registryItem of resolvedRegistry.items) {\n // Deduplicate files\n registryItem.files = registryItem.files?.filter(\n (file, index, self) =>\n index === self.findIndex((t) => t.path === file.path)\n )\n\n // Deduplicate dependencies\n if (registryItem.dependencies) {\n registryItem.dependencies = registryItem.dependencies.filter(\n (dep, index, self) => index === self.findIndex((d) => d === dep)\n )\n }\n }\n\n for (const registryItem of resolvedRegistry.items) {\n if (!registryItem.files) {\n continue\n }\n\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://dev.createui.co/schema/registry-item.json\"\n\n for (const file of registryItem.files) {\n const absPath = path.resolve(resolvePaths.cwd, file.path)\n try {\n const stat = await fs.stat(absPath)\n if (!stat.isFile()) {\n continue\n }\n file[\"content\"] = await fs.readFile(absPath, \"utf-8\")\n } catch (err) {\n console.error(\"Error reading file in registry build:\", absPath, err)\n continue\n }\n }\n\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n\n if (options.verbose) {\n spinner(\n `The registry has ${highlighter.info(\n resolvedRegistry.items.length.toString()\n )} items:`\n ).succeed()\n for (const item of resolvedRegistry.items) {\n logger.log(` - ${item.name} (${highlighter.info(item.type)})`)\n for (const file of item.files ?? []) {\n logger.log(` - ${file.path}`)\n }\n }\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n}\n\n// This reads the registry and recursively resolves the file imports.\nasync function resolveRegistryItems(\n registry: z.infer<typeof registrySchema>,\n config: z.infer<typeof configSchema>,\n projectInfo: ProjectInfo\n): Promise<z.infer<typeof registrySchema>> {\n for (const item of registry.items) {\n if (!item.files?.length) {\n continue\n }\n\n // Process all files in the array instead of just the first one\n for (const file of item.files) {\n const results = await recursivelyResolveFileImports(\n file.path,\n config,\n projectInfo\n )\n\n // Remove file from results.files\n results.files = results.files?.filter((f) => f.path !== file.path)\n\n if (results.files) {\n item.files.push(...results.files)\n }\n\n if (results.dependencies) {\n item.dependencies = item.dependencies\n ? item.dependencies.concat(results.dependencies)\n : results.dependencies\n }\n }\n }\n\n return registry\n}\n","import { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const mcp = new Command()\n .name(\"registry:mcp\")\n .description(\"starts the registry MCP server [DEPRECATED]\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async () => {\n logger.warn(\n `The ${highlighter.info(\n \"createui registry:mcp\"\n )} command is deprecated. Use the ${highlighter.info(\n \"createui mcp\"\n )} command instead.`\n )\n logger.break()\n })\n","import path from \"path\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { searchRegistries } from \"@/src/registry/search\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst searchOptionsSchema = z.object({\n cwd: z.string(),\n query: z.string().optional(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n})\n\n// TODO: We're duplicating logic for shadowConfig here.\n// Revisit and properly abstract this.\n\nexport const search = new Command()\n .name(\"search\")\n .alias(\"list\")\n .description(\"search items from registries\")\n .argument(\n \"<registries...>\",\n \"the registry names or urls to search items from. Names must be prefixed with @.\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-q, --query <query>\", \"query string\")\n .option(\n \"-l, --limit <number>\",\n \"maximum number of items to display per registry\",\n \"100\"\n )\n .option(\"-o, --offset <number>\", \"number of items to skip\", \"0\")\n .action(async (registries: string[], opts) => {\n try {\n const options = searchOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n query: opts.query,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n // Use createConfig to get proper default paths\n const defaultConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n let shadowConfig = configWithDefaults(defaultConfig)\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults({\n ...defaultConfig,\n ...partialConfig,\n })\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n // Use searchRegistries for both search and non-search cases.\n const results = await searchRegistries(registries as `@${string}`[], {\n query: options.query,\n limit: options.limit,\n offset: options.offset,\n config,\n })\n\n console.log(JSON.stringify(results, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst viewOptionsSchema = z.object({\n cwd: z.string(),\n})\n\nexport const view = new Command()\n .name(\"view\")\n .description(\"view items from the registry\")\n .argument(\"<items...>\", \"the item names or URLs to view\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (items: string[], opts) => {\n try {\n const options = viewOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n let shadowConfig = configWithDefaults({})\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults(partialConfig)\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const payload = await getRegistryItems(items, { config })\n console.log(JSON.stringify(payload, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n }\n })\n","{\n \"name\": \"@create-ui/cli\",\n \"version\": \"0.1.0-beta.1\",\n \"description\": \"Add components to your apps.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"createui\",\n \"url\": \"https://twitter.com/createui\"\n },\n \"homepage\": \"https://dev.createui.co\",\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"components\",\n \"ui\",\n \"tailwind\",\n \"radix-ui\",\n \"createui\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./registry\": {\n \"types\": \"./dist/registry/index.d.ts\",\n \"default\": \"./dist/registry/index.js\"\n },\n \"./schema\": {\n \"types\": \"./dist/schema/index.d.ts\",\n \"default\": \"./dist/schema/index.js\"\n },\n \"./mcp\": {\n \"types\": \"./dist/mcp/index.d.ts\",\n \"default\": \"./dist/mcp/index.js\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils/index.d.ts\",\n \"default\": \"./dist/utils/index.js\"\n },\n \"./icons\": {\n \"types\": \"./dist/icons/index.d.ts\",\n \"default\": \"./dist/icons/index.js\"\n },\n \"./tailwind.css\": {\n \"style\": \"./dist/tailwind.css\"\n }\n },\n \"bin\": {\n \"createui\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rimraf dist && rimraf components\",\n \"start:dev\": \"cross-env REGISTRY_URL=http://localhost:4000/r node dist/index.js\",\n \"start:prod\": \"cross-env REGISTRY_URL=https://dev.createui.co/r node dist/index.js\",\n \"start\": \"node dist/index.js\",\n \"format:write\": \"prettier --write \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"format:check\": \"prettier --check \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"release\": \"changeset version\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\",\n \"test:dev\": \"REGISTRY_URL=http://localhost:4000/r vitest run\",\n \"mcp:inspect\": \"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"^25.0.0\",\n \"@babel/core\": \"^7.28.0\",\n \"@babel/parser\": \"^7.28.0\",\n \"@babel/plugin-transform-typescript\": \"^7.28.0\",\n \"@babel/preset-typescript\": \"^7.27.1\",\n \"@dotenvx/dotenvx\": \"^1.48.4\",\n \"@modelcontextprotocol/sdk\": \"^1.17.2\",\n \"@types/validate-npm-package-name\": \"^4.0.2\",\n \"browserslist\": \"^4.26.2\",\n \"commander\": \"^14.0.0\",\n \"cosmiconfig\": \"^9.0.0\",\n \"dedent\": \"^1.6.0\",\n \"deepmerge\": \"^4.3.1\",\n \"diff\": \"^8.0.2\",\n \"execa\": \"^9.6.0\",\n \"fast-glob\": \"^3.3.3\",\n \"fs-extra\": \"^11.3.1\",\n \"fuzzysort\": \"^3.1.0\",\n \"https-proxy-agent\": \"^7.0.6\",\n \"kleur\": \"^4.1.5\",\n \"msw\": \"^2.10.4\",\n \"node-fetch\": \"^3.3.2\",\n \"open\": \"^11.0.0\",\n \"ora\": \"^8.2.0\",\n \"postcss\": \"^8.5.6\",\n \"postcss-selector-parser\": \"^7.1.0\",\n \"prompts\": \"^2.4.2\",\n \"recast\": \"^0.23.11\",\n \"stringify-object\": \"^5.0.0\",\n \"ts-morph\": \"^26.0.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"validate-npm-package-name\": \"^7.0.1\",\n \"zod\": \"^3.24.1\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/babel__core\": \"^7.20.5\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/stringify-object\": \"^4.0.5\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.5.0\",\n \"type-fest\": \"^4.41.0\",\n \"typescript\": \"^5.9.2\"\n }\n}","#!/usr/bin/env node\nimport { add } from \"@/src/commands/add\"\nimport { build } from \"@/src/commands/build\"\nimport { create } from \"@/src/commands/create\"\nimport { diff } from \"@/src/commands/diff\"\nimport { info } from \"@/src/commands/info\"\nimport { init } from \"@/src/commands/init\"\nimport { mcp } from \"@/src/commands/mcp\"\nimport { migrate } from \"@/src/commands/migrate\"\nimport { build as registryBuild } from \"@/src/commands/registry/build\"\nimport { mcp as registryMcp } from \"@/src/commands/registry/mcp\"\nimport { search } from \"@/src/commands/search\"\nimport { view } from \"@/src/commands/view\"\nimport { Command } from \"commander\"\n\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"createui\")\n .description(\"add items from registries to your project\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\"\n )\n\n program\n .addCommand(init)\n .addCommand(create)\n .addCommand(add)\n .addCommand(diff)\n .addCommand(view)\n .addCommand(search)\n .addCommand(migrate)\n .addCommand(info)\n .addCommand(build)\n .addCommand(mcp)\n // Legacy registry commands.\n program.addCommand(registryBuild).addCommand(registryMcp)\n\n program.parse()\n}\n\nmain()\n\nexport * from \"./registry/api\"\n"]}
1
+ {"version":3,"sources":["../src/preflights/preflight-init.ts","../src/utils/is-safe-target.ts","../src/utils/updaters/update-css.ts","../src/utils/updaters/update-css-vars.ts","../src/utils/updaters/update-dependencies.ts","../src/utils/updaters/update-env-vars.ts","../src/utils/updaters/update-fonts.ts","../src/utils/updaters/update-tailwind-config.ts","../src/utils/add-components.ts","../src/utils/create-project.ts","../src/utils/env-loader.ts","../src/utils/file-helper.ts","../src/utils/updaters/update-vscode-settings.ts","../src/commands/init.ts","../src/preflights/preflight-add.ts","../src/utils/update-app-index.ts","../src/commands/add.ts","../src/preflights/preflight-build.ts","../src/commands/build.ts","../src/commands/create.ts","../src/commands/diff.ts","../src/commands/info.ts","../src/commands/mcp.ts","../src/migrations/migrate-icons.ts","../src/migrations/migrate-radix.ts","../src/preflights/preflight-migrate.ts","../src/commands/migrate.ts","../src/preflights/preflight-registry.ts","../src/commands/registry/build.ts","../src/commands/registry/mcp.ts","../src/commands/search.ts","../src/commands/skill.ts","../src/commands/view.ts","../package.json","../src/index.ts"],"names":["preFlightInit","options","errors","fs","path","projectSpinner","spinner","logger","highlighter","frameworkSpinner","projectInfo","getProjectInfo","tailwindSpinnerMessage","tailwindSpinner","tsConfigSpinner","isSafeTarget","targetPath","cwd","decodedPath","prevPath","normalizedTarget","normalizedRoot","hasPathTraversal","cleanPath","cleanTarget","cleanDecoded","pattern","resolvedPath","updateCss","css","config","cssFilepath","cssFilepathRelative","cssSpinner","raw","output","transformCss","input","plugins","updateCssPlugin","result","postcss","root","lastNode","selector","properties","atRuleMatch","name","params","node","importRule","importNodes","lastImport","quotedParams","normalizeParams","p","pluginRule","pluginNodes","lastPlugin","variantNode","customVariantNodes","lastVariant","newAtRule","themeInline","existingKeyframesRule","keyframesRule","step","stepProps","processRule","utilityAtRule","prop","value","existingDecl","decl","atRule","processAtRule","childSelector","childProps","nestedMatch","nestedName","nestedParams","tempRule","rule","clone","error","parent","atRuleName","atRuleParams","nestedSelector","RESPONSIVE_CATEGORIES","formatResponsiveValue","trimmed","NO_PX_SUFFIXES","splitResponsiveVars","vars","category","categoryAddsUnit","desktop","tablet","mobile","key","rawValue","addUnit","suffix","d","t","m","s","expandKeys","updateCssVars","cssVars","cssVarsSpinner","transformCssVars","packageInfo","getPackageInfo","addCustomImport","cleanupDefaultNextStylesPlugin","updateCssVarsPluginV4","updateThemePlugin","updateTailwindConfigPlugin","updateTailwindConfigAnimationPlugin","updateTailwindConfigKeyframesPlugin","removeConflictVars","rootRule","propsToRemove","bodyRule","darkRootRule","upsertVarsIntoRule","ruleNode","isLocalHSLValue","newDecl","upsertMediaQueryVars","maxWidth","mediaParams","mediaNode","modes","themeNode","upsertThemeNode","keys","varName","propValue","customVariantNode","importNode","tailwindConfig","quote","getQuoteType","lastPluginNode","plugin","pluginName","pluginNode","existingKeyFrameNodes","keyframeValueSchema","z","keyframeName","keyframeValue","parsedKeyframeValue","keyframeNode","values","existingAnimationNodes","parsedAnimationValue","animationNode","chunks","chunk","updateDependencies","dependencies","devDependencies","dependenciesSpinner","packageManager","getUpdateDependenciesPackageManager","flag","shouldPromptForNpmFlag","confirmation","prompts","installWithPackageManager","hasReact19","hasReactDayPicker8","getPackageManager","installWithNpm","installWithDeno","installWithExpo","execa","installIndividually","flagArgs","command","packages","failed","pkg","dep","updateEnvVars","envVars","envSpinner","projectRoot","envFilePath","existingEnvFile","findExistingEnvFile","envFileExists","existsSync","envFileName","newEnvContent","envVarsAdded","envFileUpdated","envFileCreated","existingContent","mergedContent","mergeEnvContent","getNewEnvKeys","massageTreeForFonts","tree","font","addedImports","fontSourceDependency","toFontsourcePackage","slug","updateFonts","fonts","fontsSpinner","updateNextFonts","layoutPath","findLayoutFile","layoutContent","updatedContent","transformLayoutFonts","isSrcDir","ext","possiblePaths","relativePath","fullPath","_config","sourceFile","Project","ScriptKind","googleFonts","f","fontVariableNames","importName","_","c","existingImport","fontOptions","buildFontOptions","imp","existingVarDecl","findFontVariableDeclaration","insertPosition","findInsertPosition","VariableDeclarationKind","managedVariables","removeOldFontDeclarations","cleanupUnusedFontImports","updateHtmlClassName","cleanupBodyClassName","variable","variableStatements","statement","declaration","initializer","SyntaxKind","args","argText","imports","jsxElements","element","classNameAttr","variableExpressions","ensureCnImport","jsxAttr","newVarExpressions","currentValue","jsxExpr","expr","exprText","v","cleanedExpr","removeFontVariablesFromCn","newExpr","insertFontVariablesIntoCn","cnArgs","parseTemplateLiteralToCnArgs","arg","utilsImport","templateLiteral","staticArgs","variableArgs","parts","part","staticParts","staticPart","statementsToRemove","variableMatch","cssVariable","fontImport","namedImports","fullText","namedImport","importLine","textWithoutImport","content","staticClasses","cleaned","argsMatch","a","cnExpr","fontVars","varsStr","updateTailwindConfig","addComponents","components","workspaceConfig","getWorkspaceConfig","addWorkspaceComponents","addProjectComponents","registrySpinner","resolveRegistryTree","configWithDefaults","handleError","validateFilesTarget","overwriteCssVars","shouldOverwriteCssVars","updateFiles","filesCreated","filesUpdated","filesSkipped","rootSpinner","mainTargetConfig","workspaceRoot","findCommonRoot","filesByType","file","type","typeFiles","targetConfig","typeWorkspaceRoot","packageRoot","findPackageRoot","files","getRegistryItems","registryItemSchema","component","GITHUB_TEMPLATE_URL","TEMPLATES","createProject","template","projectName","nextVersion","isRemoteComponent","fetchRegistry","meta","projectPath","createNextProject","createMonorepoProject","createViteProject","createStartProject","createSpinner","templatePath","os","response","tarPath","extractedPath","packageJsonPath","packageJsonContent","packageJson","lockFilePath","loadEnvFiles","envFiles","envFile","envPath","join","FILE_BACKUP_SUFFIX","createFileBackup","filePath","fsExtra","backupPath","restoreFileBackup","deleteFileBackup","TAILWIND_EXTENSION_ID","CONFIG_FILE_KEY","CLASS_FUNCTIONS_KEY","CLASS_FUNCTIONS","FORMATTING_OPTIONS","updateVSCodeSettings","cssPath","configFile","vscodeDir","settingsPath","extensionsPath","vscodeSpinner","settingsUpdated","upsertSettings","extensionsUpdated","upsertExtension","text","changed","parse","applyEdits","modify","existing","length","fn","parsed","recommendations","edits","code","initOptionsSchema","val","rawConfigSchema","init","Command","NEUTRAL_THEME_NAMES","FONT_VARIANT_NAMES","opts","shadowConfig","createConfig","componentsJsonPath","existingConfig","baseConfig","item","deepmerge","runInit","newProjectTemplate","preflight","getConfig","projectConfig","getProjectConfig","configResult","promptForMinimalConfig","promptForConfig","proceed","themeName","neutralName","DEFAULT_NEUTRAL_THEME","fontVariantName","DEFAULT_FONT_VARIANT","componentSpinner","mergeConfig","base","override","fullConfig","resolveConfigPaths","defaultConfig","fontVariants","getFontVariants","THEMES","theme","NEUTRAL_THEMES","variant","DEFAULT_TAILWIND_CSS","DEFAULT_TAILWIND_CONFIG","DEFAULT_COMPONENTS","DEFAULT_UTILS","cssVariables","iconLibrary","preFlightAdd","updateAppIndex","indexPath","registryItem","addOptionsSchema","add","initialConfig","itemType","shouldInstallBaseStyle","isUniversalRegistryItem","confirm","promptForRegistryComponents","deprecatedComponents","DEPRECATED_COMPONENTS","initHasRun","shouldUpdateAppIndex","registryIndex","getcreateuiRegistryIndex","entry","preFlightBuild","resolvePaths","buildOptionsSchema","build","registry","be","oe","registrySchema","buildSpinner","createui_URL","CREATE_TEMPLATES","create","createUrl","getcreateuiCreateUrl","open","enteredName","validateProjectName","selectedTemplate","presetResult","handlePresetOption","initUrl","baseColor","buildInitUrl","registryBaseConfig","templateFiles","getTemplateFiles","preset","getcreateuiInitUrl","presetArg","presets","getPresets","selectedPreset","url","isUrl","getPreset","presetNames","dedent","updateOptionsSchema","diff","targetDir","projectComponents","componentsWithUpdates","changes","diffComponent","change","printDiff","payload","fetchTree","getItemTargetPath","fileContent","registryContent","transform","patch","diffLines","info","createui_MCP_PACKAGE","CLIENTS","DEPENDENCIES","mcp","transport","StdioServerTransport","server","mcpInitOptionsSchema","client","installCommand","devFlag","installSpinner","configSpinner","configPath","runMcpInit","overwriteMerge","sourceArray","clientInfo","dir","mergedConfig","migrateIcons","uiPath","registryIcons","fg","getRegistryIcons","libraryChoices","LEGACY_ICON_LIBRARIES","migrateOptions","sourceLibrary","targetLibrary","migrationSpinner","migrateIconsFile","iconsMapping","sourceLibraryImport","targetLibraryImport","tmpdir","project","tempFile","randomBytes","targetedIcons","importDeclaration","specifier","iconName","targetedIcon","icon","toPascalCase","str","processNamedImports","isTypeOnly","packageName","namedImportList","importItem","inlineTypeMatch","aliasMatch","importAlias","migrateRadix","foundPackages","replacedPackages","migrateRadixFile","packageSpinner","foundPackagesArray","dependencyTypes","depType","radixImportPattern","linesToRemove","quoteStyle","hasSemicolon","match","fullMatch","typeKeyword","namespaceAlias","semicolon","componentName","uniqueImports","index","self","i","unifiedImport","typePrefix","acc","line","transformedLine","offset","string","beforeMatch","openQuotes","openSingleQuotes","uniqueReplacedPackages","preFlightMigrate","migrations","migrateOptionsSchema","migration","migrate","preFlightRegistryBuild","buildRegistry","ue","resolvedRegistry","resolveRegistryItems","absPath","err","results","recursivelyResolveFileImports","searchOptionsSchema","search","registries","partialConfig","searchRegistries","SKILL_NAME","skillOptionsSchema","getBundledSkillDir","here","fileURLToPath","skill","source","baseDir","scopeLabel","target","overwrite","src","viewOptionsSchema","view","items","package_default","main","program"],"mappings":"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","file":"index.js","sourcesContent":["import path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightInit(\n options: z.infer<typeof initOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n projectInfo: null,\n }\n }\n\n const projectSpinner = spinner(`Preflight checks.`, {\n silent: options.silent,\n }).start()\n\n if (\n fs.existsSync(path.resolve(options.cwd, \"components.json\")) &&\n !options.force\n ) {\n projectSpinner?.fail()\n logger.break()\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file already exists at ${highlighter.info(\n options.cwd\n )}.\\nTo start over, remove the ${highlighter.info(\n \"components.json\"\n )} file and run ${highlighter.info(\"init\")} again.`\n )\n logger.break()\n process.exit(1)\n }\n\n projectSpinner?.succeed()\n\n const frameworkSpinner = spinner(`Verifying framework.`, {\n silent: options.silent,\n }).start()\n const projectInfo = await getProjectInfo(options.cwd)\n if (!projectInfo || projectInfo?.framework.name === \"manual\") {\n errors[ERRORS.UNSUPPORTED_FRAMEWORK] = true\n frameworkSpinner?.fail()\n logger.break()\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `We could not detect a supported framework at ${highlighter.info(\n options.cwd\n )}.\\n` +\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to manually configure your project.\\nOnce configured, you can use the cli to add components.`\n )\n }\n logger.break()\n process.exit(1)\n }\n frameworkSpinner?.succeed(\n `Verifying framework. Found ${highlighter.info(\n projectInfo.framework.label\n )}.`\n )\n\n const tailwindSpinnerMessage =\n projectInfo.tailwindVersion === \"v4\"\n ? `Validating Tailwind CSS config. Found ${highlighter.info(\"v4\")}.`\n : \"Validating Tailwind CSS.\"\n\n const tailwindSpinner = spinner(tailwindSpinnerMessage, {\n silent: options.silent,\n }).start()\n if (\n (projectInfo.tailwindVersion === \"v4\" && !projectInfo?.tailwindCssFile) ||\n !projectInfo.tailwindVersion\n ) {\n errors[ERRORS.TAILWIND_NOT_CONFIGURED] = true\n tailwindSpinner?.fail()\n } else {\n tailwindSpinner?.succeed()\n }\n\n const tsConfigSpinner = spinner(`Validating import alias.`, {\n silent: options.silent,\n }).start()\n if (!projectInfo?.aliasPrefix) {\n errors[ERRORS.IMPORT_ALIAS_MISSING] = true\n tsConfigSpinner?.fail()\n } else {\n tsConfigSpinner?.succeed()\n }\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.TAILWIND_NOT_CONFIGURED]) {\n logger.break()\n logger.error(\n `No Tailwind CSS configuration found at ${highlighter.info(\n options.cwd\n )}.`\n )\n logger.error(\n `It is likely you do not have Tailwind CSS installed or have an invalid configuration.`\n )\n logger.error(`Install Tailwind CSS then try again.`)\n if (projectInfo?.framework.links.tailwind) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.tailwind\n )} to get started.`\n )\n }\n }\n\n if (errors[ERRORS.IMPORT_ALIAS_MISSING]) {\n logger.break()\n logger.error(`No import alias found in your tsconfig.json file.`)\n if (projectInfo?.framework.links.installation) {\n logger.error(\n `Visit ${highlighter.info(\n projectInfo?.framework.links.installation\n )} to learn how to set an import alias.`\n )\n }\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n projectInfo,\n }\n}\n","import path from \"path\"\n\nexport function isSafeTarget(targetPath: string, cwd: string): boolean {\n // Check for null bytes which can be used to bypass validations.\n if (targetPath.includes(\"\\0\")) {\n return false\n }\n\n // Decode URL-encoded sequences to catch encoded traversal attempts.\n let decodedPath: string\n try {\n // Decode multiple times to catch double-encoded sequences.\n decodedPath = targetPath\n let prevPath = \"\"\n while (decodedPath !== prevPath && decodedPath.includes(\"%\")) {\n prevPath = decodedPath\n decodedPath = decodeURIComponent(decodedPath)\n }\n } catch {\n // If decoding fails, treat as unsafe.\n return false\n }\n\n // Normalize both paths to handle different path separators.\n // Convert Windows backslashes to forward slashes for consistent handling.\n const normalizedTarget = path.normalize(decodedPath.replace(/\\\\/g, \"/\"))\n const normalizedRoot = path.normalize(cwd)\n\n // Check for explicit path traversal sequences in both encoded and decoded forms.\n // Allow [...] pattern which is common in framework routing (e.g., [...slug])\n const hasPathTraversal = (path: string) => {\n // Remove [...] patterns before checking for ..\n const withoutBrackets = path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n return withoutBrackets.includes(\"..\")\n }\n\n if (\n hasPathTraversal(normalizedTarget) ||\n hasPathTraversal(decodedPath) ||\n hasPathTraversal(targetPath)\n ) {\n return false\n }\n\n // Check for current directory references that might be used in traversal.\n // First, remove [...] patterns to avoid false positives\n const cleanPath = (path: string) => path.replace(/\\[\\.\\.\\..*?\\]/g, \"\")\n const cleanTarget = cleanPath(targetPath)\n const cleanDecoded = cleanPath(decodedPath)\n\n const suspiciousPatterns = [\n /\\.\\.[\\/\\\\]/, // ../ or ..\\\n /[\\/\\\\]\\.\\./, // /.. or \\..\n /\\.\\./, // .. anywhere\n /\\.\\.%/, // URL encoded traversal\n /\\x00/, // null byte\n /[\\x01-\\x1f]/, // control characters\n ]\n\n if (\n suspiciousPatterns.some(\n (pattern) => pattern.test(cleanTarget) || pattern.test(cleanDecoded)\n )\n ) {\n return false\n }\n\n // Allow ~/ at the start (home directory expansion within project) but reject ~/../ patterns.\n if (\n (targetPath.includes(\"~\") || decodedPath.includes(\"~\")) &&\n (targetPath.includes(\"../\") || decodedPath.includes(\"../\"))\n ) {\n return false\n }\n\n // Check for Windows drive letters (even on non-Windows systems for safety).\n const driveLetterRegex = /^[a-zA-Z]:[\\/\\\\]/\n if (driveLetterRegex.test(decodedPath)) {\n // On Windows, check if it starts with the project root.\n if (process.platform === \"win32\") {\n return decodedPath.toLowerCase().startsWith(cwd.toLowerCase())\n }\n // On non-Windows systems, reject all Windows absolute paths.\n return false\n }\n\n // If it's an absolute path, ensure it's within the project root.\n if (path.isAbsolute(normalizedTarget)) {\n return normalizedTarget.startsWith(normalizedRoot + path.sep)\n }\n\n // For relative paths, resolve and check if within project bounds.\n const resolvedPath = path.resolve(normalizedRoot, normalizedTarget)\n return (\n resolvedPath.startsWith(normalizedRoot + path.sep) ||\n resolvedPath === normalizedRoot\n )\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemCssSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Declaration from \"postcss/lib/declaration\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\nexport async function updateCss(\n css: z.infer<typeof registryItemCssSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (\n !config.resolvedPaths.tailwindCss ||\n !css ||\n Object.keys(css).length === 0\n ) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssSpinner = spinner(\n `Updating ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCss(raw, css)\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssSpinner.succeed()\n}\n\nexport async function transformCss(\n input: string,\n css: z.infer<typeof registryItemCssSchema>\n) {\n const plugins = [updateCssPlugin(css)]\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n // PostCSS doesn't add semicolons to at-rules without bodies when they're the last node.\n // We need to manually ensure they have semicolons.\n const root = result.root\n if (root.nodes && root.nodes.length > 0) {\n const lastNode = root.nodes[root.nodes.length - 1]\n if (\n lastNode.type === \"atrule\" &&\n !lastNode.nodes &&\n !output.trimEnd().endsWith(\";\")\n ) {\n output = output.trimEnd() + \";\"\n }\n }\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n output = output.trimEnd()\n\n return output\n}\n\nfunction updateCssPlugin(css: z.infer<typeof registryItemCssSchema>) {\n return {\n postcssPlugin: \"update-css\",\n Once(root: Root) {\n for (const [selector, properties] of Object.entries(css)) {\n if (selector.startsWith(\"@\")) {\n // Handle at-rules (@layer, @utility, etc.)\n const atRuleMatch = selector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (!atRuleMatch) continue\n\n const [, name, params] = atRuleMatch\n\n // Special handling for imports - place them at the top.\n if (name === \"import\") {\n // Check if this import already exists.\n const existingImport = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"import\" &&\n node.params === params\n )\n\n if (!existingImport) {\n const importRule = postcss.atRule({\n name: \"import\",\n params,\n raws: { semicolon: true },\n })\n\n // Find the last import to insert after, or insert at beginning.\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (importNodes && importNodes.length > 0) {\n // Insert after the last existing import.\n const lastImport = importNodes[importNodes.length - 1]\n importRule.raws.before = \"\\n\"\n root.insertAfter(lastImport, importRule)\n } else {\n // No imports exist, insert at the very beginning.\n // Check if the file is empty.\n if (!root.nodes || root.nodes.length === 0) {\n importRule.raws.before = \"\"\n } else {\n importRule.raws.before = \"\"\n }\n root.prepend(importRule)\n }\n }\n }\n // Special handling for plugins - place them after imports.\n else if (name === \"plugin\") {\n // Ensure plugin name is quoted if not already.\n let quotedParams = params\n if (params && !params.startsWith('\"') && !params.startsWith(\"'\")) {\n quotedParams = `\"${params}\"`\n }\n\n // Normalize params for comparison (remove quotes).\n const normalizeParams = (p: string) => {\n if (p.startsWith('\"') && p.endsWith('\"')) {\n return p.slice(1, -1)\n }\n if (p.startsWith(\"'\") && p.endsWith(\"'\")) {\n return p.slice(1, -1)\n }\n return p\n }\n\n // Find existing plugin with same normalized params.\n const existingPlugin = root.nodes?.find((node): node is AtRule => {\n if (node.type !== \"atrule\" || node.name !== \"plugin\") {\n return false\n }\n return normalizeParams(node.params) === normalizeParams(params)\n })\n\n if (!existingPlugin) {\n const pluginRule = postcss.atRule({\n name: \"plugin\",\n params: quotedParams,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n // Find the last import or plugin node to insert after\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n const pluginNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n if (pluginNodes && pluginNodes.length > 0) {\n // Insert after the last existing plugin\n const lastPlugin = pluginNodes[pluginNodes.length - 1]\n root.insertAfter(lastPlugin, pluginRule)\n } else if (importNodes && importNodes.length > 0) {\n // Insert after the last import if no plugins exist\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, pluginRule)\n // Add a break comment before the first plugin to create spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports or plugins, insert at the beginning\n root.prepend(pluginRule)\n // Add a break comment before the first plugin for spacing\n root.insertBefore(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n // Add a break comment after the plugin for spacing from other content\n root.insertAfter(\n pluginRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n }\n // Special handling for custom-variant - place after imports, preserving declaration order.\n else if (name === \"custom-variant\") {\n const existing = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"custom-variant\" &&\n node.params === params\n )\n\n if (!existing) {\n const variantNode = postcss.atRule({\n name: \"custom-variant\",\n params,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n const customVariantNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n const importNodes = root.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n if (customVariantNodes && customVariantNodes.length > 0) {\n // Append after the last existing custom-variant to preserve declaration order.\n const lastVariant =\n customVariantNodes[customVariantNodes.length - 1]\n root.insertAfter(lastVariant, variantNode)\n } else if (importNodes && importNodes.length > 0) {\n // First custom-variant: insert after the last import, with a break.\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, variantNode)\n root.insertBefore(\n variantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n root.prepend(variantNode)\n }\n }\n }\n // Check if this is any at-rule with no body (empty object).\n else if (\n typeof properties === \"object\" &&\n Object.keys(properties).length === 0\n ) {\n // Handle any at-rule with no body (e.g., @apply, @tailwind, etc.).\n const atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n const newAtRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true },\n })\n\n root.append(newAtRule)\n root.insertBefore(\n newAtRule,\n postcss.comment({ text: \"---break---\" })\n )\n }\n }\n // Special handling for keyframes - place them under @theme inline.\n else if (name === \"keyframes\") {\n let themeInline = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n ) as AtRule | undefined\n\n if (!themeInline) {\n themeInline = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeInline)\n root.insertBefore(\n themeInline,\n postcss.comment({ text: \"---break---\" })\n )\n }\n\n // Check if a keyframe with the same name already exists\n const existingKeyframesRule = themeInline.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === params\n )\n\n let keyframesRule: AtRule\n if (existingKeyframesRule) {\n // Replace existing keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n existingKeyframesRule.replaceWith(keyframesRule)\n } else {\n // Create new keyframe\n keyframesRule = postcss.atRule({\n name: \"keyframes\",\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n themeInline.append(keyframesRule)\n }\n\n if (typeof properties === \"object\") {\n for (const [step, stepProps] of Object.entries(properties)) {\n processRule(keyframesRule, step, stepProps)\n }\n }\n }\n // Special handling for utility classes to preserve property values\n else if (name === \"utility\") {\n const utilityAtRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === name &&\n node.params === params\n ) as AtRule | undefined\n\n if (!utilityAtRule) {\n const atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n\n root.append(atRule)\n root.insertBefore(\n atRule,\n postcss.comment({ text: \"---break---\" })\n )\n\n // Add declarations with their values preserved\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n atRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(atRule, prop, value)\n }\n }\n }\n } else {\n // Update existing utility class\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n if (typeof value === \"string\") {\n const existingDecl = utilityAtRule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n existingDecl\n ? existingDecl.replaceWith(decl)\n : utilityAtRule.append(decl)\n } else if (typeof value === \"object\") {\n processRule(utilityAtRule, prop, value)\n }\n }\n }\n }\n }\n // Handle at-property as regular CSS rules\n else if (name === \"property\") {\n processRule(root, selector, properties)\n } else {\n // Handle other at-rules normally\n processAtRule(root, name, params, properties)\n }\n } else {\n // Handle regular CSS rules\n processRule(root, selector, properties)\n }\n }\n },\n }\n}\n\nfunction processAtRule(\n root: Root | AtRule,\n name: string,\n params: string,\n properties: any\n) {\n // Find or create the at-rule\n let atRule = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === name && node.params === params\n ) as AtRule | undefined\n\n if (!atRule) {\n atRule = postcss.atRule({\n name,\n params,\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(atRule)\n root.insertBefore(atRule, postcss.comment({ text: \"---break---\" }))\n }\n\n // Process children of this at-rule\n if (typeof properties === \"object\") {\n for (const [childSelector, childProps] of Object.entries(properties)) {\n if (childSelector.startsWith(\"@\")) {\n // Nested at-rule\n const nestedMatch = childSelector.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (nestedMatch) {\n const [, nestedName, nestedParams] = nestedMatch\n processAtRule(atRule, nestedName, nestedParams, childProps)\n }\n } else {\n // CSS rule within at-rule\n processRule(atRule, childSelector, childProps)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the at-rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Create a rule for the at-rule if needed\n const rule = postcss.rule({\n selector: \"temp\",\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule.append(clone)\n }\n })\n\n // Only add the rule if it has declarations\n if (rule.nodes?.length) {\n atRule.append(rule)\n }\n }\n } catch (error) {\n console.error(\"Error parsing at-rule content:\", properties, error)\n throw error\n }\n }\n}\n\nfunction processRule(parent: Root | AtRule, selector: string, properties: any) {\n let rule = parent.nodes?.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === selector\n ) as Rule | undefined\n\n if (!rule) {\n rule = postcss.rule({\n selector,\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n parent.append(rule)\n }\n\n if (typeof properties === \"object\") {\n for (const [prop, value] of Object.entries(properties)) {\n // Check if this is any at-rule with empty object (no body).\n if (\n prop.startsWith(\"@\") &&\n typeof value === \"object\" &&\n value !== null &&\n Object.keys(value).length === 0\n ) {\n // Parse the at-rule.\n const atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/)\n if (atRuleMatch) {\n const [, atRuleName, atRuleParams] = atRuleMatch\n const atRule = postcss.atRule({\n name: atRuleName,\n params: atRuleParams,\n raws: { semicolon: true, before: \"\\n \" },\n })\n rule.append(atRule)\n }\n } else if (typeof value === \"string\") {\n const decl = postcss.decl({\n prop,\n value: value,\n raws: { semicolon: true, before: \"\\n \" },\n })\n\n // Replace existing property or add new one.\n const existingDecl = rule.nodes?.find(\n (node): node is Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n existingDecl ? existingDecl.replaceWith(decl) : rule.append(decl)\n } else if (typeof value === \"object\") {\n // Nested selector (including & selectors).\n const nestedSelector = prop.startsWith(\"&\")\n ? selector.replace(/^([^:]+)/, `$1${prop.substring(1)}`)\n : prop // Use the original selector for other nested elements.\n processRule(parent, nestedSelector, value)\n }\n }\n } else if (typeof properties === \"string\") {\n // Direct string content for the rule\n try {\n // Parse the CSS string with PostCSS\n const parsed = postcss.parse(`.temp{${properties}}`)\n const tempRule = parsed.first as Rule\n\n if (tempRule && tempRule.nodes) {\n // Copy all declarations from the temp rule to our actual rule\n tempRule.nodes.forEach((node) => {\n if (node.type === \"decl\") {\n const clone = node.clone()\n clone.raws.before = \"\\n \"\n rule?.append(clone)\n }\n })\n }\n } catch (error) {\n console.error(\"Error parsing rule content:\", selector, properties, error)\n throw error\n }\n }\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n registryItemCssVarsSchema,\n registryItemTailwindSchema,\n} from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport postcss from \"postcss\"\nimport AtRule from \"postcss/lib/at-rule\"\nimport Root from \"postcss/lib/root\"\nimport Rule from \"postcss/lib/rule\"\nimport { z } from \"zod\"\n\n// Responsive value system\n// Categories whose values are numeric and get a `px` unit suffix.\nconst RESPONSIVE_CATEGORIES = new Set([\"text\", \"spacing\", \"radius\"])\n\nexport function formatResponsiveValue(value: string): string {\n const trimmed = value.trim()\n if (trimmed === \"\" || isNaN(Number(trimmed))) {\n return trimmed\n }\n return `${trimmed}px`\n}\n\nexport interface ResponsiveBreakdown {\n desktop: Record<string, string>\n tablet: Record<string, string>\n mobile: Record<string, string>\n}\n\n// Keys ending with these suffixes should never get a px unit suffix.\nconst NO_PX_SUFFIXES = [\"--font-weight\"]\n\nexport function splitResponsiveVars(\n vars: Record<string, string>,\n category: string\n): ResponsiveBreakdown {\n const categoryAddsUnit = RESPONSIVE_CATEGORIES.has(category)\n const desktop: Record<string, string> = {}\n const tablet: Record<string, string> = {}\n const mobile: Record<string, string> = {}\n\n for (const [key, rawValue] of Object.entries(vars)) {\n const addUnit =\n categoryAddsUnit && !NO_PX_SUFFIXES.some((suffix) => key.endsWith(suffix))\n\n if (rawValue.includes(\"|\")) {\n const [d, t, m] = rawValue.split(\"|\").map((s) => s.trim())\n desktop[key] = addUnit ? formatResponsiveValue(d) : d\n // Only include tablet if different from desktop\n if (t !== d) {\n tablet[key] = addUnit ? formatResponsiveValue(t) : t\n }\n // Only include mobile if different from tablet\n if (m !== t) {\n mobile[key] = addUnit ? formatResponsiveValue(m) : m\n }\n } else {\n desktop[key] = addUnit ? formatResponsiveValue(rawValue) : rawValue\n }\n }\n\n return { desktop, tablet, mobile }\n}\n\n/**\n * Reconstructs full CSS variable names from category + short keys.\n * Empty key → category name only (e.g. \"\" in radius → \"radius\").\n * Non-empty key → \"category-key\" (e.g. \"sm\" in radius → \"radius-sm\").\n */\nexport function expandKeys(\n category: string,\n vars: Record<string, string>\n): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(vars)) {\n result[key ? `${category}-${key}` : category] = value\n }\n return result\n}\n\nexport async function updateCssVars(\n cssVars: z.infer<typeof registryItemCssVarsSchema> | undefined,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n overwriteCssVars?: boolean\n initIndex?: boolean\n silent?: boolean\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n }\n) {\n if (!config.resolvedPaths.tailwindCss || !Object.keys(cssVars ?? {}).length) {\n return\n }\n\n options = {\n cleanupDefaultNextStyles: false,\n silent: false,\n overwriteCssVars: false,\n initIndex: true,\n ...options,\n }\n const cssFilepath = config.resolvedPaths.tailwindCss\n const cssFilepathRelative = path.relative(\n config.resolvedPaths.cwd,\n cssFilepath\n )\n const cssVarsSpinner = spinner(\n `Updating CSS variables in ${highlighter.info(cssFilepathRelative)}`,\n {\n silent: options.silent,\n }\n ).start()\n const raw = await fs.readFile(cssFilepath, \"utf8\")\n let output = await transformCssVars(raw, cssVars ?? {}, config, {\n cleanupDefaultNextStyles: options.cleanupDefaultNextStyles,\n tailwindConfig: options.tailwindConfig,\n overwriteCssVars: options.overwriteCssVars,\n initIndex: options.initIndex,\n })\n await fs.writeFile(cssFilepath, output, \"utf8\")\n cssVarsSpinner.succeed()\n}\n\nexport async function transformCssVars(\n input: string,\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n config: Config,\n options: {\n cleanupDefaultNextStyles?: boolean\n tailwindConfig?: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n overwriteCssVars?: boolean\n initIndex?: boolean\n } = {\n cleanupDefaultNextStyles: false,\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n }\n) {\n options = {\n cleanupDefaultNextStyles: false,\n tailwindConfig: undefined,\n overwriteCssVars: false,\n initIndex: false,\n ...options,\n }\n\n let plugins: postcss.AcceptedPlugin[] = []\n\n // Only add tw-animate-css if project does not have tailwindcss-animate\n if (config.resolvedPaths?.cwd) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd)\n if (\n !packageInfo?.dependencies?.[\"tailwindcss-animate\"] &&\n !packageInfo?.devDependencies?.[\"tailwindcss-animate\"] &&\n options.initIndex\n ) {\n plugins.push(addCustomImport({ params: \"tw-animate-css\" }))\n }\n }\n\n if (options.cleanupDefaultNextStyles) {\n plugins.push(cleanupDefaultNextStylesPlugin())\n }\n\n plugins.push(\n updateCssVarsPluginV4(cssVars, {\n overwriteCssVars: options.overwriteCssVars,\n })\n )\n plugins.push(updateThemePlugin(cssVars))\n\n if (options.tailwindConfig) {\n plugins.push(updateTailwindConfigPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigAnimationPlugin(options.tailwindConfig))\n plugins.push(updateTailwindConfigKeyframesPlugin(options.tailwindConfig))\n }\n\n const result = await postcss(plugins).process(input, {\n from: undefined,\n })\n\n let output = result.css\n\n output = output.replace(/\\/\\* ---break--- \\*\\//g, \"\")\n output = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\")\n\n return output\n}\n\nfunction updateBaseLayerPlugin() {\n return {\n postcssPlugin: \"update-base-layer\",\n Once(root: Root) {\n const requiredRules = [\n {\n selector: \"*\",\n apply: \"border-border outline-ring/50\",\n },\n { selector: \"body\", apply: \"bg-white text-strongest\" },\n ]\n\n let baseLayer = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"layer\" &&\n node.params === \"base\" &&\n requiredRules.every(({ selector, apply }) =>\n node.nodes?.some(\n (rule): rule is Rule =>\n rule.type === \"rule\" &&\n rule.selector === selector &&\n rule.nodes.some(\n (applyRule): applyRule is AtRule =>\n applyRule.type === \"atrule\" &&\n applyRule.name === \"apply\" &&\n applyRule.params === apply\n )\n )\n )\n ) as AtRule | undefined\n\n if (!baseLayer) {\n baseLayer = postcss.atRule({\n name: \"layer\",\n params: \"base\",\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(baseLayer)\n root.insertBefore(baseLayer, postcss.comment({ text: \"---break---\" }))\n }\n\n requiredRules.forEach(({ selector, apply }) => {\n const existingRule = baseLayer?.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!existingRule) {\n baseLayer?.append(\n postcss.rule({\n selector,\n nodes: [\n postcss.atRule({\n name: \"apply\",\n params: apply,\n raws: { semicolon: true, before: \"\\n \" },\n }),\n ],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n )\n }\n })\n },\n }\n}\n\nfunction removeConflictVars(root: Rule | Root) {\n const rootRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \":root\"\n )\n\n if (rootRule) {\n const propsToRemove = [\"--background\", \"--foreground\"]\n\n rootRule.nodes\n .filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && propsToRemove.includes(node.prop)\n )\n .forEach((node) => node.remove())\n\n if (rootRule.nodes.length === 0) {\n rootRule.remove()\n }\n }\n}\n\nfunction cleanupDefaultNextStylesPlugin() {\n return {\n postcssPlugin: \"cleanup-default-next-styles\",\n Once(root: Root) {\n const bodyRule = root.nodes.find(\n (node): node is Rule => node.type === \"rule\" && node.selector === \"body\"\n )\n if (bodyRule) {\n // Remove color from the body node.\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"color\" &&\n [\"rgb(var(--foreground-rgb))\", \"var(--foreground)\"].includes(\n node.value\n )\n )\n ?.remove()\n\n // Remove background: linear-gradient.\n bodyRule.nodes\n .find((node): node is postcss.Declaration => {\n return (\n node.type === \"decl\" &&\n node.prop === \"background\" &&\n // This is only going to run on create project, so all good.\n (node.value.startsWith(\"linear-gradient\") ||\n node.value === \"var(--background)\")\n )\n })\n ?.remove()\n\n // Remove font-family: Arial, Helvetica, sans-serif;\n bodyRule.nodes\n .find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" &&\n node.prop === \"font-family\" &&\n node.value === \"Arial, Helvetica, sans-serif\"\n )\n ?.remove()\n\n // If the body rule is empty, remove it.\n if (bodyRule.nodes.length === 0) {\n bodyRule.remove()\n }\n }\n\n removeConflictVars(root)\n\n const darkRootRule = root.nodes.find(\n (node): node is Rule =>\n node.type === \"atrule\" &&\n node.params === \"(prefers-color-scheme: dark)\"\n )\n\n if (darkRootRule) {\n removeConflictVars(darkRootRule)\n if (darkRootRule.nodes.length === 0) {\n darkRootRule.remove()\n }\n }\n },\n }\n}\n\nfunction updateCssVarsPluginV4(\n cssVars: z.infer<typeof registryItemCssVarsSchema>,\n options: {\n overwriteCssVars?: boolean\n }\n) {\n return {\n postcssPlugin: \"update-css-vars-v4\",\n Once(root: Root) {\n // Helper to upsert vars into a :root or .dark rule\n const upsertVarsIntoRule = (\n selector: string,\n vars: Record<string, string>\n ) => {\n let ruleNode = root.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode && Object.keys(vars).length > 0) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(ruleNode)\n root.insertBefore(ruleNode, postcss.comment({ text: \"---break---\" }))\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n\n if (isLocalHSLValue(value)) {\n value = `hsl(${value})`\n }\n\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n\n if (options.overwriteCssVars) {\n if (existingDecl) {\n existingDecl.replaceWith(newDecl)\n } else {\n ruleNode?.append(newDecl)\n }\n } else {\n if (!existingDecl) {\n ruleNode?.append(newDecl)\n }\n }\n })\n }\n\n // Helper to upsert vars into a media query at root level\n const upsertMediaQueryVars = (\n maxWidth: string,\n selector: string,\n vars: Record<string, string>\n ) => {\n if (Object.keys(vars).length === 0) return\n\n const mediaParams = `(max-width: ${maxWidth})`\n let mediaNode = root.nodes?.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"media\" &&\n node.params === mediaParams\n ) as AtRule | undefined\n\n if (!mediaNode) {\n mediaNode = postcss.atRule({\n name: \"media\",\n params: mediaParams,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(mediaNode)\n root.insertBefore(mediaNode, postcss.comment({ text: \"---break---\" }))\n }\n\n let ruleNode = mediaNode.nodes?.find(\n (node): node is Rule =>\n node.type === \"rule\" && node.selector === selector\n )\n\n if (!ruleNode) {\n ruleNode = postcss.rule({\n selector,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n mediaNode.append(ruleNode)\n }\n\n Object.entries(vars).forEach(([key, value]) => {\n const prop = `--${key.replace(/^--/, \"\")}`\n const newDecl = postcss.decl({\n prop,\n value,\n raws: { semicolon: true },\n })\n const existingDecl = ruleNode?.nodes.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n if (options.overwriteCssVars) {\n existingDecl\n ? existingDecl.replaceWith(newDecl)\n : ruleNode?.append(newDecl)\n } else {\n if (!existingDecl) ruleNode?.append(newDecl)\n }\n })\n }\n\n // Iterate categories, then light/dark within each\n for (const [category, modes] of Object.entries(cssVars)) {\n if (RESPONSIVE_CATEGORIES.has(category)) {\n if (modes.light) {\n const { desktop, tablet, mobile } = splitResponsiveVars(\n modes.light,\n category\n )\n upsertVarsIntoRule(\":root\", expandKeys(category, desktop))\n upsertMediaQueryVars(\n \"1279px\",\n \":root\",\n expandKeys(category, tablet)\n )\n upsertMediaQueryVars(\"767px\", \":root\", expandKeys(category, mobile))\n }\n if (modes.dark) {\n const { desktop, tablet, mobile } = splitResponsiveVars(\n modes.dark,\n category\n )\n upsertVarsIntoRule(\".dark\", expandKeys(category, desktop))\n upsertMediaQueryVars(\n \"1279px\",\n \".dark\",\n expandKeys(category, tablet)\n )\n upsertMediaQueryVars(\"767px\", \".dark\", expandKeys(category, mobile))\n }\n } else {\n if (modes.light) {\n upsertVarsIntoRule(\":root\", expandKeys(category, modes.light))\n }\n if (modes.dark) {\n upsertVarsIntoRule(\".dark\", expandKeys(category, modes.dark))\n }\n }\n }\n },\n }\n}\n\nfunction updateThemePlugin(cssVars: z.infer<typeof registryItemCssVarsSchema>) {\n return {\n postcssPlugin: \"update-theme\",\n Once(root: Root) {\n // Skip if there are no categories with variables\n if (Object.keys(cssVars).length === 0) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n\n // Collect all unique keys across all categories and modes\n for (const [category, modes] of Object.entries(cssVars)) {\n const keys = Array.from(\n new Set([\n ...Object.keys(modes.light ?? {}),\n ...Object.keys(modes.dark ?? {}),\n ])\n )\n\n for (const key of keys) {\n const varName = key ? `${category}-${key}` : category\n const prop = `--${varName}`\n const propValue = `var(--${varName})`\n\n const existingDecl = themeNode?.nodes?.find(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop === prop\n )\n if (!existingDecl) {\n themeNode?.append(\n postcss.decl({\n prop,\n value: propValue,\n raws: { semicolon: true },\n })\n )\n }\n }\n }\n },\n }\n}\n\nfunction upsertThemeNode(root: Root): AtRule {\n let themeNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" &&\n node.name === \"theme\" &&\n node.params === \"inline\"\n )\n\n if (!themeNode) {\n themeNode = postcss.atRule({\n name: \"theme\",\n params: \"inline\",\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n\" },\n })\n root.append(themeNode)\n root.insertBefore(themeNode, postcss.comment({ text: \"---break---\" }))\n }\n\n return themeNode\n}\n\nfunction addCustomImport({ params }: { params: string }) {\n return {\n postcssPlugin: \"add-custom-import\",\n Once(root: Root) {\n const importNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"import\"\n )\n\n // Find custom variant node (to ensure we insert before it)\n const customVariantNode = root.nodes.find(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"custom-variant\"\n )\n\n // Check if our specific import already exists\n const hasImport = importNodes.some(\n (node) => node.params.replace(/[\"']/g, \"\") === params\n )\n\n if (!hasImport) {\n const importNode = postcss.atRule({\n name: \"import\",\n params: `\"${params}\"`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n\n if (importNodes.length > 0) {\n // If there are existing imports, add after the last import\n const lastImport = importNodes[importNodes.length - 1]\n root.insertAfter(lastImport, importNode)\n } else if (customVariantNode) {\n // If no imports but has custom-variant, insert before it\n root.insertBefore(customVariantNode, importNode)\n root.insertBefore(\n customVariantNode,\n postcss.comment({ text: \"---break---\" })\n )\n } else {\n // If no imports and no custom-variant, insert at the start\n root.prepend(importNode)\n root.insertAfter(importNode, postcss.comment({ text: \"---break---\" }))\n }\n }\n },\n }\n}\n\nfunction updateTailwindConfigPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config\",\n Once(root: Root) {\n if (!tailwindConfig?.plugins) {\n return\n }\n\n const quoteType = getQuoteType(root)\n const quote = quoteType === \"single\" ? \"'\" : '\"'\n\n const pluginNodes = root.nodes.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"plugin\"\n )\n\n const lastPluginNode =\n pluginNodes[pluginNodes.length - 1] || root.nodes[0]\n\n for (const plugin of tailwindConfig.plugins) {\n const pluginName = plugin.replace(/^require\\([\"']|[\"']\\)$/g, \"\")\n\n // Check if the plugin is already present.\n if (\n pluginNodes.some((node) => {\n return node.params.replace(/[\"']/g, \"\") === pluginName\n })\n ) {\n continue\n }\n\n const pluginNode = postcss.atRule({\n name: \"plugin\",\n params: `${quote}${pluginName}${quote}`,\n raws: { semicolon: true, before: \"\\n\" },\n })\n root.insertAfter(lastPluginNode, pluginNode)\n root.insertBefore(pluginNode, postcss.comment({ text: \"---break---\" }))\n }\n },\n }\n}\n\nfunction updateTailwindConfigKeyframesPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-keyframes\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.keyframes) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingKeyFrameNodes = themeNode.nodes?.filter(\n (node): node is AtRule =>\n node.type === \"atrule\" && node.name === \"keyframes\"\n )\n\n const keyframeValueSchema = z.record(\n z.string(),\n z.record(z.string(), z.string())\n )\n\n for (const [keyframeName, keyframeValue] of Object.entries(\n tailwindConfig.theme.extend.keyframes\n )) {\n if (typeof keyframeName !== \"string\") {\n continue\n }\n\n const parsedKeyframeValue = keyframeValueSchema.safeParse(keyframeValue)\n\n if (!parsedKeyframeValue.success) {\n continue\n }\n\n if (\n existingKeyFrameNodes?.find(\n (node): node is postcss.AtRule =>\n node.type === \"atrule\" &&\n node.name === \"keyframes\" &&\n node.params === keyframeName\n )\n ) {\n continue\n }\n\n const keyframeNode = postcss.atRule({\n name: \"keyframes\",\n params: keyframeName,\n nodes: [],\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n\n for (const [key, values] of Object.entries(parsedKeyframeValue.data)) {\n const rule = postcss.rule({\n selector: key,\n nodes: Object.entries(values).map(([key, value]) =>\n postcss.decl({\n prop: key,\n value,\n raws: { semicolon: true, before: \"\\n \", between: \": \" },\n })\n ),\n raws: { semicolon: true, between: \" \", before: \"\\n \" },\n })\n keyframeNode.append(rule)\n }\n\n themeNode.append(keyframeNode)\n themeNode.insertBefore(\n keyframeNode,\n postcss.comment({ text: \"---break---\" })\n )\n }\n },\n }\n}\n\nfunction updateTailwindConfigAnimationPlugin(\n tailwindConfig: z.infer<typeof registryItemTailwindSchema>[\"config\"]\n) {\n return {\n postcssPlugin: \"update-tailwind-config-animation\",\n Once(root: Root) {\n if (!tailwindConfig?.theme?.extend?.animation) {\n return\n }\n\n const themeNode = upsertThemeNode(root)\n const existingAnimationNodes = themeNode.nodes?.filter(\n (node): node is postcss.Declaration =>\n node.type === \"decl\" && node.prop.startsWith(\"--animate-\")\n )\n\n const parsedAnimationValue = z\n .record(z.string(), z.string())\n .safeParse(tailwindConfig.theme.extend.animation)\n if (!parsedAnimationValue.success) {\n return\n }\n\n for (const [key, value] of Object.entries(parsedAnimationValue.data)) {\n const prop = `--animate-${key}`\n if (\n existingAnimationNodes?.find(\n (node): node is postcss.Declaration => node.prop === prop\n )\n ) {\n continue\n }\n\n const animationNode = postcss.decl({\n prop,\n value,\n raws: { semicolon: true, between: \": \", before: \"\\n \" },\n })\n themeNode.append(animationNode)\n }\n },\n }\n}\n\nfunction getQuoteType(root: Root): \"single\" | \"double\" {\n const firstNode = root.nodes[0]\n const raw = firstNode.toString()\n\n if (raw.includes(\"'\")) {\n return \"single\"\n }\n return \"double\"\n}\n\nexport function isLocalHSLValue(value: string) {\n if (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\")\n ) {\n return false\n }\n\n const chunks = value.split(\" \")\n\n return (\n chunks.length === 3 &&\n chunks.slice(1, 3).every((chunk) => chunk.includes(\"%\"))\n )\n}\n\nexport function isColorValue(value: string) {\n return (\n value.startsWith(\"hsl\") ||\n value.startsWith(\"rgb\") ||\n value.startsWith(\"#\") ||\n value.startsWith(\"oklch\") ||\n value.includes(\"--color-\") ||\n value.includes(\"--primary-\")\n )\n}\n","import { RegistryItem } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport prompts from \"prompts\"\n\nexport async function updateDependencies(\n dependencies: RegistryItem[\"dependencies\"],\n devDependencies: RegistryItem[\"devDependencies\"],\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n dependencies = Array.from(new Set(dependencies))\n devDependencies = Array.from(new Set(devDependencies))\n\n if (!dependencies?.length && !devDependencies?.length) {\n return\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const dependenciesSpinner = spinner(`Installing dependencies.`, {\n silent: options.silent,\n })?.start()\n const packageManager = await getUpdateDependenciesPackageManager(config)\n\n // Offer to use --force or --legacy-peer-deps if using React 19 with npm.\n let flag = \"\"\n if (shouldPromptForNpmFlag(config) && packageManager === \"npm\") {\n if (options.silent) {\n flag = \"force\"\n } else {\n dependenciesSpinner.stopAndPersist()\n logger.warn(\n \"\\nIt looks like you are using React 19. \\nSome packages may fail to install due to peer dependency issues in npm (see https://createui.co/react-19).\\n\"\n )\n const confirmation = await prompts([\n {\n type: \"select\",\n name: \"flag\",\n message: \"How would you like to proceed?\",\n choices: [\n { title: \"Use --force\", value: \"force\" },\n { title: \"Use --legacy-peer-deps\", value: \"legacy-peer-deps\" },\n ],\n },\n ])\n\n if (confirmation) {\n flag = confirmation.flag\n }\n }\n }\n\n dependenciesSpinner?.start()\n\n await installWithPackageManager(\n packageManager,\n dependencies,\n devDependencies,\n config.resolvedPaths.cwd,\n flag\n )\n\n dependenciesSpinner?.succeed()\n}\n\nfunction shouldPromptForNpmFlag(config: Config) {\n const packageInfo = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageInfo?.dependencies?.react) {\n return false\n }\n\n const hasReact19 = /^(?:\\^|~)?19(?:\\.\\d+)*(?:-.*)?$/.test(\n packageInfo.dependencies.react\n )\n const hasReactDayPicker8 =\n packageInfo.dependencies[\"react-day-picker\"]?.startsWith(\"8\")\n\n return hasReact19 && hasReactDayPicker8\n}\n\nasync function getUpdateDependenciesPackageManager(config: Config) {\n const expoVersion = getPackageInfo(config.resolvedPaths.cwd, false)\n ?.dependencies?.expo\n\n if (expoVersion) {\n // Ensures package versions match the React Native version.\n // https://docs.expo.dev/more/expo-cli/#install\n return \"expo\"\n }\n\n return getPackageManager(config.resolvedPaths.cwd)\n}\n\nasync function installWithPackageManager(\n packageManager: Awaited<\n ReturnType<typeof getUpdateDependenciesPackageManager>\n >,\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n if (packageManager === \"npm\") {\n return installWithNpm(dependencies, devDependencies, cwd, flag)\n }\n\n if (packageManager === \"deno\") {\n return installWithDeno(dependencies, devDependencies, cwd)\n }\n\n if (packageManager === \"expo\") {\n return installWithExpo(dependencies, devDependencies, cwd)\n }\n\n if (dependencies?.length) {\n try {\n await execa(packageManager, [\"add\", ...dependencies], {\n cwd,\n })\n } catch {\n // Batch install failed. Try installing packages individually\n // so that missing/unpublished packages don't block the rest.\n await installIndividually(packageManager, \"add\", dependencies, cwd)\n }\n }\n\n if (devDependencies?.length) {\n try {\n await execa(packageManager, [\"add\", \"-D\", ...devDependencies], { cwd })\n } catch {\n await installIndividually(packageManager, \"add -D\", devDependencies, cwd)\n }\n }\n}\n\nasync function installWithNpm(\n dependencies: string[],\n devDependencies: string[],\n cwd: string,\n flag?: string\n) {\n const flagArgs = flag ? [`--${flag}`] : []\n\n if (dependencies.length) {\n try {\n await execa(\"npm\", [\"install\", ...flagArgs, ...dependencies], { cwd })\n } catch {\n await installIndividually(\n \"npm\",\n `install${flagArgs.length ? ` ${flagArgs.join(\" \")}` : \"\"}`,\n dependencies,\n cwd\n )\n }\n }\n\n if (devDependencies.length) {\n try {\n await execa(\"npm\", [\"install\", ...flagArgs, \"-D\", ...devDependencies], {\n cwd,\n })\n } catch {\n await installIndividually(\n \"npm\",\n `install${flagArgs.length ? ` ${flagArgs.join(\" \")}` : \"\"} -D`,\n devDependencies,\n cwd\n )\n }\n }\n}\n\nasync function installIndividually(\n packageManager: string,\n command: string,\n packages: string[],\n cwd: string\n) {\n const failed: string[] = []\n\n for (const pkg of packages) {\n try {\n await execa(packageManager, [...command.split(\" \"), pkg], { cwd })\n } catch {\n failed.push(pkg)\n }\n }\n\n if (failed.length > 0) {\n logger.warn(\n `\\nFailed to install: ${failed.join(\n \", \"\n )}. You may need to install them manually.\\n`\n )\n }\n}\n\nasync function installWithDeno(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies?.length) {\n await execa(\"deno\", [\"add\", ...dependencies.map((dep) => `npm:${dep}`)], {\n cwd,\n })\n }\n\n if (devDependencies?.length) {\n await execa(\n \"deno\",\n [\"add\", \"-D\", ...devDependencies.map((dep) => `npm:${dep}`)],\n { cwd }\n )\n }\n}\n\nasync function installWithExpo(\n dependencies: string[],\n devDependencies: string[],\n cwd: string\n) {\n if (dependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", ...dependencies], { cwd })\n }\n\n if (devDependencies.length) {\n await execa(\"npx\", [\"expo\", \"install\", \"-- -D\", ...devDependencies], {\n cwd,\n })\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { registryItemEnvVarsSchema } from \"@/src/schema\"\nimport {\n findExistingEnvFile,\n getNewEnvKeys,\n mergeEnvContent,\n} from \"@/src/utils/env-helpers\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { z } from \"zod\"\n\nexport async function updateEnvVars(\n envVars: z.infer<typeof registryItemEnvVarsSchema> | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!envVars || Object.keys(envVars).length === 0) {\n return {\n envVarsAdded: [],\n envFileUpdated: null,\n envFileCreated: null,\n }\n }\n\n options = {\n silent: false,\n ...options,\n }\n\n const envSpinner = spinner(`Adding environment variables.`, {\n silent: options.silent,\n })?.start()\n\n const projectRoot = config.resolvedPaths.cwd\n\n // Find existing env file or use .env.local as default.\n let envFilePath = path.join(projectRoot, \".env.local\")\n const existingEnvFile = findExistingEnvFile(projectRoot)\n\n if (existingEnvFile) {\n envFilePath = existingEnvFile\n }\n\n const envFileExists = existsSync(envFilePath)\n const envFileName = path.basename(envFilePath)\n\n // Convert envVars object to env file format\n const newEnvContent = Object.entries(envVars)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\")\n\n let envVarsAdded: string[] = []\n let envFileUpdated: string | null = null\n let envFileCreated: string | null = null\n\n if (envFileExists) {\n const existingContent = await fs.readFile(envFilePath, \"utf-8\")\n const mergedContent = mergeEnvContent(existingContent, newEnvContent)\n envVarsAdded = getNewEnvKeys(existingContent, newEnvContent)\n\n if (envVarsAdded.length > 0) {\n await fs.writeFile(envFilePath, mergedContent, \"utf-8\")\n envFileUpdated = path.relative(projectRoot, envFilePath)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n } else {\n envSpinner?.stop()\n }\n } else {\n // Create new env file\n await fs.writeFile(envFilePath, newEnvContent + \"\\n\", \"utf-8\")\n envFileCreated = path.relative(projectRoot, envFilePath)\n envVarsAdded = Object.keys(envVars)\n\n envSpinner?.succeed(\n `Added the following variables to ${highlighter.info(envFileName)}:`\n )\n\n if (!options.silent) {\n for (const key of envVarsAdded) {\n logger.log(` ${highlighter.success(\"+\")} ${key}`)\n }\n }\n }\n\n if (!options.silent && envVarsAdded.length > 0) {\n logger.break()\n }\n\n return {\n envVarsAdded,\n envFileUpdated,\n envFileCreated,\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { RegistryFontItem, registryResolvedItemsTreeSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport {\n CallExpression,\n Project,\n ScriptKind,\n SyntaxKind,\n VariableDeclarationKind,\n} from \"ts-morph\"\nimport z from \"zod\"\n\nexport async function massageTreeForFonts(\n tree: z.infer<typeof registryResolvedItemsTreeSchema>,\n config: Config\n) {\n if (!tree.fonts?.length) {\n return tree\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return tree\n }\n\n tree.cssVars ??= {}\n tree.cssVars.font ??= { light: {} }\n tree.cssVars.font.light ??= {}\n\n if (\n projectInfo.framework.name === \"next-app\" ||\n projectInfo.framework.name === \"next-pages\"\n ) {\n for (const font of tree.fonts) {\n tree.cssVars.font.light[font.role] = `var(${font.font.variable})`\n }\n return tree\n }\n\n // Other frameworks self-host fonts via Fontsource: one package and one CSS\n // @import per underlying font. A variant's roles can map to different fonts\n // (e.g. Geist for body, Geist Mono for numeric), so derive each from the font\n // itself, not from the variant name.\n const addedImports = new Set<string>()\n for (const font of tree.fonts) {\n const fontSourceDependency = toFontsourcePackage(font.font)\n\n if (fontSourceDependency && !addedImports.has(fontSourceDependency)) {\n addedImports.add(fontSourceDependency)\n tree.dependencies ??= []\n tree.dependencies.push(fontSourceDependency)\n tree.css ??= {}\n tree.css[`@import \"${fontSourceDependency}\"`] = {}\n }\n\n tree.cssVars.font.light[font.role] = font.font.family\n }\n\n return tree\n}\n\n/**\n * Maps a resolved Google font to its Fontsource package. The slug comes from the\n * next/font import name (`IBM_Plex_Mono` -> `ibm-plex-mono`); a family that\n * advertises a variable axis (\"... Variable\") uses the `@fontsource-variable/*`\n * package, everything else falls back to the always-available static\n * `@fontsource/*` one.\n */\nfunction toFontsourcePackage(font: RegistryFontItem[\"font\"]): string | null {\n if (font.provider !== \"google\" || !font.import) {\n return null\n }\n\n const slug = font.import.toLowerCase().replace(/_/g, \"-\")\n return /variable/i.test(font.family)\n ? `@fontsource-variable/${slug}`\n : `@fontsource/${slug}`\n}\n\nexport async function updateFonts(\n fonts: RegistryFontItem[] | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n if (!fonts?.length) {\n return\n }\n\n const projectInfo = await getProjectInfo(config.resolvedPaths.cwd)\n\n if (!projectInfo) {\n return\n }\n\n if (\n projectInfo.framework.name !== \"next-app\" &&\n projectInfo.framework.name !== \"next-pages\"\n ) {\n return\n }\n\n const fontsSpinner = spinner(\"Updating fonts.\", {\n silent: options.silent,\n })?.start()\n\n try {\n await updateNextFonts(fonts, config, projectInfo)\n fontsSpinner?.succeed(\"Updating fonts.\")\n } catch (error) {\n fontsSpinner?.fail(`Failed to update fonts.`)\n throw error\n }\n}\n\nasync function updateNextFonts(\n fonts: RegistryFontItem[],\n config: Config,\n projectInfo: ProjectInfo\n) {\n // Find layout file.\n const layoutPath = await findLayoutFile(config, projectInfo)\n\n if (!layoutPath) {\n return\n }\n\n const layoutContent = await fs.readFile(layoutPath, \"utf-8\")\n const updatedContent = await transformLayoutFonts(\n layoutContent,\n fonts,\n config\n )\n\n if (updatedContent !== layoutContent) {\n await fs.writeFile(layoutPath, updatedContent, \"utf-8\")\n }\n}\n\nasync function findLayoutFile(\n config: Config,\n projectInfo: ProjectInfo\n): Promise<string | null> {\n const cwd = config.resolvedPaths.cwd\n const isSrcDir = projectInfo.isSrcDir\n const isTsx = projectInfo.isTsx\n const ext = isTsx ? \"tsx\" : \"jsx\"\n\n const possiblePaths = isSrcDir\n ? [`src/app/layout.${ext}`, `app/layout.${ext}`]\n : [`app/layout.${ext}`]\n\n for (const relativePath of possiblePaths) {\n const fullPath = path.join(cwd, relativePath)\n if (existsSync(fullPath)) {\n return fullPath\n }\n }\n\n return null\n}\n\nexport async function transformLayoutFonts(\n input: string,\n fonts: RegistryFontItem[],\n _config: Config\n) {\n const project = new Project({\n compilerOptions: {},\n })\n\n const sourceFile = project.createSourceFile(\"layout.tsx\", input, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Only process Google fonts for now.\n const googleFonts = fonts.filter((f) => f.font.provider === \"google\")\n\n // Track which font variables we're adding.\n const fontVariableNames: string[] = []\n\n // Process Google fonts.\n for (const font of googleFonts) {\n const importName = font.font.import\n if (!importName) {\n continue\n }\n\n // Generate a variable name from the CSS variable (e.g., \"--font-display\" -> \"fontDisplay\").\n // This ensures unique names even when the same physical font serves multiple roles.\n const varName = font.font.variable\n .replace(/^--/, \"\")\n .replace(/-([a-z])/g, (_: string, c: string) => c.toUpperCase())\n\n // Check if import already exists.\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier === \"next/font/google\"\n })\n\n // Build font options.\n const fontOptions = buildFontOptions(font)\n\n if (existingImport) {\n // Check if this specific font is already imported.\n const namedImports = existingImport.getNamedImports()\n const hasImport = namedImports.some((imp) => imp.getName() === importName)\n\n if (!hasImport) {\n existingImport.addNamedImport(importName)\n }\n } else {\n // Add new import.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"next/font/google\",\n namedImports: [importName],\n })\n }\n\n // Check if variable declaration already exists with same variable CSS property.\n const existingVarDecl = findFontVariableDeclaration(\n sourceFile,\n font.font.variable\n )\n\n if (existingVarDecl) {\n // Replace the initializer of the existing declaration.\n existingVarDecl.setInitializer(`${importName}(${fontOptions})`)\n // Update the variable name if different.\n if (existingVarDecl.getName() !== varName) {\n existingVarDecl.rename(varName)\n }\n } else {\n // Find the last import or existing font declaration to insert after.\n const insertPosition = findInsertPosition(sourceFile)\n\n // Add variable declaration.\n const statement = sourceFile.insertVariableStatement(insertPosition, {\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: varName,\n initializer: `${importName}(${fontOptions})`,\n },\n ],\n })\n\n // Add a blank line after the declaration.\n statement.appendWhitespace(\"\\n\")\n }\n\n fontVariableNames.push(varName)\n }\n\n // Collect the CSS variables we're managing.\n const managedVariables = new Set(googleFonts.map((f) => f.font.variable))\n\n // Remove old font variable declarations that aren't part of our new fonts.\n removeOldFontDeclarations(sourceFile, managedVariables)\n\n // Clean up unused next/font/google imports.\n cleanupUnusedFontImports(sourceFile)\n\n // Update html className to include font variables.\n if (fontVariableNames.length > 0) {\n updateHtmlClassName(sourceFile, fontVariableNames)\n }\n\n // Clean up body className to remove references to removed font variables.\n cleanupBodyClassName(sourceFile, fontVariableNames)\n\n return sourceFile.getFullText()\n}\n\nfunction buildFontOptions(font: RegistryFontItem) {\n const options: Record<string, unknown> = {}\n\n if (font.font.subsets?.length) {\n options.subsets = font.font.subsets\n }\n\n if (font.font.weight?.length) {\n options.weight = font.font.weight\n }\n\n options.variable = font.font.variable\n\n return JSON.stringify(options)\n .replace(/\"([^\"]+)\":/g, \"$1:\") // Remove quotes from keys.\n .replace(/\"/g, \"'\") // Use single quotes for strings.\n}\n\nfunction findFontVariableDeclaration(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n variable: string\n) {\n // Find variable declarations that call a font function with matching variable.\n const variableStatements = sourceFile.getVariableStatements()\n\n for (const statement of variableStatements) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n\n // Check if it's a call expression.\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n\n // Get the arguments.\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n // Check if any argument contains our variable.\n const argText = args[0].getText()\n if (argText.includes(`variable:`) && argText.includes(variable)) {\n return declaration\n }\n }\n }\n\n return null\n}\n\nfunction findInsertPosition(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n const imports = sourceFile.getImportDeclarations()\n if (imports.length > 0) {\n const lastImport = imports[imports.length - 1]\n return lastImport.getChildIndex() + 1\n }\n return 0\n}\n\nfunction updateHtmlClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find the <html> JSX element.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"html\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) {\n // Add className attribute with font variables.\n const variableExpressions = fontVariableNames\n .map((name) => `${name}.variable`)\n .join(\", \")\n\n if (fontVariableNames.length === 1) {\n element.addAttribute({\n name: \"className\",\n initializer: `{${variableExpressions}}`,\n })\n } else {\n // Need to use cn() for multiple fonts.\n ensureCnImport(sourceFile)\n element.addAttribute({\n name: \"className\",\n initializer: `{cn(${variableExpressions})}`,\n })\n }\n return\n }\n\n // Handle existing className.\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) {\n return\n }\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n\n if (!initializer) return\n\n // Build the new variable expressions.\n const newVarExpressions = fontVariableNames.map(\n (name) => `${name}.variable`\n )\n\n if (initializer.getKind() === SyntaxKind.StringLiteral) {\n // className=\"some-class\" -> className={cn(\"some-class\", font.variable)}\n const currentValue = initializer.getText().slice(1, -1) // Remove quotes.\n ensureCnImport(sourceFile)\n jsxAttr.setInitializer(\n `{cn(\"${currentValue}\", ${newVarExpressions.join(\", \")})}`\n )\n } else if (initializer.getKind() === SyntaxKind.JsxExpression) {\n // className={...} - need to analyze the expression.\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) return\n\n const exprText = expr.getText()\n\n // Check if it's already using cn().\n if (exprText.startsWith(\"cn(\")) {\n // Check if cn() already has exactly our font variables.\n const hasAllFontVars = newVarExpressions.every((v) =>\n exprText.includes(v)\n )\n if (hasAllFontVars) {\n // Already has our font variables, skip.\n continue\n }\n\n // Remove existing font variables and add new ones.\n const cleanedExpr = removeFontVariablesFromCn(exprText)\n const newExpr = insertFontVariablesIntoCn(\n cleanedExpr,\n newVarExpressions\n )\n jsxExpr.replaceWithText(`{${newExpr}}`)\n } else if (/^\\w+\\.variable$/.test(exprText)) {\n // Single font variable like {inter.variable}.\n // Check if it's already one of our font variables.\n if (newVarExpressions.includes(exprText)) {\n // Already using our font variable, skip.\n continue\n }\n // Replace with our font variables.\n if (newVarExpressions.length === 1) {\n jsxExpr.replaceWithText(`{${newVarExpressions[0]}}`)\n } else {\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(`{cn(${newVarExpressions.join(\", \")})}`)\n }\n } else if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal - parse and convert to cn() arguments.\n // Filter out old font variable references (e.g. geistSans.variable)\n // since we're replacing them with our new font variables.\n const cnArgs = parseTemplateLiteralToCnArgs(exprText).filter(\n (arg) => !/^\\w+\\.variable$/.test(arg)\n )\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${[...cnArgs, ...newVarExpressions].join(\", \")})}`\n )\n } else {\n // Some other expression (variable, etc.), wrap with cn().\n ensureCnImport(sourceFile)\n jsxExpr.replaceWithText(\n `{cn(${exprText}, ${newVarExpressions.join(\", \")})}`\n )\n }\n }\n }\n}\n\nfunction ensureCnImport(sourceFile: ReturnType<Project[\"createSourceFile\"]>) {\n const existingImport = sourceFile.getImportDeclaration((decl) => {\n const namedImports = decl.getNamedImports()\n return namedImports.some((imp) => imp.getName() === \"cn\")\n })\n\n if (!existingImport) {\n // Try to find the lib/utils import pattern.\n const utilsImport = sourceFile.getImportDeclaration((decl) => {\n const moduleSpecifier = decl.getModuleSpecifierValue()\n return moduleSpecifier.includes(\"/lib/utils\")\n })\n\n if (utilsImport) {\n const namedImports = utilsImport.getNamedImports()\n if (!namedImports.some((imp) => imp.getName() === \"cn\")) {\n utilsImport.addNamedImport(\"cn\")\n }\n } else {\n // Add a new import for cn.\n sourceFile.addImportDeclaration({\n moduleSpecifier: \"@/lib/utils\",\n namedImports: [\"cn\"],\n })\n }\n }\n}\n\nfunction parseTemplateLiteralToCnArgs(templateLiteral: string) {\n // Parse template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // into cn() arguments with static strings first, then variables:\n // [\"antialiased\", geistSans.variable, geistMono.variable]\n const staticArgs: string[] = []\n const variableArgs: string[] = []\n\n // Remove the backticks.\n const content = templateLiteral.slice(1, -1)\n\n // Split by ${...} expressions and static parts.\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n\n for (const part of parts) {\n if (!part) continue\n\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Expression like ${geistSans.variable}.\n const expr = part.slice(2, -1).trim()\n if (expr) {\n variableArgs.push(expr)\n }\n } else {\n // Static string - split by whitespace and add non-empty parts as quoted strings.\n const staticParts = part.trim().split(/\\s+/).filter(Boolean)\n for (const staticPart of staticParts) {\n staticArgs.push(`\"${staticPart}\"`)\n }\n }\n }\n\n // Return static strings first, then variables.\n return [...staticArgs, ...variableArgs]\n}\n\nfunction removeOldFontDeclarations(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n managedVariables: Set<string>\n) {\n // Find all variable statements that call a next/font/google function\n // with a `variable` option NOT in our managed set, and remove them.\n const statementsToRemove: ReturnType<\n ReturnType<Project[\"createSourceFile\"]>[\"getVariableStatements\"]\n > = []\n\n for (const statement of sourceFile.getVariableStatements()) {\n for (const declaration of statement.getDeclarations()) {\n const initializer = declaration.getInitializer()\n if (!initializer) continue\n if (initializer.getKind() !== SyntaxKind.CallExpression) continue\n\n const callExpr = initializer as CallExpression\n const args = callExpr.getArguments()\n if (args.length === 0) continue\n\n const argText = args[0].getText()\n if (!argText.includes(\"variable:\")) continue\n\n // Extract the CSS variable value from the argument.\n const variableMatch = argText.match(/variable:\\s*['\"]([^'\"]+)['\"]/)\n if (!variableMatch) continue\n\n const cssVariable = variableMatch[1]\n if (!managedVariables.has(cssVariable)) {\n statementsToRemove.push(statement)\n }\n }\n }\n\n for (const statement of statementsToRemove) {\n statement.remove()\n }\n}\n\nfunction cleanupUnusedFontImports(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>\n) {\n // Find next/font/google imports and remove named imports that are no longer\n // referenced in the file (outside of import declarations).\n const fontImport = sourceFile.getImportDeclaration((decl) => {\n return decl.getModuleSpecifierValue() === \"next/font/google\"\n })\n\n if (!fontImport) return\n\n const namedImports = fontImport.getNamedImports()\n const fullText = sourceFile.getFullText()\n\n for (const namedImport of namedImports) {\n const name = namedImport.getName()\n // Check if the name is used anywhere outside of import declarations.\n // Simple approach: count occurrences in the file text minus import line.\n const importLine = fontImport.getText()\n const textWithoutImport = fullText.replace(importLine, \"\")\n\n // Check for usage as a function call (e.g., `Geist(`) or as a type reference.\n const usagePattern = new RegExp(`\\\\b${name}\\\\b`)\n if (!usagePattern.test(textWithoutImport)) {\n namedImport.remove()\n }\n }\n\n // If no named imports left, remove the entire import declaration.\n if (fontImport.getNamedImports().length === 0) {\n fontImport.remove()\n }\n}\n\nfunction cleanupBodyClassName(\n sourceFile: ReturnType<Project[\"createSourceFile\"]>,\n fontVariableNames: string[]\n) {\n // Find <body> element and clean up its className.\n const jsxElements = sourceFile.getDescendantsOfKind(\n SyntaxKind.JsxOpeningElement\n )\n\n for (const element of jsxElements) {\n const tagName = element.getTagNameNode().getText()\n if (tagName !== \"body\") continue\n\n const classNameAttr = element.getAttribute(\"className\")\n if (!classNameAttr) continue\n if (classNameAttr.getKind() !== SyntaxKind.JsxAttribute) continue\n\n const jsxAttr = classNameAttr.asKindOrThrow(SyntaxKind.JsxAttribute)\n const initializer = jsxAttr.getInitializer()\n if (!initializer) continue\n\n if (initializer.getKind() === SyntaxKind.JsxExpression) {\n const jsxExpr = initializer.asKindOrThrow(SyntaxKind.JsxExpression)\n const expr = jsxExpr.getExpression()\n if (!expr) continue\n\n const exprText = expr.getText()\n\n if (exprText.startsWith(\"`\") && exprText.endsWith(\"`\")) {\n // Template literal like `${geistSans.variable} ${geistMono.variable} antialiased`\n // Extract static class names, discard old font variable references.\n const content = exprText.slice(1, -1)\n const staticClasses: string[] = []\n\n const parts = content.split(/(\\$\\{[^}]+\\})/)\n for (const part of parts) {\n if (!part) continue\n if (part.startsWith(\"${\") && part.endsWith(\"}\")) {\n // Skip font variable expressions — they're being replaced.\n continue\n }\n const trimmed = part.trim().split(/\\s+/).filter(Boolean)\n staticClasses.push(...trimmed)\n }\n\n if (staticClasses.length > 0) {\n jsxAttr.setInitializer(`\"${staticClasses.join(\" \")}\"`)\n } else {\n jsxAttr.remove()\n }\n } else if (exprText.startsWith(\"cn(\")) {\n // Remove any font variable references from cn() call.\n let cleaned = exprText\n // Remove any \"word.variable\" patterns.\n cleaned = cleaned.replace(/,?\\s*\\w+\\.variable/g, \"\")\n cleaned = cleaned.replace(/cn\\(\\s*,/, \"cn(\")\n // If cn() is effectively empty or has only one arg, simplify.\n const argsMatch = cleaned.match(/^cn\\((.+)\\)$/)\n if (argsMatch) {\n const args = argsMatch[1]\n .split(\",\")\n .map((a) => a.trim())\n .filter(Boolean)\n if (args.length === 0) {\n jsxAttr.remove()\n } else if (args.length === 1 && args[0].startsWith('\"')) {\n // Single string arg — just use it directly.\n jsxAttr.setInitializer(args[0])\n } else {\n jsxExpr.replaceWithText(`{${cleaned}}`)\n }\n }\n }\n }\n }\n}\n\nfunction removeFontVariablesFromCn(cnExpr: string) {\n // Remove patterns like \"fontName.variable\" from cn() call.\n // This is a simple regex-based approach.\n return cnExpr.replace(/,?\\s*\\w+\\.variable/g, \"\").replace(/cn\\(\\s*,/, \"cn(\")\n}\n\nfunction insertFontVariablesIntoCn(cnExpr: string, fontVars: string[]) {\n // Insert font variables at the end of cn() arguments.\n const varsStr = fontVars.join(\", \")\n return cnExpr.replace(/\\)$/, `, ${varsStr})`)\n}\n","import { registryItemTailwindSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { z } from \"zod\"\n\nexport async function updateTailwindConfig(\n tailwindConfig:\n | z.infer<typeof registryItemTailwindSchema>[\"config\"]\n | undefined,\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n // v4 does not use a tailwind config file. This is a no-op.\n return\n}\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { resolveRegistryTree } from \"@/src/registry/resolver\"\nimport {\n configSchema,\n registryItemFileSchema,\n registryItemSchema,\n workspaceConfigSchema,\n} from \"@/src/schema\"\nimport {\n findCommonRoot,\n findPackageRoot,\n getWorkspaceConfig,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { isSafeTarget } from \"@/src/utils/is-safe-target\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateCss } from \"@/src/utils/updaters/update-css\"\nimport { updateCssVars } from \"@/src/utils/updaters/update-css-vars\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { updateEnvVars } from \"@/src/utils/updaters/update-env-vars\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport {\n massageTreeForFonts,\n updateFonts,\n} from \"@/src/utils/updaters/update-fonts\"\nimport { updateTailwindConfig } from \"@/src/utils/updaters/update-tailwind-config\"\nimport { z } from \"zod\"\n\nexport async function addComponents(\n components: string[],\n config: Config,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n registryHeaders?: Record<string, Record<string, string>>\n path?: string\n }\n) {\n options = {\n overwrite: false,\n silent: false,\n isNewProject: false,\n baseStyle: true,\n ...options,\n }\n\n const workspaceConfig = await getWorkspaceConfig(config)\n if (\n workspaceConfig &&\n workspaceConfig.ui &&\n workspaceConfig.ui.resolvedPaths.cwd !== config.resolvedPaths.cwd\n ) {\n return await addWorkspaceComponents(components, config, workspaceConfig, {\n ...options,\n isRemote:\n components?.length === 1 && !!components[0].match(/^https?:\\/\\//),\n })\n }\n\n return await addProjectComponents(components, config, options)\n}\n\nasync function addProjectComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n let tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n tree = await massageTreeForFonts(tree, config)\n\n await updateTailwindConfig(tree.tailwind?.config, config, {\n silent: options.silent,\n })\n\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, config, {\n cleanupDefaultNextStyles: options.isNewProject,\n silent: options.silent,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n initIndex: options.baseStyle,\n })\n\n // Add CSS updater\n await updateCss(tree.css, config, {\n silent: options.silent,\n })\n\n await updateEnvVars(tree.envVars, config, {\n silent: options.silent,\n })\n\n // Update fonts and files before installing dependencies so that\n // file-system changes are applied even if npm install fails.\n await updateFonts(tree.fonts, config, {\n silent: options.silent,\n })\n\n await updateFiles(tree.files, config, {\n overwrite: options.overwrite,\n silent: options.silent,\n path: options.path,\n })\n\n await updateDependencies(tree.dependencies, tree.devDependencies, config, {\n silent: options.silent,\n })\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function addWorkspaceComponents(\n components: string[],\n config: z.infer<typeof configSchema>,\n workspaceConfig: z.infer<typeof workspaceConfigSchema>,\n options: {\n overwrite?: boolean\n silent?: boolean\n isNewProject?: boolean\n isRemote?: boolean\n baseStyle?: boolean\n path?: string\n }\n) {\n if (!options.baseStyle && !components.length) {\n return\n }\n\n const registrySpinner = spinner(`Checking registry.`, {\n silent: options.silent,\n })?.start()\n const tree = await resolveRegistryTree(components, configWithDefaults(config))\n\n if (!tree) {\n registrySpinner?.fail()\n return handleError(new Error(\"Failed to fetch components from registry.\"))\n }\n\n try {\n validateFilesTarget(tree.files ?? [], config.resolvedPaths.cwd)\n } catch (error) {\n registrySpinner?.fail()\n return handleError(error)\n }\n\n registrySpinner?.succeed()\n\n const filesCreated: string[] = []\n const filesUpdated: string[] = []\n const filesSkipped: string[] = []\n\n const rootSpinner = spinner(`Installing components.`)?.start()\n\n // Process global updates (tailwind, css vars, dependencies) first for the main target.\n // These should typically go to the UI package in a workspace.\n const mainTargetConfig = workspaceConfig.ui\n const workspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n mainTargetConfig.resolvedPaths.ui\n )\n\n // 1. Update tailwind config.\n if (tree.tailwind?.config) {\n await updateTailwindConfig(tree.tailwind?.config, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(\n workspaceRoot,\n mainTargetConfig.resolvedPaths.tailwindConfig\n )\n )\n }\n\n // 2. Update css vars.\n if (tree.cssVars) {\n const overwriteCssVars = await shouldOverwriteCssVars(components, config)\n await updateCssVars(tree.cssVars, mainTargetConfig, {\n silent: true,\n tailwindConfig: tree.tailwind?.config,\n overwriteCssVars,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 3. Update CSS\n if (tree.css) {\n await updateCss(tree.css, mainTargetConfig, {\n silent: true,\n })\n filesUpdated.push(\n path.relative(workspaceRoot, mainTargetConfig.resolvedPaths.tailwindCss)\n )\n }\n\n // 4. Update environment variables\n if (tree.envVars) {\n await updateEnvVars(tree.envVars, mainTargetConfig, {\n silent: true,\n })\n }\n\n // 5. Update fonts.\n await updateFonts(tree.fonts, mainTargetConfig, {\n silent: true,\n })\n\n // 6. Update dependencies.\n await updateDependencies(\n tree.dependencies,\n tree.devDependencies,\n mainTargetConfig,\n {\n silent: true,\n }\n )\n\n // 7. Group files by their type to determine target config and update files.\n const filesByType = new Map<string, typeof tree.files>()\n\n for (const file of tree.files ?? []) {\n const type = file.type || \"registry:ui\"\n if (!filesByType.has(type)) {\n filesByType.set(type, [])\n }\n filesByType.get(type)!.push(file)\n }\n\n // Process each type of component with its appropriate target config.\n for (const type of Array.from(filesByType.keys())) {\n const typeFiles = filesByType.get(type)!\n\n let targetConfig = type === \"registry:ui\" ? workspaceConfig.ui : config\n\n const typeWorkspaceRoot = findCommonRoot(\n config.resolvedPaths.cwd,\n targetConfig.resolvedPaths.ui || targetConfig.resolvedPaths.cwd\n )\n const packageRoot =\n (await findPackageRoot(\n typeWorkspaceRoot,\n targetConfig.resolvedPaths.cwd\n )) ?? targetConfig.resolvedPaths.cwd\n\n // Update files for this type.\n const files = await updateFiles(typeFiles, targetConfig, {\n overwrite: options.overwrite,\n silent: true,\n rootSpinner,\n isRemote: options.isRemote,\n isWorkspace: true,\n path: options.path,\n })\n\n filesCreated.push(\n ...files.filesCreated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesUpdated.push(\n ...files.filesUpdated.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n filesSkipped.push(\n ...files.filesSkipped.map((file) =>\n path.relative(typeWorkspaceRoot, path.join(packageRoot, file))\n )\n )\n }\n\n rootSpinner?.succeed()\n\n // Sort files.\n filesCreated.sort()\n filesUpdated.sort()\n filesSkipped.sort()\n\n const hasUpdatedFiles = filesCreated.length || filesUpdated.length\n if (!hasUpdatedFiles && !filesSkipped.length) {\n spinner(`No files updated.`, {\n silent: options.silent,\n })?.info()\n }\n\n if (filesCreated.length) {\n spinner(\n `Created ${filesCreated.length} ${\n filesCreated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.succeed()\n for (const file of filesCreated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesUpdated.length) {\n spinner(\n `Updated ${filesUpdated.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }:`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesUpdated) {\n logger.log(` - ${file}`)\n }\n }\n\n if (filesSkipped.length) {\n spinner(\n `Skipped ${filesSkipped.length} ${\n filesUpdated.length === 1 ? \"file\" : \"files\"\n }: (use --overwrite to overwrite)`,\n {\n silent: options.silent,\n }\n )?.info()\n for (const file of filesSkipped) {\n logger.log(` - ${file}`)\n }\n }\n\n if (tree.docs) {\n logger.info(tree.docs)\n }\n}\n\nasync function shouldOverwriteCssVars(\n components: z.infer<typeof registryItemSchema>[\"name\"][],\n config: z.infer<typeof configSchema>\n) {\n const result = await getRegistryItems(components, { config })\n const payload = z.array(registryItemSchema).parse(result)\n\n return payload.some(\n (component) =>\n component.type === \"registry:theme\" ||\n component.type === \"registry:font-variant\" ||\n component.type === \"registry:base\"\n )\n}\n\nfunction validateFilesTarget(\n files: z.infer<typeof registryItemFileSchema>[],\n cwd: string\n) {\n for (const file of files) {\n if (!file?.target) {\n continue\n }\n\n if (!isSafeTarget(file.target, cwd)) {\n throw new Error(\n `We found an unsafe file path \"${file.target} in the registry item. Installation aborted.`\n )\n }\n }\n}\n","import os from \"os\"\nimport path from \"path\"\nimport { initOptionsSchema } from \"@/src/commands/init\"\nimport { fetchRegistry } from \"@/src/registry/fetcher\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { execa } from \"execa\"\nimport fs from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nconst GITHUB_TEMPLATE_URL =\n \"https://codeload.github.com/createui/templates/tar.gz/main\"\n\nexport const TEMPLATES = {\n next: \"next\",\n \"next-monorepo\": \"next-monorepo\",\n vite: \"vite\",\n start: \"start\",\n} as const\n\nexport async function createProject(\n options: Pick<\n z.infer<typeof initOptionsSchema>,\n \"cwd\" | \"name\" | \"force\" | \"srcDir\" | \"components\" | \"template\"\n >\n) {\n options = {\n srcDir: false,\n ...options,\n }\n\n let template: keyof typeof TEMPLATES =\n options.template && TEMPLATES[options.template as keyof typeof TEMPLATES]\n ? (options.template as keyof typeof TEMPLATES)\n : \"next\"\n let projectName: string =\n options.name ??\n (template === TEMPLATES.next ||\n template === TEMPLATES.vite ||\n template === TEMPLATES.start\n ? \"my-app\"\n : \"my-monorepo\")\n let nextVersion = \"latest\"\n\n const isRemoteComponent =\n options.components?.length === 1 &&\n !!options.components[0].match(/^https?:\\/\\//)\n\n if (options.components && isRemoteComponent) {\n try {\n const [result] = await fetchRegistry(options.components)\n const { meta } = z\n .object({\n meta: z.object({\n nextVersion: z.string(),\n }),\n })\n .parse(result)\n nextVersion = meta.nextVersion\n\n // Force template to next for remote components.\n template = TEMPLATES.next\n } catch (error) {\n logger.break()\n handleError(error)\n }\n }\n\n if (!options.force) {\n const { type, name } = await prompts([\n {\n type: options.template || isRemoteComponent ? null : \"select\",\n name: \"type\",\n message: `The path ${highlighter.info(\n options.cwd\n )} does not contain a package.json file.\\n Would you like to start a new project?`,\n choices: [\n { title: \"Next.js\", value: \"next\" },\n { title: \"Next.js (Monorepo)\", value: \"next-monorepo\" },\n { title: \"Vite\", value: \"vite\" },\n { title: \"TanStack Start\", value: \"start\" },\n ],\n initial: 0,\n },\n {\n type: options.name ? null : \"text\",\n name: \"name\",\n message: \"What is your project named?\",\n initial: projectName,\n format: (value: string) => value.trim(),\n validate: (value: string) =>\n value.length > 128\n ? `Name should be less than 128 characters.`\n : true,\n },\n ])\n\n template = type ?? template\n projectName = name ?? projectName\n }\n\n const packageManager = await getPackageManager(options.cwd, {\n withFallback: true,\n })\n\n const projectPath = `${options.cwd}/${projectName}`\n\n // Check if path is writable.\n try {\n await fs.access(options.cwd, fs.constants.W_OK)\n } catch (error) {\n logger.break()\n logger.error(`The path ${highlighter.info(options.cwd)} is not writable.`)\n logger.error(\n `It is likely you do not have write permissions for this folder or the path ${highlighter.info(\n options.cwd\n )} does not exist.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (fs.existsSync(path.resolve(options.cwd, projectName, \"package.json\"))) {\n logger.break()\n logger.error(\n `A project with the name ${highlighter.info(projectName)} already exists.`\n )\n logger.error(`Please choose a different name and try again.`)\n logger.break()\n process.exit(1)\n }\n\n if (template === TEMPLATES.next) {\n await createNextProject(projectPath, {\n version: nextVersion,\n cwd: options.cwd,\n packageManager,\n srcDir: !!options.srcDir,\n })\n }\n\n if (template === TEMPLATES[\"next-monorepo\"]) {\n await createMonorepoProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.vite) {\n await createViteProject(projectPath, {\n packageManager,\n })\n }\n\n if (template === TEMPLATES.start) {\n await createStartProject(projectPath, {\n packageManager,\n })\n }\n\n return {\n projectPath,\n projectName,\n template,\n }\n}\n\nasync function createNextProject(\n projectPath: string,\n options: {\n version: string\n cwd: string\n packageManager: string\n srcDir: boolean\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js project. This may take a few minutes.`\n ).start()\n\n // Note: pnpm fails here. Fallback to npx with --use-PACKAGE-MANAGER.\n const args = [\n \"--tailwind\",\n \"--eslint\",\n \"--typescript\",\n \"--app\",\n options.srcDir ? \"--src-dir\" : \"--no-src-dir\",\n \"--no-import-alias\",\n `--use-${options.packageManager}`,\n ]\n\n if (\n options.version.startsWith(\"15\") ||\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--turbopack\")\n }\n\n if (\n options.version.startsWith(\"latest\") ||\n options.version.startsWith(\"canary\")\n ) {\n args.push(\"--no-react-compiler\")\n }\n\n try {\n await execa(\n \"npx\",\n [`create-next-app@${options.version}`, projectPath, \"--silent\", ...args],\n {\n cwd: options.cwd,\n }\n )\n } catch (error) {\n logger.break()\n logger.error(\n `Something went wrong creating a new Next.js project. Please try again.`\n )\n process.exit(1)\n }\n\n createSpinner?.succeed(\"Creating a new Next.js project.\")\n}\n\nasync function createMonorepoProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Next.js monorepo. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=1\",\n \"templates-main/monorepo-next\",\n ])\n const extractedPath = path.resolve(templatePath, \"monorepo-next\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n // await execa(\"cd\", [cwd])\n\n // Write project name to the package.json\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n const cwd = process.cwd()\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Next.js monorepo.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Next.js monorepo.\")\n handleError(error)\n }\n}\n\nasync function createViteProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new Vite project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=1\",\n \"templates-main/vite-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"vite-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new Vite project.\")\n } catch (error) {\n createSpinner?.fail(\"Something went wrong creating a new Vite project.\")\n handleError(error)\n }\n}\n\nasync function createStartProject(\n projectPath: string,\n options: {\n packageManager: string\n }\n) {\n const createSpinner = spinner(\n `Creating a new TanStack Start project. This may take a few minutes.`\n ).start()\n\n try {\n // Get the template.\n const templatePath = path.join(\n os.tmpdir(),\n `createui-template-${Date.now()}`\n )\n await fs.ensureDir(templatePath)\n const response = await fetch(GITHUB_TEMPLATE_URL)\n if (!response.ok) {\n throw new Error(`Failed to download template: ${response.statusText}`)\n }\n\n // Write the tar file.\n const tarPath = path.resolve(templatePath, \"template.tar.gz\")\n await fs.writeFile(tarPath, Buffer.from(await response.arrayBuffer()))\n await execa(\"tar\", [\n \"-xzf\",\n tarPath,\n \"-C\",\n templatePath,\n \"--strip-components=1\",\n \"templates-main/start-app\",\n ])\n const extractedPath = path.resolve(templatePath, \"start-app\")\n await fs.move(extractedPath, projectPath)\n await fs.remove(templatePath)\n\n // Remove pnpm-lock.yaml if using a different package manager.\n if (options.packageManager !== \"pnpm\") {\n const lockFilePath = path.join(projectPath, \"pnpm-lock.yaml\")\n if (fs.existsSync(lockFilePath)) {\n await fs.remove(lockFilePath)\n }\n }\n\n // Run install.\n await execa(options.packageManager, [\"install\"], {\n cwd: projectPath,\n })\n\n // Write project name to the package.json.\n const packageJsonPath = path.join(projectPath, \"package.json\")\n if (fs.existsSync(packageJsonPath)) {\n const packageJsonContent = await fs.readFile(packageJsonPath, \"utf8\")\n const packageJson = JSON.parse(packageJsonContent)\n packageJson.name = projectPath.split(\"/\").pop()\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n\n // Try git init.\n await execa(\"git\", [\"--version\"], { cwd: projectPath })\n await execa(\"git\", [\"init\"], { cwd: projectPath })\n await execa(\"git\", [\"add\", \"-A\"], { cwd: projectPath })\n await execa(\"git\", [\"commit\", \"-m\", \"Initial commit\"], {\n cwd: projectPath,\n })\n\n createSpinner?.succeed(\"Creating a new TanStack Start project.\")\n } catch (error) {\n createSpinner?.fail(\n \"Something went wrong creating a new TanStack Start project.\"\n )\n handleError(error)\n }\n}\n","import { existsSync } from \"fs\"\nimport { join } from \"path\"\nimport { logger } from \"@/src/utils/logger\"\n\nexport async function loadEnvFiles(cwd: string = process.cwd()): Promise<void> {\n try {\n const { config } = await import(\"@dotenvx/dotenvx\")\n const envFiles = [\n \".env.local\",\n \".env.development.local\",\n \".env.development\",\n \".env\",\n ]\n\n for (const envFile of envFiles) {\n const envPath = join(cwd, envFile)\n if (existsSync(envPath)) {\n config({\n path: envPath,\n overload: false,\n quiet: true,\n })\n }\n }\n } catch (error) {\n logger.warn(\"Failed to load env files:\", error)\n }\n}\n","import fsExtra from \"fs-extra\"\n\nexport const FILE_BACKUP_SUFFIX = \".bak\"\n\nexport function createFileBackup(filePath: string): string | null {\n if (!fsExtra.existsSync(filePath)) {\n return null\n }\n\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n try {\n fsExtra.renameSync(filePath, backupPath)\n return backupPath\n } catch (error) {\n console.error(`Failed to create backup of ${filePath}: ${error}`)\n return null\n }\n}\n\nexport function restoreFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.renameSync(backupPath, filePath)\n return true\n } catch (error) {\n console.error(\n `Warning: Could not restore backup file ${backupPath}: ${error}`\n )\n return false\n }\n}\n\nexport function deleteFileBackup(filePath: string): boolean {\n const backupPath = `${filePath}${FILE_BACKUP_SUFFIX}`\n\n if (!fsExtra.existsSync(backupPath)) {\n return false\n }\n\n try {\n fsExtra.unlinkSync(backupPath)\n return true\n } catch (error) {\n // Best effort - don't log as this is just cleanup\n return false\n }\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { applyEdits, modify, parse } from \"jsonc-parser\"\n\n// Tailwind CSS IntelliSense extension. Hover previews / autocomplete only work\n// once this extension is installed and can locate the Tailwind v4 entry CSS.\nconst TAILWIND_EXTENSION_ID = \"bradlc.vscode-tailwindcss\"\n\n// Flat, dotted VS Code setting key (settings.json keys are flat, not nested).\n// Points IntelliSense at the v4 CSS entry — there is no tailwind.config.js to\n// auto-discover, and in monorepos the entry is too nested to be found reliably.\nconst CONFIG_FILE_KEY = \"tailwindCSS.experimental.configFile\"\n\n// Treat the string arguments of these functions as class lists, so hover and\n// autocomplete work inside cva()/cn() configs (e.g. variant maps), not just\n// JSX class attributes. Create UI components are built on cva + cn.\nconst CLASS_FUNCTIONS_KEY = \"tailwindCSS.classFunctions\"\nconst CLASS_FUNCTIONS = [\"cva\", \"cn\", \"cx\", \"clsx\", \"tv\"]\n\nconst FORMATTING_OPTIONS = { insertSpaces: true, tabSize: 2 }\n\n/**\n * Writes (or non-destructively merges into) the project's `.vscode` config so\n * Tailwind IntelliSense activates for our v4 CSS-based setup.\n *\n * - Never clobbers a value the user already set — only fills in missing keys.\n * - Preserves existing comments and formatting via jsonc-parser surgical edits.\n */\nexport async function updateVSCodeSettings(\n config: Config,\n options: {\n silent?: boolean\n }\n) {\n options = {\n silent: false,\n ...options,\n }\n\n const cwd = config.resolvedPaths.cwd\n const cssPath = config.tailwind.css\n\n // Without a CSS entry there is nothing to point IntelliSense at.\n if (!cwd || !cssPath) {\n return { settingsUpdated: false, extensionsUpdated: false }\n }\n\n // VS Code resolves these paths with forward slashes regardless of platform.\n const configFile = cssPath.split(path.sep).join(\"/\")\n\n const vscodeDir = path.join(cwd, \".vscode\")\n const settingsPath = path.join(vscodeDir, \"settings.json\")\n const extensionsPath = path.join(vscodeDir, \"extensions.json\")\n\n const vscodeSpinner = spinner(`Configuring VS Code IntelliSense.`, {\n silent: options.silent,\n }).start()\n\n await fs.mkdir(vscodeDir, { recursive: true })\n\n const settingsUpdated = await upsertSettings(settingsPath, configFile)\n const extensionsUpdated = await upsertExtension(extensionsPath)\n\n if (settingsUpdated || extensionsUpdated) {\n vscodeSpinner.succeed(`Configured VS Code IntelliSense.`)\n if (!options.silent) {\n if (settingsUpdated) {\n logger.log(\n ` ${highlighter.success(\n \"+\"\n )} .vscode/settings.json ${highlighter.info(\n \"(Tailwind IntelliSense)\"\n )}`\n )\n }\n if (extensionsUpdated) {\n logger.log(\n ` ${highlighter.success(\n \"+\"\n )} .vscode/extensions.json ${highlighter.info(\n `(${TAILWIND_EXTENSION_ID})`\n )}`\n )\n }\n logger.break()\n }\n } else {\n vscodeSpinner.stop()\n }\n\n return { settingsUpdated, extensionsUpdated }\n}\n\nasync function upsertSettings(settingsPath: string, configFile: string) {\n if (!existsSync(settingsPath)) {\n const content = JSON.stringify(\n {\n [CONFIG_FILE_KEY]: configFile,\n [CLASS_FUNCTIONS_KEY]: CLASS_FUNCTIONS,\n },\n null,\n 2\n )\n await fs.writeFile(settingsPath, `${content}\\n`, \"utf8\")\n return true\n }\n\n let text = await fs.readFile(settingsPath, \"utf8\")\n let changed = false\n\n // configFile: respect a value the user already chose — never override it.\n if (parse(text)?.[CONFIG_FILE_KEY] === undefined) {\n text = applyEdits(\n text,\n modify(text, [CONFIG_FILE_KEY], configFile, {\n formattingOptions: FORMATTING_OPTIONS,\n })\n )\n changed = true\n }\n\n // classFunctions: merge our entries into the user's array (append-only),\n // creating the array if it isn't there. Never drop their existing entries.\n const existing = parse(text)?.[CLASS_FUNCTIONS_KEY]\n if (!Array.isArray(existing)) {\n text = applyEdits(\n text,\n modify(text, [CLASS_FUNCTIONS_KEY], CLASS_FUNCTIONS, {\n formattingOptions: FORMATTING_OPTIONS,\n })\n )\n changed = true\n } else {\n let length = existing.length\n for (const fn of CLASS_FUNCTIONS) {\n if (existing.includes(fn)) {\n continue\n }\n text = applyEdits(\n text,\n modify(text, [CLASS_FUNCTIONS_KEY, length], fn, {\n isArrayInsertion: true,\n formattingOptions: FORMATTING_OPTIONS,\n })\n )\n length += 1\n changed = true\n }\n }\n\n if (changed) {\n await fs.writeFile(settingsPath, text, \"utf8\")\n }\n return changed\n}\n\nasync function upsertExtension(extensionsPath: string) {\n if (!existsSync(extensionsPath)) {\n const content = JSON.stringify(\n { recommendations: [TAILWIND_EXTENSION_ID] },\n null,\n 2\n )\n await fs.writeFile(extensionsPath, `${content}\\n`, \"utf8\")\n return true\n }\n\n const raw = await fs.readFile(extensionsPath, \"utf8\")\n const parsed = parse(raw) ?? {}\n const recommendations: string[] = Array.isArray(parsed.recommendations)\n ? parsed.recommendations\n : []\n\n if (recommendations.includes(TAILWIND_EXTENSION_ID)) {\n return false\n }\n\n const edits = modify(\n raw,\n [\"recommendations\", recommendations.length],\n TAILWIND_EXTENSION_ID,\n { isArrayInsertion: true, formattingOptions: FORMATTING_OPTIONS }\n )\n await fs.writeFile(extensionsPath, applyEdits(raw, edits), \"utf8\")\n return true\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { preFlightInit } from \"@/src/preflights/preflight-init\"\nimport { getFontVariants, getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport {\n DEFAULT_FONT_VARIANT,\n DEFAULT_NEUTRAL_THEME,\n FONT_VARIANT_NAMES,\n NEUTRAL_THEMES,\n NEUTRAL_THEME_NAMES,\n THEMES,\n} from \"@/src/registry/constants\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { TEMPLATES, createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport {\n FILE_BACKUP_SUFFIX,\n createFileBackup,\n deleteFileBackup,\n restoreFileBackup,\n} from \"@/src/utils/file-helper\"\nimport {\n DEFAULT_COMPONENTS,\n DEFAULT_TAILWIND_CONFIG,\n DEFAULT_TAILWIND_CSS,\n DEFAULT_UTILS,\n createConfig,\n getConfig,\n resolveConfigPaths,\n type Config,\n} from \"@/src/utils/get-config\"\nimport { getProjectConfig, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateVSCodeSettings } from \"@/src/utils/updaters/update-vscode-settings\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nprocess.on(\"exit\", (code) => {\n const filePath = path.resolve(process.cwd(), \"components.json\")\n\n // Delete backup if successful.\n if (code === 0) {\n return deleteFileBackup(filePath)\n }\n\n // Restore backup if error.\n return restoreFileBackup(filePath)\n})\n\nexport const initOptionsSchema = z.object({\n cwd: z.string(),\n name: z.string().optional(),\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n defaults: z.boolean(),\n force: z.boolean(),\n silent: z.boolean(),\n isNewProject: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n template: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (val) {\n return TEMPLATES[val as keyof typeof TEMPLATES]\n }\n return true\n },\n {\n message:\n \"Invalid template. Please use 'next', 'vite', 'start' or 'next-monorepo'.\",\n }\n ),\n baseColor: z.string().optional(),\n theme: z.string().optional(),\n neutral: z.string().optional(),\n fontVariant: z.string().optional(),\n baseStyle: z.boolean(),\n // Config from registry:base item to merge into components.json.\n registryBaseConfig: rawConfigSchema.deepPartial().optional(),\n})\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize your project and install dependencies\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. (next, start, vite, next-monorepo)\"\n )\n .option(\n \"-b, --base-color <base-color>\",\n \"deprecated: use --theme instead.\",\n undefined\n )\n .option(\n \"--theme <theme>\",\n \"the primary color theme. (indigo, blue, lime, rose, etc.)\",\n undefined\n )\n .option(\n \"--neutral <neutral>\",\n `neutral color theme. (${NEUTRAL_THEME_NAMES.join(\", \")})`,\n undefined\n )\n .option(\n \"--font-variant <fontVariant>\",\n `font variant. (${FONT_VARIANT_NAMES.join(\", \")})`,\n undefined\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-d, --defaults,\", \"use default configuration.\", false)\n .option(\"-f, --force\", \"force overwrite of existing configuration.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .option(\"--no-base-style\", \"do not install the base createui style.\")\n .action(async (components, opts) => {\n try {\n // Apply defaults when --defaults flag is set.\n if (opts.defaults) {\n opts.template = opts.template || \"next\"\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n isNewProject: false,\n components,\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n // We need to check if we're initializing with a new style.\n // This will allow us to determine if we need to install the base style.\n // And if we should prompt the user for a base color.\n if (components.length > 0) {\n // We don't know the full config at this point.\n // So we'll use a shadow config to fetch the first item.\n let shadowConfig = configWithDefaults(\n createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n )\n\n // Check if there's a components.json file.\n // If so, we'll merge with our shadow config.\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const config = rawConfigSchema.partial().parse(existingConfig)\n const baseConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n shadowConfig = configWithDefaults({\n ...config,\n resolvedPaths: {\n ...baseConfig.resolvedPaths,\n cwd: options.cwd,\n },\n })\n\n // Since components.json might not be valid at this point.\n // Temporarily rename components.json to allow preflight to run.\n // We'll rename it back after preflight.\n createFileBackup(componentsJsonPath)\n }\n\n const [item] = await getRegistryItems([components[0]], {\n config: shadowConfig,\n })\n\n // Set options from registry:base.\n if (item?.type === \"registry:base\") {\n if (item.config) {\n // Merge config values into shadowConfig.\n shadowConfig = configWithDefaults(\n deepmerge(shadowConfig, item.config)\n )\n // Store config to be merged into components.json later.\n options.registryBaseConfig = item.config\n }\n options.baseStyle =\n item.extends === \"none\" ? false : options.baseStyle\n }\n }\n\n await runInit(options)\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n\n // We need when running with custom cwd.\n deleteFileBackup(path.resolve(options.cwd, \"components.json\"))\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nexport async function runInit(\n options: z.infer<typeof initOptionsSchema> & {\n skipPreflight?: boolean\n }\n) {\n let projectInfo\n let newProjectTemplate\n if (!options.skipPreflight) {\n const preflight = await preFlightInit(options)\n if (preflight.errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject(options)\n if (!projectPath) {\n process.exit(1)\n }\n options.cwd = projectPath\n options.isNewProject = true\n newProjectTemplate = template\n // Re-get project info for the newly created project.\n projectInfo = await getProjectInfo(options.cwd)\n } else {\n projectInfo = preflight.projectInfo\n }\n } else {\n projectInfo = await getProjectInfo(options.cwd)\n }\n\n if (newProjectTemplate === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n return await getConfig(options.cwd)\n }\n\n const projectConfig = await getProjectConfig(options.cwd, projectInfo)\n\n let configResult = projectConfig\n ? await promptForMinimalConfig(projectConfig, options)\n : await promptForConfig(await getConfig(options.cwd))\n let config = configResult.config\n // Set theme from prompt if not already set via CLI flag.\n if (!options.theme && configResult.theme) {\n options.theme = configResult.theme\n }\n // Set neutral from prompt if not already set via CLI flag.\n if (!options.neutral && configResult.neutral) {\n options.neutral = configResult.neutral\n }\n // Set fontVariant from prompt if not already set via CLI flag.\n if (!options.fontVariant && configResult.fontVariant) {\n options.fontVariant = configResult.fontVariant\n }\n\n if (!options.yes) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `Write configuration to ${highlighter.info(\n \"components.json\"\n )}. Proceed?`,\n initial: true,\n })\n\n if (!proceed) {\n process.exit(0)\n }\n }\n\n // Prepare the list of components to be added.\n // Resolve theme: --theme flag, --base-color (legacy), or default \"neutral\".\n const themeName = options.theme ?? options.baseColor ?? \"indigo\"\n // Resolve neutral: --neutral flag or default.\n const neutralName = options.neutral ?? DEFAULT_NEUTRAL_THEME\n // Resolve font variant: --font-variant flag or default.\n const fontVariantName = options.fontVariant ?? DEFAULT_FONT_VARIANT\n const components = [\n // \"index\" is the default createui base style (registry:base).\n ...(options.baseStyle ? [\"index\"] : []),\n // Add the selected primary theme as a registry:theme item.\n ...(options.baseStyle ? [`theme-${themeName}`] : []),\n // Add the selected neutral theme as a registry:theme item.\n ...(options.baseStyle ? [`neutral-${neutralName}`] : []),\n // Add the selected font variant.\n ...(options.baseStyle ? [`font-variant-${fontVariantName}`] : []),\n ...(options.components ?? []),\n ]\n\n const componentSpinner = spinner(`Writing components.json.`).start()\n const targetPath = path.resolve(options.cwd, \"components.json\")\n const backupPath = `${targetPath}${FILE_BACKUP_SUFFIX}`\n\n const mergeConfig = (base: typeof config, override: object) =>\n deepmerge(base, override) as typeof config\n\n // Merge with backup config if it exists and not using --force.\n if (!options.force && fsExtra.existsSync(backupPath)) {\n const existingConfig = await fsExtra.readJson(backupPath)\n config = mergeConfig(existingConfig, config)\n }\n\n // Merge config from registry:base item.\n if (options.registryBaseConfig) {\n config = mergeConfig(config, options.registryBaseConfig)\n }\n\n // Write components.json.\n await fs.writeFile(targetPath, `${JSON.stringify(config, null, 2)}\\n`, \"utf8\")\n componentSpinner.succeed()\n\n // Add components.\n const fullConfig = await resolveConfigPaths(options.cwd, config)\n await addComponents(components, fullConfig, {\n // Init will always overwrite files.\n overwrite: true,\n silent: options.silent,\n baseStyle: options.baseStyle,\n isNewProject:\n options.isNewProject || projectInfo?.framework.name === \"next-app\",\n })\n\n // Point Tailwind IntelliSense at our v4 CSS entry so hover/autocomplete work.\n // Merges into any existing .vscode config without overriding the user's.\n await updateVSCodeSettings(fullConfig, { silent: options.silent })\n\n return fullConfig\n}\n\nasync function promptForConfig(defaultConfig: Config | null = null) {\n logger.info(\"\")\n const fontVariants = await getFontVariants()\n const options = await prompts([\n {\n type: \"toggle\",\n name: \"typescript\",\n message: `Would you like to use ${highlighter.info(\n \"TypeScript\"\n )} (recommended)?`,\n initial: defaultConfig?.tsx ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"select\",\n name: \"theme\",\n message: `Which ${highlighter.info(\n \"primary\"\n )} color would you like to use?`,\n choices: THEMES.map((theme) => ({\n title: theme.label,\n value: theme.name,\n })),\n },\n {\n type: \"select\",\n name: \"neutral\",\n message: `Which ${highlighter.info(\n \"neutral\"\n )} color would you like to use?`,\n choices: NEUTRAL_THEMES.map((theme) => ({\n title:\n theme.name === DEFAULT_NEUTRAL_THEME\n ? `${theme.label} (Default)`\n : theme.label,\n value: theme.name,\n })),\n },\n {\n type: \"select\",\n name: \"fontVariant\",\n message: `Which ${highlighter.info(\n \"font variant\"\n )} would you like to use?`,\n choices: fontVariants.map((variant) => ({\n title: variant.label,\n value: variant.name,\n })),\n initial: Math.max(\n 0,\n fontVariants.findIndex((v) => v.name === DEFAULT_FONT_VARIANT)\n ),\n },\n {\n type: \"text\",\n name: \"tailwindCss\",\n message: `Where is your ${highlighter.info(\"global CSS\")} file?`,\n initial: defaultConfig?.tailwind.css ?? DEFAULT_TAILWIND_CSS,\n },\n {\n type: \"toggle\",\n name: \"tailwindCssVariables\",\n message: `Would you like to use ${highlighter.info(\n \"CSS variables\"\n )} for theming?`,\n initial: defaultConfig?.tailwind.cssVariables ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n {\n type: \"text\",\n name: \"tailwindPrefix\",\n message: `Are you using a custom ${highlighter.info(\n \"tailwind prefix eg. tw-\"\n )}? (Leave blank if not)`,\n initial: \"\",\n },\n {\n type: \"text\",\n name: \"tailwindConfig\",\n message: `Where is your ${highlighter.info(\n \"tailwind.config.js\"\n )} located?`,\n initial: defaultConfig?.tailwind.config ?? DEFAULT_TAILWIND_CONFIG,\n },\n {\n type: \"text\",\n name: \"components\",\n message: `Configure the import alias for ${highlighter.info(\n \"components\"\n )}:`,\n initial: defaultConfig?.aliases[\"components\"] ?? DEFAULT_COMPONENTS,\n },\n {\n type: \"text\",\n name: \"utils\",\n message: `Configure the import alias for ${highlighter.info(\"utils\")}:`,\n initial: defaultConfig?.aliases[\"utils\"] ?? DEFAULT_UTILS,\n },\n {\n type: \"toggle\",\n name: \"rsc\",\n message: `Are you using ${highlighter.info(\"React Server Components\")}?`,\n initial: defaultConfig?.rsc ?? true,\n active: \"yes\",\n inactive: \"no\",\n },\n ])\n\n const themeName = (options.theme as string) ?? \"indigo\"\n const neutralName = (options.neutral as string) ?? DEFAULT_NEUTRAL_THEME\n const fontVariantName =\n (options.fontVariant as string) ?? DEFAULT_FONT_VARIANT\n\n return {\n config: rawConfigSchema.parse({\n $schema: \"https://createui.co/schema.json\",\n tailwind: {\n config: options.tailwindConfig,\n css: options.tailwindCss,\n baseColor: themeName,\n cssVariables: options.tailwindCssVariables,\n prefix: options.tailwindPrefix,\n },\n rsc: options.rsc,\n tsx: options.typescript,\n aliases: {\n utils: options.utils,\n components: options.components,\n // TODO: fix this.\n lib: options.components.replace(/\\/components$/, \"lib\"),\n hooks: options.components.replace(/\\/components$/, \"hooks\"),\n },\n }),\n theme: themeName,\n neutral: neutralName,\n fontVariant: fontVariantName,\n }\n}\n\nasync function promptForMinimalConfig(\n defaultConfig: Config,\n opts: z.infer<typeof initOptionsSchema>\n) {\n let cssVariables = defaultConfig.tailwind.cssVariables\n let iconLibrary = defaultConfig.iconLibrary ?? \"lucide\"\n\n if (!opts.defaults) {\n const fontVariants = await getFontVariants()\n const options = await prompts([\n {\n type: opts.theme ? null : \"select\",\n name: \"theme\",\n message: `Which ${highlighter.info(\n \"primary\"\n )} color would you like to use?`,\n choices: THEMES.map((theme) => ({\n title: theme.label,\n value: theme.name,\n })),\n initial: 0,\n },\n {\n type: opts.neutral ? null : \"select\",\n name: \"neutral\",\n message: `Which ${highlighter.info(\n \"neutral\"\n )} color would you like to use?`,\n choices: NEUTRAL_THEMES.map((theme) => ({\n title:\n theme.name === DEFAULT_NEUTRAL_THEME\n ? `${theme.label} (Default)`\n : theme.label,\n value: theme.name,\n })),\n initial: 0,\n },\n {\n type: opts.fontVariant ? null : \"select\",\n name: \"fontVariant\",\n message: `Which ${highlighter.info(\n \"font variant\"\n )} would you like to use?`,\n choices: fontVariants.map((variant) => ({\n title: variant.label,\n value: variant.name,\n })),\n initial: Math.max(\n 0,\n fontVariants.findIndex((v) => v.name === DEFAULT_FONT_VARIANT)\n ),\n },\n ])\n\n opts.theme = options.theme ?? opts.theme ?? \"indigo\"\n opts.neutral = options.neutral ?? opts.neutral ?? DEFAULT_NEUTRAL_THEME\n opts.fontVariant =\n options.fontVariant ?? opts.fontVariant ?? DEFAULT_FONT_VARIANT\n cssVariables = opts.cssVariables\n }\n\n const themeName = opts.theme ?? \"indigo\"\n const neutralName = opts.neutral ?? DEFAULT_NEUTRAL_THEME\n const fontVariantName = opts.fontVariant ?? DEFAULT_FONT_VARIANT\n\n return {\n config: rawConfigSchema.parse({\n $schema: defaultConfig?.$schema,\n tailwind: {\n ...defaultConfig?.tailwind,\n baseColor: themeName,\n cssVariables,\n },\n rsc: defaultConfig?.rsc,\n tsx: defaultConfig?.tsx,\n iconLibrary,\n aliases: defaultConfig?.aliases,\n }),\n theme: themeName,\n neutral: neutralName,\n fontVariant: fontVariantName,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightAdd(options: z.infer<typeof addOptionsSchema>) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can add components, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://createui.co/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import fs from \"fs/promises\"\nimport path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { Config } from \"@/src/utils/get-config\"\n\nexport async function updateAppIndex(component: string, config: Config) {\n const indexPath = path.join(config.resolvedPaths.cwd, \"app/page.tsx\")\n\n if (!(await fs.stat(indexPath)).isFile()) {\n return\n }\n\n const [registryItem] = await getRegistryItems([component], { config })\n if (\n !registryItem?.meta?.importSpecifier ||\n !registryItem?.meta?.moduleSpecifier\n ) {\n return\n }\n\n // Overwrite the index file with the new import.\n const content = `import { ${registryItem?.meta?.importSpecifier} } from \"${registryItem.meta.moduleSpecifier}\"\\n\\nexport default function Page() {\\n return <${registryItem?.meta?.importSpecifier} />\\n}`\n await fs.writeFile(indexPath, content, \"utf8\")\n}\n","import path from \"path\"\nimport { runInit } from \"@/src/commands/init\"\nimport { preFlightAdd } from \"@/src/preflights/preflight-add\"\nimport { getRegistryItems, getcreateuiRegistryIndex } from \"@/src/registry/api\"\nimport { DEPRECATED_COMPONENTS } from \"@/src/registry/constants\"\nimport { registryItemTypeSchema } from \"@/src/registry/schema\"\nimport { isUniversalRegistryItem } from \"@/src/registry/utils\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { createProject } from \"@/src/utils/create-project\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { updateAppIndex } from \"@/src/utils/update-app-index\"\nimport { Command } from \"commander\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nexport const addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n yes: z.boolean(),\n overwrite: z.boolean(),\n cwd: z.string(),\n all: z.boolean(),\n path: z.string().optional(),\n silent: z.boolean(),\n srcDir: z.boolean().optional(),\n cssVariables: z.boolean(),\n})\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"names, url or local path to component\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .option(\"-s, --silent\", \"mute output.\", false)\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"--css-variables\", \"use css variables for theming.\", true)\n .option(\"--no-css-variables\", \"do not use css variables for theming.\")\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n cwd: path.resolve(opts.cwd),\n ...opts,\n })\n\n await loadEnvFiles(options.cwd)\n\n let initialConfig = await getConfig(options.cwd)\n if (!initialConfig) {\n initialConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n }\n\n let itemType: z.infer<typeof registryItemTypeSchema> | undefined\n let shouldInstallBaseStyle = true\n if (components.length > 0) {\n const [registryItem] = await getRegistryItems([components[0]], {\n config: initialConfig,\n })\n itemType = registryItem?.type\n shouldInstallBaseStyle = itemType !== \"registry:theme\"\n\n if (isUniversalRegistryItem(registryItem)) {\n await addComponents(components, initialConfig, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n return\n }\n\n if (!options.yes && itemType === \"registry:theme\") {\n logger.break()\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n message: highlighter.warn(\n `You are about to install a new ${itemType.replace(\n \"registry:\",\n \"\"\n )}. \\nExisting CSS variables and components will be overwritten. Continue?`\n ),\n })\n if (!confirm) {\n logger.break()\n logger.log(`Installation cancelled.`)\n logger.break()\n process.exit(1)\n }\n }\n }\n\n if (!options.components?.length) {\n options.components = await promptForRegistryComponents(options)\n }\n\n const deprecatedComponents = DEPRECATED_COMPONENTS.filter((component) =>\n options.components?.includes(component.name)\n )\n\n if (deprecatedComponents?.length) {\n logger.break()\n deprecatedComponents.forEach((component) => {\n logger.warn(highlighter.warn(component.message))\n })\n logger.break()\n process.exit(1)\n }\n\n let { errors, config } = await preFlightAdd(options)\n\n // No components.json file. Prompt the user to run init.\n let initHasRun = false\n if (errors[ERRORS.MISSING_CONFIG]) {\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: `You need to create a ${highlighter.info(\n \"components.json\"\n )} file to add components. Proceed?`,\n initial: true,\n })\n\n if (!proceed) {\n logger.break()\n process.exit(1)\n }\n\n config = await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: false,\n silent: options.silent,\n isNewProject: false,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n components: options.components,\n })\n initHasRun = true\n }\n\n let shouldUpdateAppIndex = false\n\n if (errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT]) {\n const { projectPath, template } = await createProject({\n cwd: options.cwd,\n force: options.overwrite,\n srcDir: options.srcDir,\n components: options.components,\n })\n if (!projectPath) {\n logger.break()\n process.exit(1)\n }\n options.cwd = projectPath\n\n if (template === \"next-monorepo\") {\n options.cwd = path.resolve(options.cwd, \"apps/web\")\n config = await getConfig(options.cwd)\n } else {\n config = await runInit({\n cwd: options.cwd,\n yes: true,\n force: true,\n defaults: false,\n skipPreflight: true,\n silent: options.silent,\n isNewProject: true,\n srcDir: options.srcDir,\n cssVariables: options.cssVariables,\n baseStyle: shouldInstallBaseStyle,\n components: options.components,\n })\n initHasRun = true\n\n shouldUpdateAppIndex =\n options.components?.length === 1 &&\n !!options.components[0].match(/\\/chat\\/b\\//)\n }\n }\n\n if (!config) {\n throw new Error(\n `Failed to read config at ${highlighter.info(options.cwd)}.`\n )\n }\n\n if (!initHasRun) {\n await addComponents(options.components, config, {\n ...options,\n baseStyle: shouldInstallBaseStyle,\n })\n }\n\n // If we're adding a single component from a remote registry,\n // let's update the app/page.tsx file to import the component.\n if (shouldUpdateAppIndex) {\n await updateAppIndex(options.components[0], config)\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nasync function promptForRegistryComponents(\n options: z.infer<typeof addOptionsSchema>\n) {\n const registryIndex = await getcreateuiRegistryIndex()\n if (!registryIndex) {\n logger.break()\n handleError(new Error(\"Failed to fetch registry index.\"))\n return []\n }\n\n if (options.all) {\n return registryIndex\n .map((entry) => entry.name)\n .filter(\n (component) => !DEPRECATED_COMPONENTS.some((c) => c.name === component)\n )\n }\n\n if (options.components?.length) {\n return options.components\n }\n\n const { components } = await prompts({\n type: \"multiselect\",\n name: \"components\",\n message: \"Which components would you like to add?\",\n hint: \"Space to select. A to toggle all. Enter to submit.\",\n instructions: false,\n choices: registryIndex\n .filter(\n (entry) =>\n entry.type === \"registry:ui\" &&\n !DEPRECATED_COMPONENTS.some(\n (component) => component.name === entry.name\n )\n )\n .map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: options.all ? true : options.components?.includes(entry.name),\n })),\n })\n\n if (!components?.length) {\n logger.warn(\"No components selected. Exiting.\")\n logger.info(\"\")\n process.exit(1)\n }\n\n const result = z.array(z.string()).safeParse(components)\n if (!result.success) {\n logger.error(\"\")\n handleError(new Error(\"Something went wrong. Please try again.\"))\n return []\n }\n return result.data\n}\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n if (Object.keys(errors).length > 0) {\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE]) {\n logger.break()\n logger.error(\n `The path ${highlighter.info(\n resolvePaths.registryFile\n )} does not exist.`\n )\n }\n\n logger.break()\n process.exit(1)\n }\n\n return {\n errors,\n resolvePaths,\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightBuild } from \"@/src/preflights/preflight-build\"\nimport { registryItemSchema, registrySchema } from \"@/src/schema\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n})\n\nexport const build = new Command()\n .name(\"build\")\n .description(\"build components for a createui registry\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (registry: string, opts) => {\n try {\n const options = buildOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n })\n\n const { resolvePaths } = await preFlightBuild(options)\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n for (const registryItem of result.data.items) {\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] =\n \"https://createui.co/schema/registry-item.json\"\n\n // Loop through each file in the files array.\n for (const file of registryItem.files ?? []) {\n file[\"content\"] = await fs.readFile(\n path.resolve(resolvePaths.cwd, file.path),\n \"utf-8\"\n )\n }\n\n // Validate the registry item.\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getPreset, getPresets, getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { isUrl } from \"@/src/registry/utils\"\nimport { Preset } from \"@/src/schema\"\nimport { addComponents } from \"@/src/utils/add-components\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { updateFiles } from \"@/src/utils/updaters/update-files\"\nimport { Command } from \"commander\"\nimport dedent from \"dedent\"\nimport open from \"open\"\nimport prompts from \"prompts\"\nimport validateProjectName from \"validate-npm-package-name\"\n\nimport { initOptionsSchema, runInit } from \"./init\"\n\nconst createui_URL = \"https://createui.co\"\n\nconst CREATE_TEMPLATES = {\n next: \"Next.js\",\n vite: \"Vite\",\n start: \"TanStack Start\",\n} as const\n\ntype Template = keyof typeof CREATE_TEMPLATES\n\nexport const create = new Command()\n .name(\"create\")\n .description(\"create a new project with createui\")\n .argument(\"[name]\", \"the name of your project\")\n .option(\n \"-t, --template <template>\",\n \"the template to use. e.g. next, start or vite\"\n )\n .option(\"-p, --preset [name]\", \"use a preset configuration\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\n \"--src-dir\",\n \"use the src directory when creating a new project.\",\n false\n )\n .option(\n \"--no-src-dir\",\n \"do not use the src directory when creating a new project.\"\n )\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .action(async (name, opts) => {\n try {\n // If no arguments or options provided, show initial prompt.\n const hasNoArgs = !name && !opts.template && !opts.preset\n if (hasNoArgs) {\n const createUrl = getcreateuiCreateUrl()\n logger.log(\"Build your own createui.\")\n logger.log(\n `You will be taken to ${highlighter.info(\n createUrl\n )} to build your custom design system.`\n )\n logger.break()\n\n const { proceed } = await prompts({\n type: \"confirm\",\n name: \"proceed\",\n message: \"Open in browser?\",\n initial: true,\n })\n\n if (proceed) {\n await open(createUrl)\n }\n\n process.exit(0)\n }\n\n // Prompt for project name if not provided.\n let projectName = name\n if (!projectName) {\n const { enteredName } = await prompts({\n type: \"text\",\n name: \"enteredName\",\n message: \"What is your project named?\",\n initial: opts.template ? `${opts.template}-app` : \"my-app\",\n format: (value: string) => value.trim(),\n validate: (name) => {\n const validation = validateProjectName(\n path.basename(path.resolve(name))\n )\n if (validation.validForNewPackages) {\n return true\n }\n return \"Invalid project name. Name should be lowercase, URL-friendly, and not start with a period or underscore.\"\n },\n })\n\n if (!enteredName) {\n process.exit(0)\n }\n\n projectName = enteredName\n }\n\n // Prompt for template if not provided.\n let template = opts.template\n if (!template) {\n const { selectedTemplate } = await prompts({\n type: \"select\",\n name: \"selectedTemplate\",\n message: `Which ${highlighter.info(\n \"template\"\n )} would you like to use?`,\n choices: Object.entries(CREATE_TEMPLATES).map(([key, value]) => ({\n title: value,\n value: key,\n })),\n })\n\n if (!selectedTemplate) {\n process.exit(0)\n }\n\n template = selectedTemplate\n }\n\n // Handle preset selection.\n const presetResult = await handlePresetOption(opts.preset ?? true)\n\n if (!presetResult) {\n process.exit(0)\n }\n\n // Determine initUrl and baseColor based on preset type.\n let initUrl: string\n let baseColor: string\n\n if (\"_isUrl\" in presetResult) {\n // User provided a URL directly.\n initUrl = presetResult.url\n const url = new URL(presetResult.url)\n baseColor = url.searchParams.get(\"theme\") ?? \"indigo\"\n } else {\n // User selected a preset by name.\n initUrl = buildInitUrl(presetResult)\n baseColor = presetResult.theme\n }\n\n // Fetch the registry:base item to get its config.\n const shadowConfig = configWithDefaults({})\n\n const [item] = await getRegistryItems([initUrl], {\n config: shadowConfig,\n })\n\n // Extract config from registry:base item.\n let registryBaseConfig = undefined\n if (item?.type === \"registry:base\" && item.config) {\n registryBaseConfig = item.config\n }\n\n const options = initOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n name: projectName,\n components: [initUrl],\n yes: opts.yes,\n defaults: false,\n force: false,\n silent: false,\n isNewProject: true,\n srcDir: opts.srcDir,\n cssVariables: true,\n template,\n baseColor,\n baseStyle: false,\n registryBaseConfig,\n skipPreflight: false,\n })\n\n const config = await runInit(options)\n\n // Add component example.\n if (config) {\n await addComponents([\"component-example\"], config, {\n baseStyle: false,\n silent: true,\n overwrite: true,\n })\n\n const templateFiles = getTemplateFiles(template as Template)\n if (templateFiles.length > 0) {\n await updateFiles(templateFiles, config, {\n overwrite: true,\n silent: true,\n })\n }\n }\n\n logger.log(\n `${highlighter.success(\n \"Success!\"\n )} Project initialization completed.\\nYou may now add components.`\n )\n logger.break()\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nfunction buildInitUrl(preset: Preset) {\n const params = new URLSearchParams({\n theme: preset.theme,\n neutralTheme: preset.neutralTheme,\n iconLibrary: preset.iconLibrary,\n fontVariant: preset.fontVariant,\n menuAccent: preset.menuAccent,\n menuColor: preset.menuColor,\n })\n\n return `${getcreateuiInitUrl()}?${params.toString()}`\n}\n\nasync function handlePresetOption(presetArg: string | boolean) {\n // If --preset is used without a name, show interactive list.\n if (presetArg === true) {\n const presets = await getPresets()\n\n const { selectedPreset } = await prompts({\n type: \"select\",\n name: \"selectedPreset\",\n message: `Which ${highlighter.info(\"preset\")} would you like to use?`,\n choices: [\n ...presets.map((preset) => ({\n title: preset.title,\n description: preset.description,\n value: preset.name,\n })),\n {\n title: \"Custom\",\n description: \"Build your own on https://createui.co\",\n value: \"custom\",\n },\n ],\n })\n\n if (!selectedPreset) {\n return null\n }\n\n if (selectedPreset === \"custom\") {\n const url = getcreateuiCreateUrl()\n logger.info(`\\nOpening ${highlighter.info(url)} in your browser...\\n`)\n await open(url)\n return null\n }\n\n return presets.find((p) => p.name === selectedPreset) ?? null\n }\n\n // If --preset NAME or URL is provided.\n if (typeof presetArg === \"string\") {\n // Check if it's a URL.\n if (isUrl(presetArg)) {\n return { _isUrl: true, url: presetArg } as const\n }\n\n // Otherwise, fetch that preset by name.\n const preset = await getPreset(presetArg)\n\n if (!preset) {\n const presets = await getPresets()\n const presetNames = presets.map((p) => p.name).join(\", \")\n logger.error(\n `Preset \"${presetArg}\" not found. Available presets: ${presetNames}`\n )\n process.exit(1)\n }\n\n return preset\n }\n\n return null\n}\n\nfunction getTemplateFiles(template: Template) {\n switch (template) {\n case \"vite\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/App.tsx\",\n target: \"src/App.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport function App() {\n return <ComponentExample />;\n}\n\nexport default App;\n`,\n },\n ]\n case \"next\":\n return [\n {\n type: \"registry:page\" as const,\n path: \"app/page.tsx\",\n target: \"app/page.tsx\",\n content: dedent`import { ComponentExample } from \"@/components/component-example\";\n\nexport default function Page() {\n return <ComponentExample />;\n}\n`,\n },\n ]\n case \"start\":\n return [\n {\n type: \"registry:file\" as const,\n path: \"src/routes/index.tsx\",\n target: \"src/routes/index.tsx\",\n content: dedent`import { createFileRoute } from \"@tanstack/react-router\";\nimport { ComponentExample } from \"@/components/component-example\";\n\nexport const Route = createFileRoute(\"/\")({ component: App });\n\nfunction App() {\n return (\n <ComponentExample />\n );\n}\n`,\n },\n ]\n default:\n return []\n }\n}\n\nfunction getcreateuiCreateUrl() {\n return `${createui_URL}/create`\n}\n\nfunction getcreateuiInitUrl() {\n return `${createui_URL}/init`\n}\n","import { existsSync, promises as fs } from \"fs\"\nimport path from \"path\"\nimport {\n fetchTree,\n getItemTargetPath,\n getcreateuiRegistryIndex,\n} from \"@/src/registry/api\"\nimport { registryIndexSchema } from \"@/src/schema\"\nimport { Config, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { transform } from \"@/src/utils/transformers\"\nimport { Command } from \"commander\"\nimport { diffLines, type Change } from \"diff\"\nimport { z } from \"zod\"\n\nconst updateOptionsSchema = z.object({\n component: z.string().optional(),\n yes: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n})\n\nexport const diff = new Command()\n .name(\"diff\")\n .description(\"check for updates against the registry\")\n .argument(\"[component]\", \"the component name\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (name, opts) => {\n try {\n const options = updateOptionsSchema.parse({\n component: name,\n ...opts,\n })\n\n const cwd = path.resolve(options.cwd)\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`)\n process.exit(1)\n }\n\n const config = await getConfig(cwd)\n if (!config) {\n logger.warn(\n `Configuration is missing. Please run ${highlighter.success(\n `init`\n )} to create a components.json file.`\n )\n process.exit(1)\n }\n\n const registryIndex = await getcreateuiRegistryIndex()\n\n if (!registryIndex) {\n handleError(new Error(\"Failed to fetch registry index.\"))\n process.exit(1)\n }\n\n if (!options.component) {\n const targetDir = config.resolvedPaths.components\n\n // Find all components that exist in the project.\n const projectComponents = registryIndex.filter((item) => {\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n if (existsSync(filePath)) {\n return true\n }\n }\n\n return false\n })\n\n // Check for updates.\n const componentsWithUpdates = []\n for (const component of projectComponents) {\n const changes = await diffComponent(component, config)\n if (changes.length) {\n componentsWithUpdates.push({\n name: component.name,\n changes,\n })\n }\n }\n\n if (!componentsWithUpdates.length) {\n logger.info(\"No updates found.\")\n process.exit(0)\n }\n\n logger.info(\"The following components have updates available:\")\n for (const component of componentsWithUpdates) {\n logger.info(`- ${component.name}`)\n for (const change of component.changes) {\n logger.info(` - ${change.filePath}`)\n }\n }\n logger.break()\n logger.info(\n `Run ${highlighter.success(`diff <component>`)} to see the changes.`\n )\n process.exit(0)\n }\n\n // Show diff for a single component.\n const component = registryIndex.find(\n (item) => item.name === options.component\n )\n\n if (!component) {\n logger.error(\n `The component ${highlighter.success(\n options.component\n )} does not exist.`\n )\n process.exit(1)\n }\n\n const changes = await diffComponent(component, config)\n\n if (!changes.length) {\n logger.info(`No updates found for ${options.component}.`)\n process.exit(0)\n }\n\n for (const change of changes) {\n logger.info(`- ${change.filePath}`)\n await printDiff(change.patch)\n logger.info(\"\")\n }\n } catch (error) {\n handleError(error)\n }\n })\n\nasync function diffComponent(\n component: z.infer<typeof registryIndexSchema>[number],\n config: Config\n) {\n const payload = await fetchTree(\"\", [component])\n\n if (!payload) {\n return []\n }\n\n const changes = []\n\n for (const item of payload) {\n const targetDir = await getItemTargetPath(config, item)\n\n if (!targetDir) {\n continue\n }\n\n for (const file of item.files ?? []) {\n const filePath = path.resolve(\n targetDir,\n typeof file === \"string\" ? file : file.path\n )\n\n if (!existsSync(filePath)) {\n continue\n }\n\n const fileContent = await fs.readFile(filePath, \"utf8\")\n\n if (typeof file === \"string\" || !file.content) {\n continue\n }\n\n const registryContent = await transform({\n filename: file.path,\n raw: file.content,\n config,\n })\n\n const patch = diffLines(registryContent as string, fileContent)\n if (patch.length > 1) {\n changes.push({\n filePath,\n patch,\n })\n }\n }\n }\n\n return changes\n}\n\nasync function printDiff(diff: Change[]) {\n diff.forEach((part) => {\n if (part) {\n if (part.added) {\n return process.stdout.write(highlighter.success(part.value))\n }\n if (part.removed) {\n return process.stdout.write(highlighter.error(part.value))\n }\n\n return process.stdout.write(part.value)\n }\n })\n}\n","import { getConfig } from \"@/src/utils/get-config\"\nimport { getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const info = new Command()\n .name(\"info\")\n .description(\"get information about your project\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (opts) => {\n try {\n logger.info(\"> project info\")\n console.log(await getProjectInfo(opts.cwd))\n logger.break()\n logger.info(\"> components.json\")\n console.log(await getConfig(opts.cwd))\n } catch (error) {\n handleError(error)\n }\n })\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { server } from \"@/src/mcp\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { getPackageManager } from \"@/src/utils/get-package-manager\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\"\nimport { Command } from \"commander\"\nimport deepmerge from \"deepmerge\"\nimport { execa } from \"execa\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport z from \"zod\"\n\n// The published CLI package (bin: `createui`). Mirror the spec used by\n// `npxcreateui` in src/mcp/utils.ts so generated client configs and the\n// installed devDependency point at the real package.\nconst createui_MCP_PACKAGE = \"@create-ui/cli\"\n\nconst CLIENTS = [\n {\n name: \"claude\",\n label: \"Claude Code\",\n configPath: \".mcp.json\",\n config: {\n mcpServers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"cursor\",\n label: \"Cursor\",\n configPath: \".cursor/mcp.json\",\n config: {\n mcpServers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"vscode\",\n label: \"VS Code\",\n configPath: \".vscode/mcp.json\",\n config: {\n servers: {\n createui: {\n command: \"npx\",\n args: [createui_MCP_PACKAGE, \"mcp\"],\n },\n },\n },\n },\n {\n name: \"codex\",\n label: \"Codex\",\n configPath: \".codex/config.toml\",\n config: `[mcp_servers.createui]\ncommand = \"npx\"\nargs = [\"${createui_MCP_PACKAGE}\", \"mcp\"]\n`,\n },\n {\n name: \"opencode\",\n label: \"OpenCode\",\n configPath: \"opencode.json\",\n config: {\n $schema: \"https://opencode.ai/config.json\",\n mcp: {\n createui: {\n type: \"local\",\n command: [\"npx\", createui_MCP_PACKAGE, \"mcp\"],\n enabled: true,\n },\n },\n },\n },\n] as const\n\nconst DEPENDENCIES = [createui_MCP_PACKAGE]\n\nexport const mcp = new Command()\n .name(\"mcp\")\n .description(\"MCP server and configuration commands\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (options) => {\n try {\n await loadEnvFiles(options.cwd)\n const transport = new StdioServerTransport()\n await server.connect(transport)\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n\nconst mcpInitOptionsSchema = z.object({\n client: z.enum([\"claude\", \"cursor\", \"vscode\", \"codex\", \"opencode\"]),\n cwd: z.string(),\n})\n\nmcp\n .command(\"init\")\n .description(\"Initialize MCP configuration for your client\")\n .option(\n \"--client <client>\",\n `MCP client (${CLIENTS.map((c) => c.name).join(\", \")})`\n )\n .action(async (opts, command) => {\n try {\n // Get the cwd from parent command.\n const parentOpts = command.parent?.opts() || {}\n const cwd = parentOpts.cwd || process.cwd()\n\n let client = opts.client\n\n if (!client) {\n const response = await prompts({\n type: \"select\",\n name: \"client\",\n message: \"Which MCP client are you using?\",\n choices: CLIENTS.map((c) => ({\n title: c.label,\n value: c.name,\n })),\n })\n\n if (!response.client) {\n logger.break()\n process.exit(1)\n }\n\n client = response.client\n }\n\n const options = mcpInitOptionsSchema.parse({\n client,\n cwd,\n })\n\n const config = await getConfig(options.cwd)\n\n if (options.client === \"codex\") {\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.log(\"To configure the createui MCP server in Codex:\")\n logger.break()\n logger.log(\n `1. Open or create the file ${highlighter.info(\n \"~/.codex/config.toml\"\n )}`\n )\n logger.log(\"2. Add the following configuration:\")\n logger.log()\n logger.info(`[mcp_servers.createui]\ncommand = \"npx\"\nargs = [\"${createui_MCP_PACKAGE}\", \"mcp\"]`)\n logger.break()\n logger.info(\"3. Restart Codex to load the MCP server\")\n logger.break()\n process.exit(0)\n }\n\n const configSpinner = spinner(\"Configuring MCP server...\").start()\n const configPath = await runMcpInit(options)\n configSpinner.succeed(\"Configuring MCP server.\")\n\n if (config) {\n await updateDependencies([], DEPENDENCIES, config, {\n silent: false,\n })\n } else {\n const packageManager = await getPackageManager(options.cwd)\n const installCommand = packageManager === \"npm\" ? \"install\" : \"add\"\n const devFlag = packageManager === \"npm\" ? \"--save-dev\" : \"-D\"\n\n const installSpinner = spinner(\"Installing dependencies...\").start()\n await execa(\n packageManager,\n [installCommand, devFlag, ...DEPENDENCIES],\n {\n cwd: options.cwd,\n }\n )\n installSpinner.succeed(\"Installing dependencies.\")\n }\n\n logger.break()\n logger.success(`Configuration saved to ${configPath}.`)\n logger.break()\n } catch (error) {\n handleError(error)\n }\n })\n\nconst overwriteMerge = (_: any[], sourceArray: any[]) => sourceArray\n\nasync function runMcpInit(options: z.infer<typeof mcpInitOptionsSchema>) {\n const { client, cwd } = options\n\n const clientInfo = CLIENTS.find((c) => c.name === client)\n if (!clientInfo) {\n throw new Error(\n `Unknown client: ${client}. Available clients: ${CLIENTS.map(\n (c) => c.name\n ).join(\", \")}`\n )\n }\n\n const configPath = path.join(cwd, clientInfo.configPath)\n const dir = path.dirname(configPath)\n await fsExtra.ensureDir(dir)\n\n // Handle JSON format.\n let existingConfig = {}\n try {\n const content = await fs.readFile(configPath, \"utf-8\")\n existingConfig = JSON.parse(content)\n } catch {}\n\n const mergedConfig = deepmerge(\n existingConfig,\n clientInfo.config as Record<string, unknown>,\n { arrayMerge: overwriteMerge }\n )\n\n await fs.writeFile(\n configPath,\n JSON.stringify(mergedConfig, null, 2) + \"\\n\",\n \"utf-8\"\n )\n\n return clientInfo.configPath\n}\n","import { randomBytes } from \"crypto\"\nimport { promises as fs } from \"fs\"\nimport { tmpdir } from \"os\"\nimport path from \"path\"\nimport { getRegistryIcons } from \"@/src/registry/api\"\nimport { iconsSchema } from \"@/src/schema\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { LEGACY_ICON_LIBRARIES } from \"@/src/utils/legacy-icon-libraries\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\nimport { Project, ScriptKind, SyntaxKind } from \"ts-morph\"\nimport { z } from \"zod\"\n\nexport async function migrateIcons(config: Config) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const [files, registryIcons] = await Promise.all([\n fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n }),\n getRegistryIcons(),\n ])\n\n if (Object.keys(registryIcons).length === 0) {\n throw new Error(\"Something went wrong fetching the registry icons.\")\n }\n\n const libraryChoices = Object.entries(LEGACY_ICON_LIBRARIES).map(\n ([name, iconLibrary]) => ({\n title: iconLibrary.name,\n value: name,\n })\n )\n\n const migrateOptions = await prompts([\n {\n type: \"select\",\n name: \"sourceLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate from\"\n )}?`,\n choices: libraryChoices,\n },\n {\n type: \"select\",\n name: \"targetLibrary\",\n message: `Which icon library would you like to ${highlighter.info(\n \"migrate to\"\n )}?`,\n choices: libraryChoices,\n },\n ])\n\n if (migrateOptions.sourceLibrary === migrateOptions.targetLibrary) {\n throw new Error(\n \"You cannot migrate to the same icon library. Please choose a different icon library.\"\n )\n }\n\n if (\n !(\n migrateOptions.sourceLibrary in LEGACY_ICON_LIBRARIES &&\n migrateOptions.targetLibrary in LEGACY_ICON_LIBRARIES\n )\n ) {\n throw new Error(\"Invalid icon library. Please choose a valid icon library.\")\n }\n\n const sourceLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.sourceLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const targetLibrary =\n LEGACY_ICON_LIBRARIES[\n migrateOptions.targetLibrary as keyof typeof LEGACY_ICON_LIBRARIES\n ]\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} from ${highlighter.info(sourceLibrary.name)} to ${highlighter.info(\n targetLibrary.name\n )}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n\n if (targetLibrary.package) {\n await updateDependencies([targetLibrary.package], [], config, {\n silent: false,\n })\n }\n\n const migrationSpinner = spinner(`Migrating icons...`)?.start()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const content = await migrateIconsFile(\n fileContent,\n migrateOptions.sourceLibrary,\n migrateOptions.targetLibrary,\n registryIcons\n )\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migration complete.\")\n}\n\nexport async function migrateIconsFile(\n content: string,\n sourceLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n targetLibrary: keyof typeof LEGACY_ICON_LIBRARIES,\n iconsMapping: z.infer<typeof iconsSchema>\n) {\n const sourceLibraryImport = LEGACY_ICON_LIBRARIES[sourceLibrary]?.import\n const targetLibraryImport = LEGACY_ICON_LIBRARIES[targetLibrary]?.import\n\n const dir = await fs.mkdtemp(path.join(tmpdir(), \"createui-\"))\n const project = new Project({\n compilerOptions: {},\n })\n\n const tempFile = path.join(\n dir,\n `createui-icons-${randomBytes(4).toString(\"hex\")}.tsx`\n )\n const sourceFile = project.createSourceFile(tempFile, content, {\n scriptKind: ScriptKind.TSX,\n })\n\n // Find all sourceLibrary imports.\n let targetedIcons: string[] = []\n for (const importDeclaration of sourceFile.getImportDeclarations() ?? []) {\n if (\n importDeclaration.getModuleSpecifier()?.getText() !==\n `\"${sourceLibraryImport}\"`\n ) {\n continue\n }\n\n for (const specifier of importDeclaration.getNamedImports() ?? []) {\n const iconName = specifier.getName()\n\n // TODO: this is O(n^2) but okay for now.\n const targetedIcon = Object.values(iconsMapping).find(\n (icon) => icon[sourceLibrary] === iconName\n )?.[targetLibrary]\n\n if (!targetedIcon || targetedIcons.includes(targetedIcon)) {\n continue\n }\n\n targetedIcons.push(targetedIcon)\n\n // Remove the named import.\n specifier.remove()\n\n // Replace with the targeted icon.\n sourceFile\n .getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n .filter((node) => node.getTagNameNode()?.getText() === iconName)\n .forEach((node) => node.getTagNameNode()?.replaceWithText(targetedIcon))\n }\n\n // If the named import is empty, remove the import declaration.\n if (importDeclaration.getNamedImports()?.length === 0) {\n importDeclaration.remove()\n }\n }\n\n if (targetedIcons.length > 0) {\n sourceFile.addImportDeclaration({\n moduleSpecifier: targetLibraryImport,\n namedImports: targetedIcons.map((icon) => ({\n name: icon,\n })),\n })\n }\n\n return await sourceFile.getText()\n}\n","import { promises as fs } from \"fs\"\nimport path from \"path\"\nimport { Config } from \"@/src/utils/get-config\"\nimport { getPackageInfo } from \"@/src/utils/get-package-info\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { updateDependencies } from \"@/src/utils/updaters/update-dependencies\"\nimport fg from \"fast-glob\"\nimport prompts from \"prompts\"\n\nfunction toPascalCase(str: string): string {\n return str\n .split(\"-\")\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\")\n}\n\nfunction processNamedImports(\n namedImports: string,\n isTypeOnly: boolean,\n imports: Array<{ name: string; alias?: string; isType?: boolean }>,\n packageName: string\n) {\n // Clean up multi-line imports.\n // Remove comments and whitespace.\n const cleanedImports = namedImports\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .trim()\n\n const namedImportList = cleanedImports\n .split(\",\")\n .map((importItem) => importItem.trim())\n .filter(Boolean)\n\n for (const importItem of namedImportList) {\n const inlineTypeMatch = importItem.match(/^type\\s+(\\w+)(?:\\s+as\\s+(\\w+))?$/)\n const aliasMatch = importItem.match(/^(\\w+)\\s+as\\s+(\\w+)$/)\n\n if (inlineTypeMatch) {\n // Inline type: \"type DialogProps\" or \"type DialogProps as Props\"\n const importName = inlineTypeMatch[1]\n const importAlias = inlineTypeMatch[2]\n\n if (packageName === \"slot\" && importName === \"Slot\" && !importAlias) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: true,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: true,\n })\n }\n } else if (aliasMatch) {\n // Regular import with alias: \"Root as DialogRoot\"\n const importName = aliasMatch[1]\n const importAlias = aliasMatch[2]\n\n if (\n packageName === \"slot\" &&\n importName === \"Slot\" &&\n importAlias === \"Slot\"\n ) {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importName,\n alias: importAlias,\n isType: isTypeOnly,\n })\n }\n } else {\n // Simple import: \"Root\"\n // Special handling for Slot: always alias it as SlotPrimitive\n if (packageName === \"slot\" && importItem === \"Slot\") {\n imports.push({\n name: \"Slot\",\n alias: \"SlotPrimitive\",\n isType: isTypeOnly,\n })\n } else {\n imports.push({\n name: importItem,\n isType: isTypeOnly,\n })\n }\n }\n }\n}\n\nexport async function migrateRadix(\n config: Config,\n options: { yes?: boolean } = {}\n) {\n if (!config.resolvedPaths.ui) {\n throw new Error(\n \"We could not find a valid `ui` path in your `components.json` file. Please ensure you have a valid `ui` path in your `components.json` file.\"\n )\n }\n\n const uiPath = config.resolvedPaths.ui\n const files = await fg(\"**/*.{js,ts,jsx,tsx}\", {\n cwd: uiPath,\n })\n\n if (!options.yes) {\n const { confirm } = await prompts({\n type: \"confirm\",\n name: \"confirm\",\n initial: true,\n message: `We will migrate ${highlighter.info(\n files.length\n )} files in ${highlighter.info(\n `./${path.relative(config.resolvedPaths.cwd, uiPath)}`\n )} to ${highlighter.info(\"radix-ui\")}. Continue?`,\n })\n\n if (!confirm) {\n logger.info(\"Migration cancelled.\")\n process.exit(0)\n }\n }\n\n const migrationSpinner = spinner(`Migrating imports...`)?.start()\n const foundPackages = new Set<string>()\n\n await Promise.all(\n files.map(async (file) => {\n migrationSpinner.text = `Migrating ${file}...`\n\n const filePath = path.join(uiPath, file)\n const fileContent = await fs.readFile(filePath, \"utf-8\")\n\n const { content, replacedPackages } = await migrateRadixFile(fileContent)\n\n // Track which packages we found\n replacedPackages.forEach((pkg) => foundPackages.add(pkg))\n\n await fs.writeFile(filePath, content)\n })\n )\n\n migrationSpinner.succeed(\"Migrating imports.\")\n\n // Update package.json dependencies\n const packageSpinner = spinner(`Updating package.json...`)?.start()\n\n try {\n const packageJson = getPackageInfo(config.resolvedPaths.cwd, false)\n\n if (!packageJson) {\n packageSpinner.fail(\"Could not read package.json\")\n logger.warn(\n \"Could not update package.json. You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n return\n }\n\n const foundPackagesArray = Array.from(foundPackages)\n\n // Remove packages from both dependencies and devDependencies if found in source files\n const dependencyTypes = [\"dependencies\", \"devDependencies\"] as const\n for (const depType of dependencyTypes) {\n if (packageJson[depType]) {\n for (const pkg of foundPackagesArray) {\n if (packageJson[depType]![pkg]) {\n delete packageJson[depType]![pkg]\n }\n }\n }\n }\n\n // Add radix-ui if we found any Radix packages.\n if (foundPackagesArray.length > 0) {\n if (!packageJson.dependencies) {\n packageJson.dependencies = {}\n }\n packageJson.dependencies[\"radix-ui\"] = \"latest\"\n\n const packageJsonPath = path.join(\n config.resolvedPaths.cwd,\n \"package.json\"\n )\n await fs.writeFile(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\"\n )\n\n packageSpinner.succeed(`Updated package.json.`)\n\n // Install radix-ui dependency.\n await updateDependencies([\"radix-ui\"], [], config, { silent: false })\n } else {\n packageSpinner.succeed(\"No packages found in source files.\")\n }\n } catch (error) {\n packageSpinner.fail(\"Failed to update package.json\")\n logger.warn(\n \"You may need to manually replace @radix-ui/react-* packages with radix-ui\"\n )\n }\n}\n\nexport async function migrateRadixFile(\n content: string\n): Promise<{ content: string; replacedPackages: string[] }> {\n // Enhanced regex to handle type-only imports, but exclude react-icons\n // Also capture optional semicolon at the end\n const radixImportPattern =\n /import\\s+(?:(type)\\s+)?(?:\\*\\s+as\\s+(\\w+)|{([^}]+)})\\s+from\\s+([\"'])@radix-ui\\/react-([^\"']+)\\4(;?)/g\n\n const imports: Array<{ name: string; alias?: string; isType?: boolean }> = []\n const linesToRemove: string[] = []\n const replacedPackages: string[] = []\n let quoteStyle = '\"' // Default to double quotes\n let hasSemicolon = false // Track if any import had a semicolon\n\n let result = content\n let match\n\n // Find all Radix imports\n while ((match = radixImportPattern.exec(content)) !== null) {\n const [\n fullMatch,\n typeKeyword,\n namespaceAlias,\n namedImports,\n quote,\n packageName,\n semicolon,\n ] = match\n\n // Skip react-icons package and any sub-paths (like react-icons/dist/types)\n if (packageName === \"icons\" || packageName.startsWith(\"icons/\")) {\n continue\n }\n\n linesToRemove.push(fullMatch)\n\n // Use the quote style and semicolon style from the first import\n if (linesToRemove.length === 1) {\n quoteStyle = quote\n hasSemicolon = semicolon === \";\"\n }\n\n // Track which package we're replacing\n replacedPackages.push(`@radix-ui/react-${packageName}`)\n\n const isTypeOnly = Boolean(typeKeyword)\n\n if (namespaceAlias) {\n // Handle namespace imports: import * as DialogPrimitive from \"@radix-ui/react-dialog\"\n const componentName = toPascalCase(packageName)\n imports.push({\n name: componentName,\n alias: namespaceAlias,\n isType: isTypeOnly,\n })\n } else if (namedImports) {\n // Handle named imports: import { Root, Trigger } from \"@radix-ui/react-dialog\"\n // or import type { DialogProps } from \"@radix-ui/react-dialog\"\n // or import { type DialogProps, Root } from \"@radix-ui/react-dialog\"\n\n processNamedImports(namedImports, isTypeOnly, imports, packageName)\n }\n }\n\n if (imports.length === 0) {\n return {\n content,\n replacedPackages: [],\n }\n }\n\n // Remove duplicates.\n // Considering name, alias, and type status.\n const uniqueImports = imports.filter(\n (importName, index, self) =>\n index ===\n self.findIndex(\n (i) =>\n i.name === importName.name &&\n i.alias === importName.alias &&\n i.isType === importName.isType\n )\n )\n\n // Create the unified import with preserved quote style and type annotations\n const importList = uniqueImports\n .map((imp) => {\n const typePrefix = imp.isType ? \"type \" : \"\"\n return imp.alias\n ? `${typePrefix}${imp.name} as ${imp.alias}`\n : `${typePrefix}${imp.name}`\n })\n .join(\", \")\n\n const unifiedImport = `import { ${importList} } from ${quoteStyle}radix-ui${quoteStyle}${\n hasSemicolon ? \";\" : \"\"\n }`\n\n // Replace first import with unified import, remove the rest\n result = linesToRemove.reduce((acc, line, index) => {\n return acc.replace(line, index === 0 ? unifiedImport : \"\")\n }, result)\n\n // Clean up extra blank lines\n result = result.replace(/\\n\\s*\\n\\s*\\n/g, \"\\n\\n\")\n\n // Handle special case for Slot usage transformation\n // Now that we import { Slot as SlotPrimitive }, we need to:\n // 1. Transform: const Comp = asChild ? Slot : [ANYTHING] -> const Comp = asChild ? SlotPrimitive.Slot : [ANYTHING]\n // 2. Transform: React.ComponentProps<typeof Slot> -> React.ComponentProps<typeof SlotPrimitive.Slot>\n const hasSlotImport = uniqueImports.some(\n (imp) => imp.name === \"Slot\" && imp.alias === \"SlotPrimitive\"\n )\n\n if (hasSlotImport) {\n // Find all lines that are NOT import lines to avoid transforming the import statement itself\n const lines = result.split(\"\\n\")\n const transformedLines = lines.map((line) => {\n // Skip import lines\n if (line.trim().startsWith(\"import \")) {\n return line\n }\n\n let transformedLine = line\n\n // Handle all Slot references in one comprehensive pass\n // Use placeholders to avoid double replacements\n\n // First, mark specific patterns with placeholders\n transformedLine = transformedLine.replace(\n /\\b(asChild\\s*\\?\\s*)Slot(\\s*:)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bReact\\.ComponentProps<typeof\\s+Slot>/g,\n \"React.ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /\\bComponentProps<typeof\\s+Slot>/g,\n \"ComponentProps<typeof __SLOT_PLACEHOLDER__>\"\n )\n\n transformedLine = transformedLine.replace(\n /(<\\/?)Slot(\\s*\\/?>)/g,\n \"$1__SLOT_PLACEHOLDER__$2\"\n )\n\n // Handle any other standalone Slot usage\n transformedLine = transformedLine.replace(\n /\\bSlot\\b/g,\n (match, offset, string) => {\n // Don't transform if it's inside quotes\n const beforeMatch = string.substring(0, offset)\n const openQuotes = (beforeMatch.match(/\"/g) || []).length\n const openSingleQuotes = (beforeMatch.match(/'/g) || []).length\n\n // If we're inside quotes, don't transform\n if (openQuotes % 2 !== 0 || openSingleQuotes % 2 !== 0) {\n return match\n }\n\n return \"__SLOT_PLACEHOLDER__\"\n }\n )\n\n // Finally, replace all placeholders with SlotPrimitive.Slot\n transformedLine = transformedLine.replace(\n /__SLOT_PLACEHOLDER__/g,\n \"SlotPrimitive.Slot\"\n )\n\n return transformedLine\n })\n\n result = transformedLines.join(\"\\n\")\n }\n\n // Remove duplicate packages\n const uniqueReplacedPackages = Array.from(new Set(replacedPackages))\n\n return {\n content: result,\n replacedPackages: uniqueReplacedPackages,\n }\n}\n","import path from \"path\"\nimport { addOptionsSchema } from \"@/src/commands/add\"\nimport { migrateOptionsSchema } from \"@/src/commands/migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightMigrate(\n options: z.infer<typeof migrateOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n // Ensure target directory exists.\n // Check for empty project. We assume if no package.json exists, the project is empty.\n if (\n !fs.existsSync(options.cwd) ||\n !fs.existsSync(path.resolve(options.cwd, \"package.json\"))\n ) {\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] = true\n return {\n errors,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n config: null,\n }\n }\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can run a migration, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.error(\n `Learn more at ${highlighter.info(\n \"https://createui.co/docs/components-json\"\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import path from \"path\"\nimport { migrateIcons } from \"@/src/migrations/migrate-icons\"\nimport { migrateRadix } from \"@/src/migrations/migrate-radix\"\nimport { preFlightMigrate } from \"@/src/preflights/preflight-migrate\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const migrations = [\n {\n name: \"icons\",\n description: \"migrate your ui components to a different icon library.\",\n },\n {\n name: \"radix\",\n description: \"migrate to radix-ui.\",\n },\n] as const\n\nexport const migrateOptionsSchema = z.object({\n cwd: z.string(),\n list: z.boolean(),\n yes: z.boolean(),\n migration: z\n .string()\n .refine(\n (value) =>\n value && migrations.some((migration) => migration.name === value),\n {\n message:\n \"You must specify a valid migration. Run `createui migrate --list` to see available migrations.\",\n }\n )\n .optional(),\n})\n\nexport const migrate = new Command()\n .name(\"migrate\")\n .description(\"run a migration.\")\n .argument(\"[migration]\", \"the migration to run.\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-l, --list\", \"list all migrations.\", false)\n .option(\"-y, --yes\", \"skip confirmation prompt.\", false)\n .action(async (migration, opts) => {\n try {\n const options = migrateOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n migration,\n list: opts.list,\n yes: opts.yes,\n })\n\n if (options.list || !options.migration) {\n logger.info(\"Available migrations:\")\n for (const migration of migrations) {\n logger.info(`- ${migration.name}: ${migration.description}`)\n }\n return\n }\n\n if (!options.migration) {\n throw new Error(\n \"You must specify a migration. Run `createui migrate --list` to see available migrations.\"\n )\n }\n\n let { errors, config } = await preFlightMigrate(options)\n\n if (\n errors[ERRORS.MISSING_DIR_OR_EMPTY_PROJECT] ||\n errors[ERRORS.MISSING_CONFIG]\n ) {\n throw new Error(\n \"No `components.json` file found. Ensure you are at the root of your project.\"\n )\n }\n\n if (!config) {\n throw new Error(\n \"Something went wrong reading your `components.json` file. Please ensure you have a valid `components.json` file.\"\n )\n }\n\n if (options.migration === \"icons\") {\n await migrateIcons(config)\n }\n\n if (options.migration === \"radix\") {\n await migrateRadix(config, { yes: options.yes })\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { buildOptionsSchema } from \"@/src/commands/build\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport fs from \"fs-extra\"\nimport { z } from \"zod\"\n\nexport async function preFlightRegistryBuild(\n options: z.infer<typeof buildOptionsSchema>\n) {\n const errors: Record<string, boolean> = {}\n\n const resolvePaths = {\n cwd: options.cwd,\n registryFile: path.resolve(options.cwd, options.registryFile),\n outputDir: path.resolve(options.cwd, options.outputDir),\n }\n\n // Ensure registry file exists.\n if (!fs.existsSync(resolvePaths.registryFile)) {\n errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Check for existing components.json file.\n if (!fs.existsSync(path.resolve(options.cwd, \"components.json\"))) {\n errors[ERRORS.MISSING_CONFIG] = true\n return {\n errors,\n resolvePaths: null,\n config: null,\n }\n }\n\n // Create output directory if it doesn't exist.\n await fs.mkdir(resolvePaths.outputDir, { recursive: true })\n\n try {\n const config = await getConfig(options.cwd)\n\n return {\n errors,\n config: config!,\n resolvePaths,\n }\n } catch (error) {\n logger.break()\n logger.error(\n `An invalid ${highlighter.info(\n \"components.json\"\n )} file was found at ${highlighter.info(\n options.cwd\n )}.\\nBefore you can build the registry, you must create a valid ${highlighter.info(\n \"components.json\"\n )} file by running the ${highlighter.info(\"init\")} command.`\n )\n logger.break()\n process.exit(1)\n }\n}\n","import * as fs from \"fs/promises\"\nimport * as path from \"path\"\nimport { preFlightRegistryBuild } from \"@/src/preflights/preflight-registry\"\nimport { recursivelyResolveFileImports } from \"@/src/registry/utils\"\nimport { configSchema, registryItemSchema, registrySchema } from \"@/src/schema\"\nimport * as ERRORS from \"@/src/utils/errors\"\nimport { ProjectInfo, getProjectInfo } from \"@/src/utils/get-project-info\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport { z } from \"zod\"\n\nexport const buildOptionsSchema = z.object({\n cwd: z.string(),\n registryFile: z.string(),\n outputDir: z.string(),\n verbose: z.boolean().optional().default(false),\n})\n\nexport const build = new Command()\n .name(\"registry:build\")\n .description(\"builds the registry [EXPERIMENTAL]\")\n .argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n .option(\n \"-o, --output <path>\",\n \"destination directory for json files\",\n \"./public/r\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-v, --verbose\", \"verbose output\")\n .action(async (registry: string, opts) => {\n await buildRegistry({\n cwd: path.resolve(opts.cwd),\n registryFile: registry,\n outputDir: opts.output,\n verbose: opts.verbose,\n })\n })\n\nasync function buildRegistry(opts: z.infer<typeof buildOptionsSchema>) {\n try {\n const options = buildOptionsSchema.parse(opts)\n\n const [{ errors, resolvePaths, config }, projectInfo] = await Promise.all([\n preFlightRegistryBuild(options),\n getProjectInfo(options.cwd),\n ])\n\n if (errors[ERRORS.MISSING_CONFIG] || !config || !projectInfo) {\n logger.error(\n `A ${highlighter.info(\n \"components.json\"\n )} file is required to build the registry. Run ${highlighter.info(\n \"createui init\"\n )} to create one.`\n )\n logger.break()\n process.exit(1)\n }\n\n if (errors[ERRORS.BUILD_MISSING_REGISTRY_FILE] || !resolvePaths) {\n logger.error(\n `We could not find a registry file at ${highlighter.info(\n path.resolve(options.cwd, options.registryFile)\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const content = await fs.readFile(resolvePaths.registryFile, \"utf-8\")\n const result = registrySchema.safeParse(JSON.parse(content))\n\n if (!result.success) {\n logger.error(\n `Invalid registry file found at ${highlighter.info(\n resolvePaths.registryFile\n )}.`\n )\n logger.break()\n process.exit(1)\n }\n\n const buildSpinner = spinner(\"Building registry...\")\n\n // Recursively resolve the registry items.\n const resolvedRegistry = await resolveRegistryItems(\n result.data,\n config,\n projectInfo\n )\n\n // Loop through the registry items and remove duplicates files i.e same path.\n for (const registryItem of resolvedRegistry.items) {\n // Deduplicate files\n registryItem.files = registryItem.files?.filter(\n (file, index, self) =>\n index === self.findIndex((t) => t.path === file.path)\n )\n\n // Deduplicate dependencies\n if (registryItem.dependencies) {\n registryItem.dependencies = registryItem.dependencies.filter(\n (dep, index, self) => index === self.findIndex((d) => d === dep)\n )\n }\n }\n\n for (const registryItem of resolvedRegistry.items) {\n if (!registryItem.files) {\n continue\n }\n\n buildSpinner.start(`Building ${registryItem.name}...`)\n\n // Add the schema to the registry item.\n registryItem[\"$schema\"] = \"https://createui.co/schema/registry-item.json\"\n\n for (const file of registryItem.files) {\n const absPath = path.resolve(resolvePaths.cwd, file.path)\n try {\n const stat = await fs.stat(absPath)\n if (!stat.isFile()) {\n continue\n }\n file[\"content\"] = await fs.readFile(absPath, \"utf-8\")\n } catch (err) {\n console.error(\"Error reading file in registry build:\", absPath, err)\n continue\n }\n }\n\n const result = registryItemSchema.safeParse(registryItem)\n if (!result.success) {\n logger.error(\n `Invalid registry item found for ${highlighter.info(\n registryItem.name\n )}.`\n )\n continue\n }\n\n // Write the registry item to the output directory.\n await fs.writeFile(\n path.resolve(resolvePaths.outputDir, `${result.data.name}.json`),\n JSON.stringify(result.data, null, 2)\n )\n }\n\n // Copy registry.json to the output directory.\n await fs.copyFile(\n resolvePaths.registryFile,\n path.resolve(resolvePaths.outputDir, \"registry.json\")\n )\n\n buildSpinner.succeed(\"Building registry.\")\n\n if (options.verbose) {\n spinner(\n `The registry has ${highlighter.info(\n resolvedRegistry.items.length.toString()\n )} items:`\n ).succeed()\n for (const item of resolvedRegistry.items) {\n logger.log(` - ${item.name} (${highlighter.info(item.type)})`)\n for (const file of item.files ?? []) {\n logger.log(` - ${file.path}`)\n }\n }\n }\n } catch (error) {\n logger.break()\n handleError(error)\n }\n}\n\n// This reads the registry and recursively resolves the file imports.\nasync function resolveRegistryItems(\n registry: z.infer<typeof registrySchema>,\n config: z.infer<typeof configSchema>,\n projectInfo: ProjectInfo\n): Promise<z.infer<typeof registrySchema>> {\n for (const item of registry.items) {\n if (!item.files?.length) {\n continue\n }\n\n // Process all files in the array instead of just the first one\n for (const file of item.files) {\n const results = await recursivelyResolveFileImports(\n file.path,\n config,\n projectInfo\n )\n\n // Remove file from results.files\n results.files = results.files?.filter((f) => f.path !== file.path)\n\n if (results.files) {\n item.files.push(...results.files)\n }\n\n if (results.dependencies) {\n item.dependencies = item.dependencies\n ? item.dependencies.concat(results.dependencies)\n : results.dependencies\n }\n }\n }\n\n return registry\n}\n","import { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { Command } from \"commander\"\n\nexport const mcp = new Command()\n .name(\"registry:mcp\")\n .description(\"starts the registry MCP server [DEPRECATED]\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async () => {\n logger.warn(\n `The ${highlighter.info(\n \"createui registry:mcp\"\n )} command is deprecated. Use the ${highlighter.info(\n \"createui mcp\"\n )} command instead.`\n )\n logger.break()\n })\n","import path from \"path\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { searchRegistries } from \"@/src/registry/search\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { createConfig, getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst searchOptionsSchema = z.object({\n cwd: z.string(),\n query: z.string().optional(),\n limit: z.number().optional(),\n offset: z.number().optional(),\n})\n\n// TODO: We're duplicating logic for shadowConfig here.\n// Revisit and properly abstract this.\n\nexport const search = new Command()\n .name(\"search\")\n .alias(\"list\")\n .description(\"search items from registries\")\n .argument(\n \"<registries...>\",\n \"the registry names or urls to search items from. Names must be prefixed with @.\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-q, --query <query>\", \"query string\")\n .option(\n \"-l, --limit <number>\",\n \"maximum number of items to display per registry\",\n \"100\"\n )\n .option(\"-o, --offset <number>\", \"number of items to skip\", \"0\")\n .action(async (registries: string[], opts) => {\n try {\n const options = searchOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n query: opts.query,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n // Use createConfig to get proper default paths\n const defaultConfig = createConfig({\n resolvedPaths: {\n cwd: options.cwd,\n },\n })\n let shadowConfig = configWithDefaults(defaultConfig)\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults({\n ...defaultConfig,\n ...partialConfig,\n })\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n // Use searchRegistries for both search and non-search cases.\n const results = await searchRegistries(registries as `@${string}`[], {\n query: options.query,\n limit: options.limit,\n offset: options.offset,\n config,\n })\n\n console.log(JSON.stringify(results, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n }\n })\n","import { existsSync } from \"fs\"\nimport os from \"os\"\nimport path from \"path\"\nimport { fileURLToPath } from \"url\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { highlighter } from \"@/src/utils/highlighter\"\nimport { logger } from \"@/src/utils/logger\"\nimport { spinner } from \"@/src/utils/spinner\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport prompts from \"prompts\"\nimport { z } from \"zod\"\n\nconst SKILL_NAME = \"createui\"\n\n// Agents that natively auto-discover Agent Skills (SKILL.md) folders.\n// They all share the same open SKILL.md format — only the directory differs.\n// `.agents/skills` is the open-standard location read by Codex and Gemini.\nconst CLIENTS = {\n claude: { label: \"Claude Code\", dir: path.join(\".claude\", \"skills\") },\n gemini: { label: \"Gemini CLI\", dir: path.join(\".gemini\", \"skills\") },\n codex: { label: \"OpenAI Codex\", dir: path.join(\".agents\", \"skills\") },\n agents: {\n label: \"Agent Skills standard (.agents/skills)\",\n dir: path.join(\".agents\", \"skills\"),\n },\n} as const\n\ntype ClientKey = keyof typeof CLIENTS\n\nconst skillOptionsSchema = z.object({\n cwd: z.string(),\n client: z.enum([\"claude\", \"gemini\", \"codex\", \"agents\"]),\n project: z.boolean(),\n path: z.string().optional(),\n force: z.boolean(),\n yes: z.boolean(),\n})\n\n// The skill is bundled into the package at build time (see tsup.config.ts),\n// landing next to the compiled entry at dist/skills/<name>.\nfunction getBundledSkillDir() {\n const here = path.dirname(fileURLToPath(import.meta.url))\n return path.join(here, \"skills\", SKILL_NAME)\n}\n\nexport const skill = new Command()\n .name(\"skill\")\n .description(\"install the Create UI agent skill for your AI coding agent\")\n .option(\n \"--client <client>\",\n `the agent to install for (${Object.keys(CLIENTS).join(\", \")}).`,\n \"claude\"\n )\n .option(\n \"--project\",\n \"install into the project instead of your home directory.\",\n false\n )\n .option(\n \"-p, --path <path>\",\n \"install into an explicit skills directory (for other agents).\"\n )\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .option(\"-f, --force\", \"overwrite an existing skill installation.\", false)\n .option(\"-y, --yes\", \"skip the overwrite confirmation prompt.\", false)\n .action(async (opts) => {\n try {\n const options = skillOptionsSchema.parse({ ...opts })\n const cwd = path.resolve(options.cwd)\n\n const source = getBundledSkillDir()\n if (!existsSync(source)) {\n logger.error(\n `Could not find the bundled Create UI skill at ${highlighter.info(\n source\n )}.`\n )\n logger.error(\n \"Please update createui to the latest version and try again.\"\n )\n process.exit(1)\n }\n\n // Resolve where the skill folder will be installed.\n let baseDir: string\n let scopeLabel: string\n if (options.path) {\n baseDir = path.resolve(cwd, options.path)\n scopeLabel = \"custom path\"\n } else {\n const client = CLIENTS[options.client as ClientKey]\n const root = options.project ? cwd : os.homedir()\n baseDir = path.join(root, client.dir)\n scopeLabel = `${client.label}, ${\n options.project ? \"project\" : \"personal\"\n }`\n }\n\n const target = path.join(baseDir, SKILL_NAME)\n\n if (existsSync(target) && !options.force && !options.yes) {\n const { overwrite } = await prompts({\n type: \"confirm\",\n name: \"overwrite\",\n message: `The Create UI skill already exists at ${highlighter.info(\n target\n )}. Overwrite?`,\n initial: false,\n })\n\n if (!overwrite) {\n logger.info(\"Skill installation cancelled.\")\n process.exit(0)\n }\n }\n\n const installSpinner = spinner(\n `Installing the Create UI skill (${scopeLabel})...`\n ).start()\n\n await fsExtra.ensureDir(baseDir)\n await fsExtra.copy(source, target, {\n overwrite: true,\n filter: (src) => !src.endsWith(\".DS_Store\"),\n })\n\n installSpinner.succeed(`Installed the Create UI skill (${scopeLabel}).`)\n\n logger.break()\n logger.success(`Skill installed at ${highlighter.info(target)}`)\n logger.break()\n\n if (options.path) {\n // Custom path: the user knows their agent; just confirm and hint.\n logger.log(\n \"Point your AI agent at this folder (or import it from your agent's\"\n )\n logger.log(\n `rules file, e.g. ${highlighter.info(\n \"AGENTS.md\"\n )} or ${highlighter.info(\".cursor/rules\")}). Then try asking:`\n )\n } else {\n logger.log(\n `${\n CLIENTS[options.client as ClientKey].label\n } loads it automatically — no restart needed. Try asking:`\n )\n }\n logger.log(` ${highlighter.info('\"Add a Create UI login form\"')}`)\n\n if (!options.path && !options.project) {\n logger.break()\n logger.log(\n `Tip: run ${highlighter.info(\n `createui skill --client ${options.client} --project`\n )} inside a repo to commit the skill for your whole team.`\n )\n }\n logger.break()\n } catch (error) {\n handleError(error)\n }\n })\n","import path from \"path\"\nimport { getRegistryItems } from \"@/src/registry/api\"\nimport { configWithDefaults } from \"@/src/registry/config\"\nimport { rawConfigSchema } from \"@/src/schema\"\nimport { loadEnvFiles } from \"@/src/utils/env-loader\"\nimport { getConfig } from \"@/src/utils/get-config\"\nimport { handleError } from \"@/src/utils/handle-error\"\nimport { Command } from \"commander\"\nimport fsExtra from \"fs-extra\"\nimport { z } from \"zod\"\n\nconst viewOptionsSchema = z.object({\n cwd: z.string(),\n})\n\nexport const view = new Command()\n .name(\"view\")\n .description(\"view items from the registry\")\n .argument(\"<items...>\", \"the item names or URLs to view\")\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd()\n )\n .action(async (items: string[], opts) => {\n try {\n const options = viewOptionsSchema.parse({\n cwd: path.resolve(opts.cwd),\n })\n\n await loadEnvFiles(options.cwd)\n\n // Start with a shadow config to support partial components.json.\n let shadowConfig = configWithDefaults({})\n\n // Check if there's a components.json file (partial or complete).\n const componentsJsonPath = path.resolve(options.cwd, \"components.json\")\n if (fsExtra.existsSync(componentsJsonPath)) {\n const existingConfig = await fsExtra.readJson(componentsJsonPath)\n const partialConfig = rawConfigSchema.partial().parse(existingConfig)\n shadowConfig = configWithDefaults(partialConfig)\n }\n\n // Try to get the full config, but fall back to shadow config if it fails.\n let config = shadowConfig\n try {\n const fullConfig = await getConfig(options.cwd)\n if (fullConfig) {\n config = configWithDefaults(fullConfig)\n }\n } catch {\n // Use shadow config if getConfig fails (partial components.json).\n }\n\n const payload = await getRegistryItems(items, { config })\n console.log(JSON.stringify(payload, null, 2))\n process.exit(0)\n } catch (error) {\n handleError(error)\n }\n })\n","{\n \"name\": \"@create-ui/cli\",\n \"version\": \"0.5.0\",\n \"description\": \"Add components to your apps.\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"createui\",\n \"url\": \"https://twitter.com/createui\"\n },\n \"homepage\": \"https://createui.co\",\n \"files\": [\n \"dist\"\n ],\n \"keywords\": [\n \"components\",\n \"ui\",\n \"tailwind\",\n \"radix-ui\",\n \"createui\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"./registry\": {\n \"types\": \"./dist/registry/index.d.ts\",\n \"default\": \"./dist/registry/index.js\"\n },\n \"./schema\": {\n \"types\": \"./dist/schema/index.d.ts\",\n \"default\": \"./dist/schema/index.js\"\n },\n \"./mcp\": {\n \"types\": \"./dist/mcp/index.d.ts\",\n \"default\": \"./dist/mcp/index.js\"\n },\n \"./utils\": {\n \"types\": \"./dist/utils/index.d.ts\",\n \"default\": \"./dist/utils/index.js\"\n },\n \"./icons\": {\n \"types\": \"./dist/icons/index.d.ts\",\n \"default\": \"./dist/icons/index.js\"\n },\n \"./tailwind.css\": {\n \"style\": \"./dist/tailwind.css\"\n }\n },\n \"bin\": {\n \"createui\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rimraf dist && rimraf components\",\n \"start:dev\": \"cross-env REGISTRY_URL=http://localhost:4000/r node dist/index.js\",\n \"start:prod\": \"cross-env REGISTRY_URL=https://createui.co/r node dist/index.js\",\n \"start\": \"node dist/index.js\",\n \"format:write\": \"prettier --write \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"format:check\": \"prettier --check \\\"**/*.{ts,tsx,mdx}\\\" --cache\",\n \"release\": \"changeset version\",\n \"pub:beta\": \"pnpm build && pnpm publish --no-git-checks --access public --tag beta\",\n \"pub:next\": \"pnpm build && pnpm publish --no-git-checks --access public --tag next\",\n \"pub:release\": \"pnpm build && pnpm publish --access public\",\n \"test\": \"vitest run\",\n \"test:dev\": \"REGISTRY_URL=http://localhost:4000/r vitest run\",\n \"mcp:inspect\": \"pnpm dlx @modelcontextprotocol/inspector node dist/index.js mcp\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"^25.0.0\",\n \"@babel/core\": \"^7.28.0\",\n \"@babel/parser\": \"^7.28.0\",\n \"@babel/plugin-transform-typescript\": \"^7.28.0\",\n \"@babel/preset-typescript\": \"^7.27.1\",\n \"@dotenvx/dotenvx\": \"^1.48.4\",\n \"@modelcontextprotocol/sdk\": \"^1.17.2\",\n \"@types/validate-npm-package-name\": \"^4.0.2\",\n \"browserslist\": \"^4.26.2\",\n \"commander\": \"^14.0.0\",\n \"cosmiconfig\": \"^9.0.0\",\n \"dedent\": \"^1.6.0\",\n \"deepmerge\": \"^4.3.1\",\n \"diff\": \"^8.0.2\",\n \"execa\": \"^9.6.0\",\n \"fast-glob\": \"^3.3.3\",\n \"fs-extra\": \"^11.3.1\",\n \"fuzzysort\": \"^3.1.0\",\n \"https-proxy-agent\": \"^7.0.6\",\n \"jsonc-parser\": \"^3.3.1\",\n \"kleur\": \"^4.1.5\",\n \"msw\": \"^2.10.4\",\n \"node-fetch\": \"^3.3.2\",\n \"open\": \"^11.0.0\",\n \"ora\": \"^8.2.0\",\n \"postcss\": \"^8.5.6\",\n \"postcss-selector-parser\": \"^7.1.0\",\n \"prompts\": \"^2.4.2\",\n \"recast\": \"^0.23.11\",\n \"stringify-object\": \"^5.0.0\",\n \"ts-morph\": \"^26.0.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"validate-npm-package-name\": \"^7.0.1\",\n \"zod\": \"^3.24.1\",\n \"zod-to-json-schema\": \"^3.24.6\"\n },\n \"devDependencies\": {\n \"@types/babel__core\": \"^7.20.5\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/stringify-object\": \"^4.0.5\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.5.0\",\n \"type-fest\": \"^4.41.0\",\n \"typescript\": \"^5.9.2\"\n }\n}","#!/usr/bin/env node\nimport { add } from \"@/src/commands/add\"\nimport { build } from \"@/src/commands/build\"\nimport { create } from \"@/src/commands/create\"\nimport { diff } from \"@/src/commands/diff\"\nimport { info } from \"@/src/commands/info\"\nimport { init } from \"@/src/commands/init\"\nimport { mcp } from \"@/src/commands/mcp\"\nimport { migrate } from \"@/src/commands/migrate\"\nimport { build as registryBuild } from \"@/src/commands/registry/build\"\nimport { mcp as registryMcp } from \"@/src/commands/registry/mcp\"\nimport { search } from \"@/src/commands/search\"\nimport { skill } from \"@/src/commands/skill\"\nimport { view } from \"@/src/commands/view\"\nimport { Command } from \"commander\"\n\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"createui\")\n .description(\"add items from registries to your project\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\"\n )\n\n program\n .addCommand(init)\n .addCommand(create)\n .addCommand(add)\n .addCommand(diff)\n .addCommand(view)\n .addCommand(search)\n .addCommand(migrate)\n .addCommand(info)\n .addCommand(build)\n .addCommand(mcp)\n .addCommand(skill)\n // Legacy registry commands.\n program.addCommand(registryBuild).addCommand(registryMcp)\n\n program.parse()\n}\n\nmain()\n\nexport * from \"./registry/api\"\n"]}