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/add.ts"],"sourcesContent":["import prompts from 'prompts';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { resolve, join, dirname } from 'path';\nimport { existsSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { loadConfig, configExists } from '../utils/config.js';\nimport {\n loadComponentsConfig,\n hasComponentsConfig,\n getFrameworkFromConfig,\n} from '../utils/components-config.js';\nimport { hasSrcDirectory } from '../utils/detect.js';\nimport {\n loadFrameworkRegistry,\n getFrameworkComponent,\n getFrameworkComponentDependencies,\n getAllFrameworkComponents,\n} from '../utils/framework-registry.js';\nimport { writeFile, fileExists, readFile, ensureDir } from '../utils/files.js';\nimport { installDependencies } from '../utils/package-manager.js';\nimport type { Framework } from '../utils/config-schema.js';\nimport { fetchFileFromGitHub, getComponentGitHubPath } from '../utils/github-fetcher.js';\nimport { transformComponent } from '../utils/component-transformer.js';\nimport { generateAngularProvidersIndex } from '../utils/angular-provider-manager.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface AddOptions {\n all?: boolean;\n cwd: string;\n}\n\nexport async function addCommand(components: string[], options: AddOptions) {\n const cwd = options.cwd;\n\n // Check if components.json exists (new config system)\n if (!hasComponentsConfig(cwd)) {\n console.log(chalk.red('❌ Galaxy UI is not initialized in this project.'));\n console.log(chalk.gray('Run') + chalk.cyan(' galaxy-design init ') + chalk.gray('first.'));\n return;\n }\n\n // Load components.json configuration\n const componentsConfig = loadComponentsConfig(cwd);\n if (!componentsConfig) {\n console.log(chalk.red('❌ Failed to load components.json configuration.'));\n return;\n }\n\n const framework = componentsConfig.framework;\n console.log(chalk.gray(`Framework detected: ${chalk.cyan(framework)}\\n`));\n\n // Load framework-specific registry\n const registry = loadFrameworkRegistry(framework);\n const allComponents = getAllFrameworkComponents(framework);\n\n // Determine which components to add\n let componentsToAdd: string[] = [];\n\n if (options.all) {\n // Add all components\n componentsToAdd = Object.keys(allComponents);\n } else if (components.length === 0) {\n // Interactive mode\n const choices = [];\n\n // Create choices organized by category\n const categories = new Map<string, any[]>();\n\n for (const [key, component] of Object.entries(allComponents)) {\n const category = component.category || 'other';\n if (!categories.has(category)) {\n categories.set(category, []);\n }\n categories.get(category)!.push({ key, component });\n }\n\n for (const [category, items] of categories) {\n choices.push({\n title: chalk.bold.cyan(category.charAt(0).toUpperCase() + category.slice(1)),\n value: `category:${category}`,\n disabled: true,\n });\n\n for (const { key, component } of items) {\n choices.push({\n title: ` ${component.name}`,\n description: component.description || '',\n value: key,\n });\n }\n }\n\n const response = await prompts({\n type: 'multiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n choices,\n hint: '- Space to select. Return to submit',\n });\n\n if (!response.components || response.components.length === 0) {\n console.log(chalk.gray('No components selected.'));\n return;\n }\n\n componentsToAdd = response.components;\n } else {\n // Add specified components\n for (const input of components) {\n // Check if component exists in registry\n if (allComponents[input]) {\n componentsToAdd.push(input);\n } else {\n console.log(chalk.yellow(`⚠ Component \"${input}\" not found. Skipping.`));\n }\n }\n }\n\n if (componentsToAdd.length === 0) {\n console.log(chalk.yellow('No valid components to add.'));\n return;\n }\n\n // Remove duplicates\n componentsToAdd = [...new Set(componentsToAdd)];\n\n // Resolve registry dependencies\n const resolvedComponents = new Set<string>(componentsToAdd);\n const toProcess = [...componentsToAdd];\n\n while (toProcess.length > 0) {\n const componentKey = toProcess.pop()!;\n const component = getFrameworkComponent(framework, componentKey);\n\n if (component && component.registryDependencies && component.registryDependencies.length > 0) {\n for (const depKey of component.registryDependencies) {\n if (!resolvedComponents.has(depKey)) {\n resolvedComponents.add(depKey);\n toProcess.push(depKey);\n }\n }\n }\n }\n\n componentsToAdd = Array.from(resolvedComponents);\n\n console.log(chalk.bold.cyan(`\\n📦 Adding ${componentsToAdd.length} component(s)...\\n`));\n\n // Collect all dependencies\n const allDependencies: string[] = [];\n const allDevDependencies: string[] = [];\n\n // Add each component\n const results: { name: string; success: boolean; path?: string; error?: string }[] = [];\n\n for (const componentKey of componentsToAdd) {\n const component = getFrameworkComponent(framework, componentKey);\n\n if (!component) {\n results.push({\n name: componentKey,\n success: false,\n error: 'Component not found in registry',\n });\n continue;\n }\n\n const spinner = ora(`Adding ${chalk.cyan(component.name)}...`).start();\n\n try {\n // Get component destination path from aliases\n const componentsAlias = componentsConfig.aliases.components;\n const destPath = componentsAlias.replace('@/', '');\n\n // Detect if project uses src/ directory and adjust path\n const usesSrcDir = hasSrcDirectory(cwd);\n const baseDir = usesSrcDir ? 'src/' : '';\n const fullDestPath = resolve(cwd, baseDir + destPath, 'ui');\n ensureDir(fullDestPath);\n\n // Get file extension based on framework\n const fileExtensions: Record<Framework, string> = {\n vue: '.vue',\n react: '.tsx',\n angular: '.component.ts',\n 'react-native': '.tsx',\n flutter: '.dart',\n };\n const ext = fileExtensions[framework];\n\n // Create component folder\n const componentFolderPath = join(fullDestPath, componentKey);\n ensureDir(componentFolderPath);\n\n // Map framework to actual package framework for GitHub path\n // Next.js uses React components, Nuxt.js uses Vue components\n let packageFramework = framework;\n if (framework === 'nextjs') packageFramework = 'react';\n if (framework === 'nuxtjs') packageFramework = 'vue';\n\n // Copy component files from GitHub\n for (const file of component.files) {\n const fileName = file.includes('/') ? file.split('/').pop()! : file;\n const destFilePath = join(componentFolderPath, fileName);\n\n // Check if file already exists\n if (fileExists(destFilePath)) {\n spinner.warn(\n `${chalk.cyan(component.name)} - File already exists: ${fileName}`\n );\n continue;\n }\n\n try {\n // Fetch file from GitHub (use packageFramework for correct path)\n const sourceFolder = component.type === 'block' ? 'blocks' : 'components';\n const githubPath = `packages/${packageFramework}/src/${sourceFolder}/${componentKey}/${file}`;\n let content = await fetchFileFromGitHub(githubPath);\n\n // Apply transformations (import path fixes, 'use client' for Next.js, etc.)\n const transformResult = transformComponent(content, {\n platform: framework,\n componentName: componentKey,\n filePath: destFilePath,\n });\n content = transformResult.content;\n\n writeFile(destFilePath, content);\n } catch (error) {\n // Try with capitalized file name\n try {\n const capitalizedFile = file.charAt(0).toUpperCase() + file.slice(1);\n const sourceFolder = component.type === 'block' ? 'blocks' : 'components';\n const githubPath = `packages/${packageFramework}/src/${sourceFolder}/${componentKey}/${capitalizedFile}`;\n let content = await fetchFileFromGitHub(githubPath);\n\n // Apply transformations (import path fixes, 'use client' for Next.js, etc.)\n const transformResult = transformComponent(content, {\n platform: framework,\n componentName: componentKey,\n filePath: destFilePath,\n });\n content = transformResult.content;\n\n writeFile(destFilePath, content);\n } catch (capitalizedError) {\n // If both attempts fail, write a placeholder\n const placeholderContent = `// ${component.name} component for ${framework}\\n// TODO: Failed to fetch component from GitHub: ${error instanceof Error ? error.message : 'Unknown error'}\\n`;\n writeFile(destFilePath, placeholderContent);\n spinner.warn(`${chalk.yellow('⚠')} Failed to fetch ${file} from GitHub, created placeholder`);\n }\n }\n }\n\n spinner.succeed(\n `${chalk.green('✓')} Added ${chalk.cyan(component.name)} to ${chalk.gray(\n destPath + '/ui/' + componentKey + '/'\n )}`\n );\n\n results.push({\n name: component.name,\n success: true,\n path: componentFolderPath,\n });\n\n // Collect dependencies\n const deps = getFrameworkComponentDependencies(framework, componentKey);\n allDependencies.push(...deps.dependencies);\n allDevDependencies.push(...deps.devDependencies);\n } catch (error) {\n spinner.fail(`Failed to add ${chalk.cyan(component.name)}`);\n results.push({\n name: component.name,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n // Install dependencies\n const uniqueDependencies = [...new Set(allDependencies)];\n const uniqueDevDependencies = [...new Set(allDevDependencies)];\n\n if (uniqueDependencies.length > 0 || uniqueDevDependencies.length > 0) {\n console.log('\\n');\n const installSpinner = ora('Installing dependencies...').start();\n\n try {\n if (uniqueDependencies.length > 0) {\n await installDependencies(uniqueDependencies, { cwd, dev: false, silent: true });\n }\n if (uniqueDevDependencies.length > 0) {\n await installDependencies(uniqueDevDependencies, { cwd, dev: true, silent: true });\n }\n installSpinner.succeed('Dependencies installed');\n } catch (error) {\n installSpinner.fail('Failed to install dependencies');\n console.log(chalk.yellow('Please install them manually:'));\n if (uniqueDependencies.length > 0) {\n console.log(chalk.gray(` npm install ${uniqueDependencies.join(' ')}`));\n }\n if (uniqueDevDependencies.length > 0) {\n console.log(chalk.gray(` npm install -D ${uniqueDevDependencies.join(' ')}`));\n }\n }\n }\n\n // Summary\n const successful = results.filter(r => r.success).length;\n const failed = results.filter(r => !r.success).length;\n\n console.log('\\n');\n\n if (successful > 0) {\n console.log(\n chalk.green.bold(`✓ Successfully added ${successful} component(s)`)\n );\n }\n\n if (failed > 0) {\n console.log(chalk.red.bold(`✗ Failed to add ${failed} component(s)`));\n for (const result of results.filter(r => !r.success)) {\n console.log(chalk.red(` - ${result.name}: ${result.error}`));\n }\n }\n\n // For Angular, generate/update the components/ui/index.ts file with providers\n if (framework === 'angular' && successful > 0) {\n console.log('\\n');\n const providerSpinner = ora('Generating providers index...').start();\n\n try {\n const componentsAlias = componentsConfig.aliases.components;\n const destPath = componentsAlias.replace('@/', '');\n const usesSrcDir = hasSrcDirectory(cwd);\n const baseDir = usesSrcDir ? 'src/' : '';\n const fullDestPath = resolve(cwd, baseDir + destPath, 'ui');\n\n const success = generateAngularProvidersIndex(fullDestPath, framework);\n\n if (success) {\n providerSpinner.succeed('Generated providers index at ' + chalk.cyan(`${destPath}/ui/index.ts`));\n } else {\n providerSpinner.warn('Could not generate providers index');\n }\n } catch (error) {\n providerSpinner.fail('Failed to generate providers index');\n }\n }\n\n // Next steps\n if (successful > 0) {\n console.log('\\n' + chalk.gray('Next steps:'));\n\n switch (framework) {\n case 'vue':\n console.log(chalk.gray(' 1. Import the components in your Vue component'));\n console.log(chalk.gray(' 2. Use them in your template'));\n break;\n case 'react':\n console.log(chalk.gray(' 1. Import the components in your React component'));\n console.log(chalk.gray(' 2. Use them in your JSX'));\n break;\n case 'angular':\n console.log(chalk.gray(' 1. Import provideGalaxyComponents() in your app.config.ts providers array'));\n console.log(chalk.gray(' 2. Import the components in your Angular component'));\n console.log(chalk.gray(' 3. Use them in your templates'));\n break;\n }\n\n console.log(chalk.gray(' 4. Enjoy building with Galaxy UI! 🚀\\n'));\n }\n}\n"],"names":["prompts","chalk","ora","resolve","join","dirname","fileURLToPath","loadComponentsConfig","hasComponentsConfig","hasSrcDirectory","loadFrameworkRegistry","getFrameworkComponent","getFrameworkComponentDependencies","getAllFrameworkComponents","writeFile","fileExists","ensureDir","installDependencies","fetchFileFromGitHub","transformComponent","generateAngularProvidersIndex","__filename","url","__dirname","addCommand","components","options","cwd","console","log","red","gray","cyan","componentsConfig","framework","registry","allComponents","componentsToAdd","all","Object","keys","length","choices","categories","Map","key","component","entries","category","has","set","get","push","items","title","bold","charAt","toUpperCase","slice","value","disabled","name","description","response","type","message","hint","input","yellow","Set","resolvedComponents","toProcess","componentKey","pop","registryDependencies","depKey","add","Array","from","allDependencies","allDevDependencies","results","success","error","spinner","start","componentsAlias","aliases","destPath","replace","usesSrcDir","baseDir","fullDestPath","fileExtensions","vue","react","angular","flutter","ext","componentFolderPath","packageFramework","file","files","fileName","includes","split","destFilePath","warn","sourceFolder","githubPath","content","transformResult","platform","componentName","filePath","capitalizedFile","capitalizedError","placeholderContent","Error","succeed","green","path","deps","dependencies","devDependencies","fail","uniqueDependencies","uniqueDevDependencies","installSpinner","dev","silent","successful","filter","r","failed","result","providerSpinner"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/commands/add.ts"],"sourcesContent":["import prompts from 'prompts';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { resolve, join } from 'path';\nimport {\n loadComponentsConfig,\n hasComponentsConfig,\n} from '../utils/components-config.js';\nimport { hasSrcDirectory } from '../utils/detect.js';\nimport {\n getFrameworkComponent,\n getFrameworkComponentDependencies,\n getAllFrameworkComponents,\n resolveFrameworkComponentGraph,\n resolveFrameworkComponentName,\n} from '../utils/framework-registry-service.js';\nimport { ensureDir } from '../utils/files.js';\nimport {\n detectPackageManager,\n formatInstallCommand,\n installDependencies,\n} from '../utils/package-manager.js';\nimport { copyComponentFilesToDirectory } from '../utils/component-copier.js';\nimport { generateAngularProvidersIndex } from '../utils/angular-provider-manager.js';\n\ninterface AddOptions {\n all?: boolean;\n cwd: string;\n}\n\ninterface AddResult {\n name: string;\n success: boolean;\n path?: string;\n error?: string;\n details?: string[];\n}\n\nexport async function addCommand(components: string[], options: AddOptions) {\n const cwd = options.cwd;\n\n // Check if components.json exists (new config system)\n if (!hasComponentsConfig(cwd)) {\n console.log(chalk.red('❌ Galaxy UI is not initialized in this project.'));\n console.log(\n chalk.gray('Run') +\n chalk.cyan(' galaxy-design init ') +\n chalk.gray('first.'),\n );\n return;\n }\n\n // Load components.json configuration\n const componentsConfig = loadComponentsConfig(cwd);\n if (!componentsConfig) {\n console.log(chalk.red('❌ Failed to load components.json configuration.'));\n return;\n }\n\n const framework = componentsConfig.framework;\n console.log(chalk.gray(`Framework detected: ${chalk.cyan(framework)}\\n`));\n\n const allComponents = getAllFrameworkComponents(framework);\n\n // Determine which components to add\n let componentsToAdd: string[] = [];\n\n if (options.all) {\n // Add all components\n componentsToAdd = Object.keys(allComponents);\n } else if (components.length === 0) {\n // Interactive mode\n const choices = [];\n\n // Create choices organized by category\n const categories = new Map<string, any[]>();\n\n for (const [key, component] of Object.entries(allComponents)) {\n const category = component.category || 'other';\n if (!categories.has(category)) {\n categories.set(category, []);\n }\n categories.get(category)!.push({ key, component });\n }\n\n for (const [category, items] of categories) {\n choices.push({\n title: chalk.bold.cyan(\n category.charAt(0).toUpperCase() + category.slice(1),\n ),\n value: `category:${category}`,\n disabled: true,\n });\n\n for (const { key, component } of items) {\n choices.push({\n title: ` ${component.name}`,\n description: component.description || '',\n value: key,\n });\n }\n }\n\n const response = await prompts({\n type: 'multiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n choices,\n hint: '- Space to select. Return to submit',\n });\n\n if (!response.components || response.components.length === 0) {\n console.log(chalk.gray('No components selected.'));\n return;\n }\n\n componentsToAdd = response.components;\n } else {\n // Add specified components\n for (const input of components) {\n const resolvedName = resolveFrameworkComponentName(framework, input);\n\n if (resolvedName && allComponents[resolvedName]) {\n componentsToAdd.push(resolvedName);\n } else {\n console.log(\n chalk.yellow(`⚠ Component \"${input}\" not found. Skipping.`),\n );\n }\n }\n }\n\n if (componentsToAdd.length === 0) {\n console.log(chalk.yellow('No valid components to add.'));\n return;\n }\n\n // Remove duplicates\n componentsToAdd = [...new Set(componentsToAdd)];\n\n componentsToAdd = resolveFrameworkComponentGraph(framework, componentsToAdd);\n\n console.log(\n chalk.bold.cyan(`\\n📦 Adding ${componentsToAdd.length} component(s)...\\n`),\n );\n\n // Collect all dependencies\n const allDependencies: string[] = [];\n const allDevDependencies: string[] = [];\n\n // Add each component\n const results: AddResult[] = [];\n\n for (const componentKey of componentsToAdd) {\n const component = getFrameworkComponent(framework, componentKey);\n let componentFileErrors: string[] = [];\n\n if (!component) {\n results.push({\n name: componentKey,\n success: false,\n error: 'Component not found in registry',\n });\n continue;\n }\n\n const spinner = ora(`Adding ${chalk.cyan(component.name)}...`).start();\n\n try {\n // Get component destination path from aliases\n const componentsAlias = componentsConfig.aliases.components;\n const destPath = componentsAlias.replace('@/', '');\n\n // Detect if project uses src/ directory and adjust path\n const usesSrcDir = hasSrcDirectory(cwd);\n const baseDir = usesSrcDir ? 'src/' : '';\n const fullDestPath = resolve(cwd, baseDir + destPath, 'ui');\n ensureDir(fullDestPath);\n\n // Create component folder\n const componentFolderPath = join(fullDestPath, componentKey);\n ensureDir(componentFolderPath);\n\n const copyResult = await copyComponentFilesToDirectory({\n componentName: componentKey,\n componentFiles: component.files,\n componentType: component.type,\n sourcePlatform: framework,\n targetPlatform: framework,\n targetDirectory: componentFolderPath,\n relativeTo: cwd,\n overwrite: false,\n onSkippedFile: (fileName) => {\n spinner.warn(\n `${chalk.cyan(component.name)} - File already exists: ${fileName}`,\n );\n },\n });\n\n if (!copyResult.success) {\n componentFileErrors = [...copyResult.errors];\n throw new Error(\n `Missing or invalid files: ${copyResult.errors.length}`,\n );\n }\n\n spinner.succeed(\n `${chalk.green('✓')} Added ${chalk.cyan(component.name)} to ${chalk.gray(\n destPath + '/ui/' + componentKey + '/',\n )}`,\n );\n\n results.push({\n name: component.name,\n success: true,\n path: componentFolderPath,\n });\n\n // Collect dependencies\n const deps = getFrameworkComponentDependencies(framework, componentKey);\n allDependencies.push(...deps.dependencies);\n allDevDependencies.push(...deps.devDependencies);\n } catch (error) {\n spinner.fail(`Failed to add ${chalk.cyan(component.name)}`);\n results.push({\n name: component.name,\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n details: componentFileErrors,\n });\n }\n }\n\n // Install dependencies\n const uniqueDependencies = [...new Set(allDependencies)];\n const uniqueDevDependencies = [...new Set(allDevDependencies)];\n\n if (uniqueDependencies.length > 0 || uniqueDevDependencies.length > 0) {\n console.log('\\n');\n const installSpinner = ora('Installing dependencies...').start();\n\n try {\n if (uniqueDependencies.length > 0) {\n await installDependencies(uniqueDependencies, {\n cwd,\n dev: false,\n silent: true,\n });\n }\n if (uniqueDevDependencies.length > 0) {\n await installDependencies(uniqueDevDependencies, {\n cwd,\n dev: true,\n silent: true,\n });\n }\n installSpinner.succeed('Dependencies installed');\n } catch (error) {\n installSpinner.fail('Failed to install dependencies');\n console.log(chalk.yellow('Please install them manually:'));\n const packageManager = detectPackageManager(cwd);\n if (uniqueDependencies.length > 0) {\n console.log(\n chalk.gray(\n ` ${formatInstallCommand(packageManager, uniqueDependencies)}`,\n ),\n );\n }\n if (uniqueDevDependencies.length > 0) {\n console.log(\n chalk.gray(\n ` ${formatInstallCommand(packageManager, uniqueDevDependencies, true)}`,\n ),\n );\n }\n }\n }\n\n // Summary\n const successful = results.filter((r) => r.success).length;\n const failed = results.filter((r) => !r.success).length;\n\n console.log('\\n');\n\n if (successful > 0) {\n console.log(\n chalk.green.bold(`✓ Successfully added ${successful} component(s)`),\n );\n }\n\n if (failed > 0) {\n console.log(chalk.red.bold(`✗ Failed to add ${failed} component(s)`));\n for (const result of results.filter((r) => !r.success)) {\n console.log(chalk.red(` - ${result.name}: ${result.error}`));\n if (result.details && result.details.length > 0) {\n for (const detail of result.details) {\n console.log(chalk.gray(` ${detail}`));\n }\n }\n }\n }\n\n // For Angular, generate/update the components/ui/index.ts file with providers\n if (framework === 'angular' && successful > 0) {\n console.log('\\n');\n const providerSpinner = ora('Generating providers index...').start();\n\n try {\n const componentsAlias = componentsConfig.aliases.components;\n const destPath = componentsAlias.replace('@/', '');\n const usesSrcDir = hasSrcDirectory(cwd);\n const baseDir = usesSrcDir ? 'src/' : '';\n const fullDestPath = resolve(cwd, baseDir + destPath, 'ui');\n\n const success = generateAngularProvidersIndex(fullDestPath, framework);\n\n if (success) {\n providerSpinner.succeed(\n 'Generated providers index at ' +\n chalk.cyan(`${destPath}/ui/index.ts`),\n );\n } else {\n providerSpinner.warn('Could not generate providers index');\n }\n } catch (error) {\n providerSpinner.fail('Failed to generate providers index');\n }\n }\n\n // Next steps\n if (successful > 0) {\n console.log('\\n' + chalk.gray('Next steps:'));\n\n const nextSteps: string[] = [];\n\n switch (framework) {\n case 'vue':\n case 'nuxtjs':\n nextSteps.push('Import the components in your Vue component');\n nextSteps.push('Use them in your template');\n break;\n case 'react':\n case 'nextjs':\n nextSteps.push('Import the components in your React component');\n nextSteps.push('Use them in your JSX');\n break;\n case 'angular':\n nextSteps.push(\n 'Import provideGalaxyComponents() in your app.config.ts providers array',\n );\n nextSteps.push('Import the components in your Angular component');\n nextSteps.push('Use them in your templates');\n break;\n case 'react-native':\n nextSteps.push(\n 'Import the components in your React Native screen or component',\n );\n nextSteps.push(\n 'Ensure your NativeWind and alias configuration resolves `@/*` imports',\n );\n break;\n case 'flutter':\n nextSteps.push('Import the generated widgets in your Dart files');\n nextSteps.push(\n 'Run `flutter pub get` if new Dart dependencies were added',\n );\n break;\n }\n\n nextSteps.push('Enjoy building with Galaxy UI!');\n\n nextSteps.forEach((step, index) => {\n console.log(chalk.gray(` ${index + 1}. ${step}`));\n });\n\n console.log('');\n }\n}\n"],"names":["prompts","chalk","ora","resolve","join","loadComponentsConfig","hasComponentsConfig","hasSrcDirectory","getFrameworkComponent","getFrameworkComponentDependencies","getAllFrameworkComponents","resolveFrameworkComponentGraph","resolveFrameworkComponentName","ensureDir","detectPackageManager","formatInstallCommand","installDependencies","copyComponentFilesToDirectory","generateAngularProvidersIndex","addCommand","components","options","cwd","console","log","red","gray","cyan","componentsConfig","framework","allComponents","componentsToAdd","all","Object","keys","length","choices","categories","Map","key","component","entries","category","has","set","get","push","items","title","bold","charAt","toUpperCase","slice","value","disabled","name","description","response","type","message","hint","input","resolvedName","yellow","Set","allDependencies","allDevDependencies","results","componentKey","componentFileErrors","success","error","spinner","start","componentsAlias","aliases","destPath","replace","usesSrcDir","baseDir","fullDestPath","componentFolderPath","copyResult","componentName","componentFiles","files","componentType","sourcePlatform","targetPlatform","targetDirectory","relativeTo","overwrite","onSkippedFile","fileName","warn","errors","Error","succeed","green","path","deps","dependencies","devDependencies","fail","details","uniqueDependencies","uniqueDevDependencies","installSpinner","dev","silent","packageManager","successful","filter","r","failed","result","detail","providerSpinner","nextSteps","forEach","step","index"],"mappings":"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"}