galaxy-design 0.2.4 → 0.2.6
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/bin.js +0 -0
- package/dist/commands/add.js +5 -1
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/init.js +11 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/registries/registry-react.json +7 -7
- package/dist/utils/detect.js +7 -0
- package/dist/utils/detect.js.map +1 -1
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
File without changes
|
package/dist/commands/add.js
CHANGED
|
@@ -4,6 +4,7 @@ import ora from 'ora';
|
|
|
4
4
|
import { resolve, join, dirname } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { loadComponentsConfig, hasComponentsConfig } from '../utils/components-config.js';
|
|
7
|
+
import { hasSrcDirectory } from '../utils/detect.js';
|
|
7
8
|
import { loadFrameworkRegistry, getFrameworkComponent, getFrameworkComponentDependencies, getAllFrameworkComponents } from '../utils/framework-registry.js';
|
|
8
9
|
import { writeFile, fileExists, ensureDir } from '../utils/files.js';
|
|
9
10
|
import { installDependencies } from '../utils/package-manager.js';
|
|
@@ -115,7 +116,10 @@ export async function addCommand(components, options) {
|
|
|
115
116
|
// Get component destination path from aliases
|
|
116
117
|
const componentsAlias = componentsConfig.aliases.components;
|
|
117
118
|
const destPath = componentsAlias.replace('@/', '');
|
|
118
|
-
|
|
119
|
+
// Detect if project uses src/ directory and adjust path
|
|
120
|
+
const usesSrcDir = hasSrcDirectory(cwd);
|
|
121
|
+
const baseDir = usesSrcDir ? 'src/' : '';
|
|
122
|
+
const fullDestPath = resolve(cwd, baseDir + destPath, 'ui');
|
|
119
123
|
ensureDir(fullDestPath);
|
|
120
124
|
// Get file extension based on framework
|
|
121
125
|
const fileExtensions = {
|
package/dist/commands/add.js.map
CHANGED
|
@@ -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 {\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';\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 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 const fullDestPath = resolve(cwd, 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 const content = await fetchFileFromGitHub(githubPath);\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 const content = await fetchFileFromGitHub(githubPath);\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 // 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 the components in your Angular module or component'));\n console.log(chalk.gray(' 2. Use them in your templates'));\n break;\n }\n\n console.log(chalk.gray(' 3. Enjoy building with Galaxy UI! 🚀\\n'));\n }\n}\n"],"names":["prompts","chalk","ora","resolve","join","dirname","fileURLToPath","loadComponentsConfig","hasComponentsConfig","loadFrameworkRegistry","getFrameworkComponent","getFrameworkComponentDependencies","getAllFrameworkComponents","writeFile","fileExists","ensureDir","installDependencies","fetchFileFromGitHub","__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","allDependencies","allDevDependencies","results","componentKey","success","error","spinner","start","componentsAlias","aliases","destPath","replace","fullDestPath","fileExtensions","vue","react","angular","flutter","ext","componentFolderPath","packageFramework","file","files","fileName","includes","split","pop","destFilePath","warn","sourceFolder","githubPath","content","capitalizedFile","capitalizedError","placeholderContent","Error","succeed","green","path","deps","dependencies","devDependencies","fail","uniqueDependencies","uniqueDevDependencies","installSpinner","dev","silent","successful","filter","r","failed","result"],"mappings":"AAAA,OAAOA,aAAa,UAAU;AAC9B,OAAOC,WAAW,QAAQ;AAC1B,OAAOC,SAAS,MAAM;AACtB,SAASC,OAAO,EAAEC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AAE9C,SAASC,aAAa,QAAQ,MAAM;AAEpC,SACEC,oBAAoB,EACpBC,mBAAmB,QAEd,gCAAgC;AACvC,SACEC,qBAAqB,EACrBC,qBAAqB,EACrBC,iCAAiC,EACjCC,yBAAyB,QACpB,iCAAiC;AACxC,SAASC,SAAS,EAAEC,UAAU,EAAYC,SAAS,QAAQ,oBAAoB;AAC/E,SAASC,mBAAmB,QAAQ,8BAA8B;AAElE,SAASC,mBAAmB,QAAgC,6BAA6B;AAEzF,MAAMC,aAAaZ,cAAc,YAAYa,GAAG;AAChD,MAAMC,YAAYf,QAAQa;AAO1B,OAAO,eAAeG,WAAWC,UAAoB,EAAEC,OAAmB;IACxE,MAAMC,MAAMD,QAAQC,GAAG;IAEvB,sDAAsD;IACtD,IAAI,CAAChB,oBAAoBgB,MAAM;QAC7BC,QAAQC,GAAG,CAACzB,MAAM0B,GAAG,CAAC;QACtBF,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC,SAAS3B,MAAM4B,IAAI,CAAC,0BAA0B5B,MAAM2B,IAAI,CAAC;QAChF;IACF;IAEA,qCAAqC;IACrC,MAAME,mBAAmBvB,qBAAqBiB;IAC9C,IAAI,CAACM,kBAAkB;QACrBL,QAAQC,GAAG,CAACzB,MAAM0B,GAAG,CAAC;QACtB;IACF;IAEA,MAAMI,YAAYD,iBAAiBC,SAAS;IAC5CN,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC,CAAC,oBAAoB,EAAE3B,MAAM4B,IAAI,CAACE,WAAW,EAAE,CAAC;IAEvE,mCAAmC;IACnC,MAAMC,WAAWvB,sBAAsBsB;IACvC,MAAME,gBAAgBrB,0BAA0BmB;IAEhD,oCAAoC;IACpC,IAAIG,kBAA4B,EAAE;IAElC,IAAIX,QAAQY,GAAG,EAAE;QACf,qBAAqB;QACrBD,kBAAkBE,OAAOC,IAAI,CAACJ;IAChC,OAAO,IAAIX,WAAWgB,MAAM,KAAK,GAAG;QAClC,mBAAmB;QACnB,MAAMC,UAAU,EAAE;QAElB,uCAAuC;QACvC,MAAMC,aAAa,IAAIC;QAEvB,KAAK,MAAM,CAACC,KAAKC,UAAU,IAAIP,OAAOQ,OAAO,CAACX,eAAgB;YAC5D,MAAMY,WAAWF,UAAUE,QAAQ,IAAI;YACvC,IAAI,CAACL,WAAWM,GAAG,CAACD,WAAW;gBAC7BL,WAAWO,GAAG,CAACF,UAAU,EAAE;YAC7B;YACAL,WAAWQ,GAAG,CAACH,UAAWI,IAAI,CAAC;gBAAEP;gBAAKC;YAAU;QAClD;QAEA,KAAK,MAAM,CAACE,UAAUK,MAAM,IAAIV,WAAY;YAC1CD,QAAQU,IAAI,CAAC;gBACXE,OAAOlD,MAAMmD,IAAI,CAACvB,IAAI,CAACgB,SAASQ,MAAM,CAAC,GAAGC,WAAW,KAAKT,SAASU,KAAK,CAAC;gBACzEC,OAAO,CAAC,SAAS,EAAEX,UAAU;gBAC7BY,UAAU;YACZ;YAEA,KAAK,MAAM,EAAEf,GAAG,EAAEC,SAAS,EAAE,IAAIO,MAAO;gBACtCX,QAAQU,IAAI,CAAC;oBACXE,OAAO,CAAC,EAAE,EAAER,UAAUe,IAAI,EAAE;oBAC5BC,aAAahB,UAAUgB,WAAW,IAAI;oBACtCH,OAAOd;gBACT;YACF;QACF;QAEA,MAAMkB,WAAW,MAAM5D,QAAQ;YAC7B6D,MAAM;YACNH,MAAM;YACNI,SAAS;YACTvB;YACAwB,MAAM;QACR;QAEA,IAAI,CAACH,SAAStC,UAAU,IAAIsC,SAAStC,UAAU,CAACgB,MAAM,KAAK,GAAG;YAC5Db,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;YACvB;QACF;QAEAM,kBAAkB0B,SAAStC,UAAU;IACvC,OAAO;QACL,2BAA2B;QAC3B,KAAK,MAAM0C,SAAS1C,WAAY;YAC9B,wCAAwC;YACxC,IAAIW,aAAa,CAAC+B,MAAM,EAAE;gBACxB9B,gBAAgBe,IAAI,CAACe;YACvB,OAAO;gBACLvC,QAAQC,GAAG,CAACzB,MAAMgE,MAAM,CAAC,CAAC,aAAa,EAAED,MAAM,sBAAsB,CAAC;YACxE;QACF;IACF;IAEA,IAAI9B,gBAAgBI,MAAM,KAAK,GAAG;QAChCb,QAAQC,GAAG,CAACzB,MAAMgE,MAAM,CAAC;QACzB;IACF;IAEA,oBAAoB;IACpB/B,kBAAkB;WAAI,IAAIgC,IAAIhC;KAAiB;IAE/CT,QAAQC,GAAG,CAACzB,MAAMmD,IAAI,CAACvB,IAAI,CAAC,CAAC,YAAY,EAAEK,gBAAgBI,MAAM,CAAC,kBAAkB,CAAC;IAErF,2BAA2B;IAC3B,MAAM6B,kBAA4B,EAAE;IACpC,MAAMC,qBAA+B,EAAE;IAEvC,qBAAqB;IACrB,MAAMC,UAA+E,EAAE;IAEvF,KAAK,MAAMC,gBAAgBpC,gBAAiB;QAC1C,MAAMS,YAAYjC,sBAAsBqB,WAAWuC;QAEnD,IAAI,CAAC3B,WAAW;YACd0B,QAAQpB,IAAI,CAAC;gBACXS,MAAMY;gBACNC,SAAS;gBACTC,OAAO;YACT;YACA;QACF;QAEA,MAAMC,UAAUvE,IAAI,CAAC,OAAO,EAAED,MAAM4B,IAAI,CAACc,UAAUe,IAAI,EAAE,GAAG,CAAC,EAAEgB,KAAK;QAEpE,IAAI;YACF,8CAA8C;YAC9C,MAAMC,kBAAkB7C,iBAAiB8C,OAAO,CAACtD,UAAU;YAC3D,MAAMuD,WAAWF,gBAAgBG,OAAO,CAAC,MAAM;YAC/C,MAAMC,eAAe5E,QAAQqB,KAAKqD,UAAU;YAC5C9D,UAAUgE;YAEV,wCAAwC;YACxC,MAAMC,iBAA4C;gBAChDC,KAAK;gBACLC,OAAO;gBACPC,SAAS;gBACT,gBAAgB;gBAChBC,SAAS;YACX;YACA,MAAMC,MAAML,cAAc,CAACjD,UAAU;YAErC,0BAA0B;YAC1B,MAAMuD,sBAAsBlF,KAAK2E,cAAcT;YAC/CvD,UAAUuE;YAEV,4DAA4D;YAC5D,6DAA6D;YAC7D,IAAIC,mBAAmBxD;YACvB,IAAIA,cAAc,UAAUwD,mBAAmB;YAC/C,IAAIxD,cAAc,UAAUwD,mBAAmB;YAE/C,mCAAmC;YACnC,KAAK,MAAMC,QAAQ7C,UAAU8C,KAAK,CAAE;gBAClC,MAAMC,WAAWF,KAAKG,QAAQ,CAAC,OAAOH,KAAKI,KAAK,CAAC,KAAKC,GAAG,KAAML;gBAC/D,MAAMM,eAAe1F,KAAKkF,qBAAqBI;gBAE/C,+BAA+B;gBAC/B,IAAI5E,WAAWgF,eAAe;oBAC5BrB,QAAQsB,IAAI,CACV,GAAG9F,MAAM4B,IAAI,CAACc,UAAUe,IAAI,EAAE,wBAAwB,EAAEgC,UAAU;oBAEpE;gBACF;gBAEA,IAAI;oBACF,iEAAiE;oBACjE,MAAMM,eAAerD,UAAUkB,IAAI,KAAK,UAAU,WAAW;oBAC7D,MAAMoC,aAAa,CAAC,SAAS,EAAEV,iBAAiB,KAAK,EAAES,aAAa,CAAC,EAAE1B,aAAa,CAAC,EAAEkB,MAAM;oBAC7F,MAAMU,UAAU,MAAMjF,oBAAoBgF;oBAC1CpF,UAAUiF,cAAcI;gBAC1B,EAAE,OAAO1B,OAAO;oBACd,iCAAiC;oBACjC,IAAI;wBACF,MAAM2B,kBAAkBX,KAAKnC,MAAM,CAAC,GAAGC,WAAW,KAAKkC,KAAKjC,KAAK,CAAC;wBAClE,MAAMyC,eAAerD,UAAUkB,IAAI,KAAK,UAAU,WAAW;wBAC7D,MAAMoC,aAAa,CAAC,SAAS,EAAEV,iBAAiB,KAAK,EAAES,aAAa,CAAC,EAAE1B,aAAa,CAAC,EAAE6B,iBAAiB;wBACxG,MAAMD,UAAU,MAAMjF,oBAAoBgF;wBAC1CpF,UAAUiF,cAAcI;oBAC1B,EAAE,OAAOE,kBAAkB;wBACzB,6CAA6C;wBAC7C,MAAMC,qBAAqB,CAAC,GAAG,EAAE1D,UAAUe,IAAI,CAAC,eAAe,EAAE3B,UAAU,kDAAkD,EAAEyC,iBAAiB8B,QAAQ9B,MAAMV,OAAO,GAAG,gBAAgB,EAAE,CAAC;wBAC3LjD,UAAUiF,cAAcO;wBACxB5B,QAAQsB,IAAI,CAAC,GAAG9F,MAAMgE,MAAM,CAAC,KAAK,iBAAiB,EAAEuB,KAAK,iCAAiC,CAAC;oBAC9F;gBACF;YACF;YAEAf,QAAQ8B,OAAO,CACb,GAAGtG,MAAMuG,KAAK,CAAC,KAAK,OAAO,EAAEvG,MAAM4B,IAAI,CAACc,UAAUe,IAAI,EAAE,IAAI,EAAEzD,MAAM2B,IAAI,CACtEiD,WAAW,SAASP,eAAe,MAClC;YAGLD,QAAQpB,IAAI,CAAC;gBACXS,MAAMf,UAAUe,IAAI;gBACpBa,SAAS;gBACTkC,MAAMnB;YACR;YAEA,uBAAuB;YACvB,MAAMoB,OAAO/F,kCAAkCoB,WAAWuC;YAC1DH,gBAAgBlB,IAAI,IAAIyD,KAAKC,YAAY;YACzCvC,mBAAmBnB,IAAI,IAAIyD,KAAKE,eAAe;QACjD,EAAE,OAAOpC,OAAO;YACdC,QAAQoC,IAAI,CAAC,CAAC,cAAc,EAAE5G,MAAM4B,IAAI,CAACc,UAAUe,IAAI,GAAG;YAC1DW,QAAQpB,IAAI,CAAC;gBACXS,MAAMf,UAAUe,IAAI;gBACpBa,SAAS;gBACTC,OAAOA,iBAAiB8B,QAAQ9B,MAAMV,OAAO,GAAG;YAClD;QACF;IACF;IAEA,uBAAuB;IACvB,MAAMgD,qBAAqB;WAAI,IAAI5C,IAAIC;KAAiB;IACxD,MAAM4C,wBAAwB;WAAI,IAAI7C,IAAIE;KAAoB;IAE9D,IAAI0C,mBAAmBxE,MAAM,GAAG,KAAKyE,sBAAsBzE,MAAM,GAAG,GAAG;QACrEb,QAAQC,GAAG,CAAC;QACZ,MAAMsF,iBAAiB9G,IAAI,8BAA8BwE,KAAK;QAE9D,IAAI;YACF,IAAIoC,mBAAmBxE,MAAM,GAAG,GAAG;gBACjC,MAAMtB,oBAAoB8F,oBAAoB;oBAAEtF;oBAAKyF,KAAK;oBAAOC,QAAQ;gBAAK;YAChF;YACA,IAAIH,sBAAsBzE,MAAM,GAAG,GAAG;gBACpC,MAAMtB,oBAAoB+F,uBAAuB;oBAAEvF;oBAAKyF,KAAK;oBAAMC,QAAQ;gBAAK;YAClF;YACAF,eAAeT,OAAO,CAAC;QACzB,EAAE,OAAO/B,OAAO;YACdwC,eAAeH,IAAI,CAAC;YACpBpF,QAAQC,GAAG,CAACzB,MAAMgE,MAAM,CAAC;YACzB,IAAI6C,mBAAmBxE,MAAM,GAAG,GAAG;gBACjCb,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC,CAAC,cAAc,EAAEkF,mBAAmB1G,IAAI,CAAC,MAAM;YACxE;YACA,IAAI2G,sBAAsBzE,MAAM,GAAG,GAAG;gBACpCb,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC,CAAC,iBAAiB,EAAEmF,sBAAsB3G,IAAI,CAAC,MAAM;YAC9E;QACF;IACF;IAEA,UAAU;IACV,MAAM+G,aAAa9C,QAAQ+C,MAAM,CAACC,CAAAA,IAAKA,EAAE9C,OAAO,EAAEjC,MAAM;IACxD,MAAMgF,SAASjD,QAAQ+C,MAAM,CAACC,CAAAA,IAAK,CAACA,EAAE9C,OAAO,EAAEjC,MAAM;IAErDb,QAAQC,GAAG,CAAC;IAEZ,IAAIyF,aAAa,GAAG;QAClB1F,QAAQC,GAAG,CACTzB,MAAMuG,KAAK,CAACpD,IAAI,CAAC,CAAC,qBAAqB,EAAE+D,WAAW,aAAa,CAAC;IAEtE;IAEA,IAAIG,SAAS,GAAG;QACd7F,QAAQC,GAAG,CAACzB,MAAM0B,GAAG,CAACyB,IAAI,CAAC,CAAC,gBAAgB,EAAEkE,OAAO,aAAa,CAAC;QACnE,KAAK,MAAMC,UAAUlD,QAAQ+C,MAAM,CAACC,CAAAA,IAAK,CAACA,EAAE9C,OAAO,EAAG;YACpD9C,QAAQC,GAAG,CAACzB,MAAM0B,GAAG,CAAC,CAAC,IAAI,EAAE4F,OAAO7D,IAAI,CAAC,EAAE,EAAE6D,OAAO/C,KAAK,EAAE;QAC7D;IACF;IAEA,aAAa;IACb,IAAI2C,aAAa,GAAG;QAClB1F,QAAQC,GAAG,CAAC,OAAOzB,MAAM2B,IAAI,CAAC;QAE9B,OAAQG;YACN,KAAK;gBACHN,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvBH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvB;YACF,KAAK;gBACHH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvBH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvB;YACF,KAAK;gBACHH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvBH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;gBACvB;QACJ;QAEAH,QAAQC,GAAG,CAACzB,MAAM2B,IAAI,CAAC;IACzB;AACF"}
|
|
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';\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 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 const content = await fetchFileFromGitHub(githubPath);\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 const content = await fetchFileFromGitHub(githubPath);\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 // 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 the components in your Angular module or component'));\n console.log(chalk.gray(' 2. Use them in your templates'));\n break;\n }\n\n console.log(chalk.gray(' 3. 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","__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","allDependencies","allDevDependencies","results","componentKey","success","error","spinner","start","componentsAlias","aliases","destPath","replace","usesSrcDir","baseDir","fullDestPath","fileExtensions","vue","react","angular","flutter","ext","componentFolderPath","packageFramework","file","files","fileName","includes","split","pop","destFilePath","warn","sourceFolder","githubPath","content","capitalizedFile","capitalizedError","placeholderContent","Error","succeed","green","path","deps","dependencies","devDependencies","fail","uniqueDependencies","uniqueDevDependencies","installSpinner","dev","silent","successful","filter","r","failed","result"],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,7 +2,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
2
2
|
import prompts from 'prompts';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import ora from 'ora';
|
|
5
|
-
import { detectFramework, detectPackageManager } from '../utils/detect.js';
|
|
5
|
+
import { detectFramework, detectPackageManager, hasSrcDirectory } from '../utils/detect.js';
|
|
6
6
|
import { createComponentsConfig, hasComponentsConfig } from '../utils/components-config.js';
|
|
7
7
|
import { getDefaultConfig } from '../utils/config-schema.js';
|
|
8
8
|
import { writeFile, ensureDir } from '../utils/files.js';
|
|
@@ -53,6 +53,11 @@ export async function initCommand(options) {
|
|
|
53
53
|
console.log(chalk.green(`✓ Using ${chalk.bold(packageManager)} package manager`));
|
|
54
54
|
// Get configuration from user (or use defaults with --yes)
|
|
55
55
|
let config = getDefaultConfig(framework);
|
|
56
|
+
// Detect if project uses src/ directory and adjust paths accordingly
|
|
57
|
+
const usesSrcDir = hasSrcDirectory(cwd);
|
|
58
|
+
if (usesSrcDir) {
|
|
59
|
+
console.log(chalk.green(`✓ Detected ${chalk.bold('src/')} directory structure`));
|
|
60
|
+
}
|
|
56
61
|
if (!options.yes) {
|
|
57
62
|
console.log(chalk.cyan('\n📝 Configuration\n'));
|
|
58
63
|
// Build prompts based on framework
|
|
@@ -206,8 +211,9 @@ export async function initCommand(options) {
|
|
|
206
211
|
// Create directories
|
|
207
212
|
const dirSpinner = ora('Creating directories...').start();
|
|
208
213
|
try {
|
|
209
|
-
const
|
|
210
|
-
const
|
|
214
|
+
const baseDir = usesSrcDir ? 'src/' : '';
|
|
215
|
+
const componentsPath = resolve(cwd, baseDir + config.aliases.components.replace('@/', ''));
|
|
216
|
+
const utilsPath = resolve(cwd, baseDir + config.aliases.utils.replace('@/', ''));
|
|
211
217
|
await ensureDir(componentsPath);
|
|
212
218
|
await ensureDir(resolve(componentsPath, 'ui'));
|
|
213
219
|
await ensureDir(utilsPath.replace('/utils', '')); // Create lib dir
|
|
@@ -220,7 +226,8 @@ export async function initCommand(options) {
|
|
|
220
226
|
// Create utils file
|
|
221
227
|
const utilsSpinner = ora('Creating utility functions...').start();
|
|
222
228
|
try {
|
|
223
|
-
const
|
|
229
|
+
const baseDir = usesSrcDir ? 'src/' : '';
|
|
230
|
+
const utilsPath = resolve(cwd, baseDir + config.aliases.utils.replace('@/', '') + '.ts');
|
|
224
231
|
const utilsContent = getUtilsContent();
|
|
225
232
|
writeFile(utilsPath, utilsContent);
|
|
226
233
|
utilsSpinner.succeed('Utility functions created');
|
|
@@ -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 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 } from '../utils/files.js';\nimport { installDependencies } from '../utils/package-manager.js';\nimport { resolve } from 'path';\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 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', 'autoprefixer', 'postcss');\n if (config.iconLibrary === 'lucide') {\n dependencies.push('lucide-vue-next');\n }\n break;\n\n case 'react':\n case 'nextjs':\n dependencies.push('@radix-ui/react-slot');\n devDependencies.push('tailwindcss', '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');\n }\n break;\n\n case 'angular':\n // Angular components use Radix NG primitives\n dependencies.push('@radix-ng/primitives');\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 componentsPath = resolve(cwd, config.aliases.components.replace('@/', ''));\n const utilsPath = resolve(cwd, 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 utilsPath = resolve(cwd, 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 // 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. Configure Tailwind CSS in ${config.tailwind.config}`));\n console.log(chalk.white(` 2. Import utilities in ${config.tailwind.css}`));\n console.log(chalk.white(` 3. 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"],"names":["prompts","chalk","ora","detectFramework","detectPackageManager","createComponentsConfig","hasComponentsConfig","getDefaultConfig","writeFile","ensureDir","installDependencies","resolve","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","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","componentsPath","aliases","components","replace","utilsPath","utils","utilsSpinner","utilsContent","getUtilsContent","configSpinner","white"],"mappings":"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"}
|
|
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 } from '../utils/files.js';\nimport { installDependencies } from '../utils/package-manager.js';\nimport { resolve } from 'path';\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', 'autoprefixer', 'postcss');\n if (config.iconLibrary === 'lucide') {\n dependencies.push('lucide-vue-next');\n }\n break;\n\n case 'react':\n case 'nextjs':\n dependencies.push('@radix-ui/react-slot');\n devDependencies.push('tailwindcss', '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');\n }\n break;\n\n case 'angular':\n // Angular components use Radix NG primitives\n dependencies.push('@radix-ng/primitives');\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 // 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. Configure Tailwind CSS in ${config.tailwind.config}`));\n console.log(chalk.white(` 2. Import utilities in ${config.tailwind.css}`));\n console.log(chalk.white(` 3. 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"],"names":["prompts","chalk","ora","detectFramework","detectPackageManager","hasSrcDirectory","createComponentsConfig","hasComponentsConfig","getDefaultConfig","writeFile","ensureDir","installDependencies","resolve","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","white"],"mappings":"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"}
|
|
@@ -96,9 +96,9 @@
|
|
|
96
96
|
"name": "Form",
|
|
97
97
|
"type": "form",
|
|
98
98
|
"description": "Building forms with React Hook Form and Zod validation",
|
|
99
|
-
"dependencies": ["react-hook-form", "@
|
|
99
|
+
"dependencies": ["react-hook-form", "@radix-ui/react-label", "@radix-ui/react-slot"],
|
|
100
100
|
"devDependencies": [],
|
|
101
|
-
"registryDependencies": ["
|
|
101
|
+
"registryDependencies": ["label"],
|
|
102
102
|
"files": ["Form.tsx", "index.ts"],
|
|
103
103
|
"category": "form"
|
|
104
104
|
},
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
"name": "Alert",
|
|
177
177
|
"type": "feedback",
|
|
178
178
|
"description": "Displays a callout for user attention",
|
|
179
|
-
"dependencies": [],
|
|
179
|
+
"dependencies": ["class-variance-authority"],
|
|
180
180
|
"devDependencies": [],
|
|
181
181
|
"registryDependencies": [],
|
|
182
182
|
"files": ["Alert.tsx", "index.ts"],
|
|
@@ -236,7 +236,7 @@
|
|
|
236
236
|
"name": "Breadcrumb",
|
|
237
237
|
"type": "navigation",
|
|
238
238
|
"description": "Displays the path to the current resource using a hierarchy of links",
|
|
239
|
-
"dependencies": [],
|
|
239
|
+
"dependencies": ["lucide-react"],
|
|
240
240
|
"devDependencies": [],
|
|
241
241
|
"registryDependencies": [],
|
|
242
242
|
"files": ["Breadcrumb.tsx", "index.ts"],
|
|
@@ -436,7 +436,7 @@
|
|
|
436
436
|
"name": "Badge",
|
|
437
437
|
"type": "feedback",
|
|
438
438
|
"description": "Displays a badge or a component that looks like a badge",
|
|
439
|
-
"dependencies": [],
|
|
439
|
+
"dependencies": ["class-variance-authority"],
|
|
440
440
|
"devDependencies": [],
|
|
441
441
|
"registryDependencies": [],
|
|
442
442
|
"files": ["Badge.tsx", "index.ts"],
|
|
@@ -446,10 +446,10 @@
|
|
|
446
446
|
"name": "Toast",
|
|
447
447
|
"type": "feedback",
|
|
448
448
|
"description": "A succinct message that is displayed temporarily",
|
|
449
|
-
"dependencies": ["
|
|
449
|
+
"dependencies": ["sonner"],
|
|
450
450
|
"devDependencies": [],
|
|
451
451
|
"registryDependencies": [],
|
|
452
|
-
"files": ["Toast.tsx", "
|
|
452
|
+
"files": ["Toast.tsx", "index.ts"],
|
|
453
453
|
"category": "feedback"
|
|
454
454
|
},
|
|
455
455
|
"kbd": {
|
package/dist/utils/detect.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
2
2
|
import { existsSync, readFileSync } from 'fs';
|
|
3
3
|
import { resolve } from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* Detect if the project uses src/ directory structure
|
|
6
|
+
* Common in Next.js, React, and some Vue projects
|
|
7
|
+
*/ export function hasSrcDirectory(cwd) {
|
|
8
|
+
const srcPath = resolve(cwd, 'src');
|
|
9
|
+
return existsSync(srcPath);
|
|
10
|
+
}
|
|
4
11
|
/**
|
|
5
12
|
* Detect the framework being used in the project
|
|
6
13
|
*/ export function detectFramework(cwd) {
|
package/dist/utils/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/detect.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { resolve } from 'path';\n\nexport type Framework = 'angular' | 'react' | 'vue' | 'react-native' | 'flutter' | 'nextjs' | 'nuxtjs' | 'unknown';\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'pub';\n\n/**\n * Detect the framework being used in the project\n */\nexport function detectFramework(cwd: string): Framework {\n // Check for Flutter first (uses pubspec.yaml instead of package.json)\n const pubspecPath = resolve(cwd, 'pubspec.yaml');\n if (existsSync(pubspecPath)) {\n return 'flutter';\n }\n\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return 'unknown';\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n // Check for React Native (must be before React check)\n if (deps['react-native']) {\n return 'react-native';\n }\n\n // Check for Next.js (must be before React check)\n if (deps['next']) {\n return 'nextjs';\n }\n\n // Check for Nuxt.js (must be before Vue check)\n if (deps['nuxt'] || deps['nuxt3']) {\n return 'nuxtjs';\n }\n\n if (deps['@angular/core']) {\n return 'angular';\n }\n if (deps['react']) {\n return 'react';\n }\n if (deps['vue']) {\n return 'vue';\n }\n\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Detect the package manager being used\n */\nexport function detectPackageManager(cwd: string): PackageManager {\n // Check for Flutter package manager\n if (existsSync(resolve(cwd, 'pubspec.yaml'))) {\n return 'pub';\n }\n\n if (existsSync(resolve(cwd, 'bun.lockb')) || existsSync(resolve(cwd, 'bun.lock'))) {\n return 'bun';\n }\n if (existsSync(resolve(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(resolve(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n return 'npm';\n}\n\n/**\n * Check if project is already initialized with Galaxy UI\n */\nexport function isGalaxyInitialized(cwd: string): boolean {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return !!(deps['lucide-angular'] && deps['clsx'] && deps['tailwind-merge']);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if Tailwind CSS is installed\n */\nexport function isTailwindInstalled(cwd: string): boolean {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return !!deps['tailwindcss'];\n } catch {\n return false;\n }\n}\n"],"names":["existsSync","readFileSync","resolve","
|
|
1
|
+
{"version":3,"sources":["../../src/utils/detect.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'fs';\nimport { resolve } from 'path';\n\nexport type Framework = 'angular' | 'react' | 'vue' | 'react-native' | 'flutter' | 'nextjs' | 'nuxtjs' | 'unknown';\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'pub';\n\n/**\n * Detect if the project uses src/ directory structure\n * Common in Next.js, React, and some Vue projects\n */\nexport function hasSrcDirectory(cwd: string): boolean {\n const srcPath = resolve(cwd, 'src');\n return existsSync(srcPath);\n}\n\n/**\n * Detect the framework being used in the project\n */\nexport function detectFramework(cwd: string): Framework {\n // Check for Flutter first (uses pubspec.yaml instead of package.json)\n const pubspecPath = resolve(cwd, 'pubspec.yaml');\n if (existsSync(pubspecPath)) {\n return 'flutter';\n }\n\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return 'unknown';\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n // Check for React Native (must be before React check)\n if (deps['react-native']) {\n return 'react-native';\n }\n\n // Check for Next.js (must be before React check)\n if (deps['next']) {\n return 'nextjs';\n }\n\n // Check for Nuxt.js (must be before Vue check)\n if (deps['nuxt'] || deps['nuxt3']) {\n return 'nuxtjs';\n }\n\n if (deps['@angular/core']) {\n return 'angular';\n }\n if (deps['react']) {\n return 'react';\n }\n if (deps['vue']) {\n return 'vue';\n }\n\n return 'unknown';\n } catch {\n return 'unknown';\n }\n}\n\n/**\n * Detect the package manager being used\n */\nexport function detectPackageManager(cwd: string): PackageManager {\n // Check for Flutter package manager\n if (existsSync(resolve(cwd, 'pubspec.yaml'))) {\n return 'pub';\n }\n\n if (existsSync(resolve(cwd, 'bun.lockb')) || existsSync(resolve(cwd, 'bun.lock'))) {\n return 'bun';\n }\n if (existsSync(resolve(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(resolve(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n return 'npm';\n}\n\n/**\n * Check if project is already initialized with Galaxy UI\n */\nexport function isGalaxyInitialized(cwd: string): boolean {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return !!(deps['lucide-angular'] && deps['clsx'] && deps['tailwind-merge']);\n } catch {\n return false;\n }\n}\n\n/**\n * Check if Tailwind CSS is installed\n */\nexport function isTailwindInstalled(cwd: string): boolean {\n const packageJsonPath = resolve(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n return !!deps['tailwindcss'];\n } catch {\n return false;\n }\n}\n"],"names":["existsSync","readFileSync","resolve","hasSrcDirectory","cwd","srcPath","detectFramework","pubspecPath","packageJsonPath","packageJson","JSON","parse","deps","dependencies","devDependencies","detectPackageManager","isGalaxyInitialized","isTailwindInstalled"],"mappings":";AAAA,SAASA,UAAU,EAAEC,YAAY,QAAQ,KAAK;AAC9C,SAASC,OAAO,QAAQ,OAAO;AAK/B;;;CAGC,GACD,OAAO,SAASC,gBAAgBC,GAAW;IACzC,MAAMC,UAAUH,QAAQE,KAAK;IAC7B,OAAOJ,WAAWK;AACpB;AAEA;;CAEC,GACD,OAAO,SAASC,gBAAgBF,GAAW;IACzC,sEAAsE;IACtE,MAAMG,cAAcL,QAAQE,KAAK;IACjC,IAAIJ,WAAWO,cAAc;QAC3B,OAAO;IACT;IAEA,MAAMC,kBAAkBN,QAAQE,KAAK;IAErC,IAAI,CAACJ,WAAWQ,kBAAkB;QAChC,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,cAAcC,KAAKC,KAAK,CAACV,aAAaO,iBAAiB;QAC7D,MAAMI,OAAO,aACRH,YAAYI,YAAY,EACxBJ,YAAYK,eAAe;QAGhC,sDAAsD;QACtD,IAAIF,IAAI,CAAC,eAAe,EAAE;YACxB,OAAO;QACT;QAEA,iDAAiD;QACjD,IAAIA,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;QACT;QAEA,+CAA+C;QAC/C,IAAIA,IAAI,CAAC,OAAO,IAAIA,IAAI,CAAC,QAAQ,EAAE;YACjC,OAAO;QACT;QAEA,IAAIA,IAAI,CAAC,gBAAgB,EAAE;YACzB,OAAO;QACT;QACA,IAAIA,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO;QACT;QACA,IAAIA,IAAI,CAAC,MAAM,EAAE;YACf,OAAO;QACT;QAEA,OAAO;IACT,EAAE,UAAM;QACN,OAAO;IACT;AACF;AAEA;;CAEC,GACD,OAAO,SAASG,qBAAqBX,GAAW;IAC9C,oCAAoC;IACpC,IAAIJ,WAAWE,QAAQE,KAAK,kBAAkB;QAC5C,OAAO;IACT;IAEA,IAAIJ,WAAWE,QAAQE,KAAK,iBAAiBJ,WAAWE,QAAQE,KAAK,cAAc;QACjF,OAAO;IACT;IACA,IAAIJ,WAAWE,QAAQE,KAAK,oBAAoB;QAC9C,OAAO;IACT;IACA,IAAIJ,WAAWE,QAAQE,KAAK,eAAe;QACzC,OAAO;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASY,oBAAoBZ,GAAW;IAC7C,MAAMI,kBAAkBN,QAAQE,KAAK;IAErC,IAAI,CAACJ,WAAWQ,kBAAkB;QAChC,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,cAAcC,KAAKC,KAAK,CAACV,aAAaO,iBAAiB;QAC7D,MAAMI,OAAO,aACRH,YAAYI,YAAY,EACxBJ,YAAYK,eAAe;QAGhC,OAAO,CAAC,CAAEF,CAAAA,IAAI,CAAC,iBAAiB,IAAIA,IAAI,CAAC,OAAO,IAAIA,IAAI,CAAC,iBAAiB,AAAD;IAC3E,EAAE,UAAM;QACN,OAAO;IACT;AACF;AAEA;;CAEC,GACD,OAAO,SAASK,oBAAoBb,GAAW;IAC7C,MAAMI,kBAAkBN,QAAQE,KAAK;IAErC,IAAI,CAACJ,WAAWQ,kBAAkB;QAChC,OAAO;IACT;IAEA,IAAI;QACF,MAAMC,cAAcC,KAAKC,KAAK,CAACV,aAAaO,iBAAiB;QAC7D,MAAMI,OAAO,aACRH,YAAYI,YAAY,EACxBJ,YAAYK,eAAe;QAGhC,OAAO,CAAC,CAACF,IAAI,CAAC,cAAc;IAC9B,EAAE,UAAM;QACN,OAAO;IACT;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "galaxy-design",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "CLI tool for adding Galaxy UI components to your Vue, React, Angular, Next.js, Nuxt.js, React Native, or Flutter project",
|
|
5
5
|
"author": "Bùi Trọng Hiếu (kevinbui) <kevinbui210191@gmail.com>",
|
|
6
6
|
"license": "MIT",
|