@mimi-ng/cli 0.1.1 → 0.3.0

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 (104) hide show
  1. package/README.md +28 -1
  2. package/dist/init/css.js +17 -0
  3. package/dist/init/index.js +7 -5
  4. package/dist/init/items.js +9 -0
  5. package/dist/registry.json +482 -1
  6. package/dist/templates/components/avatar/avatar.ts +1 -1
  7. package/dist/templates/components/avatar/avatar.variants.ts +4 -4
  8. package/dist/templates/components/badge/badge.ts +41 -6
  9. package/dist/templates/components/badge/badge.variants.ts +105 -11
  10. package/dist/templates/components/button/button.ts +74 -7
  11. package/dist/templates/components/button/button.variants.ts +145 -21
  12. package/dist/templates/components/calendar/calendar-texts.ts +72 -0
  13. package/dist/templates/components/calendar/calendar.ts +588 -0
  14. package/dist/templates/components/calendar/dates.ts +181 -0
  15. package/dist/templates/components/calendar/index.ts +3 -0
  16. package/dist/templates/components/card/card.ts +8 -5
  17. package/dist/templates/components/checkbox/checkbox.ts +3 -3
  18. package/dist/templates/components/chip/chip-texts.ts +40 -0
  19. package/dist/templates/components/chip/chip.ts +116 -0
  20. package/dist/templates/components/chip/index.ts +2 -0
  21. package/dist/templates/components/color-picker/color-picker-texts.ts +57 -0
  22. package/dist/templates/components/color-picker/color-picker.ts +718 -0
  23. package/dist/templates/components/color-picker/color.ts +157 -0
  24. package/dist/templates/components/color-picker/index.ts +3 -0
  25. package/dist/templates/components/combobox/combobox-texts.ts +70 -0
  26. package/dist/templates/components/combobox/combobox.ts +798 -0
  27. package/dist/templates/components/combobox/index.ts +2 -0
  28. package/dist/templates/components/confirm/confirm-texts.ts +46 -0
  29. package/dist/templates/components/confirm/confirm.ts +190 -0
  30. package/dist/templates/components/confirm/index.ts +2 -0
  31. package/dist/templates/components/context-menu/context-menu.ts +378 -0
  32. package/dist/templates/components/context-menu/index.ts +14 -0
  33. package/dist/templates/components/date-picker/date-picker.ts +240 -0
  34. package/dist/templates/components/date-picker/index.ts +3 -0
  35. package/dist/templates/components/date-range/date-range.ts +308 -0
  36. package/dist/templates/components/date-range/index.ts +1 -0
  37. package/dist/templates/components/dialog/dialog-texts.ts +41 -0
  38. package/dist/templates/components/dialog/dialog.ts +701 -0
  39. package/dist/templates/components/dialog/index.ts +18 -0
  40. package/dist/templates/components/dropdown-menu/dropdown-menu.ts +252 -0
  41. package/dist/templates/components/dropdown-menu/index.ts +14 -0
  42. package/dist/templates/components/file-upload/file-upload-texts.ts +77 -0
  43. package/dist/templates/components/file-upload/file-upload.ts +698 -0
  44. package/dist/templates/components/file-upload/index.ts +2 -0
  45. package/dist/templates/components/form-field/form-error.ts +1 -1
  46. package/dist/templates/components/form-field/form-field.ts +3 -2
  47. package/dist/templates/components/input/input.variants.ts +6 -4
  48. package/dist/templates/components/input-mask/index.ts +1 -0
  49. package/dist/templates/components/input-mask/input-mask.ts +319 -0
  50. package/dist/templates/components/input-otp/index.ts +1 -0
  51. package/dist/templates/components/input-otp/input-otp.ts +212 -0
  52. package/dist/templates/components/menu/index.ts +15 -0
  53. package/dist/templates/components/menu/menu.ts +656 -0
  54. package/dist/templates/components/number-input/index.ts +2 -0
  55. package/dist/templates/components/number-input/number-input-texts.ts +46 -0
  56. package/dist/templates/components/number-input/number-input.ts +450 -0
  57. package/dist/templates/components/option-list/index.ts +11 -0
  58. package/dist/templates/components/option-list/option-list.ts +518 -0
  59. package/dist/templates/components/pagination/index.ts +2 -0
  60. package/dist/templates/components/pagination/pagination-page-size.ts +74 -0
  61. package/dist/templates/components/pagination/pagination-texts.ts +69 -0
  62. package/dist/templates/components/pagination/pagination.ts +443 -0
  63. package/dist/templates/components/password/index.ts +2 -0
  64. package/dist/templates/components/password/password-texts.ts +68 -0
  65. package/dist/templates/components/password/password.ts +363 -0
  66. package/dist/templates/components/popover/index.ts +12 -0
  67. package/dist/templates/components/popover/popover.ts +407 -0
  68. package/dist/templates/components/progress/index.ts +1 -0
  69. package/dist/templates/components/progress/progress.ts +217 -0
  70. package/dist/templates/components/select/index.ts +12 -0
  71. package/dist/templates/components/select/select-texts.ts +62 -0
  72. package/dist/templates/components/select/select.ts +1086 -0
  73. package/dist/templates/components/separator/separator.variants.ts +10 -7
  74. package/dist/templates/components/skeleton/skeleton.ts +4 -1
  75. package/dist/templates/components/slider/index.ts +2 -0
  76. package/dist/templates/components/slider/slider-texts.ts +26 -0
  77. package/dist/templates/components/slider/slider.ts +425 -0
  78. package/dist/templates/components/switch/switch.ts +6 -6
  79. package/dist/templates/components/tabs/index.ts +2 -0
  80. package/dist/templates/components/tabs/tabs.ts +426 -0
  81. package/dist/templates/components/tags-input/index.ts +2 -0
  82. package/dist/templates/components/tags-input/tags-input-texts.ts +44 -0
  83. package/dist/templates/components/tags-input/tags-input.ts +303 -0
  84. package/dist/templates/components/textarea/textarea.variants.ts +14 -11
  85. package/dist/templates/components/toast/index.ts +3 -0
  86. package/dist/templates/components/toast/toast-config.ts +45 -0
  87. package/dist/templates/components/toast/toast-texts.ts +46 -0
  88. package/dist/templates/components/toast/toast.ts +1000 -0
  89. package/dist/templates/components/toggle-group/index.ts +1 -0
  90. package/dist/templates/components/toggle-group/toggle-group.ts +406 -0
  91. package/dist/templates/components/toolbar/index.ts +1 -0
  92. package/dist/templates/components/toolbar/toolbar.ts +377 -0
  93. package/dist/templates/components/tooltip/index.ts +7 -0
  94. package/dist/templates/components/tooltip/tooltip.ts +407 -0
  95. package/dist/templates/theme/provider.ts +75 -6
  96. package/dist/templates/theme/theme-base.css +410 -9
  97. package/dist/templates/theme/types.ts +494 -4
  98. package/dist/templates/utils/cn.ts +15 -1
  99. package/dist/templates/utils/control-styles.ts +2 -2
  100. package/dist/templates/utils/overlay.ts +153 -0
  101. package/dist/ui/index.js +184 -8
  102. package/dist/ui/schema.json +100 -0
  103. package/dist/utils/write-files.js +166 -59
  104. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Preset tipado del tema (spec 6.3). Cada propiedad se convierte en una variable --mimi-*
