@adamosuiteservices/ui 2.13.4 → 2.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/{button-Bn4LFAa9.js → button-B0lWuG-D.js} +27 -18
  2. package/dist/{button-Day6_fbu.cjs → button-DVrteFz9.cjs} +2 -2
  3. package/dist/button.cjs +1 -1
  4. package/dist/button.js +1 -1
  5. package/dist/{calendar-B1_ybTg0.js → calendar-CfqtuOWv.js} +1 -1
  6. package/dist/{calendar-CZkzHgYi.cjs → calendar-CpUN6BGK.cjs} +1 -1
  7. package/dist/calendar.cjs +1 -1
  8. package/dist/calendar.js +1 -1
  9. package/dist/colors.css +1 -1
  10. package/dist/{combobox-BOi7QzmO.js → combobox-B8HMlZy6.js} +1 -1
  11. package/dist/{combobox-0ndFo07_.cjs → combobox-Btj-hiBy.cjs} +1 -1
  12. package/dist/combobox.cjs +1 -1
  13. package/dist/combobox.js +1 -1
  14. package/dist/components/ui/alert/alert.d.ts +1 -1
  15. package/dist/components/ui/button/button.d.ts +3 -2
  16. package/dist/components/ui/card/card.d.ts +2 -2
  17. package/dist/date-picker-selector.cjs +1 -1
  18. package/dist/date-picker-selector.js +3 -3
  19. package/dist/file-upload.cjs +1 -1
  20. package/dist/file-upload.js +1 -1
  21. package/dist/full-screen-loader.cjs +1 -1
  22. package/dist/full-screen-loader.js +1 -1
  23. package/dist/input-group.cjs +1 -1
  24. package/dist/input-group.js +1 -1
  25. package/dist/pagination.cjs +1 -1
  26. package/dist/pagination.js +1 -1
  27. package/dist/sidebar.cjs +1 -1
  28. package/dist/sidebar.js +1 -1
  29. package/dist/styles.css +1 -1
  30. package/dist/tabs.cjs +14 -16
  31. package/dist/tabs.js +17 -19
  32. package/docs/AI-GUIDE.md +321 -321
  33. package/docs/components/layout/full-screen-loader.md +2 -2
  34. package/docs/components/layout/sidebar.md +399 -399
  35. package/docs/components/layout/toaster.md +436 -436
  36. package/docs/components/ui/accordion-rounded.md +584 -584
  37. package/docs/components/ui/accordion.md +269 -269
  38. package/docs/components/ui/button.md +35 -23
  39. package/docs/components/ui/calendar.md +1159 -1159
  40. package/docs/components/ui/card.md +1455 -1455
  41. package/docs/components/ui/checkbox.md +292 -292
  42. package/docs/components/ui/collapsible.md +323 -323
  43. package/docs/components/ui/dialog.md +628 -628
  44. package/docs/components/ui/field.md +706 -706
  45. package/docs/components/ui/hover-card.md +446 -446
  46. package/docs/components/ui/kbd.md +434 -434
  47. package/docs/components/ui/label.md +359 -359
  48. package/docs/components/ui/pagination.md +650 -650
  49. package/docs/components/ui/popover.md +536 -536
  50. package/docs/components/ui/progress.md +182 -182
  51. package/docs/components/ui/radio-group.md +311 -311
  52. package/docs/components/ui/separator.md +214 -214
  53. package/docs/components/ui/sheet.md +174 -174
  54. package/docs/components/ui/skeleton.md +140 -140
  55. package/docs/components/ui/spinner.md +170 -170
  56. package/docs/components/ui/switch.md +408 -408
  57. package/docs/components/ui/tabs-underline.md +106 -106
  58. package/docs/components/ui/tabs.md +125 -122
  59. package/docs/components/ui/textarea.md +243 -243
  60. package/docs/components/ui/toggle.md +237 -237
  61. package/docs/components/ui/tooltip.md +317 -317
  62. package/docs/components/ui/typography.md +320 -320
  63. package/package.json +1 -1
