xertica-ui 1.1.0 → 1.2.1

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/cli.js CHANGED
@@ -9,6 +9,498 @@ import fs from "fs-extra";
9
9
  import path from "path";
10
10
  import { fileURLToPath } from "url";
11
11
  import { execa } from "execa";
12
+
13
+ // contexts/theme-data.ts
14
+ var colorThemes = [
15
+ {
16
+ id: "xertica-original",
17
+ name: "Xertica Original",
18
+ description: "A identidade visual cl\xE1ssica da Xertica com o gradiente original",
19
+ colors: {
20
+ primary: "#2C275B",
21
+ primaryForeground: "#FFFFFF",
22
+ primaryLight: "#5B568F",
23
+ primaryDarkMode: "#72CDFD",
24
+ primaryForegroundDark: "#09090B",
25
+ sidebarLight: "#2C275B",
26
+ // Primary Color
27
+ sidebarDark: "#1a1928",
28
+ // Original Dark BG
29
+ gradientStart: "#FDB0F2",
30
+ gradientEnd: "#72CDFD",
31
+ gradientStartDark: "#7B4A7A",
32
+ gradientEndDark: "#3A5C7D",
33
+ chart1: "#2C275B",
34
+ chart2: "#FDB0F2",
35
+ chart3: "#72CDFD",
36
+ chart4: "#5B568F",
37
+ chart5: "#4F46E5"
38
+ },
39
+ preview: {
40
+ primary: "#2C275B",
41
+ secondary: "#FDB0F2",
42
+ accent: "#72CDFD"
43
+ }
44
+ },
45
+ {
46
+ id: "zinc",
47
+ name: "Zinc",
48
+ description: "Minimalista, s\xE9rio e elegante (Escala de Cinza)",
49
+ colors: {
50
+ primary: "#18181B",
51
+ primaryForeground: "#FAFAFA",
52
+ primaryLight: "#E4E4E7",
53
+ primaryDarkMode: "#FAFAFA",
54
+ primaryForegroundDark: "#18181B",
55
+ sidebarLight: "#18181B",
56
+ // Primary Color
57
+ sidebarDark: "#09090B",
58
+ gradientStart: "#52525B",
59
+ gradientEnd: "#D4D4D8",
60
+ gradientStartDark: "#27272A",
61
+ gradientEndDark: "#52525B",
62
+ chart1: "#18181B",
63
+ chart2: "#52525B",
64
+ chart3: "#A1A1AA",
65
+ chart4: "#D4D4D8",
66
+ chart5: "#E4E4E7"
67
+ },
68
+ preview: {
69
+ primary: "#18181B",
70
+ secondary: "#52525B",
71
+ accent: "#E4E4E7"
72
+ }
73
+ },
74
+ {
75
+ id: "slate",
76
+ name: "Slate",
77
+ description: "Profissional com tons de azul acinzentado",
78
+ colors: {
79
+ primary: "#0F172A",
80
+ primaryForeground: "#F8FAFC",
81
+ primaryLight: "#CBD5E1",
82
+ primaryDarkMode: "#F8FAFC",
83
+ primaryForegroundDark: "#0F172A",
84
+ sidebarLight: "#0F172A",
85
+ // Primary Color
86
+ sidebarDark: "#020617",
87
+ gradientStart: "#475569",
88
+ gradientEnd: "#94A3B8",
89
+ gradientStartDark: "#1E293B",
90
+ gradientEndDark: "#475569",
91
+ chart1: "#0F172A",
92
+ chart2: "#475569",
93
+ chart3: "#94A3B8",
94
+ chart4: "#CBD5E1",
95
+ chart5: "#E2E8F0"
96
+ },
97
+ preview: {
98
+ primary: "#0F172A",
99
+ secondary: "#475569",
100
+ accent: "#94A3B8"
101
+ }
102
+ },
103
+ {
104
+ id: "blue",
105
+ name: "Blue",
106
+ description: "Confi\xE1vel e seguro, padr\xE3o corporativo",
107
+ colors: {
108
+ primary: "#2563EB",
109
+ primaryForeground: "#FFFFFF",
110
+ primaryLight: "#DBEAFE",
111
+ primaryDarkMode: "#3B82F6",
112
+ primaryForegroundDark: "#FFFFFF",
113
+ sidebarLight: "#1E3A8A",
114
+ // Blue 900 (High Contrast Sidebar)
115
+ sidebarDark: "#172554",
116
+ gradientStart: "#2563EB",
117
+ gradientEnd: "#60A5FA",
118
+ gradientStartDark: "#1D4ED8",
119
+ gradientEndDark: "#2563EB",
120
+ chart1: "#2563EB",
121
+ chart2: "#3B82F6",
122
+ chart3: "#60A5FA",
123
+ chart4: "#93C5FD",
124
+ chart5: "#BFDBFE"
125
+ },
126
+ preview: {
127
+ primary: "#2563EB",
128
+ secondary: "#60A5FA",
129
+ accent: "#DBEAFE"
130
+ }
131
+ },
132
+ {
133
+ id: "violet",
134
+ name: "Violet",
135
+ description: "Criativo e vibrante",
136
+ colors: {
137
+ primary: "#7C3AED",
138
+ primaryForeground: "#FFFFFF",
139
+ primaryLight: "#EDE9FE",
140
+ primaryDarkMode: "#8B5CF6",
141
+ primaryForegroundDark: "#FFFFFF",
142
+ sidebarLight: "#4C1D95",
143
+ // Violet 900 (High Contrast Sidebar)
144
+ sidebarDark: "#2E1065",
145
+ gradientStart: "#7C3AED",
146
+ gradientEnd: "#A78BFA",
147
+ gradientStartDark: "#5B21B6",
148
+ gradientEndDark: "#7C3AED",
149
+ chart1: "#7C3AED",
150
+ chart2: "#8B5CF6",
151
+ chart3: "#A78BFA",
152
+ chart4: "#C4B5FD",
153
+ chart5: "#DDD6FE"
154
+ },
155
+ preview: {
156
+ primary: "#7C3AED",
157
+ secondary: "#A78BFA",
158
+ accent: "#EDE9FE"
159
+ }
160
+ },
161
+ {
162
+ id: "rose",
163
+ name: "Rose",
164
+ description: "Elegante e suave",
165
+ colors: {
166
+ primary: "#BE123C",
167
+ // Rose 700 (Better text contrast for Primary)
168
+ primaryForeground: "#FFFFFF",
169
+ primaryLight: "#FFE4E6",
170
+ primaryDarkMode: "#F43F5E",
171
+ primaryForegroundDark: "#FFFFFF",
172
+ sidebarLight: "#881337",
173
+ // Rose 900 (High Contrast Sidebar)
174
+ sidebarDark: "#881337",
175
+ gradientStart: "#E11D48",
176
+ gradientEnd: "#FB7185",
177
+ gradientStartDark: "#9F1239",
178
+ gradientEndDark: "#E11D48",
179
+ chart1: "#E11D48",
180
+ chart2: "#F43F5E",
181
+ chart3: "#FB7185",
182
+ chart4: "#FDA4AF",
183
+ chart5: "#FECDD3"
184
+ },
185
+ preview: {
186
+ primary: "#BE123C",
187
+ secondary: "#FB7185",
188
+ accent: "#FFE4E6"
189
+ }
190
+ },
191
+ {
192
+ id: "emerald",
193
+ name: "Emerald",
194
+ description: "Natural e equilibrado",
195
+ colors: {
196
+ primary: "#047857",
197
+ // Emerald 700 (Better text contrast for Primary)
198
+ primaryForeground: "#FFFFFF",
199
+ primaryLight: "#D1FAE5",
200
+ primaryDarkMode: "#10B981",
201
+ primaryForegroundDark: "#FFFFFF",
202
+ sidebarLight: "#064E3B",
203
+ // Emerald 900 (High Contrast Sidebar)
204
+ sidebarDark: "#064E3B",
205
+ gradientStart: "#059669",
206
+ gradientEnd: "#34D399",
207
+ gradientStartDark: "#064E3B",
208
+ gradientEndDark: "#059669",
209
+ chart1: "#059669",
210
+ chart2: "#10B981",
211
+ chart3: "#34D399",
212
+ chart4: "#6EE7B7",
213
+ chart5: "#A7F3D0"
214
+ },
215
+ preview: {
216
+ primary: "#047857",
217
+ secondary: "#34D399",
218
+ accent: "#D1FAE5"
219
+ }
220
+ },
221
+ {
222
+ id: "amber",
223
+ name: "Amber",
224
+ description: "Quente e energ\xE9tico",
225
+ colors: {
226
+ primary: "#B45309",
227
+ // Amber 700 (Better text contrast for Primary)
228
+ primaryForeground: "#FFFFFF",
229
+ primaryLight: "#FEF3C7",
230
+ primaryDarkMode: "#F59E0B",
231
+ primaryForegroundDark: "#FFFFFF",
232
+ sidebarLight: "#78350F",
233
+ // Amber 900 (High Contrast Sidebar)
234
+ sidebarDark: "#78350F",
235
+ gradientStart: "#D97706",
236
+ gradientEnd: "#FBBF24",
237
+ gradientStartDark: "#92400E",
238
+ gradientEndDark: "#D97706",
239
+ chart1: "#D97706",
240
+ chart2: "#F59E0B",
241
+ chart3: "#FBBF24",
242
+ chart4: "#FDE68A",
243
+ chart5: "#FEF3C7"
244
+ },
245
+ preview: {
246
+ primary: "#B45309",
247
+ secondary: "#FBBF24",
248
+ accent: "#FEF3C7"
249
+ }
250
+ },
251
+ {
252
+ id: "orange",
253
+ name: "Orange",
254
+ description: "Vibrante e amig\xE1vel",
255
+ colors: {
256
+ primary: "#C2410C",
257
+ // Orange 700 (Better text contrast for Primary)
258
+ primaryForeground: "#FFFFFF",
259
+ primaryLight: "#FFEDD5",
260
+ primaryDarkMode: "#F97316",
261
+ primaryForegroundDark: "#FFFFFF",
262
+ sidebarLight: "#7C2D12",
263
+ // Orange 900 (High Contrast Sidebar)
264
+ sidebarDark: "#7C2D12",
265
+ gradientStart: "#EA580C",
266
+ gradientEnd: "#FB923C",
267
+ gradientStartDark: "#9A3412",
268
+ gradientEndDark: "#EA580C",
269
+ chart1: "#EA580C",
270
+ chart2: "#F97316",
271
+ chart3: "#FB923C",
272
+ chart4: "#FDBA74",
273
+ chart5: "#FED7AA"
274
+ },
275
+ preview: {
276
+ primary: "#C2410C",
277
+ secondary: "#FB923C",
278
+ accent: "#FFEDD5"
279
+ }
280
+ }
281
+ ];
282
+
283
+ // bin/generate-tokens.ts
284
+ var hexToRgbString = (hex) => {
285
+ hex = hex.replace(/^#/, "");
286
+ let r = 0, g = 0, b = 0;
287
+ if (hex.length === 3) {
288
+ r = parseInt(hex[0] + hex[0], 16);
289
+ g = parseInt(hex[1] + hex[1], 16);
290
+ b = parseInt(hex[2] + hex[2], 16);
291
+ } else if (hex.length === 6) {
292
+ r = parseInt(hex.substring(0, 2), 16);
293
+ g = parseInt(hex.substring(2, 4), 16);
294
+ b = parseInt(hex.substring(4, 6), 16);
295
+ }
296
+ return `${r}, ${g}, ${b}`;
297
+ };
298
+ var rgba = (hex, alpha = 1) => {
299
+ return `rgba(${hexToRgbString(hex)}, ${alpha})`;
300
+ };
301
+ var generateTokensCss = (theme) => {
302
+ const { colors } = theme;
303
+ return `/* ============================================
304
+ \u{1F3A8} TOKENS / VARIABLES (Generated by CLI)
305
+ ============================================ */
306
+
307
+ :root,
308
+ :root[data-theme="default"] {
309
+ /* Brand Tokens - Source of Truth */
310
+ --xertica-primary: ${rgba(colors.primary)};
311
+ --xertica-dark: ${rgba(colors.sidebarDark)}; /* Approximating generic dark from sidebar dark if needed, or keeping static? */
312
+
313
+ /* Semantic Colors */
314
+ --background: rgba(255, 255, 255, 1);
315
+ --foreground: rgba(9, 9, 11, 1);
316
+
317
+ --card: rgba(255, 255, 255, 1);
318
+ --card-foreground: rgba(9, 9, 11, 1);
319
+
320
+ --popover: rgba(255, 255, 255, 1);
321
+ --popover-foreground: rgba(9, 9, 11, 1);
322
+
323
+ --primary: var(--xertica-primary);
324
+ --primary-foreground: ${rgba(colors.primaryForeground)};
325
+ --primary-light: ${rgba(colors.primary, 0.15)};
326
+ --primary-light-foreground: ${rgba(colors.primary)};
327
+
328
+ --secondary: rgba(244, 244, 245, 1);
329
+ --secondary-foreground: rgba(24, 24, 27, 1);
330
+
331
+ --muted: rgba(244, 244, 245, 1);
332
+ --muted-foreground: rgba(113, 113, 122, 1);
333
+
334
+ --accent: rgba(244, 244, 245, 1);
335
+ --accent-foreground: rgba(24, 24, 27, 1);
336
+
337
+ --destructive: rgba(239, 68, 68, 1);
338
+ --destructive-foreground: rgba(250, 250, 250, 1);
339
+
340
+ --border: rgba(228, 228, 231, 1);
341
+ --input: rgba(244, 244, 245, 0.5);
342
+ --input-background: rgba(244, 244, 245, 0.5);
343
+ --ring: ${rgba(colors.primary, 0.5)}; /* Adjusted to match brand somewhat */
344
+
345
+ /* Sidebar */
346
+ --sidebar: ${rgba(colors.sidebarLight)};
347
+ --sidebar-foreground: ${colors.sidebarLight.toLowerCase() === "#ffffff" ? "rgba(15, 23, 42, 1)" : "rgba(250, 250, 250, 1)"};
348
+ --sidebar-primary: ${colors.sidebarLight.toLowerCase() === "#ffffff" ? rgba(colors.primary) : "rgba(255, 255, 255, 1)"};
349
+ --sidebar-primary-foreground: ${colors.sidebarLight.toLowerCase() === "#ffffff" ? rgba(colors.primaryForeground) : rgba(colors.primary)}; /* Actually if sidebar is dark, primary item usually white? */
350
+ /* Replicating logic from Context roughly or sticking to safe defaults */
351
+ /* Context Logic:
352
+ if !isSidebarLight:
353
+ primary: #FFFFFF
354
+ primaryFg: primary
355
+ */
356
+ --sidebar-accent: ${rgba(colors.sidebarLight.toLowerCase() === "#ffffff" ? colors.primary : "#FFFFFF", 0.1)};
357
+ --sidebar-accent-foreground: ${colors.sidebarLight.toLowerCase() === "#ffffff" ? rgba(colors.primary) : "#FFFFFF"};
358
+ --sidebar-border: rgba(255, 255, 255, 0.1);
359
+ --sidebar-ring: ${rgba(colors.primary, 0.5)};
360
+
361
+ /* Charts */
362
+ --chart-1: ${rgba(colors.chart1)};
363
+ --chart-2: ${rgba(colors.chart2)};
364
+ --chart-3: ${rgba(colors.chart3)};
365
+ --chart-4: ${rgba(colors.chart4)};
366
+ --chart-5: ${rgba(colors.chart5)};
367
+
368
+ /* Gradients */
369
+ --gradient-diagonal: linear-gradient(135deg, ${colors.gradientStart} 0%, ${colors.gradientEnd} 100%);
370
+
371
+ /* Spacing & Radius */
372
+ --radius: 6px;
373
+ --radius-button: 12px;
374
+ --radius-card: 12px;
375
+
376
+ --elevation-sm: 0px 0px 48px 0px rgba(0, 0, 0, 0.1);
377
+
378
+ /* Typography */
379
+ --font-size: 16px;
380
+ --text-h1: 2rem;
381
+ --text-h2: 1.75rem;
382
+ --text-h3: 1.5rem;
383
+ --text-h4: 1.25rem;
384
+ --text-base: 1rem;
385
+ --text-p: 0.875rem;
386
+ --text-label: 0.875rem;
387
+ --text-small: 0.875rem;
388
+ --text-xs: 0.75rem;
389
+ --text-muted: 0.875rem;
390
+ --text-stats: 2.25rem;
391
+ --text-table-head: 1.25rem;
392
+
393
+ --font-weight-regular: 400;
394
+ --font-weight-medium: 500;
395
+ --font-weight-semibold: 600;
396
+ --font-weight-bold: 700;
397
+ --font-weight-extrabold: 800;
398
+
399
+ --spacing-1: 0.25rem;
400
+ --spacing-2: 0.5rem;
401
+ --spacing-3: 0.75rem;
402
+ --spacing-4: 1rem;
403
+ --spacing-5: 1.25rem;
404
+ --spacing-6: 1.5rem;
405
+ --spacing-8: 2rem;
406
+
407
+ /* Calendar */
408
+ --cell-size: 2.5rem;
409
+ --cell-radius: var(--radius);
410
+ --calendar-caption-size: 15px;
411
+ --calendar-weekday-size: 12px;
412
+ --calendar-day-size: 14px;
413
+
414
+ /* Toast - Success */
415
+ --toast-success-bg: rgba(220, 252, 231, 1);
416
+ --toast-success-border: rgba(5, 150, 105, 1);
417
+ --toast-success-icon: rgba(5, 150, 105, 1);
418
+ /* Toast - Warning */
419
+ --toast-warning-bg: rgba(254, 243, 199, 1);
420
+ --toast-warning-border: rgba(245, 158, 11, 1);
421
+ --toast-warning-icon: rgba(245, 158, 11, 1);
422
+ /* Toast - Info */
423
+ --toast-info-bg: rgba(219, 234, 254, 1);
424
+ --toast-info-border: rgba(37, 99, 235, 1);
425
+ --toast-info-icon: rgba(37, 99, 235, 1);
426
+ /* Toast - Error */
427
+ --toast-error-bg: rgba(254, 226, 226, 1);
428
+ --toast-error-border: rgba(239, 68, 68, 1);
429
+ --toast-error-icon: rgba(239, 68, 68, 1);
430
+ }
431
+
432
+ :root[data-mode="dark"],
433
+ .dark {
434
+ /* Brand Tokens */
435
+ --xertica-primary: ${rgba(colors.primaryDarkMode)};
436
+
437
+ /* Semantic Colors */
438
+ --background: rgba(5, 5, 5, 1);
439
+ --foreground: rgba(250, 250, 250, 1);
440
+
441
+ --card: rgba(20, 20, 22, 1);
442
+ --card-foreground: rgba(250, 250, 250, 1);
443
+
444
+ --popover: rgba(20, 20, 22, 1);
445
+ --popover-foreground: rgba(250, 250, 250, 1);
446
+
447
+ --primary-foreground: ${rgba(colors.primaryForegroundDark)};
448
+ --primary-light: ${rgba(colors.primaryDarkMode, 0.15)};
449
+ --primary-light-foreground: ${rgba(colors.primaryDarkMode)};
450
+
451
+ --secondary: rgba(39, 39, 42, 1);
452
+ --secondary-foreground: rgba(250, 250, 250, 1);
453
+
454
+ --muted: rgba(39, 39, 42, 1);
455
+ --muted-foreground: rgba(161, 161, 170, 1);
456
+
457
+ --accent: rgba(39, 39, 42, 1);
458
+ --accent-foreground: rgba(250, 250, 250, 1);
459
+
460
+ --destructive: rgba(239, 68, 68, 1);
461
+ --destructive-foreground: rgba(250, 250, 250, 1);
462
+
463
+ --border: rgba(63, 63, 70, 1);
464
+ --input: rgba(39, 39, 42, 0.5);
465
+ --input-background: rgba(39, 39, 42, 0.5);
466
+ --ring: ${rgba(colors.primaryDarkMode, 0.5)};
467
+
468
+ --elevation-sm: 0px 0px 48px 0px rgba(0, 0, 0, 0.3);
469
+
470
+ /* Sidebar */
471
+ --sidebar: ${rgba(colors.sidebarDark)};
472
+ --sidebar-foreground: rgba(250, 250, 250, 1);
473
+ --sidebar-primary: rgba(255, 255, 255, 1);
474
+ --sidebar-primary-foreground: ${rgba(colors.primary)}; /* Often primary brand color on dark background */
475
+ --sidebar-accent: rgba(63, 63, 70, 1);
476
+ --sidebar-accent-foreground: rgba(250, 250, 250, 1);
477
+ --sidebar-border: rgba(65, 61, 107, 1); /* Keeping subtle border */
478
+ --sidebar-ring: ${rgba(colors.primaryDarkMode, 0.5)};
479
+
480
+ /* Gradients */
481
+ --gradient-diagonal: linear-gradient(135deg, ${colors.gradientStartDark} 0%, ${colors.gradientEndDark} 100%);
482
+
483
+ /* Toast - Success */
484
+ --toast-success-bg: rgba(6, 78, 59, 1);
485
+ --toast-success-border: rgba(34, 197, 94, 1);
486
+ --toast-success-icon: rgba(34, 197, 94, 1);
487
+ /* Toast - Warning */
488
+ --toast-warning-bg: rgba(113, 63, 18, 1);
489
+ --toast-warning-border: rgba(251, 191, 36, 1);
490
+ --toast-warning-icon: rgba(251, 191, 36, 1);
491
+ /* Toast - Info */
492
+ --toast-info-bg: rgba(30, 58, 138, 1);
493
+ --toast-info-border: rgba(96, 165, 250, 1);
494
+ --toast-info-icon: rgba(96, 165, 250, 1);
495
+ /* Toast - Error */
496
+ --toast-error-bg: rgba(127, 29, 29, 1);
497
+ --toast-error-border: rgba(248, 113, 113, 1);
498
+ --toast-error-icon: rgba(248, 113, 113, 1);
499
+ }
500
+ `;
501
+ };
502
+
503
+ // bin/cli.ts
12
504
  var __filename = fileURLToPath(import.meta.url);
13
505
  var __dirname = path.dirname(__filename);
14
506
  var program = new Command();
@@ -20,7 +512,7 @@ program.command("init").description("Initialize a new Xertica UI project").argum
20
512
  let componentChoices = [{ title: "All Components", value: "all", selected: true }];
21
513
  if (await fs.pathExists(uiComponentsDir)) {
22
514
  const files = await fs.readdir(uiComponentsDir);
23
- const components = files.filter((f) => f.endsWith(".tsx") && !f.startsWith("index")).map((f) => ({ title: f.replace(".tsx", ""), value: f }));
515
+ const components = files.filter((f) => f.endsWith(".tsx") && !f.startsWith("index")).map((f) => ({ title: f.replace(".tsx", ""), value: f, selected: true }));
24
516
  componentChoices = [
25
517
  { title: "All Components", value: "all", selected: true },
26
518
  ...components
@@ -32,7 +524,12 @@ program.command("init").description("Initialize a new Xertica UI project").argum
32
524
  type: "multiselect",
33
525
  name: "components",
34
526
  message: "Which components would you like to include?",
35
- choices: componentChoices,
527
+ choices: componentChoices.length > 1 ? componentChoices : [
528
+ { title: "All Components", value: "all", selected: true }
529
+ // Fetch components logic was above, I'll rely on existing code for that part
530
+ // and just insert my code around existing blocks in separate steps if needed.
531
+ // But replace_file_content requires me to match content.
532
+ ],
36
533
  hint: "- Space to select. Return to submit",
37
534
  min: 1
38
535
  },
@@ -46,6 +543,17 @@ program.command("init").description("Initialize a new Xertica UI project").argum
46
543
  { title: "Template Page", value: "template", selected: true }
47
544
  ]
48
545
  },