3
- * de theme-base.css. Los derivados con color-mix (primary-hover, ring-soft, switch-off…)
4
- * no están aquí: se recalculan solos a partir de los colores.
3
+ * de theme-base.css. Los derivados con color-mix (primary-hover, ring-soft, switch-off y los
4
+ * <tono>-soft, <tono>-hover y <tono>-ring) no están aquí: se recalculan solos a partir de los
5
+ * colores.
5
6
  */
6
7
 
7
8
  /** Colores. `colors` se aplica en claro y `darkColors` en oscuro. */
@@ -25,9 +26,29 @@ export interface MimiColorTokens {
25
26
  border?: string;
26
27
  input?: string;
27
28
  inputBackground?: string;
29
+ /** Borde de un campo con el puntero encima (por defecto, mezcla de foreground e input). */
30
+ inputHover?: string;
28
31
  ring?: string;
29
32
  /** Fondo que oscurece la página detrás de paneles y diálogos. */
30
33
  overlay?: string;
34
+ success?: string;
35
+ successForeground?: string;
36
+ /** Texto sobre el fondo suave de success. */
37
+ successSoftForeground?: string;
38
+ warning?: string;
39
+ warningForeground?: string;
40
+ warningSoftForeground?: string;
41
+ info?: string;
42
+ infoForeground?: string;
43
+ infoSoftForeground?: string;
44
+ destructiveSoftForeground?: string;
45
+ /** Cuánto tono lleva cada fondo suave (-soft), en porcentaje: '12%'. */
46
+ softMix?: string;
47
+ tooltip?: string;
48
+ tooltipForeground?: string;
49
+ /** Fondo translúcido de las píldoras flotantes (mimi-toolbar, Pagination). */
50
+ glass?: string;
51
+ glassBorder?: string;
31
52
  }