@@ -1,269 +1,269 @@
1
- # Accordion Component
2
-
3
- ## Descripción
4
-
5
- El componente `Accordion` es un elemento de interfaz vertically apilado que permite a los usuarios expandir y colapsar secciones de contenido.
6
-
7
- ## Importación
8
-
9
- ```typescript
10
- import {
11
- Accordion,
12
- AccordionContent,
13
- AccordionItem,
14
- AccordionTrigger,
15
- } from "@adamosuiteservices/ui/accordion";
16
- ```
17
-
18
- ## Componentes
19
-
20
- ### Accordion (Root)
21
-
22
- Contenedor principal que controla el comportamiento del accordion.
23
-
24
- ### AccordionItem
25
-
26
- Representa cada elemento individual del accordion.
27
-
28
- ### AccordionTrigger
29
-
30
- El botón/header que se puede clickear para expandir/colapsar.
31
-
32
- ### AccordionContent
33
-
34
- El contenido que se muestra/oculta al activar el trigger.
35
-
36
- ## Uso Básico
37
-
38
- ```tsx
39
- <Accordion type="single" collapsible>
40
- <AccordionItem value="item-1">
41
- <AccordionTrigger>Is it accessible?</AccordionTrigger>
42
- <AccordionContent>
43
- Yes. It adheres to the WAI-ARIA design pattern.
44
- </AccordionContent>
45
- </AccordionItem>
46
- <AccordionItem value="item-2">
47
- <AccordionTrigger>Is it styled?</AccordionTrigger>
48
- <AccordionContent>Yes. It comes with default styles.</AccordionContent>
49
- </AccordionItem>
50
- </Accordion>
51
- ```
52
-
53
- ## Tipos de Accordion
54
-
55
- ### Single (Un elemento a la vez)
56
-
57
- Solo permite que un elemento esté abierto a la vez.
58
-
59
- ```tsx
60
- <Accordion type="single" collapsible>
61
- {/* items */}
62
- </Accordion>
63
- ```
64
-
65
- ### Multiple (Múltiples elementos)
66
-
67
- Permite que múltiples elementos estén abiertos simultáneamente.
68
-
69
- ```tsx
70
- <Accordion type="multiple">{/* items */}</Accordion>
71
- ```
72
-
73
- ## Con Valor por Defecto
74
-
75
- Puedes especificar qué elemento debe estar abierto inicialmente.
76
-
77
- ```tsx
78
- <Accordion type="single" defaultValue="item-2" collapsible>
79
- <AccordionItem value="item-1">
80
- <AccordionTrigger>First Item</AccordionTrigger>
81
- <AccordionContent>Content 1</AccordionContent>
82
- </AccordionItem>
83
- <AccordionItem value="item-2">
84
- <AccordionTrigger>Second Item (Default Open)</AccordionTrigger>
85
- <AccordionContent>Content 2</AccordionContent>
86
- </AccordionItem>
87
- </Accordion>
88
- ```
89
-
90
- ## Modo No-Collapsible
91
-
92
- En modo `type="single"` sin `collapsible`, al menos un elemento debe estar abierto.
93
-
94
- ```tsx
95
- <Accordion type="single" collapsible={false} defaultValue="item-1">
96
- {/* items */}
97
- </Accordion>
98
- ```
99
-
100
- ## Controlado
101
-
102
- Puedes controlar el accordion externamente con estado.
103
-
104
- ```tsx
105
- const [value, setValue] = useState<string | undefined>("item-1");
106
-
107
- <Accordion type="single" collapsible value={value} onValueChange={setValue}>
108
- {/* items */}
109
- </Accordion>;
110
- ```
111
-
112
- ## Con Contenido Rico
113
-
114
- ### Con Listas
115
-
116
- ```tsx
117
- <AccordionContent>
118
- <div className="space-y-2">
119
- <p>Modern frontend development stack includes:</p>
120
- <ul className="list-disc list-inside space-y-1">
121
- <li>React for building user interfaces</li>
122
- <li>TypeScript for type safety</li>
123
- <li>Tailwind CSS for styling</li>
124
- </ul>
125
- </div>
126
- </AccordionContent>
127
- ```
128
-
129
- ### Con Iconos y Badges
130
-
131
- ```tsx
132
- import { Icon } from "@adamosuiteservices/ui/icon";
133
-
134
- <AccordionTrigger className="text-left">
135
- <div className="flex items-center gap-2">
136
- <Icon symbol="info" className="text-lg" />
137
- Product Information
138
- </div>
139
- </AccordionTrigger>
140
- <AccordionContent>
141
- <div className="flex gap-2">
142
- <Badge>Premium Quality</Badge>
143
- <Badge variant="secondary">Wireless</Badge>
144
- </div>
145
- </AccordionContent>
146
- ```
147
-
148
- ## Props
149
-
150
- ### Accordion
151
-
152
- | Prop | Tipo | Default | Descripción |
153
- | ------------- | ------------------------ | ------- | --------------------------------------------------------- |
154
- | type | `"single" \| "multiple"` | - | Tipo de accordion |
155
- | collapsible | `boolean` | - | Solo para type="single". Permite colapsar todos los items |
156
- | defaultValue | `string \| string[]` | - | Valor inicial abierto |
157
- | value | `string \| string[]` | - | Valor controlado |
158
- | onValueChange | `(value) => void` | - | Callback cuando cambia el valor |
159
-
160
- ### AccordionItem
161
-
162
- | Prop | Tipo | Default | Descripción |
163
- | --------- | --------- | ------- | ---------------------------------------- |
164
- | value | `string` | - | Identificador único del item (requerido) |
165
- | disabled | `boolean` | `false` | Desactiva el item |
166
- | className | `string` | - | Clases CSS adicionales |
167
-
168
- ### AccordionTrigger
169
-
170
- | Prop | Tipo | Default | Descripción |
171
- | --------- | ----------- | ------- | ---------------------- |
172
- | className | `string` | - | Clases CSS adicionales |
173
- | children | `ReactNode` | - | Contenido del trigger |
174
-
175
- ### AccordionContent
176
-
177
- | Prop | Tipo | Default | Descripción |
178
- | --------- | ----------- | ------- | --------------------------- |
179
- | className | `string` | - | Clases CSS adicionales |
180
- | children | `ReactNode` | - | Contenido a mostrar/ocultar |
181
-
182
- ## Animaciones
183
-
184
- El componente incluye animaciones suaves de entrada/salida:
185
-
186
- - El contenido se desliza hacia abajo al abrir
187
- - El contenido se desliza hacia arriba al cerrar
188
- - El icono chevron rota 180° al abrir
189
-
190
- ## Estilizado
191
-
192
- Cada item tiene un borde inferior que desaparece en el último elemento:
193
-
194
- ```tsx
195
- <AccordionItem className="border-b last:border-b-0">
196
- ```
197
-
198
- El trigger incluye hover effect con subrayado:
199
-
200
- ```tsx
201
- <AccordionTrigger className="hover:underline">
202
- ```
203
-
204
- ## Casos de Uso Comunes
205
-
206
- ### FAQ Section
207
-
208
- ```tsx
209
- <Accordion type="single" collapsible>
210
- <AccordionItem value="q1">
211
- <AccordionTrigger>How do I get started?</AccordionTrigger>
212
- <AccordionContent>Follow our quick start guide...</AccordionContent>
213
- </AccordionItem>
214
- </Accordion>
215
- ```
216
-
217
- ### Product Information
218
-
219
- ```tsx
220
- <Accordion type="single" collapsible defaultValue="info">
221
- <AccordionItem value="info">
222
- <AccordionTrigger>Product Information</AccordionTrigger>
223
- <AccordionContent>{/* Specifications, features, etc */}</AccordionContent>
224
- </AccordionItem>
225
- <AccordionItem value="shipping">
226
- <AccordionTrigger>Shipping & Delivery</AccordionTrigger>
227
- <AccordionContent>{/* Shipping details */}</AccordionContent>
228
- </AccordionItem>
229
- </Accordion>
230
- ```
231
-
232
- ### Project Timeline
233
-
234
- ```tsx
235
- <Accordion type="single" collapsible>
236
- <AccordionItem value="phase-1">
237
- <AccordionTrigger>
238
- <div className="flex items-center gap-2">
239
- <Icon symbol="check_circle" className="text-lg" />
240
- Phase 1: Planning
241
- </div>
242
- </AccordionTrigger>
243
- <AccordionContent>
244
- <Progress value={100} />
245
- {/* Phase details */}
246
- </AccordionContent>
247
- </AccordionItem>
248
- </Accordion>
249
- ```
250
-
251
- ## Accesibilidad
252
-
253
- - Sigue el patrón WAI-ARIA para accordions
254
- - Navegación por teclado completa
255
- - Estados de focus visibles
256
- - Screen readers pueden anunciar el estado expandido/colapsado
257
- - Cada trigger tiene el header semántico apropiado
258
-
259
- ## Notas de Implementación
260
-
261
- - Usa Radix UI Accordion internamente
262
- - Todos los estilos tienen prefijo ``
263
- - El icono keyboard_arrow_down se incluye automáticamente en el trigger
264
- - Las animaciones son manejadas por CSS y data attributes
265
-
266
- ## Referencias
267
-
268
- - Documentación de shadcn/ui: https://ui.shadcn.com/docs/components/accordion
269
- - Radix UI Accordion: https://www.radix-ui.com/primitives/docs/components/accordion
1
+ # Accordion Component
2
+
3
+ ## Descripción
4
+
5
+ El componente `Accordion` es un elemento de interfaz vertically apilado que permite a los usuarios expandir y colapsar secciones de contenido.
6
+
7
+ ## Importación
8
+
9
+ ```typescript
10
+ import {
11
+ Accordion,
12
+ AccordionContent,
13
+ AccordionItem,
14
+ AccordionTrigger,
15
+ } from "@adamosuiteservices/ui/accordion";
16
+ ```
17
+
18
+ ## Componentes
19
+
20
+ ### Accordion (Root)
21
+
22
+ Contenedor principal que controla el comportamiento del accordion.
23
+
24
+ ### AccordionItem
25
+
26
+ Representa cada elemento individual del accordion.
27
+
28
+ ### AccordionTrigger
29
+
30
+ El botón/header que se puede clickear para expandir/colapsar.
31
+
32
+ ### AccordionContent
33
+
34
+ El contenido que se muestra/oculta al activar el trigger.
35
+
36
+ ## Uso Básico
37
+
38
+ ```tsx
39
+ <Accordion type="single" collapsible>
40
+ <AccordionItem value="item-1">
41
+ <AccordionTrigger>Is it accessible?</AccordionTrigger>
42
+ <AccordionContent>
43
+ Yes. It adheres to the WAI-ARIA design pattern.
44
+ </AccordionContent>
45
+ </AccordionItem>
46
+ <AccordionItem value="item-2">
47
+ <AccordionTrigger>Is it styled?</AccordionTrigger>
48
+ <AccordionContent>Yes. It comes with default styles.</AccordionContent>
49
+ </AccordionItem>
50
+ </Accordion>
51
+ ```
52
+
53
+ ## Tipos de Accordion
54
+
55
+ ### Single (Un elemento a la vez)
56
+
57
+ Solo permite que un elemento esté abierto a la vez.
58
+
59
+ ```tsx
60
+ <Accordion type="single" collapsible>
61
+ {/* items */}
62
+ </Accordion>
63
+ ```
64
+
65
+ ### Multiple (Múltiples elementos)
66
+
67
+ Permite que múltiples elementos estén abiertos simultáneamente.
68
+
69
+ ```tsx
70
+ <Accordion type="multiple">{/* items */}</Accordion>
71
+ ```
72
+
73
+ ## Con Valor por Defecto
74
+
75
+ Puedes especificar qué elemento debe estar abierto inicialmente.
76
+
77
+ ```tsx
78
+ <Accordion type="single" defaultValue="item-2" collapsible>
79
+ <AccordionItem value="item-1">
80
+ <AccordionTrigger>First Item</AccordionTrigger>
81
+ <AccordionContent>Content 1</AccordionContent>
82
+ </AccordionItem>
83
+ <AccordionItem value="item-2">
84
+ <AccordionTrigger>Second Item (Default Open)</AccordionTrigger>
85
+ <AccordionContent>Content 2</AccordionContent>
86
+ </AccordionItem>
87
+ </Accordion>
88
+ ```
89
+
90
+ ## Modo No-Collapsible
91
+
92
+ En modo `type="single"` sin `collapsible`, al menos un elemento debe estar abierto.
93
+
94
+ ```tsx
95
+ <Accordion type="single" collapsible={false} defaultValue="item-1">
96
+ {/* items */}
97
+ </Accordion>
98
+ ```
99
+
100
+ ## Controlado
101
+
102
+ Puedes controlar el accordion externamente con estado.
103
+
104
+ ```tsx
105
+ const [value, setValue] = useState<string | undefined>("item-1");
106
+
107
+ <Accordion type="single" collapsible value={value} onValueChange={setValue}>
108
+ {/* items */}
109
+ </Accordion>;
110
+ ```
111
+
112
+ ## Con Contenido Rico
113
+
114
+ ### Con Listas
115
+
116
+ ```tsx
117
+ <AccordionContent>
118
+ <div className="space-y-2">
119
+ <p>Modern frontend development stack includes:</p>
120
+ <ul className="list-disc list-inside space-y-1">
121
+ <li>React for building user interfaces</li>
122
+ <li>TypeScript for type safety</li>
123
+ <li>Tailwind CSS for styling</li>
124
+ </ul>
125
+ </div>
126
+ </AccordionContent>
127
+ ```
128
+
129
+ ### Con Iconos y Badges
130
+
131
+ ```tsx
132
+ import { Icon } from "@adamosuiteservices/ui/icon";
133
+
134
+ <AccordionTrigger className="text-left">
135
+ <div className="flex items-center gap-2">
136
+ <Icon symbol="info" className="text-lg" />
137
+ Product Information
138
+ </div>
139
+ </AccordionTrigger>
140
+ <AccordionContent>
141
+ <div className="flex gap-2">
142
+ <Badge>Premium Quality</Badge>
143
+ <Badge variant="secondary">Wireless</Badge>
144
+ </div>
145
+ </AccordionContent>
146
+ ```
147
+
148
+ ## Props
149
+
150
+ ### Accordion
151
+
152
+ | Prop | Tipo | Default | Descripción |
153
+ | ------------- | ------------------------ | ------- | --------------------------------------------------------- |
154
+ | type | `"single" \| "multiple"` | - | Tipo de accordion |
155
+ | collapsible | `boolean` | - | Solo para type="single". Permite colapsar todos los items |
156
+ | defaultValue | `string \| string[]` | - | Valor inicial abierto |
157
+ | value | `string \| string[]` | - | Valor controlado |
158
+ | onValueChange | `(value) => void` | - | Callback cuando cambia el valor |
159
+
160
+ ### AccordionItem
161
+
162
+ | Prop | Tipo | Default | Descripción |
163
+ | --------- | --------- | ------- | ---------------------------------------- |
164
+ | value | `string` | - | Identificador único del item (requerido) |
165
+ | disabled | `boolean` | `false` | Desactiva el item |
166
+ | className | `string` | - | Clases CSS adicionales |
167
+
168
+ ### AccordionTrigger
169
+
170
+ | Prop | Tipo | Default | Descripción |
171
+ | --------- | ----------- | ------- | ---------------------- |
172
+ | className | `string` | - | Clases CSS adicionales |
173
+ | children | `ReactNode` | - | Contenido del trigger |
174
+
175
+ ### AccordionContent
176
+
177
+ | Prop | Tipo | Default | Descripción |
178
+ | --------- | ----------- | ------- | --------------------------- |
179
+ | className | `string` | - | Clases CSS adicionales |
180
+ | children | `ReactNode` | - | Contenido a mostrar/ocultar |
181
+
182
+ ## Animaciones
183
+
184
+ El componente incluye animaciones suaves de entrada/salida:
185
+
186
+ - El contenido se desliza hacia abajo al abrir
187
+ - El contenido se desliza hacia arriba al cerrar
188
+ - El icono chevron rota 180° al abrir
189
+
190
+ ## Estilizado
191
+
192
+ Cada item tiene un borde inferior que desaparece en el último elemento:
193
+
194
+ ```tsx
195
+ <AccordionItem className="border-b last:border-b-0">
196
+ ```
197
+
198
+ El trigger incluye hover effect con subrayado:
199
+
200
+ ```tsx
201
+ <AccordionTrigger className="hover:underline">
202
+ ```
203
+
204
+ ## Casos de Uso Comunes
205
+
206
+ ### FAQ Section
207
+
208
+ ```tsx
209
+ <Accordion type="single" collapsible>
210
+ <AccordionItem value="q1">
211
+ <AccordionTrigger>How do I get started?</AccordionTrigger>
212
+ <AccordionContent>Follow our quick start guide...</AccordionContent>
213
+ </AccordionItem>
214
+ </Accordion>
215
+ ```
216
+
217
+ ### Product Information
218
+
219
+ ```tsx
220
+ <Accordion type="single" collapsible defaultValue="info">
221
+ <AccordionItem value="info">
222
+ <AccordionTrigger>Product Information</AccordionTrigger>
223
+ <AccordionContent>{/* Specifications, features, etc */}</AccordionContent>
224
+ </AccordionItem>
225
+ <AccordionItem value="shipping">
226
+ <AccordionTrigger>Shipping & Delivery</AccordionTrigger>
227
+ <AccordionContent>{/* Shipping details */}</AccordionContent>
228
+ </AccordionItem>
229
+ </Accordion>
230
+ ```
231
+
232
+ ### Project Timeline
233
+
234
+ ```tsx
235
+ <Accordion type="single" collapsible>
236
+ <AccordionItem value="phase-1">
237
+ <AccordionTrigger>
238
+ <div className="flex items-center gap-2">
239
+ <Icon symbol="check_circle" className="text-lg" />
240
+ Phase 1: Planning
241
+ </div>
242
+ </AccordionTrigger>
243
+ <AccordionContent>
244
+ <Progress value={100} />
245
+ {/* Phase details */}
246
+ </AccordionContent>
247
+ </AccordionItem>
248
+ </Accordion>
249
+ ```
250
+
251
+ ## Accesibilidad
252
+
253
+ - Sigue el patrón WAI-ARIA para accordions
254
+ - Navegación por teclado completa
255
+ - Estados de focus visibles
256
+ - Screen readers pueden anunciar el estado expandido/colapsado
257
+ - Cada trigger tiene el header semántico apropiado
258
+
259
+ ## Notas de Implementación
260
+
261
+ - Usa Radix UI Accordion internamente
262
+ - Todos los estilos tienen prefijo ``
263
+ - El icono keyboard_arrow_down se incluye automáticamente en el trigger
264
+ - Las animaciones son manejadas por CSS y data attributes
265
+
266
+ ## Referencias
267
+
268
+ - Documentación de shadcn/ui: https://ui.shadcn.com/docs/components/accordion
269
+ - Radix UI Accordion: https://www.radix-ui.com/primitives/docs/components/accordion
@@ -377,28 +377,47 @@ Desactiva el botón y reduce opacidad.
377
377
 
