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
@@ -0,0 +1,398 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { dirname, resolve } from 'path';
3
+ const POSTCSS_CONFIG_FILES = [
4
+ 'postcss.config.mjs',
5
+ 'postcss.config.js',
6
+ 'postcss.config.cjs'
7
+ ];
8
+ function ensureParentDirectory(filePath) {
9
+ const parentDir = dirname(filePath);
10
+ if (!existsSync(parentDir)) {
11
+ mkdirSync(parentDir, {
12
+ recursive: true
13
+ });
14
+ }
15
+ }
16
+ function findExistingPostcssConfig(cwd) {
17
+ return POSTCSS_CONFIG_FILES.find((candidate)=>existsSync(resolve(cwd, candidate)));
18
+ }
19
+ function writeIfNeeded(cwd, relativePath, content, overwriteExisting, result) {
20
+ const fullPath = resolve(cwd, relativePath);
21
+ if (existsSync(fullPath) && !overwriteExisting) {
22
+ result.skipped.push(relativePath);
23
+ return;
24
+ }
25
+ ensureParentDirectory(fullPath);
26
+ writeFileSync(fullPath, content, 'utf-8');
27
+ result.written.push(relativePath);
28
+ }
29
+ function ensureTailwindCss(cwd, cssPath, content, result) {
30
+ const fullPath = resolve(cwd, cssPath);
31
+ if (!existsSync(fullPath)) {
32
+ ensureParentDirectory(fullPath);
33
+ writeFileSync(fullPath, content, 'utf-8');
34
+ result.written.push(cssPath);
35
+ return;
36
+ }
37
+ const existingContent = readFileSync(fullPath, 'utf-8');
38
+ if (existingContent.includes('@import "tailwindcss"') || existingContent.includes("@import 'tailwindcss'") || /@tailwind\s+(base|components|utilities)/.test(existingContent)) {
39
+ result.skipped.push(cssPath);
40
+ return;
41
+ }
42
+ writeFileSync(fullPath, `${content}\n${existingContent}`.trimEnd() + '\n', 'utf-8');
43
+ result.written.push(cssPath);
44
+ }
45
+ export function getTailwindDevDependencies(mode) {
46
+ if (mode === 'v4') {
47
+ return [
48
+ 'tailwindcss',
49
+ '@tailwindcss/postcss'
50
+ ];
51
+ }
52
+ return [
53
+ 'tailwindcss@^3.4.0',
54
+ 'autoprefixer',
55
+ 'postcss'
56
+ ];
57
+ }
58
+ export function scaffoldTailwindFiles(options) {
59
+ const result = {
60
+ written: [],
61
+ skipped: []
62
+ };
63
+ var _options_overwriteExisting;
64
+ const overwriteExisting = (_options_overwriteExisting = options.overwriteExisting) != null ? _options_overwriteExisting : false;
65
+ const postcssConfigPath = findExistingPostcssConfig(options.cwd) || (options.mode === 'v4' ? 'postcss.config.mjs' : 'postcss.config.js');
66
+ writeIfNeeded(options.cwd, postcssConfigPath, getPostCSSConfigContent(options.mode, options.framework), overwriteExisting, result);
67
+ if (options.mode === 'v3' && options.configPath) {
68
+ writeIfNeeded(options.cwd, options.configPath, getTailwindConfigContent(options.framework), overwriteExisting, result);
69
+ }
70
+ ensureTailwindCss(options.cwd, options.cssPath, getCSSContent(options.baseColor, options.mode), result);
71
+ return result;
72
+ }
73
+ function getTailwindConfigContent(framework) {
74
+ const contentPaths = framework === 'react' || framework === 'nextjs' ? `[
75
+ "./index.html",
76
+ "./src/**/*.{js,ts,jsx,tsx}",
77
+ ]` : framework === 'vue' || framework === 'nuxtjs' ? `[
78
+ "./index.html",
79
+ "./src/**/*.{vue,js,ts,jsx,tsx}",
80
+ ]` : framework === 'angular' ? `[
81
+ "./src/**/*.{html,ts}",
82
+ "./src/components/**/*.{html,ts}",
83
+ ]` : `[
84
+ "./src/**/*.{js,ts,jsx,tsx,mdx}",
85
+ ]`;
86
+ const exportStatement = framework === 'angular' ? 'module.exports = ' : 'export default ';
87
+ return `/** @type {import('tailwindcss').Config} */
88
+ ${exportStatement}{
89
+ darkMode: ["class"],
90
+ content: ${contentPaths},
91
+ theme: {
92
+ extend: {
93
+ colors: {
94
+ border: "hsl(var(--border))",
95
+ input: "hsl(var(--input))",
96
+ ring: "hsl(var(--ring))",
97
+ background: "hsl(var(--background))",
98
+ foreground: "hsl(var(--foreground))",
99
+ primary: {
100
+ DEFAULT: "hsl(var(--primary))",
101
+ foreground: "hsl(var(--primary-foreground))",
102
+ },
103
+ secondary: {
104
+ DEFAULT: "hsl(var(--secondary))",
105
+ foreground: "hsl(var(--secondary-foreground))",
106
+ },
107
+ destructive: {
108
+ DEFAULT: "hsl(var(--destructive))",
109
+ foreground: "hsl(var(--destructive-foreground))",
110
+ },
111
+ muted: {
112
+ DEFAULT: "hsl(var(--muted))",
113
+ foreground: "hsl(var(--muted-foreground))",
114
+ },
115
+ accent: {
116
+ DEFAULT: "hsl(var(--accent))",
117
+ foreground: "hsl(var(--accent-foreground))",
118
+ },
119
+ popover: {
120
+ DEFAULT: "hsl(var(--popover))",
121
+ foreground: "hsl(var(--popover-foreground))",
122
+ },
123
+ card: {
124
+ DEFAULT: "hsl(var(--card))",
125
+ foreground: "hsl(var(--card-foreground))",
126
+ },
127
+ },
128
+ borderRadius: {
129
+ lg: "var(--radius)",
130
+ md: "calc(var(--radius) - 2px)",
131
+ sm: "calc(var(--radius) - 4px)",
132
+ },
133
+ },
134
+ },
135
+ plugins: [],
136
+ }
137
+ `;
138
+ }
139
+ function getPostCSSConfigContent(mode, framework) {
140
+ if (mode === 'v4') {
141
+ return `export default {
142
+ plugins: {
143
+ "@tailwindcss/postcss": {},
144
+ },
145
+ }
146
+ `;
147
+ }
148
+ if (framework === 'angular') {
149
+ return `module.exports = {
150
+ plugins: {
151
+ tailwindcss: {},
152
+ autoprefixer: {},
153
+ },
154
+ }
155
+ `;
156
+ }
157
+ return `export default {
158
+ plugins: {
159
+ tailwindcss: {},
160
+ autoprefixer: {},
161
+ },
162
+ }
163
+ `;
164
+ }
165
+ function getCSSContent(baseColor, mode) {
166
+ const colorVariables = {
167
+ slate: {
168
+ light: `--background: 0 0% 100%;
169
+ --foreground: 222.2 84% 4.9%;
170
+ --card: 0 0% 100%;
171
+ --card-foreground: 222.2 84% 4.9%;
172
+ --popover: 0 0% 100%;
173
+ --popover-foreground: 222.2 84% 4.9%;
174
+ --primary: 222.2 47.4% 11.2%;
175
+ --primary-foreground: 210 40% 98%;
176
+ --secondary: 210 40% 96.1%;
177
+ --secondary-foreground: 222.2 47.4% 11.2%;
178
+ --muted: 210 40% 96.1%;
179
+ --muted-foreground: 215.4 16.3% 46.9%;
180
+ --accent: 210 40% 96.1%;
181
+ --accent-foreground: 222.2 47.4% 11.2%;
182
+ --destructive: 0 84.2% 60.2%;
183
+ --destructive-foreground: 210 40% 98%;
184
+ --border: 214.3 31.8% 91.4%;
185
+ --input: 214.3 31.8% 91.4%;
186
+ --ring: 222.2 84% 4.9%;
187
+ --radius: 0.5rem;`,
188
+ dark: `--background: 222.2 84% 4.9%;
189
+ --foreground: 210 40% 98%;
190
+ --card: 222.2 84% 4.9%;
191
+ --card-foreground: 210 40% 98%;
192
+ --popover: 222.2 84% 4.9%;
193
+ --popover-foreground: 210 40% 98%;
194
+ --primary: 210 40% 98%;
195
+ --primary-foreground: 222.2 47.4% 11.2%;
196
+ --secondary: 217.2 32.6% 17.5%;
197
+ --secondary-foreground: 210 40% 98%;
198
+ --muted: 217.2 32.6% 17.5%;
199
+ --muted-foreground: 215 20.2% 65.1%;
200
+ --accent: 217.2 32.6% 17.5%;
201
+ --accent-foreground: 210 40% 98%;
202
+ --destructive: 0 62.8% 30.6%;
203
+ --destructive-foreground: 210 40% 98%;
204
+ --border: 217.2 32.6% 17.5%;
205
+ --input: 217.2 32.6% 17.5%;
206
+ --ring: 212.7 26.8% 83.9%;`
207
+ },
208
+ gray: {
209
+ light: `--background: 0 0% 100%;
210
+ --foreground: 224 71.4% 4.1%;
211
+ --card: 0 0% 100%;
212
+ --card-foreground: 224 71.4% 4.1%;
213
+ --popover: 0 0% 100%;
214
+ --popover-foreground: 224 71.4% 4.1%;
215
+ --primary: 220.9 39.3% 11%;
216
+ --primary-foreground: 210 20% 98%;
217
+ --secondary: 220 14.3% 95.9%;
218
+ --secondary-foreground: 220.9 39.3% 11%;
219
+ --muted: 220 14.3% 95.9%;
220
+ --muted-foreground: 220 8.9% 46.1%;
221
+ --accent: 220 14.3% 95.9%;
222
+ --accent-foreground: 220.9 39.3% 11%;
223
+ --destructive: 0 84.2% 60.2%;
224
+ --destructive-foreground: 210 20% 98%;
225
+ --border: 220 13% 91%;
226
+ --input: 220 13% 91%;
227
+ --ring: 224 71.4% 4.1%;
228
+ --radius: 0.5rem;`,
229
+ dark: `--background: 224 71.4% 4.1%;
230
+ --foreground: 210 20% 98%;
231
+ --card: 224 71.4% 4.1%;
232
+ --card-foreground: 210 20% 98%;
233
+ --popover: 224 71.4% 4.1%;
234
+ --popover-foreground: 210 20% 98%;
235
+ --primary: 210 20% 98%;
236
+ --primary-foreground: 220.9 39.3% 11%;
237
+ --secondary: 215 27.9% 16.9%;
238
+ --secondary-foreground: 210 20% 98%;
239
+ --muted: 215 27.9% 16.9%;
240
+ --muted-foreground: 217.9 10.6% 64.9%;
241
+ --accent: 215 27.9% 16.9%;
242
+ --accent-foreground: 210 20% 98%;
243
+ --destructive: 0 62.8% 30.6%;
244
+ --destructive-foreground: 210 20% 98%;
245
+ --border: 215 27.9% 16.9%;
246
+ --input: 215 27.9% 16.9%;
247
+ --ring: 216 12.2% 83.9%;`
248
+ },
249
+ zinc: {
250
+ light: `--background: 0 0% 100%;
251
+ --foreground: 240 10% 3.9%;
252
+ --card: 0 0% 100%;
253
+ --card-foreground: 240 10% 3.9%;
254
+ --popover: 0 0% 100%;
255
+ --popover-foreground: 240 10% 3.9%;
256
+ --primary: 240 5.9% 10%;
257
+ --primary-foreground: 0 0% 98%;
258
+ --secondary: 240 4.8% 95.9%;
259
+ --secondary-foreground: 240 5.9% 10%;
260
+ --muted: 240 4.8% 95.9%;
261
+ --muted-foreground: 240 3.8% 46.1%;
262
+ --accent: 240 4.8% 95.9%;
263
+ --accent-foreground: 240 5.9% 10%;
264
+ --destructive: 0 84.2% 60.2%;
265
+ --destructive-foreground: 0 0% 98%;
266
+ --border: 240 5.9% 90%;
267
+ --input: 240 5.9% 90%;
268
+ --ring: 240 10% 3.9%;
269
+ --radius: 0.5rem;`,
270
+ dark: `--background: 240 10% 3.9%;
271
+ --foreground: 0 0% 98%;
272
+ --card: 240 10% 3.9%;
273
+ --card-foreground: 0 0% 98%;
274
+ --popover: 240 10% 3.9%;
275
+ --popover-foreground: 0 0% 98%;
276
+ --primary: 0 0% 98%;
277
+ --primary-foreground: 240 5.9% 10%;
278
+ --secondary: 240 3.7% 15.9%;
279
+ --secondary-foreground: 0 0% 98%;
280
+ --muted: 240 3.7% 15.9%;
281
+ --muted-foreground: 240 5% 64.9%;
282
+ --accent: 240 3.7% 15.9%;
283
+ --accent-foreground: 0 0% 98%;
284
+ --destructive: 0 62.8% 30.6%;
285
+ --destructive-foreground: 0 0% 98%;
286
+ --border: 240 3.7% 15.9%;
287
+ --input: 240 3.7% 15.9%;
288
+ --ring: 240 4.9% 83.9%;`
289
+ },
290
+ neutral: {
291
+ light: `--background: 0 0% 100%;
292
+ --foreground: 0 0% 3.9%;
293
+ --card: 0 0% 100%;
294
+ --card-foreground: 0 0% 3.9%;
295
+ --popover: 0 0% 100%;
296
+ --popover-foreground: 0 0% 3.9%;
297
+ --primary: 0 0% 9%;
298
+ --primary-foreground: 0 0% 98%;
299
+ --secondary: 0 0% 96.1%;
300
+ --secondary-foreground: 0 0% 9%;
301
+ --muted: 0 0% 96.1%;
302
+ --muted-foreground: 0 0% 45.1%;
303
+ --accent: 0 0% 96.1%;
304
+ --accent-foreground: 0 0% 9%;
305
+ --destructive: 0 84.2% 60.2%;
306
+ --destructive-foreground: 0 0% 98%;
307
+ --border: 0 0% 89.8%;
308
+ --input: 0 0% 89.8%;
309
+ --ring: 0 0% 3.9%;
310
+ --radius: 0.5rem;`,
311
+ dark: `--background: 0 0% 3.9%;
312
+ --foreground: 0 0% 98%;
313
+ --card: 0 0% 3.9%;
314
+ --card-foreground: 0 0% 98%;
315
+ --popover: 0 0% 3.9%;
316
+ --popover-foreground: 0 0% 98%;
317
+ --primary: 0 0% 98%;
318
+ --primary-foreground: 0 0% 9%;
319
+ --secondary: 0 0% 14.9%;
320
+ --secondary-foreground: 0 0% 98%;
321
+ --muted: 0 0% 14.9%;
322
+ --muted-foreground: 0 0% 63.9%;
323
+ --accent: 0 0% 14.9%;
324
+ --accent-foreground: 0 0% 98%;
325
+ --destructive: 0 62.8% 30.6%;
326
+ --destructive-foreground: 0 0% 98%;
327
+ --border: 0 0% 14.9%;
328
+ --input: 0 0% 14.9%;
329
+ --ring: 0 0% 83.1%;`
330
+ },
331
+ stone: {
332
+ light: `--background: 0 0% 100%;
333
+ --foreground: 20 14.3% 4.1%;
334
+ --card: 0 0% 100%;
335
+ --card-foreground: 20 14.3% 4.1%;
336
+ --popover: 0 0% 100%;
337
+ --popover-foreground: 20 14.3% 4.1%;
338
+ --primary: 24 9.8% 10%;
339
+ --primary-foreground: 60 9.1% 97.8%;
340
+ --secondary: 60 4.8% 95.9%;
341
+ --secondary-foreground: 24 9.8% 10%;
342
+ --muted: 60 4.8% 95.9%;
343
+ --muted-foreground: 25 5.3% 44.7%;
344
+ --accent: 60 4.8% 95.9%;
345
+ --accent-foreground: 24 9.8% 10%;
346
+ --destructive: 0 84.2% 60.2%;
347
+ --destructive-foreground: 60 9.1% 97.8%;
348
+ --border: 20 5.9% 90%;
349
+ --input: 20 5.9% 90%;
350
+ --ring: 20 14.3% 4.1%;
351
+ --radius: 0.5rem;`,
352
+ dark: `--background: 20 14.3% 4.1%;
353
+ --foreground: 60 9.1% 97.8%;
354
+ --card: 20 14.3% 4.1%;
355
+ --card-foreground: 60 9.1% 97.8%;
356
+ --popover: 20 14.3% 4.1%;
357
+ --popover-foreground: 60 9.1% 97.8%;
358
+ --primary: 60 9.1% 97.8%;
359
+ --primary-foreground: 24 9.8% 10%;
360
+ --secondary: 12 6.5% 15.1%;
361
+ --secondary-foreground: 60 9.1% 97.8%;
362
+ --muted: 12 6.5% 15.1%;
363
+ --muted-foreground: 24 5.4% 63.9%;
364
+ --accent: 12 6.5% 15.1%;
365
+ --accent-foreground: 60 9.1% 97.8%;
366
+ --destructive: 0 62.8% 30.6%;
367
+ --destructive-foreground: 60 9.1% 97.8%;
368
+ --border: 12 6.5% 15.1%;
369
+ --input: 12 6.5% 15.1%;
370
+ --ring: 24 5.7% 82.9%;`
371
+ }
372
+ };
373
+ const colors = colorVariables[baseColor];
374
+ const tailwindEntry = mode === 'v4' ? '@import "tailwindcss";' : `@tailwind base;\n@tailwind components;\n@tailwind utilities;`;
375
+ return `${tailwindEntry}
376
+
377
+ @layer base {
378
+ :root {
379
+ ${colors.light}
380
+ }
381
+
382
+ .dark {
383
+ ${colors.dark}
384
+ }
385
+ }
386
+
387
+ @layer base {
388
+ * {
389
+ @apply border-border;
390
+ }
391
+ body {
392
+ @apply bg-background text-foreground;
393
+ }
394
+ }
395
+ `;
396
+ }
397
+
398
+ //# sourceMappingURL=tailwind-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/tailwind-scaffold.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport type { BaseColor, Framework } from './config-schema.js';\n\nexport type TailwindMode = 'v3' | 'v4';\n\nexport interface TailwindScaffoldOptions {\n cwd: string;\n framework: Framework;\n mode: TailwindMode;\n configPath?: string;\n cssPath: string;\n baseColor: BaseColor;\n overwriteExisting?: boolean;\n}\n\nexport interface TailwindScaffoldResult {\n written: string[];\n skipped: string[];\n}\n\nconst POSTCSS_CONFIG_FILES = [\n 'postcss.config.mjs',\n 'postcss.config.js',\n 'postcss.config.cjs',\n];\n\nfunction ensureParentDirectory(filePath: string): void {\n const parentDir = dirname(filePath);\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true });\n }\n}\n\nfunction findExistingPostcssConfig(cwd: string): string | undefined {\n return POSTCSS_CONFIG_FILES.find((candidate) =>\n existsSync(resolve(cwd, candidate)),\n );\n}\n\nfunction writeIfNeeded(\n cwd: string,\n relativePath: string,\n content: string,\n overwriteExisting: boolean,\n result: TailwindScaffoldResult,\n): void {\n const fullPath = resolve(cwd, relativePath);\n\n if (existsSync(fullPath) && !overwriteExisting) {\n result.skipped.push(relativePath);\n return;\n }\n\n ensureParentDirectory(fullPath);\n writeFileSync(fullPath, content, 'utf-8');\n result.written.push(relativePath);\n}\n\nfunction ensureTailwindCss(\n cwd: string,\n cssPath: string,\n content: string,\n result: TailwindScaffoldResult,\n): void {\n const fullPath = resolve(cwd, cssPath);\n\n if (!existsSync(fullPath)) {\n ensureParentDirectory(fullPath);\n writeFileSync(fullPath, content, 'utf-8');\n result.written.push(cssPath);\n return;\n }\n\n const existingContent = readFileSync(fullPath, 'utf-8');\n if (\n existingContent.includes('@import \"tailwindcss\"') ||\n existingContent.includes(\"@import 'tailwindcss'\") ||\n /@tailwind\\s+(base|components|utilities)/.test(existingContent)\n ) {\n result.skipped.push(cssPath);\n return;\n }\n\n writeFileSync(\n fullPath,\n `${content}\\n${existingContent}`.trimEnd() + '\\n',\n 'utf-8',\n );\n result.written.push(cssPath);\n}\n\nexport function getTailwindDevDependencies(mode: TailwindMode): string[] {\n if (mode === 'v4') {\n return ['tailwindcss', '@tailwindcss/postcss'];\n }\n\n return ['tailwindcss@^3.4.0', 'autoprefixer', 'postcss'];\n}\n\nexport function scaffoldTailwindFiles(\n options: TailwindScaffoldOptions,\n): TailwindScaffoldResult {\n const result: TailwindScaffoldResult = {\n written: [],\n skipped: [],\n };\n\n const overwriteExisting = options.overwriteExisting ?? false;\n const postcssConfigPath =\n findExistingPostcssConfig(options.cwd) ||\n (options.mode === 'v4' ? 'postcss.config.mjs' : 'postcss.config.js');\n\n writeIfNeeded(\n options.cwd,\n postcssConfigPath,\n getPostCSSConfigContent(options.mode, options.framework),\n overwriteExisting,\n result,\n );\n\n if (options.mode === 'v3' && options.configPath) {\n writeIfNeeded(\n options.cwd,\n options.configPath,\n getTailwindConfigContent(options.framework),\n overwriteExisting,\n result,\n );\n }\n\n ensureTailwindCss(\n options.cwd,\n options.cssPath,\n getCSSContent(options.baseColor, options.mode),\n result,\n );\n\n return result;\n}\n\nfunction getTailwindConfigContent(framework: Framework): string {\n const contentPaths =\n framework === 'react' || framework === 'nextjs'\n ? `[\n \"./index.html\",\n \"./src/**/*.{js,ts,jsx,tsx}\",\n ]`\n : framework === 'vue' || framework === 'nuxtjs'\n ? `[\n \"./index.html\",\n \"./src/**/*.{vue,js,ts,jsx,tsx}\",\n ]`\n : framework === 'angular'\n ? `[\n \"./src/**/*.{html,ts}\",\n \"./src/components/**/*.{html,ts}\",\n ]`\n : `[\n \"./src/**/*.{js,ts,jsx,tsx,mdx}\",\n ]`;\n\n const exportStatement =\n framework === 'angular' ? 'module.exports = ' : 'export default ';\n\n return `/** @type {import('tailwindcss').Config} */\n${exportStatement}{\n darkMode: [\"class\"],\n content: ${contentPaths},\n theme: {\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n },\n },\n plugins: [],\n}\n`;\n}\n\nfunction getPostCSSConfigContent(\n mode: TailwindMode,\n framework: Framework,\n): string {\n if (mode === 'v4') {\n return `export default {\n plugins: {\n \"@tailwindcss/postcss\": {},\n },\n}\n`;\n }\n\n if (framework === 'angular') {\n return `module.exports = {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n}\n`;\n }\n\n return `export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n}\n`;\n}\n\nfunction getCSSContent(baseColor: BaseColor, mode: TailwindMode): string {\n const colorVariables: Record<BaseColor, { light: string; dark: string }> = {\n slate: {\n light: `--background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n --accent: 210 40% 96.1%;\n --accent-foreground: 222.2 47.4% 11.2%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n --radius: 0.5rem;`,\n dark: `--background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;`,\n },\n gray: {\n light: `--background: 0 0% 100%;\n --foreground: 224 71.4% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 224 71.4% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 224 71.4% 4.1%;\n --primary: 220.9 39.3% 11%;\n --primary-foreground: 210 20% 98%;\n --secondary: 220 14.3% 95.9%;\n --secondary-foreground: 220.9 39.3% 11%;\n --muted: 220 14.3% 95.9%;\n --muted-foreground: 220 8.9% 46.1%;\n --accent: 220 14.3% 95.9%;\n --accent-foreground: 220.9 39.3% 11%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 20% 98%;\n --border: 220 13% 91%;\n --input: 220 13% 91%;\n --ring: 224 71.4% 4.1%;\n --radius: 0.5rem;`,\n dark: `--background: 224 71.4% 4.1%;\n --foreground: 210 20% 98%;\n --card: 224 71.4% 4.1%;\n --card-foreground: 210 20% 98%;\n --popover: 224 71.4% 4.1%;\n --popover-foreground: 210 20% 98%;\n --primary: 210 20% 98%;\n --primary-foreground: 220.9 39.3% 11%;\n --secondary: 215 27.9% 16.9%;\n --secondary-foreground: 210 20% 98%;\n --muted: 215 27.9% 16.9%;\n --muted-foreground: 217.9 10.6% 64.9%;\n --accent: 215 27.9% 16.9%;\n --accent-foreground: 210 20% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 20% 98%;\n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n --ring: 216 12.2% 83.9%;`,\n },\n zinc: {\n light: `--background: 0 0% 100%;\n --foreground: 240 10% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 240 10% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 240 10% 3.9%;\n --primary: 240 5.9% 10%;\n --primary-foreground: 0 0% 98%;\n --secondary: 240 4.8% 95.9%;\n --secondary-foreground: 240 5.9% 10%;\n --muted: 240 4.8% 95.9%;\n --muted-foreground: 240 3.8% 46.1%;\n --accent: 240 4.8% 95.9%;\n --accent-foreground: 240 5.9% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 5.9% 90%;\n --input: 240 5.9% 90%;\n --ring: 240 10% 3.9%;\n --radius: 0.5rem;`,\n dark: `--background: 240 10% 3.9%;\n --foreground: 0 0% 98%;\n --card: 240 10% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 240 10% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 240 5.9% 10%;\n --secondary: 240 3.7% 15.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 240 3.7% 15.9%;\n --muted-foreground: 240 5% 64.9%;\n --accent: 240 3.7% 15.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 240 3.7% 15.9%;\n --input: 240 3.7% 15.9%;\n --ring: 240 4.9% 83.9%;`,\n },\n neutral: {\n light: `--background: 0 0% 100%;\n --foreground: 0 0% 3.9%;\n --card: 0 0% 100%;\n --card-foreground: 0 0% 3.9%;\n --popover: 0 0% 100%;\n --popover-foreground: 0 0% 3.9%;\n --primary: 0 0% 9%;\n --primary-foreground: 0 0% 98%;\n --secondary: 0 0% 96.1%;\n --secondary-foreground: 0 0% 9%;\n --muted: 0 0% 96.1%;\n --muted-foreground: 0 0% 45.1%;\n --accent: 0 0% 96.1%;\n --accent-foreground: 0 0% 9%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 89.8%;\n --input: 0 0% 89.8%;\n --ring: 0 0% 3.9%;\n --radius: 0.5rem;`,\n dark: `--background: 0 0% 3.9%;\n --foreground: 0 0% 98%;\n --card: 0 0% 3.9%;\n --card-foreground: 0 0% 98%;\n --popover: 0 0% 3.9%;\n --popover-foreground: 0 0% 98%;\n --primary: 0 0% 98%;\n --primary-foreground: 0 0% 9%;\n --secondary: 0 0% 14.9%;\n --secondary-foreground: 0 0% 98%;\n --muted: 0 0% 14.9%;\n --muted-foreground: 0 0% 63.9%;\n --accent: 0 0% 14.9%;\n --accent-foreground: 0 0% 98%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 0 0% 98%;\n --border: 0 0% 14.9%;\n --input: 0 0% 14.9%;\n --ring: 0 0% 83.1%;`,\n },\n stone: {\n light: `--background: 0 0% 100%;\n --foreground: 20 14.3% 4.1%;\n --card: 0 0% 100%;\n --card-foreground: 20 14.3% 4.1%;\n --popover: 0 0% 100%;\n --popover-foreground: 20 14.3% 4.1%;\n --primary: 24 9.8% 10%;\n --primary-foreground: 60 9.1% 97.8%;\n --secondary: 60 4.8% 95.9%;\n --secondary-foreground: 24 9.8% 10%;\n --muted: 60 4.8% 95.9%;\n --muted-foreground: 25 5.3% 44.7%;\n --accent: 60 4.8% 95.9%;\n --accent-foreground: 24 9.8% 10%;\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 20 5.9% 90%;\n --input: 20 5.9% 90%;\n --ring: 20 14.3% 4.1%;\n --radius: 0.5rem;`,\n dark: `--background: 20 14.3% 4.1%;\n --foreground: 60 9.1% 97.8%;\n --card: 20 14.3% 4.1%;\n --card-foreground: 60 9.1% 97.8%;\n --popover: 20 14.3% 4.1%;\n --popover-foreground: 60 9.1% 97.8%;\n --primary: 60 9.1% 97.8%;\n --primary-foreground: 24 9.8% 10%;\n --secondary: 12 6.5% 15.1%;\n --secondary-foreground: 60 9.1% 97.8%;\n --muted: 12 6.5% 15.1%;\n --muted-foreground: 24 5.4% 63.9%;\n --accent: 12 6.5% 15.1%;\n --accent-foreground: 60 9.1% 97.8%;\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 60 9.1% 97.8%;\n --border: 12 6.5% 15.1%;\n --input: 12 6.5% 15.1%;\n --ring: 24 5.7% 82.9%;`,\n },\n };\n\n const colors = colorVariables[baseColor];\n const tailwindEntry =\n mode === 'v4'\n ? '@import \"tailwindcss\";'\n : `@tailwind base;\\n@tailwind components;\\n@tailwind utilities;`;\n\n return `${tailwindEntry}\n\n@layer base {\n :root {\n ${colors.light}\n }\n\n .dark {\n ${colors.dark}\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply bg-background text-foreground;\n }\n}\n`;\n}\n"],"names":["existsSync","mkdirSync","readFileSync","writeFileSync","dirname","resolve","POSTCSS_CONFIG_FILES","ensureParentDirectory","filePath","parentDir","recursive","findExistingPostcssConfig","cwd","find","candidate","writeIfNeeded","relativePath","content","overwriteExisting","result","fullPath","skipped","push","written","ensureTailwindCss","cssPath","existingContent","includes","test","trimEnd","getTailwindDevDependencies","mode","scaffoldTailwindFiles","options","postcssConfigPath","getPostCSSConfigContent","framework","configPath","getTailwindConfigContent","getCSSContent","baseColor","contentPaths","exportStatement","colorVariables","slate","light","dark","gray","zinc","neutral","stone","colors","tailwindEntry"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "galaxy-design",
3
- "version": "0.2.73",
3
+ "version": "0.2.74",
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",
@@ -61,8 +61,26 @@
61
61
  },