32
53
 
33
54
  /** Sombras (`box-shadow` completo). `shadows` en claro y `darkShadows` en oscuro. */
@@ -41,12 +62,28 @@ export interface MimiShadowTokens {
41
62
  neutralHover?: string;
42
63
  /** Pulgar del Switch. */
43
64
  thumb?: string;
65
+ success?: string;
66
+ successHover?: string;
67
+ warning?: string;
68
+ warningHover?: string;
69
+ info?: string;
70
+ infoHover?: string;
71
+ /** Menús, diálogos, toasts y píldoras flotantes. */
72
+ popover?: string;
73
+ /** Glow (opción glow): van a --mimi-glow y --mimi-glow-<tono>, sin el prefijo shadow-. */
74
+ glow?: string;
75
+ glowPrimary?: string;
76
+ glowSuccess?: string;
77
+ glowWarning?: string;
78
+ glowInfo?: string;
79
+ glowDestructive?: string;
44
80
  }
45
81
 
46
82
  /** Radios fijos. Si no se definen, sm y card se calculan a partir de `radius`. */
47
83
  export interface MimiRadiusTokens {
48
84
  sm?: string;
49
85
  card?: string;
86
+ /** @deprecated Usa components.badge.radius (la misma variable). Sigue hasta la 1.0. */
50
87
  badge?: string;
51
88
  }
52
89
 
@@ -71,9 +108,41 @@ export interface MimiControlSizeTokens {
71
108
  heightLg?: string;
72
109
  }
73
110
 
111
+ /**
112
+ * Tokens compartidos por todos los controles (spec 13, nivel 2). Las alturas van a
113
+ * --mimi-control-height*; el resto, sin prefijo: focusRing → --mimi-focus-ring.
114
+ */
115
+ export interface MimiSharedTokens extends MimiControlSizeTokens {
116
+ /** Halo de foco en campos y botones (box-shadow). */
117
+ focusRing?: string;
118
+ /** Contorno de foco con teclado (outline). */
119
+ focusOutline?: string;
120
+ focusOffset?: string;
121
+ disabledOpacity?: string | number;
122
+ iconSize?: string;
123
+ iconSizeSm?: string;
124
+ }
125
+
126
+ /**
127
+ * Efectos que no son movimiento ni controles: desenfoques (y, más adelante, los de Mimi
128
+ * Effects). Iguales en claro y oscuro.
129
+ */
130
+ export interface MimiEffectTokens {
131
+ /** Desenfoque del fondo detrás de Dialog y Sheet. */
132
+ overlayBlur?: string;
133
+ /** Desenfoque de las píldoras translúcidas. */
134
+ glassBlur?: string;
135
+ }
136
+
74
137
  /** Tokens por componente. Cada componente los lee con la cascada de la spec 6.2. */
