@adamosuiteservices/ui 2.13.2 → 2.13.4

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 (35) hide show
  1. package/dist/components/ui/slider/slider.d.ts +5 -2
  2. package/dist/slider.cjs +7 -8
  3. package/dist/slider.js +192 -178
  4. package/dist/styles.css +1 -1
  5. package/docs/AI-GUIDE.md +321 -321
  6. package/docs/components/layout/sidebar.md +399 -399
  7. package/docs/components/layout/toaster.md +436 -436
  8. package/docs/components/ui/accordion-rounded.md +584 -584
  9. package/docs/components/ui/accordion.md +269 -269
  10. package/docs/components/ui/calendar.md +1159 -1159
  11. package/docs/components/ui/card.md +1455 -1455
  12. package/docs/components/ui/checkbox.md +292 -292
  13. package/docs/components/ui/collapsible.md +323 -323
  14. package/docs/components/ui/dialog.md +628 -628
  15. package/docs/components/ui/field.md +706 -706
  16. package/docs/components/ui/hover-card.md +446 -446
  17. package/docs/components/ui/kbd.md +434 -434
  18. package/docs/components/ui/label.md +359 -359
  19. package/docs/components/ui/pagination.md +650 -650
  20. package/docs/components/ui/popover.md +536 -536
  21. package/docs/components/ui/progress.md +182 -182
  22. package/docs/components/ui/radio-group.md +311 -311
  23. package/docs/components/ui/separator.md +214 -214
  24. package/docs/components/ui/sheet.md +174 -174
  25. package/docs/components/ui/skeleton.md +140 -140
  26. package/docs/components/ui/slider.md +460 -341
  27. package/docs/components/ui/spinner.md +170 -170
  28. package/docs/components/ui/switch.md +408 -408
  29. package/docs/components/ui/tabs-underline.md +106 -106
  30. package/docs/components/ui/tabs.md +122 -122
  31. package/docs/components/ui/textarea.md +243 -243
  32. package/docs/components/ui/toggle.md +237 -237
  33. package/docs/components/ui/tooltip.md +317 -317
  34. package/docs/components/ui/typography.md +320 -320
  35. package/package.json +1 -1
