czero 0.1.0 → 0.2.5

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 (95) hide show
  1. package/README.md +209 -169
  2. package/dist/cli/index.js +4678 -28
  3. package/dist/components.css +2158 -336
  4. package/dist/react/core/component-defaults.d.ts +8 -0
  5. package/dist/react/core/component-defaults.d.ts.map +1 -0
  6. package/dist/react/core/types/config.d.ts +649 -0
  7. package/dist/react/core/types/config.d.ts.map +1 -0
  8. package/dist/react/index.cjs +12261 -18
  9. package/dist/react/index.cjs.map +1 -1
  10. package/dist/react/index.d.ts +536 -6
  11. package/dist/react/index.js +12213 -7
  12. package/dist/react/index.js.map +1 -1
  13. package/dist/react/presets/index.d.ts +45 -0
  14. package/dist/react/presets/index.d.ts.map +1 -0
  15. package/dist/react/react/components/accordion.d.ts +30 -0
  16. package/dist/react/react/components/accordion.d.ts.map +1 -0
  17. package/dist/react/react/components/alert.d.ts +7 -0
  18. package/dist/react/react/components/alert.d.ts.map +1 -0
  19. package/dist/react/react/components/aspect-ratio.d.ts +8 -0
  20. package/dist/react/react/components/aspect-ratio.d.ts.map +1 -0
  21. package/dist/react/react/components/avatar.d.ts +10 -0
  22. package/dist/react/react/components/avatar.d.ts.map +1 -0
  23. package/dist/react/react/components/breadcrumb.d.ts +28 -0
  24. package/dist/react/react/components/breadcrumb.d.ts.map +1 -0
  25. package/dist/react/react/components/button.d.ts +4 -2
  26. package/dist/react/react/components/button.d.ts.map +1 -1
  27. package/dist/react/react/components/checkbox.d.ts +9 -0
  28. package/dist/react/react/components/checkbox.d.ts.map +1 -0
  29. package/dist/react/react/components/code.d.ts +6 -0
  30. package/dist/react/react/components/code.d.ts.map +1 -0
  31. package/dist/react/react/components/container.d.ts +8 -0
  32. package/dist/react/react/components/container.d.ts.map +1 -0
  33. package/dist/react/react/components/data-table.d.ts +39 -0
  34. package/dist/react/react/components/data-table.d.ts.map +1 -0
  35. package/dist/react/react/components/dialog.d.ts +28 -0
  36. package/dist/react/react/components/dialog.d.ts.map +1 -0
  37. package/dist/react/react/components/dropdown-menu.d.ts +32 -0
  38. package/dist/react/react/components/dropdown-menu.d.ts.map +1 -0
  39. package/dist/react/react/components/grid.d.ts +8 -0
  40. package/dist/react/react/components/grid.d.ts.map +1 -0
  41. package/dist/react/react/components/input.d.ts +9 -2
  42. package/dist/react/react/components/input.d.ts.map +1 -1
  43. package/dist/react/react/components/kbd.d.ts +6 -0
  44. package/dist/react/react/components/kbd.d.ts.map +1 -0
  45. package/dist/react/react/components/label.d.ts +7 -0
  46. package/dist/react/react/components/label.d.ts.map +1 -0
  47. package/dist/react/react/components/modal.d.ts +44 -0
  48. package/dist/react/react/components/modal.d.ts.map +1 -0
  49. package/dist/react/react/components/progress.d.ts +10 -0
  50. package/dist/react/react/components/progress.d.ts.map +1 -0
  51. package/dist/react/react/components/radio-group.d.ts +15 -0
  52. package/dist/react/react/components/radio-group.d.ts.map +1 -0
  53. package/dist/react/react/components/scroll-area.d.ts +8 -0
  54. package/dist/react/react/components/scroll-area.d.ts.map +1 -0
  55. package/dist/react/react/components/search-input.d.ts +13 -0
  56. package/dist/react/react/components/search-input.d.ts.map +1 -0
  57. package/dist/react/react/components/select.d.ts +29 -0
  58. package/dist/react/react/components/select.d.ts.map +1 -0
  59. package/dist/react/react/components/separator.d.ts +8 -0
  60. package/dist/react/react/components/separator.d.ts.map +1 -0
  61. package/dist/react/react/components/skeleton.d.ts +8 -0
  62. package/dist/react/react/components/skeleton.d.ts.map +1 -0
  63. package/dist/react/react/components/spinner.d.ts +7 -0
  64. package/dist/react/react/components/spinner.d.ts.map +1 -0
  65. package/dist/react/react/components/stack.d.ts +11 -0
  66. package/dist/react/react/components/stack.d.ts.map +1 -0
  67. package/dist/react/react/components/status-badge.d.ts +11 -0
  68. package/dist/react/react/components/status-badge.d.ts.map +1 -0
  69. package/dist/react/react/components/switch.d.ts +10 -0
  70. package/dist/react/react/components/switch.d.ts.map +1 -0
  71. package/dist/react/react/components/table.d.ts +27 -0
  72. package/dist/react/react/components/table.d.ts.map +1 -0
  73. package/dist/react/react/components/tabs.d.ts +56 -0
  74. package/dist/react/react/components/tabs.d.ts.map +1 -0
  75. package/dist/react/react/components/tag.d.ts +10 -0
  76. package/dist/react/react/components/tag.d.ts.map +1 -0
  77. package/dist/react/react/components/textarea.d.ts +11 -0
  78. package/dist/react/react/components/textarea.d.ts.map +1 -0
  79. package/dist/react/react/components/toast.d.ts +28 -0
  80. package/dist/react/react/components/toast.d.ts.map +1 -0
  81. package/dist/react/react/components/tooltip.d.ts +16 -0
  82. package/dist/react/react/components/tooltip.d.ts.map +1 -0
  83. package/dist/react/react/components/visually-hidden.d.ts +7 -0
  84. package/dist/react/react/components/visually-hidden.d.ts.map +1 -0
  85. package/dist/react/react/hooks/index.d.ts +5 -0
  86. package/dist/react/react/hooks/index.d.ts.map +1 -0
  87. package/dist/react/react/hooks/use-theme.d.ts +17 -0
  88. package/dist/react/react/hooks/use-theme.d.ts.map +1 -0
  89. package/dist/react/react/index.d.ts +33 -0
  90. package/dist/react/react/index.d.ts.map +1 -1
  91. package/dist/reset.css +6 -15
  92. package/dist/styles.css +2244 -431
  93. package/package.json +93 -61
  94. package/dist/react/react/lib/cn.d.ts +0 -7
  95. package/dist/react/react/lib/cn.d.ts.map +0 -1
package/dist/cli/index.js CHANGED
@@ -4,6 +4,4657 @@
4
4
  import * as fs from "fs";
5
5
  import * as path from "path";
6
6
  import { fileURLToPath } from "url";
