galaxy-design 0.2.73 → 0.2.74

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.
Files changed (50) hide show
  1. package/README.md +113 -95
  2. package/dist/bin.js +17 -1
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/add.js +59 -99
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/init.js +120 -611
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/migrate-tailwind.js +90 -0
  9. package/dist/commands/migrate-tailwind.js.map +1 -0
  10. package/dist/index.js +6 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/registries/registry-angular.json +145 -537
  13. package/dist/registry-angular.json +145 -537
  14. package/dist/schemas/components-schema.json +66 -11
  15. package/dist/schemas/registry-framework-schema.json +17 -7
  16. package/dist/utils/angular-provider-manager.js +1 -1
  17. package/dist/utils/angular-provider-manager.js.map +1 -1
  18. package/dist/utils/component-copier.js +102 -62
  19. package/dist/utils/component-copier.js.map +1 -1
  20. package/dist/utils/component-transformer.js +86 -16
  21. package/dist/utils/component-transformer.js.map +1 -1
  22. package/dist/utils/config-schema.js +160 -9
  23. package/dist/utils/config-schema.js.map +1 -1
  24. package/dist/utils/framework-registry-service.js +181 -0
  25. package/dist/utils/framework-registry-service.js.map +1 -0
  26. package/dist/utils/framework-registry.js +1 -138
  27. package/dist/utils/framework-registry.js.map +1 -1
  28. package/dist/utils/github-fetcher.js +55 -27
  29. package/dist/utils/github-fetcher.js.map +1 -1
  30. package/dist/utils/index.js +4 -3
  31. package/dist/utils/index.js.map +1 -1
  32. package/dist/utils/init-runtime.js +477 -0
  33. package/dist/utils/init-runtime.js.map +1 -0
  34. package/dist/utils/init-scaffold.js +115 -0
  35. package/dist/utils/init-scaffold.js.map +1 -0
  36. package/dist/utils/init-workflow.js +189 -0
  37. package/dist/utils/init-workflow.js.map +1 -0
  38. package/dist/utils/package-manager.js +77 -2
  39. package/dist/utils/package-manager.js.map +1 -1
  40. package/dist/utils/platform-detector.js +12 -8
  41. package/dist/utils/platform-detector.js.map +1 -1
  42. package/dist/utils/registry-loader.js +20 -41
  43. package/dist/utils/registry-loader.js.map +1 -1
  44. package/dist/utils/tailwind-detector.js +162 -0
  45. package/dist/utils/tailwind-detector.js.map +1 -0
  46. package/dist/utils/tailwind-migration.js +401 -0
  47. package/dist/utils/tailwind-migration.js.map +1 -0
  48. package/dist/utils/tailwind-scaffold.js +398 -0
  49. package/dist/utils/tailwind-scaffold.js.map +1 -0
  50. package/package.json +20 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import prompts from 'prompts';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n detectFramework,\n detectPackageManager,\n hasSrcDirectory,\n type Framework as DetectedFramework,\n} from '../utils/detect.js';\nimport {\n createComponentsConfig,\n hasComponentsConfig,\n loadComponentsConfig,\n type Framework,\n} from '../utils/components-config.js';\nimport {\n getDefaultConfig,\n type BaseColor,\n type IconLibrary,\n} from '../utils/config-schema.js';\nimport { writeFile, ensureDir, readFile } from '../utils/files.js';\nimport { installDependencies } from '../utils/package-manager.js';\nimport { resolve } from 'path';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\n\ninterface InitOptions {\n yes?: boolean;\n cwd: string;\n}\n\nexport async function initCommand(options: InitOptions) {\n console.log(chalk.bold.cyan('\\n🌌 Galaxy UI CLI - Multi-Framework Edition\\n'));\n\n const cwd = options.cwd;\n\n // Check if already initialized\n if (hasComponentsConfig(cwd)) {\n console.log(chalk.yellow('⚠ components.json already exists in this project.'));\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: 'Do you want to overwrite the existing configuration?',\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.gray('Initialization cancelled.'));\n return;\n }\n }\n\n // Detect framework\n const detectedFramework = detectFramework(cwd);\n\n if (detectedFramework === 'unknown') {\n console.log(\n chalk.red(\n 'āŒ Could not detect framework. Please ensure you are in a valid Angular, React, Vue, Next.js, Nuxt.js, React Native, or Flutter project.'\n )\n );\n return;\n }\n\n console.log(chalk.green(`āœ“ Detected ${chalk.bold(detectedFramework)} framework`));\n\n // Map detected framework to Framework type\n const frameworkMap: Record<DetectedFramework, Framework | null> = {\n angular: 'angular',\n react: 'react',\n vue: 'vue',\n 'react-native': 'react-native',\n flutter: 'flutter',\n nextjs: 'nextjs',\n nuxtjs: 'nuxtjs',\n unknown: null,\n };\n\n const framework = frameworkMap[detectedFramework];\n if (!framework) {\n console.log(chalk.red('āŒ Unsupported framework detected.'));\n return;\n }\n\n // Detect package manager\n const packageManager = detectPackageManager(cwd);\n console.log(chalk.green(`āœ“ Using ${chalk.bold(packageManager)} package manager`));\n\n // Get configuration from user (or use defaults with --yes)\n let config = getDefaultConfig(framework);\n\n // Detect if project uses src/ directory and adjust paths accordingly\n const usesSrcDir = hasSrcDirectory(cwd);\n if (usesSrcDir) {\n console.log(chalk.green(`āœ“ Detected ${chalk.bold('src/')} directory structure`));\n }\n\n if (!options.yes) {\n console.log(chalk.cyan('\\nšŸ“ Configuration\\n'));\n\n // Build prompts based on framework\n const promptQuestions: any[] = [];\n\n // TypeScript prompt (not for Flutter)\n if (framework !== 'flutter') {\n promptQuestions.push({\n type: 'toggle',\n name: 'typescript',\n message: 'Would you like to use TypeScript?',\n initial: true,\n active: 'yes',\n inactive: 'no',\n });\n }\n\n // Base color prompt (for all frameworks)\n promptQuestions.push({\n type: 'select',\n name: 'baseColor',\n message: 'Which base color would you like to use?',\n choices: [\n { title: 'Slate', value: 'slate' },\n { title: 'Gray', value: 'gray' },\n { title: 'Zinc', value: 'zinc' },\n { title: 'Neutral', value: 'neutral' },\n { title: 'Stone', value: 'stone' },\n ],\n initial: 0,\n });\n\n // Icon library prompt (not for Flutter - uses built-in icons)\n if (framework !== 'flutter') {\n promptQuestions.push({\n type: 'select',\n name: 'iconLibrary',\n message: 'Which icon library would you like to use?',\n choices: [\n { title: 'Lucide (Recommended)', value: 'lucide' },\n { title: 'Heroicons', value: 'heroicons' },\n { title: 'Radix Icons', value: 'radix-icons' },\n ],\n initial: 0,\n });\n }\n\n // CSS file prompt (only for web frameworks and React Native)\n if (framework !== 'flutter' && config.tailwind.css) {\n promptQuestions.push({\n type: 'text',\n name: 'cssFile',\n message: framework === 'react-native'\n ? 'Where is your global CSS file (for NativeWind)?'\n : 'Where is your global CSS file?',\n initial: config.tailwind.css,\n });\n }\n\n const answers = await prompts(promptQuestions);\n\n if (Object.keys(answers).length === 0) {\n console.log(chalk.gray('Initialization cancelled.'));\n return;\n }\n\n // Update config with user choices\n config = {\n ...config,\n typescript: answers.typescript ?? config.typescript,\n iconLibrary: (answers.iconLibrary as IconLibrary) ?? config.iconLibrary,\n tailwind: {\n ...config.tailwind,\n baseColor: (answers.baseColor as BaseColor) ?? config.tailwind.baseColor,\n css: answers.cssFile ?? config.tailwind.css,\n },\n };\n }\n\n console.log(chalk.cyan('\\nšŸ“¦ Installing dependencies...\\n'));\n\n // Install dependencies\n const spinner = ora('Installing dependencies...').start();\n\n const dependencies: string[] = [];\n const devDependencies: string[] = [];\n\n // Common dependencies\n dependencies.push('clsx', 'tailwind-merge');\n\n // Framework-specific dependencies\n switch (framework) {\n case 'vue':\n case 'nuxtjs':\n dependencies.push('radix-vue');\n devDependencies.push('tailwindcss@3.4.0', 'autoprefixer', 'postcss');\n if (config.iconLibrary === 'lucide') {\n dependencies.push('lucide-vue-next');\n }\n if (config.typescript) {\n devDependencies.push('@types/node');\n }\n break;\n\n case 'react':\n case 'nextjs':\n dependencies.push('@radix-ui/react-slot');\n devDependencies.push('tailwindcss@3.4.0', 'autoprefixer', 'postcss');\n if (config.iconLibrary === 'lucide') {\n dependencies.push('lucide-react');\n }\n if (config.typescript) {\n devDependencies.push('@types/react', '@types/react-dom', '@types/node');\n }\n break;\n\n case 'angular':\n // Angular components use Radix NG primitives\n dependencies.push('@radix-ng/primitives');\n devDependencies.push('tailwindcss@3.4.0', 'autoprefixer', 'postcss');\n if (config.iconLibrary === 'lucide') {\n dependencies.push('lucide-angular');\n }\n break;\n }\n\n try {\n // Install dependencies\n if (dependencies.length > 0) {\n await installDependencies(dependencies, {\n cwd,\n silent: true,\n });\n }\n\n // Install devDependencies\n if (devDependencies.length > 0) {\n await installDependencies(devDependencies, {\n cwd,\n dev: true,\n silent: true,\n });\n }\n\n spinner.succeed('Dependencies installed');\n } catch (error) {\n spinner.fail('Failed to install dependencies');\n console.error(chalk.red(error));\n return;\n }\n\n // Create directories\n const dirSpinner = ora('Creating directories...').start();\n\n try {\n const baseDir = usesSrcDir ? 'src/' : '';\n const componentsPath = resolve(cwd, baseDir + config.aliases.components.replace('@/', ''));\n const utilsPath = resolve(cwd, baseDir + config.aliases.utils.replace('@/', ''));\n\n await ensureDir(componentsPath);\n await ensureDir(resolve(componentsPath, 'ui'));\n await ensureDir(utilsPath.replace('/utils', '')); // Create lib dir\n\n dirSpinner.succeed('Directories created');\n } catch (error) {\n dirSpinner.fail('Failed to create directories');\n console.error(chalk.red(error));\n return;\n }\n\n // Create utils file\n const utilsSpinner = ora('Creating utility functions...').start();\n\n try {\n const baseDir = usesSrcDir ? 'src/' : '';\n const utilsPath = resolve(cwd, baseDir + config.aliases.utils.replace('@/', '') + '.ts');\n const utilsContent = getUtilsContent();\n writeFile(utilsPath, utilsContent);\n\n utilsSpinner.succeed('Utility functions created');\n } catch (error) {\n utilsSpinner.fail('Failed to create utility functions');\n console.error(chalk.red(error));\n return;\n }\n\n // Save components.json\n const configSpinner = ora('Creating components.json...').start();\n\n try {\n createComponentsConfig(cwd, framework);\n configSpinner.succeed('components.json created');\n } catch (error) {\n configSpinner.fail('Failed to create components.json');\n console.error(chalk.red(error));\n return;\n }\n\n // Create Tailwind CSS configuration files (only for frameworks that use Tailwind)\n if (framework !== 'flutter') {\n const tailwindSpinner = ora('Creating Tailwind CSS configuration...').start();\n\n try {\n // Create tailwind.config.js\n const tailwindConfigPath = resolve(cwd, config.tailwind.config);\n const tailwindConfigContent = getTailwindConfigContent(framework);\n writeFile(tailwindConfigPath, tailwindConfigContent);\n\n // Create postcss.config.js\n const postcssConfigPath = resolve(cwd, 'postcss.config.js');\n const postcssConfigContent = getPostCSSConfigContent(framework);\n writeFile(postcssConfigPath, postcssConfigContent);\n\n tailwindSpinner.succeed('Tailwind CSS configuration created');\n } catch (error) {\n tailwindSpinner.fail('Failed to create Tailwind CSS configuration');\n console.error(chalk.red(error));\n return;\n }\n\n // Create or update CSS file with Tailwind directives\n const cssSpinner = ora('Setting up CSS file...').start();\n\n try {\n const baseDir = usesSrcDir ? 'src/' : '';\n const cssPath = resolve(cwd, baseDir + config.tailwind.css.replace('src/', ''));\n const cssContent = getCSSContent(config.tailwind.baseColor);\n writeFile(cssPath, cssContent);\n\n cssSpinner.succeed('CSS file configured');\n } catch (error) {\n cssSpinner.fail('Failed to configure CSS file');\n console.error(chalk.red(error));\n return;\n }\n }\n\n // Configure path aliases for TypeScript and bundler\n if (config.typescript && framework !== 'flutter') {\n const aliasSpinner = ora('Configuring path aliases...').start();\n\n try {\n // Configure TypeScript path aliases\n if (framework === 'react' || framework === 'angular' || framework === 'vue') {\n // Vite React, Angular, and Vue use tsconfig.app.json\n configureTypeScriptAliases(cwd, 'tsconfig.app.json', usesSrcDir);\n } else if (framework === 'nextjs') {\n // Next.js uses tsconfig.json\n configureTypeScriptAliases(cwd, 'tsconfig.json', usesSrcDir);\n }\n\n // Configure bundler path aliases (only for Vite projects, not Next.js/Nuxt)\n if (framework === 'react' || framework === 'vue') {\n // Both React and Vue Vite projects use vite.config.ts\n configureViteAliases(cwd, 'vite.config.ts');\n }\n\n aliasSpinner.succeed('Path aliases configured');\n } catch (error) {\n aliasSpinner.fail('Failed to configure path aliases');\n console.error(chalk.red(error));\n // Don't return - this is not critical\n }\n }\n\n // Success message\n console.log(chalk.green('\\n✨ Success! Galaxy UI has been initialized.\\n'));\n console.log(chalk.cyan('Next steps:\\n'));\n console.log(chalk.white(` 1. Add components:`));\n console.log(chalk.gray(` galaxy-design add button`));\n console.log(chalk.gray(` galaxy-design add input card`));\n console.log(chalk.gray(` galaxy-design add --all\\n`));\n\n console.log(chalk.cyan('Learn more:'));\n console.log(chalk.white(' Documentation: https://galaxy-design.vercel.app'));\n console.log(chalk.white(' GitHub: https://github.com/buikevin/galaxy-design\\n'));\n}\n\n/**\n * Get utils.ts content\n */\nfunction getUtilsContent(): string {\n return `import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Merge Tailwind CSS classes\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n`;\n}\n\n/**\n * Get tailwind.config.js content\n */\nfunction getTailwindConfigContent(framework: Framework): string {\n const contentPaths =\n framework === 'react' || framework === 'nextjs'\n ? `[\n \"./index.html\",\n \"./src/**/*.{js,ts,jsx,tsx}\",\n ]`\n : framework === 'vue' || framework === 'nuxtjs'\n ? `[\n \"./index.html\",\n \"./src/**/*.{vue,js,ts,jsx,tsx}\",\n ]`\n : framework === 'angular'\n ? `[\n \"./src/**/*.{html,ts}\",\n \"./src/components/**/*.{html,ts}\",\n ]`\n : `[\n \"./src/**/*.{js,ts,jsx,tsx,mdx}\",\n ]`;\n\n // Angular uses CommonJS, other frameworks use ES modules\n const exportStatement = framework === 'angular'\n ? 'module.exports = '\n : 'export default ';\n\n return `/** @type {import('tailwindcss').Config} */\n${exportStatement}{\n darkMode: [\"class\"],\n content: ${contentPaths},\n theme: {\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n },\n },\n plugins: [],\n}\n`;\n}\n\n/**\n * Get postcss.config.js content\n */\nfunction getPostCSSConfigContent(framework: Framework): string {\n // Angular uses CommonJS, other frameworks use ES modules\n if (framework === 'angular') {\n return `module.exports = {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n}\n`;\n }\n\n return `export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n}\n`;\n}\n\n/**\n * Get CSS file content with Tailwind directives and CSS variables\n */\nfunction getCSSContent(baseColor: BaseColor): string {\n // CSS variables based on base color\n const colorVariables: Record<BaseColor, { light: string; dark: string }> = {\n slate: {\n light: `--background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --accent: 210 40% 96.1%;\n --accent-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n --radius: 0.5rem;`,\n dark: `--background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;`,\n },\n gray: {\n light: `--background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n --border: 220 13% 91%;\n --input: 220 13% 91%;\n --ring: 224 71.4% 4.1%;\n --radius: 0.5rem;`,\n dark: `--background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 20% 98%;\n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n --ring: 216 12.2% 83.9%;`,\n },\n zinc: {\n light: `--background: 0 0% 100%;\n --foreground: 240 10% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 240 10% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 240 10% 3.9%;\n --primary: 240 5.9% 10%;\n --primary-foreground: 0 0% 98%;\n --secondary: 240 4.8% 95.9%;\n --secondary-foreground: 240 5.9% 10%;\n --muted: 240 4.8% 95.9%;\n --muted-foreground: 240 3.8% 46.1%;\n --accent: 240 4.8% 95.9%;\n --accent-foreground: 240 5.9% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 5.9% 90%;\n --input: 240 5.9% 90%;\n --ring: 240 10% 3.9%;\n --radius: 0.5rem;`,\n dark: `--background: 240 10% 3.9%;\n --foreground: 0 0% 98%;\n --card: 240 10% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 240 10% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 240 5.9% 10%;\n --secondary: 240 3.7% 15.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 240 3.7% 15.9%;\n --muted-foreground: 240 5% 64.9%;\n --accent: 240 3.7% 15.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 3.7% 15.9%;\n --input: 240 3.7% 15.9%;\n --ring: 240 4.9% 83.9%;`,\n },\n neutral: {\n light: `--background: 0 0% 100%;\n --foreground: 0 0% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 0 0% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 0 0% 3.9%;\n --primary: 0 0% 9%;\n --primary-foreground: 0 0% 98%;\n --secondary: 0 0% 96.1%;\n --secondary-foreground: 0 0% 9%;\n --muted: 0 0% 96.1%;\n --muted-foreground: 0 0% 45.1%;\n --accent: 0 0% 96.1%;\n --accent-foreground: 0 0% 9%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 89.8%;\n --input: 0 0% 89.8%;\n --ring: 0 0% 3.9%;\n --radius: 0.5rem;`,\n dark: `--background: 0 0% 3.9%;\n --foreground: 0 0% 98%;\n --card: 0 0% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 0 0% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 0 0% 9%;\n --secondary: 0 0% 14.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 0 0% 14.9%;\n --muted-foreground: 0 0% 63.9%;\n --accent: 0 0% 14.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 14.9%;\n --input: 0 0% 14.9%;\n --ring: 0 0% 83.1%;`,\n },\n stone: {\n light: `--background: 0 0% 100%;\n --foreground: 20 14.3% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 20 14.3% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 20 14.3% 4.1%;\n --primary: 24 9.8% 10%;\n --primary-foreground: 60 9.1% 97.8%;\n --secondary: 60 4.8% 95.9%;\n --secondary-foreground: 24 9.8% 10%;\n --muted: 60 4.8% 95.9%;\n --muted-foreground: 25 5.3% 44.7%;\n --accent: 60 4.8% 95.9%;\n --accent-foreground: 24 9.8% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 20 5.9% 90%;\n --input: 20 5.9% 90%;\n --ring: 20 14.3% 4.1%;\n --radius: 0.5rem;`,\n dark: `--background: 20 14.3% 4.1%;\n --foreground: 60 9.1% 97.8%;\n --card: 20 14.3% 4.1%;\n --card-foreground: 60 9.1% 97.8%;\n --popover: 20 14.3% 4.1%;\n --popover-foreground: 60 9.1% 97.8%;\n --primary: 60 9.1% 97.8%;\n --primary-foreground: 24 9.8% 10%;\n --secondary: 12 6.5% 15.1%;\n --secondary-foreground: 60 9.1% 97.8%;\n --muted: 12 6.5% 15.1%;\n --muted-foreground: 24 5.4% 63.9%;\n --accent: 12 6.5% 15.1%;\n --accent-foreground: 60 9.1% 97.8%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 12 6.5% 15.1%;\n --input: 12 6.5% 15.1%;\n --ring: 24 5.7% 82.9%;`,\n },\n };\n\n const colors = colorVariables[baseColor];\n\n return `@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n ${colors.light}\n }\n\n .dark {\n ${colors.dark}\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}\n`;\n}\n\n/**\n * Configure TypeScript path aliases in tsconfig\n */\nfunction configureTypeScriptAliases(cwd: string, tsconfigFile: string, usesSrcDir: boolean): void {\n const tsconfigPath = resolve(cwd, tsconfigFile);\n\n if (!existsSync(tsconfigPath)) {\n return;\n }\n\n try {\n let content = readFileSync(tsconfigPath, 'utf-8');\n\n // Determine the correct path based on project structure\n const pathMapping = usesSrcDir ? './src/*' : './*';\n\n // Simple check: if \"paths\" already exists anywhere in the file, skip\n // This prevents duplicates for frameworks like Next.js that pre-configure paths\n if (content.includes('\"paths\"')) {\n return; // Paths already configured, skip to avoid duplicates\n }\n\n // Find the position to insert path aliases\n const compilerOptionsMatch = content.match(/\"compilerOptions\"\\s*:\\s*{/);\n if (!compilerOptionsMatch) {\n throw new Error('compilerOptions not found');\n }\n\n // Strategy: Insert before the closing } of compilerOptions\n // Match the closing brace of compilerOptions followed by next root property\n const insertPattern = /(\\n)(\\s*)(}\\s*,?\\s*\\n\\s*\"(?:include|exclude|files|references))/;\n const match = content.match(insertPattern);\n\n if (match) {\n // Detect indent level from the closing brace\n const baseIndent = match[2] || ' ';\n const propertyIndent = baseIndent + ' ';\n\n // Insert path config before the closing brace\n const pathConfig = `,${match[1]}${propertyIndent}/* Path Aliases */${match[1]}${propertyIndent}\"baseUrl\": \".\",${match[1]}${propertyIndent}\"paths\": {${match[1]}${propertyIndent} \"@/*\": [\"${pathMapping}\"]${match[1]}${propertyIndent}}`;\n\n content = content.replace(insertPattern, `${pathConfig}${match[1]}${match[2]}${match[3]}`);\n writeFileSync(tsconfigPath, content, 'utf-8');\n }\n } catch (error) {\n // Silently fail - path aliases are not critical\n }\n}\n\n/**\n * Configure Vite path aliases in vite.config\n */\nfunction configureViteAliases(cwd: string, viteConfigFile: string): void {\n const viteConfigPath = resolve(cwd, viteConfigFile);\n\n if (!existsSync(viteConfigPath)) {\n return;\n }\n\n try {\n let content = readFileSync(viteConfigPath, 'utf-8');\n\n // Check if path is already imported\n if (!content.includes(\"import path from 'path'\") && !content.includes('import path from \"path\"')) {\n // Add path import after the first import line\n content = content.replace(\n /(import .+ from .+\\n)/,\n \"$1import path from 'path'\\n\"\n );\n }\n\n // Check if resolve.alias is already configured\n if (!content.includes('resolve:') && !content.includes('@:')) {\n // Add resolve.alias configuration\n content = content.replace(\n /(plugins: \\[.+\\],?)/s,\n `$1\\n resolve: {\\n alias: {\\n '@': path.resolve(__dirname, './src'),\\n },\\n },`\n );\n }\n\n writeFileSync(viteConfigPath, content, 'utf-8');\n } catch (error) {\n console.error(chalk.yellow(`Warning: Could not update ${viteConfigFile}`));\n }\n}\n"],"names":["prompts","chalk","ora","detectFramework","detectPackageManager","hasSrcDirectory","createComponentsConfig","hasComponentsConfig","getDefaultConfig","writeFile","ensureDir","installDependencies","resolve","existsSync","readFileSync","writeFileSync","initCommand","options","console","log","bold","cyan","cwd","yellow","overwrite","type","name","message","initial","gray","detectedFramework","red","green","frameworkMap","angular","react","vue","flutter","nextjs","nuxtjs","unknown","framework","packageManager","config","usesSrcDir","yes","promptQuestions","push","active","inactive","choices","title","value","tailwind","css","answers","Object","keys","length","typescript","iconLibrary","baseColor","cssFile","spinner","start","dependencies","devDependencies","silent","dev","succeed","error","fail","dirSpinner","baseDir","componentsPath","aliases","components","replace","utilsPath","utils","utilsSpinner","utilsContent","getUtilsContent","configSpinner","tailwindSpinner","tailwindConfigPath","tailwindConfigContent","getTailwindConfigContent","postcssConfigPath","postcssConfigContent","getPostCSSConfigContent","cssSpinner","cssPath","cssContent","getCSSContent","aliasSpinner","configureTypeScriptAliases","configureViteAliases","white","contentPaths","exportStatement","colorVariables","slate","light","dark","zinc","neutral","stone","colors","tsconfigFile","tsconfigPath","content","pathMapping","includes","compilerOptionsMatch","match","Error","insertPattern","baseIndent","propertyIndent","pathConfig","viteConfigFile","viteConfigPath"],"mappings":";AAAA,OAAOA,aAAa,UAAU;AAC9B,OAAOC,WAAW,QAAQ;AAC1B,OAAOC,SAAS,MAAM;AACtB,SACEC,eAAe,EACfC,oBAAoB,EACpBC,eAAe,QAEV,qBAAqB;AAC5B,SACEC,sBAAsB,EACtBC,mBAAmB,QAGd,gCAAgC;AACvC,SACEC,gBAAgB,QAGX,4BAA4B;AACnC,SAASC,SAAS,EAAEC,SAAS,QAAkB,oBAAoB;AACnE,SAASC,mBAAmB,QAAQ,8BAA8B;AAClE,SAASC,OAAO,QAAQ,OAAO;AAC/B,SAASC,UAAU,EAAEC,YAAY,EAAEC,aAAa,QAAQ,KAAK;AAO7D,OAAO,eAAeC,YAAYC,OAAoB;IACpDC,QAAQC,GAAG,CAAClB,MAAMmB,IAAI,CAACC,IAAI,CAAC;IAE5B,MAAMC,MAAML,QAAQK,GAAG;IAEvB,+BAA+B;IAC/B,IAAIf,oBAAoBe,MAAM;QAC5BJ,QAAQC,GAAG,CAAClB,MAAMsB,MAAM,CAAC;QACzB,MAAM,EAAEC,SAAS,EAAE,GAAG,MAAMxB,QAAQ;YAClCyB,MAAM;YACNC,MAAM;YACNC,SAAS;YACTC,SAAS;QACX;QAEA,IAAI,CAACJ,WAAW;YACdN,QAAQC,GAAG,CAAClB,MAAM4B,IAAI,CAAC;YACvB;QACF;IACF;IAEA,mBAAmB;IACnB,MAAMC,oBAAoB3B,gBAAgBmB;IAE1C,IAAIQ,sBAAsB,WAAW;QACnCZ,QAAQC,GAAG,CACTlB,MAAM8B,GAAG,CACP;QAGJ;IACF;IAEAb,QAAQC,GAAG,CAAClB,MAAM+B,KAAK,CAAC,CAAC,WAAW,EAAE/B,MAAMmB,IAAI,CAACU,mBAAmB,UAAU,CAAC;IAE/E,2CAA2C;IAC3C,MAAMG,eAA4D;QAChEC,SAAS;QACTC,OAAO;QACPC,KAAK;QACL,gBAAgB;QAChBC,SAAS;QACTC,QAAQ;QACRC,QAAQ;QACRC,SAAS;IACX;IAEA,MAAMC,YAAYR,YAAY,CAACH,kBAAkB;IACjD,IAAI,CAACW,WAAW;QACdvB,QAAQC,GAAG,CAAClB,MAAM8B,GAAG,CAAC;QACtB;IACF;IAEA,yBAAyB;IACzB,MAAMW,iBAAiBtC,qBAAqBkB;IAC5CJ,QAAQC,GAAG,CAAClB,MAAM+B,KAAK,CAAC,CAAC,QAAQ,EAAE/B,MAAMmB,IAAI,CAACsB,gBAAgB,gBAAgB,CAAC;IAE/E,2DAA2D;IAC3D,IAAIC,SAASnC,iBAAiBiC;IAE9B,qEAAqE;IACrE,MAAMG,aAAavC,gBAAgBiB;IACnC,IAAIsB,YAAY;QACd1B,QAAQC,GAAG,CAAClB,MAAM+B,KAAK,CAAC,CAAC,WAAW,EAAE/B,MAAMmB,IAAI,CAAC,QAAQ,oBAAoB,CAAC;IAChF;IAEA,IAAI,CAACH,QAAQ4B,GAAG,EAAE;QAChB3B,QAAQC,GAAG,CAAClB,MAAMoB,IAAI,CAAC;QAEvB,mCAAmC;QACnC,MAAMyB,kBAAyB,EAAE;QAEjC,sCAAsC;QACtC,IAAIL,cAAc,WAAW;YAC3BK,gBAAgBC,IAAI,CAAC;gBACnBtB,MAAM;gBACNC,MAAM;gBACNC,SAAS;gBACTC,SAAS;gBACToB,QAAQ;gBACRC,UAAU;YACZ;QACF;QAEA,yCAAyC;QACzCH,gBAAgBC,IAAI,CAAC;YACnBtB,MAAM;YACNC,MAAM;YACNC,SAAS;YACTuB,SAAS;gBACP;oBAAEC,OAAO;oBAASC,OAAO;gBAAQ;gBACjC;oBAAED,OAAO;oBAAQC,OAAO;gBAAO;gBAC/B;oBAAED,OAAO;oBAAQC,OAAO;gBAAO;gBAC/B;oBAAED,OAAO;oBAAWC,OAAO;gBAAU;gBACrC;oBAAED,OAAO;oBAASC,OAAO;gBAAQ;aAClC;YACDxB,SAAS;QACX;QAEA,8DAA8D;QAC9D,IAAIa,cAAc,WAAW;YAC3BK,gBAAgBC,IAAI,CAAC;gBACnBtB,MAAM;gBACNC,MAAM;gBACNC,SAAS;gBACTuB,SAAS;oBACP;wBAAEC,OAAO;wBAAwBC,OAAO;oBAAS;oBACjD;wBAAED,OAAO;wBAAaC,OAAO;oBAAY;oBACzC;wBAAED,OAAO;wBAAeC,OAAO;oBAAc;iBAC9C;gBACDxB,SAAS;YACX;QACF;QAEA,6DAA6D;QAC7D,IAAIa,cAAc,aAAaE,OAAOU,QAAQ,CAACC,GAAG,EAAE;YAClDR,gBAAgBC,IAAI,CAAC;gBACnBtB,MAAM;gBACNC,MAAM;gBACNC,SAASc,cAAc,iBACnB,oDACA;gBACJb,SAASe,OAAOU,QAAQ,CAACC,GAAG;YAC9B;QACF;QAEA,MAAMC,UAAU,MAAMvD,QAAQ8C;QAE9B,IAAIU,OAAOC,IAAI,CAACF,SAASG,MAAM,KAAK,GAAG;YACrCxC,QAAQC,GAAG,CAAClB,MAAM4B,IAAI,CAAC;YACvB;QACF;YAKc0B,qBACEA,sBAGAA,oBACPA;QART,kCAAkC;QAClCZ,SAAS,aACJA;YACHgB,YAAYJ,CAAAA,sBAAAA,QAAQI,UAAU,YAAlBJ,sBAAsBZ,OAAOgB,UAAU;YACnDC,aAAa,CAACL,uBAAAA,QAAQK,WAAW,YAAnBL,uBAAuCZ,OAAOiB,WAAW;YACvEP,UAAU,aACLV,OAAOU,QAAQ;gBAClBQ,WAAW,CAACN,qBAAAA,QAAQM,SAAS,YAAjBN,qBAAmCZ,OAAOU,QAAQ,CAACQ,SAAS;gBACxEP,KAAKC,CAAAA,mBAAAA,QAAQO,OAAO,YAAfP,mBAAmBZ,OAAOU,QAAQ,CAACC,GAAG;;;IAGjD;IAEApC,QAAQC,GAAG,CAAClB,MAAMoB,IAAI,CAAC;IAEvB,uBAAuB;IACvB,MAAM0C,UAAU7D,IAAI,8BAA8B8D,KAAK;IAEvD,MAAMC,eAAyB,EAAE;IACjC,MAAMC,kBAA4B,EAAE;IAEpC,sBAAsB;IACtBD,aAAalB,IAAI,CAAC,QAAQ;IAE1B,kCAAkC;IAClC,OAAQN;QACN,KAAK;QACL,KAAK;YACHwB,aAAalB,IAAI,CAAC;YAClBmB,gBAAgBnB,IAAI,CAAC,qBAAqB,gBAAgB;YAC1D,IAAIJ,OAAOiB,WAAW,KAAK,UAAU;gBACnCK,aAAalB,IAAI,CAAC;YACpB;YACA,IAAIJ,OAAOgB,UAAU,EAAE;gBACrBO,gBAAgBnB,IAAI,CAAC;YACvB;YACA;QAEF,KAAK;QACL,KAAK;YACHkB,aAAalB,IAAI,CAAC;YAClBmB,gBAAgBnB,IAAI,CAAC,qBAAqB,gBAAgB;YAC1D,IAAIJ,OAAOiB,WAAW,KAAK,UAAU;gBACnCK,aAAalB,IAAI,CAAC;YACpB;YACA,IAAIJ,OAAOgB,UAAU,EAAE;gBACrBO,gBAAgBnB,IAAI,CAAC,gBAAgB,oBAAoB;YAC3D;YACA;QAEF,KAAK;YACH,6CAA6C;YAC7CkB,aAAalB,IAAI,CAAC;YAClBmB,gBAAgBnB,IAAI,CAAC,qBAAqB,gBAAgB;YAC1D,IAAIJ,OAAOiB,WAAW,KAAK,UAAU;gBACnCK,aAAalB,IAAI,CAAC;YACpB;YACA;IACJ;IAEA,IAAI;QACF,uBAAuB;QACvB,IAAIkB,aAAaP,MAAM,GAAG,GAAG;YAC3B,MAAM/C,oBAAoBsD,cAAc;gBACtC3C;gBACA6C,QAAQ;YACV;QACF;QAEA,0BAA0B;QAC1B,IAAID,gBAAgBR,MAAM,GAAG,GAAG;YAC9B,MAAM/C,oBAAoBuD,iBAAiB;gBACzC5C;gBACA8C,KAAK;gBACLD,QAAQ;YACV;QACF;QAEAJ,QAAQM,OAAO,CAAC;IAClB,EAAE,OAAOC,OAAO;QACdP,QAAQQ,IAAI,CAAC;QACbrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;QACxB;IACF;IAEA,qBAAqB;IACrB,MAAME,aAAatE,IAAI,2BAA2B8D,KAAK;IAEvD,IAAI;QACF,MAAMS,UAAU7B,aAAa,SAAS;QACtC,MAAM8B,iBAAiB9D,QAAQU,KAAKmD,UAAU9B,OAAOgC,OAAO,CAACC,UAAU,CAACC,OAAO,CAAC,MAAM;QACtF,MAAMC,YAAYlE,QAAQU,KAAKmD,UAAU9B,OAAOgC,OAAO,CAACI,KAAK,CAACF,OAAO,CAAC,MAAM;QAE5E,MAAMnE,UAAUgE;QAChB,MAAMhE,UAAUE,QAAQ8D,gBAAgB;QACxC,MAAMhE,UAAUoE,UAAUD,OAAO,CAAC,UAAU,MAAM,iBAAiB;QAEnEL,WAAWH,OAAO,CAAC;IACrB,EAAE,OAAOC,OAAO;QACdE,WAAWD,IAAI,CAAC;QAChBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;QACxB;IACF;IAEA,oBAAoB;IACpB,MAAMU,eAAe9E,IAAI,iCAAiC8D,KAAK;IAE/D,IAAI;QACF,MAAMS,UAAU7B,aAAa,SAAS;QACtC,MAAMkC,YAAYlE,QAAQU,KAAKmD,UAAU9B,OAAOgC,OAAO,CAACI,KAAK,CAACF,OAAO,CAAC,MAAM,MAAM;QAClF,MAAMI,eAAeC;QACrBzE,UAAUqE,WAAWG;QAErBD,aAAaX,OAAO,CAAC;IACvB,EAAE,OAAOC,OAAO;QACdU,aAAaT,IAAI,CAAC;QAClBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;QACxB;IACF;IAEA,uBAAuB;IACvB,MAAMa,gBAAgBjF,IAAI,+BAA+B8D,KAAK;IAE9D,IAAI;QACF1D,uBAAuBgB,KAAKmB;QAC5B0C,cAAcd,OAAO,CAAC;IACxB,EAAE,OAAOC,OAAO;QACda,cAAcZ,IAAI,CAAC;QACnBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;QACxB;IACF;IAEA,kFAAkF;IAClF,IAAI7B,cAAc,WAAW;QAC3B,MAAM2C,kBAAkBlF,IAAI,0CAA0C8D,KAAK;QAE3E,IAAI;YACF,4BAA4B;YAC5B,MAAMqB,qBAAqBzE,QAAQU,KAAKqB,OAAOU,QAAQ,CAACV,MAAM;YAC9D,MAAM2C,wBAAwBC,yBAAyB9C;YACvDhC,UAAU4E,oBAAoBC;YAE9B,2BAA2B;YAC3B,MAAME,oBAAoB5E,QAAQU,KAAK;YACvC,MAAMmE,uBAAuBC,wBAAwBjD;YACrDhC,UAAU+E,mBAAmBC;YAE7BL,gBAAgBf,OAAO,CAAC;QAC1B,EAAE,OAAOC,OAAO;YACdc,gBAAgBb,IAAI,CAAC;YACrBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;YACxB;QACF;QAEA,qDAAqD;QACrD,MAAMqB,aAAazF,IAAI,0BAA0B8D,KAAK;QAEtD,IAAI;YACF,MAAMS,UAAU7B,aAAa,SAAS;YACtC,MAAMgD,UAAUhF,QAAQU,KAAKmD,UAAU9B,OAAOU,QAAQ,CAACC,GAAG,CAACuB,OAAO,CAAC,QAAQ;YAC3E,MAAMgB,aAAaC,cAAcnD,OAAOU,QAAQ,CAACQ,SAAS;YAC1DpD,UAAUmF,SAASC;YAEnBF,WAAWtB,OAAO,CAAC;QACrB,EAAE,OAAOC,OAAO;YACdqB,WAAWpB,IAAI,CAAC;YAChBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;YACxB;QACF;IACF;IAEA,oDAAoD;IACpD,IAAI3B,OAAOgB,UAAU,IAAIlB,cAAc,WAAW;QAChD,MAAMsD,eAAe7F,IAAI,+BAA+B8D,KAAK;QAE7D,IAAI;YACF,oCAAoC;YACpC,IAAIvB,cAAc,WAAWA,cAAc,aAAaA,cAAc,OAAO;gBAC3E,qDAAqD;gBACrDuD,2BAA2B1E,KAAK,qBAAqBsB;YACvD,OAAO,IAAIH,cAAc,UAAU;gBACjC,6BAA6B;gBAC7BuD,2BAA2B1E,KAAK,iBAAiBsB;YACnD;YAEA,4EAA4E;YAC5E,IAAIH,cAAc,WAAWA,cAAc,OAAO;gBAChD,sDAAsD;gBACtDwD,qBAAqB3E,KAAK;YAC5B;YAEAyE,aAAa1B,OAAO,CAAC;QACvB,EAAE,OAAOC,OAAO;YACdyB,aAAaxB,IAAI,CAAC;YAClBrD,QAAQoD,KAAK,CAACrE,MAAM8B,GAAG,CAACuC;QACxB,sCAAsC;QACxC;IACF;IAEA,kBAAkB;IAClBpD,QAAQC,GAAG,CAAClB,MAAM+B,KAAK,CAAC;IACxBd,QAAQC,GAAG,CAAClB,MAAMoB,IAAI,CAAC;IACvBH,QAAQC,GAAG,CAAClB,MAAMiG,KAAK,CAAC,CAAC,oBAAoB,CAAC;IAC9ChF,QAAQC,GAAG,CAAClB,MAAM4B,IAAI,CAAC,CAAC,6BAA6B,CAAC;IACtDX,QAAQC,GAAG,CAAClB,MAAM4B,IAAI,CAAC,CAAC,iCAAiC,CAAC;IAC1DX,QAAQC,GAAG,CAAClB,MAAM4B,IAAI,CAAC,CAAC,8BAA8B,CAAC;IAEvDX,QAAQC,GAAG,CAAClB,MAAMoB,IAAI,CAAC;IACvBH,QAAQC,GAAG,CAAClB,MAAMiG,KAAK,CAAC;IACxBhF,QAAQC,GAAG,CAAClB,MAAMiG,KAAK,CAAC;AAC1B;AAEA;;CAEC,GACD,SAAShB;IACP,OAAO,CAAC;;;;;;;;;AASV,CAAC;AACD;AAEA;;CAEC,GACD,SAASK,yBAAyB9C,SAAoB;IACpD,MAAM0D,eACJ1D,cAAc,WAAWA,cAAc,WACnC,CAAC;;;GAGN,CAAC,GACIA,cAAc,SAASA,cAAc,WACrC,CAAC;;;GAGN,CAAC,GACIA,cAAc,YACd,CAAC;;;GAGN,CAAC,GACI,CAAC;;GAEN,CAAC;IAEF,yDAAyD;IACzD,MAAM2D,kBAAkB3D,cAAc,YAClC,sBACA;IAEJ,OAAO,CAAC;AACV,EAAE2D,gBAAgB;;WAEP,EAAED,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+C1B,CAAC;AACD;AAEA;;CAEC,GACD,SAAST,wBAAwBjD,SAAoB;IACnD,yDAAyD;IACzD,IAAIA,cAAc,WAAW;QAC3B,OAAO,CAAC;;;;;;AAMZ,CAAC;IACC;IAEA,OAAO,CAAC;;;;;;AAMV,CAAC;AACD;AAEA;;CAEC,GACD,SAASqD,cAAcjC,SAAoB;IACzC,oCAAoC;IACpC,MAAMwC,iBAAqE;QACzEC,OAAO;YACLC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;qBAmBO,CAAC;YAChBC,MAAM,CAAC;;;;;;;;;;;;;;;;;;8BAkBiB,CAAC;QAC3B;QACA3E,MAAM;YACJ0E,OAAO,CAAC;;;;;;;;;;;;;;;;;;;qBAmBO,CAAC;YAChBC,MAAM,CAAC;;;;;;;;;;;;;;;;;;4BAkBe,CAAC;QACzB;QACAC,MAAM;YACJF,OAAO,CAAC;;;;;;;;;;;;;;;;;;;qBAmBO,CAAC;YAChBC,MAAM,CAAC;;;;;;;;;;;;;;;;;;2BAkBc,CAAC;QACxB;QACAE,SAAS;YACPH,OAAO,CAAC;;;;;;;;;;;;;;;;;;;qBAmBO,CAAC;YAChBC,MAAM,CAAC;;;;;;;;;;;;;;;;;;uBAkBU,CAAC;QACpB;QACAG,OAAO;YACLJ,OAAO,CAAC;;;;;;;;;;;;;;;;;;;qBAmBO,CAAC;YAChBC,MAAM,CAAC;;;;;;;;;;;;;;;;;;0BAkBa,CAAC;QACvB;IACF;IAEA,MAAMI,SAASP,cAAc,CAACxC,UAAU;IAExC,OAAO,CAAC;;;;;;IAMN,EAAE+C,OAAOL,KAAK,CAAC;;;;IAIf,EAAEK,OAAOJ,IAAI,CAAC;;;;;;;;;;;;AAYlB,CAAC;AACD;AAEA;;CAEC,GACD,SAASR,2BAA2B1E,GAAW,EAAEuF,YAAoB,EAAEjE,UAAmB;IACxF,MAAMkE,eAAelG,QAAQU,KAAKuF;IAElC,IAAI,CAAChG,WAAWiG,eAAe;QAC7B;IACF;IAEA,IAAI;QACF,IAAIC,UAAUjG,aAAagG,cAAc;QAEzC,wDAAwD;QACxD,MAAME,cAAcpE,aAAa,YAAY;QAE7C,qEAAqE;QACrE,gFAAgF;QAChF,IAAImE,QAAQE,QAAQ,CAAC,YAAY;YAC/B,QAAQ,qDAAqD;QAC/D;QAEA,2CAA2C;QAC3C,MAAMC,uBAAuBH,QAAQI,KAAK,CAAC;QAC3C,IAAI,CAACD,sBAAsB;YACzB,MAAM,IAAIE,MAAM;QAClB;QAEA,2DAA2D;QAC3D,4EAA4E;QAC5E,MAAMC,gBAAgB;QACtB,MAAMF,QAAQJ,QAAQI,KAAK,CAACE;QAE5B,IAAIF,OAAO;YACT,6CAA6C;YAC7C,MAAMG,aAAaH,KAAK,CAAC,EAAE,IAAI;YAC/B,MAAMI,iBAAiBD,aAAa;YAEpC,8CAA8C;YAC9C,MAAME,aAAa,CAAC,CAAC,EAAEL,KAAK,CAAC,EAAE,GAAGI,eAAe,kBAAkB,EAAEJ,KAAK,CAAC,EAAE,GAAGI,eAAe,eAAe,EAAEJ,KAAK,CAAC,EAAE,GAAGI,eAAe,UAAU,EAAEJ,KAAK,CAAC,EAAE,GAAGI,eAAe,WAAW,EAAEP,YAAY,EAAE,EAAEG,KAAK,CAAC,EAAE,GAAGI,eAAe,CAAC,CAAC;YAEzOR,UAAUA,QAAQlC,OAAO,CAACwC,eAAe,GAAGG,aAAaL,KAAK,CAAC,EAAE,GAAGA,KAAK,CAAC,EAAE,GAAGA,KAAK,CAAC,EAAE,EAAE;YACzFpG,cAAc+F,cAAcC,SAAS;QACvC;IACF,EAAE,OAAOzC,OAAO;IACd,gDAAgD;IAClD;AACF;AAEA;;CAEC,GACD,SAAS2B,qBAAqB3E,GAAW,EAAEmG,cAAsB;IAC/D,MAAMC,iBAAiB9G,QAAQU,KAAKmG;IAEpC,IAAI,CAAC5G,WAAW6G,iBAAiB;QAC/B;IACF;IAEA,IAAI;QACF,IAAIX,UAAUjG,aAAa4G,gBAAgB;QAE3C,oCAAoC;QACpC,IAAI,CAACX,QAAQE,QAAQ,CAAC,8BAA8B,CAACF,QAAQE,QAAQ,CAAC,4BAA4B;YAChG,8CAA8C;YAC9CF,UAAUA,QAAQlC,OAAO,CACvB,yBACA;QAEJ;QAEA,+CAA+C;QAC/C,IAAI,CAACkC,QAAQE,QAAQ,CAAC,eAAe,CAACF,QAAQE,QAAQ,CAAC,OAAO;YAC5D,kCAAkC;YAClCF,UAAUA,QAAQlC,OAAO,CACvB,sCACA,CAAC,0FAA0F,CAAC;QAEhG;QAEA9D,cAAc2G,gBAAgBX,SAAS;IACzC,EAAE,OAAOzC,OAAO;QACdpD,QAAQoD,KAAK,CAACrE,MAAMsB,MAAM,CAAC,CAAC,0BAA0B,EAAEkG,gBAAgB;IAC1E;AACF"}
1
+ {"version":3,"sources":["../../src/commands/init.ts"],"sourcesContent":["import prompts from 'prompts';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport {\n applyInitPromptAnswers,\n detectExpoProject,\n ensureInitDirectories,\n getInitPromptQuestions,\n resolveInitProjectContext,\n} from '../utils/init-workflow.js';\nimport {\n hasComponentsConfig,\n saveComponentsConfig,\n} from '../utils/components-config.js';\nimport {\n getDefaultConfig,\n type Framework,\n type IconLibrary,\n} from '../utils/config-schema.js';\nimport { installDependencies } from '../utils/package-manager.js';\nimport {\n configureProjectAliases,\n getUtilsTemplate,\n writeInitUtilityFile,\n} from '../utils/init-scaffold.js';\nimport { scaffoldInitFrameworkRuntime } from '../utils/init-runtime.js';\nimport {\n getTailwindDevDependencies,\n type TailwindMode,\n} from '../utils/tailwind-scaffold.js';\n\ninterface InitOptions {\n yes?: boolean;\n cwd: string;\n}\n\ninterface InitDependencyPlan {\n dependencies: string[];\n devDependencies: string[];\n}\n\nexport async function initCommand(options: InitOptions) {\n console.log(\n chalk.bold.cyan('\\n🌌 Galaxy UI CLI - Multi-Framework Edition\\n'),\n );\n\n const cwd = options.cwd;\n\n // Check if already initialized\n if (hasComponentsConfig(cwd)) {\n console.log(\n chalk.yellow('⚠ components.json already exists in this project.'),\n );\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: 'Do you want to overwrite the existing configuration?',\n initial: false,\n });\n\n if (!overwrite) {\n console.log(chalk.gray('Initialization cancelled.'));\n return;\n }\n }\n\n let initContext;\n try {\n initContext = resolveInitProjectContext(cwd);\n } catch (error) {\n console.log(\n chalk.red(\n `āŒ ${error instanceof Error ? error.message : 'Failed to inspect project.'}`,\n ),\n );\n return;\n }\n\n const {\n detectedFramework,\n framework,\n packageManager,\n usesSrcDir,\n isExpoProject,\n tailwindDetection,\n tailwindMode,\n } = initContext;\n let config = initContext.config;\n\n console.log(\n chalk.green(`āœ“ Detected ${chalk.bold(detectedFramework)} framework`),\n );\n console.log(\n chalk.green(`āœ“ Using ${chalk.bold(packageManager)} package manager`),\n );\n\n if (usesSrcDir) {\n console.log(\n chalk.green(`āœ“ Detected ${chalk.bold('src/')} directory structure`),\n );\n }\n\n if (framework !== 'flutter') {\n const tailwindSourceLabel =\n tailwindDetection.source === 'unknown'\n ? 'default'\n : tailwindDetection.source;\n console.log(\n chalk.green(\n `āœ“ Tailwind mode: ${chalk.bold(tailwindMode)} ${chalk.gray(`(${tailwindSourceLabel})`)}`,\n ),\n );\n }\n\n if (!options.yes) {\n console.log(chalk.cyan('\\nšŸ“ Configuration\\n'));\n const answers = await prompts(getInitPromptQuestions(framework, config));\n\n if (Object.keys(answers).length === 0) {\n console.log(chalk.gray('Initialization cancelled.'));\n return;\n }\n\n config = applyInitPromptAnswers(config, answers);\n }\n\n console.log(chalk.cyan('\\nšŸ“¦ Installing dependencies...\\n'));\n\n // Install dependencies\n const spinner = ora('Installing dependencies...').start();\n\n const { dependencies, devDependencies } = getInitDependencyPlan({\n framework,\n iconLibrary: config.iconLibrary,\n typescript: config.typescript,\n tailwindMode,\n });\n\n try {\n // Install dependencies\n if (dependencies.length > 0) {\n await installDependencies(dependencies, {\n cwd,\n silent: true,\n });\n }\n\n // Install devDependencies\n if (devDependencies.length > 0) {\n await installDependencies(devDependencies, {\n cwd,\n dev: true,\n silent: true,\n });\n }\n\n spinner.succeed('Dependencies installed');\n } catch (error) {\n spinner.fail('Failed to install dependencies');\n console.error(chalk.red(error));\n return;\n }\n\n // Create directories\n const dirSpinner = ora('Creating directories...').start();\n\n try {\n ensureInitDirectories(cwd, config, usesSrcDir);\n\n dirSpinner.succeed('Directories created');\n } catch (error) {\n dirSpinner.fail('Failed to create directories');\n console.error(chalk.red(error));\n return;\n }\n\n // Create utils file when the framework templates expect one\n const utilsSpinner = ora('Preparing utility functions...').start();\n\n try {\n const didWriteUtils = writeInitUtilityFile({\n cwd,\n framework,\n typescript: config.typescript,\n usesSrcDir,\n utilsAlias: config.aliases.utils,\n });\n\n if (didWriteUtils) {\n utilsSpinner.succeed('Utility functions created');\n } else {\n utilsSpinner.succeed('No utility file required for this framework');\n }\n } catch (error) {\n utilsSpinner.fail('Failed to create utility functions');\n console.error(chalk.red(error));\n return;\n }\n\n // Save components.json\n const configSpinner = ora('Creating components.json...').start();\n\n try {\n saveComponentsConfig(cwd, config);\n configSpinner.succeed('components.json created');\n } catch (error) {\n configSpinner.fail('Failed to create components.json');\n console.error(chalk.red(error));\n return;\n }\n\n if (framework !== 'flutter') {\n const runtimeLabel =\n framework === 'react-native'\n ? 'Configuring React Native runtime...'\n : 'Creating Tailwind CSS configuration...';\n const runtimeSpinner = ora(runtimeLabel).start();\n\n try {\n const scaffoldResult = scaffoldInitFrameworkRuntime({\n cwd,\n framework,\n tailwindMode,\n cssPath: config.tailwind.css,\n tailwindConfigPath: config.tailwind.config || 'tailwind.config.js',\n baseColor: config.tailwind.baseColor,\n usesSrcDir,\n isExpoProject,\n });\n\n runtimeSpinner.succeed(\n framework === 'react-native'\n ? `React Native runtime configured (${scaffoldResult?.written.length || 0} written, ${scaffoldResult?.skipped.length || 0} kept)`\n : `Tailwind CSS configuration created (${scaffoldResult?.written.length || 0} written, ${scaffoldResult?.skipped.length || 0} kept)`,\n );\n } catch (error) {\n runtimeSpinner.fail(\n framework === 'react-native'\n ? 'Failed to configure React Native runtime'\n : 'Failed to create Tailwind CSS configuration',\n );\n console.error(chalk.red(error));\n return;\n }\n }\n\n // Configure path aliases for TypeScript and bundler\n if (config.typescript && framework !== 'flutter') {\n const aliasSpinner = ora('Configuring path aliases...').start();\n\n try {\n configureProjectAliases({\n cwd,\n framework,\n typescript: config.typescript,\n usesSrcDir,\n });\n\n aliasSpinner.succeed('Path aliases configured');\n } catch (error) {\n aliasSpinner.fail('Failed to configure path aliases');\n console.error(chalk.red(error));\n // Don't return - this is not critical\n }\n }\n\n console.log(chalk.green('\\n✨ Success! Galaxy UI has been initialized.\\n'));\n console.log(chalk.cyan('Next steps:\\n'));\n console.log(chalk.white(' 1. Add components:'));\n console.log(chalk.gray(' galaxy-design add button'));\n console.log(chalk.gray(' galaxy-design add input card'));\n console.log(chalk.gray(' galaxy-design add --all\\n'));\n\n if (framework === 'react-native') {\n console.log(\n chalk.white(\n ' 2. Confirm your React Native entry file keeps the generated global stylesheet import.',\n ),\n );\n }\n\n if (framework === 'flutter') {\n console.log(\n chalk.white(\n ' 2. Run `flutter pub get` if your project has pending Dart dependencies.',\n ),\n );\n }\n\n console.log(chalk.cyan('Learn more:'));\n console.log(chalk.white(' Documentation: https://galaxy-design.vercel.app'));\n console.log(\n chalk.white(' GitHub: https://github.com/buikevin/galaxy-design\\n'),\n );\n}\n\nexport function getInitDependencyPlan(options: {\n framework: Framework;\n iconLibrary: IconLibrary;\n typescript: boolean;\n tailwindMode: TailwindMode | null;\n}): InitDependencyPlan {\n const { framework, iconLibrary, typescript, tailwindMode } = options;\n const dependencies: string[] = [];\n const devDependencies: string[] = [];\n\n switch (framework) {\n case 'vue':\n case 'nuxtjs':\n dependencies.push('clsx', 'tailwind-merge', 'radix-vue');\n devDependencies.push(...getTailwindDevDependencies(tailwindMode || 'v4'));\n if (iconLibrary === 'lucide') {\n dependencies.push('lucide-vue-next');\n }\n if (typescript) {\n devDependencies.push('@types/node');\n }\n break;\n case 'react':\n case 'nextjs':\n dependencies.push('clsx', 'tailwind-merge', '@radix-ui/react-slot');\n devDependencies.push(...getTailwindDevDependencies(tailwindMode || 'v4'));\n if (iconLibrary === 'lucide') {\n dependencies.push('lucide-react');\n }\n if (typescript) {\n devDependencies.push('@types/react', '@types/react-dom', '@types/node');\n }\n break;\n case 'angular':\n dependencies.push('clsx', 'tailwind-merge', '@radix-ng/primitives');\n devDependencies.push(...getTailwindDevDependencies(tailwindMode || 'v4'));\n if (iconLibrary === 'lucide') {\n dependencies.push('lucide-angular');\n }\n break;\n case 'react-native':\n dependencies.push('clsx', 'class-variance-authority', 'nativewind');\n devDependencies.push(\n 'tailwindcss@^3.4.0',\n 'babel-plugin-module-resolver',\n );\n break;\n case 'flutter':\n break;\n }\n\n return {\n dependencies: [...new Set(dependencies)],\n devDependencies: [...new Set(devDependencies)],\n };\n}\n\nexport { detectExpoProject };\nexport { configureReactNativeRuntime } from '../utils/init-runtime.js';\n\nexport { getUtilsTemplate };\n"],"names":["prompts","chalk","ora","applyInitPromptAnswers","detectExpoProject","ensureInitDirectories","getInitPromptQuestions","resolveInitProjectContext","hasComponentsConfig","saveComponentsConfig","installDependencies","configureProjectAliases","getUtilsTemplate","writeInitUtilityFile","scaffoldInitFrameworkRuntime","getTailwindDevDependencies","initCommand","options","console","log","bold","cyan","cwd","yellow","overwrite","type","name","message","initial","gray","initContext","error","red","Error","detectedFramework","framework","packageManager","usesSrcDir","isExpoProject","tailwindDetection","tailwindMode","config","green","tailwindSourceLabel","source","yes","answers","Object","keys","length","spinner","start","dependencies","devDependencies","getInitDependencyPlan","iconLibrary","typescript","silent","dev","succeed","fail","dirSpinner","utilsSpinner","didWriteUtils","utilsAlias","aliases","utils","configSpinner","runtimeLabel","runtimeSpinner","scaffoldResult","cssPath","tailwind","css","tailwindConfigPath","baseColor","written","skipped","aliasSpinner","white","push","Set","configureReactNativeRuntime"],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import prompts from 'prompts';
4
+ import { detectPackageManager, formatInstallCommand, installDependencies } from '../utils/package-manager.js';
5
+ import { applyTailwindMigration, planTailwindMigration } from '../utils/tailwind-migration.js';
6
+ export async function migrateTailwindCommand(options) {
7
+ const cwd = options.cwd;
8
+ let plan;
9
+ try {
10
+ plan = planTailwindMigration(cwd);
11
+ } catch (error) {
12
+ console.log(chalk.red(`āŒ ${error instanceof Error ? error.message : 'Failed to plan Tailwind migration.'}`));
13
+ return;
14
+ }
15
+ console.log(chalk.bold.cyan('\n🌌 Galaxy UI Tailwind Migration\n'));
16
+ console.log(chalk.green(`āœ“ Framework: ${chalk.bold(plan.framework)}`));
17
+ console.log(chalk.green(`āœ“ Tailwind detection: ${chalk.bold(plan.detection.version === null ? 'unknown' : `v${plan.detection.version}`)} ${chalk.gray(`(${plan.detection.source})`)}`));
18
+ if (plan.detection.version !== 3) {
19
+ console.log(chalk.yellow(`⚠ ${plan.notes[0] || 'No Tailwind v3 setup detected.'}`));
20
+ return;
21
+ }
22
+ console.log(chalk.cyan('\nMigration plan:'));
23
+ for (const filePath of plan.filesToUpdate){
24
+ console.log(chalk.gray(` - update ${filePath}`));
25
+ }
26
+ if (plan.addedDevDependencies.length > 0) {
27
+ console.log(chalk.gray(` - add devDependencies: ${plan.addedDevDependencies.join(', ')}`));
28
+ }
29
+ if (plan.removedPackages.length > 0) {
30
+ console.log(chalk.gray(` - remove legacy packages from package.json: ${plan.removedPackages.join(', ')}`));
31
+ }
32
+ if (plan.auditFindings.length > 0) {
33
+ console.log(chalk.yellow('\nTailwind v4 review findings:'));
34
+ for (const finding of plan.auditFindings){
35
+ console.log(chalk.yellow(` - ${finding.filePath}: ${finding.pattern} (${finding.matches.join(', ')})`));
36
+ }
37
+ }
38
+ if (options.dryRun) {
39
+ console.log(chalk.green('\nāœ“ Dry run complete. No files were changed.'));
40
+ return;
41
+ }
42
+ if (!options.yes) {
43
+ const { confirm } = await prompts({
44
+ type: 'confirm',
45
+ name: 'confirm',
46
+ message: 'Apply the Tailwind v3 -> v4 migration now?',
47
+ initial: false
48
+ });
49
+ if (!confirm) {
50
+ console.log(chalk.gray('Migration cancelled.'));
51
+ return;
52
+ }
53
+ }
54
+ const migrateSpinner = ora('Applying Tailwind migration...').start();
55
+ let result;
56
+ try {
57
+ result = applyTailwindMigration(cwd);
58
+ migrateSpinner.succeed(`Tailwind migration applied (${result.filesUpdated.length} files updated)`);
59
+ } catch (error) {
60
+ migrateSpinner.fail('Failed to apply Tailwind migration');
61
+ console.error(chalk.red(error));
62
+ return;
63
+ }
64
+ if (result.addedDevDependencies.length > 0) {
65
+ const dependencySpinner = ora('Installing Tailwind v4 dependencies...').start();
66
+ try {
67
+ await installDependencies(result.addedDevDependencies, {
68
+ cwd,
69
+ dev: true,
70
+ silent: true
71
+ });
72
+ dependencySpinner.succeed('Tailwind v4 dependencies installed');
73
+ } catch (e) {
74
+ dependencySpinner.fail('Could not install dependencies automatically');
75
+ const packageManager = detectPackageManager(cwd);
76
+ console.log(chalk.yellow(`Run manually: ${formatInstallCommand(packageManager, result.addedDevDependencies, true)}`));
77
+ }
78
+ }
79
+ if (result.removedPackages.length > 0) {
80
+ console.log(chalk.gray(`Legacy packages removed from package.json: ${result.removedPackages.join(', ')}. Reinstall dependencies if your lockfile still references them.`));
81
+ }
82
+ if (result.auditFindings.length > 0) {
83
+ console.log(chalk.yellow('\nManual review recommended for these Tailwind utilities:'));
84
+ for (const finding of result.auditFindings){
85
+ console.log(chalk.yellow(` - ${finding.filePath}: ${finding.message}`));
86
+ }
87
+ }
88
+ }
89
+
90
+ //# sourceMappingURL=migrate-tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/migrate-tailwind.ts"],"sourcesContent":["import chalk from 'chalk';\nimport ora from 'ora';\nimport prompts from 'prompts';\nimport {\n detectPackageManager,\n formatInstallCommand,\n installDependencies,\n} from '../utils/package-manager.js';\nimport {\n applyTailwindMigration,\n planTailwindMigration,\n} from '../utils/tailwind-migration.js';\n\ninterface MigrateTailwindOptions {\n cwd: string;\n dryRun?: boolean;\n yes?: boolean;\n}\n\nexport async function migrateTailwindCommand(options: MigrateTailwindOptions) {\n const cwd = options.cwd;\n\n let plan;\n try {\n plan = planTailwindMigration(cwd);\n } catch (error) {\n console.log(\n chalk.red(\n `āŒ ${error instanceof Error ? error.message : 'Failed to plan Tailwind migration.'}`,\n ),\n );\n return;\n }\n\n console.log(chalk.bold.cyan('\\n🌌 Galaxy UI Tailwind Migration\\n'));\n console.log(chalk.green(`āœ“ Framework: ${chalk.bold(plan.framework)}`));\n console.log(\n chalk.green(\n `āœ“ Tailwind detection: ${chalk.bold(plan.detection.version === null ? 'unknown' : `v${plan.detection.version}`)} ${chalk.gray(`(${plan.detection.source})`)}`,\n ),\n );\n\n if (plan.detection.version !== 3) {\n console.log(\n chalk.yellow(`⚠ ${plan.notes[0] || 'No Tailwind v3 setup detected.'}`),\n );\n return;\n }\n\n console.log(chalk.cyan('\\nMigration plan:'));\n for (const filePath of plan.filesToUpdate) {\n console.log(chalk.gray(` - update ${filePath}`));\n }\n\n if (plan.addedDevDependencies.length > 0) {\n console.log(\n chalk.gray(\n ` - add devDependencies: ${plan.addedDevDependencies.join(', ')}`,\n ),\n );\n }\n if (plan.removedPackages.length > 0) {\n console.log(\n chalk.gray(\n ` - remove legacy packages from package.json: ${plan.removedPackages.join(', ')}`,\n ),\n );\n }\n\n if (plan.auditFindings.length > 0) {\n console.log(chalk.yellow('\\nTailwind v4 review findings:'));\n for (const finding of plan.auditFindings) {\n console.log(\n chalk.yellow(\n ` - ${finding.filePath}: ${finding.pattern} (${finding.matches.join(', ')})`,\n ),\n );\n }\n }\n\n if (options.dryRun) {\n console.log(chalk.green('\\nāœ“ Dry run complete. No files were changed.'));\n return;\n }\n\n if (!options.yes) {\n const { confirm } = await prompts({\n type: 'confirm',\n name: 'confirm',\n message: 'Apply the Tailwind v3 -> v4 migration now?',\n initial: false,\n });\n\n if (!confirm) {\n console.log(chalk.gray('Migration cancelled.'));\n return;\n }\n }\n\n const migrateSpinner = ora('Applying Tailwind migration...').start();\n\n let result;\n try {\n result = applyTailwindMigration(cwd);\n migrateSpinner.succeed(\n `Tailwind migration applied (${result.filesUpdated.length} files updated)`,\n );\n } catch (error) {\n migrateSpinner.fail('Failed to apply Tailwind migration');\n console.error(chalk.red(error));\n return;\n }\n\n if (result.addedDevDependencies.length > 0) {\n const dependencySpinner = ora(\n 'Installing Tailwind v4 dependencies...',\n ).start();\n\n try {\n await installDependencies(result.addedDevDependencies, {\n cwd,\n dev: true,\n silent: true,\n });\n dependencySpinner.succeed('Tailwind v4 dependencies installed');\n } catch {\n dependencySpinner.fail('Could not install dependencies automatically');\n const packageManager = detectPackageManager(cwd);\n console.log(\n chalk.yellow(\n `Run manually: ${formatInstallCommand(packageManager, result.addedDevDependencies, true)}`,\n ),\n );\n }\n }\n\n if (result.removedPackages.length > 0) {\n console.log(\n chalk.gray(\n `Legacy packages removed from package.json: ${result.removedPackages.join(', ')}. Reinstall dependencies if your lockfile still references them.`,\n ),\n );\n }\n\n if (result.auditFindings.length > 0) {\n console.log(\n chalk.yellow('\\nManual review recommended for these Tailwind utilities:'),\n );\n for (const finding of result.auditFindings) {\n console.log(chalk.yellow(` - ${finding.filePath}: ${finding.message}`));\n }\n }\n}\n"],"names":["chalk","ora","prompts","detectPackageManager","formatInstallCommand","installDependencies","applyTailwindMigration","planTailwindMigration","migrateTailwindCommand","options","cwd","plan","error","console","log","red","Error","message","bold","cyan","green","framework","detection","version","gray","source","yellow","notes","filePath","filesToUpdate","addedDevDependencies","length","join","removedPackages","auditFindings","finding","pattern","matches","dryRun","yes","confirm","type","name","initial","migrateSpinner","start","result","succeed","filesUpdated","fail","dependencySpinner","dev","silent","packageManager"],"mappings":"AAAA,OAAOA,WAAW,QAAQ;AAC1B,OAAOC,SAAS,MAAM;AACtB,OAAOC,aAAa,UAAU;AAC9B,SACEC,oBAAoB,EACpBC,oBAAoB,EACpBC,mBAAmB,QACd,8BAA8B;AACrC,SACEC,sBAAsB,EACtBC,qBAAqB,QAChB,iCAAiC;AAQxC,OAAO,eAAeC,uBAAuBC,OAA+B;IAC1E,MAAMC,MAAMD,QAAQC,GAAG;IAEvB,IAAIC;IACJ,IAAI;QACFA,OAAOJ,sBAAsBG;IAC/B,EAAE,OAAOE,OAAO;QACdC,QAAQC,GAAG,CACTd,MAAMe,GAAG,CACP,CAAC,EAAE,EAAEH,iBAAiBI,QAAQJ,MAAMK,OAAO,GAAG,sCAAsC;QAGxF;IACF;IAEAJ,QAAQC,GAAG,CAACd,MAAMkB,IAAI,CAACC,IAAI,CAAC;IAC5BN,QAAQC,GAAG,CAACd,MAAMoB,KAAK,CAAC,CAAC,aAAa,EAAEpB,MAAMkB,IAAI,CAACP,KAAKU,SAAS,GAAG;IACpER,QAAQC,GAAG,CACTd,MAAMoB,KAAK,CACT,CAAC,sBAAsB,EAAEpB,MAAMkB,IAAI,CAACP,KAAKW,SAAS,CAACC,OAAO,KAAK,OAAO,YAAY,CAAC,CAAC,EAAEZ,KAAKW,SAAS,CAACC,OAAO,EAAE,EAAE,CAAC,EAAEvB,MAAMwB,IAAI,CAAC,CAAC,CAAC,EAAEb,KAAKW,SAAS,CAACG,MAAM,CAAC,CAAC,CAAC,GAAG;IAIjK,IAAId,KAAKW,SAAS,CAACC,OAAO,KAAK,GAAG;QAChCV,QAAQC,GAAG,CACTd,MAAM0B,MAAM,CAAC,CAAC,EAAE,EAAEf,KAAKgB,KAAK,CAAC,EAAE,IAAI,kCAAkC;QAEvE;IACF;IAEAd,QAAQC,GAAG,CAACd,MAAMmB,IAAI,CAAC;IACvB,KAAK,MAAMS,YAAYjB,KAAKkB,aAAa,CAAE;QACzChB,QAAQC,GAAG,CAACd,MAAMwB,IAAI,CAAC,CAAC,WAAW,EAAEI,UAAU;IACjD;IAEA,IAAIjB,KAAKmB,oBAAoB,CAACC,MAAM,GAAG,GAAG;QACxClB,QAAQC,GAAG,CACTd,MAAMwB,IAAI,CACR,CAAC,yBAAyB,EAAEb,KAAKmB,oBAAoB,CAACE,IAAI,CAAC,OAAO;IAGxE;IACA,IAAIrB,KAAKsB,eAAe,CAACF,MAAM,GAAG,GAAG;QACnClB,QAAQC,GAAG,CACTd,MAAMwB,IAAI,CACR,CAAC,8CAA8C,EAAEb,KAAKsB,eAAe,CAACD,IAAI,CAAC,OAAO;IAGxF;IAEA,IAAIrB,KAAKuB,aAAa,CAACH,MAAM,GAAG,GAAG;QACjClB,QAAQC,GAAG,CAACd,MAAM0B,MAAM,CAAC;QACzB,KAAK,MAAMS,WAAWxB,KAAKuB,aAAa,CAAE;YACxCrB,QAAQC,GAAG,CACTd,MAAM0B,MAAM,CACV,CAAC,IAAI,EAAES,QAAQP,QAAQ,CAAC,EAAE,EAAEO,QAAQC,OAAO,CAAC,EAAE,EAAED,QAAQE,OAAO,CAACL,IAAI,CAAC,MAAM,CAAC,CAAC;QAGnF;IACF;IAEA,IAAIvB,QAAQ6B,MAAM,EAAE;QAClBzB,QAAQC,GAAG,CAACd,MAAMoB,KAAK,CAAC;QACxB;IACF;IAEA,IAAI,CAACX,QAAQ8B,GAAG,EAAE;QAChB,MAAM,EAAEC,OAAO,EAAE,GAAG,MAAMtC,QAAQ;YAChCuC,MAAM;YACNC,MAAM;YACNzB,SAAS;YACT0B,SAAS;QACX;QAEA,IAAI,CAACH,SAAS;YACZ3B,QAAQC,GAAG,CAACd,MAAMwB,IAAI,CAAC;YACvB;QACF;IACF;IAEA,MAAMoB,iBAAiB3C,IAAI,kCAAkC4C,KAAK;IAElE,IAAIC;IACJ,IAAI;QACFA,SAASxC,uBAAuBI;QAChCkC,eAAeG,OAAO,CACpB,CAAC,4BAA4B,EAAED,OAAOE,YAAY,CAACjB,MAAM,CAAC,eAAe,CAAC;IAE9E,EAAE,OAAOnB,OAAO;QACdgC,eAAeK,IAAI,CAAC;QACpBpC,QAAQD,KAAK,CAACZ,MAAMe,GAAG,CAACH;QACxB;IACF;IAEA,IAAIkC,OAAOhB,oBAAoB,CAACC,MAAM,GAAG,GAAG;QAC1C,MAAMmB,oBAAoBjD,IACxB,0CACA4C,KAAK;QAEP,IAAI;YACF,MAAMxC,oBAAoByC,OAAOhB,oBAAoB,EAAE;gBACrDpB;gBACAyC,KAAK;gBACLC,QAAQ;YACV;YACAF,kBAAkBH,OAAO,CAAC;QAC5B,EAAE,UAAM;YACNG,kBAAkBD,IAAI,CAAC;YACvB,MAAMI,iBAAiBlD,qBAAqBO;YAC5CG,QAAQC,GAAG,CACTd,MAAM0B,MAAM,CACV,CAAC,cAAc,EAAEtB,qBAAqBiD,gBAAgBP,OAAOhB,oBAAoB,EAAE,OAAO;QAGhG;IACF;IAEA,IAAIgB,OAAOb,eAAe,CAACF,MAAM,GAAG,GAAG;QACrClB,QAAQC,GAAG,CACTd,MAAMwB,IAAI,CACR,CAAC,2CAA2C,EAAEsB,OAAOb,eAAe,CAACD,IAAI,CAAC,MAAM,gEAAgE,CAAC;IAGvJ;IAEA,IAAIc,OAAOZ,aAAa,CAACH,MAAM,GAAG,GAAG;QACnClB,QAAQC,GAAG,CACTd,MAAM0B,MAAM,CAAC;QAEf,KAAK,MAAMS,WAAWW,OAAOZ,aAAa,CAAE;YAC1CrB,QAAQC,GAAG,CAACd,MAAM0B,MAAM,CAAC,CAAC,IAAI,EAAES,QAAQP,QAAQ,CAAC,EAAE,EAAEO,QAAQlB,OAAO,EAAE;QACxE;IACF;AACF"}
package/dist/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  export * from './commands/init.js';
2
2
  export * from './commands/add.js';
3
+ export * from './commands/migrate-tailwind.js';
3
4
  export * from './utils/detect.js';
4
5
  export * from './utils/files.js';
5
6
  export * from './utils/registry.js';
6
- export * from './utils/config.js';
7
+ export * from './utils/components-config.js';
8
+ export * from './utils/config-schema.js';
9
+ export * from './utils/tailwind-detector.js';
10
+ export * from './utils/tailwind-scaffold.js';
11
+ export * from './utils/tailwind-migration.js';
7
12
 
8
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './commands/init.js';\nexport * from './commands/add.js';\nexport * from './utils/detect.js';\nexport * from './utils/files.js';\nexport * from './utils/registry.js';\nexport * from './utils/config.js';\n"],"names":[],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,oBAAoB;AAClC,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,sBAAsB;AACpC,cAAc,oBAAoB"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './commands/init.js';\nexport * from './commands/add.js';\nexport * from './commands/migrate-tailwind.js';\nexport * from './utils/detect.js';\nexport * from './utils/files.js';\nexport * from './utils/registry.js';\nexport * from './utils/components-config.js';\nexport * from './utils/config-schema.js';\nexport * from './utils/tailwind-detector.js';\nexport * from './utils/tailwind-scaffold.js';\nexport * from './utils/tailwind-migration.js';\n"],"names":[],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,oBAAoB;AAClC,cAAc,iCAAiC;AAC/C,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,sBAAsB;AACpC,cAAc,+BAA+B;AAC7C,cAAc,2BAA2B;AACzC,cAAc,+BAA+B;AAC7C,cAAc,+BAA+B;AAC7C,cAAc,gCAAgC"}