62
62
  "scripts": {
63
63
  "audit:registry": "node scripts/audit-registries.cjs",
64
+ "generate:components-schema": "npm run build && node scripts/generate-components-schema.mjs",
64
65
  "build": "swc src -d dist --config-file .swcrc --strip-leading-paths && cp src/registry.json dist/ && cp src/registries/registry-*.json dist/ && cp -r src/registries dist/ && cp -r src/schemas dist/ && cp -r src/templates dist/",
65
- "prepublishOnly": "npm run build"
66
+ "check:components-schema": "npm run build && node scripts/generate-components-schema.mjs --check",
67
+ "test:component-copier": "npm run build && node scripts/test-component-copier.mjs",
68
+ "test:add-command": "npm run build && node scripts/test-add-command.mjs",
69
+ "test:registry-service": "npm run build && node scripts/test-framework-registry-service.mjs",
70
+ "test:init-support": "npm run build && node scripts/test-init-support.mjs",
71
+ "test:nextjs-fixture": "npm run build && node scripts/test-nextjs-fixture.mjs",
72
+ "test:nextjs-tailwind-migrate-fixture": "npm run build && node scripts/test-nextjs-tailwind-migrate-fixture.mjs",
73
+ "test:nuxt-fixture": "npm run build && node scripts/test-nuxt-fixture.mjs",
74
+ "test:angular-fixture": "npm run build && node scripts/test-angular-fixture.mjs",
75
+ "test:angular-tailwind-migrate-fixture": "npm run build && node scripts/test-angular-tailwind-migrate-fixture.mjs",
76
+ "test:vite-react-tailwind-migrate-fixture": "npm run build && node scripts/test-vite-react-tailwind-migrate-fixture.mjs",
77
+ "test:vite-react-fixture": "npm run build && node scripts/test-vite-react-fixture.mjs",
78
+ "test:vite-vue-tailwind-migrate-fixture": "npm run build && node scripts/test-vite-vue-tailwind-migrate-fixture.mjs",
79
+ "test:vite-vue-fixture": "npm run build && node scripts/test-vite-vue-fixture.mjs",
80
+ "test:tailwind-migrate": "npm run build && node scripts/test-tailwind-migrate.mjs",
81
+ "test:tailwind-utils": "npm run build && node scripts/test-tailwind-utils.mjs",
82
+ "verify": "npm run audit:registry && npm run build && node scripts/generate-components-schema.mjs --check && node scripts/test-framework-registry-service.mjs && node scripts/test-component-copier.mjs && node scripts/test-add-command.mjs && node scripts/test-init-support.mjs && node scripts/test-nextjs-fixture.mjs && node scripts/test-nextjs-tailwind-migrate-fixture.mjs && node scripts/test-nuxt-fixture.mjs && node scripts/test-angular-fixture.mjs && node scripts/test-angular-tailwind-migrate-fixture.mjs && node scripts/test-vite-react-fixture.mjs && node scripts/test-vite-react-tailwind-migrate-fixture.mjs && node scripts/test-vite-vue-fixture.mjs && node scripts/test-vite-vue-tailwind-migrate-fixture.mjs && node scripts/test-tailwind-utils.mjs && node scripts/test-tailwind-migrate.mjs",
83
+ "prepublishOnly": "npm run verify"
66
84
  },
67
85
  "dependencies": {
68
86
  "@swc/helpers": "~0.5.11",