7
+
8
+ // src/core/component-defaults.ts
9
+ var componentDefaults = {
10
+ // ===== BUTTON =====
11
+ button: {
12
+ height: { sm: "2rem", md: "2.5rem", lg: "3rem" },
13
+ paddingX: { sm: "0.75rem", md: "1rem", lg: "1.5rem" },
14
+ gap: "0.5rem",
15
+ fontSize: { sm: "$font-sm", md: "$font-md", lg: "$font-lg" },
16
+ fontWeight: "$font-medium",
17
+ borderRadius: "$radius-md",
18
+ borderWidth: "1px",
19
+ iconSize: { sm: "2rem", md: "2.5rem", lg: "3rem" },
20
+ transition: "$transition-fast",
21
+ states: {
22
+ hover: { opacity: "0.9" },
23
+ focus: { ringWidth: "2px", ringOffset: "2px", ringColor: "$color-ring" },
24
+ disabled: { opacity: "0.5" }
25
+ },
26
+ variants: {
27
+ primary: {
28
+ bg: "$color-primary",
29
+ color: "$color-primaryFg",
30
+ borderColor: "transparent",
31
+ hover: { opacity: "0.9" }
32
+ },
33
+ secondary: {
34
+ bg: "$color-secondary",
35
+ color: "$color-secondaryFg",
36
+ borderColor: "transparent",
37
+ hover: { opacity: "0.8" }
38
+ },
39
+ outline: {
40
+ bg: "transparent",
41
+ color: "$color-fg",
42
+ borderColor: "$color-border",
43
+ hover: { bg: "$color-muted" }
44
+ },
45
+ ghost: {
46
+ bg: "transparent",
47
+ color: "$color-fg",
48
+ borderColor: "transparent",
49
+ hover: { bg: "$color-muted" }
50
+ },
51
+ danger: {
52
+ bg: "$color-danger",
53
+ color: "$color-dangerFg",
54
+ borderColor: "transparent",
55
+ hover: { opacity: "0.9" }
56
+ },
57
+ link: {
58
+ bg: "transparent",
59
+ color: "$color-primary",
60
+ borderColor: "transparent",
61
+ textDecoration: "underline"
62
+ }
63
+ },
64
+ animations: {
65
+ loading: { duration: "0.75s", timing: "linear" }
66
+ }
67
+ },
68
+ // ===== INPUT =====
69
+ input: {
70
+ height: { sm: "2rem", md: "2.5rem", lg: "3rem" },
71
+ paddingX: { sm: "0.5rem", md: "0.75rem", lg: "1rem" },
72
+ paddingY: { sm: "0", md: "0", lg: "0" },
73
+ fontSize: { sm: "$font-sm", md: "$font-md", lg: "$font-lg" },
74
+ borderRadius: "$radius-md",
75
+ borderWidth: "1px",
76
+ borderColor: "$color-border",
77
+ bg: "$color-bg",
78
+ color: "$color-fg",
79
+ placeholderColor: "$color-mutedFg",
80
+ iconSize: { sm: "0.875rem", md: "1rem", lg: "1.125rem" },
81
+ iconColor: "$color-mutedFg",
82
+ iconColorFocus: "$color-primary",
83
+ iconColorError: "$color-danger",
84
+ iconSpacing: { sm: "2rem", md: "2.5rem", lg: "3rem" },
85
+ clearHoverBg: "$color-muted",
86
+ clearHoverColor: "$color-fg",
87
+ clearBorderRadius: "$radius-sm",
88
+ clearIconSize: { sm: "0.875rem", md: "1rem", lg: "1.125rem" },
89
+ states: {
90
+ focus: {
91
+ borderColor: "$color-ring",
92
+ shadow: "0 0 0 2px hsl(var(--cz-color-ring) / 0.2)"
93
+ },
94
+ error: {
95
+ borderColor: "$color-danger",
96
+ focusShadow: "0 0 0 2px hsl(var(--cz-color-danger) / 0.2)"
97
+ },
98
+ disabled: {
99
+ opacity: "0.5",
100
+ cursor: "not-allowed",
101
+ bg: "$color-muted",
102
+ color: "$color-mutedFg"
103
+ },
104
+ readOnly: {
105
+ bg: "$color-muted",
106
+ color: "$color-mutedFg",
107
+ cursor: "default"
108
+ }
109
+ }
110
+ },
111
+ // ===== TEXTAREA =====
112
+ textarea: {
113
+ minHeight: "5rem",
114
+ paddingX: { sm: "0.5rem", md: "0.75rem", lg: "1rem" },
115
+ paddingY: { sm: "0.375rem", md: "0.5rem", lg: "0.75rem" },
116
+ fontSize: { sm: "$font-sm", md: "$font-md", lg: "$font-lg" },
117
+ borderRadius: "$radius-md",
118
+ borderWidth: "1px",
119
+ borderColor: "$color-border",
120
+ bg: "$color-bg",
121
+ color: "$color-fg",
122
+ placeholderColor: "$color-mutedFg",
123
+ states: {
124
+ focus: {
125
+ borderColor: "$color-ring",
126
+ shadow: "0 0 0 2px $color-ring / 0.2"
127
+ },
128
+ disabled: { opacity: "0.5" }
129
+ }
130
+ },
131
+ // ===== CARD =====
132
+ card: {
133
+ padding: "$spacing-lg",
134
+ borderRadius: "$radius-lg",
135
+ borderWidth: "1px",
136
+ borderColor: "$color-border",
137
+ bg: "$color-bg",
138
+ shadow: "$shadow-sm",
139
+ header: {
140
+ paddingBottom: "$spacing-md",
141
+ borderWidth: "1px",
142
+ marginBottom: "$spacing-md"
143
+ },
144
+ title: {
145
+ fontSize: "$font-lg",
146
+ fontWeight: "$font-semibold",
147
+ color: "$color-fg"
148
+ },
149
+ description: {
150
+ fontSize: "$font-sm",
151
+ color: "$color-mutedFg"
152
+ },
153
+ footer: {
154
+ paddingTop: "$spacing-md",
155
+ marginTop: "$spacing-md",
156
+ borderWidth: "1px",
157
+ gap: "0.5rem"
158
+ }
159
+ },
160
+ // ===== BADGE =====
161
+ badge: {
162
+ paddingX: { sm: "0.375rem", md: "0.5rem" },
163
+ paddingY: { sm: "0.125rem", md: "0.125rem" },
164
+ fontSize: { sm: "0.7rem", md: "$font-xs" },
165
+ fontWeight: "$font-medium",
166
+ borderRadius: "$radius-full",
167
+ variants: {
168
+ default: { bg: "$color-secondary", color: "$color-secondaryFg" },
169
+ primary: { bg: "$color-primary", color: "$color-primaryFg" },
170
+ success: { bg: "$color-success", color: "$color-successFg" },
171
+ danger: { bg: "$color-danger", color: "$color-dangerFg" },
172
+ warning: { bg: "$color-warning", color: "$color-warningFg" },
173
+ outline: { bg: "transparent", color: "$color-fg", borderColor: "$color-border" }
174
+ }
175
+ },
176
+ // ===== STATUS BADGE =====
177
+ statusBadge: {
178
+ paddingX: "0.625rem",
179
+ paddingY: "0.25rem",
180
+ fontSize: "$font-xs",
181
+ fontWeight: "$font-medium",
182
+ lineHeight: "1rem",
183
+ borderRadius: "$radius-full",
184
+ dotSize: "0.5rem",
185
+ dotGap: "0.375rem",
186
+ successBg: "$color-success / 0.12",
187
+ successText: "$color-success",
188
+ successDot: "$color-success",
189
+ dangerBg: "$color-danger / 0.12",
190
+ dangerText: "$color-danger",
191
+ dangerDot: "$color-danger",
192
+ warningBg: "$color-warning / 0.12",
193
+ warningText: "$color-warning",
194
+ warningDot: "$color-warning",
195
+ primaryBg: "$color-primary / 0.12",
196
+ primaryText: "$color-primary",
197
+ primaryDot: "$color-primary"
198
+ },
199
+ // ===== SWITCH =====
200
+ switch: {
201
+ width: { sm: "2rem", md: "2.75rem", lg: "3.5rem" },
202
+ height: { sm: "1.125rem", md: "1.5rem", lg: "1.875rem" },
203
+ thumbSize: { sm: "0.875rem", md: "1.25rem", lg: "1.625rem" },
204
+ thumbOffset: "0.125rem",
205
+ borderRadius: "$radius-full",
206
+ bgUnchecked: "$color-muted",
207
+ bgChecked: "$color-primary",
208
+ thumbBg: "$color-bg",
209
+ thumbShadow: "$shadow-sm",
210
+ transition: "$transition-fast",
211
+ states: {
212
+ focus: { ringWidth: "2px", ringOffset: "2px", ringColor: "$color-ring" },
213
+ disabled: { opacity: "0.5" }
214
+ }
215
+ },
216
+ // ===== CHECKBOX =====
217
+ checkbox: {
218
+ size: { sm: "1rem", md: "1.25rem", lg: "1.5rem" },
219
+ iconSize: { sm: "10px", md: "12px", lg: "14px" },
220
+ borderRadius: "$radius-sm",
221
+ borderWidth: "2px",
222
+ borderColor: "$color-border",
223
+ bg: "$color-bg",
224
+ checkedBg: "$color-primary",
225
+ checkedBorderColor: "$color-primary",
226
+ indicatorColor: "$color-primaryFg",
227
+ labelFontSize: "$font-sm",
228
+ labelGap: "0.5rem",
229
+ states: {
230
+ hover: { borderColor: "$color-primary" },
231
+ focus: { ringWidth: "2px", ringOffset: "2px", ringColor: "$color-ring" },
232
+ disabled: { opacity: "0.5" }
233
+ }
234
+ },
235
+ // ===== RADIO =====
236
+ radio: {
237
+ size: "1.25rem",
238
+ indicatorSize: "0.625rem",
239
+ borderWidth: "2px",
240
+ borderColor: "$color-border",
241
+ bg: "$color-bg",
242
+ checkedBorderColor: "$color-primary",
243
+ indicatorBg: "$color-primary",
244
+ labelFontSize: "$font-sm",
245
+ labelGap: "0.5rem",
246
+ states: {
247
+ hover: { borderColor: "$color-primary" },
248
+ focus: { ringWidth: "2px", ringOffset: "2px", ringColor: "$color-ring" },
249
+ disabled: { opacity: "0.5" }
250
+ }
251
+ },
252
+ // ===== SELECT =====
253
+ select: {
254
+ height: { sm: "2rem", md: "2.5rem", lg: "3rem" },
255
+ paddingX: { sm: "0.5rem", md: "0.75rem", lg: "1rem" },
256
+ fontSize: { sm: "$font-sm", md: "$font-md", lg: "$font-lg" },
257
+ borderRadius: "$radius-md",
258
+ borderWidth: "1px",
259
+ borderColor: "$color-border",
260
+ bg: "$color-bg",
261
+ color: "$color-fg",
262
+ iconSize: "12px",
263
+ states: {
264
+ focus: { ringWidth: "2px", ringColor: "$color-ring" },
265
+ disabled: { opacity: "0.5" }
266
+ },
267
+ content: {
268
+ bg: "$color-bg",
269
+ borderRadius: "$radius-md",
270
+ shadow: "$shadow-md",
271
+ padding: "0.25rem"
272
+ },
273
+ item: {
274
+ paddingX: "0.5rem",
275
+ paddingY: "0.375rem",
276
+ borderRadius: "$radius-sm",
277
+ hoverBg: "$color-muted"
278
+ }
279
+ },
280
+ // ===== LABEL =====
281
+ label: {
282
+ fontSize: "$font-sm",
283
+ fontWeight: "$font-medium",
284
+ color: "$color-fg",
285
+ requiredColor: "$color-danger"
286
+ },
287
+ // ===== ALERT =====
288
+ alert: {
289
+ paddingX: "$spacing-lg",
290
+ paddingY: "$spacing-md",
291
+ borderRadius: "$radius-md",
292
+ borderWidth: "1px",
293
+ titleFontSize: "$font-sm",
294
+ titleFontWeight: "$font-semibold",
295
+ contentFontSize: "$font-sm",
296
+ variants: {
297
+ info: { bg: "$color-primary / 0.1", borderColor: "$color-primary / 0.3", color: "$color-primary" },
298
+ success: { bg: "$color-success / 0.1", borderColor: "$color-success / 0.3", color: "$color-success" },
299
+ warning: { bg: "$color-warning / 0.1", borderColor: "$color-warning / 0.3", color: "$color-warning" },
300
+ danger: { bg: "$color-danger / 0.1", borderColor: "$color-danger / 0.3", color: "$color-danger" }
301
+ }
302
+ },
303
+ // ===== TOOLTIP =====
304
+ tooltip: {
305
+ paddingX: "0.75rem",
306
+ paddingY: "0.375rem",
307
+ fontSize: "$font-sm",
308
+ borderRadius: "$radius-md",
309
+ bg: "$color-fg",
310
+ color: "$color-bg",
311
+ shadow: "$shadow-md",
312
+ offset: "0.5rem"
313
+ },
314
+ // ===== PROGRESS =====
315
+ progress: {
316
+ height: { sm: "0.375rem", md: "0.5rem", lg: "0.75rem" },
317
+ borderRadius: "$radius-full",
318
+ bg: "$color-muted",
319
+ barColors: {
320
+ default: "$color-primary",
321
+ success: "$color-success",
322
+ warning: "$color-warning",
323
+ danger: "$color-danger"
324
+ },
325
+ transition: "$transition-normal"
326
+ },
327
+ // ===== SKELETON =====
328
+ skeleton: {
329
+ bg: "$color-muted",
330
+ borderRadius: "$radius-sm",
331
+ animationDuration: "1.5s"
332
+ },
333
+ // ===== SPINNER =====
334
+ spinner: {
335
+ size: { sm: "1rem", md: "1.5rem", lg: "2rem" },
336
+ borderWidth: { sm: "2px", md: "2px", lg: "3px" },
337
+ color: "$color-primary",
338
+ trackColor: "$color-muted",
339
+ animationDuration: "0.6s"
340
+ },
341
+ // ===== TABS =====
342
+ tabs: {
343
+ listBorderWidth: "1px",
344
+ listBorderColor: "$color-border",
345
+ listGap: "0.5rem",
346
+ triggerPaddingX: "1rem",
347
+ triggerPaddingY: "0.5rem",
348
+ triggerPaddingXSm: "0.75rem",
349
+ triggerPaddingYSm: "0.375rem",
350
+ triggerPaddingXLg: "1.25rem",
351
+ triggerPaddingYLg: "0.625rem",
352
+ triggerFontSize: "$font-sm",
353
+ triggerFontSizeSm: "$font-xs",
354
+ triggerFontSizeLg: "$font-md",
355
+ triggerFontWeight: "$font-medium",
356
+ triggerColor: "$color-mutedFg",
357
+ triggerActiveColor: "$color-primary",
358
+ triggerActiveBorderColor: "$color-primary",
359
+ triggerGap: "$spacing-sm",
360
+ triggerRadius: "$radius-sm",
361
+ triggerBorderWidth: "2px",
362
+ triggerTransition: "$transition-fast",
363
+ iconSize: "0.875rem",
364
+ countPaddingX: "0.375rem",
365
+ countMinWidth: "1.25rem",
366
+ countHeight: "1.125rem",
367
+ countFontSize: "$font-xs",
368
+ countFontWeight: "$font-semibold",
369
+ countRadius: "$radius-sm",
370
+ countBg: "$color-muted",
371
+ countColor: "$color-mutedFg",
372
+ countActiveBg: "$color-primary / 0.15",
373
+ countActiveColor: "$color-primary",
374
+ pillsListGap: "$spacing-sm",
375
+ pillsTriggerBg: "$color-bg",
376
+ pillsTriggerColor: "$color-mutedFg",
377
+ pillsTriggerBorderColor: "$color-border",
378
+ pillsTriggerHoverBg: "$color-muted / 0.35",
379
+ pillsTriggerHoverColor: "$color-primary",
380
+ pillsTriggerActiveBg: "$color-primary",
381
+ pillsTriggerActiveColor: "$color-primaryFg",
382
+ pillsTriggerActiveBorderColor: "$color-primary",
383
+ pillsTriggerRadius: "$radius-md",
384
+ enclosedListBg: "$color-muted / 0.3",
385
+ enclosedListPadding: "0.25rem",
386
+ enclosedListRadius: "$radius-md",
387
+ enclosedTriggerColor: "$color-mutedFg",
388
+ enclosedTriggerActiveBg: "$color-bg",
389
+ enclosedTriggerActiveColor: "$color-fg",
390
+ enclosedTriggerRadius: "$radius-sm",
391
+ enclosedTriggerActiveShadow: "$shadow-sm",
392
+ contentPadding: "$spacing-lg",
393
+ states: {
394
+ hover: { color: "$color-fg" },
395
+ focus: { ringWidth: "2px", ringColor: "$color-ring" }
396
+ }
397
+ },
398
+ // ===== DIALOG =====
399
+ dialog: {
400
+ overlayBg: "rgba(0, 0, 0, 0.5)",
401
+ contentBg: "$color-bg",
402
+ contentBorderRadius: "$radius-lg",
403
+ contentShadow: "$shadow-lg",
404
+ contentMaxWidth: "32rem",
405
+ contentPadding: "$spacing-lg",
406
+ closeBtnSize: "2rem",
407
+ titleFontSize: "$font-lg",
408
+ titleFontWeight: "$font-semibold",
409
+ descriptionFontSize: "$font-sm",
410
+ descriptionColor: "$color-mutedFg"
411
+ },
412
+ // ===== MODAL =====
413
+ modal: {
414
+ overlayBg: "rgba(15, 23, 42, 0.55)",
415
+ contentBg: "$color-bg",
416
+ contentBorderRadius: "$radius-lg",
417
+ contentBorderColor: "$color-border",
418
+ contentShadow: "$shadow-lg",
419
+ headerPadding: "1rem 1rem 0.75rem",
420
+ bodyPadding: "0.75rem 1rem 1rem",
421
+ footerPadding: "0.75rem 1rem",
422
+ footerGap: "$spacing-md",
423
+ closeIconSize: "2rem",
424
+ closeIconPadding: "0.5rem",
425
+ closeIconRadius: "$radius-md",
426
+ closeIconBg: "transparent",
427
+ closeIconColor: "$color-mutedFg",
428
+ closeIconHoverBg: "$color-muted",
429
+ closeIconHoverColor: "$color-primary",
430
+ closeIconTransition: "$transition-fast",
431
+ closeIconFocusRing: "none",
432
+ tabFontSize: "13px",
433
+ tabFontWeight: "$font-medium",
434
+ tabColor: "$color-mutedFg",
435
+ tabActiveColor: "$color-primary",
436
+ tabActiveBorderColor: "$color-primary"
437
+ },
438
+ // ===== DROPDOWN MENU =====
439
+ dropdownMenu: {
440
+ contentBg: "$color-bg",
441
+ contentBorderRadius: "$radius-md",
442
+ contentShadow: "$shadow-lg",
443
+ contentPadding: "0.25rem",
444
+ contentMinWidth: "8rem",
445
+ itemPaddingX: "0.5rem",
446
+ itemPaddingY: "0.375rem",
447
+ itemBorderRadius: "$radius-sm",
448
+ itemFontSize: "$font-sm",
449
+ itemHoverBg: "$color-muted",
450
+ separatorColor: "$color-border",
451
+ separatorMargin: "0.25rem"
452
+ },
453
+ // ===== ACCORDION =====
454
+ accordion: {
455
+ borderRadius: "$radius-md",
456
+ borderWidth: "1px",
457
+ borderColor: "$color-border",
458
+ itemBorderWidth: "1px",
459
+ triggerPadding: "1rem",
460
+ triggerFontWeight: "$font-medium",
461
+ triggerHoverBg: "$color-muted",
462
+ contentPadding: "1rem",
463
+ iconSize: "1rem",
464
+ states: {
465
+ focus: { ringWidth: "2px", ringColor: "$color-ring" }
466
+ }
467
+ },
468
+ // ===== TABLE =====
469
+ table: {
470
+ borderRadius: "$radius-md",
471
+ borderWidth: "1px",
472
+ borderColor: "$color-border",
473
+ headerBg: "$color-muted",
474
+ headerFontWeight: "$font-medium",
475
+ cellPaddingX: "0.75rem",
476
+ cellPaddingY: "0.5rem",
477
+ rowHoverBg: "$color-muted / 0.5",
478
+ stripedBg: "$color-muted / 0.3"
479
+ },
480
+ // ===== DATA TABLE =====
481
+ dataTable: {
482
+ containerBg: "$color-bg",
483
+ containerBorderRadius: "$radius-lg",
484
+ containerBorderColor: "$color-border",
485
+ containerShadow: "$shadow-sm",
486
+ headerCellPadding: "0.75rem 1rem",
487
+ headerFontSize: "$font-xs",
488
+ headerFontWeight: "$font-medium",
489
+ headerColor: "$color-mutedFg",
490
+ headerTextTransform: "uppercase",
491
+ headerLetterSpacing: "0.02em",
492
+ bodyCellPadding: "0.875rem 1rem",
493
+ bodyFontSize: "$font-sm",
494
+ bodyColor: "$color-fg",
495
+ rowBorderColor: "$color-border",
496
+ rowHoverBg: "$color-muted / 0.5",
497
+ stripedRowBg: "$color-muted / 0.3",
498
+ selectedRowBg: "$color-primary / 0.12",
499
+ sortIconOpacity: "0.3",
500
+ sortActiveColor: "$color-primary",
501
+ paginationPadding: "0.75rem 1rem",
502
+ paginationGap: "0.5rem",
503
+ paginationBorderColor: "$color-border",
504
+ paginationTextColor: "$color-mutedFg",
505
+ paginationTextStrongColor: "$color-fg",
506
+ paginationButtonSize: "32px",
507
+ paginationButtonRadius: "$radius-md",
508
+ paginationButtonHoverBg: "$color-muted / 0.4",
509
+ paginationButtonBorderColor: "transparent",
510
+ paginationButtonColor: "$color-fg",
511
+ paginationButtonDisabledColor: "$color-mutedFg",
512
+ emptyStateColor: "$color-mutedFg",
513
+ emptyStateTitleColor: "$color-fg",
514
+ emptyStateIconBg: "$color-muted",
515
+ emptyStateIconColor: "$color-mutedFg",
516
+ loadingShimmerBase: "$color-muted",
517
+ loadingShimmerHighlight: "$color-muted / 0.5"
518
+ },
519
+ // ===== AVATAR =====
520
+ avatar: {
521
+ size: { sm: "2rem", md: "2.5rem", lg: "3.5rem" },
522
+ fontSize: { sm: "$font-xs", md: "$font-sm", lg: "$font-md" },
523
+ borderRadius: "$radius-full",
524
+ bg: "$color-muted",
525
+ color: "$color-mutedFg"
526
+ },
527
+ // ===== SEPARATOR =====
528
+ separator: {
529
+ color: "$color-border",
530
+ thickness: "1px"
531
+ },
532
+ // ===== BREADCRUMB =====
533
+ breadcrumb: {
534
+ fontSize: "$font-sm",
535
+ color: "$color-mutedFg",
536
+ activeColor: "$color-fg",
537
+ separatorColor: "$color-mutedFg",
538
+ gap: "0.5rem"
539
+ },
540
+ // ===== CODE =====
541
+ code: {
542
+ fontSize: "$font-sm",
543
+ fontFamily: "ui-monospace, monospace",
544
+ bg: "$color-muted",
545
+ color: "$color-fg",
546
+ paddingX: "0.25rem",
547
+ paddingY: "0.125rem",
548
+ borderRadius: "$radius-sm"
549
+ },
550
+ // ===== KBD =====
551
+ kbd: {
552
+ fontSize: "$font-xs",
553
+ fontFamily: "ui-monospace, monospace",
554
+ bg: "$color-muted",
555
+ color: "$color-fg",
556
+ borderColor: "$color-border",
557
+ paddingX: "0.375rem",
558
+ paddingY: "0.125rem",
559
+ borderRadius: "$radius-sm",
560
+ shadow: "0 1px 0 1px $color-border"
561
+ },
562
+ // ===== TAG =====
563
+ tag: {
564
+ paddingX: { sm: "0.5rem", md: "0.625rem" },
565
+ paddingY: { sm: "0.125rem", md: "0.25rem" },
566
+ fontSize: { sm: "$font-xs", md: "$font-sm" },
567
+ fontWeight: "$font-medium",
568
+ borderRadius: "$radius-md",
569
+ gap: "0.25rem",
570
+ variants: {
571
+ default: { bg: "$color-secondary", color: "$color-secondaryFg" },
572
+ primary: { bg: "$color-primary", color: "$color-primaryFg" },
573
+ success: { bg: "$color-success", color: "$color-successFg" },
574
+ danger: { bg: "$color-danger", color: "$color-dangerFg" },
575
+ warning: { bg: "$color-warning", color: "$color-warningFg" },
576
+ outline: { bg: "transparent", color: "$color-fg", borderColor: "$color-border" }
577
+ }
578
+ },
579
+ // ===== TOAST =====
580
+ toast: {
581
+ padding: "1rem",
582
+ borderRadius: "$radius-md",
583
+ shadow: "$shadow-lg",
584
+ minWidth: "300px",
585
+ maxWidth: "420px",
586
+ titleFontWeight: "$font-semibold",
587
+ variants: {
588
+ default: { bg: "$color-bg", color: "$color-fg", borderColor: "$color-border" },
589
+ success: { bg: "$color-success / 0.1", color: "$color-success", borderColor: "$color-success / 0.3" },
590
+ warning: { bg: "$color-warning / 0.1", color: "$color-warning", borderColor: "$color-warning / 0.3" },
591
+ danger: { bg: "$color-danger / 0.1", color: "$color-danger", borderColor: "$color-danger / 0.3" }
592
+ }
593
+ },
594
+ // ===== SCROLL AREA =====
595
+ scrollArea: {
596
+ scrollbarWidth: "10px",
597
+ scrollbarBg: "transparent",
598
+ thumbBg: "$color-border",
599
+ thumbHoverBg: "$color-mutedFg",
600
+ thumbBorderRadius: "$radius-full"
601
+ },
602
+ // ===== CONTAINER =====
603
+ container: {
604
+ maxWidth: { sm: "640px", md: "768px", lg: "1024px", xl: "1280px", "2xl": "1536px" },
605
+ paddingX: "1rem"
606
+ },
607
+ // ===== STACK =====
608
+ stack: {
609
+ gap: { sm: "0.5rem", md: "1rem", lg: "1.5rem" }
610
+ },
611
+ // ===== GRID =====
612
+ grid: {
613
+ gap: { sm: "0.5rem", md: "1rem", lg: "1.5rem" }
614
+ }
615
+ };
616
+
617
+ // cli/utils/deep-merge.ts
618
+ function deepMerge(target, source) {
619
+ const result = { ...target };
620
+ for (const key of Object.keys(source)) {
621
+ const sourceValue = source[key];
622
+ const targetValue = target[key];
623
+ if (sourceValue === null || sourceValue === void 0) {
624
+ result[key] = sourceValue;
625
+ continue;
626
+ }
627
+ if (typeof sourceValue === "object" && !Array.isArray(sourceValue) && typeof targetValue === "object" && !Array.isArray(targetValue) && targetValue !== null) {
628
+ result[key] = deepMerge(targetValue, sourceValue);
629
+ } else {
630
+ result[key] = sourceValue;
631
+ }
632
+ }
633
+ return result;
634
+ }
635
+
636
+ // cli/token-resolver.ts
637
+ function resolveToken(value) {
638
+ if (!value) return "";
639
+ if (typeof value !== "string") {
640
+ return "";
641
+ }
642
+ if (!value.startsWith("$")) {
643
+ return value;
644
+ }
645
+ const opacityMatch = value.match(/^\$([a-zA-Z-]+)\s*\/\s*(.+)$/);
646
+ if (opacityMatch) {
647
+ const [, tokenName2, opacity] = opacityMatch;
648
+ const cssVar2 = tokenNameToCssVar(tokenName2);
649
+ if (tokenName2.startsWith("color-")) {
650
+ return `hsl(var(${cssVar2}) / ${opacity})`;
651
+ }
652
+ return `var(${cssVar2}) / ${opacity}`;
653
+ }
654
+ const tokenName = value.slice(1);
655
+ const cssVar = tokenNameToCssVar(tokenName);
656
+ if (tokenName.startsWith("color-")) {
657
+ return `hsl(var(${cssVar}))`;
658
+ }
659
+ return `var(${cssVar})`;
660
+ }
661
+ function tokenNameToCssVar(tokenName) {
662
+ if (tokenName.startsWith("font-")) {
663
+ const fontPart = tokenName.slice(5);
664
+ if (["xs", "sm", "md", "lg", "xl"].includes(fontPart)) {
665
+ return `--cz-font-size-${fontPart}`;
666
+ }
667
+ if (["normal", "medium", "semibold", "bold"].includes(fontPart)) {
668
+ return `--cz-font-weight-${fontPart}`;
669
+ }
670
+ if (["tight", "relaxed"].includes(fontPart)) {
671
+ return `--cz-font-lineHeight-${fontPart}`;
672
+ }
673
+ return `--cz-font-${fontPart}`;
674
+ }
675
+ return `--cz-${tokenName}`;
676
+ }
677
+ function toKebabCase(str) {
678
+ return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
679
+ }
680
+ function componentVarName(component, property, size) {
681
+ const componentShorthand = {
682
+ button: "btn",
683
+ dropdownMenu: "dropdown",
684
+ scrollArea: "scroll"
685
+ };
686
+ const compName = componentShorthand[component] || component;
687
+ const propName = toKebabCase(property);
688
+ if (size) {
689
+ return `--cz-${compName}-${propName}-${size}`;
690
+ }
691
+ return `--cz-${compName}-${propName}`;
692
+ }
693
+
694
+ // cli/generators/button.ts
695
+ function generateButtonCSS(config) {
696
+ let css = "";
697
+ css += "/* ===== BUTTON ===== */\n\n";
698
+ css += generateButtonVariables(config);
699
+ css += "\n";
700
+ css += generateButtonBase();
701
+ css += "\n";
702
+ css += generateButtonSizes(config);
703
+ css += "\n";
704
+ if (config.variants) {
705
+ css += generateButtonVariants(config.variants);
706
+ css += "\n";
707
+ }
708
+ css += generateButtonIcon(config);
709
+ css += "\n";
710
+ css += generateButtonLoading(config);
711
+ css += "\n";
712
+ if (config.customCSS) {
713
+ css += `/* Custom Button CSS */
714
+ ${config.customCSS}
715
+ `;
716
+ }
717
+ return css;
718
+ }
719
+ function generateButtonVariables(config) {
720
+ const vars = [];
721
+ if (config.height) {
722
+ for (const [size, value] of Object.entries(config.height)) {
723
+ vars.push(` ${componentVarName("button", "height", size)}: ${resolveToken(value)};`);
724
+ }
725
+ }
726
+ if (config.paddingX) {
727
+ for (const [size, value] of Object.entries(config.paddingX)) {
728
+ vars.push(` ${componentVarName("button", "paddingX", size)}: ${resolveToken(value)};`);
729
+ }
730
+ }
731
+ if (config.paddingY) {
732
+ for (const [size, value] of Object.entries(config.paddingY)) {
733
+ vars.push(` ${componentVarName("button", "paddingY", size)}: ${resolveToken(value)};`);
734
+ }
735
+ }
736
+ if (config.fontSize && typeof config.fontSize === "object") {
737
+ for (const [size, value] of Object.entries(config.fontSize)) {
738
+ vars.push(` ${componentVarName("button", "fontSize", size)}: ${resolveToken(value)};`);
739
+ }
740
+ }
741
+ if (config.iconSize) {
742
+ for (const [size, value] of Object.entries(config.iconSize)) {
743
+ vars.push(` ${componentVarName("button", "iconSize", size)}: ${resolveToken(value)};`);
744
+ }
745
+ }
746
+ if (config.gap) {
747
+ vars.push(` ${componentVarName("button", "gap")}: ${resolveToken(config.gap)};`);
748
+ }
749
+ if (config.fontWeight) {
750
+ vars.push(` ${componentVarName("button", "fontWeight")}: ${resolveToken(config.fontWeight)};`);
751
+ }
752
+ if (config.borderRadius) {
753
+ vars.push(` ${componentVarName("button", "borderRadius")}: ${resolveToken(config.borderRadius)};`);
754
+ }
755
+ if (config.borderWidth) {
756
+ vars.push(` ${componentVarName("button", "borderWidth")}: ${resolveToken(config.borderWidth)};`);
757
+ }
758
+ if (config.transition) {
759
+ vars.push(` ${componentVarName("button", "transition")}: ${resolveToken(config.transition)};`);
760
+ }
761
+ if (config.states?.hover?.opacity) {
762
+ vars.push(` ${componentVarName("button", "hoverOpacity")}: ${config.states.hover.opacity};`);
763
+ }
764
+ if (config.states?.focus?.ringWidth) {
765
+ vars.push(` ${componentVarName("button", "focusRingWidth")}: ${config.states.focus.ringWidth};`);
766
+ }
767
+ if (config.states?.focus?.ringOffset) {
768
+ vars.push(` ${componentVarName("button", "focusRingOffset")}: ${config.states.focus.ringOffset};`);
769
+ }
770
+ if (config.states?.focus?.ringColor) {
771
+ vars.push(` ${componentVarName("button", "focusRingColor")}: ${resolveToken(config.states.focus.ringColor)};`);
772
+ }
773
+ if (config.states?.disabled?.opacity) {
774
+ vars.push(` ${componentVarName("button", "disabledOpacity")}: ${config.states.disabled.opacity};`);
775
+ }
776
+ if (config.animations?.loading?.duration) {
777
+ vars.push(` ${componentVarName("button", "loadingDuration")}: ${config.animations.loading.duration};`);
778
+ }
779
+ if (config.animations?.loading?.timing) {
780
+ vars.push(` ${componentVarName("button", "loadingTiming")}: ${config.animations.loading.timing};`);
781
+ }
782
+ if (config.variants) {
783
+ for (const [name, variant] of Object.entries(config.variants)) {
784
+ if (variant.bg) {
785
+ vars.push(` --cz-btn-${name}-bg: ${resolveToken(variant.bg)};`);
786
+ }
787
+ if (variant.color) {
788
+ vars.push(` --cz-btn-${name}-color: ${resolveToken(variant.color)};`);
789
+ }
790
+ if (variant.border) {
791
+ vars.push(` --cz-btn-${name}-border: ${resolveToken(variant.border)};`);
792
+ }
793
+ if (variant.borderColor) {
794
+ vars.push(` --cz-btn-${name}-border-color: ${resolveToken(variant.borderColor)};`);
795
+ }
796
+ if (variant.hover?.color) {
797
+ vars.push(` --cz-btn-${name}-hover-color: ${resolveToken(variant.hover.color)};`);
798
+ }
799
+ if (variant.hover?.bg) {
800
+ vars.push(` --cz-btn-${name}-hover-bg: ${resolveToken(variant.hover.bg)};`);
801
+ }
802
+ }
803
+ }
804
+ return `:root {
805
+ ${vars.join("\n")}
806
+ }
807
+ `;
808
+ }
809
+ function generateButtonBase() {
810
+ return `.cz-btn {
811
+ display: inline-flex;
812
+ align-items: center;
813
+ justify-content: center;
814
+ gap: var(--cz-btn-gap);
815
+ border-radius: var(--cz-btn-border-radius);
816
+ font-weight: var(--cz-btn-font-weight);
817
+ transition: all var(--cz-btn-transition);
818
+ cursor: pointer;
819
+ border: none;
820
+ }
821
+
822
+ .cz-btn:focus-visible {
823
+ outline: none;
824
+ box-shadow: 0 0 0 var(--cz-btn-focus-ring-offset) hsl(var(--cz-color-bg)),
825
+ 0 0 0 calc(var(--cz-btn-focus-ring-offset) + var(--cz-btn-focus-ring-width)) var(--cz-btn-focus-ring-color);
826
+ }
827
+
828
+ .cz-btn:disabled {
829
+ pointer-events: none;
830
+ opacity: var(--cz-btn-disabled-opacity);
831
+ }
832
+ `;
833
+ }
834
+ function generateButtonSizes(config) {
835
+ const sizes = ["sm", "md", "lg"];
836
+ let css = "/* Button Sizes */\n";
837
+ const usePaddingY = config.paddingY && Object.keys(config.paddingY).length > 0;
838
+ for (const size of sizes) {
839
+ css += `.cz-btn-${size} {
840
+ `;
841
+ if (usePaddingY) {
842
+ css += ` padding: var(--cz-btn-padding-y-${size}) var(--cz-btn-padding-x-${size});
843
+ `;
844
+ } else {
845
+ css += ` height: var(--cz-btn-height-${size});
846
+ `;
847
+ css += ` padding: 0 var(--cz-btn-padding-x-${size});
848
+ `;
849
+ }
850
+ css += ` font-size: var(--cz-btn-font-size-${size});
851
+ `;
852
+ css += `}
853
+ `;
854
+ }
855
+ return css;
856
+ }
857
+ function generateButtonVariants(variants) {
858
+ let css = "/* Button Variants */\n";
859
+ for (const [name, variant] of Object.entries(variants)) {
860
+ css += `.cz-btn-${name} {
861
+ `;
862
+ css += ` background: var(--cz-btn-${name}-bg);
863
+ `;
864
+ css += ` color: var(--cz-btn-${name}-color);
865
+ `;
866
+ if (variant.border) {
867
+ css += ` border: var(--cz-btn-${name}-border);
868
+ `;
869
+ } else if (variant.borderColor && variant.borderColor !== "transparent") {
870
+ css += ` border-color: var(--cz-btn-${name}-border-color);
871
+ `;
872
+ }
873
+ if (variant.textDecoration) {
874
+ css += ` text-decoration: ${variant.textDecoration};
875
+ `;
876
+ css += ` text-underline-offset: 4px;
877
+ `;
878
+ }
879
+ css += `}
880
+ `;
881
+ if (variant.hover) {
882
+ css += `.cz-btn-${name}:hover {
883
+ `;
884
+ if (variant.hover.opacity && !variant.hover.bg) {
885
+ css += ` opacity: ${variant.hover.opacity};
886
+ `;
887
+ }
888
+ if (variant.hover.bg) {
889
+ css += ` background: var(--cz-btn-${name}-hover-bg);
890
+ `;
891
+ }
892
+ if (variant.hover.color) {
893
+ css += ` color: var(--cz-btn-${name}-hover-color);
894
+ `;
895
+ }
896
+ if (variant.textDecoration) {
897
+ css += ` text-decoration-thickness: 2px;
898
+ `;
899
+ }
900
+ css += `}
901
+ `;
902
+ }
903
+ }
904
+ return css;
905
+ }
906
+ function generateButtonIcon(config) {
907
+ return `/* Button Icon Size */
908
+ .cz-btn-icon {
909
+ padding: 0;
910
+ }
911
+ .cz-btn-icon.cz-btn-sm { width: var(--cz-btn-icon-size-sm); height: var(--cz-btn-icon-size-sm); }
912
+ .cz-btn-icon.cz-btn-md { width: var(--cz-btn-icon-size-md); height: var(--cz-btn-icon-size-md); }
913
+ .cz-btn-icon.cz-btn-lg { width: var(--cz-btn-icon-size-lg); height: var(--cz-btn-icon-size-lg); }
914
+
915
+ /* Full Width Button */
916
+ .cz-btn-full {
917
+ width: 100%;
918
+ }
919
+ `;
920
+ }
921
+ function generateButtonLoading(config) {
922
+ return `/* Button Loading State */
923
+ .cz-btn-loading { position: relative; }
924
+ .cz-btn-spinner {
925
+ width: 1rem;
926
+ height: 1rem;
927
+ animation: cz-spin var(--cz-btn-loading-duration) var(--cz-btn-loading-timing) infinite;
928
+ flex-shrink: 0;
929
+ }
930
+ .cz-btn-content { opacity: 1; }
931
+ `;
932
+ }
933
+
934
+ // cli/generators/input.ts
935
+ var isSizeMap = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
936
+ function pushSizeOrSingleVar(vars, component, key, value) {
937
+ if (!value) return;
938
+ if (typeof value === "string") {
939
+ vars.push(` ${componentVarName(component, key)}: ${resolveToken(value)};`);
940
+ return;
941
+ }
942
+ for (const [size, tokenValue] of Object.entries(value)) {
943
+ if (!tokenValue) continue;
944
+ vars.push(
945
+ ` ${componentVarName(component, key, size)}: ${resolveToken(tokenValue)};`
946
+ );
947
+ }
948
+ }
949
+ function generateInputCSS(config) {
950
+ let css = "";
951
+ css += "/* ===== INPUT ===== */\n\n";
952
+ css += generateInputVariables(config);
953
+ css += "\n";
954
+ css += generateInputBase();
955
+ css += "\n";
956
+ css += generateInputVariants(config);
957
+ css += "\n";
958
+ css += generateInputSizes();
959
+ css += "\n";
960
+ css += generateInputStates();
961
+ css += "\n";
962
+ css += generateInputIcons();
963
+ css += "\n";
964
+ css += generateInputClear();
965
+ css += "\n";
966
+ css += generateInputPasswordToggle();
967
+ css += "\n";
968
+ if (config.customCSS) {
969
+ css += `/* Custom Input CSS */
970
+ ${config.customCSS}
971
+ `;
972
+ }
973
+ return css;
974
+ }
975
+ function generateInputVariables(config) {
976
+ const vars = [];
977
+ pushSizeOrSingleVar(vars, "input", "height", config.height);
978
+ pushSizeOrSingleVar(vars, "input", "paddingX", config.paddingX);
979
+ pushSizeOrSingleVar(vars, "input", "paddingY", config.paddingY);
980
+ if (config.fontSize && isSizeMap(config.fontSize)) {
981
+ pushSizeOrSingleVar(vars, "input", "fontSize", config.fontSize);
982
+ }
983
+ if (config.borderRadius) {
984
+ vars.push(
985
+ ` ${componentVarName("input", "borderRadius")}: ${resolveToken(config.borderRadius)};`
986
+ );
987
+ }
988
+ if (config.borderWidth) {
989
+ vars.push(
990
+ ` ${componentVarName("input", "borderWidth")}: ${resolveToken(config.borderWidth)};`
991
+ );
992
+ }
993
+ if (config.borderColor) {
994
+ vars.push(
995
+ ` ${componentVarName("input", "borderColor")}: ${resolveToken(config.borderColor)};`
996
+ );
997
+ }
998
+ if (config.bg) {
999
+ vars.push(` ${componentVarName("input", "bg")}: ${resolveToken(config.bg)};`);
1000
+ }
1001
+ if (config.color) {
1002
+ vars.push(` ${componentVarName("input", "color")}: ${resolveToken(config.color)};`);
1003
+ }
1004
+ if (config.placeholderColor) {
1005
+ vars.push(
1006
+ ` ${componentVarName("input", "placeholderColor")}: ${resolveToken(config.placeholderColor)};`
1007
+ );
1008
+ }
1009
+ pushSizeOrSingleVar(vars, "input", "iconSize", config.iconSize);
1010
+ if (config.iconColor) {
1011
+ vars.push(
1012
+ ` ${componentVarName("input", "iconColor")}: ${resolveToken(config.iconColor)};`
1013
+ );
1014
+ }
1015
+ if (config.iconColorFocus) {
1016
+ vars.push(
1017
+ ` ${componentVarName("input", "iconColorFocus")}: ${resolveToken(config.iconColorFocus)};`
1018
+ );
1019
+ }
1020
+ if (config.iconColorError) {
1021
+ vars.push(
1022
+ ` ${componentVarName("input", "iconColorError")}: ${resolveToken(config.iconColorError)};`
1023
+ );
1024
+ }
1025
+ pushSizeOrSingleVar(
1026
+ vars,
1027
+ "input",
1028
+ "iconSpacing",
1029
+ config.iconSpacing
1030
+ );
1031
+ pushSizeOrSingleVar(
1032
+ vars,
1033
+ "input",
1034
+ "clearIconSize",
1035
+ config.clearIconSize
1036
+ );
1037
+ if (config.clearHoverBg) {
1038
+ vars.push(
1039
+ ` ${componentVarName("input", "clearHoverBg")}: ${resolveToken(config.clearHoverBg)};`
1040
+ );
1041
+ }
1042
+ if (config.clearHoverColor) {
1043
+ vars.push(
1044
+ ` ${componentVarName("input", "clearHoverColor")}: ${resolveToken(config.clearHoverColor)};`
1045
+ );
1046
+ }
1047
+ if (config.clearBorderRadius) {
1048
+ vars.push(
1049
+ ` ${componentVarName("input", "clearBorderRadius")}: ${resolveToken(config.clearBorderRadius)};`
1050
+ );
1051
+ }
1052
+ if (config.states?.focus?.borderColor) {
1053
+ vars.push(
1054
+ ` ${componentVarName("input", "focusBorderColor")}: ${resolveToken(config.states.focus.borderColor)};`
1055
+ );
1056
+ }
1057
+ if (config.states?.focus?.shadow) {
1058
+ vars.push(
1059
+ ` ${componentVarName("input", "focusShadow")}: ${resolveToken(config.states.focus.shadow)};`
1060
+ );
1061
+ }
1062
+ if (config.states?.error?.borderColor) {
1063
+ vars.push(
1064
+ ` ${componentVarName("input", "errorBorderColor")}: ${resolveToken(config.states.error.borderColor)};`
1065
+ );
1066
+ }
1067
+ if (config.states?.error?.focusShadow) {
1068
+ vars.push(
1069
+ ` ${componentVarName("input", "errorFocusShadow")}: ${resolveToken(config.states.error.focusShadow)};`
1070
+ );
1071
+ }
1072
+ if (config.states?.disabled?.opacity) {
1073
+ vars.push(
1074
+ ` ${componentVarName("input", "disabledOpacity")}: ${config.states.disabled.opacity};`
1075
+ );
1076
+ }
1077
+ if (config.states?.disabled?.cursor) {
1078
+ vars.push(
1079
+ ` ${componentVarName("input", "disabledCursor")}: ${config.states.disabled.cursor};`
1080
+ );
1081
+ }
1082
+ if (config.states?.disabled?.bg) {
1083
+ vars.push(
1084
+ ` ${componentVarName("input", "disabledBg")}: ${resolveToken(config.states.disabled.bg)};`
1085
+ );
1086
+ }
1087
+ if (config.states?.disabled?.color) {
1088
+ vars.push(
1089
+ ` ${componentVarName("input", "disabledColor")}: ${resolveToken(config.states.disabled.color)};`
1090
+ );
1091
+ }
1092
+ if (config.states?.readOnly?.bg) {
1093
+ vars.push(
1094
+ ` ${componentVarName("input", "readOnlyBg")}: ${resolveToken(config.states.readOnly.bg)};`
1095
+ );
1096
+ }
1097
+ if (config.states?.readOnly?.color) {
1098
+ vars.push(
1099
+ ` ${componentVarName("input", "readOnlyColor")}: ${resolveToken(config.states.readOnly.color)};`
1100
+ );
1101
+ }
1102
+ if (config.states?.readOnly?.cursor) {
1103
+ vars.push(
1104
+ ` ${componentVarName("input", "readOnlyCursor")}: ${config.states.readOnly.cursor};`
1105
+ );
1106
+ }
1107
+ return `:root {
1108
+ ${vars.join("\n")}
1109
+ }
1110
+ `;
1111
+ }
1112
+ function generateInputBase() {
1113
+ return `.cz-input-field {
1114
+ display: flex;
1115
+ flex-direction: column;
1116
+ gap: 0.375rem;
1117
+ }
1118
+
1119
+ .cz-input-wrapper {
1120
+ position: relative;
1121
+ display: flex;
1122
+ align-items: center;
1123
+ width: 100%;
1124
+ --cz-input-icon-spacing-current: var(--cz-input-icon-spacing, 2.5rem);
1125
+ --cz-input-icon-size-current: var(--cz-input-icon-size, 1rem);
1126
+ --cz-input-clear-icon-size-current: var(--cz-input-clear-icon-size, var(--cz-input-icon-size-current));
1127
+ }
1128
+
1129
+ .cz-input-wrapper-sm {
1130
+ --cz-input-icon-spacing-current: var(--cz-input-icon-spacing-sm, var(--cz-input-icon-spacing-current));
1131
+ --cz-input-icon-size-current: var(--cz-input-icon-size-sm, var(--cz-input-icon-size-current));
1132
+ --cz-input-clear-icon-size-current: var(--cz-input-clear-icon-size-sm, var(--cz-input-icon-size-current));
1133
+ }
1134
+
1135
+ .cz-input-wrapper-md {
1136
+ --cz-input-icon-spacing-current: var(--cz-input-icon-spacing-md, var(--cz-input-icon-spacing-current));
1137
+ --cz-input-icon-size-current: var(--cz-input-icon-size-md, var(--cz-input-icon-size-current));
1138
+ --cz-input-clear-icon-size-current: var(--cz-input-clear-icon-size-md, var(--cz-input-icon-size-current));
1139
+ }
1140
+
1141
+ .cz-input-wrapper-lg {
1142
+ --cz-input-icon-spacing-current: var(--cz-input-icon-spacing-lg, var(--cz-input-icon-spacing-current));
1143
+ --cz-input-icon-size-current: var(--cz-input-icon-size-lg, var(--cz-input-icon-size-current));
1144
+ --cz-input-clear-icon-size-current: var(--cz-input-clear-icon-size-lg, var(--cz-input-icon-size-current));
1145
+ }
1146
+
1147
+ .cz-input {
1148
+ width: 100%;
1149
+ border-radius: var(--cz-input-border-radius);
1150
+ border: var(--cz-input-border-width) solid var(--cz-input-border-color);
1151
+ background-color: var(--cz-input-bg);
1152
+ color: var(--cz-input-color);
1153
+ transition: all var(--cz-transition-fast);
1154
+ }
1155
+
1156
+ .cz-input::placeholder {
1157
+ color: var(--cz-input-placeholder-color);
1158
+ }
1159
+ `;
1160
+ }
1161
+ function generateInputVariants(config) {
1162
+ if (!config.variants || Object.keys(config.variants).length === 0) {
1163
+ return "";
1164
+ }
1165
+ const blocks = [];
1166
+ for (const [name, variant] of Object.entries(config.variants)) {
1167
+ const lines = [];
1168
+ if (variant.bg) {
1169
+ lines.push(` --cz-input-bg: ${resolveToken(variant.bg)};`);
1170
+ }
1171
+ if (variant.color) {
1172
+ lines.push(` --cz-input-color: ${resolveToken(variant.color)};`);
1173
+ }
1174
+ if (variant.borderColor) {
1175
+ lines.push(` --cz-input-border-color: ${resolveToken(variant.borderColor)};`);
1176
+ }
1177
+ if (variant.placeholderColor) {
1178
+ lines.push(
1179
+ ` --cz-input-placeholder-color: ${resolveToken(variant.placeholderColor)};`
1180
+ );
1181
+ }
1182
+ if (variant.iconColor) {
1183
+ lines.push(` --cz-input-icon-color: ${resolveToken(variant.iconColor)};`);
1184
+ }
1185
+ if (variant.iconColorFocus) {
1186
+ lines.push(
1187
+ ` --cz-input-icon-color-focus: ${resolveToken(variant.iconColorFocus)};`
1188
+ );
1189
+ }
1190
+ if (variant.iconColorError) {
1191
+ lines.push(
1192
+ ` --cz-input-icon-color-error: ${resolveToken(variant.iconColorError)};`
1193
+ );
1194
+ }
1195
+ if (variant.focusBorderColor) {
1196
+ lines.push(
1197
+ ` --cz-input-focus-border-color: ${resolveToken(variant.focusBorderColor)};`
1198
+ );
1199
+ }
1200
+ if (variant.focusShadow) {
1201
+ lines.push(` --cz-input-focus-shadow: ${resolveToken(variant.focusShadow)};`);
1202
+ }
1203
+ if (variant.clearHoverBg) {
1204
+ lines.push(
1205
+ ` --cz-input-clear-hover-bg: ${resolveToken(variant.clearHoverBg)};`
1206
+ );
1207
+ }
1208
+ if (variant.clearHoverColor) {
1209
+ lines.push(
1210
+ ` --cz-input-clear-hover-color: ${resolveToken(variant.clearHoverColor)};`
1211
+ );
1212
+ }
1213
+ if (lines.length === 0) continue;
1214
+ blocks.push(
1215
+ `.cz-input-wrapper-variant-${name} {
1216
+ ${lines.join("\n")}
1217
+ }`
1218
+ );
1219
+ }
1220
+ return blocks.join("\n\n");
1221
+ }
1222
+ function generateInputSizes() {
1223
+ return `/* Input Sizes */
1224
+ .cz-input-sm {
1225
+ height: var(--cz-input-height-sm);
1226
+ padding: var(--cz-input-padding-y-sm, 0) var(--cz-input-padding-x-sm);
1227
+ font-size: var(--cz-input-font-size-sm);
1228
+ }
1229
+ .cz-input-md {
1230
+ height: var(--cz-input-height-md);
1231
+ padding: var(--cz-input-padding-y-md, 0) var(--cz-input-padding-x-md);
1232
+ font-size: var(--cz-input-font-size-md);
1233
+ }
1234
+ .cz-input-lg {
1235
+ height: var(--cz-input-height-lg);
1236
+ padding: var(--cz-input-padding-y-lg, 0) var(--cz-input-padding-x-lg);
1237
+ font-size: var(--cz-input-font-size-lg);
1238
+ }
1239
+ `;
1240
+ }
1241
+ function generateInputStates() {
1242
+ return `.cz-input:focus {
1243
+ outline: none;
1244
+ border-color: var(--cz-input-focus-border-color);
1245
+ box-shadow: var(--cz-input-focus-shadow);
1246
+ }
1247
+
1248
+ .cz-input:disabled {
1249
+ cursor: var(--cz-input-disabled-cursor, not-allowed);
1250
+ opacity: var(--cz-input-disabled-opacity, 0.5);
1251
+ background-color: var(--cz-input-disabled-bg, var(--cz-input-bg));
1252
+ color: var(--cz-input-disabled-color, var(--cz-input-color));
1253
+ }
1254
+
1255
+ .cz-input:read-only {
1256
+ cursor: var(--cz-input-read-only-cursor, default);
1257
+ background-color: var(--cz-input-read-only-bg, var(--cz-input-bg));
1258
+ color: var(--cz-input-read-only-color, var(--cz-input-color));
1259
+ }
1260
+
1261
+ .cz-input-error {
1262
+ border-color: var(--cz-input-error-border-color);
1263
+ }
1264
+ .cz-input-error:focus {
1265
+ border-color: var(--cz-input-error-border-color);
1266
+ box-shadow: var(--cz-input-error-focus-shadow);
1267
+ }
1268
+
1269
+ .cz-input-description {
1270
+ font-size: var(--cz-font-size-xs);
1271
+ color: var(--cz-input-placeholder-color);
1272
+ }
1273
+ `;
1274
+ }
1275
+ function generateInputIcons() {
1276
+ return `/* Input with Icons */
1277
+ .cz-input-has-left-icon .cz-input { padding-left: var(--cz-input-icon-spacing-current); }
1278
+ .cz-input-has-right-icon .cz-input { padding-right: var(--cz-input-icon-spacing-current); }
1279
+
1280
+ .cz-input-icon {
1281
+ position: absolute;
1282
+ display: flex;
1283
+ align-items: center;
1284
+ justify-content: center;
1285
+ width: var(--cz-input-icon-spacing-current);
1286
+ height: 100%;
1287
+ color: var(--cz-input-icon-color);
1288
+ pointer-events: none;
1289
+ transition: color var(--cz-transition-fast);
1290
+ }
1291
+ .cz-input-icon svg {
1292
+ width: var(--cz-input-icon-size-current);
1293
+ height: var(--cz-input-icon-size-current);
1294
+ }
1295
+ .cz-input-icon-left { left: 0; }
1296
+ .cz-input-icon-right { right: 0; }
1297
+
1298
+ .cz-input-wrapper:focus-within .cz-input-icon {
1299
+ color: var(--cz-input-icon-color-focus, var(--cz-input-icon-color));
1300
+ }
1301
+
1302
+ .cz-input-wrapper-error .cz-input-icon {
1303
+ color: var(--cz-input-icon-color-error, var(--cz-input-icon-color));
1304
+ }
1305
+ `;
1306
+ }
1307
+ function generateInputClear() {
1308
+ return `/* Input Clear Button */
1309
+ .cz-input-clear {
1310
+ position: absolute;
1311
+ right: 0;
1312
+ display: flex;
1313
+ align-items: center;
1314
+ justify-content: center;
1315
+ width: var(--cz-input-icon-spacing-current);
1316
+ height: 100%;
1317
+ color: var(--cz-input-icon-color);
1318
+ background: transparent;
1319
+ border: none;
1320
+ border-radius: var(--cz-input-clear-border-radius, var(--cz-radius-sm));
1321
+ cursor: pointer;
1322
+ transition: color var(--cz-transition-fast), background-color var(--cz-transition-fast);
1323
+ }
1324
+ .cz-input-clear:hover {
1325
+ background-color: var(--cz-input-clear-hover-bg, transparent);
1326
+ color: var(--cz-input-clear-hover-color, var(--cz-input-color));
1327
+ }
1328
+ .cz-input-clear svg {
1329
+ width: var(--cz-input-clear-icon-size-current);
1330
+ height: var(--cz-input-clear-icon-size-current);
1331
+ }
1332
+ `;
1333
+ }
1334
+ function generateInputPasswordToggle() {
1335
+ return `/* Input Password Toggle */
1336
+ .cz-input-password-toggle {
1337
+ position: absolute;
1338
+ right: 0;
1339
+ display: flex;
1340
+ align-items: center;
1341
+ justify-content: center;
1342
+ width: var(--cz-input-icon-spacing-current);
1343
+ height: 100%;
1344
+ color: var(--cz-input-icon-color);
1345
+ background: transparent;
1346
+ border: none;
1347
+ border-radius: var(--cz-input-clear-border-radius, var(--cz-radius-sm));
1348
+ cursor: pointer;
1349
+ transition: color var(--cz-transition-fast), background-color var(--cz-transition-fast);
1350
+ }
1351
+
1352
+ .cz-input-password-toggle:hover {
1353
+ background-color: var(--cz-input-clear-hover-bg, transparent);
1354
+ color: var(--cz-input-icon-color-focus, var(--cz-input-icon-color));
1355
+ }
1356
+
1357
+ .cz-input-password-toggle svg {
1358
+ width: var(--cz-input-clear-icon-size-current);
1359
+ height: var(--cz-input-clear-icon-size-current);
1360
+ }
1361
+ `;
1362
+ }
1363
+
1364
+ // cli/generators/card.ts
1365
+ function generateCardCSS(config) {
1366
+ let css = "";
1367
+ css += "/* ===== CARD ===== */\n\n";
1368
+ css += generateCardVariables(config);
1369
+ css += "\n";
1370
+ css += generateCardBase();
1371
+ css += "\n";
1372
+ if (config.customCSS) {
1373
+ css += `/* Custom Card CSS */
1374
+ ${config.customCSS}
1375
+ `;
1376
+ }
1377
+ return css;
1378
+ }
1379
+ function generateCardVariables(config) {
1380
+ const vars = [];
1381
+ if (config.padding) vars.push(` --cz-card-padding: ${resolveToken(config.padding)};`);
1382
+ if (config.borderRadius) vars.push(` --cz-card-border-radius: ${resolveToken(config.borderRadius)};`);
1383
+ if (config.borderWidth) vars.push(` --cz-card-border-width: ${resolveToken(config.borderWidth)};`);
1384
+ if (config.borderColor) vars.push(` --cz-card-border-color: ${resolveToken(config.borderColor)};`);
1385
+ if (config.bg) vars.push(` --cz-card-bg: ${resolveToken(config.bg)};`);
1386
+ if (config.shadow) vars.push(` --cz-card-shadow: ${resolveToken(config.shadow)};`);
1387
+ if (config.header?.paddingBottom) vars.push(` --cz-card-header-padding-bottom: ${resolveToken(config.header.paddingBottom)};`);
1388
+ if (config.header?.marginBottom) vars.push(` --cz-card-header-margin-bottom: ${resolveToken(config.header.marginBottom)};`);
1389
+ if (config.title?.fontSize) vars.push(` --cz-card-title-font-size: ${resolveToken(config.title.fontSize)};`);
1390
+ if (config.title?.fontWeight) vars.push(` --cz-card-title-font-weight: ${resolveToken(config.title.fontWeight)};`);
1391
+ if (config.title?.color) vars.push(` --cz-card-title-color: ${resolveToken(config.title.color)};`);
1392
+ if (config.description?.fontSize) vars.push(` --cz-card-description-font-size: ${resolveToken(config.description.fontSize)};`);
1393
+ if (config.description?.color) vars.push(` --cz-card-description-color: ${resolveToken(config.description.color)};`);
1394
+ if (config.footer?.paddingTop) vars.push(` --cz-card-footer-padding-top: ${resolveToken(config.footer.paddingTop)};`);
1395
+ if (config.footer?.marginTop) vars.push(` --cz-card-footer-margin-top: ${resolveToken(config.footer.marginTop)};`);
1396
+ if (config.footer?.gap) vars.push(` --cz-card-footer-gap: ${config.footer.gap};`);
1397
+ return `:root {
1398
+ ${vars.join("\n")}
1399
+ }
1400
+ `;
1401
+ }
1402
+ function generateCardBase() {
1403
+ return `.cz-card {
1404
+ border-radius: var(--cz-card-border-radius);
1405
+ border: var(--cz-card-border-width) solid var(--cz-card-border-color);
1406
+ background-color: var(--cz-card-bg);
1407
+ box-shadow: var(--cz-card-shadow);
1408
+ padding: var(--cz-card-padding);
1409
+ }
1410
+
1411
+ .cz-card-no-padding { padding: 0; }
1412
+
1413
+ .cz-card-header {
1414
+ display: flex;
1415
+ flex-direction: column;
1416
+ gap: 0.375rem;
1417
+ padding-bottom: var(--cz-card-header-padding-bottom);
1418
+ border-bottom: var(--cz-card-border-width) solid var(--cz-card-border-color);
1419
+ margin-bottom: var(--cz-card-header-margin-bottom);
1420
+ }
1421
+
1422
+ .cz-card-title {
1423
+ font-size: var(--cz-card-title-font-size);
1424
+ font-weight: var(--cz-card-title-font-weight);
1425
+ color: var(--cz-card-title-color);
1426
+ line-height: var(--cz-font-lineHeight-tight);
1427
+ }
1428
+
1429
+ .cz-card-description {
1430
+ font-size: var(--cz-card-description-font-size);
1431
+ color: var(--cz-card-description-color);
1432
+ }
1433
+
1434
+ .cz-card-body { color: var(--cz-card-title-color); }
1435
+
1436
+ .cz-card-footer {
1437
+ display: flex;
1438
+ align-items: center;
1439
+ gap: var(--cz-card-footer-gap);
1440
+ padding-top: var(--cz-card-footer-padding-top);
1441
+ margin-top: var(--cz-card-footer-margin-top);
1442
+ border-top: var(--cz-card-border-width) solid var(--cz-card-border-color);
1443
+ }
1444
+ `;
1445
+ }
1446
+
1447
+ // cli/generators/switch.ts
1448
+ function generateSwitchCSS(config) {
1449
+ let css = "";
1450
+ css += "/* ===== SWITCH ===== */\n\n";
1451
+ css += generateSwitchVariables(config);
1452
+ css += "\n";
1453
+ css += generateSwitchBase();
1454
+ css += "\n";
1455
+ css += generateSwitchSizes(config);
1456
+ css += "\n";
1457
+ css += generateSwitchLabel();
1458
+ css += "\n";
1459
+ if (config.customCSS) {
1460
+ css += `/* Custom Switch CSS */
1461
+ ${config.customCSS}
1462
+ `;
1463
+ }
1464
+ return css;
1465
+ }
1466
+ function generateSwitchVariables(config) {
1467
+ const vars = [];
1468
+ if (config.width) {
1469
+ for (const [size, value] of Object.entries(config.width)) {
1470
+ vars.push(` --cz-switch-width-${size}: ${resolveToken(value)};`);
1471
+ }
1472
+ }
1473
+ if (config.height) {
1474
+ for (const [size, value] of Object.entries(config.height)) {
1475
+ vars.push(` --cz-switch-height-${size}: ${resolveToken(value)};`);
1476
+ }
1477
+ }
1478
+ if (config.thumbSize) {
1479
+ for (const [size, value] of Object.entries(config.thumbSize)) {
1480
+ vars.push(` --cz-switch-thumb-size-${size}: ${resolveToken(value)};`);
1481
+ }
1482
+ }
1483
+ if (config.thumbOffset) vars.push(` --cz-switch-thumb-offset: ${config.thumbOffset};`);
1484
+ if (config.borderRadius) vars.push(` --cz-switch-border-radius: ${resolveToken(config.borderRadius)};`);
1485
+ if (config.bgUnchecked) vars.push(` --cz-switch-bg-unchecked: ${resolveToken(config.bgUnchecked)};`);
1486
+ if (config.bgChecked) vars.push(` --cz-switch-bg-checked: ${resolveToken(config.bgChecked)};`);
1487
+ if (config.thumbBg) vars.push(` --cz-switch-thumb-bg: ${resolveToken(config.thumbBg)};`);
1488
+ if (config.thumbShadow) vars.push(` --cz-switch-thumb-shadow: ${resolveToken(config.thumbShadow)};`);
1489
+ if (config.transition) vars.push(` --cz-switch-transition: ${resolveToken(config.transition)};`);
1490
+ if (config.states?.focus?.ringWidth) vars.push(` --cz-switch-focus-ring-width: ${config.states.focus.ringWidth};`);
1491
+ if (config.states?.focus?.ringColor) vars.push(` --cz-switch-focus-ring-color: ${resolveToken(config.states.focus.ringColor)};`);
1492
+ if (config.states?.disabled?.opacity) vars.push(` --cz-switch-disabled-opacity: ${config.states.disabled.opacity};`);
1493
+ return `:root {
1494
+ ${vars.join("\n")}
1495
+ }
1496
+ `;
1497
+ }
1498
+ function generateSwitchBase() {
1499
+ return `.cz-switch {
1500
+ all: unset;
1501
+ box-sizing: border-box;
1502
+ display: inline-flex;
1503
+ align-items: center;
1504
+ position: relative;
1505
+ border-radius: var(--cz-switch-border-radius);
1506
+ background-color: var(--cz-switch-bg-unchecked);
1507
+ transition: all var(--cz-switch-transition);
1508
+ cursor: pointer;
1509
+ }
1510
+
1511
+ .cz-switch:focus-visible {
1512
+ outline: none;
1513
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px var(--cz-switch-focus-ring-color);
1514
+ }
1515
+
1516
+ .cz-switch[data-state="checked"],
1517
+ .cz-switch.cz-switch-checked {
1518
+ background-color: var(--cz-switch-bg-checked);
1519
+ }
1520
+
1521
+ .cz-switch.cz-disabled,
1522
+ .cz-switch:disabled {
1523
+ opacity: var(--cz-switch-disabled-opacity);
1524
+ cursor: not-allowed;
1525
+ }
1526
+
1527
+ .cz-switch-thumb {
1528
+ display: block;
1529
+ border-radius: var(--cz-switch-border-radius);
1530
+ background-color: var(--cz-switch-thumb-bg);
1531
+ box-shadow: var(--cz-switch-thumb-shadow);
1532
+ transition: transform var(--cz-switch-transition);
1533
+ }
1534
+ `;
1535
+ }
1536
+ function generateSwitchSizes(config) {
1537
+ let css = "/* Switch Sizes */\n";
1538
+ for (const size of ["sm", "md", "lg"]) {
1539
+ css += `.cz-switch-${size} {
1540
+ width: var(--cz-switch-width-${size});
1541
+ height: var(--cz-switch-height-${size});
1542
+ }
1543
+ .cz-switch-${size} .cz-switch-thumb {
1544
+ width: var(--cz-switch-thumb-size-${size});
1545
+ height: var(--cz-switch-thumb-size-${size});
1546
+ transform: translateX(var(--cz-switch-thumb-offset));
1547
+ }
1548
+ .cz-switch-${size}[data-state="checked"] .cz-switch-thumb,
1549
+ .cz-switch-${size}.cz-switch-checked .cz-switch-thumb {
1550
+ transform: translateX(calc(var(--cz-switch-width-${size}) - var(--cz-switch-thumb-size-${size}) - var(--cz-switch-thumb-offset)));
1551
+ }
1552
+ `;
1553
+ }
1554
+ return css;
1555
+ }
1556
+ function generateSwitchLabel() {
1557
+ return `/* Switch with Label */
1558
+ .cz-switch-container {
1559
+ display: inline-flex;
1560
+ align-items: flex-start;
1561
+ gap: 0.75rem;
1562
+ cursor: pointer;
1563
+ }
1564
+ .cz-switch-container.cz-disabled {
1565
+ opacity: var(--cz-switch-disabled-opacity);
1566
+ cursor: not-allowed;
1567
+ }
1568
+
1569
+ .cz-switch-label-left { flex-direction: row-reverse; }
1570
+ .cz-switch-label-right { flex-direction: row; }
1571
+
1572
+ .cz-switch-text {
1573
+ display: flex;
1574
+ flex-direction: column;
1575
+ gap: 0.125rem;
1576
+ }
1577
+
1578
+ .cz-switch-label {
1579
+ font-size: var(--cz-font-size-sm);
1580
+ font-weight: var(--cz-font-weight-medium);
1581
+ color: hsl(var(--cz-color-fg));
1582
+ line-height: 1.5;
1583
+ }
1584
+
1585
+ .cz-switch-description {
1586
+ font-size: var(--cz-font-size-xs);
1587
+ color: hsl(var(--cz-color-mutedFg));
1588
+ }
1589
+ `;
1590
+ }
1591
+
1592
+ // cli/generators/checkbox.ts
1593
+ function generateCheckboxCSS(config) {
1594
+ let css = "";
1595
+ css += "/* ===== CHECKBOX ===== */\n\n";
1596
+ css += generateCheckboxVariables(config);
1597
+ css += "\n";
1598
+ css += generateCheckboxBase();
1599
+ css += "\n";
1600
+ css += generateCheckboxSizes(config);
1601
+ css += "\n";
1602
+ css += generateCheckboxDescription();
1603
+ css += "\n";
1604
+ if (config.customCSS) {
1605
+ css += `/* Custom Checkbox CSS */
1606
+ ${config.customCSS}
1607
+ `;
1608
+ }
1609
+ return css;
1610
+ }
1611
+ function generateCheckboxVariables(config) {
1612
+ const vars = [];
1613
+ if (config.size) {
1614
+ for (const [size, value] of Object.entries(config.size)) {
1615
+ vars.push(` --cz-checkbox-size-${size}: ${resolveToken(value)};`);
1616
+ }
1617
+ }
1618
+ if (config.iconSize) {
1619
+ for (const [size, value] of Object.entries(config.iconSize)) {
1620
+ vars.push(` --cz-checkbox-icon-size-${size}: ${value};`);
1621
+ }
1622
+ }
1623
+ if (config.borderRadius) vars.push(` --cz-checkbox-border-radius: ${resolveToken(config.borderRadius)};`);
1624
+ if (config.borderWidth) vars.push(` --cz-checkbox-border-width: ${config.borderWidth};`);
1625
+ if (config.borderColor) vars.push(` --cz-checkbox-border-color: ${resolveToken(config.borderColor)};`);
1626
+ if (config.bg) vars.push(` --cz-checkbox-bg: ${resolveToken(config.bg)};`);
1627
+ if (config.checkedBg) vars.push(` --cz-checkbox-checked-bg: ${resolveToken(config.checkedBg)};`);
1628
+ if (config.checkedBorderColor) vars.push(` --cz-checkbox-checked-border-color: ${resolveToken(config.checkedBorderColor)};`);
1629
+ if (config.indicatorColor) vars.push(` --cz-checkbox-indicator-color: ${resolveToken(config.indicatorColor)};`);
1630
+ if (config.labelFontSize) vars.push(` --cz-checkbox-label-font-size: ${resolveToken(config.labelFontSize)};`);
1631
+ if (config.labelGap) vars.push(` --cz-checkbox-label-gap: ${config.labelGap};`);
1632
+ if (config.states?.hover?.borderColor) vars.push(` --cz-checkbox-hover-border-color: ${resolveToken(config.states.hover.borderColor)};`);
1633
+ if (config.states?.focus?.ringWidth) vars.push(` --cz-checkbox-focus-ring-width: ${config.states.focus.ringWidth};`);
1634
+ if (config.states?.focus?.ringColor) vars.push(` --cz-checkbox-focus-ring-color: ${resolveToken(config.states.focus.ringColor)};`);
1635
+ if (config.states?.disabled?.opacity) vars.push(` --cz-checkbox-disabled-opacity: ${config.states.disabled.opacity};`);
1636
+ return `:root {
1637
+ ${vars.join("\n")}
1638
+ }
1639
+ `;
1640
+ }
1641
+ function generateCheckboxBase() {
1642
+ return `.cz-checkbox-wrapper {
1643
+ display: inline-flex;
1644
+ align-items: center;
1645
+ gap: var(--cz-checkbox-label-gap);
1646
+ cursor: pointer;
1647
+ user-select: none;
1648
+ }
1649
+
1650
+ .cz-checkbox-wrapper.cz-disabled {
1651
+ cursor: not-allowed;
1652
+ opacity: var(--cz-checkbox-disabled-opacity);
1653
+ }
1654
+
1655
+ .cz-checkbox {
1656
+ all: unset;
1657
+ box-sizing: border-box;
1658
+ display: inline-flex;
1659
+ align-items: center;
1660
+ justify-content: center;
1661
+ border-radius: var(--cz-checkbox-border-radius);
1662
+ border: var(--cz-checkbox-border-width) solid var(--cz-checkbox-border-color);
1663
+ background-color: var(--cz-checkbox-bg);
1664
+ transition: all var(--cz-transition-fast);
1665
+ flex-shrink: 0;
1666
+ cursor: pointer;
1667
+ }
1668
+
1669
+ .cz-checkbox:hover {
1670
+ border-color: var(--cz-checkbox-hover-border-color);
1671
+ }
1672
+
1673
+ .cz-checkbox:focus-visible {
1674
+ outline: none;
1675
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px var(--cz-checkbox-focus-ring-color);
1676
+ }
1677
+
1678
+ .cz-checkbox:disabled {
1679
+ cursor: not-allowed;
1680
+ opacity: var(--cz-checkbox-disabled-opacity);
1681
+ }
1682
+
1683
+ .cz-checkbox[data-state="checked"],
1684
+ .cz-checkbox[data-state="indeterminate"] {
1685
+ background-color: var(--cz-checkbox-checked-bg);
1686
+ border-color: var(--cz-checkbox-checked-border-color);
1687
+ }
1688
+
1689
+ .cz-checkbox-indicator {
1690
+ display: flex;
1691
+ align-items: center;
1692
+ justify-content: center;
1693
+ color: var(--cz-checkbox-indicator-color);
1694
+ width: 100%;
1695
+ height: 100%;
1696
+ }
1697
+
1698
+ .cz-checkbox-label {
1699
+ font-size: var(--cz-checkbox-label-font-size);
1700
+ color: hsl(var(--cz-color-fg));
1701
+ }
1702
+ `;
1703
+ }
1704
+ function generateCheckboxSizes(config) {
1705
+ let css = "/* Checkbox Sizes */\n";
1706
+ for (const size of ["sm", "md", "lg"]) {
1707
+ css += `.cz-checkbox-${size} {
1708
+ width: var(--cz-checkbox-size-${size});
1709
+ height: var(--cz-checkbox-size-${size});
1710
+ }
1711
+ .cz-checkbox-${size} .cz-checkbox-indicator svg {
1712
+ width: var(--cz-checkbox-icon-size-${size});
1713
+ height: var(--cz-checkbox-icon-size-${size});
1714
+ }
1715
+ `;
1716
+ }
1717
+ return css;
1718
+ }
1719
+ function generateCheckboxDescription() {
1720
+ return `/* Checkbox with Description */
1721
+ .cz-checkbox-wrapper-with-description {
1722
+ align-items: flex-start;
1723
+ }
1724
+ .cz-checkbox-wrapper-with-description .cz-checkbox {
1725
+ margin-top: 0.125rem;
1726
+ }
1727
+
1728
+ .cz-checkbox-text {
1729
+ display: flex;
1730
+ flex-direction: column;
1731
+ gap: 0.125rem;
1732
+ }
1733
+
1734
+ .cz-checkbox-description {
1735
+ font-size: var(--cz-font-size-xs);
1736
+ color: hsl(var(--cz-color-mutedFg));
1737
+ }
1738
+ `;
1739
+ }
1740
+
1741
+ // cli/generators/textarea.ts
1742
+ function generateTextareaCSS(config) {
1743
+ let css = "/* ===== TEXTAREA ===== */\n\n";
1744
+ css += generateTextareaVariables(config);
1745
+ css += "\n";
1746
+ css += generateTextareaBase();
1747
+ css += "\n";
1748
+ css += generateTextareaSizes();
1749
+ css += "\n";
1750
+ css += generateTextareaStates(config);
1751
+ css += "\n";
1752
+ if (config.customCSS) css += `/* Custom Textarea CSS */
1753
+ ${config.customCSS}
1754
+ `;
1755
+ return css;
1756
+ }
1757
+ function generateTextareaVariables(config) {
1758
+ const vars = [];
1759
+ if (config.minHeight) vars.push(` --cz-textarea-min-height: ${config.minHeight};`);
1760
+ if (config.borderRadius) vars.push(` --cz-textarea-border-radius: ${resolveToken(config.borderRadius)};`);
1761
+ if (config.borderWidth) vars.push(` --cz-textarea-border-width: ${config.borderWidth};`);
1762
+ if (config.borderColor) vars.push(` --cz-textarea-border-color: ${resolveToken(config.borderColor)};`);
1763
+ if (config.bg) vars.push(` --cz-textarea-bg: ${resolveToken(config.bg)};`);
1764
+ if (config.color) vars.push(` --cz-textarea-color: ${resolveToken(config.color)};`);
1765
+ if (config.placeholderColor) vars.push(` --cz-textarea-placeholder-color: ${resolveToken(config.placeholderColor)};`);
1766
+ if (config.paddingX) {
1767
+ for (const [size, value] of Object.entries(config.paddingX)) {
1768
+ vars.push(` --cz-textarea-padding-x-${size}: ${value};`);
1769
+ }
1770
+ }
1771
+ if (config.paddingY) {
1772
+ for (const [size, value] of Object.entries(config.paddingY)) {
1773
+ vars.push(` --cz-textarea-padding-y-${size}: ${value};`);
1774
+ }
1775
+ }
1776
+ if (config.fontSize && typeof config.fontSize === "object") {
1777
+ for (const [size, value] of Object.entries(config.fontSize)) {
1778
+ vars.push(` --cz-textarea-font-size-${size}: ${resolveToken(value)};`);
1779
+ }
1780
+ }
1781
+ if (config.states?.focus?.borderColor) vars.push(` --cz-textarea-focus-border-color: ${resolveToken(config.states.focus.borderColor)};`);
1782
+ if (config.states?.focus?.shadow) vars.push(` --cz-textarea-focus-shadow: ${config.states.focus.shadow};`);
1783
+ if (config.states?.disabled?.opacity) vars.push(` --cz-textarea-disabled-opacity: ${config.states.disabled.opacity};`);
1784
+ return `:root {
1785
+ ${vars.join("\n")}
1786
+ }
1787
+ `;
1788
+ }
1789
+ function generateTextareaBase() {
1790
+ return `.cz-textarea-field {
1791
+ display: flex;
1792
+ flex-direction: column;
1793
+ gap: 0.375rem;
1794
+ }
1795
+
1796
+ .cz-textarea {
1797
+ width: 100%;
1798
+ min-height: var(--cz-textarea-min-height);
1799
+ border-radius: var(--cz-textarea-border-radius);
1800
+ border: var(--cz-textarea-border-width) solid var(--cz-textarea-border-color);
1801
+ background-color: var(--cz-textarea-bg);
1802
+ color: var(--cz-textarea-color);
1803
+ resize: vertical;
1804
+ transition: all var(--cz-transition-fast);
1805
+ }
1806
+
1807
+ .cz-textarea::placeholder {
1808
+ color: var(--cz-textarea-placeholder-color);
1809
+ }
1810
+
1811
+ .cz-textarea-auto-resize {
1812
+ resize: none;
1813
+ overflow: hidden;
1814
+ }
1815
+ `;
1816
+ }
1817
+ function generateTextareaSizes() {
1818
+ return `/* Textarea Sizes */
1819
+ .cz-textarea-sm {
1820
+ padding: var(--cz-textarea-padding-y-sm) var(--cz-textarea-padding-x-sm);
1821
+ font-size: var(--cz-textarea-font-size-sm);
1822
+ }
1823
+ .cz-textarea-md {
1824
+ padding: var(--cz-textarea-padding-y-md) var(--cz-textarea-padding-x-md);
1825
+ font-size: var(--cz-textarea-font-size-md);
1826
+ }
1827
+ .cz-textarea-lg {
1828
+ padding: var(--cz-textarea-padding-y-lg) var(--cz-textarea-padding-x-lg);
1829
+ font-size: var(--cz-textarea-font-size-lg);
1830
+ }
1831
+ `;
1832
+ }
1833
+ function generateTextareaStates(config) {
1834
+ return `.cz-textarea:focus {
1835
+ outline: none;
1836
+ border-color: var(--cz-textarea-focus-border-color);
1837
+ box-shadow: var(--cz-textarea-focus-shadow);
1838
+ }
1839
+
1840
+ .cz-textarea:disabled {
1841
+ cursor: not-allowed;
1842
+ opacity: var(--cz-textarea-disabled-opacity);
1843
+ }
1844
+
1845
+ .cz-textarea-description {
1846
+ font-size: var(--cz-font-size-xs);
1847
+ color: var(--cz-textarea-placeholder-color);
1848
+ }
1849
+ `;
1850
+ }
1851
+
1852
+ // cli/generators/select.ts
1853
+ function generateSelectCSS(config) {
1854
+ let css = "/* ===== SELECT ===== */\n\n";
1855
+ css += generateSelectVariables(config);
1856
+ css += "\n";
1857
+ css += generateSelectBase();
1858
+ css += "\n";
1859
+ css += generateSelectSizes();
1860
+ css += "\n";
1861
+ css += generateSelectContent(config);
1862
+ css += "\n";
1863
+ if (config.customCSS) css += `/* Custom Select CSS */
1864
+ ${config.customCSS}
1865
+ `;
1866
+ return css;
1867
+ }
1868
+ function generateSelectVariables(config) {
1869
+ const vars = [];
1870
+ if (config.height) {
1871
+ for (const [size, value] of Object.entries(config.height)) {
1872
+ vars.push(` --cz-select-height-${size}: ${value};`);
1873
+ }
1874
+ }
1875
+ if (config.paddingX) {
1876
+ for (const [size, value] of Object.entries(config.paddingX)) {
1877
+ vars.push(` --cz-select-padding-x-${size}: ${value};`);
1878
+ }
1879
+ }
1880
+ if (config.fontSize && typeof config.fontSize === "object") {
1881
+ for (const [size, value] of Object.entries(config.fontSize)) {
1882
+ vars.push(` --cz-select-font-size-${size}: ${resolveToken(value)};`);
1883
+ }
1884
+ }
1885
+ if (config.borderRadius) vars.push(` --cz-select-border-radius: ${resolveToken(config.borderRadius)};`);
1886
+ if (config.borderWidth) vars.push(` --cz-select-border-width: ${config.borderWidth};`);
1887
+ if (config.borderColor) vars.push(` --cz-select-border-color: ${resolveToken(config.borderColor)};`);
1888
+ if (config.bg) vars.push(` --cz-select-bg: ${resolveToken(config.bg)};`);
1889
+ if (config.color) vars.push(` --cz-select-color: ${resolveToken(config.color)};`);
1890
+ if (config.iconSize) vars.push(` --cz-select-icon-size: ${config.iconSize};`);
1891
+ if (config.states?.focus?.ringWidth) vars.push(` --cz-select-focus-ring-width: ${config.states.focus.ringWidth};`);
1892
+ if (config.states?.focus?.ringColor) vars.push(` --cz-select-focus-ring-color: ${resolveToken(config.states.focus.ringColor)};`);
1893
+ if (config.states?.disabled?.opacity) vars.push(` --cz-select-disabled-opacity: ${config.states.disabled.opacity};`);
1894
+ if (config.content?.bg) vars.push(` --cz-select-content-bg: ${resolveToken(config.content.bg)};`);
1895
+ if (config.content?.borderRadius) vars.push(` --cz-select-content-border-radius: ${resolveToken(config.content.borderRadius)};`);
1896
+ if (config.content?.shadow) vars.push(` --cz-select-content-shadow: ${resolveToken(config.content.shadow)};`);
1897
+ if (config.content?.padding) vars.push(` --cz-select-content-padding: ${config.content.padding};`);
1898
+ if (config.item?.paddingX) vars.push(` --cz-select-item-padding-x: ${config.item.paddingX};`);
1899
+ if (config.item?.paddingY) vars.push(` --cz-select-item-padding-y: ${config.item.paddingY};`);
1900
+ if (config.item?.borderRadius) vars.push(` --cz-select-item-border-radius: ${resolveToken(config.item.borderRadius)};`);
1901
+ if (config.item?.hoverBg) vars.push(` --cz-select-item-hover-bg: ${resolveToken(config.item.hoverBg)};`);
1902
+ return `:root {
1903
+ ${vars.join("\n")}
1904
+ }
1905
+ `;
1906
+ }
1907
+ function generateSelectBase() {
1908
+ return `.cz-select-trigger {
1909
+ display: inline-flex;
1910
+ align-items: center;
1911
+ justify-content: space-between;
1912
+ border-radius: var(--cz-select-border-radius);
1913
+ border: var(--cz-select-border-width) solid var(--cz-select-border-color);
1914
+ background-color: var(--cz-select-bg);
1915
+ color: var(--cz-select-color);
1916
+ transition: all var(--cz-transition-fast);
1917
+ cursor: pointer;
1918
+ gap: 0.5rem;
1919
+ }
1920
+
1921
+ .cz-select-trigger:focus-visible {
1922
+ outline: none;
1923
+ box-shadow: 0 0 0 var(--cz-select-focus-ring-width) var(--cz-select-focus-ring-color);
1924
+ }
1925
+
1926
+ .cz-select-trigger:disabled {
1927
+ cursor: not-allowed;
1928
+ opacity: var(--cz-select-disabled-opacity);
1929
+ }
1930
+
1931
+ .cz-select-trigger[data-placeholder] {
1932
+ color: hsl(var(--cz-color-mutedFg));
1933
+ }
1934
+
1935
+ .cz-select-icon {
1936
+ width: var(--cz-select-icon-size);
1937
+ height: var(--cz-select-icon-size);
1938
+ color: hsl(var(--cz-color-mutedFg));
1939
+ flex-shrink: 0;
1940
+ }
1941
+ `;
1942
+ }
1943
+ function generateSelectSizes() {
1944
+ return `/* Select Sizes */
1945
+ .cz-select-sm {
1946
+ height: var(--cz-select-height-sm);
1947
+ padding: 0 var(--cz-select-padding-x-sm);
1948
+ font-size: var(--cz-select-font-size-sm);
1949
+ }
1950
+ .cz-select-md {
1951
+ height: var(--cz-select-height-md);
1952
+ padding: 0 var(--cz-select-padding-x-md);
1953
+ font-size: var(--cz-select-font-size-md);
1954
+ }
1955
+ .cz-select-lg {
1956
+ height: var(--cz-select-height-lg);
1957
+ padding: 0 var(--cz-select-padding-x-lg);
1958
+ font-size: var(--cz-select-font-size-lg);
1959
+ }
1960
+ `;
1961
+ }
1962
+ function generateSelectContent(config) {
1963
+ return `/* Select Content */
1964
+ .cz-select-content {
1965
+ overflow: hidden;
1966
+ background-color: var(--cz-select-content-bg);
1967
+ border-radius: var(--cz-select-content-border-radius);
1968
+ box-shadow: var(--cz-select-content-shadow);
1969
+ border: 1px solid hsl(var(--cz-color-border));
1970
+ padding: var(--cz-select-content-padding);
1971
+ z-index: 50;
1972
+ }
1973
+
1974
+ .cz-select-viewport {
1975
+ padding: 0;
1976
+ }
1977
+
1978
+ .cz-select-item {
1979
+ display: flex;
1980
+ align-items: center;
1981
+ padding: var(--cz-select-item-padding-y) var(--cz-select-item-padding-x);
1982
+ border-radius: var(--cz-select-item-border-radius);
1983
+ font-size: var(--cz-font-size-sm);
1984
+ cursor: pointer;
1985
+ outline: none;
1986
+ user-select: none;
1987
+ transition: background-color var(--cz-transition-fast);
1988
+ }
1989
+
1990
+ .cz-select-item:hover,
1991
+ .cz-select-item[data-highlighted] {
1992
+ background-color: var(--cz-select-item-hover-bg);
1993
+ }
1994
+
1995
+ .cz-select-item[data-disabled] {
1996
+ opacity: 0.5;
1997
+ pointer-events: none;
1998
+ }
1999
+
2000
+ .cz-select-item-indicator {
2001
+ display: inline-flex;
2002
+ align-items: center;
2003
+ justify-content: center;
2004
+ width: 1rem;
2005
+ margin-right: 0.5rem;
2006
+ }
2007
+
2008
+ .cz-select-separator {
2009
+ height: 1px;
2010
+ background-color: hsl(var(--cz-color-border));
2011
+ margin: 0.25rem 0;
2012
+ }
2013
+
2014
+ .cz-select-label {
2015
+ padding: var(--cz-select-item-padding-y) var(--cz-select-item-padding-x);
2016
+ font-size: var(--cz-font-size-xs);
2017
+ font-weight: var(--cz-font-weight-medium);
2018
+ color: hsl(var(--cz-color-mutedFg));
2019
+ }
2020
+ `;
2021
+ }
2022
+
2023
+ // cli/generators/radio.ts
2024
+ function generateRadioCSS(config) {
2025
+ let css = "/* ===== RADIO ===== */\n\n";
2026
+ css += generateRadioVariables(config);
2027
+ css += "\n";
2028
+ css += generateRadioBase();
2029
+ css += "\n";
2030
+ css += generateRadioGroup();
2031
+ css += "\n";
2032
+ if (config.customCSS) css += `/* Custom Radio CSS */
2033
+ ${config.customCSS}
2034
+ `;
2035
+ return css;
2036
+ }
2037
+ function generateRadioVariables(config) {
2038
+ const vars = [];
2039
+ if (config.size) vars.push(` --cz-radio-size: ${config.size};`);
2040
+ if (config.indicatorSize) vars.push(` --cz-radio-indicator-size: ${config.indicatorSize};`);
2041
+ if (config.borderWidth) vars.push(` --cz-radio-border-width: ${config.borderWidth};`);
2042
+ if (config.borderColor) vars.push(` --cz-radio-border-color: ${resolveToken(config.borderColor)};`);
2043
+ if (config.bg) vars.push(` --cz-radio-bg: ${resolveToken(config.bg)};`);
2044
+ if (config.checkedBorderColor) vars.push(` --cz-radio-checked-border-color: ${resolveToken(config.checkedBorderColor)};`);
2045
+ if (config.indicatorBg) vars.push(` --cz-radio-indicator-bg: ${resolveToken(config.indicatorBg)};`);
2046
+ if (config.labelFontSize) vars.push(` --cz-radio-label-font-size: ${resolveToken(config.labelFontSize)};`);
2047
+ if (config.labelGap) vars.push(` --cz-radio-label-gap: ${config.labelGap};`);
2048
+ if (config.states?.hover?.borderColor) vars.push(` --cz-radio-hover-border-color: ${resolveToken(config.states.hover.borderColor)};`);
2049
+ if (config.states?.focus?.ringWidth) vars.push(` --cz-radio-focus-ring-width: ${config.states.focus.ringWidth};`);
2050
+ if (config.states?.focus?.ringColor) vars.push(` --cz-radio-focus-ring-color: ${resolveToken(config.states.focus.ringColor)};`);
2051
+ if (config.states?.disabled?.opacity) vars.push(` --cz-radio-disabled-opacity: ${config.states.disabled.opacity};`);
2052
+ return `:root {
2053
+ ${vars.join("\n")}
2054
+ }
2055
+ `;
2056
+ }
2057
+ function generateRadioBase() {
2058
+ return `.cz-radio-wrapper {
2059
+ display: inline-flex;
2060
+ align-items: center;
2061
+ gap: var(--cz-radio-label-gap);
2062
+ cursor: pointer;
2063
+ user-select: none;
2064
+ }
2065
+
2066
+ .cz-radio-wrapper.cz-disabled {
2067
+ cursor: not-allowed;
2068
+ opacity: var(--cz-radio-disabled-opacity);
2069
+ }
2070
+
2071
+ .cz-radio {
2072
+ all: unset;
2073
+ box-sizing: border-box;
2074
+ display: inline-flex;
2075
+ align-items: center;
2076
+ justify-content: center;
2077
+ width: var(--cz-radio-size);
2078
+ height: var(--cz-radio-size);
2079
+ border-radius: var(--cz-radius-full);
2080
+ border: var(--cz-radio-border-width) solid var(--cz-radio-border-color);
2081
+ background-color: var(--cz-radio-bg);
2082
+ transition: all var(--cz-transition-fast);
2083
+ flex-shrink: 0;
2084
+ cursor: pointer;
2085
+ }
2086
+
2087
+ .cz-radio:hover {
2088
+ border-color: var(--cz-radio-hover-border-color);
2089
+ }
2090
+
2091
+ .cz-radio:focus-visible {
2092
+ outline: none;
2093
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px var(--cz-radio-focus-ring-color);
2094
+ }
2095
+
2096
+ .cz-radio:disabled {
2097
+ cursor: not-allowed;
2098
+ opacity: var(--cz-radio-disabled-opacity);
2099
+ }
2100
+
2101
+ .cz-radio[data-state="checked"] {
2102
+ border-color: var(--cz-radio-checked-border-color);
2103
+ }
2104
+
2105
+ .cz-radio-indicator {
2106
+ display: flex;
2107
+ align-items: center;
2108
+ justify-content: center;
2109
+ width: 100%;
2110
+ height: 100%;
2111
+ }
2112
+
2113
+ .cz-radio-indicator::after {
2114
+ content: "";
2115
+ display: block;
2116
+ width: var(--cz-radio-indicator-size);
2117
+ height: var(--cz-radio-indicator-size);
2118
+ border-radius: var(--cz-radius-full);
2119
+ background-color: var(--cz-radio-indicator-bg);
2120
+ }
2121
+
2122
+ .cz-radio-label {
2123
+ font-size: var(--cz-radio-label-font-size);
2124
+ color: hsl(var(--cz-color-fg));
2125
+ }
2126
+ `;
2127
+ }
2128
+ function generateRadioGroup() {
2129
+ return `/* Radio Group */
2130
+ .cz-radio-group {
2131
+ display: flex;
2132
+ flex-direction: column;
2133
+ gap: 0.5rem;
2134
+ }
2135
+
2136
+ .cz-radio-group-horizontal {
2137
+ flex-direction: row;
2138
+ flex-wrap: wrap;
2139
+ gap: 1rem;
2140
+ }
2141
+
2142
+ .cz-radio-group-item {
2143
+ display: flex;
2144
+ align-items: flex-start;
2145
+ gap: var(--cz-radio-label-gap);
2146
+ }
2147
+
2148
+ .cz-radio-group-item .cz-radio {
2149
+ margin-top: 0.125rem;
2150
+ }
2151
+
2152
+ .cz-radio-group-text {
2153
+ display: flex;
2154
+ flex-direction: column;
2155
+ gap: 0.125rem;
2156
+ }
2157
+
2158
+ .cz-radio-group-label {
2159
+ font-size: var(--cz-font-size-sm);
2160
+ font-weight: var(--cz-font-weight-medium);
2161
+ color: hsl(var(--cz-color-fg));
2162
+ }
2163
+
2164
+ .cz-radio-group-description {
2165
+ font-size: var(--cz-font-size-xs);
2166
+ color: hsl(var(--cz-color-mutedFg));
2167
+ }
2168
+ `;
2169
+ }
2170
+
2171
+ // cli/generators/label.ts
2172
+ function generateLabelCSS(config) {
2173
+ let css = "/* ===== LABEL ===== */\n\n";
2174
+ css += generateLabelVariables(config);
2175
+ css += "\n";
2176
+ css += generateLabelBase();
2177
+ css += "\n";
2178
+ if (config.customCSS) css += `/* Custom Label CSS */
2179
+ ${config.customCSS}
2180
+ `;
2181
+ return css;
2182
+ }
2183
+ function generateLabelVariables(config) {
2184
+ const vars = [];
2185
+ if (config.fontSize) vars.push(` --cz-label-font-size: ${resolveToken(config.fontSize)};`);
2186
+ if (config.fontWeight) vars.push(` --cz-label-font-weight: ${resolveToken(config.fontWeight)};`);
2187
+ if (config.color) vars.push(` --cz-label-color: ${resolveToken(config.color)};`);
2188
+ if (config.requiredColor) vars.push(` --cz-label-required-color: ${resolveToken(config.requiredColor)};`);
2189
+ if (config.disabledOpacity) vars.push(` --cz-label-disabled-opacity: ${config.disabledOpacity};`);
2190
+ return `:root {
2191
+ ${vars.join("\n")}
2192
+ }
2193
+ `;
2194
+ }
2195
+ function generateLabelBase() {
2196
+ return `.cz-label {
2197
+ font-size: var(--cz-label-font-size);
2198
+ font-weight: var(--cz-label-font-weight);
2199
+ color: var(--cz-label-color);
2200
+ }
2201
+
2202
+ .cz-label-required {
2203
+ color: var(--cz-label-required-color);
2204
+ margin-left: 0.25rem;
2205
+ }
2206
+
2207
+ .cz-label-disabled {
2208
+ opacity: var(--cz-label-disabled-opacity);
2209
+ cursor: not-allowed;
2210
+ }
2211
+
2212
+ .cz-error {
2213
+ font-size: var(--cz-font-size-sm);
2214
+ color: hsl(var(--cz-color-danger));
2215
+ }
2216
+ `;
2217
+ }
2218
+
2219
+ // cli/generators/badge.ts
2220
+ function generateBadgeCSS(config) {
2221
+ let css = "/* ===== BADGE ===== */\n\n";
2222
+ css += generateBadgeVariables(config);
2223
+ css += "\n";
2224
+ css += generateBadgeBase();
2225
+ css += "\n";
2226
+ css += generateBadgeSizes();
2227
+ css += "\n";
2228
+ css += generateBadgeVariants(config);
2229
+ css += "\n";
2230
+ if (config.customCSS) css += `/* Custom Badge CSS */
2231
+ ${config.customCSS}
2232
+ `;
2233
+ return css;
2234
+ }
2235
+ function generateBadgeVariables(config) {
2236
+ const vars = [];
2237
+ if (config.paddingX) {
2238
+ for (const [size, value] of Object.entries(config.paddingX)) {
2239
+ vars.push(` --cz-badge-padding-x-${size}: ${value};`);
2240
+ }
2241
+ }
2242
+ if (config.paddingY) {
2243
+ for (const [size, value] of Object.entries(config.paddingY)) {
2244
+ vars.push(` --cz-badge-padding-y-${size}: ${value};`);
2245
+ }
2246
+ }
2247
+ if (config.fontSize) {
2248
+ for (const [size, value] of Object.entries(config.fontSize)) {
2249
+ vars.push(` --cz-badge-font-size-${size}: ${resolveToken(value)};`);
2250
+ }
2251
+ }
2252
+ if (config.fontWeight) vars.push(` --cz-badge-font-weight: ${resolveToken(config.fontWeight)};`);
2253
+ if (config.borderRadius) vars.push(` --cz-badge-border-radius: ${resolveToken(config.borderRadius)};`);
2254
+ if (config.variants) {
2255
+ for (const [name, variant] of Object.entries(config.variants)) {
2256
+ if (variant.bg) vars.push(` --cz-badge-${name}-bg: ${resolveToken(variant.bg)};`);
2257
+ if (variant.color) vars.push(` --cz-badge-${name}-color: ${resolveToken(variant.color)};`);
2258
+ if (variant.borderColor) vars.push(` --cz-badge-${name}-border-color: ${resolveToken(variant.borderColor)};`);
2259
+ }
2260
+ }
2261
+ return `:root {
2262
+ ${vars.join("\n")}
2263
+ }
2264
+ `;
2265
+ }
2266
+ function generateBadgeBase() {
2267
+ return `.cz-badge {
2268
+ display: inline-flex;
2269
+ align-items: center;
2270
+ border-radius: var(--cz-badge-border-radius);
2271
+ font-weight: var(--cz-badge-font-weight);
2272
+ white-space: nowrap;
2273
+ border: 1px solid transparent;
2274
+ }
2275
+ `;
2276
+ }
2277
+ function generateBadgeSizes() {
2278
+ return `/* Badge Sizes */
2279
+ .cz-badge-sm {
2280
+ padding: var(--cz-badge-padding-y-sm) var(--cz-badge-padding-x-sm);
2281
+ font-size: var(--cz-badge-font-size-sm);
2282
+ }
2283
+ .cz-badge-md {
2284
+ padding: var(--cz-badge-padding-y-md) var(--cz-badge-padding-x-md);
2285
+ font-size: var(--cz-badge-font-size-md);
2286
+ }
2287
+ `;
2288
+ }
2289
+ function generateBadgeVariants(config) {
2290
+ let css = "/* Badge Variants */\n";
2291
+ const defaultVariants = ["default", "primary", "success", "danger", "warning", "outline"];
2292
+ for (const name of defaultVariants) {
2293
+ css += `.cz-badge-${name} {
2294
+ background: var(--cz-badge-${name}-bg);
2295
+ color: var(--cz-badge-${name}-color);
2296
+ }
2297
+ `;
2298
+ }
2299
+ if (config.variants) {
2300
+ for (const name of Object.keys(config.variants)) {
2301
+ if (!defaultVariants.includes(name)) {
2302
+ css += `.cz-badge-${name} {
2303
+ background: var(--cz-badge-${name}-bg);
2304
+ color: var(--cz-badge-${name}-color);
2305
+ }
2306
+ `;
2307
+ }
2308
+ }
2309
+ }
2310
+ return css;
2311
+ }
2312
+
2313
+ // cli/generators/status-badge.ts
2314
+ function generateStatusBadgeCSS(config) {
2315
+ let css = "/* ===== STATUS BADGE ===== */\n\n";
2316
+ css += generateStatusBadgeVariables(config);
2317
+ css += "\n";
2318
+ if (config.customCSS) css += `/* Custom StatusBadge CSS */
2319
+ ${config.customCSS}
2320
+ `;
2321
+ return css;
2322
+ }
2323
+ function generateStatusBadgeVariables(config) {
2324
+ const vars = [];
2325
+ if (config.paddingX) vars.push(` --cz-status-badge-padding-x: ${resolveValue(config.paddingX)};`);
2326
+ if (config.paddingY) vars.push(` --cz-status-badge-padding-y: ${resolveValue(config.paddingY)};`);
2327
+ if (config.fontSize) vars.push(` --cz-status-badge-font-size: ${resolveValue(config.fontSize)};`);
2328
+ if (config.fontWeight) vars.push(` --cz-status-badge-font-weight: ${resolveValue(config.fontWeight)};`);
2329
+ if (config.lineHeight) vars.push(` --cz-status-badge-line-height: ${resolveValue(config.lineHeight)};`);
2330
+ if (config.borderRadius) {
2331
+ vars.push(` --cz-status-badge-border-radius: ${resolveValue(config.borderRadius)};`);
2332
+ }
2333
+ if (config.dotSize) vars.push(` --cz-status-badge-dot-size: ${resolveValue(config.dotSize)};`);
2334
+ if (config.dotGap) vars.push(` --cz-status-badge-dot-gap: ${resolveValue(config.dotGap)};`);
2335
+ if (config.successBg) vars.push(` --cz-status-badge-success-bg: ${resolveValue(config.successBg)};`);
2336
+ if (config.successText) {
2337
+ vars.push(` --cz-status-badge-success-text: ${resolveValue(config.successText)};`);
2338
+ }
2339
+ if (config.successDot) vars.push(` --cz-status-badge-success-dot: ${resolveValue(config.successDot)};`);
2340
+ if (config.dangerBg) vars.push(` --cz-status-badge-danger-bg: ${resolveValue(config.dangerBg)};`);
2341
+ if (config.dangerText) vars.push(` --cz-status-badge-danger-text: ${resolveValue(config.dangerText)};`);
2342
+ if (config.dangerDot) vars.push(` --cz-status-badge-danger-dot: ${resolveValue(config.dangerDot)};`);
2343
+ if (config.warningBg) {
2344
+ vars.push(` --cz-status-badge-warning-bg: ${resolveValue(config.warningBg)};`);
2345
+ }
2346
+ if (config.warningText) {
2347
+ vars.push(` --cz-status-badge-warning-text: ${resolveValue(config.warningText)};`);
2348
+ }
2349
+ if (config.warningDot) {
2350
+ vars.push(` --cz-status-badge-warning-dot: ${resolveValue(config.warningDot)};`);
2351
+ }
2352
+ if (config.primaryBg) {
2353
+ vars.push(` --cz-status-badge-primary-bg: ${resolveValue(config.primaryBg)};`);
2354
+ }
2355
+ if (config.primaryText) {
2356
+ vars.push(` --cz-status-badge-primary-text: ${resolveValue(config.primaryText)};`);
2357
+ }
2358
+ if (config.primaryDot) {
2359
+ vars.push(` --cz-status-badge-primary-dot: ${resolveValue(config.primaryDot)};`);
2360
+ }
2361
+ return `:root {
2362
+ ${vars.join("\n")}
2363
+ }
2364
+ `;
2365
+ }
2366
+ function resolveValue(value) {
2367
+ if (!value.startsWith("$")) return value;
2368
+ if (/\s+\$/.test(value)) return value;
2369
+ return resolveToken(value);
2370
+ }
2371
+
2372
+ // cli/generators/avatar.ts
2373
+ function generateAvatarCSS(config) {
2374
+ let css = "/* ===== AVATAR ===== */\n\n";
2375
+ css += generateAvatarVariables(config);
2376
+ css += "\n";
2377
+ css += generateAvatarBase();
2378
+ css += "\n";
2379
+ css += generateAvatarSizes();
2380
+ css += "\n";
2381
+ if (config.customCSS) css += `/* Custom Avatar CSS */
2382
+ ${config.customCSS}
2383
+ `;
2384
+ return css;
2385
+ }
2386
+ function generateAvatarVariables(config) {
2387
+ const vars = [];
2388
+ if (config.size) {
2389
+ for (const [size, value] of Object.entries(config.size)) {
2390
+ vars.push(` --cz-avatar-size-${size}: ${value};`);
2391
+ }
2392
+ }
2393
+ if (config.borderRadius) vars.push(` --cz-avatar-border-radius: ${resolveToken(config.borderRadius)};`);
2394
+ if (config.fallbackBg) vars.push(` --cz-avatar-fallback-bg: ${resolveToken(config.fallbackBg)};`);
2395
+ if (config.fallbackColor) vars.push(` --cz-avatar-fallback-color: ${resolveToken(config.fallbackColor)};`);
2396
+ if (config.fallbackFontWeight) vars.push(` --cz-avatar-fallback-font-weight: ${resolveToken(config.fallbackFontWeight)};`);
2397
+ return `:root {
2398
+ ${vars.join("\n")}
2399
+ }
2400
+ `;
2401
+ }
2402
+ function generateAvatarBase() {
2403
+ return `.cz-avatar {
2404
+ position: relative;
2405
+ display: inline-flex;
2406
+ align-items: center;
2407
+ justify-content: center;
2408
+ overflow: hidden;
2409
+ border-radius: var(--cz-avatar-border-radius);
2410
+ background-color: var(--cz-avatar-fallback-bg);
2411
+ flex-shrink: 0;
2412
+ }
2413
+
2414
+ .cz-avatar-image {
2415
+ width: 100%;
2416
+ height: 100%;
2417
+ object-fit: cover;
2418
+ }
2419
+
2420
+ .cz-avatar-fallback {
2421
+ display: flex;
2422
+ align-items: center;
2423
+ justify-content: center;
2424
+ width: 100%;
2425
+ height: 100%;
2426
+ font-weight: var(--cz-avatar-fallback-font-weight);
2427
+ color: var(--cz-avatar-fallback-color);
2428
+ text-transform: uppercase;
2429
+ }
2430
+ `;
2431
+ }
2432
+ function generateAvatarSizes() {
2433
+ return `/* Avatar Sizes */
2434
+ .cz-avatar-sm {
2435
+ width: var(--cz-avatar-size-sm);
2436
+ height: var(--cz-avatar-size-sm);
2437
+ font-size: calc(var(--cz-avatar-size-sm) * 0.4);
2438
+ }
2439
+ .cz-avatar-md {
2440
+ width: var(--cz-avatar-size-md);
2441
+ height: var(--cz-avatar-size-md);
2442
+ font-size: calc(var(--cz-avatar-size-md) * 0.4);
2443
+ }
2444
+ .cz-avatar-lg {
2445
+ width: var(--cz-avatar-size-lg);
2446
+ height: var(--cz-avatar-size-lg);
2447
+ font-size: calc(var(--cz-avatar-size-lg) * 0.4);
2448
+ }
2449
+ .cz-avatar-xl {
2450
+ width: var(--cz-avatar-size-xl);
2451
+ height: var(--cz-avatar-size-xl);
2452
+ font-size: calc(var(--cz-avatar-size-xl) * 0.4);
2453
+ }
2454
+
2455
+ /* Avatar Group */
2456
+ .cz-avatar-group {
2457
+ display: flex;
2458
+ }
2459
+
2460
+ .cz-avatar-group .cz-avatar {
2461
+ border: 2px solid hsl(var(--cz-color-bg));
2462
+ margin-left: -0.5rem;
2463
+ }
2464
+
2465
+ .cz-avatar-group .cz-avatar:first-child {
2466
+ margin-left: 0;
2467
+ }
2468
+ `;
2469
+ }
2470
+
2471
+ // cli/generators/table.ts
2472
+ function generateTableCSS(config) {
2473
+ let css = "/* ===== TABLE ===== */\n\n";
2474
+ css += generateTableVariables(config);
2475
+ css += "\n";
2476
+ css += generateTableBase();
2477
+ css += "\n";
2478
+ if (config.customCSS) css += `/* Custom Table CSS */
2479
+ ${config.customCSS}
2480
+ `;
2481
+ return css;
2482
+ }
2483
+ function generateTableVariables(config) {
2484
+ const vars = [];
2485
+ if (config.borderRadius) vars.push(` --cz-table-border-radius: ${config.borderRadius};`);
2486
+ if (config.borderWidth) vars.push(` --cz-table-border-width: ${config.borderWidth};`);
2487
+ if (config.borderColor) vars.push(` --cz-table-border-color: ${resolveToken(config.borderColor)};`);
2488
+ if (config.headerBg) vars.push(` --cz-table-header-bg: ${resolveToken(config.headerBg)};`);
2489
+ if (config.headerFontWeight) vars.push(` --cz-table-header-font-weight: ${resolveToken(config.headerFontWeight)};`);
2490
+ if (config.cellPadding) vars.push(` --cz-table-cell-padding: ${config.cellPadding};`);
2491
+ if (config.cellPaddingX) vars.push(` --cz-table-cell-padding-x: ${config.cellPaddingX};`);
2492
+ if (config.cellPaddingY) vars.push(` --cz-table-cell-padding-y: ${config.cellPaddingY};`);
2493
+ if (config.rowHoverBg) vars.push(` --cz-table-row-hover-bg: ${resolveToken(config.rowHoverBg)};`);
2494
+ if (config.stripedBg) vars.push(` --cz-table-striped-bg: ${resolveToken(config.stripedBg)};`);
2495
+ return `:root {
2496
+ ${vars.join("\n")}
2497
+ }
2498
+ `;
2499
+ }
2500
+ function generateTableBase() {
2501
+ return `.cz-table-wrapper {
2502
+ width: 100%;
2503
+ overflow-x: auto;
2504
+ border-radius: var(--cz-table-border-radius);
2505
+ }
2506
+
2507
+ .cz-table {
2508
+ width: 100%;
2509
+ border-collapse: collapse;
2510
+ font-size: var(--cz-font-size-sm);
2511
+ }
2512
+
2513
+ .cz-table-header {
2514
+ background-color: var(--cz-table-header-bg);
2515
+ }
2516
+
2517
+ .cz-table-head {
2518
+ padding: var(--cz-table-cell-padding, var(--cz-table-cell-padding-y) var(--cz-table-cell-padding-x));
2519
+ text-align: left;
2520
+ font-weight: var(--cz-table-header-font-weight);
2521
+ color: hsl(var(--cz-color-mutedFg));
2522
+ border-bottom: var(--cz-table-border-width) solid var(--cz-table-border-color);
2523
+ white-space: nowrap;
2524
+ }
2525
+
2526
+ .cz-table-body {
2527
+ color: hsl(var(--cz-color-fg));
2528
+ }
2529
+
2530
+ .cz-table-row {
2531
+ transition: background-color var(--cz-transition-fast);
2532
+ }
2533
+
2534
+ .cz-table-row:hover {
2535
+ background-color: var(--cz-table-row-hover-bg);
2536
+ }
2537
+
2538
+ .cz-table-cell {
2539
+ padding: var(--cz-table-cell-padding, var(--cz-table-cell-padding-y) var(--cz-table-cell-padding-x));
2540
+ border-bottom: var(--cz-table-border-width) solid var(--cz-table-border-color);
2541
+ }
2542
+
2543
+ .cz-table-footer {
2544
+ background-color: var(--cz-table-header-bg);
2545
+ font-weight: var(--cz-font-weight-medium);
2546
+ }
2547
+
2548
+ .cz-table-footer .cz-table-cell {
2549
+ border-bottom: none;
2550
+ border-top: var(--cz-table-border-width) solid var(--cz-table-border-color);
2551
+ }
2552
+
2553
+ /* Table Striped */
2554
+ .cz-table-striped .cz-table-row:nth-child(even) {
2555
+ background-color: var(--cz-table-striped-bg);
2556
+ }
2557
+
2558
+ /* Table Caption */
2559
+ .cz-table-caption {
2560
+ margin-top: 0.5rem;
2561
+ font-size: var(--cz-font-size-sm);
2562
+ color: hsl(var(--cz-color-mutedFg));
2563
+ text-align: center;
2564
+ }
2565
+ `;
2566
+ }
2567
+
2568
+ // cli/generators/data-table.ts
2569
+ function generateDataTableCSS(config) {
2570
+ let css = "/* ===== DATA TABLE ===== */\n\n";
2571
+ css += generateDataTableVariables(config);
2572
+ css += "\n";
2573
+ css += generateDataTableBase();
2574
+ css += "\n";
2575
+ if (config.customCSS) css += `/* Custom DataTable CSS */
2576
+ ${config.customCSS}
2577
+ `;
2578
+ return css;
2579
+ }
2580
+ function generateDataTableVariables(config) {
2581
+ const vars = [];
2582
+ if (config.containerBg) vars.push(` --cz-data-table-container-bg: ${resolveValue2(config.containerBg)};`);
2583
+ if (config.containerBorderRadius) {
2584
+ vars.push(` --cz-data-table-container-border-radius: ${resolveValue2(config.containerBorderRadius)};`);
2585
+ }
2586
+ if (config.containerBorderColor) {
2587
+ vars.push(` --cz-data-table-container-border-color: ${resolveValue2(config.containerBorderColor)};`);
2588
+ }
2589
+ if (config.containerShadow) {
2590
+ vars.push(` --cz-data-table-container-shadow: ${resolveValue2(config.containerShadow)};`);
2591
+ }
2592
+ if (config.headerCellPadding) {
2593
+ vars.push(` --cz-data-table-header-cell-padding: ${resolveValue2(config.headerCellPadding)};`);
2594
+ }
2595
+ if (config.headerFontSize) {
2596
+ vars.push(` --cz-data-table-header-font-size: ${resolveValue2(config.headerFontSize)};`);
2597
+ }
2598
+ if (config.headerFontWeight) {
2599
+ vars.push(` --cz-data-table-header-font-weight: ${resolveValue2(config.headerFontWeight)};`);
2600
+ }
2601
+ if (config.headerColor) vars.push(` --cz-data-table-header-color: ${resolveValue2(config.headerColor)};`);
2602
+ if (config.headerTextTransform) {
2603
+ vars.push(` --cz-data-table-header-text-transform: ${resolveValue2(config.headerTextTransform)};`);
2604
+ }
2605
+ if (config.headerLetterSpacing) {
2606
+ vars.push(` --cz-data-table-header-letter-spacing: ${resolveValue2(config.headerLetterSpacing)};`);
2607
+ }
2608
+ if (config.bodyCellPadding) {
2609
+ vars.push(` --cz-data-table-body-cell-padding: ${resolveValue2(config.bodyCellPadding)};`);
2610
+ }
2611
+ if (config.bodyFontSize) {
2612
+ vars.push(` --cz-data-table-body-font-size: ${resolveValue2(config.bodyFontSize)};`);
2613
+ }
2614
+ if (config.bodyColor) vars.push(` --cz-data-table-body-color: ${resolveValue2(config.bodyColor)};`);
2615
+ if (config.rowBorderColor) {
2616
+ vars.push(` --cz-data-table-row-border-color: ${resolveValue2(config.rowBorderColor)};`);
2617
+ }
2618
+ if (config.rowHoverBg) vars.push(` --cz-data-table-row-hover-bg: ${resolveValue2(config.rowHoverBg)};`);
2619
+ if (config.stripedRowBg) {
2620
+ vars.push(` --cz-data-table-striped-row-bg: ${resolveValue2(config.stripedRowBg)};`);
2621
+ }
2622
+ if (config.selectedRowBg) {
2623
+ vars.push(` --cz-data-table-selected-row-bg: ${resolveValue2(config.selectedRowBg)};`);
2624
+ }
2625
+ if (config.sortIconOpacity) {
2626
+ vars.push(` --cz-data-table-sort-icon-opacity: ${resolveValue2(config.sortIconOpacity)};`);
2627
+ }
2628
+ if (config.sortActiveColor) {
2629
+ vars.push(` --cz-data-table-sort-active-color: ${resolveValue2(config.sortActiveColor)};`);
2630
+ }
2631
+ if (config.paginationPadding) {
2632
+ vars.push(` --cz-data-table-pagination-padding: ${resolveValue2(config.paginationPadding)};`);
2633
+ }
2634
+ if (config.paginationGap) vars.push(` --cz-data-table-pagination-gap: ${resolveValue2(config.paginationGap)};`);
2635
+ if (config.paginationBorderColor) {
2636
+ vars.push(` --cz-data-table-pagination-border-color: ${resolveValue2(config.paginationBorderColor)};`);
2637
+ }
2638
+ if (config.paginationTextColor) {
2639
+ vars.push(` --cz-data-table-pagination-text-color: ${resolveValue2(config.paginationTextColor)};`);
2640
+ }
2641
+ if (config.paginationTextStrongColor) {
2642
+ vars.push(` --cz-data-table-pagination-text-strong-color: ${resolveValue2(config.paginationTextStrongColor)};`);
2643
+ }
2644
+ if (config.paginationButtonSize) {
2645
+ vars.push(` --cz-data-table-pagination-button-size: ${resolveValue2(config.paginationButtonSize)};`);
2646
+ }
2647
+ if (config.paginationButtonRadius) {
2648
+ vars.push(` --cz-data-table-pagination-button-radius: ${resolveValue2(config.paginationButtonRadius)};`);
2649
+ }
2650
+ if (config.paginationButtonHoverBg) {
2651
+ vars.push(` --cz-data-table-pagination-button-hover-bg: ${resolveValue2(config.paginationButtonHoverBg)};`);
2652
+ }
2653
+ if (config.paginationButtonBorderColor) {
2654
+ vars.push(` --cz-data-table-pagination-button-border-color: ${resolveValue2(config.paginationButtonBorderColor)};`);
2655
+ }
2656
+ if (config.paginationButtonColor) {
2657
+ vars.push(` --cz-data-table-pagination-button-color: ${resolveValue2(config.paginationButtonColor)};`);
2658
+ }
2659
+ if (config.paginationButtonDisabledColor) {
2660
+ vars.push(` --cz-data-table-pagination-button-disabled-color: ${resolveValue2(config.paginationButtonDisabledColor)};`);
2661
+ }
2662
+ if (config.emptyStateColor) {
2663
+ vars.push(` --cz-data-table-empty-state-color: ${resolveValue2(config.emptyStateColor)};`);
2664
+ }
2665
+ if (config.emptyStateTitleColor) {
2666
+ vars.push(` --cz-data-table-empty-state-title-color: ${resolveValue2(config.emptyStateTitleColor)};`);
2667
+ }
2668
+ if (config.emptyStateIconBg) {
2669
+ vars.push(` --cz-data-table-empty-state-icon-bg: ${resolveValue2(config.emptyStateIconBg)};`);
2670
+ }
2671
+ if (config.emptyStateIconColor) {
2672
+ vars.push(` --cz-data-table-empty-state-icon-color: ${resolveValue2(config.emptyStateIconColor)};`);
2673
+ }
2674
+ if (config.loadingShimmerBase) {
2675
+ vars.push(` --cz-data-table-loading-shimmer-base: ${resolveValue2(config.loadingShimmerBase)};`);
2676
+ }
2677
+ if (config.loadingShimmerHighlight) {
2678
+ vars.push(` --cz-data-table-loading-shimmer-highlight: ${resolveValue2(config.loadingShimmerHighlight)};`);
2679
+ }
2680
+ return `:root {
2681
+ ${vars.join("\n")}
2682
+ }
2683
+ `;
2684
+ }
2685
+ function resolveValue2(value) {
2686
+ if (!value.startsWith("$")) return value;
2687
+ if (/\s+\$/.test(value)) return value;
2688
+ return resolveToken(value);
2689
+ }
2690
+ function generateDataTableBase() {
2691
+ return `.cz-data-table-page-btn {
2692
+ transition: all var(--transition-fast, var(--cz-transition-fast));
2693
+ }
2694
+
2695
+ .cz-data-table-page-btn:hover:not(:disabled) {
2696
+ background: var(--cz-data-table-pagination-button-hover-bg, transparent);
2697
+ border-color: var(--cz-data-table-pagination-button-border-color, transparent);
2698
+ }
2699
+
2700
+ .cz-data-table-shimmer {
2701
+ background-size: 200% 100%;
2702
+ animation: cz-data-table-shimmer 1.5s infinite;
2703
+ }
2704
+
2705
+ @keyframes cz-data-table-shimmer {
2706
+ 0% { background-position: 200% 0; }
2707
+ 100% { background-position: -200% 0; }
2708
+ }
2709
+ `;
2710
+ }
2711
+
2712
+ // cli/generators/code.ts
2713
+ function generateCodeCSS(config) {
2714
+ let css = "/* ===== CODE ===== */\n\n";
2715
+ css += generateCodeVariables(config);
2716
+ css += "\n";
2717
+ css += generateCodeBase();
2718
+ css += "\n";
2719
+ if (config.customCSS) css += `/* Custom Code CSS */
2720
+ ${config.customCSS}
2721
+ `;
2722
+ return css;
2723
+ }
2724
+ function generateCodeVariables(config) {
2725
+ const vars = [];
2726
+ if (config.fontFamily) vars.push(` --cz-code-font-family: ${config.fontFamily};`);
2727
+ if (config.fontSize) vars.push(` --cz-code-font-size: ${resolveToken(config.fontSize)};`);
2728
+ if (config.paddingX) vars.push(` --cz-code-padding-x: ${config.paddingX};`);
2729
+ if (config.paddingY) vars.push(` --cz-code-padding-y: ${config.paddingY};`);
2730
+ if (config.borderRadius) vars.push(` --cz-code-border-radius: ${resolveToken(config.borderRadius)};`);
2731
+ if (config.bg) vars.push(` --cz-code-bg: ${resolveToken(config.bg)};`);
2732
+ if (config.color) vars.push(` --cz-code-color: ${resolveToken(config.color)};`);
2733
+ if (config.blockPadding) vars.push(` --cz-code-block-padding: ${resolveToken(config.blockPadding)};`);
2734
+ return `:root {
2735
+ ${vars.join("\n")}
2736
+ }
2737
+ `;
2738
+ }
2739
+ function generateCodeBase() {
2740
+ return `.cz-code {
2741
+ font-family: var(--cz-code-font-family);
2742
+ font-size: var(--cz-code-font-size);
2743
+ padding: var(--cz-code-padding-y) var(--cz-code-padding-x);
2744
+ border-radius: var(--cz-code-border-radius);
2745
+ background-color: var(--cz-code-bg);
2746
+ color: var(--cz-code-color);
2747
+ }
2748
+
2749
+ .cz-code-block {
2750
+ display: block;
2751
+ padding: var(--cz-code-block-padding);
2752
+ overflow-x: auto;
2753
+ white-space: pre;
2754
+ }
2755
+ `;
2756
+ }
2757
+
2758
+ // cli/generators/kbd.ts
2759
+ function generateKbdCSS(config) {
2760
+ let css = "/* ===== KBD ===== */\n\n";
2761
+ css += generateKbdVariables(config);
2762
+ css += "\n";
2763
+ css += generateKbdBase();
2764
+ css += "\n";
2765
+ if (config.customCSS) css += `/* Custom Kbd CSS */
2766
+ ${config.customCSS}
2767
+ `;
2768
+ return css;
2769
+ }
2770
+ function generateKbdVariables(config) {
2771
+ const vars = [];
2772
+ if (config.fontFamily) vars.push(` --cz-kbd-font-family: ${config.fontFamily};`);
2773
+ if (config.fontSize) vars.push(` --cz-kbd-font-size: ${resolveToken(config.fontSize)};`);
2774
+ if (config.fontWeight) vars.push(` --cz-kbd-font-weight: ${resolveToken(config.fontWeight)};`);
2775
+ if (config.paddingX) vars.push(` --cz-kbd-padding-x: ${config.paddingX};`);
2776
+ if (config.paddingY) vars.push(` --cz-kbd-padding-y: ${config.paddingY};`);
2777
+ if (config.borderRadius) vars.push(` --cz-kbd-border-radius: ${resolveToken(config.borderRadius)};`);
2778
+ if (config.bg) vars.push(` --cz-kbd-bg: ${resolveToken(config.bg)};`);
2779
+ if (config.color) vars.push(` --cz-kbd-color: ${resolveToken(config.color)};`);
2780
+ if (config.borderColor) vars.push(` --cz-kbd-border-color: ${resolveToken(config.borderColor)};`);
2781
+ if (config.shadow) vars.push(` --cz-kbd-shadow: ${resolveToken(config.shadow)};`);
2782
+ return `:root {
2783
+ ${vars.join("\n")}
2784
+ }
2785
+ `;
2786
+ }
2787
+ function generateKbdBase() {
2788
+ return `.cz-kbd {
2789
+ display: inline-flex;
2790
+ align-items: center;
2791
+ justify-content: center;
2792
+ font-family: var(--cz-kbd-font-family);
2793
+ font-size: var(--cz-kbd-font-size);
2794
+ font-weight: var(--cz-kbd-font-weight);
2795
+ padding: var(--cz-kbd-padding-y) var(--cz-kbd-padding-x);
2796
+ border-radius: var(--cz-kbd-border-radius);
2797
+ background-color: var(--cz-kbd-bg);
2798
+ color: var(--cz-kbd-color);
2799
+ border: 1px solid var(--cz-kbd-border-color);
2800
+ box-shadow: var(--cz-kbd-shadow);
2801
+ min-width: 1.5rem;
2802
+ }
2803
+ `;
2804
+ }
2805
+
2806
+ // cli/generators/tag.ts
2807
+ function generateTagCSS(config) {
2808
+ let css = "/* ===== TAG ===== */\n\n";
2809
+ css += generateTagVariables(config);
2810
+ css += "\n";
2811
+ css += generateTagBase();
2812
+ css += "\n";
2813
+ if (config.customCSS) css += `/* Custom Tag CSS */
2814
+ ${config.customCSS}
2815
+ `;
2816
+ return css;
2817
+ }
2818
+ function generateTagVariables(config) {
2819
+ const vars = [];
2820
+ if (config.paddingX) vars.push(` --cz-tag-padding-x: ${config.paddingX};`);
2821
+ if (config.paddingY) vars.push(` --cz-tag-padding-y: ${config.paddingY};`);
2822
+ if (config.fontSize) vars.push(` --cz-tag-font-size: ${resolveToken(config.fontSize)};`);
2823
+ if (config.fontWeight) vars.push(` --cz-tag-font-weight: ${resolveToken(config.fontWeight)};`);
2824
+ if (config.borderRadius) vars.push(` --cz-tag-border-radius: ${resolveToken(config.borderRadius)};`);
2825
+ if (config.gap) vars.push(` --cz-tag-gap: ${config.gap};`);
2826
+ if (config.variants) {
2827
+ for (const [name, variant] of Object.entries(config.variants)) {
2828
+ if (variant.bg) vars.push(` --cz-tag-${name}-bg: ${resolveToken(variant.bg)};`);
2829
+ if (variant.color) vars.push(` --cz-tag-${name}-color: ${resolveToken(variant.color)};`);
2830
+ }
2831
+ }
2832
+ return `:root {
2833
+ ${vars.join("\n")}
2834
+ }
2835
+ `;
2836
+ }
2837
+ function generateTagBase() {
2838
+ return `.cz-tag {
2839
+ display: inline-flex;
2840
+ align-items: center;
2841
+ gap: var(--cz-tag-gap);
2842
+ padding: var(--cz-tag-padding-y) var(--cz-tag-padding-x);
2843
+ border-radius: var(--cz-tag-border-radius);
2844
+ font-size: var(--cz-tag-font-size);
2845
+ font-weight: var(--cz-tag-font-weight);
2846
+ white-space: nowrap;
2847
+ }
2848
+
2849
+ .cz-tag-icon {
2850
+ width: 0.875rem;
2851
+ height: 0.875rem;
2852
+ flex-shrink: 0;
2853
+ }
2854
+
2855
+ .cz-tag-close {
2856
+ display: inline-flex;
2857
+ align-items: center;
2858
+ justify-content: center;
2859
+ width: 1rem;
2860
+ height: 1rem;
2861
+ margin-left: 0.25rem;
2862
+ margin-right: -0.25rem;
2863
+ border-radius: var(--cz-radius-sm);
2864
+ cursor: pointer;
2865
+ opacity: 0.7;
2866
+ transition: opacity var(--cz-transition-fast);
2867
+ }
2868
+
2869
+ .cz-tag-close:hover {
2870
+ opacity: 1;
2871
+ }
2872
+
2873
+ /* Tag Variants */
2874
+ .cz-tag-default {
2875
+ background: var(--cz-tag-default-bg);
2876
+ color: var(--cz-tag-default-color);
2877
+ }
2878
+ .cz-tag-primary {
2879
+ background: var(--cz-tag-primary-bg);
2880
+ color: var(--cz-tag-primary-color);
2881
+ }
2882
+ .cz-tag-success {
2883
+ background: var(--cz-tag-success-bg);
2884
+ color: var(--cz-tag-success-color);
2885
+ }
2886
+ .cz-tag-warning {
2887
+ background: var(--cz-tag-warning-bg);
2888
+ color: var(--cz-tag-warning-color);
2889
+ }
2890
+ .cz-tag-danger {
2891
+ background: var(--cz-tag-danger-bg);
2892
+ color: var(--cz-tag-danger-color);
2893
+ }
2894
+
2895
+ /* Tag Group */
2896
+ .cz-tag-group {
2897
+ display: flex;
2898
+ flex-wrap: wrap;
2899
+ gap: 0.5rem;
2900
+ }
2901
+ `;
2902
+ }
2903
+
2904
+ // cli/generators/alert.ts
2905
+ function generateAlertCSS(config) {
2906
+ let css = "/* ===== ALERT ===== */\n\n";
2907
+ css += generateAlertVariables(config);
2908
+ css += "\n";
2909
+ css += generateAlertBase();
2910
+ css += "\n";
2911
+ css += generateAlertVariants(config);
2912
+ css += "\n";
2913
+ if (config.customCSS) css += `/* Custom Alert CSS */
2914
+ ${config.customCSS}
2915
+ `;
2916
+ return css;
2917
+ }
2918
+ function generateAlertVariables(config) {
2919
+ const vars = [];
2920
+ if (config.paddingX) vars.push(` --cz-alert-padding-x: ${resolveToken(config.paddingX)};`);
2921
+ if (config.paddingY) vars.push(` --cz-alert-padding-y: ${resolveToken(config.paddingY)};`);
2922
+ if (config.borderRadius) vars.push(` --cz-alert-border-radius: ${resolveToken(config.borderRadius)};`);
2923
+ if (config.borderWidth) vars.push(` --cz-alert-border-width: ${config.borderWidth};`);
2924
+ if (config.titleFontSize) vars.push(` --cz-alert-title-font-size: ${resolveToken(config.titleFontSize)};`);
2925
+ if (config.titleFontWeight) vars.push(` --cz-alert-title-font-weight: ${resolveToken(config.titleFontWeight)};`);
2926
+ if (config.contentFontSize) vars.push(` --cz-alert-content-font-size: ${resolveToken(config.contentFontSize)};`);
2927
+ if (config.variants) {
2928
+ for (const [name, variant] of Object.entries(config.variants)) {
2929
+ if (variant.bg) vars.push(` --cz-alert-${name}-bg: ${resolveToken(variant.bg)};`);
2930
+ if (variant.borderColor) vars.push(` --cz-alert-${name}-border-color: ${resolveToken(variant.borderColor)};`);
2931
+ if (variant.color) vars.push(` --cz-alert-${name}-color: ${resolveToken(variant.color)};`);
2932
+ }
2933
+ }
2934
+ return `:root {
2935
+ ${vars.join("\n")}
2936
+ }
2937
+ `;
2938
+ }
2939
+ function generateAlertBase() {
2940
+ return `.cz-alert {
2941
+ display: flex;
2942
+ gap: 0.75rem;
2943
+ padding: var(--cz-alert-padding-y) var(--cz-alert-padding-x);
2944
+ border-radius: var(--cz-alert-border-radius);
2945
+ border: var(--cz-alert-border-width) solid transparent;
2946
+ }
2947
+
2948
+ .cz-alert-icon {
2949
+ flex-shrink: 0;
2950
+ width: 1.25rem;
2951
+ height: 1.25rem;
2952
+ margin-top: 0.125rem;
2953
+ }
2954
+
2955
+ .cz-alert-content {
2956
+ display: flex;
2957
+ flex-direction: column;
2958
+ gap: 0.25rem;
2959
+ }
2960
+
2961
+ .cz-alert-title {
2962
+ font-size: var(--cz-alert-title-font-size);
2963
+ font-weight: var(--cz-alert-title-font-weight);
2964
+ line-height: var(--cz-font-lineHeight-tight);
2965
+ }
2966
+
2967
+ .cz-alert-description {
2968
+ font-size: var(--cz-alert-content-font-size);
2969
+ opacity: 0.9;
2970
+ }
2971
+ `;
2972
+ }
2973
+ function generateAlertVariants(config) {
2974
+ let css = "/* Alert Variants */\n";
2975
+ const defaultVariants = ["info", "success", "warning", "danger"];
2976
+ for (const name of defaultVariants) {
2977
+ css += `.cz-alert-${name} {
2978
+ background: var(--cz-alert-${name}-bg);
2979
+ border-color: var(--cz-alert-${name}-border-color);
2980
+ color: var(--cz-alert-${name}-color);
2981
+ }
2982
+ .cz-alert-${name} .cz-alert-icon { color: var(--cz-alert-${name}-color); }
2983
+ `;
2984
+ }
2985
+ return css;
2986
+ }
2987
+
2988
+ // cli/generators/toast.ts
2989
+ function generateToastCSS(config) {
2990
+ let css = "/* ===== TOAST ===== */\n\n";
2991
+ css += generateToastVariables(config);
2992
+ css += "\n";
2993
+ css += generateToastBase();
2994
+ css += "\n";
2995
+ if (config.customCSS) css += `/* Custom Toast CSS */
2996
+ ${config.customCSS}
2997
+ `;
2998
+ return css;
2999
+ }
3000
+ function generateToastVariables(config) {
3001
+ const vars = [];
3002
+ if (config.bg) vars.push(` --cz-toast-bg: ${resolveToken(config.bg)};`);
3003
+ if (config.borderRadius) vars.push(` --cz-toast-border-radius: ${resolveToken(config.borderRadius)};`);
3004
+ if (config.borderColor) vars.push(` --cz-toast-border-color: ${resolveToken(config.borderColor)};`);
3005
+ if (config.shadow) vars.push(` --cz-toast-shadow: ${resolveToken(config.shadow)};`);
3006
+ if (config.padding) vars.push(` --cz-toast-padding: ${resolveToken(config.padding)};`);
3007
+ if (config.gap) vars.push(` --cz-toast-gap: ${config.gap};`);
3008
+ if (config.titleFontSize) vars.push(` --cz-toast-title-font-size: ${resolveToken(config.titleFontSize)};`);
3009
+ if (config.titleFontWeight) vars.push(` --cz-toast-title-font-weight: ${resolveToken(config.titleFontWeight)};`);
3010
+ if (config.descriptionFontSize) vars.push(` --cz-toast-description-font-size: ${resolveToken(config.descriptionFontSize)};`);
3011
+ return `:root {
3012
+ ${vars.join("\n")}
3013
+ }
3014
+ `;
3015
+ }
3016
+ function generateToastBase() {
3017
+ return `.cz-toast-viewport {
3018
+ position: fixed;
3019
+ bottom: 0;
3020
+ right: 0;
3021
+ display: flex;
3022
+ flex-direction: column;
3023
+ gap: 0.5rem;
3024
+ padding: 1rem;
3025
+ max-width: 420px;
3026
+ width: 100%;
3027
+ z-index: 100;
3028
+ pointer-events: none;
3029
+ }
3030
+
3031
+ .cz-toast {
3032
+ display: flex;
3033
+ gap: var(--cz-toast-gap);
3034
+ padding: var(--cz-toast-padding);
3035
+ background-color: var(--cz-toast-bg);
3036
+ border-radius: var(--cz-toast-border-radius);
3037
+ border: 1px solid var(--cz-toast-border-color);
3038
+ box-shadow: var(--cz-toast-shadow);
3039
+ pointer-events: auto;
3040
+ animation: cz-toast-slide-in 300ms ease;
3041
+ }
3042
+
3043
+ .cz-toast[data-state="closed"] {
3044
+ animation: cz-toast-slide-out 200ms ease forwards;
3045
+ }
3046
+
3047
+ .cz-toast-icon {
3048
+ flex-shrink: 0;
3049
+ width: 1.25rem;
3050
+ height: 1.25rem;
3051
+ }
3052
+
3053
+ .cz-toast-content {
3054
+ display: flex;
3055
+ flex-direction: column;
3056
+ gap: 0.25rem;
3057
+ flex: 1;
3058
+ min-width: 0;
3059
+ }
3060
+
3061
+ .cz-toast-title {
3062
+ font-size: var(--cz-toast-title-font-size);
3063
+ font-weight: var(--cz-toast-title-font-weight);
3064
+ color: hsl(var(--cz-color-fg));
3065
+ }
3066
+
3067
+ .cz-toast-description {
3068
+ font-size: var(--cz-toast-description-font-size);
3069
+ color: hsl(var(--cz-color-mutedFg));
3070
+ }
3071
+
3072
+ .cz-toast-close {
3073
+ position: absolute;
3074
+ top: 0.5rem;
3075
+ right: 0.5rem;
3076
+ padding: 0.25rem;
3077
+ border-radius: var(--cz-radius-sm);
3078
+ background: transparent;
3079
+ border: none;
3080
+ cursor: pointer;
3081
+ color: hsl(var(--cz-color-mutedFg));
3082
+ opacity: 0.5;
3083
+ transition: opacity var(--cz-transition-fast);
3084
+ }
3085
+
3086
+ .cz-toast-close:hover {
3087
+ opacity: 1;
3088
+ }
3089
+
3090
+ .cz-toast-action {
3091
+ margin-top: 0.5rem;
3092
+ }
3093
+
3094
+ /* Toast Variants */
3095
+ .cz-toast-success .cz-toast-icon { color: hsl(var(--cz-color-success)); }
3096
+ .cz-toast-warning .cz-toast-icon { color: hsl(var(--cz-color-warning)); }
3097
+ .cz-toast-danger .cz-toast-icon { color: hsl(var(--cz-color-danger)); }
3098
+
3099
+ @keyframes cz-toast-slide-in {
3100
+ from { transform: translateX(100%); opacity: 0; }
3101
+ to { transform: translateX(0); opacity: 1; }
3102
+ }
3103
+
3104
+ @keyframes cz-toast-slide-out {
3105
+ from { transform: translateX(0); opacity: 1; }
3106
+ to { transform: translateX(100%); opacity: 0; }
3107
+ }
3108
+ `;
3109
+ }
3110
+
3111
+ // cli/generators/tooltip.ts
3112
+ function generateTooltipCSS(config) {
3113
+ let css = "/* ===== TOOLTIP ===== */\n\n";
3114
+ css += generateTooltipVariables(config);
3115
+ css += "\n";
3116
+ css += generateTooltipBase();
3117
+ css += "\n";
3118
+ if (config.customCSS) css += `/* Custom Tooltip CSS */
3119
+ ${config.customCSS}
3120
+ `;
3121
+ return css;
3122
+ }
3123
+ function generateTooltipVariables(config) {
3124
+ const vars = [];
3125
+ if (config.paddingX) vars.push(` --cz-tooltip-padding-x: ${config.paddingX};`);
3126
+ if (config.paddingY) vars.push(` --cz-tooltip-padding-y: ${config.paddingY};`);
3127
+ if (config.fontSize) vars.push(` --cz-tooltip-font-size: ${resolveToken(config.fontSize)};`);
3128
+ if (config.borderRadius) vars.push(` --cz-tooltip-border-radius: ${resolveToken(config.borderRadius)};`);
3129
+ if (config.bg) vars.push(` --cz-tooltip-bg: ${resolveToken(config.bg)};`);
3130
+ if (config.color) vars.push(` --cz-tooltip-color: ${resolveToken(config.color)};`);
3131
+ if (config.shadow) vars.push(` --cz-tooltip-shadow: ${resolveToken(config.shadow)};`);
3132
+ if (config.offset) vars.push(` --cz-tooltip-offset: ${config.offset};`);
3133
+ return `:root {
3134
+ ${vars.join("\n")}
3135
+ }
3136
+ `;
3137
+ }
3138
+ function generateTooltipBase() {
3139
+ return `.cz-tooltip-content {
3140
+ padding: var(--cz-tooltip-padding-y) var(--cz-tooltip-padding-x);
3141
+ font-size: var(--cz-tooltip-font-size);
3142
+ border-radius: var(--cz-tooltip-border-radius);
3143
+ background-color: var(--cz-tooltip-bg);
3144
+ color: var(--cz-tooltip-color);
3145
+ box-shadow: var(--cz-tooltip-shadow);
3146
+ z-index: 50;
3147
+ animation: cz-tooltip-fade-in 150ms ease;
3148
+ }
3149
+
3150
+ .cz-tooltip-arrow {
3151
+ fill: var(--cz-tooltip-bg);
3152
+ }
3153
+
3154
+ @keyframes cz-tooltip-fade-in {
3155
+ from { opacity: 0; transform: scale(0.95); }
3156
+ to { opacity: 1; transform: scale(1); }
3157
+ }
3158
+ `;
3159
+ }
3160
+
3161
+ // cli/generators/progress.ts
3162
+ function generateProgressCSS(config) {
3163
+ let css = "/* ===== PROGRESS ===== */\n\n";
3164
+ css += generateProgressVariables(config);
3165
+ css += "\n";
3166
+ css += generateProgressBase();
3167
+ css += "\n";
3168
+ css += generateProgressSizes();
3169
+ css += "\n";
3170
+ css += generateProgressVariants(config);
3171
+ css += "\n";
3172
+ if (config.customCSS) css += `/* Custom Progress CSS */
3173
+ ${config.customCSS}
3174
+ `;
3175
+ return css;
3176
+ }
3177
+ function generateProgressVariables(config) {
3178
+ const vars = [];
3179
+ if (config.height) {
3180
+ for (const [size, value] of Object.entries(config.height)) {
3181
+ vars.push(` --cz-progress-height-${size}: ${value};`);
3182
+ }
3183
+ }
3184
+ if (config.borderRadius) vars.push(` --cz-progress-border-radius: ${resolveToken(config.borderRadius)};`);
3185
+ if (config.bg) vars.push(` --cz-progress-bg: ${resolveToken(config.bg)};`);
3186
+ if (config.transition) vars.push(` --cz-progress-transition: ${resolveToken(config.transition)};`);
3187
+ if (config.barColors) {
3188
+ for (const [name, value] of Object.entries(config.barColors)) {
3189
+ vars.push(` --cz-progress-bar-${name}: ${resolveToken(value)};`);
3190
+ }
3191
+ }
3192
+ return `:root {
3193
+ ${vars.join("\n")}
3194
+ }
3195
+ `;
3196
+ }
3197
+ function generateProgressBase() {
3198
+ return `.cz-progress {
3199
+ position: relative;
3200
+ overflow: hidden;
3201
+ background-color: var(--cz-progress-bg);
3202
+ border-radius: var(--cz-progress-border-radius);
3203
+ width: 100%;
3204
+ }
3205
+
3206
+ .cz-progress-bar {
3207
+ height: 100%;
3208
+ background-color: var(--cz-progress-bar-default);
3209
+ border-radius: var(--cz-progress-border-radius);
3210
+ transition: width var(--cz-progress-transition);
3211
+ }
3212
+
3213
+ .cz-progress-indeterminate .cz-progress-bar {
3214
+ width: 50% !important;
3215
+ animation: cz-progress-indeterminate 1.5s ease-in-out infinite;
3216
+ }
3217
+
3218
+ @keyframes cz-progress-indeterminate {
3219
+ 0% { transform: translateX(-100%); }
3220
+ 100% { transform: translateX(300%); }
3221
+ }
3222
+ `;
3223
+ }
3224
+ function generateProgressSizes() {
3225
+ return `/* Progress Sizes */
3226
+ .cz-progress-sm { height: var(--cz-progress-height-sm); }
3227
+ .cz-progress-md { height: var(--cz-progress-height-md); }
3228
+ .cz-progress-lg { height: var(--cz-progress-height-lg); }
3229
+ `;
3230
+ }
3231
+ function generateProgressVariants(config) {
3232
+ let css = "/* Progress Variants */\n";
3233
+ const variants = ["default", "success", "warning", "danger"];
3234
+ for (const name of variants) {
3235
+ css += `.cz-progress-${name} .cz-progress-bar { background-color: var(--cz-progress-bar-${name}); }
3236
+ `;
3237
+ }
3238
+ return css;
3239
+ }
3240
+
3241
+ // cli/generators/spinner.ts
3242
+ function generateSpinnerCSS(config) {
3243
+ let css = "/* ===== SPINNER ===== */\n\n";
3244
+ css += generateSpinnerVariables(config);
3245
+ css += "\n";
3246
+ css += generateSpinnerBase();
3247
+ css += "\n";
3248
+ css += generateSpinnerSizes();
3249
+ css += "\n";
3250
+ if (config.customCSS) css += `/* Custom Spinner CSS */
3251
+ ${config.customCSS}
3252
+ `;
3253
+ return css;
3254
+ }
3255
+ function generateSpinnerVariables(config) {
3256
+ const vars = [];
3257
+ if (config.size) {
3258
+ for (const [size, value] of Object.entries(config.size)) {
3259
+ vars.push(` --cz-spinner-size-${size}: ${value};`);
3260
+ }
3261
+ }
3262
+ if (config.borderWidth) {
3263
+ for (const [size, value] of Object.entries(config.borderWidth)) {
3264
+ vars.push(` --cz-spinner-border-width-${size}: ${value};`);
3265
+ }
3266
+ }
3267
+ if (config.color) vars.push(` --cz-spinner-color: ${resolveToken(config.color)};`);
3268
+ if (config.trackColor) vars.push(` --cz-spinner-track-color: ${resolveToken(config.trackColor)};`);
3269
+ if (config.animationDuration) vars.push(` --cz-spinner-duration: ${config.animationDuration};`);
3270
+ return `:root {
3271
+ ${vars.join("\n")}
3272
+ }
3273
+ `;
3274
+ }
3275
+ function generateSpinnerBase() {
3276
+ return `.cz-spinner {
3277
+ display: inline-block;
3278
+ border-radius: var(--cz-radius-full);
3279
+ border-style: solid;
3280
+ border-color: var(--cz-spinner-track-color);
3281
+ border-top-color: var(--cz-spinner-color);
3282
+ animation: cz-spin var(--cz-spinner-duration) linear infinite;
3283
+ }
3284
+ `;
3285
+ }
3286
+ function generateSpinnerSizes() {
3287
+ return `/* Spinner Sizes */
3288
+ .cz-spinner-sm {
3289
+ width: var(--cz-spinner-size-sm);
3290
+ height: var(--cz-spinner-size-sm);
3291
+ border-width: var(--cz-spinner-border-width-sm);
3292
+ }
3293
+ .cz-spinner-md {
3294
+ width: var(--cz-spinner-size-md);
3295
+ height: var(--cz-spinner-size-md);
3296
+ border-width: var(--cz-spinner-border-width-md);
3297
+ }
3298
+ .cz-spinner-lg {
3299
+ width: var(--cz-spinner-size-lg);
3300
+ height: var(--cz-spinner-size-lg);
3301
+ border-width: var(--cz-spinner-border-width-lg);
3302
+ }
3303
+ `;
3304
+ }
3305
+
3306
+ // cli/generators/skeleton.ts
3307
+ function generateSkeletonCSS(config) {
3308
+ let css = "/* ===== SKELETON ===== */\n\n";
3309
+ css += generateSkeletonVariables(config);
3310
+ css += "\n";
3311
+ css += generateSkeletonBase();
3312
+ css += "\n";
3313
+ if (config.customCSS) css += `/* Custom Skeleton CSS */
3314
+ ${config.customCSS}
3315
+ `;
3316
+ return css;
3317
+ }
3318
+ function generateSkeletonVariables(config) {
3319
+ const vars = [];
3320
+ if (config.bg) vars.push(` --cz-skeleton-bg: ${resolveToken(config.bg)};`);
3321
+ if (config.borderRadius) vars.push(` --cz-skeleton-border-radius: ${resolveToken(config.borderRadius)};`);
3322
+ if (config.animationDuration) vars.push(` --cz-skeleton-duration: ${config.animationDuration};`);
3323
+ return `:root {
3324
+ ${vars.join("\n")}
3325
+ }
3326
+ `;
3327
+ }
3328
+ function generateSkeletonBase() {
3329
+ return `.cz-skeleton {
3330
+ background-color: var(--cz-skeleton-bg);
3331
+ border-radius: var(--cz-skeleton-border-radius);
3332
+ animation: cz-skeleton-pulse var(--cz-skeleton-duration) ease-in-out infinite;
3333
+ }
3334
+
3335
+ .cz-skeleton-circle {
3336
+ border-radius: var(--cz-radius-full);
3337
+ }
3338
+
3339
+ .cz-skeleton-text {
3340
+ height: 1rem;
3341
+ width: 100%;
3342
+ }
3343
+
3344
+ @keyframes cz-skeleton-pulse {
3345
+ 0%, 100% { opacity: 1; }
3346
+ 50% { opacity: 0.5; }
3347
+ }
3348
+ `;
3349
+ }
3350
+
3351
+ // cli/generators/tabs.ts
3352
+ function generateTabsCSS(config) {
3353
+ let css = "/* ===== TABS ===== */\n\n";
3354
+ css += generateTabsVariables(config);
3355
+ css += "\n";
3356
+ css += generateTabsBase();
3357
+ css += "\n";
3358
+ if (config.customCSS) css += `/* Custom Tabs CSS */
3359
+ ${config.customCSS}
3360
+ `;
3361
+ return css;
3362
+ }
3363
+ function generateTabsVariables(config) {
3364
+ const vars = [];
3365
+ if (config.listBorderWidth) vars.push(` --cz-tabs-list-border-width: ${config.listBorderWidth};`);
3366
+ if (config.listBorderColor) vars.push(` --cz-tabs-list-border-color: ${resolveToken(config.listBorderColor)};`);
3367
+ if (config.listGap) vars.push(` --cz-tabs-list-gap: ${resolveToken(config.listGap)};`);
3368
+ if (config.triggerPaddingX) vars.push(` --cz-tabs-trigger-padding-x: ${resolveToken(config.triggerPaddingX)};`);
3369
+ if (config.triggerPaddingY) vars.push(` --cz-tabs-trigger-padding-y: ${resolveToken(config.triggerPaddingY)};`);
3370
+ if (config.triggerPaddingXSm) vars.push(` --cz-tabs-trigger-padding-x-sm: ${resolveToken(config.triggerPaddingXSm)};`);
3371
+ if (config.triggerPaddingYSm) vars.push(` --cz-tabs-trigger-padding-y-sm: ${resolveToken(config.triggerPaddingYSm)};`);
3372
+ if (config.triggerPaddingXLg) vars.push(` --cz-tabs-trigger-padding-x-lg: ${resolveToken(config.triggerPaddingXLg)};`);
3373
+ if (config.triggerPaddingYLg) vars.push(` --cz-tabs-trigger-padding-y-lg: ${resolveToken(config.triggerPaddingYLg)};`);
3374
+ if (config.triggerFontSize) vars.push(` --cz-tabs-trigger-font-size: ${resolveToken(config.triggerFontSize)};`);
3375
+ if (config.triggerFontSizeSm) vars.push(` --cz-tabs-trigger-font-size-sm: ${resolveToken(config.triggerFontSizeSm)};`);
3376
+ if (config.triggerFontSizeLg) vars.push(` --cz-tabs-trigger-font-size-lg: ${resolveToken(config.triggerFontSizeLg)};`);
3377
+ if (config.triggerFontWeight) vars.push(` --cz-tabs-trigger-font-weight: ${resolveToken(config.triggerFontWeight)};`);
3378
+ if (config.triggerColor) vars.push(` --cz-tabs-trigger-color: ${resolveToken(config.triggerColor)};`);
3379
+ if (config.triggerActiveColor) vars.push(` --cz-tabs-trigger-active-color: ${resolveToken(config.triggerActiveColor)};`);
3380
+ if (config.triggerActiveBorderColor) vars.push(` --cz-tabs-trigger-active-border-color: ${resolveToken(config.triggerActiveBorderColor)};`);
3381
+ if (config.triggerGap) vars.push(` --cz-tabs-trigger-gap: ${resolveToken(config.triggerGap)};`);
3382
+ if (config.triggerRadius) vars.push(` --cz-tabs-trigger-radius: ${resolveToken(config.triggerRadius)};`);
3383
+ if (config.triggerBorderWidth) vars.push(` --cz-tabs-trigger-border-width: ${config.triggerBorderWidth};`);
3384
+ if (config.triggerTransition) vars.push(` --cz-tabs-trigger-transition: ${resolveToken(config.triggerTransition)};`);
3385
+ if (config.iconSize) vars.push(` --cz-tabs-icon-size: ${resolveToken(config.iconSize)};`);
3386
+ if (config.countPaddingX) vars.push(` --cz-tabs-count-padding-x: ${resolveToken(config.countPaddingX)};`);
3387
+ if (config.countMinWidth) vars.push(` --cz-tabs-count-min-width: ${resolveToken(config.countMinWidth)};`);
3388
+ if (config.countHeight) vars.push(` --cz-tabs-count-height: ${resolveToken(config.countHeight)};`);
3389
+ if (config.countFontSize) vars.push(` --cz-tabs-count-font-size: ${resolveToken(config.countFontSize)};`);
3390
+ if (config.countFontWeight) vars.push(` --cz-tabs-count-font-weight: ${resolveToken(config.countFontWeight)};`);
3391
+ if (config.countRadius) vars.push(` --cz-tabs-count-radius: ${resolveToken(config.countRadius)};`);
3392
+ if (config.countBg) vars.push(` --cz-tabs-count-bg: ${resolveToken(config.countBg)};`);
3393
+ if (config.countColor) vars.push(` --cz-tabs-count-color: ${resolveToken(config.countColor)};`);
3394
+ if (config.countActiveBg) vars.push(` --cz-tabs-count-active-bg: ${resolveToken(config.countActiveBg)};`);
3395
+ if (config.countActiveColor) vars.push(` --cz-tabs-count-active-color: ${resolveToken(config.countActiveColor)};`);
3396
+ if (config.pillsListGap) vars.push(` --cz-tabs-pills-list-gap: ${resolveToken(config.pillsListGap)};`);
3397
+ if (config.pillsTriggerBg) vars.push(` --cz-tabs-pills-trigger-bg: ${resolveToken(config.pillsTriggerBg)};`);
3398
+ if (config.pillsTriggerColor) vars.push(` --cz-tabs-pills-trigger-color: ${resolveToken(config.pillsTriggerColor)};`);
3399
+ if (config.pillsTriggerBorderColor) vars.push(` --cz-tabs-pills-trigger-border-color: ${resolveToken(config.pillsTriggerBorderColor)};`);
3400
+ if (config.pillsTriggerHoverBg) vars.push(` --cz-tabs-pills-trigger-hover-bg: ${resolveToken(config.pillsTriggerHoverBg)};`);
3401
+ if (config.pillsTriggerHoverColor) vars.push(` --cz-tabs-pills-trigger-hover-color: ${resolveToken(config.pillsTriggerHoverColor)};`);
3402
+ if (config.pillsTriggerActiveBg) vars.push(` --cz-tabs-pills-trigger-active-bg: ${resolveToken(config.pillsTriggerActiveBg)};`);
3403
+ if (config.pillsTriggerActiveColor) vars.push(` --cz-tabs-pills-trigger-active-color: ${resolveToken(config.pillsTriggerActiveColor)};`);
3404
+ if (config.pillsTriggerActiveBorderColor) vars.push(` --cz-tabs-pills-trigger-active-border-color: ${resolveToken(config.pillsTriggerActiveBorderColor)};`);
3405
+ if (config.pillsTriggerRadius) vars.push(` --cz-tabs-pills-trigger-radius: ${resolveToken(config.pillsTriggerRadius)};`);
3406
+ if (config.enclosedListBg) vars.push(` --cz-tabs-enclosed-list-bg: ${resolveToken(config.enclosedListBg)};`);
3407
+ if (config.enclosedListPadding) vars.push(` --cz-tabs-enclosed-list-padding: ${resolveToken(config.enclosedListPadding)};`);
3408
+ if (config.enclosedListRadius) vars.push(` --cz-tabs-enclosed-list-radius: ${resolveToken(config.enclosedListRadius)};`);
3409
+ if (config.enclosedTriggerColor) vars.push(` --cz-tabs-enclosed-trigger-color: ${resolveToken(config.enclosedTriggerColor)};`);
3410
+ if (config.enclosedTriggerActiveBg) vars.push(` --cz-tabs-enclosed-trigger-active-bg: ${resolveToken(config.enclosedTriggerActiveBg)};`);
3411
+ if (config.enclosedTriggerActiveColor) vars.push(` --cz-tabs-enclosed-trigger-active-color: ${resolveToken(config.enclosedTriggerActiveColor)};`);
3412
+ if (config.enclosedTriggerRadius) vars.push(` --cz-tabs-enclosed-trigger-radius: ${resolveToken(config.enclosedTriggerRadius)};`);
3413
+ if (config.enclosedTriggerActiveShadow) vars.push(` --cz-tabs-enclosed-trigger-active-shadow: ${resolveToken(config.enclosedTriggerActiveShadow)};`);
3414
+ if (config.contentPadding) vars.push(` --cz-tabs-content-padding: ${resolveToken(config.contentPadding)};`);
3415
+ if (config.states?.hover?.color) vars.push(` --cz-tabs-trigger-hover-color: ${resolveToken(config.states.hover.color)};`);
3416
+ if (config.states?.focus?.ringWidth) vars.push(` --cz-tabs-trigger-focus-ring-width: ${config.states.focus.ringWidth};`);
3417
+ if (config.states?.focus?.ringColor) vars.push(` --cz-tabs-trigger-focus-ring-color: ${resolveToken(config.states.focus.ringColor)};`);
3418
+ return `:root {
3419
+ ${vars.join("\n")}
3420
+ }
3421
+ `;
3422
+ }
3423
+ function generateTabsBase() {
3424
+ return `.cz-tabs {
3425
+ display: flex;
3426
+ flex-direction: column;
3427
+ width: 100%;
3428
+ }
3429
+
3430
+ .cz-tabs-list {
3431
+ display: flex;
3432
+ align-items: center;
3433
+ border-bottom: var(--cz-tabs-list-border-width) solid var(--cz-tabs-list-border-color);
3434
+ gap: var(--cz-tabs-list-gap);
3435
+ padding-bottom: 0;
3436
+ }
3437
+
3438
+ .cz-tabs--full-width .cz-tabs-list {
3439
+ width: 100%;
3440
+ }
3441
+
3442
+ .cz-tabs--full-width .cz-tabs-trigger {
3443
+ flex: 1;
3444
+ }
3445
+
3446
+ .cz-tabs--no-border .cz-tabs-list {
3447
+ border-bottom: none;
3448
+ }
3449
+
3450
+ .cz-tabs-trigger {
3451
+ display: inline-flex;
3452
+ align-items: center;
3453
+ justify-content: center;
3454
+ gap: var(--cz-tabs-trigger-gap);
3455
+ padding: var(--cz-tabs-trigger-padding-y) var(--cz-tabs-trigger-padding-x);
3456
+ font-size: var(--cz-tabs-trigger-font-size);
3457
+ font-weight: var(--cz-tabs-trigger-font-weight);
3458
+ color: var(--cz-tabs-trigger-color);
3459
+ background: transparent;
3460
+ border: none;
3461
+ border-bottom: var(--cz-tabs-trigger-border-width) solid transparent;
3462
+ margin-bottom: calc(var(--cz-tabs-list-border-width) * -1);
3463
+ border-radius: var(--cz-tabs-trigger-radius);
3464
+ cursor: pointer;
3465
+ transition: all var(--cz-tabs-trigger-transition);
3466
+ white-space: nowrap;
3467
+ }
3468
+
3469
+ .cz-tabs-trigger:hover {
3470
+ color: var(--cz-tabs-trigger-hover-color);
3471
+ }
3472
+
3473
+ .cz-tabs-trigger:focus-visible {
3474
+ outline: none;
3475
+ box-shadow: 0 0 0 var(--cz-tabs-trigger-focus-ring-width) var(--cz-tabs-trigger-focus-ring-color);
3476
+ }
3477
+
3478
+ .cz-tabs-trigger[data-state="active"],
3479
+ .cz-tabs-trigger.cz-tabs-trigger-active {
3480
+ color: var(--cz-tabs-trigger-active-color);
3481
+ border-bottom-color: var(--cz-tabs-trigger-active-border-color);
3482
+ }
3483
+
3484
+ .cz-tabs-trigger:disabled {
3485
+ opacity: 0.5;
3486
+ cursor: not-allowed;
3487
+ }
3488
+
3489
+ .cz-tabs-trigger-icon {
3490
+ display: inline-flex;
3491
+ align-items: center;
3492
+ justify-content: center;
3493
+ font-size: var(--cz-tabs-icon-size);
3494
+ line-height: 1;
3495
+ }
3496
+
3497
+ .cz-tabs-trigger-count {
3498
+ display: inline-flex;
3499
+ align-items: center;
3500
+ justify-content: center;
3501
+ padding: 0 var(--cz-tabs-count-padding-x);
3502
+ min-width: var(--cz-tabs-count-min-width);
3503
+ height: var(--cz-tabs-count-height);
3504
+ border-radius: var(--cz-tabs-count-radius);
3505
+ font-size: var(--cz-tabs-count-font-size);
3506
+ font-weight: var(--cz-tabs-count-font-weight);
3507
+ background: var(--cz-tabs-count-bg);
3508
+ color: var(--cz-tabs-count-color);
3509
+ }
3510
+
3511
+ .cz-tabs-trigger[data-state="active"] .cz-tabs-trigger-count,
3512
+ .cz-tabs-trigger.cz-tabs-trigger-active .cz-tabs-trigger-count {
3513
+ background: var(--cz-tabs-count-active-bg);
3514
+ color: var(--cz-tabs-count-active-color);
3515
+ }
3516
+
3517
+ .cz-tabs--size-sm .cz-tabs-trigger {
3518
+ padding: var(--cz-tabs-trigger-padding-y-sm) var(--cz-tabs-trigger-padding-x-sm);
3519
+ font-size: var(--cz-tabs-trigger-font-size-sm);
3520
+ }
3521
+
3522
+ .cz-tabs--size-md .cz-tabs-trigger {
3523
+ padding: var(--cz-tabs-trigger-padding-y) var(--cz-tabs-trigger-padding-x);
3524
+ font-size: var(--cz-tabs-trigger-font-size);
3525
+ }
3526
+
3527
+ .cz-tabs--size-lg .cz-tabs-trigger {
3528
+ padding: var(--cz-tabs-trigger-padding-y-lg) var(--cz-tabs-trigger-padding-x-lg);
3529
+ font-size: var(--cz-tabs-trigger-font-size-lg);
3530
+ }
3531
+
3532
+ .cz-tabs--variant-underline .cz-tabs-list {
3533
+ background: transparent;
3534
+ }
3535
+
3536
+ .cz-tabs--variant-pills .cz-tabs-list {
3537
+ border-bottom: none;
3538
+ gap: var(--cz-tabs-pills-list-gap);
3539
+ }
3540
+
3541
+ .cz-tabs--variant-pills .cz-tabs-trigger {
3542
+ color: var(--cz-tabs-pills-trigger-color);
3543
+ background: var(--cz-tabs-pills-trigger-bg);
3544
+ border: 1px solid var(--cz-tabs-pills-trigger-border-color);
3545
+ margin-bottom: 0;
3546
+ border-radius: var(--cz-tabs-pills-trigger-radius);
3547
+ }
3548
+
3549
+ .cz-tabs--variant-pills .cz-tabs-trigger:hover {
3550
+ background: var(--cz-tabs-pills-trigger-hover-bg);
3551
+ color: var(--cz-tabs-pills-trigger-hover-color);
3552
+ }
3553
+
3554
+ .cz-tabs--variant-pills .cz-tabs-trigger[data-state="active"],
3555
+ .cz-tabs--variant-pills .cz-tabs-trigger.cz-tabs-trigger-active {
3556
+ background: var(--cz-tabs-pills-trigger-active-bg);
3557
+ color: var(--cz-tabs-pills-trigger-active-color);
3558
+ border-color: var(--cz-tabs-pills-trigger-active-border-color);
3559
+ }
3560
+
3561
+ .cz-tabs--variant-pills .cz-tabs-trigger[data-state="active"] .cz-tabs-trigger-count,
3562
+ .cz-tabs--variant-pills .cz-tabs-trigger.cz-tabs-trigger-active .cz-tabs-trigger-count {
3563
+ background: var(--cz-tabs-count-active-bg);
3564
+ color: var(--cz-tabs-count-active-color);
3565
+ }
3566
+
3567
+ .cz-tabs--variant-enclosed .cz-tabs-list {
3568
+ border-bottom: none;
3569
+ background: var(--cz-tabs-enclosed-list-bg);
3570
+ padding: var(--cz-tabs-enclosed-list-padding);
3571
+ border-radius: var(--cz-tabs-enclosed-list-radius);
3572
+ gap: var(--cz-tabs-list-gap);
3573
+ }
3574
+
3575
+ .cz-tabs--variant-enclosed .cz-tabs-trigger {
3576
+ color: var(--cz-tabs-enclosed-trigger-color);
3577
+ margin-bottom: 0;
3578
+ border: none;
3579
+ border-radius: var(--cz-tabs-enclosed-trigger-radius);
3580
+ }
3581
+
3582
+ .cz-tabs--variant-enclosed .cz-tabs-trigger[data-state="active"],
3583
+ .cz-tabs--variant-enclosed .cz-tabs-trigger.cz-tabs-trigger-active {
3584
+ color: var(--cz-tabs-enclosed-trigger-active-color);
3585
+ background: var(--cz-tabs-enclosed-trigger-active-bg);
3586
+ border-bottom-color: transparent;
3587
+ box-shadow: var(--cz-tabs-enclosed-trigger-active-shadow);
3588
+ }
3589
+
3590
+ .cz-tabs-content {
3591
+ padding: var(--cz-tabs-content-padding);
3592
+ }
3593
+
3594
+ .cz-tabs-content[data-state="inactive"] {
3595
+ display: none;
3596
+ }
3597
+ `;
3598
+ }
3599
+
3600
+ // cli/generators/breadcrumb.ts
3601
+ function generateBreadcrumbCSS(config) {
3602
+ let css = "/* ===== BREADCRUMB ===== */\n\n";
3603
+ css += generateBreadcrumbVariables(config);
3604
+ css += "\n";
3605
+ css += generateBreadcrumbBase();
3606
+ css += "\n";
3607
+ if (config.customCSS) css += `/* Custom Breadcrumb CSS */
3608
+ ${config.customCSS}
3609
+ `;
3610
+ return css;
3611
+ }
3612
+ function generateBreadcrumbVariables(config) {
3613
+ const vars = [];
3614
+ if (config.gap) vars.push(` --cz-breadcrumb-gap: ${config.gap};`);
3615
+ if (config.fontSize) vars.push(` --cz-breadcrumb-font-size: ${resolveToken(config.fontSize)};`);
3616
+ if (config.itemColor) vars.push(` --cz-breadcrumb-item-color: ${resolveToken(config.itemColor)};`);
3617
+ if (config.linkColor) vars.push(` --cz-breadcrumb-link-color: ${resolveToken(config.linkColor)};`);
3618
+ if (config.activeColor) vars.push(` --cz-breadcrumb-active-color: ${resolveToken(config.activeColor)};`);
3619
+ if (config.separatorColor) vars.push(` --cz-breadcrumb-separator-color: ${resolveToken(config.separatorColor)};`);
3620
+ return `:root {
3621
+ ${vars.join("\n")}
3622
+ }
3623
+ `;
3624
+ }
3625
+ function generateBreadcrumbBase() {
3626
+ return `.cz-breadcrumb {
3627
+ display: flex;
3628
+ flex-wrap: wrap;
3629
+ align-items: center;
3630
+ gap: var(--cz-breadcrumb-gap);
3631
+ font-size: var(--cz-breadcrumb-font-size);
3632
+ }
3633
+
3634
+ .cz-breadcrumb-item {
3635
+ display: inline-flex;
3636
+ align-items: center;
3637
+ gap: var(--cz-breadcrumb-gap);
3638
+ color: var(--cz-breadcrumb-item-color);
3639
+ }
3640
+
3641
+ .cz-breadcrumb-link {
3642
+ color: var(--cz-breadcrumb-link-color);
3643
+ text-decoration: none;
3644
+ transition: color var(--cz-transition-fast);
3645
+ }
3646
+
3647
+ .cz-breadcrumb-link:hover {
3648
+ color: var(--cz-breadcrumb-active-color);
3649
+ text-decoration: underline;
3650
+ }
3651
+
3652
+ .cz-breadcrumb-page {
3653
+ color: var(--cz-breadcrumb-active-color);
3654
+ font-weight: var(--cz-font-weight-medium);
3655
+ }
3656
+
3657
+ .cz-breadcrumb-separator {
3658
+ color: var(--cz-breadcrumb-separator-color);
3659
+ }
3660
+
3661
+ .cz-breadcrumb-ellipsis {
3662
+ display: flex;
3663
+ align-items: center;
3664
+ justify-content: center;
3665
+ width: 1rem;
3666
+ height: 1rem;
3667
+ }
3668
+ `;
3669
+ }
3670
+
3671
+ // cli/generators/accordion.ts
3672
+ function generateAccordionCSS(config) {
3673
+ let css = "/* ===== ACCORDION ===== */\n\n";
3674
+ css += generateAccordionVariables(config);
3675
+ css += "\n";
3676
+ css += generateAccordionBase();
3677
+ css += "\n";
3678
+ if (config.customCSS) css += `/* Custom Accordion CSS */
3679
+ ${config.customCSS}
3680
+ `;
3681
+ return css;
3682
+ }
3683
+ function generateAccordionVariables(config) {
3684
+ const vars = [];
3685
+ if (config.borderColor) vars.push(` --cz-accordion-border-color: ${resolveToken(config.borderColor)};`);
3686
+ if (config.triggerPaddingX) vars.push(` --cz-accordion-trigger-padding-x: ${config.triggerPaddingX};`);
3687
+ if (config.triggerPaddingY) vars.push(` --cz-accordion-trigger-padding-y: ${config.triggerPaddingY};`);
3688
+ if (config.triggerFontSize) vars.push(` --cz-accordion-trigger-font-size: ${resolveToken(config.triggerFontSize)};`);
3689
+ if (config.triggerFontWeight) vars.push(` --cz-accordion-trigger-font-weight: ${resolveToken(config.triggerFontWeight)};`);
3690
+ if (config.triggerHoverBg) vars.push(` --cz-accordion-trigger-hover-bg: ${resolveToken(config.triggerHoverBg)};`);
3691
+ if (config.contentPaddingX) vars.push(` --cz-accordion-content-padding-x: ${config.contentPaddingX};`);
3692
+ if (config.contentPaddingBottom) vars.push(` --cz-accordion-content-padding-bottom: ${config.contentPaddingBottom};`);
3693
+ return `:root {
3694
+ ${vars.join("\n")}
3695
+ }
3696
+ `;
3697
+ }
3698
+ function generateAccordionBase() {
3699
+ return `.cz-accordion {
3700
+ width: 100%;
3701
+ }
3702
+
3703
+ .cz-accordion-item {
3704
+ border-bottom: 1px solid var(--cz-accordion-border-color);
3705
+ }
3706
+
3707
+ .cz-accordion-trigger {
3708
+ display: flex;
3709
+ align-items: center;
3710
+ justify-content: space-between;
3711
+ width: 100%;
3712
+ padding: var(--cz-accordion-trigger-padding-y) var(--cz-accordion-trigger-padding-x);
3713
+ font-size: var(--cz-accordion-trigger-font-size);
3714
+ font-weight: var(--cz-accordion-trigger-font-weight);
3715
+ color: hsl(var(--cz-color-fg));
3716
+ background: transparent;
3717
+ border: none;
3718
+ cursor: pointer;
3719
+ text-align: left;
3720
+ transition: background-color var(--cz-transition-fast);
3721
+ }
3722
+
3723
+ .cz-accordion-trigger:hover {
3724
+ background-color: var(--cz-accordion-trigger-hover-bg);
3725
+ }
3726
+
3727
+ .cz-accordion-trigger-icon {
3728
+ width: 1rem;
3729
+ height: 1rem;
3730
+ flex-shrink: 0;
3731
+ transition: transform var(--cz-transition-fast);
3732
+ }
3733
+
3734
+ .cz-accordion-item[data-state="open"] .cz-accordion-trigger-icon {
3735
+ transform: rotate(180deg);
3736
+ }
3737
+
3738
+ .cz-accordion-content {
3739
+ overflow: hidden;
3740
+ font-size: var(--cz-font-size-sm);
3741
+ color: hsl(var(--cz-color-mutedFg));
3742
+ }
3743
+
3744
+ .cz-accordion-content[data-state="open"] {
3745
+ animation: cz-accordion-open 200ms ease-out;
3746
+ }
3747
+
3748
+ .cz-accordion-content[data-state="closed"] {
3749
+ animation: cz-accordion-close 200ms ease-out;
3750
+ }
3751
+
3752
+ .cz-accordion-content-inner {
3753
+ padding: 0 var(--cz-accordion-content-padding-x) var(--cz-accordion-content-padding-bottom);
3754
+ }
3755
+
3756
+ @keyframes cz-accordion-open {
3757
+ from { height: 0; }
3758
+ to { height: var(--radix-accordion-content-height); }
3759
+ }
3760
+
3761
+ @keyframes cz-accordion-close {
3762
+ from { height: var(--radix-accordion-content-height); }
3763
+ to { height: 0; }
3764
+ }
3765
+ `;
3766
+ }
3767
+
3768
+ // cli/generators/dialog.ts
3769
+ function generateDialogCSS(config) {
3770
+ let css = "/* ===== DIALOG ===== */\n\n";
3771
+ css += generateDialogVariables(config);
3772
+ css += "\n";
3773
+ css += generateDialogBase();
3774
+ css += "\n";
3775
+ if (config.customCSS) css += `/* Custom Dialog CSS */
3776
+ ${config.customCSS}
3777
+ `;
3778
+ return css;
3779
+ }
3780
+ function generateDialogVariables(config) {
3781
+ const vars = [];
3782
+ if (config.overlayBg) vars.push(` --cz-dialog-overlay-bg: ${resolveToken(config.overlayBg)};`);
3783
+ if (config.contentBg) vars.push(` --cz-dialog-content-bg: ${resolveToken(config.contentBg)};`);
3784
+ if (config.contentBorderRadius) vars.push(` --cz-dialog-content-border-radius: ${resolveToken(config.contentBorderRadius)};`);
3785
+ if (config.contentShadow) vars.push(` --cz-dialog-content-shadow: ${resolveToken(config.contentShadow)};`);
3786
+ if (config.contentPadding) vars.push(` --cz-dialog-content-padding: ${resolveToken(config.contentPadding)};`);
3787
+ if (config.contentMaxWidth) vars.push(` --cz-dialog-content-max-width: ${config.contentMaxWidth};`);
3788
+ if (config.headerGap) vars.push(` --cz-dialog-header-gap: ${config.headerGap};`);
3789
+ if (config.titleFontSize) vars.push(` --cz-dialog-title-font-size: ${resolveToken(config.titleFontSize)};`);
3790
+ if (config.titleFontWeight) vars.push(` --cz-dialog-title-font-weight: ${resolveToken(config.titleFontWeight)};`);
3791
+ if (config.descriptionFontSize) vars.push(` --cz-dialog-description-font-size: ${resolveToken(config.descriptionFontSize)};`);
3792
+ if (config.footerGap) vars.push(` --cz-dialog-footer-gap: ${config.footerGap};`);
3793
+ return `:root {
3794
+ ${vars.join("\n")}
3795
+ }
3796
+ `;
3797
+ }
3798
+ function generateDialogBase() {
3799
+ return `.cz-dialog-overlay {
3800
+ position: fixed;
3801
+ inset: 0;
3802
+ background-color: var(--cz-dialog-overlay-bg);
3803
+ z-index: 50;
3804
+ animation: cz-dialog-overlay-show 150ms ease;
3805
+ }
3806
+
3807
+ .cz-dialog-content {
3808
+ position: fixed;
3809
+ top: 50%;
3810
+ left: 50%;
3811
+ transform: translate(-50%, -50%);
3812
+ max-width: var(--cz-dialog-content-max-width);
3813
+ width: calc(100% - 2rem);
3814
+ max-height: 85vh;
3815
+ background-color: var(--cz-dialog-content-bg);
3816
+ border-radius: var(--cz-dialog-content-border-radius);
3817
+ box-shadow: var(--cz-dialog-content-shadow);
3818
+ padding: var(--cz-dialog-content-padding);
3819
+ z-index: 51;
3820
+ animation: cz-dialog-content-show 150ms ease;
3821
+ overflow-y: auto;
3822
+ }
3823
+
3824
+ .cz-dialog-header {
3825
+ display: flex;
3826
+ flex-direction: column;
3827
+ gap: var(--cz-dialog-header-gap);
3828
+ margin-bottom: 1rem;
3829
+ }
3830
+
3831
+ .cz-dialog-title {
3832
+ font-size: var(--cz-dialog-title-font-size);
3833
+ font-weight: var(--cz-dialog-title-font-weight);
3834
+ color: hsl(var(--cz-color-fg));
3835
+ line-height: var(--cz-font-lineHeight-tight);
3836
+ }
3837
+
3838
+ .cz-dialog-description {
3839
+ font-size: var(--cz-dialog-description-font-size);
3840
+ color: hsl(var(--cz-color-mutedFg));
3841
+ }
3842
+
3843
+ .cz-dialog-footer {
3844
+ display: flex;
3845
+ justify-content: flex-end;
3846
+ gap: var(--cz-dialog-footer-gap);
3847
+ margin-top: 1.5rem;
3848
+ }
3849
+
3850
+ .cz-dialog-close {
3851
+ position: absolute;
3852
+ top: 1rem;
3853
+ right: 1rem;
3854
+ padding: 0.25rem;
3855
+ border-radius: var(--cz-radius-sm);
3856
+ background: transparent;
3857
+ border: none;
3858
+ cursor: pointer;
3859
+ color: hsl(var(--cz-color-mutedFg));
3860
+ transition: all var(--cz-transition-fast);
3861
+ }
3862
+
3863
+ .cz-dialog-close:hover {
3864
+ background: hsl(var(--cz-color-muted));
3865
+ color: hsl(var(--cz-color-fg));
3866
+ }
3867
+
3868
+ @keyframes cz-dialog-overlay-show {
3869
+ from { opacity: 0; }
3870
+ to { opacity: 1; }
3871
+ }
3872
+
3873
+ @keyframes cz-dialog-content-show {
3874
+ from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
3875
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
3876
+ }
3877
+ `;
3878
+ }
3879
+
3880
+ // cli/generators/modal.ts
3881
+ function generateModalCSS(config) {
3882
+ let css = "/* ===== MODAL ===== */\n\n";
3883
+ css += generateModalVariables(config);
3884
+ css += "\n";
3885
+ css += generateModalBase();
3886
+ css += "\n";
3887
+ if (config.customCSS) css += `/* Custom Modal CSS */
3888
+ ${config.customCSS}
3889
+ `;
3890
+ return css;
3891
+ }
3892
+ function generateModalVariables(config) {
3893
+ const vars = [];
3894
+ if (config.overlayBg) vars.push(` --cz-modal-overlay-bg: ${resolveValue3(config.overlayBg)};`);
3895
+ if (config.contentBg) vars.push(` --cz-modal-content-bg: ${resolveValue3(config.contentBg)};`);
3896
+ if (config.contentBorderRadius) {
3897
+ vars.push(` --cz-modal-content-border-radius: ${resolveValue3(config.contentBorderRadius)};`);
3898
+ }
3899
+ if (config.contentBorderColor) {
3900
+ vars.push(` --cz-modal-content-border-color: ${resolveValue3(config.contentBorderColor)};`);
3901
+ }
3902
+ if (config.contentShadow) vars.push(` --cz-modal-content-shadow: ${resolveValue3(config.contentShadow)};`);
3903
+ if (config.headerPadding) vars.push(` --cz-modal-header-padding: ${resolveValue3(config.headerPadding)};`);
3904
+ if (config.bodyPadding) vars.push(` --cz-modal-body-padding: ${resolveValue3(config.bodyPadding)};`);
3905
+ if (config.footerPadding) vars.push(` --cz-modal-footer-padding: ${resolveValue3(config.footerPadding)};`);
3906
+ if (config.footerGap) vars.push(` --cz-modal-footer-gap: ${resolveValue3(config.footerGap)};`);
3907
+ if (config.closeIconSize) vars.push(` --cz-modal-close-icon-size: ${resolveValue3(config.closeIconSize)};`);
3908
+ if (config.closeIconPadding) {
3909
+ vars.push(` --cz-modal-close-icon-padding: ${resolveValue3(config.closeIconPadding)};`);
3910
+ }
3911
+ if (config.closeIconRadius) vars.push(` --cz-modal-close-icon-radius: ${resolveValue3(config.closeIconRadius)};`);
3912
+ if (config.closeIconBg) vars.push(` --cz-modal-close-icon-bg: ${resolveValue3(config.closeIconBg)};`);
3913
+ if (config.closeIconColor) {
3914
+ vars.push(` --cz-modal-close-icon-color: ${resolveValue3(config.closeIconColor)};`);
3915
+ }
3916
+ if (config.closeIconHoverBg) {
3917
+ vars.push(` --cz-modal-close-icon-hover-bg: ${resolveValue3(config.closeIconHoverBg)};`);
3918
+ }
3919
+ if (config.closeIconHoverColor) {
3920
+ vars.push(` --cz-modal-close-icon-hover-color: ${resolveValue3(config.closeIconHoverColor)};`);
3921
+ }
3922
+ if (config.closeIconTransition) {
3923
+ vars.push(` --cz-modal-close-icon-transition: ${resolveValue3(config.closeIconTransition)};`);
3924
+ }
3925
+ if (config.closeIconFocusRing) {
3926
+ vars.push(` --cz-modal-close-icon-focus-ring: ${resolveValue3(config.closeIconFocusRing)};`);
3927
+ }
3928
+ if (config.tabFontSize) vars.push(` --cz-modal-tab-font-size: ${resolveValue3(config.tabFontSize)};`);
3929
+ if (config.tabFontWeight) {
3930
+ vars.push(` --cz-modal-tab-font-weight: ${resolveValue3(config.tabFontWeight)};`);
3931
+ }
3932
+ if (config.tabColor) vars.push(` --cz-modal-tab-color: ${resolveValue3(config.tabColor)};`);
3933
+ if (config.tabActiveColor) {
3934
+ vars.push(` --cz-modal-tab-active-color: ${resolveValue3(config.tabActiveColor)};`);
3935
+ }
3936
+ if (config.tabActiveBorderColor) {
3937
+ vars.push(` --cz-modal-tab-active-border-color: ${resolveValue3(config.tabActiveBorderColor)};`);
3938
+ }
3939
+ return `:root {
3940
+ ${vars.join("\n")}
3941
+ }
3942
+ `;
3943
+ }
3944
+ function resolveValue3(value) {
3945
+ if (!value.startsWith("$")) return value;
3946
+ if (/\s+\$/.test(value)) return value;
3947
+ return resolveToken(value);
3948
+ }
3949
+ function generateModalBase() {
3950
+ return `.cz-modal-close-icon {
3951
+ display: inline-flex;
3952
+ align-items: center;
3953
+ justify-content: center;
3954
+ width: var(--cz-modal-close-icon-size, 2rem);
3955
+ height: var(--cz-modal-close-icon-size, 2rem);
3956
+ padding: var(--cz-modal-close-icon-padding, 0.5rem);
3957
+ flex-shrink: 0;
3958
+ border: 0;
3959
+ border-radius: var(--cz-modal-close-icon-radius, var(--cz-radius-md));
3960
+ background: var(--cz-modal-close-icon-bg, transparent);
3961
+ color: var(--cz-modal-close-icon-color, hsl(var(--cz-color-mutedFg)));
3962
+ cursor: pointer;
3963
+ transition: all var(--cz-modal-close-icon-transition, var(--cz-transition-fast));
3964
+ }
3965
+
3966
+ .cz-modal-close-icon:hover {
3967
+ background: var(--cz-modal-close-icon-hover-bg, hsl(var(--cz-color-muted)));
3968
+ color: var(--cz-modal-close-icon-hover-color, hsl(var(--cz-color-primary)));
3969
+ }
3970
+
3971
+ .cz-modal-close-icon:focus,
3972
+ .cz-modal-close-icon:focus-visible {
3973
+ outline: none;
3974
+ box-shadow: var(--cz-modal-close-icon-focus-ring, none);
3975
+ }
3976
+
3977
+ .cz-modal-close-btn {
3978
+ flex-shrink: 0;
3979
+ }
3980
+
3981
+ .cz-modal-tab-btn:focus,
3982
+ .cz-modal-tab-btn:focus-visible {
3983
+ outline: none;
3984
+ box-shadow: none;
3985
+ }
3986
+
3987
+ @supports not (gap: 0.75rem) {
3988
+ .cz-modal-footer > * + * {
3989
+ margin-left: var(--cz-modal-footer-gap, var(--cz-spacing-md, 0.75rem));
3990
+ }
3991
+ }
3992
+ `;
3993
+ }
3994
+
3995
+ // cli/generators/dropdown-menu.ts
3996
+ function generateDropdownMenuCSS(config) {
3997
+ let css = "/* ===== DROPDOWN MENU ===== */\n\n";
3998
+ css += generateDropdownVariables(config);
3999
+ css += "\n";
4000
+ css += generateDropdownBase();
4001
+ css += "\n";
4002
+ if (config.customCSS) css += `/* Custom Dropdown CSS */
4003
+ ${config.customCSS}
4004
+ `;
4005
+ return css;
4006
+ }
4007
+ function generateDropdownVariables(config) {
4008
+ const vars = [];
4009
+ if (config.contentBg) vars.push(` --cz-dropdown-content-bg: ${resolveToken(config.contentBg)};`);
4010
+ if (config.contentBorderRadius) vars.push(` --cz-dropdown-content-border-radius: ${resolveToken(config.contentBorderRadius)};`);
4011
+ if (config.contentShadow) vars.push(` --cz-dropdown-content-shadow: ${resolveToken(config.contentShadow)};`);
4012
+ if (config.contentPadding) vars.push(` --cz-dropdown-content-padding: ${config.contentPadding};`);
4013
+ if (config.itemPaddingX) vars.push(` --cz-dropdown-item-padding-x: ${config.itemPaddingX};`);
4014
+ if (config.itemPaddingY) vars.push(` --cz-dropdown-item-padding-y: ${config.itemPaddingY};`);
4015
+ if (config.itemBorderRadius) vars.push(` --cz-dropdown-item-border-radius: ${resolveToken(config.itemBorderRadius)};`);
4016
+ if (config.itemFontSize) vars.push(` --cz-dropdown-item-font-size: ${resolveToken(config.itemFontSize)};`);
4017
+ if (config.itemHoverBg) vars.push(` --cz-dropdown-item-hover-bg: ${resolveToken(config.itemHoverBg)};`);
4018
+ return `:root {
4019
+ ${vars.join("\n")}
4020
+ }
4021
+ `;
4022
+ }
4023
+ function generateDropdownBase() {
4024
+ return `.cz-dropdown-content {
4025
+ min-width: 8rem;
4026
+ overflow: hidden;
4027
+ background-color: var(--cz-dropdown-content-bg);
4028
+ border-radius: var(--cz-dropdown-content-border-radius);
4029
+ box-shadow: var(--cz-dropdown-content-shadow);
4030
+ border: 1px solid hsl(var(--cz-color-border));
4031
+ padding: var(--cz-dropdown-content-padding);
4032
+ z-index: 50;
4033
+ animation: cz-dropdown-fade-in 150ms ease;
4034
+ }
4035
+
4036
+ .cz-dropdown-item {
4037
+ display: flex;
4038
+ align-items: center;
4039
+ padding: var(--cz-dropdown-item-padding-y) var(--cz-dropdown-item-padding-x);
4040
+ border-radius: var(--cz-dropdown-item-border-radius);
4041
+ font-size: var(--cz-dropdown-item-font-size);
4042
+ color: hsl(var(--cz-color-fg));
4043
+ cursor: pointer;
4044
+ outline: none;
4045
+ user-select: none;
4046
+ transition: background-color var(--cz-transition-fast);
4047
+ gap: 0.5rem;
4048
+ }
4049
+
4050
+ .cz-dropdown-item:hover,
4051
+ .cz-dropdown-item[data-highlighted] {
4052
+ background-color: var(--cz-dropdown-item-hover-bg);
4053
+ }
4054
+
4055
+ .cz-dropdown-item[data-disabled] {
4056
+ opacity: 0.5;
4057
+ pointer-events: none;
4058
+ }
4059
+
4060
+ .cz-dropdown-item-icon {
4061
+ width: 1rem;
4062
+ height: 1rem;
4063
+ color: hsl(var(--cz-color-mutedFg));
4064
+ }
4065
+
4066
+ .cz-dropdown-item-shortcut {
4067
+ margin-left: auto;
4068
+ font-size: var(--cz-font-size-xs);
4069
+ color: hsl(var(--cz-color-mutedFg));
4070
+ }
4071
+
4072
+ .cz-dropdown-separator {
4073
+ height: 1px;
4074
+ background-color: hsl(var(--cz-color-border));
4075
+ margin: 0.25rem 0;
4076
+ }
4077
+
4078
+ .cz-dropdown-label {
4079
+ padding: var(--cz-dropdown-item-padding-y) var(--cz-dropdown-item-padding-x);
4080
+ font-size: var(--cz-font-size-xs);
4081
+ font-weight: var(--cz-font-weight-medium);
4082
+ color: hsl(var(--cz-color-mutedFg));
4083
+ }
4084
+
4085
+ .cz-dropdown-sub-trigger {
4086
+ display: flex;
4087
+ align-items: center;
4088
+ justify-content: space-between;
4089
+ }
4090
+
4091
+ .cz-dropdown-sub-trigger-icon {
4092
+ width: 1rem;
4093
+ height: 1rem;
4094
+ margin-left: auto;
4095
+ }
4096
+
4097
+ @keyframes cz-dropdown-fade-in {
4098
+ from { opacity: 0; transform: scale(0.95); }
4099
+ to { opacity: 1; transform: scale(1); }
4100
+ }
4101
+ `;
4102
+ }
4103
+
4104
+ // cli/generators/separator.ts
4105
+ function generateSeparatorCSS(config) {
4106
+ let css = "/* ===== SEPARATOR ===== */\n\n";
4107
+ css += generateSeparatorVariables(config);
4108
+ css += "\n";
4109
+ css += generateSeparatorBase();
4110
+ css += "\n";
4111
+ if (config.customCSS) css += `/* Custom Separator CSS */
4112
+ ${config.customCSS}
4113
+ `;
4114
+ return css;
4115
+ }
4116
+ function generateSeparatorVariables(config) {
4117
+ const vars = [];
4118
+ if (config.color) vars.push(` --cz-separator-color: ${resolveToken(config.color)};`);
4119
+ if (config.thickness) vars.push(` --cz-separator-thickness: ${config.thickness};`);
4120
+ if (config.marginY) vars.push(` --cz-separator-margin-y: ${resolveToken(config.marginY)};`);
4121
+ if (config.marginX) vars.push(` --cz-separator-margin-x: ${resolveToken(config.marginX)};`);
4122
+ return `:root {
4123
+ ${vars.join("\n")}
4124
+ }
4125
+ `;
4126
+ }
4127
+ function generateSeparatorBase() {
4128
+ return `.cz-separator {
4129
+ background-color: var(--cz-separator-color);
4130
+ flex-shrink: 0;
4131
+ }
4132
+
4133
+ .cz-separator-horizontal {
4134
+ width: 100%;
4135
+ height: var(--cz-separator-thickness);
4136
+ margin: var(--cz-separator-margin-y) 0;
4137
+ }
4138
+
4139
+ .cz-separator-vertical {
4140
+ width: var(--cz-separator-thickness);
4141
+ height: 100%;
4142
+ margin: 0 var(--cz-separator-margin-x);
4143
+ }
4144
+ `;
4145
+ }
4146
+
4147
+ // cli/generators/scroll-area.ts
4148
+ function generateScrollAreaCSS(config) {
4149
+ let css = "/* ===== SCROLL AREA ===== */\n\n";
4150
+ css += generateScrollAreaVariables(config);
4151
+ css += "\n";
4152
+ css += generateScrollAreaBase();
4153
+ css += "\n";
4154
+ if (config.customCSS) css += `/* Custom Scroll Area CSS */
4155
+ ${config.customCSS}
4156
+ `;
4157
+ return css;
4158
+ }
4159
+ function generateScrollAreaVariables(config) {
4160
+ const vars = [];
4161
+ if (config.scrollbarWidth) vars.push(` --cz-scrollbar-width: ${config.scrollbarWidth};`);
4162
+ if (config.thumbBg) vars.push(` --cz-scrollbar-thumb-bg: ${resolveToken(config.thumbBg)};`);
4163
+ if (config.thumbBorderRadius) vars.push(` --cz-scrollbar-thumb-border-radius: ${resolveToken(config.thumbBorderRadius)};`);
4164
+ if (config.trackBg) vars.push(` --cz-scrollbar-track-bg: ${resolveToken(config.trackBg)};`);
4165
+ return `:root {
4166
+ ${vars.join("\n")}
4167
+ }
4168
+ `;
4169
+ }
4170
+ function generateScrollAreaBase() {
4171
+ return `.cz-scroll-area {
4172
+ position: relative;
4173
+ overflow: hidden;
4174
+ }
4175
+
4176
+ .cz-scroll-area-viewport {
4177
+ width: 100%;
4178
+ height: 100%;
4179
+ overflow: scroll;
4180
+ scrollbar-width: none;
4181
+ -ms-overflow-style: none;
4182
+ }
4183
+
4184
+ .cz-scroll-area-viewport::-webkit-scrollbar {
4185
+ display: none;
4186
+ }
4187
+
4188
+ .cz-scrollbar {
4189
+ display: flex;
4190
+ touch-action: none;
4191
+ user-select: none;
4192
+ padding: 2px;
4193
+ transition: background-color var(--cz-transition-fast);
4194
+ }
4195
+
4196
+ .cz-scrollbar:hover {
4197
+ background-color: var(--cz-scrollbar-track-bg);
4198
+ }
4199
+
4200
+ .cz-scrollbar[data-orientation="vertical"] {
4201
+ width: var(--cz-scrollbar-width);
4202
+ }
4203
+
4204
+ .cz-scrollbar[data-orientation="horizontal"] {
4205
+ flex-direction: column;
4206
+ height: var(--cz-scrollbar-width);
4207
+ }
4208
+
4209
+ .cz-scrollbar-thumb {
4210
+ flex: 1;
4211
+ background-color: var(--cz-scrollbar-thumb-bg);
4212
+ border-radius: var(--cz-scrollbar-thumb-border-radius);
4213
+ position: relative;
4214
+ }
4215
+
4216
+ .cz-scrollbar-thumb::before {
4217
+ content: "";
4218
+ position: absolute;
4219
+ top: 50%;
4220
+ left: 50%;
4221
+ transform: translate(-50%, -50%);
4222
+ width: 100%;
4223
+ height: 100%;
4224
+ min-width: 44px;
4225
+ min-height: 44px;
4226
+ }
4227
+
4228
+ .cz-scroll-area-corner {
4229
+ background-color: var(--cz-scrollbar-track-bg);
4230
+ }
4231
+ `;
4232
+ }
4233
+
4234
+ // cli/generators/utilities.ts
4235
+ function generateUtilitiesCSS() {
4236
+ return `/**
4237
+ * CZero Utility Classes
4238
+ */
4239
+
4240
+ /* Display */
4241
+ .cz-inline-flex { display: inline-flex; }
4242
+ .cz-flex { display: flex; }
4243
+ .cz-flex-col { flex-direction: column; }
4244
+ .cz-items-center { align-items: center; }
4245
+ .cz-justify-center { justify-content: center; }
4246
+ .cz-flex-wrap { flex-wrap: wrap; }
4247
+
4248
+ /* Gap */
4249
+ .cz-gap-1 { gap: 0.25rem; }
4250
+ .cz-gap-1\\.5 { gap: 0.375rem; }
4251
+ .cz-gap-2 { gap: 0.5rem; }
4252
+
4253
+ /* Width */
4254
+ .cz-w-full { width: 100%; }
4255
+
4256
+ /* Whitespace */
4257
+ .cz-whitespace-nowrap { white-space: nowrap; }
4258
+
4259
+ /* Opacity */
4260
+ .cz-opacity-25 { opacity: 0.25; }
4261
+ .cz-opacity-50 { opacity: 0.5; }
4262
+ .cz-opacity-75 { opacity: 0.75; }
4263
+
4264
+ /* Animation */
4265
+ @keyframes cz-spin {
4266
+ from { transform: rotate(0deg); }
4267
+ to { transform: rotate(360deg); }
4268
+ }
4269
+ .cz-animate-spin { animation: cz-spin 1s linear infinite; }
4270
+
4271
+ /* Sizing */
4272
+ .cz-h-4 { height: 1rem; }
4273
+ .cz-w-4 { width: 1rem; }
4274
+ .cz-h-8 { height: 2rem; }
4275
+ .cz-h-10 { height: 2.5rem; }
4276
+ .cz-h-12 { height: 3rem; }
4277
+
4278
+ /* Padding */
4279
+ .cz-px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
4280
+ .cz-px-3 { padding-left: 0.75rem; padding-right: 0.75rem; }
4281
+ .cz-px-4 { padding-left: 1rem; padding-right: 1rem; }
4282
+ .cz-px-6 { padding-left: 1.5rem; padding-right: 1.5rem; }
4283
+ .cz-py-0\\.5 { padding-top: 0.125rem; padding-bottom: 0.125rem; }
4284
+ .cz-p-lg { padding: var(--cz-spacing-lg); }
4285
+ .cz-pb-md { padding-bottom: var(--cz-spacing-md); }
4286
+ .cz-pt-md { padding-top: var(--cz-spacing-md); }
4287
+ .cz-px-1\\.5 { padding-left: 0.375rem; padding-right: 0.375rem; }
4288
+
4289
+ /* Margin */
4290
+ .cz-mb-md { margin-bottom: var(--cz-spacing-md); }
4291
+ .cz-mt-md { margin-top: var(--cz-spacing-md); }
4292
+
4293
+ /* Typography */
4294
+ .cz-text-xs { font-size: var(--cz-font-size-xs); }
4295
+ .cz-text-sm { font-size: var(--cz-font-size-sm); }
4296
+ .cz-text-md { font-size: var(--cz-font-size-md); }
4297
+ .cz-text-lg { font-size: var(--cz-font-size-lg); }
4298
+ .cz-font-medium { font-weight: var(--cz-font-weight-medium); }
4299
+ .cz-font-semibold { font-weight: var(--cz-font-weight-semibold); }
4300
+ .cz-leading-tight { line-height: var(--cz-font-lineHeight-tight); }
4301
+
4302
+ /* Colors - Background */
4303
+ .cz-bg-bg { background-color: hsl(var(--cz-color-bg)); }
4304
+ .cz-bg-primary { background-color: hsl(var(--cz-color-primary)); }
4305
+ .cz-bg-secondary { background-color: hsl(var(--cz-color-secondary)); }
4306
+ .cz-bg-muted { background-color: hsl(var(--cz-color-muted)); }
4307
+ .cz-bg-danger { background-color: hsl(var(--cz-color-danger)); }
4308
+ .cz-bg-success { background-color: hsl(var(--cz-color-success)); }
4309
+ .cz-bg-warning { background-color: hsl(var(--cz-color-warning)); }
4310
+ .cz-bg-transparent { background-color: transparent; }
4311
+
4312
+ /* Colors - Text */
4313
+ .cz-text-fg { color: hsl(var(--cz-color-fg)); }
4314
+ .cz-text-primary-fg { color: hsl(var(--cz-color-primaryFg)); }
4315
+ .cz-text-secondary-fg { color: hsl(var(--cz-color-secondaryFg)); }
4316
+ .cz-text-muted-fg { color: hsl(var(--cz-color-mutedFg)); }
4317
+ .cz-text-danger { color: hsl(var(--cz-color-danger)); }
4318
+ .cz-text-danger-fg { color: hsl(var(--cz-color-dangerFg)); }
4319
+ .cz-text-success-fg { color: hsl(var(--cz-color-successFg)); }
4320
+ .cz-text-warning-fg { color: hsl(var(--cz-color-warningFg)); }
4321
+
4322
+ /* Border */
4323
+ .cz-border { border-width: 1px; border-style: solid; }
4324
+ .cz-border-b { border-bottom-width: 1px; border-bottom-style: solid; }
4325
+ .cz-border-t { border-top-width: 1px; border-top-style: solid; }
4326
+ .cz-border-border { border-color: hsl(var(--cz-color-border)); }
4327
+ .cz-border-danger { border-color: hsl(var(--cz-color-danger)); }
4328
+
4329
+ /* Border Radius */
4330
+ .cz-rounded-sm { border-radius: var(--cz-radius-sm); }
4331
+ .cz-rounded-md { border-radius: var(--cz-radius-md); }
4332
+ .cz-rounded-lg { border-radius: var(--cz-radius-lg); }
4333
+ .cz-rounded-full { border-radius: var(--cz-radius-full); }
4334
+
4335
+ /* Shadow */
4336
+ .cz-shadow-sm { box-shadow: var(--cz-shadow-sm); }
4337
+
4338
+ /* Transitions */
4339
+ .cz-transition { transition: all var(--cz-transition-fast); }
4340
+
4341
+ /* States */
4342
+ .cz-disabled {
4343
+ pointer-events: none;
4344
+ opacity: 0.5;
4345
+ cursor: not-allowed;
4346
+ }
4347
+
4348
+ /* Focus */
4349
+ .cz-focus-ring:focus,
4350
+ .cz-focus-ring:focus-visible {
4351
+ outline: none;
4352
+ box-shadow: 0 0 0 2px hsl(var(--cz-color-bg)), 0 0 0 4px hsl(var(--cz-color-ring));
4353
+ }
4354
+
4355
+ /* Hover states */
4356
+ .cz-hover-opacity:hover { opacity: 0.9; }
4357
+ .cz-hover-muted:hover { background-color: hsl(var(--cz-color-muted)); }
4358
+
4359
+ /* Label & Error */
4360
+ .cz-label {
4361
+ font-size: var(--cz-font-size-sm);
4362
+ font-weight: var(--cz-font-weight-medium);
4363
+ color: hsl(var(--cz-color-fg));
4364
+ }
4365
+
4366
+ .cz-label-required {
4367
+ color: hsl(var(--cz-color-danger));
4368
+ margin-left: 0.25rem;
4369
+ }
4370
+
4371
+ .cz-error {
4372
+ font-size: var(--cz-font-size-sm);
4373
+ color: hsl(var(--cz-color-danger));
4374
+ }
4375
+ `;
4376
+ }
4377
+
4378
+ // cli/build-css.ts
4379
+ function buildComponentsCSS(config) {
4380
+ const components = deepMerge(componentDefaults, config.components || {});
4381
+ let css = "";
4382
+ if (config.customCSS?.before) {
4383
+ css += `/* Custom CSS (before) */
4384
+ ${config.customCSS.before}
4385
+
4386
+ `;
4387
+ }
4388
+ if (components.button) {
4389
+ css += generateButtonCSS(components.button) + "\n";
4390
+ }
4391
+ if (components.input) {
4392
+ css += generateInputCSS(components.input) + "\n";
4393
+ }
4394
+ if (components.card) {
4395
+ css += generateCardCSS(components.card) + "\n";
4396
+ }
4397
+ if (components.switch) {
4398
+ css += generateSwitchCSS(components.switch) + "\n";
4399
+ }
4400
+ if (components.checkbox) {
4401
+ css += generateCheckboxCSS(components.checkbox) + "\n";
4402
+ }
4403
+ if (components.textarea) {
4404
+ css += generateTextareaCSS(components.textarea) + "\n";
4405
+ }
4406
+ if (components.select) {
4407
+ css += generateSelectCSS(components.select) + "\n";
4408
+ }
4409
+ if (components.radio) {
4410
+ css += generateRadioCSS(components.radio) + "\n";
4411
+ }
4412
+ if (components.label) {
4413
+ css += generateLabelCSS(components.label) + "\n";
4414
+ }
4415
+ if (components.badge) {
4416
+ css += generateBadgeCSS(components.badge) + "\n";
4417
+ }
4418
+ if (components.statusBadge) {
4419
+ css += generateStatusBadgeCSS(components.statusBadge) + "\n";
4420
+ }
4421
+ if (components.avatar) {
4422
+ css += generateAvatarCSS(components.avatar) + "\n";
4423
+ }
4424
+ if (components.table) {
4425
+ css += generateTableCSS(components.table) + "\n";
4426
+ }
4427
+ if (components.dataTable) {
4428
+ css += generateDataTableCSS(components.dataTable) + "\n";
4429
+ }
4430
+ if (components.code) {
4431
+ css += generateCodeCSS(components.code) + "\n";
4432
+ }
4433
+ if (components.kbd) {
4434
+ css += generateKbdCSS(components.kbd) + "\n";
4435
+ }
4436
+ if (components.tag) {
4437
+ css += generateTagCSS(components.tag) + "\n";
4438
+ }
4439
+ if (components.alert) {
4440
+ css += generateAlertCSS(components.alert) + "\n";
4441
+ }
4442
+ if (components.toast) {
4443
+ css += generateToastCSS(components.toast) + "\n";
4444
+ }
4445
+ if (components.tooltip) {
4446
+ css += generateTooltipCSS(components.tooltip) + "\n";
4447
+ }
4448
+ if (components.progress) {
4449
+ css += generateProgressCSS(components.progress) + "\n";
4450
+ }
4451
+ if (components.spinner) {
4452
+ css += generateSpinnerCSS(components.spinner) + "\n";
4453
+ }
4454
+ if (components.skeleton) {
4455
+ css += generateSkeletonCSS(components.skeleton) + "\n";
4456
+ }
4457
+ if (components.tabs) {
4458
+ css += generateTabsCSS(components.tabs) + "\n";
4459
+ }
4460
+ if (components.breadcrumb) {
4461
+ css += generateBreadcrumbCSS(components.breadcrumb) + "\n";
4462
+ }
4463
+ if (components.accordion) {
4464
+ css += generateAccordionCSS(components.accordion) + "\n";
4465
+ }
4466
+ if (components.dialog) {
4467
+ css += generateDialogCSS(components.dialog) + "\n";
4468
+ }
4469
+ if (components.modal) {
4470
+ css += generateModalCSS(components.modal) + "\n";
4471
+ }
4472
+ if (components.dropdownMenu) {
4473
+ css += generateDropdownMenuCSS(components.dropdownMenu) + "\n";
4474
+ }
4475
+ if (components.separator) {
4476
+ css += generateSeparatorCSS(components.separator) + "\n";
4477
+ }
4478
+ if (components.scrollArea) {
4479
+ css += generateScrollAreaCSS(components.scrollArea) + "\n";
4480
+ }
4481
+ if (config.customCSS?.after) {
4482
+ css += `/* Custom CSS (after) */
4483
+ ${config.customCSS.after}
4484
+ `;
4485
+ }
4486
+ return css;
4487
+ }
4488
+
4489
+ // src/presets/index.ts
4490
+ var defaultPreset = {
4491
+ // Uses all default values from component-defaults.ts
4492
+ };
4493
+ var compact = {
4494
+ spacing: {
4495
+ xs: "0.125rem",
4496
+ sm: "0.375rem",
4497
+ md: "0.5rem",
4498
+ lg: "0.75rem",
4499
+ xl: "1rem"
4500
+ },
4501
+ components: {
4502
+ button: {
4503
+ height: { sm: "1.75rem", md: "2rem", lg: "2.5rem" },
4504
+ paddingX: { sm: "0.5rem", md: "0.75rem", lg: "1rem" },
4505
+ gap: "0.375rem"
4506
+ },
4507
+ input: {
4508
+ height: { sm: "1.75rem", md: "2rem", lg: "2.5rem" },
4509
+ paddingX: { sm: "0.375rem", md: "0.5rem", lg: "0.75rem" }
4510
+ },
4511
+ card: {
4512
+ padding: "$spacing-md",
4513
+ header: { paddingBottom: "$spacing-sm", marginBottom: "$spacing-sm" },
4514
+ footer: { paddingTop: "$spacing-sm", marginTop: "$spacing-sm", gap: "0.375rem" }
4515
+ },
4516
+ switch: {
4517
+ width: { sm: "1.75rem", md: "2.25rem", lg: "3rem" },
4518
+ height: { sm: "1rem", md: "1.25rem", lg: "1.5rem" },
4519
+ thumbSize: { sm: "0.75rem", md: "1rem", lg: "1.25rem" }
4520
+ },
4521
+ checkbox: {
4522
+ size: { sm: "0.875rem", md: "1rem", lg: "1.25rem" },
4523
+ iconSize: { sm: "8px", md: "10px", lg: "12px" },
4524
+ labelGap: "0.375rem"
4525
+ }
4526
+ }
4527
+ };
4528
+ var comfortable = {
4529
+ spacing: {
4530
+ xs: "0.375rem",
4531
+ sm: "0.75rem",
4532
+ md: "1rem",
4533
+ lg: "1.5rem",
4534
+ xl: "2rem"
4535
+ },
4536
+ components: {
4537
+ button: {
4538
+ height: { sm: "2.5rem", md: "3rem", lg: "3.5rem" },
4539
+ paddingX: { sm: "1rem", md: "1.5rem", lg: "2rem" },
4540
+ gap: "0.75rem"
4541
+ },
4542
+ input: {
4543
+ height: { sm: "2.5rem", md: "3rem", lg: "3.5rem" },
4544
+ paddingX: { sm: "0.75rem", md: "1rem", lg: "1.25rem" }
4545
+ },
4546
+ card: {
4547
+ padding: "$spacing-xl",
4548
+ header: { paddingBottom: "$spacing-lg", marginBottom: "$spacing-lg" },
4549
+ footer: { paddingTop: "$spacing-lg", marginTop: "$spacing-lg", gap: "0.75rem" }
4550
+ },
4551
+ switch: {
4552
+ width: { sm: "2.5rem", md: "3.25rem", lg: "4rem" },
4553
+ height: { sm: "1.375rem", md: "1.75rem", lg: "2.125rem" },
4554
+ thumbSize: { sm: "1.125rem", md: "1.5rem", lg: "1.875rem" }
4555
+ },
4556
+ checkbox: {
4557
+ size: { sm: "1.25rem", md: "1.5rem", lg: "1.75rem" },
4558
+ iconSize: { sm: "12px", md: "14px", lg: "16px" },
4559
+ labelGap: "0.75rem"
4560
+ }
4561
+ }
4562
+ };
4563
+ var rounded = {
4564
+ radius: {
4565
+ none: "0",
4566
+ sm: "0.5rem",
4567
+ md: "0.75rem",
4568
+ lg: "1rem",
4569
+ xl: "1.5rem",
4570
+ full: "9999px"
4571
+ },
4572
+ components: {
4573
+ button: {
4574
+ borderRadius: "$radius-lg"
4575
+ },
4576
+ input: {
4577
+ borderRadius: "$radius-lg"
4578
+ },
4579
+ card: {
4580
+ borderRadius: "$radius-xl"
4581
+ }
4582
+ }
4583
+ };
4584
+ var sharp = {
4585
+ radius: {
4586
+ none: "0",
4587
+ sm: "0",
4588
+ md: "2px",
4589
+ lg: "4px",
4590
+ xl: "6px",
4591
+ full: "9999px"
4592
+ },
4593
+ components: {
4594
+ button: {
4595
+ borderRadius: "$radius-sm"
4596
+ },
4597
+ input: {
4598
+ borderRadius: "$radius-sm"
4599
+ },
4600
+ card: {
4601
+ borderRadius: "$radius-md"
4602
+ },
4603
+ checkbox: {
4604
+ borderRadius: "2px"
4605
+ }
4606
+ }
4607
+ };
4608
+ var minimal = {
4609
+ shadow: {
4610
+ none: "none",
4611
+ sm: "none",
4612
+ md: "0 1px 2px rgb(0 0 0 / 0.03)",
4613
+ lg: "0 2px 4px rgb(0 0 0 / 0.05)"
4614
+ },
4615
+ components: {
4616
+ button: {
4617
+ states: {
4618
+ hover: { opacity: "0.8" },
4619
+ focus: { ringWidth: "1px", ringOffset: "1px" }
4620
+ }
4621
+ },
4622
+ card: {
4623
+ shadow: "none",
4624
+ borderWidth: "1px"
4625
+ }
4626
+ }
4627
+ };
4628
+ var vibrant = {
4629
+ shadow: {
4630
+ none: "none",
4631
+ sm: "0 2px 4px rgb(0 0 0 / 0.1)",
4632
+ md: "0 4px 8px rgb(0 0 0 / 0.12)",
4633
+ lg: "0 8px 16px rgb(0 0 0 / 0.15)"
4634
+ },
4635
+ components: {
4636
+ button: {
4637
+ states: {
4638
+ hover: { opacity: "1", transform: "translateY(-1px)" },
4639
+ focus: { ringWidth: "3px", ringOffset: "2px" }
4640
+ }
4641
+ },
4642
+ card: {
4643
+ shadow: "$shadow-md"
4644
+ }
4645
+ }
4646
+ };
4647
+ var presets = {
4648
+ default: defaultPreset,
4649
+ compact,
4650
+ comfortable,
4651
+ rounded,
4652
+ sharp,
4653
+ minimal,
4654
+ vibrant
4655
+ };
4656
+
4657
+ // cli/index.ts
7
4658
  var __filename = fileURLToPath(import.meta.url);