@@ -1,323 +1,323 @@
1
- # Collapsible
2
-
3
- Componente interactivo basado en Radix UI para expandir/colapsar contenido con animaciones suaves. Útil para FAQs, menús de navegación, y secciones opcionales.
4
-
5
- ## Importación
6
-
7
- ```tsx
8
- import {
9
- Collapsible,
10
- CollapsibleTrigger,
11
- CollapsibleContent,
12
- } from "@adamosuiteservices/ui/collapsible";
13
- ```
14
-
15
- ## Anatomía
16
-
17
- ```tsx
18
- <Collapsible>
19
- <CollapsibleTrigger>Click to toggle</CollapsibleTrigger>
20
- <CollapsibleContent>Hidden content that expands/collapses</CollapsibleContent>
21
- </Collapsible>
22
- ```
23
-
24
- **Componentes**: 3 (Collapsible root, CollapsibleTrigger, CollapsibleContent)
25
-
26
- ## Props Principales
27
-
28
- ### Collapsible (Root)
29
-
30
- | Prop | Tipo | Default | Descripción |
31
- | -------------- | ------------------------- | ------- | ----------------------------------- |
32
- | `open` | `boolean` | - | Estado controlado (abierto/cerrado) |
33
- | `defaultOpen` | `boolean` | `false` | Estado inicial no controlado |
34
- | `onOpenChange` | `(open: boolean) => void` | - | Callback al cambiar estado |
35
- | `disabled` | `boolean` | `false` | Desactiva interacción |
36
- | `className` | `string` | - | Clases CSS adicionales |
37
-
38
- ### CollapsibleTrigger
39
-
40
- | Prop | Tipo | Default | Descripción |
41
- | ----------- | --------- | ------- | ----------------------------------- |
42
- | `asChild` | `boolean` | `false` | Usa child como trigger (Radix Slot) |
43
- | `className` | `string` | - | Clases CSS adicionales |
44
-
45
- ### CollapsibleContent
46
-
47
- | Prop | Tipo | Default | Descripción |
48
- | ------------ | --------- | ------- | ----------------------------------------- |
49
- | `forceMount` | `boolean` | `false` | Fuerza montaje en DOM aunque esté cerrado |
50
- | `className` | `string` | - | Clases CSS adicionales |
51
-
52
- ## Patrones de Uso
53
-
54
- ### Básico (No Controlado)
55
-
56
- ```tsx
57
- <Collapsible>
58
- <CollapsibleTrigger>Show details</CollapsibleTrigger>
59
- <CollapsibleContent>
60
- <p>Additional information here.</p>
61
- </CollapsibleContent>
62
- </Collapsible>
63
- ```
64
-
65
- ### Controlado con Estado
66
-
67
- ```tsx
68
- const [isOpen, setIsOpen] = useState(false);
69
-
70
- <Collapsible open={isOpen} onOpenChange={setIsOpen}>
71
- <CollapsibleTrigger>{isOpen ? "Hide" : "Show"} content</CollapsibleTrigger>
72
- <CollapsibleContent>
73
- <p>Controlled content</p>
74
- </CollapsibleContent>
75
- </Collapsible>;
76
- ```
77
-
78
- ### Con Botón Custom (asChild)
79
-
80
- ```tsx
81
- import { Button } from "@adamosuiteservices/ui/button";
82
- import { Icon } from "@adamosuiteservices/ui/icon";
83
-
84
- <Collapsible>
85
- <CollapsibleTrigger asChild>
86
- <Button variant="outline" size="sm">
87
- <Icon symbol="unfold_more" className="text-base" />
88
- Toggle
89
- </Button>
90
- </CollapsibleTrigger>
91
- <CollapsibleContent>
92
- <p>Content</p>
93
- </CollapsibleContent>
94
- </Collapsible>;
95
- ```
96
-
97
- ### Con Chevron Rotatorio
98
-
99
- ```tsx
100
- const [isOpen, setIsOpen] = useState(false);
101
-
102
- <Collapsible open={isOpen} onOpenChange={setIsOpen}>
103
- <CollapsibleTrigger className="flex w-full items-center justify-between p-4 border rounded-lg hover:bg-muted">
104
- <span>Section Title</span>
105
- <Icon
106
- symbol="expand_more"
107
- className={`text-lg transition-transform ${isOpen ? "rotate-180" : ""}`}
108
- />
109
- </CollapsibleTrigger>
110
- <CollapsibleContent className="p-4">
111
- <p>Expandable content</p>
112
- </CollapsibleContent>
113
- </Collapsible>;
114
- ```
115
-
116
- ### FAQ Pattern
117
-
118
- ```tsx
119
- <div className="space-y-4">
120
- <Collapsible>
121
- <CollapsibleTrigger className="flex w-full items-center justify-between border p-4 rounded-lg hover:bg-muted">
122
- <span className="font-medium">What is this?</span>
123
- <Icon symbol="chevron_right" className="text-lg" />
124
- </CollapsibleTrigger>
125
- <CollapsibleContent className="px-4 pb-4">
126
- <p className="text-sm text-muted-foreground">
127
- This is a reusable UI component library.
128
- </p>
129
- </CollapsibleContent>
130
- </Collapsible>
131
-
132
- <Collapsible>
133
- <CollapsibleTrigger className="flex w-full items-center justify-between border p-4 rounded-lg hover:bg-muted">
134
- <span className="font-medium">How to install?</span>
135
- <Icon symbol="chevron_right" className="text-lg" />
136
- </CollapsibleTrigger>
137
- <CollapsibleContent className="px-4 pb-4">
138
- <p className="text-sm text-muted-foreground">
139
- Use: <code>npm install @adamosuiteservices/ui</code>
140
- </p>
141
- </CollapsibleContent>
142
- </Collapsible>
143
- </div>
144
- ```
145
-
146
- ### Navigation Menu
147
-
148
- ```tsx
149
- const [openSections, setOpenSections] = useState<string[]>(["settings"]);
150
-
151
- const toggleSection = (id: string) => {
152
- setOpenSections((prev) =>
153
- prev.includes(id) ? prev.filter((s) => s !== id) : [...prev, id]
154
- );
155
- };
156
-
157
- <div className="space-y-2">
158
- <Collapsible
159
- open={openSections.includes("settings")}
160
- onOpenChange={() => toggleSection("settings")}
161
- >
162
- <CollapsibleTrigger className="flex w-full items-center gap-2 p-3 rounded-lg hover:bg-muted">
163
- <Icon symbol="settings" className="text-lg" />
164
- <span className="flex-1 font-medium">Settings</span>
165
- <Icon
166
- symbol="expand_more"
167
- className={`text-lg transition-transform ${
168
- openSections.includes("settings") ? "rotate-180" : ""
169
- }`}
170
- />
171
- </CollapsibleTrigger>
172
- <CollapsibleContent className="ml-6 space-y-1">
173
- <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
174
- Profile
175
- </a>
176
- <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
177
- Security
178
- </a>
179
- </CollapsibleContent>
180
- </Collapsible>
181
-
182
- <Collapsible
183
- open={openSections.includes("account")}
184
- onOpenChange={() => toggleSection("account")}
185
- >
186
- <CollapsibleTrigger className="flex w-full items-center gap-2 p-3 rounded-lg hover:bg-muted">
187
- <Icon symbol="person" className="text-lg" />
188
- <span className="flex-1 font-medium">Account</span>
189
- <Icon
190
- symbol="expand_more"
191
- className={`text-lg transition-transform ${
192
- openSections.includes("account") ? "rotate-180" : ""
193
- }`}
194
- />
195
- </CollapsibleTrigger>
196
- <CollapsibleContent className="ml-6 space-y-1">
197
- <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
198
- Billing
199
- </a>
200
- <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
201
- API Keys
202
- </a>
203
- </CollapsibleContent>
204
- </Collapsible>
205
- </div>;
206
- ```
207
-
208
- ### Lista de Archivos
209
-
210
- ```tsx
211
- <Collapsible defaultOpen className="w-full space-y-2">
212
- <CollapsibleTrigger className="w-full border p-3 rounded-lg text-left font-medium hover:bg-muted">
213
- Recent Files
214
- </CollapsibleTrigger>
215
- <CollapsibleContent className="space-y-1">
216
- <div className="border p-3 rounded text-sm">document.pdf</div>
217
- <div className="border p-3 rounded text-sm">presentation.pptx</div>
218
- <div className="border p-3 rounded text-sm">spreadsheet.xlsx</div>
219
- </CollapsibleContent>
220
- </Collapsible>
221
- ```
222
-
223
- ### Sección Deshabilitada
224
-
225
- ```tsx
226
- <Collapsible disabled>
227
- <CollapsibleTrigger className="w-full border p-3 rounded-lg text-left font-medium opacity-50 cursor-not-allowed">
228
- Coming Soon
229
- </CollapsibleTrigger>
230
- <CollapsibleContent>
231
- <p className="p-3 text-sm text-muted-foreground">Not available yet.</p>
232
- </CollapsibleContent>
233
- </Collapsible>
234
- ```
235
-
236
- ### Con Layout de Tarjeta
237
-
238
- ```tsx
239
- <Collapsible className="border rounded-lg p-4">
240
- <div className="flex items-center justify-between mb-2">
241
- <h4 className="font-semibold">@user starred 3 repos</h4>
242
- <CollapsibleTrigger asChild>
243
- <Button variant="outline" size="sm">
244
- <Icon symbol="unfold_more" className="text-base" />
245
- </Button>
246
- </CollapsibleTrigger>
247
- </div>
248
-
249
- <div className="border px-4 py-2 rounded font-mono text-sm">
250
- @radix-ui/primitives
251
- </div>
252
-
253
- <CollapsibleContent className="mt-2 space-y-2">
254
- <div className="border px-4 py-2 rounded font-mono text-sm">
255
- @radix-ui/colors
256
- </div>
257
- <div className="border px-4 py-2 rounded font-mono text-sm">
258
- @stitches/react
259
- </div>
260
- </CollapsibleContent>
261
- </Collapsible>
262
- ```
263
-
264
- ## Casos de Uso Comunes
265
-
266
- **FAQ sections**: Lista de preguntas frecuentes expandibles
267
- **Navigation menus**: Menús colapsables con subsecciones
268
- **Details/Summary**: Información adicional opcional
269
- **File browsers**: Estructuras de carpetas expandibles
270
- **Settings panels**: Grupos de configuraciones organizadas
271
- **Table rows**: Filas de tabla con detalles expandibles
272
-
273
- ## Estilos y Animaciones
274
-
275
- ### Data States
276
-
277
- - **Abierto**: `data-state="open"` en todos los componentes
278
- - **Cerrado**: `data-state="closed"` en todos los componentes
279
- - **Disabled**: `data-disabled` cuando `disabled={true}`
280
-
281
- ### Animación Suave
282
-
283
- El contenido usa animaciones CSS automáticas (height, opacity) al expandir/colapsar. No requiere configuración adicional.
284
-
285
- ### Custom Animations
286
-
287
- ```tsx
288
- <CollapsibleContent className="data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp">
289
- Content with custom animations
290
- </CollapsibleContent>
291
- ```
292
-
293
- ## Accesibilidad
294
-
295
- - ✅ **Navegación teclado**: Enter/Space para toggle en trigger, Tab para navegar
296
- - ✅ **ARIA**: `aria-expanded`, `aria-controls` automáticos en trigger
297
- - ✅ **Screen readers**: Anuncia estado expandido/colapsado
298
- - ✅ **Focus visible**: Trigger recibe focus del teclado
299
- - ✅ **Disabled state**: `aria-disabled` cuando disabled
300
-
301
- ## Notas de Implementación
302
-
303
- - **Basado en Radix UI**: `@radix-ui/react-collapsible`
304
- - **No tiene estilos propios**: Wrapper limpio, agrega tus propios estilos
305
- - **Data slots**: `data-slot="collapsible"`, `data-slot="collapsible-trigger"`, `data-slot="collapsible-content"`
306
- - **asChild pattern**: CollapsibleTrigger soporta `asChild` para usar componentes custom
307
- - **Animaciones automáticas**: Radix maneja transiciones de height/opacity
308
- - **forceMount**: Útil para animaciones custom o cuando necesitas el DOM montado siempre
309
- - **Multiple instances**: Puedes tener múltiples Collapsibles independientes
310
- - **Accordion vs Collapsible**: Usa Accordion cuando solo uno debe estar abierto, Collapsible para control independiente
311
-
312
- ## Troubleshooting
313
-
314
- **Animación no suave**: Radix maneja animaciones automáticamente, si no se ve suave verifica que no haya `transition` conflictivos en CSS
315
- **Trigger no clickeable**: Verifica que esté dentro de `<Collapsible>`, no como hermano
316
- **asChild no funciona**: Asegúrate que el child acepta props `onClick` y `aria-*`
317
- **Content siempre visible**: Verifica que no tengas `forceMount` activado sin intención
318
- **Estado no sincroniza**: En modo controlado, asegúrate de usar ambos `open` y `onOpenChange`
319
-
320
- ## Referencias
321
-
322
- - **Radix UI Collapsible**: https://www.radix-ui.com/primitives/docs/components/collapsible
323
- - **ARIA Disclosure**: https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/
1
+ # Collapsible
2
+
3
+ Componente interactivo basado en Radix UI para expandir/colapsar contenido con animaciones suaves. Útil para FAQs, menús de navegación, y secciones opcionales.
4
+
5
+ ## Importación
6
+
7
+ ```tsx
8
+ import {
9
+ Collapsible,
10
+ CollapsibleTrigger,
11
+ CollapsibleContent,
12
+ } from "@adamosuiteservices/ui/collapsible";
13
+ ```
14
+
15
+ ## Anatomía
16
+
17
+ ```tsx
18
+ <Collapsible>
19
+ <CollapsibleTrigger>Click to toggle</CollapsibleTrigger>
20
+ <CollapsibleContent>Hidden content that expands/collapses</CollapsibleContent>
21
+ </Collapsible>
22
+ ```
23
+
24
+ **Componentes**: 3 (Collapsible root, CollapsibleTrigger, CollapsibleContent)
25
+
26
+ ## Props Principales
27
+
28
+ ### Collapsible (Root)
29
+
30
+ | Prop | Tipo | Default | Descripción |
31
+ | -------------- | ------------------------- | ------- | ----------------------------------- |
32
+ | `open` | `boolean` | - | Estado controlado (abierto/cerrado) |
33
+ | `defaultOpen` | `boolean` | `false` | Estado inicial no controlado |
34
+ | `onOpenChange` | `(open: boolean) => void` | - | Callback al cambiar estado |
35
+ | `disabled` | `boolean` | `false` | Desactiva interacción |
36
+ | `className` | `string` | - | Clases CSS adicionales |
37
+
38
+ ### CollapsibleTrigger
39
+
40
+ | Prop | Tipo | Default | Descripción |
41
+ | ----------- | --------- | ------- | ----------------------------------- |
42
+ | `asChild` | `boolean` | `false` | Usa child como trigger (Radix Slot) |
43
+ | `className` | `string` | - | Clases CSS adicionales |
44
+
45
+ ### CollapsibleContent
46
+
47
+ | Prop | Tipo | Default | Descripción |
48
+ | ------------ | --------- | ------- | ----------------------------------------- |
49
+ | `forceMount` | `boolean` | `false` | Fuerza montaje en DOM aunque esté cerrado |
50
+ | `className` | `string` | - | Clases CSS adicionales |
51
+
52
+ ## Patrones de Uso
53
+
54
+ ### Básico (No Controlado)
55
+
56
+ ```tsx
57
+ <Collapsible>
58
+ <CollapsibleTrigger>Show details</CollapsibleTrigger>
59
+ <CollapsibleContent>
60
+ <p>Additional information here.</p>
61
+ </CollapsibleContent>
62
+ </Collapsible>
63
+ ```
64
+
65
+ ### Controlado con Estado
66
+
67
+ ```tsx
68
+ const [isOpen, setIsOpen] = useState(false);
69
+
70
+ <Collapsible open={isOpen} onOpenChange={setIsOpen}>
71
+ <CollapsibleTrigger>{isOpen ? "Hide" : "Show"} content</CollapsibleTrigger>
72
+ <CollapsibleContent>
73
+ <p>Controlled content</p>
74
+ </CollapsibleContent>
75
+ </Collapsible>;
76
+ ```
77
+
78
+ ### Con Botón Custom (asChild)
79
+
80
+ ```tsx
81
+ import { Button } from "@adamosuiteservices/ui/button";
82
+ import { Icon } from "@adamosuiteservices/ui/icon";
83
+
84
+ <Collapsible>
85
+ <CollapsibleTrigger asChild>
86
+ <Button variant="outline" size="sm">
87
+ <Icon symbol="unfold_more" className="text-base" />
88
+ Toggle
89
+ </Button>
90
+ </CollapsibleTrigger>
91
+ <CollapsibleContent>
92
+ <p>Content</p>
93
+ </CollapsibleContent>
94
+ </Collapsible>;
95
+ ```
96
+
97
+ ### Con Chevron Rotatorio
98
+
99
+ ```tsx
100
+ const [isOpen, setIsOpen] = useState(false);
101
+
102
+ <Collapsible open={isOpen} onOpenChange={setIsOpen}>
103
+ <CollapsibleTrigger className="flex w-full items-center justify-between p-4 border rounded-lg hover:bg-muted">
104
+ <span>Section Title</span>
105
+ <Icon
106
+ symbol="expand_more"
107
+ className={`text-lg transition-transform ${isOpen ? "rotate-180" : ""}`}
108
+ />
109
+ </CollapsibleTrigger>
110
+ <CollapsibleContent className="p-4">
111
+ <p>Expandable content</p>
112
+ </CollapsibleContent>
113
+ </Collapsible>;
114
+ ```
115
+
116
+ ### FAQ Pattern
117
+
118
+ ```tsx
119
+ <div className="space-y-4">
120
+ <Collapsible>
121
+ <CollapsibleTrigger className="flex w-full items-center justify-between border p-4 rounded-lg hover:bg-muted">
122
+ <span className="font-medium">What is this?</span>
123
+ <Icon symbol="chevron_right" className="text-lg" />
124
+ </CollapsibleTrigger>
125
+ <CollapsibleContent className="px-4 pb-4">
126
+ <p className="text-sm text-muted-foreground">
127
+ This is a reusable UI component library.
128
+ </p>
129
+ </CollapsibleContent>
130
+ </Collapsible>
131
+
132
+ <Collapsible>
133
+ <CollapsibleTrigger className="flex w-full items-center justify-between border p-4 rounded-lg hover:bg-muted">
134
+ <span className="font-medium">How to install?</span>
135
+ <Icon symbol="chevron_right" className="text-lg" />
136
+ </CollapsibleTrigger>
137
+ <CollapsibleContent className="px-4 pb-4">
138
+ <p className="text-sm text-muted-foreground">
139
+ Use: <code>npm install @adamosuiteservices/ui</code>
140
+ </p>
141
+ </CollapsibleContent>
142
+ </Collapsible>
143
+ </div>
144
+ ```
145
+
146
+ ### Navigation Menu
147
+
148
+ ```tsx
149
+ const [openSections, setOpenSections] = useState<string[]>(["settings"]);
150
+
151
+ const toggleSection = (id: string) => {
152
+ setOpenSections((prev) =>
153
+ prev.includes(id) ? prev.filter((s) => s !== id) : [...prev, id]
154
+ );
155
+ };
156
+
157
+ <div className="space-y-2">
158
+ <Collapsible
159
+ open={openSections.includes("settings")}
160
+ onOpenChange={() => toggleSection("settings")}
161
+ >
162
+ <CollapsibleTrigger className="flex w-full items-center gap-2 p-3 rounded-lg hover:bg-muted">
163
+ <Icon symbol="settings" className="text-lg" />
164
+ <span className="flex-1 font-medium">Settings</span>
165
+ <Icon
166
+ symbol="expand_more"
167
+ className={`text-lg transition-transform ${
168
+ openSections.includes("settings") ? "rotate-180" : ""
169
+ }`}
170
+ />
171
+ </CollapsibleTrigger>
172
+ <CollapsibleContent className="ml-6 space-y-1">
173
+ <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
174
+ Profile
175
+ </a>
176
+ <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
177
+ Security
178
+ </a>
179
+ </CollapsibleContent>
180
+ </Collapsible>
181
+
182
+ <Collapsible
183
+ open={openSections.includes("account")}
184
+ onOpenChange={() => toggleSection("account")}
185
+ >
186
+ <CollapsibleTrigger className="flex w-full items-center gap-2 p-3 rounded-lg hover:bg-muted">
187
+ <Icon symbol="person" className="text-lg" />
188
+ <span className="flex-1 font-medium">Account</span>
189
+ <Icon
190
+ symbol="expand_more"
191
+ className={`text-lg transition-transform ${
192
+ openSections.includes("account") ? "rotate-180" : ""
193
+ }`}
194
+ />
195
+ </CollapsibleTrigger>
196
+ <CollapsibleContent className="ml-6 space-y-1">
197
+ <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
198
+ Billing
199
+ </a>
200
+ <a href="#" className="block px-3 py-2 text-sm rounded hover:bg-muted">
201
+ API Keys
202
+ </a>
203
+ </CollapsibleContent>
204
+ </Collapsible>
205
+ </div>;
206
+ ```
207
+
208
+ ### Lista de Archivos
209
+
210
+ ```tsx
211
+ <Collapsible defaultOpen className="w-full space-y-2">
212
+ <CollapsibleTrigger className="w-full border p-3 rounded-lg text-left font-medium hover:bg-muted">
213
+ Recent Files
214
+ </CollapsibleTrigger>
215
+ <CollapsibleContent className="space-y-1">
216
+ <div className="border p-3 rounded text-sm">document.pdf</div>
217
+ <div className="border p-3 rounded text-sm">presentation.pptx</div>
218
+ <div className="border p-3 rounded text-sm">spreadsheet.xlsx</div>
219
+ </CollapsibleContent>
220
+ </Collapsible>
221
+ ```
222
+
223
+ ### Sección Deshabilitada
224
+
225
+ ```tsx
226
+ <Collapsible disabled>
227
+ <CollapsibleTrigger className="w-full border p-3 rounded-lg text-left font-medium opacity-50 cursor-not-allowed">
228
+ Coming Soon
229
+ </CollapsibleTrigger>
230
+ <CollapsibleContent>
231
+ <p className="p-3 text-sm text-muted-foreground">Not available yet.</p>
232
+ </CollapsibleContent>
233
+ </Collapsible>
234
+ ```
235
+
236
+ ### Con Layout de Tarjeta
237
+
238
+ ```tsx
239
+ <Collapsible className="border rounded-lg p-4">
240
+ <div className="flex items-center justify-between mb-2">
241
+ <h4 className="font-semibold">@user starred 3 repos</h4>
242
+ <CollapsibleTrigger asChild>
243
+ <Button variant="outline" size="sm">
244
+ <Icon symbol="unfold_more" className="text-base" />
245
+ </Button>
246
+ </CollapsibleTrigger>
247
+ </div>
248
+
249
+ <div className="border px-4 py-2 rounded font-mono text-sm">
250
+ @radix-ui/primitives
251
+ </div>
252
+
253
+ <CollapsibleContent className="mt-2 space-y-2">
254
+ <div className="border px-4 py-2 rounded font-mono text-sm">
255
+ @radix-ui/colors
256
+ </div>
257
+ <div className="border px-4 py-2 rounded font-mono text-sm">
258
+ @stitches/react
259
+ </div>
260
+ </CollapsibleContent>
261
+ </Collapsible>
262
+ ```
263
+
264
+ ## Casos de Uso Comunes
265
+
266
+ **FAQ sections**: Lista de preguntas frecuentes expandibles
267
+ **Navigation menus**: Menús colapsables con subsecciones
268
+ **Details/Summary**: Información adicional opcional
269
+ **File browsers**: Estructuras de carpetas expandibles
270
+ **Settings panels**: Grupos de configuraciones organizadas
271
+ **Table rows**: Filas de tabla con detalles expandibles
272
+
273
+ ## Estilos y Animaciones
274
+
275
+ ### Data States
276
+
277
+ - **Abierto**: `data-state="open"` en todos los componentes
278
+ - **Cerrado**: `data-state="closed"` en todos los componentes
279
+ - **Disabled**: `data-disabled` cuando `disabled={true}`
280
+
281
+ ### Animación Suave
282
+
283
+ El contenido usa animaciones CSS automáticas (height, opacity) al expandir/colapsar. No requiere configuración adicional.
284
+
285
+ ### Custom Animations
286
+
287
+ ```tsx
288
+ <CollapsibleContent className="data-[state=open]:animate-slideDown data-[state=closed]:animate-slideUp">
289
+ Content with custom animations
290
+ </CollapsibleContent>
291
+ ```
292
+
293
+ ## Accesibilidad
294
+
295
+ - ✅ **Navegación teclado**: Enter/Space para toggle en trigger, Tab para navegar
296
+ - ✅ **ARIA**: `aria-expanded`, `aria-controls` automáticos en trigger
297
+ - ✅ **Screen readers**: Anuncia estado expandido/colapsado
298
+ - ✅ **Focus visible**: Trigger recibe focus del teclado
299
+ - ✅ **Disabled state**: `aria-disabled` cuando disabled
300
+
301
+ ## Notas de Implementación
302
+
303
+ - **Basado en Radix UI**: `@radix-ui/react-collapsible`
304
+ - **No tiene estilos propios**: Wrapper limpio, agrega tus propios estilos
305
+ - **Data slots**: `data-slot="collapsible"`, `data-slot="collapsible-trigger"`, `data-slot="collapsible-content"`
306
+ - **asChild pattern**: CollapsibleTrigger soporta `asChild` para usar componentes custom
307
+ - **Animaciones automáticas**: Radix maneja transiciones de height/opacity
308
+ - **forceMount**: Útil para animaciones custom o cuando necesitas el DOM montado siempre
309
+ - **Multiple instances**: Puedes tener múltiples Collapsibles independientes
310
+ - **Accordion vs Collapsible**: Usa Accordion cuando solo uno debe estar abierto, Collapsible para control independiente
311
+
312
+ ## Troubleshooting
313
+
314
+ **Animación no suave**: Radix maneja animaciones automáticamente, si no se ve suave verifica que no haya `transition` conflictivos en CSS
315
+ **Trigger no clickeable**: Verifica que esté dentro de `<Collapsible>`, no como hermano
316
+ **asChild no funciona**: Asegúrate que el child acepta props `onClick` y `aria-*`
317
+ **Content siempre visible**: Verifica que no tengas `forceMount` activado sin intención
318
+ **Estado no sincroniza**: En modo controlado, asegúrate de usar ambos `open` y `onOpenChange`
319
+
320
+ ## Referencias
321
+
322
+ - **Radix UI Collapsible**: https://www.radix-ui.com/primitives/docs/components/collapsible
323
+ - **ARIA Disclosure**: https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/