546
+ {
547
+ type: "select",
548
+ name: "theme",
549
+ message: "Select the default color theme for your project:",
550
+ choices: colorThemes.map((t) => ({
551
+ title: t.name,
552
+ description: t.description,
553
+ value: t.id
554
+ })),
555
+ initial: 0
556
+ },
49
557
  {
50
558
  type: "confirm",
51
559
  name: "install",
@@ -137,6 +645,24 @@ export default function App() {
137
645
  });
138
646
  }
139
647
  }
648
+ if (response.theme) {
649
+ const contextPath = path.join(targetDir, "contexts", "BrandColorsContext.tsx");
650
+ if (await fs.pathExists(contextPath)) {
651
+ let content = await fs.readFile(contextPath, "utf8");
652
+ content = content.replace(
653
+ /return saved \|\| 'xertica-original';/,
654
+ `return saved || '${response.theme}';`
655
+ );
656
+ await fs.writeFile(contextPath, content);
657
+ }
658
+ const tokensPath = path.join(targetDir, "styles", "xertica", "tokens.css");
659
+ const selectedTheme = colorThemes.find((t) => t.id === response.theme);
660
+ if (selectedTheme) {
661
+ await fs.ensureDir(path.dirname(tokensPath));
662
+ const newTokensCss = generateTokensCss(selectedTheme);
663
+ await fs.writeFile(tokensPath, newTokensCss);
664
+ }
665
+ }
140
666
  spinner.succeed("Project initialized successfully!");
141
667
  if (response.install) {
142
668
  const installSpinner = ora("Installing dependencies...").start();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xertica-ui",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Xertica UI - Design System completo com componentes React e Tailwind CSS",
5
5
  "type": "module",
6
6
  "bin": "./dist/cli.js",
@@ -116,4 +116,4 @@
116
116
  "typescript": "^5.7.2",
117
117
  "vite": "^6.0.5"
118
118
  }
119
- }
119
+ }