@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.
- package/dist/{button-Bn4LFAa9.js → button-B0lWuG-D.js} +27 -18
- package/dist/{button-Day6_fbu.cjs → button-DVrteFz9.cjs} +2 -2
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{calendar-B1_ybTg0.js → calendar-CfqtuOWv.js} +1 -1
- package/dist/{calendar-CZkzHgYi.cjs → calendar-CpUN6BGK.cjs} +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.js +1 -1
- package/dist/colors.css +1 -1
- package/dist/{combobox-BOi7QzmO.js → combobox-B8HMlZy6.js} +1 -1
- package/dist/{combobox-0ndFo07_.cjs → combobox-Btj-hiBy.cjs} +1 -1
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.js +1 -1
- package/dist/components/ui/alert/alert.d.ts +1 -1
- package/dist/components/ui/button/button.d.ts +3 -2
- package/dist/components/ui/card/card.d.ts +2 -2
- package/dist/date-picker-selector.cjs +1 -1
- package/dist/date-picker-selector.js +3 -3
- package/dist/file-upload.cjs +1 -1
- package/dist/file-upload.js +1 -1
- package/dist/full-screen-loader.cjs +1 -1
- package/dist/full-screen-loader.js +1 -1
- package/dist/input-group.cjs +1 -1
- package/dist/input-group.js +1 -1
- package/dist/pagination.cjs +1 -1
- package/dist/pagination.js +1 -1
- package/dist/sidebar.cjs +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tabs.cjs +14 -16
- package/dist/tabs.js +17 -19
- package/docs/AI-GUIDE.md +321 -321
- package/docs/components/layout/full-screen-loader.md +2 -2
- package/docs/components/layout/sidebar.md +399 -399
- package/docs/components/layout/toaster.md +436 -436
- package/docs/components/ui/accordion-rounded.md +584 -584
- package/docs/components/ui/accordion.md +269 -269
- package/docs/components/ui/button.md +35 -23
- package/docs/components/ui/calendar.md +1159 -1159
- package/docs/components/ui/card.md +1455 -1455
- package/docs/components/ui/checkbox.md +292 -292
- package/docs/components/ui/collapsible.md +323 -323
- package/docs/components/ui/dialog.md +628 -628
- package/docs/components/ui/field.md +706 -706
- package/docs/components/ui/hover-card.md +446 -446
- package/docs/components/ui/kbd.md +434 -434
- package/docs/components/ui/label.md +359 -359
- package/docs/components/ui/pagination.md +650 -650
- package/docs/components/ui/popover.md +536 -536
- package/docs/components/ui/progress.md +182 -182
- package/docs/components/ui/radio-group.md +311 -311
- package/docs/components/ui/separator.md +214 -214
- package/docs/components/ui/sheet.md +174 -174
- package/docs/components/ui/skeleton.md +140 -140
- package/docs/components/ui/spinner.md +170 -170
- package/docs/components/ui/switch.md +408 -408
- package/docs/components/ui/tabs-underline.md +106 -106
- package/docs/components/ui/tabs.md +125 -122
- package/docs/components/ui/textarea.md +243 -243
- package/docs/components/ui/toggle.md +237 -237
- package/docs/components/ui/tooltip.md +317 -317
- package/docs/components/ui/typography.md +320 -320
- 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
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
397
|
-
|
|
398
|
-
{
|
|
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
|
-
|
|
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>
|