378
378
  ### Loading
379
379
 
380
- Muestra spinner y desactiva interacciones.
380
+ Muestra spinner automático y desactiva interacciones usando la prop `loading`.
381
381
 
382
382
  ```tsx
383
- import { Icon } from "@adamosuiteservices/ui/icon";
384
-
385
- <Button disabled>
386
- <Icon symbol="progress_activity" className="animate-spin" />
387
- Loading...
388
- </Button>;
383
+ <Button loading>Loading...</Button>
389
384
  ```
390
385
 
391
- **Patrón recomendado**:
386
+ **Comportamiento**:
387
+
388
+ - Muestra un spinner automáticamente antes del contenido
389
+ - Desactiva el botón automáticamente (como si tuviera `disabled`)
390
+ - `pointer-events-none`: No acepta clicks ni hover
391
+ - El spinner usa el componente `Spinner` con animación integrada
392
+
393
+ **Patrón recomendado con estado**:
392
394
 
393
395
  ```tsx
394
396
  const [isLoading, setIsLoading] = useState(false);
395
397
 
396
- <Button disabled={isLoading} onClick={handleSubmit}>
397
- {isLoading && <Icon symbol="progress_activity" className="animate-spin" />}
398
- {isLoading ? "Saving..." : "Save Changes"}
398
+ const handleSubmit = async () => {
399
+ setIsLoading(true);
400
+ try {
401
+ await saveData();
402
+ } finally {
403
+ setIsLoading(false);
404
+ }
405
+ };
406
+
407
+ <Button loading={isLoading} onClick={handleSubmit}>
408
+ Save Changes
399
409
  </Button>;
400
410
  ```