75
138
  export interface MimiControlTokens extends MimiControlSizeTokens {
76
139
  radius?: string;
140
+ /** Padding horizontal del tamaño default: --mimi-<prefijo>-px. */
141
+ px?: string;
142
+ /**
143
+ * @deprecated Nombre de la 0.1.0 (--mimi-<prefijo>-padding-x): usa `px`. Sigue funcionando
144
+ * hasta la 1.0 (spec 12).
145
+ */
77
146
  paddingX?: string;
78
147
  fontSize?: string;
79
148
  borderWidth?: string;
@@ -82,11 +151,19 @@ export interface MimiControlTokens extends MimiControlSizeTokens {
82
151
 
83
152
  /** paddingX y fontSize se aplican al tamaño default; sm y lg usan los valores del diseño. */
84
153
  export interface MimiButtonTokens extends MimiControlTokens {
154
+ /** Espacio entre ícono y texto del tamaño default. */
155
+ gap?: string;
156
+ /** Escala al presionar; si no, --mimi-press-scale. Con movimiento reducido vale 1. */
157
+ pressScale?: string | number;
85
158
  fontWeight?: string | number;
86
159
  letterSpacing?: string;
87
160
  }
88
161
 
89
162
  export interface MimiInputTokens extends MimiControlTokens {
163
+ /**
164
+ * @deprecated Es un color: cámbialo en el CSS con --mimi-input-placeholder (spec 6.2). Sigue
165
+ * funcionando hasta la 1.0.
166
+ */
90
167
  placeholderColor?: string;
91
168
  disabledOpacity?: string | number;
92
169
  }
@@ -95,16 +172,428 @@ export interface MimiCardTokens {
95
172
  radius?: string;
96
173
  borderWidth?: string;
97
174
  shadow?: string;
175
+ /** Padding exterior de las partes (1.5rem); los paddingHeader/Content/Footer lo detallan. */
176
+ padding?: string;
98
177
  paddingHeader?: string;
99
178
  paddingContent?: string;
100
179
  paddingFooter?: string;
101
180
  }
102
181
 
182
+ export interface MimiAvatarTokens {
183
+ size?: string;
184
+ sizeSm?: string;
185
+ sizeLg?: string;
186
+ radius?: string;
187
+ }
188
+
189
+ export interface MimiSwitchTokens {
190
+ /** Ancho de la pista. El pulgar se desplaza ancho − alto. */
191
+ width?: string;
192
+ /** Alto de la pista. El pulgar mide alto − 4px. */
193
+ height?: string;
194
+ }
195
+
196
+ export interface MimiCheckboxTokens {
197
+ size?: string;
198
+ radius?: string;
199
+ }
200
+
201
+ /** FormField (prefijo field). */
202
+ export interface MimiFieldTokens {
203
+ gap?: string;
204
+ labelSize?: string;
205
+ labelWeight?: string | number;
206
+ }
207
+
208
+ export interface MimiSeparatorTokens {
209
+ /** Grosor de la línea. */
210
+ size?: string;
211
+ }
212
+
213
+ export interface MimiSkeletonTokens {
214
+ radius?: string;
215
+ /** Duración del pulso: '1.6s'. */
216
+ duration?: string;
217
+ }
218
+
219
+ export interface MimiBadgeTokens {
220
+ height?: string;
221
+ px?: string;
222
+ fontSize?: string;
223
+ fontWeight?: string | number;
224
+ /** --mimi-badge-radius (el mismo que radii.badge de la 0.1.0). */
225
+ radius?: string;
226
+ }
227
+
228
+ /** Textarea: si no se definen, usa los de Input y después los compartidos. */
229
+ export interface MimiTextareaTokens {
230
+ radius?: string;
231
+ minHeight?: string;
232
+ lineHeight?: string;
233
+ py?: string;
234
+ }
235
+
236
+ /** Popover. Fondo, borde y sombra van en el CSS (`--mimi-popover-bg`, `-border`, `-shadow`). */
237
+ export interface MimiPopoverTokens {
238
+ radius?: string;
239
+ /** Padding del panel (16px). */
240
+ padding?: string;
241
+ /** Lado de la flecha (10px). */
242
+ arrow?: string;
243
+ }
244
+
245
+ /** Tooltip. Fondo y texto van en el CSS (`--mimi-tooltip-bg`, `--mimi-tooltip-fg`). */
246
+ export interface MimiTooltipTokens {
247
+ radius?: string;
248
+ fontSize?: string;
249
+ /** Lado de la flecha (8px). */
250
+ arrow?: string;
251
+ /** Retraso al abrir (300ms). `mimiTooltipDelay` lo cambia en un tooltip. */
252
+ delay?: string;
253
+ }
254
+
255
+ /**
256
+ * Dropdown Menu y Context Menu. Fondo, borde, sombra, hover, atajo y tono de peligro van en el CSS
257
+ * (`--mimi-menu-bg`, `-border`, `-shadow`, `-item-hover`, `-shortcut`, `-danger`, `-danger-hover`).
258
+ */
259
+ export interface MimiMenuTokens {
260
+ radius?: string;
261
+ /** Ancho del panel (240px). */
262
+ width?: string;
263
+ /** Alto de cada ítem (32px). */
264
+ itemHeight?: string;
265
+ itemRadius?: string;
266
+ }
267
+
268
+ /**
269
+ * Select. Fondos, borde, sombra y opción activa van en el CSS (`--mimi-select-trigger-bg`,
270
+ * `-border`, `-menu-bg`, `-menu-shadow`, `-option-hover`).
271
+ */
272
+ export interface MimiSelectTokens {
273
+ /** Radio del disparador y del panel. */
274
+ radius?: string;
275
+ /** Alto del disparador (el de los controles). */
276
+ height?: string;
277
+ /** Alto de cada opción (34px). */
278
+ optionHeight?: string;
279
+ optionRadius?: string;
280
+ }
281
+
282
+ /**
283
+ * Dialog. El fondo oscurecido, el fondo del panel y la sombra van en el CSS
284
+ * (`--mimi-dialog-overlay`, `-bg`, `-shadow`).
285
+ */
286
+ export interface MimiDialogTokens {
287
+ radius?: string;
288
+ /** Ancho del panel (420px). */
289
+ width?: string;
290
+ /** Relleno a los lados del encabezado, el cuerpo y el pie (24px). */
291
+ padding?: string;
292
+ /** Tamaño de la X (32px). */
293
+ closeSize?: string;
294
+ /** Desenfoque del fondo (el global `effects.overlayBlur`). */
295
+ overlayBlur?: string;
296
+ }
297
+
298
+ /**
299
+ * Confirm. Los colores del círculo del tono danger van en el CSS (`--mimi-confirm-icon-bg`,
300
+ * `-icon-fg`).
301
+ */
302
+ export interface MimiConfirmTokens {
303
+ /** Ancho del panel (380px). */
304
+ width?: string;
305
+ }
306
+
307
+ /**
308
+ * Toast. El fondo, el borde y la sombra van en el CSS (`--mimi-toast-bg`, `-border`, `-shadow`).
309
+ */
310
+ export interface MimiToastTokens {
311
+ radius?: string;
312
+ /** Ancho de la pila (340px). */
313
+ width?: string;
314
+ /** Separación de la pila con el borde de la pantalla (16px). */
315
+ offset?: string;
316
+ /** Cuánto asoma cada toast de atrás con la pila colapsada (12px). */
317
+ stackGap?: string;
318
+ }
319
+
320
+ /**
321
+ * Tabs. Los colores (pestañas, indicador y píldora) van en el CSS (`--mimi-tabs-fg`,
322
+ * `-active-fg`, `-indicator`, `-pill-bg`, `-pill-active`).
323
+ */
324
+ export interface MimiTabsTokens {
325
+ /** Alto de las pestañas subrayadas (44px). */
326
+ height?: string;
327
+ /** Curva del indicador (`cubic-bezier(.3, 1.35, .5, 1)`). */
328
+ spring?: string;
329
+ }
330
+
331
+ /**
332
+ * mimi-toolbar. Fondo, borde, sombra, disco activo, anillo y presionado van en el CSS
333
+ * (`--mimi-toolbar-bg`, `-border`, `-shadow`, `-active-bg`, `-active-fg`, `-ring`, `-pressed-bg`).
334
+ */
335
+ export interface MimiToolbarTokens {
336
+ /** Tamaño de cada botón (40px). */
337
+ itemSize?: string;
338
+ /** Desenfoque del fondo (el global `effects.glassBlur`). */
339
+ blur?: string;
340
+ }
341
+
342
+ /**
343
+ * Pagination. Fondo, borde, sombra flotante y error van en el CSS (`--mimi-pagination-bg`,
344
+ * `-border`, `-shadow`, `-error`).
345
+ */
346
+ export interface MimiPaginationTokens {
347
+ /** Tamaño de ← y → y alto del selector (el alto de control: sm 32px, md 40px). */
348
+ itemSize?: string;
349
+ /** Ancho del campo de página (sm 44px, md 52px). */
350
+ inputWidth?: string;
351
+ /** Desenfoque del fondo (el global `effects.glassBlur`). */
352
+ blur?: string;
353
+ }
354
+
355
+ /**
356
+ * Toggle Group. Fondo, textos, indicador y su sombra van en el CSS (`--mimi-toggle-group-bg`,
357
+ * `-fg`, `-active-fg`, `-indicator`, `-indicator-shadow`).
358
+ */
359
+ export interface MimiToggleGroupTokens {
360
+ /** Radio de cada ítem y del indicador (el global `radius`); el del grupo es radio + relleno. */
361
+ radius?: string;
362
+ /** Relleno del grupo (3px). */
363
+ padding?: string;
364
+ /** Separación entre ítems (2px). */
365
+ gap?: string;
366
+ /** Alto de cada ítem (32px). */
367
+ itemHeight?: string;
368
+ /** Relleno horizontal de cada ítem (12px). */
369
+ itemPx?: string;
370
+ /** Ancho mínimo de un ítem (el de uno solo con ícono, 44px). */
371
+ iconWidth?: string;
372
+ /** Tamaño de texto (13.5px). */
373
+ fontSize?: string;
374
+ /** Curva del indicador (`cubic-bezier(.3, 1.35, .5, 1)`, la de Tabs). */
375
+ spring?: string;
376
+ }
377
+
378
+ /**
379
+ * Progress. La pista y la parte llena van en el CSS (`--mimi-progress-track`, `-fill`).
380
+ */
381
+ export interface MimiProgressTokens {
382
+ /** Grosor de la barra (8px). */
383
+ height?: string;
384
+ /** Tamaño del círculo `default` (76px). */
385
+ circleSize?: string;
386
+ /** Grosor del trazo del círculo `default`, en unidades del viewBox de 36 (3). */
387
+ circleWidth?: string | number;
388
+ }
389
+
390
+ /**
391
+ * Number Input. El fondo del botón en hover va en el CSS (`--mimi-number-button-hover`); el
392
+ * borde, el fondo y los anillos son los de Input (globales).
393
+ */
394
+ export interface MimiNumberInputTokens {
395
+ /** Altura (el alto de control). */
396
+ height?: string;
397
+ /** Radio de la caja (el global `radius`). */
398
+ radius?: string;
399
+ /** Relleno horizontal de la caja (4px). */
400
+ px?: string;
401
+ /** Tamaño de los botones − y + (30px). */
402
+ buttonSize?: string;
403
+ /** Radio de los botones (el global `radius-sm`). */
404
+ buttonRadius?: string;
405
+ }
406
+
407
+ /**
408
+ * Password. El hover del botón y la pista del medidor van en el CSS
409
+ * (`--mimi-password-toggle-hover`, `-meter-track`); los colores de los niveles son los globales
410
+ * `--mimi-strength-*`.
411
+ */
412
+ export interface MimiPasswordTokens {
413
+ /** Botón de mostrar u ocultar (32px). */
414
+ toggleSize?: string;
415
+ /** Radio del botón (el global `radius-sm`). */
416
+ toggleRadius?: string;
417
+ /** Alto de cada barra del medidor (6px). */
418
+ meterHeight?: string;
419
+ /** Separación entre barras (4px). */
420
+ meterGap?: string;
421
+ }
422
+
423
+ /**
424
+ * Input Mask. El color del marcador y el fondo del prefijo van en el CSS
425
+ * (`--mimi-mask-placeholder`, `-prefix-bg`); la caja usa los tokens de Input.
426
+ */
427
+ export interface MimiInputMaskTokens {
428
+ /** Separación entre el prefijo, el ícono y el texto (8px). */
429
+ gap?: string;
430
+ /** Alto del prefijo (26px). */
431
+ prefixHeight?: string;
432
+ /** Radio del prefijo (el global `radius-sm`). */
433
+ prefixRadius?: string;
434
+ }
435
+
436
+ /**
437
+ * Input OTP. Fondo, borde, separador y cursor van en el CSS (`--mimi-otp-bg`, `-border`,
438
+ * `-separator`, `-caret`).
439
+ */
440
+ export interface MimiInputOtpTokens {
441
+ /** Ancho de la casilla (46px). */
442
+ width?: string;
443
+ /** Alto de la casilla (54px). */
444
+ height?: string;
445
+ /** Separación entre casillas (8px). */
446
+ gap?: string;
447
+ /** Radio (el global `radius`). */
448
+ radius?: string;
449
+ /** Tamaño del carácter (22px). */
450
+ fontSize?: string;
451
+ }
452
+
453
+ /** Chip (Tags Input y Combobox). Los colores van en el CSS (`--mimi-chip-bg`, `-fg`). */
454
+ export interface MimiChipTokens {
455
+ /** Alto (26px). */
456
+ height?: string;
457
+ /** Radio (el global `badge-radius`). */
458
+ radius?: string;
459
+ /** Tamaño de texto (13px). */
460
+ fontSize?: string;
461
+ /** Botón de quitar (18px). */
462
+ removeSize?: string;
463
+ }
464
+
465
+ /** Tags Input. El borde con el límite alcanzado va en el CSS (`--mimi-tags-full-border`). */
466
+ export interface MimiTagsInputTokens {
467
+ /** Separación entre chips (6px). */
468
+ gap?: string;
469
+ /** Relleno de la caja (`5px 10px 5px 6px`). */
470
+ padding?: string;
471
+ /** Ancho mínimo del campo de texto (120px). */
472
+ inputMinWidth?: string;
473
+ }
474
+
475
+ /**
476
+ * Slider. Pista, relleno, pulgar y su sombra van en el CSS (`--mimi-slider-track`, `-fill`,
477
+ * `-thumb`, `-thumb-shadow`); la burbuja usa los colores de Tooltip.
478
+ */
479
+ export interface MimiSliderTokens {
480
+ /** Grosor de la pista (6px). */
481
+ height?: string;
482
+ /** Tamaño del pulgar (20px). */
483
+ thumbSize?: string;
484
+ }
485
+
486
+ /**
487
+ * Combobox. El fondo y la sombra del panel y la opción activa van en el CSS
488
+ * (`--mimi-combobox-menu-bg`, `-menu-shadow`, `-option-hover`).
489
+ */
490
+ export interface MimiComboboxTokens {
491
+ /** Alto del campo (el global `control-height`). */
492
+ height?: string;
493
+ /** Radio del campo y del panel (el global `radius`). */
494
+ radius?: string;
495
+ /** Alto máximo del panel (228px). */
496
+ menuMaxHeight?: string;
497
+ /** Alto mínimo de cada opción (34px). */
498
+ optionHeight?: string;
499
+ /** Radio de cada opción (el global `radius-sm`). */
500
+ optionRadius?: string;
501
+ }
502
+
503
+ /**
504
+ * Calendario, Date Picker y Date Range (una tabla, decidido por defecto en la G2.9). Los colores
505
+ * van en el CSS (`--mimi-date-cell-hover`, `-selected-bg`, `-selected-fg`, `-range`,
506
+ * `-today-ring`, `-menu-bg`, `-menu-shadow`).
507
+ */
508
+ export interface MimiDateTokens {
509
+ /** Tamaño de cada día (36px). */
510
+ cellSize?: string;
511
+ /** Radio de cada día (el global `radius-sm`). */
512
+ cellRadius?: string;
513
+ /** Relleno del panel (12px). */
514
+ padding?: string;
515
+ /** Ancho de la columna de atajos del rango (130px). */
516
+ presetsWidth?: string;
517
+ }
518
+
519
+ /**
520
+ * File Upload. Fondos y bordes de la zona van en el CSS (`--mimi-upload-bg`, `-border`,
521
+ * `-active-bg`, `-active-border`).
522
+ */
523
+ export interface MimiFileUploadTokens {
524
+ /** Radio de la zona (el global `radius-card`). */
525
+ radius?: string;
526
+ /** Alto mínimo de la zona (176px). */
527
+ height?: string;
528
+ /** Círculo del ícono (44px). */
529
+ iconSize?: string;
530
+ /** Radio de cada fila (el global `radius`). */
531
+ itemRadius?: string;
532
+ /** Miniatura de cada fila (44px). */
533
+ thumbSize?: string;
534
+ }
535
+
536
+ /**
537
+ * Color Picker. Fondo, sombra, el borde y la sombra de los pulgares y el borde de las muestras
538
+ * van en el CSS (`--mimi-color-picker-bg`, `-shadow`, `-thumb-border`, `-thumb-shadow`,
539
+ * `-swatch-border`).
540
+ */
541
+ export interface MimiColorPickerTokens {
542
+ /** Radio del panel (el global `radius`). */
543
+ radius?: string;
544
+ /** Ancho del panel (280px). */
545
+ width?: string;
546
+ /** Relleno y separación (12px). */
547
+ padding?: string;
548
+ /** Alto del área de saturación (150px). */
549
+ areaHeight?: string;
550
+ /** Radio del área (el global `radius-sm`). */
551
+ areaRadius?: string;
552
+ /** Alto de la barra de tono (12px). */
553
+ hueHeight?: string;
554
+ /** Separación de las muestras (6px). */
555
+ swatchGap?: string;
556
+ }
557
+
558
+ /**
559
+ * Tokens por componente (spec 13). Solo los que no dependen del modo: los colores de los
560
+ * componentes (`--mimi-<prefijo>-bg`, `-fg`, `-border`…) se cambian en el CSS (spec 6.2).
561
+ */
103
562
  export interface MimiComponentTokens {
104
563
  button?: MimiButtonTokens;
105
564
  input?: MimiInputTokens;
106
565
  card?: MimiCardTokens;
107
- // select y dialog se agregan en la Fase 4
566
+ avatar?: MimiAvatarTokens;
567
+ switch?: MimiSwitchTokens;
568
+ checkbox?: MimiCheckboxTokens;
569
+ formField?: MimiFieldTokens;
570
+ separator?: MimiSeparatorTokens;
571
+ skeleton?: MimiSkeletonTokens;
572
+ badge?: MimiBadgeTokens;
573
+ textarea?: MimiTextareaTokens;
574
+ popover?: MimiPopoverTokens;
575
+ tooltip?: MimiTooltipTokens;
576
+ menu?: MimiMenuTokens;
577
+ select?: MimiSelectTokens;
578
+ dialog?: MimiDialogTokens;
579
+ confirm?: MimiConfirmTokens;
580
+ toast?: MimiToastTokens;
581
+ tabs?: MimiTabsTokens;
582
+ toolbar?: MimiToolbarTokens;
583
+ pagination?: MimiPaginationTokens;
584
+ toggleGroup?: MimiToggleGroupTokens;
585
+ progress?: MimiProgressTokens;
586
+ numberInput?: MimiNumberInputTokens;
587
+ password?: MimiPasswordTokens;
588
+ inputMask?: MimiInputMaskTokens;
589
+ inputOtp?: MimiInputOtpTokens;
590
+ chip?: MimiChipTokens;
591
+ tagsInput?: MimiTagsInputTokens;
592
+ slider?: MimiSliderTokens;
593
+ combobox?: MimiComboboxTokens;
594
+ date?: MimiDateTokens;
595
+ fileUpload?: MimiFileUploadTokens;
596
+ colorPicker?: MimiColorPickerTokens;
108
597
  }
109
598
 
110
599
  export interface MimiThemePreset {
@@ -119,6 +608,7 @@ export interface MimiThemePreset {
119
608
  darkShadows?: MimiShadowTokens;
120
609
  fonts?: MimiFontTokens;
121
610
  motion?: MimiMotionTokens;
122
- controls?: MimiControlSizeTokens;
611
+ effects?: MimiEffectTokens;
612
+ controls?: MimiSharedTokens;
123
613
  components?: MimiComponentTokens;
124
614
  }
@@ -5,7 +5,7 @@ import { extendTailwindMerge } from 'tailwind-merge';
5
5
  * tailwind-merge solo reconoce tallas (sm, md, lg…) en las escalas de sombra y radio.
6
6
  * Sin registrar los tokens de Mimi, `shadow-card` se tomaría como color de sombra y
7
7
  * `rounded-card` no se fusionaría con otros `rounded-*`; lo mismo `animate-mimi-pulse` con
8
- * `animate-none`. Los colores no hace falta registrarlos: la escala de color acepta cualquier
8
+ * `animate-none` y `backdrop-blur-glass` con otros `backdrop-blur-*`. Los colores no hace falta registrarlos: la escala de color acepta cualquier
9
9
  * nombre.
10
10
  */
11
11
  const twMerge = extendTailwindMerge({
@@ -20,8 +20,22 @@ const twMerge = extendTailwindMerge({
20
20
  'neutral',
21
21
  'neutral-hover',
22
22
  'thumb',
23
+ 'success',
24
+ 'success-hover',
25
+ 'warning',
26
+ 'warning-hover',
27
+ 'info',
28
+ 'info-hover',
29
+ 'popover',
30
+ 'glow',
31
+ 'glow-primary',
32
+ 'glow-success',
33
+ 'glow-warning',
34
+ 'glow-info',
35
+ 'glow-destructive',
23
36
  ],
24
37
  radius: ['card', 'badge'],
38
+ blur: ['glass', 'overlay'],
25
39
  animate: ['mimi-pulse'],
26
40
  },
27
41
  classGroups: {
@@ -19,9 +19,9 @@ export const fieldFocusStyles =
19
19
  export const controlDisabledStyles =
20
20
  'disabled:cursor-not-allowed disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50';
21
21
 
22
- /** Inválido: borde destructive fijo y halo destructive-soft solo al enfocar. */
22
+ /** Inválido: borde destructive fijo y halo destructive-ring solo al enfocar. */
23
23
  export const controlInvalidStyles =
24
- 'aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-destructive-soft';
24
+ 'aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-destructive-ring';
25
25
 
26
26
  /** Transición y escala al hacer clic. Solo botones. */
27
27
  export const controlPressStyles = 'mimi-transition active:scale-(--mimi-press-scale)';