8
4659
  var __dirname = path.dirname(__filename);
9
4660
  var defaultTheme = {
@@ -55,11 +4706,11 @@ var defaultTheme = {
55
4706
  },
56
4707
  transition: { fast: "150ms ease", normal: "200ms ease", slow: "300ms ease" }
57
4708
  };
58
- function deepMerge(target, source) {
4709
+ function deepMerge2(target, source) {
59
4710
  const result = { ...target };
60
4711
  for (const key of Object.keys(source)) {
61
4712
  if (source[key] && typeof source[key] === "object" && !Array.isArray(source[key])) {
62
- result[key] = deepMerge(target[key] || {}, source[key]);
4713
+ result[key] = deepMerge2(target[key] || {}, source[key]);
63
4714
  } else {
64
4715
  result[key] = source[key];
65
4716
  }
@@ -111,30 +4762,6 @@ ${darkVars.join("\n")}
111
4762
  }
112
4763
  `;
113
4764
  }
114
- function getComponentsCSS() {
115
- const possiblePaths = [
116
- path.join(__dirname, "components.css"),
117
- // dist/cli/../components.css = dist/components.css
118
- path.join(__dirname, "../components.css"),
119
- // dist/components.css
120
- path.join(__dirname, "../dist/components.css"),
121
- // from root
122
- path.join(__dirname, "../../dist/components.css"),
123
- // from cli folder
124
- path.join(__dirname, "../src/core/styles/components.css"),
125
- // dev mode
126
- path.join(__dirname, "../../src/core/styles/components.css")
127
- // dev mode from cli
128
- ];
129
- for (const p of possiblePaths) {
130
- if (fs.existsSync(p)) {
131
- return fs.readFileSync(p, "utf-8");
132
- }
133
- }
134
- console.error("Error: Could not find components.css");
135
- console.error("Searched paths:", possiblePaths);
136
- process.exit(1);
137
- }
138
4765
  function getResetCSS() {
139
4766
  const possiblePaths = [
140
4767
  path.join(__dirname, "reset.css"),
@@ -173,6 +4800,7 @@ async function main() {
173
4800
  const args = process.argv.slice(2);
174
4801
  let configPath = "czero.config.js";
175
4802
  let outputPath = "czero.css";
4803
+ const presetNames = [];
176
4804
  for (let i = 0; i < args.length; i++) {
177
4805
  if (args[i] === "--config" && args[i + 1]) {
178
4806
  configPath = args[i + 1];
@@ -180,6 +4808,9 @@ async function main() {
180
4808
  } else if (args[i] === "--output" && args[i + 1]) {
181
4809
  outputPath = args[i + 1];
182
4810
  i++;
4811
+ } else if (args[i] === "--preset" && args[i + 1]) {
4812
+ presetNames.push(args[i + 1]);
4813
+ i++;
183
4814
  } else if (args[i] === "build") {
184
4815
  } else if (args[i] === "--help" || args[i] === "-h") {
185
4816
  console.log(`
@@ -191,10 +4822,15 @@ Usage:
191
4822
  Options:
192
4823
  --config <path> Path to config file (default: czero.config.js)
193
4824
  --output <path> Output CSS file path (default: czero.css)
4825
+ --preset <name> Apply a theme preset. Can be specified multiple times.
4826
+ Available: compact, comfortable, rounded, sharp, minimal, vibrant
194
4827
  --help, -h Show this help message
195
4828
 
196
4829
  Example:
4830
+ npx czero build
197
4831
  npx czero build --config my-theme.js --output src/styles/czero.css
4832
+ npx czero build --preset compact
4833
+ npx czero build --preset compact --preset rounded
198
4834
  `);
199
4835
  process.exit(0);
200
4836
  }
@@ -202,12 +4838,26 @@ Example:
202
4838
  console.log("\u{1F3A8} CZero CSS Generator");
203
4839
  console.log(` Config: ${configPath}`);
204
4840
  console.log(` Output: ${outputPath}`);
4841
+ if (presetNames.length > 0) {
4842
+ console.log(` Presets: ${presetNames.join(", ")}`);
4843
+ }
205
4844
  console.log("");
206
4845
  const userConfig = await loadUserConfig(configPath);
207
- const theme = deepMerge(defaultTheme, userConfig);
4846
+ let mergedConfig = {};
4847
+ for (const presetName of presetNames) {
4848
+ const preset = presets[presetName];
4849
+ if (preset) {
4850
+ mergedConfig = deepMerge2(mergedConfig, preset);
4851
+ } else {
4852
+ console.warn(`\u26A0\uFE0F Unknown preset: ${presetName}`);
4853
+ }
4854
+ }
4855
+ mergedConfig = deepMerge2(mergedConfig, userConfig);
4856
+ const theme = deepMerge2(defaultTheme, mergedConfig);
208
4857
  const resetCSS = getResetCSS();
209
4858
  const tokensCSS = generateTokensCSS(theme);
210
- const componentsCSS = getComponentsCSS();
4859
+ let componentsCSS = buildComponentsCSS(mergedConfig);
4860
+ componentsCSS += "\n" + generateUtilitiesCSS();
211
4861
  const finalCSS = `${resetCSS}
212
4862
  ${tokensCSS}
213
4863
  ${componentsCSS}`;