401
411
 
412
+ **Con diferentes variantes**:
413
+
414
+ ```tsx
415
+ <Button variant="default" loading>Loading...</Button>
416
+ <Button variant="success" loading>Saving...</Button>
417
+ <Button variant="destructive" loading>Deleting...</Button>
418
+ <Button variant="outline" loading>Please wait</Button>
419
+ ```
420
+
402
421
  ### Hover
403
422
 
404
423
  Estado automático al pasar el mouse.
@@ -605,6 +624,7 @@ import { Icon } from "@adamosuiteservices/ui/icon";
605
624
  | variant | `"default" \| "success" \| "success-medium" \| "warning" \| "warning-medium" \| "destructive" \| "destructive-medium" \| "secondary" \| "outline" \| "ghost" \| "ghost-neutral" \| "link"` | `"default"` | Variante visual del botón |
606
625
  | size | `"default" \| "sm" \| "lg" \| "icon" \| "icon-sm" \| "icon-lg"` | `"default"` | Tamaño del botón |
607
626
  | asChild | `boolean` | `false` | Renderiza el hijo en lugar de un `<button>`. Usa Radix UI Slot |
627
+ | loading | `boolean` | `false` | Muestra spinner automático y desactiva el botón |
608
628
  | disabled | `boolean` | `false` | Desactiva el botón (opacity 50%, pointer-events none) |
609
629
  | className | `string` | - | Clases CSS adicionales |
610
630
  | children | `ReactNode` | - | Contenido del botón (texto, iconos, etc.) |
@@ -614,6 +634,8 @@ import { Icon } from "@adamosuiteservices/ui/icon";
614
634
 
615
635
  **Nota sobre asChild**: Cuando es `true`, el componente usa `Slot` de Radix UI para transferir todas las props y estilos al hijo directo.
616
636
 
637
+ **Nota sobre loading con asChild**: Cuando `loading` es `true`, el prop `asChild` se desactiva automáticamente porque `Slot` requiere un solo hijo React y el loading agrega un spinner adicional.
638
+
617
639
  ## Estilos Base Automáticos
618
640
 
619
641
  Todos los botones tienen estos estilos aplicados automáticamente:
@@ -732,18 +754,8 @@ Combinación típica en formularios.
732
754
  <Button type="button" variant="outline" onClick={onCancel}>
733
755
  Cancel
734
756
  </Button>
735
- <Button type="submit">
736
- {isSubmitting ? (
737
- <>
738
- <Loader2Icon className="animate-spin" />
739
- Saving...
740
- </>
741
- ) : (
742
- <>
743
- <SaveIcon />
744
- Save
745
- </>
746
- )}
757
+ <Button type="submit" loading={isSubmitting}>
758
+ Save
747
759
  </Button>
748
760
  </div>
749
761
  </form>