@adamosuiteservices/ui 1.2.4 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +4 -0
  2. package/dist/accordion-rounded.cjs +1 -1
  3. package/dist/accordion-rounded.js +1 -1
  4. package/dist/accordion.cjs +1 -1
  5. package/dist/accordion.js +1 -1
  6. package/dist/avatar.cjs +1 -1
  7. package/dist/avatar.js +1 -1
  8. package/dist/badge.cjs +1 -1
  9. package/dist/badge.js +1 -1
  10. package/dist/breadcrumb.cjs +1 -0
  11. package/dist/breadcrumb.js +105 -0
  12. package/dist/{button-C1n6snOY.js → button-2GdKenQI.js} +1 -1
  13. package/dist/{button-BV-_FVKZ.cjs → button-DEQVHMrX.cjs} +1 -1
  14. package/dist/button-group.cjs +1 -1
  15. package/dist/button-group.js +2 -2
  16. package/dist/button.cjs +1 -1
  17. package/dist/button.js +1 -1
  18. package/dist/calendar.cjs +1 -1
  19. package/dist/calendar.js +1 -1
  20. package/dist/{checkbox-BrmXPKTn.js → checkbox-Dr487kAg.js} +3 -3
  21. package/dist/{checkbox-Lq-HvSgc.cjs → checkbox-YWAnswaW.cjs} +1 -1
  22. package/dist/checkbox.cjs +1 -1
  23. package/dist/checkbox.js +1 -1
  24. package/dist/collapsible.cjs +1 -1
  25. package/dist/collapsible.js +1 -1
  26. package/dist/combobox.cjs +1 -1
  27. package/dist/combobox.js +6 -6
  28. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +11 -0
  29. package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts +26 -0
  30. package/dist/components/ui/breadcrumb/index.d.ts +1 -0
  31. package/dist/components/ui/dialog/dialog.d.ts +2 -1
  32. package/dist/context-menu.cjs +1 -1
  33. package/dist/context-menu.js +2 -2
  34. package/dist/custom-layered-styles.css +1 -1
  35. package/dist/dialog.cjs +1 -1
  36. package/dist/dialog.js +33 -19
  37. package/dist/dropdown-menu.cjs +1 -1
  38. package/dist/dropdown-menu.js +3 -3
  39. package/dist/ellipsis-CryjZKZn.js +15 -0
  40. package/dist/ellipsis-Ct9VTDOG.cjs +6 -0
  41. package/dist/field.cjs +1 -1
  42. package/dist/field.js +2 -2
  43. package/dist/hover-card.cjs +1 -1
  44. package/dist/hover-card.js +6 -6
  45. package/dist/{index-CAOY367Y.js → index-B0M7VOwp.js} +2 -2
  46. package/dist/{index-B-ZRqW0J.js → index-BBoIAjAs.js} +3 -3
  47. package/dist/{index-gO_QEiaK.cjs → index-BDs8lUfq.cjs} +1 -1
  48. package/dist/index-BFyr34mw.cjs +5 -0
  49. package/dist/index-BMWt1NBG.js +79 -0
  50. package/dist/{index-yR-v1A4G.js → index-BX9hz-JD.js} +1 -1
  51. package/dist/{index-BGiGvaq8.cjs → index-BcGMAmWE.cjs} +1 -1
  52. package/dist/{index-IKJMQref.cjs → index-Bd0gQB0k.cjs} +1 -1
  53. package/dist/{index-VIUqZjyP.cjs → index-BeWgla7c.cjs} +1 -1
  54. package/dist/{index-EUea2gfp.js → index-BpWB3aFK.js} +1 -1
  55. package/dist/index-BvLQnI56.js +59 -0
  56. package/dist/{index-CwUFT-GQ.js → index-C0YiLSjW.js} +4 -4
  57. package/dist/{index-o0sNTcKe.js → index-CBjZooac.js} +2 -2
  58. package/dist/{index-DnS_sBBe.cjs → index-COuvjZLM.cjs} +1 -1
  59. package/dist/index-CTjlbbt9.cjs +1 -0
  60. package/dist/index-CUWMxxKG.js +97 -0
  61. package/dist/{index-C329e3yQ.js → index-CZZ3llmi.js} +2 -2
  62. package/dist/index-CjyiloO7.cjs +1 -0
  63. package/dist/{index-D3wSWKST.cjs → index-Cmx9M9cZ.cjs} +1 -1
  64. package/dist/index-CocSS1YK.cjs +1 -0
  65. package/dist/index-CzRiuk60.cjs +1 -0
  66. package/dist/index-DFPDUUq7.js +658 -0
  67. package/dist/{index-D3S7dBDI.cjs → index-DIwmXz1u.cjs} +1 -1
  68. package/dist/index-DLcqcWxM.js +29 -0
  69. package/dist/index-DMLQL2aG.js +286 -0
  70. package/dist/{index-DXQ-7kNJ.cjs → index-DMs8RL3E.cjs} +1 -1
  71. package/dist/{index-Ce3QBKyj.cjs → index-Dbj9vHNq.cjs} +1 -1
  72. package/dist/{index-BRLtxFFr.cjs → index-DmGzwG2z.cjs} +1 -1
  73. package/dist/{index-P1sVIHE3.js → index-PYkEXTqJ.js} +1 -1
  74. package/dist/{index-DulPG3F9.js → index-Se4vRnIO.js} +3 -3
  75. package/dist/index-_XxjJPRD.cjs +1 -0
  76. package/dist/{index-B-cHTKrs.js → index-yWvyIlmA.js} +4 -4
  77. package/dist/input-group.cjs +1 -1
  78. package/dist/input-group.js +1 -1
  79. package/dist/{label-Cne2J57f.cjs → label-BjXORCBM.cjs} +1 -1
  80. package/dist/{label-Ky8qBEC3.js → label-CmwGvhy1.js} +1 -1
  81. package/dist/label.cjs +1 -1
  82. package/dist/label.js +1 -1
  83. package/dist/pagination.cjs +1 -6
  84. package/dist/pagination.js +58 -69
  85. package/dist/popover-3rIoNCXs.js +306 -0
  86. package/dist/popover-FCKBtFo-.cjs +1 -0
  87. package/dist/popover.cjs +1 -1
  88. package/dist/popover.js +1 -1
  89. package/dist/progress.cjs +1 -1
  90. package/dist/progress.js +1 -1
  91. package/dist/radio-group.cjs +1 -1
  92. package/dist/radio-group.js +5 -5
  93. package/dist/select.cjs +2 -2
  94. package/dist/select.js +585 -542
  95. package/dist/{separator-CGnu_jIu.cjs → separator-BaZqZZ9R.cjs} +1 -1
  96. package/dist/{separator-BH73A90k.js → separator-DR7lQjv9.js} +1 -1
  97. package/dist/separator.cjs +1 -1
  98. package/dist/separator.js +1 -1
  99. package/dist/{sheet-CcxnJ6LH.cjs → sheet-CU-sFSaJ.cjs} +1 -1
  100. package/dist/{sheet-_DVpQIVF.js → sheet-UZWAbdXr.js} +1 -1
  101. package/dist/sheet.cjs +1 -1
  102. package/dist/sheet.js +1 -1
  103. package/dist/sidebar.cjs +1 -1
  104. package/dist/sidebar.js +4 -4
  105. package/dist/slider.cjs +1 -1
  106. package/dist/slider.js +3 -3
  107. package/dist/styles.css +1 -1
  108. package/dist/switch.cjs +1 -1
  109. package/dist/switch.js +2 -2
  110. package/dist/tabs-underline.cjs +1 -1
  111. package/dist/tabs-underline.js +1 -1
  112. package/dist/tabs.cjs +1 -1
  113. package/dist/tabs.js +1 -1
  114. package/dist/toaster.cjs +1 -1
  115. package/dist/toaster.js +1 -1
  116. package/dist/toggle.cjs +1 -1
  117. package/dist/toggle.js +1 -1
  118. package/dist/tooltip.cjs +1 -1
  119. package/dist/tooltip.js +114 -108
  120. package/dist/typography.cjs +1 -1
  121. package/dist/typography.js +16 -16
  122. package/docs/AI-GUIDE.md +321 -0
  123. package/docs/components/layout/sidebar.md +330 -0
  124. package/docs/components/layout/toaster.md +436 -0
  125. package/docs/components/ui/accordion-rounded.md +583 -0
  126. package/docs/components/ui/accordion.md +267 -0
  127. package/docs/components/ui/alert.md +671 -0
  128. package/docs/components/ui/avatar.md +588 -0
  129. package/docs/components/ui/badge.md +1024 -0
  130. package/docs/components/ui/breadcrumb.md +614 -0
  131. package/docs/components/ui/button-group.md +1002 -0
  132. package/docs/components/ui/button.md +1078 -0
  133. package/docs/components/ui/calendar.md +1159 -0
  134. package/docs/components/ui/card.md +1265 -0
  135. package/docs/components/ui/checkbox.md +292 -0
  136. package/docs/components/ui/collapsible.md +320 -0
  137. package/docs/components/ui/combobox.md +328 -0
  138. package/docs/components/ui/command.md +454 -0
  139. package/docs/components/ui/context-menu.md +540 -0
  140. package/docs/components/ui/dialog.md +628 -0
  141. package/docs/components/ui/dropdown-menu.md +731 -0
  142. package/docs/components/ui/field.md +706 -0
  143. package/docs/components/ui/hover-card.md +446 -0
  144. package/docs/components/ui/input-group.md +509 -0
  145. package/docs/components/ui/input.md +362 -0
  146. package/docs/components/ui/kbd.md +434 -0
  147. package/docs/components/ui/label.md +359 -0
  148. package/docs/components/ui/pagination.md +650 -0
  149. package/docs/components/ui/popover.md +536 -0
  150. package/docs/components/ui/progress.md +182 -0
  151. package/docs/components/ui/radio-group.md +311 -0
  152. package/docs/components/ui/select.md +352 -0
  153. package/docs/components/ui/separator.md +214 -0
  154. package/docs/components/ui/sheet.md +142 -0
  155. package/docs/components/ui/skeleton.md +140 -0
  156. package/docs/components/ui/slider.md +341 -0
  157. package/docs/components/ui/spinner.md +170 -0
  158. package/docs/components/ui/switch.md +402 -0
  159. package/docs/components/ui/table.md +183 -0
  160. package/docs/components/ui/tabs-underline.md +106 -0
  161. package/docs/components/ui/tabs.md +122 -0
  162. package/docs/components/ui/textarea.md +243 -0
  163. package/docs/components/ui/toggle.md +243 -0
  164. package/docs/components/ui/tooltip.md +320 -0
  165. package/docs/components/ui/typography.md +191 -0
  166. package/package.json +11 -5
  167. package/dist/index-6oTEokEx.js +0 -82
  168. package/dist/index-B-NyefE0.js +0 -243
  169. package/dist/index-BKbK2GzY.cjs +0 -1
  170. package/dist/index-BMitW9UR.cjs +0 -1
  171. package/dist/index-BpvjJ_T6.cjs +0 -5
  172. package/dist/index-C5wjudc-.js +0 -36
  173. package/dist/index-CezwiPd_.js +0 -615
  174. package/dist/index-D02K8KOB.js +0 -54
  175. package/dist/index-D7hQvndv.cjs +0 -1
  176. package/dist/index-DQvx1rG_.cjs +0 -1
  177. package/dist/popover-BjdTqaB8.cjs +0 -1
  178. package/dist/popover-EnVfE0YA.js +0 -263
@@ -0,0 +1,614 @@
1
+ # Breadcrumb Component
2
+
3
+ ## Descripción
4
+
5
+ Componente de navegación que muestra la **ubicación actual del usuario dentro de una jerarquía navegacional**. Ayuda a los usuarios a comprender su posición en el sitio y navegar fácilmente a páginas superiores. Incluye soporte para separadores personalizables, iconos, elipsis para rutas largas, y menús desplegables para navegación colapsada.
6
+
7
+ ## Características
8
+
9
+ - ✅ Estructura semántica con `<nav>` y `<ol>`
10
+ - ✅ Separadores personalizables (chevron por defecto)
11
+ - ✅ Soporte para iconos en cada nivel
12
+ - ✅ Elipsis para indicar elementos colapsados
13
+ - ✅ Integración con Dropdown Menu para rutas largas
14
+ - ✅ Prop `asChild` para componentes de link personalizados (React Router, Next.js)
15
+ - ✅ Responsive y adaptable a móviles
16
+ - ✅ Accesibilidad completa (aria-label, aria-current, role)
17
+ - ✅ Dark mode automático
18
+ - ✅ Estilos con transiciones suaves
19
+
20
+ ## Importación
21
+
22
+ ```typescript
23
+ import {
24
+ Breadcrumb,
25
+ BreadcrumbList,
26
+ BreadcrumbItem,
27
+ BreadcrumbLink,
28
+ BreadcrumbPage,
29
+ BreadcrumbSeparator,
30
+ BreadcrumbEllipsis,
31
+ } from "@adamosuiteservices/ui/breadcrumb";
32
+ ```
33
+
34
+ ## Uso Básico
35
+
36
+ ### Breadcrumb Simple
37
+
38
+ ```tsx
39
+ <Breadcrumb>
40
+ <BreadcrumbList>
41
+ <BreadcrumbItem>
42
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
43
+ </BreadcrumbItem>
44
+ <BreadcrumbSeparator />
45
+ <BreadcrumbItem>
46
+ <BreadcrumbLink href="/docs">Docs</BreadcrumbLink>
47
+ </BreadcrumbItem>
48
+ <BreadcrumbSeparator />
49
+ <BreadcrumbItem>
50
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
51
+ </BreadcrumbItem>
52
+ </BreadcrumbList>
53
+ </Breadcrumb>
54
+ ```
55
+
56
+ ### Con Iconos
57
+
58
+ ```tsx
59
+ import { HomeIcon, FolderIcon, FileIcon } from "lucide-react";
60
+
61
+ <Breadcrumb>
62
+ <BreadcrumbList>
63
+ <BreadcrumbItem>
64
+ <HomeIcon className="h-4 w-4" />
65
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
66
+ </BreadcrumbItem>
67
+ <BreadcrumbSeparator />
68
+ <BreadcrumbItem>
69
+ <FolderIcon className="h-4 w-4" />
70
+ <BreadcrumbLink href="/projects">Projects</BreadcrumbLink>
71
+ </BreadcrumbItem>
72
+ <BreadcrumbSeparator />
73
+ <BreadcrumbItem>
74
+ <FileIcon className="h-4 w-4" />
75
+ <BreadcrumbPage>Document.pdf</BreadcrumbPage>
76
+ </BreadcrumbItem>
77
+ </BreadcrumbList>
78
+ </Breadcrumb>;
79
+ ```
80
+
81
+ **Nota**: Los iconos mejoran el reconocimiento visual de diferentes tipos de páginas.
82
+
83
+ ### Con React Router / Next.js Link
84
+
85
+ ```tsx
86
+ import { Link } from "react-router-dom";
87
+
88
+ <Breadcrumb>
89
+ <BreadcrumbList>
90
+ <BreadcrumbItem>
91
+ <BreadcrumbLink asChild>
92
+ <Link to="/">Home</Link>
93
+ </BreadcrumbLink>
94
+ </BreadcrumbItem>
95
+ <BreadcrumbSeparator />
96
+ <BreadcrumbItem>
97
+ <BreadcrumbPage>Settings</BreadcrumbPage>
98
+ </BreadcrumbItem>
99
+ </BreadcrumbList>
100
+ </Breadcrumb>;
101
+ ```
102
+
103
+ **Uso de asChild**: Permite usar componentes de navegación personalizados mientras mantiene los estilos del breadcrumb.
104
+
105
+ ## Componentes
106
+
107
+ ### Breadcrumb
108
+
109
+ Contenedor principal del breadcrumb. Se renderiza como `<nav>` con `aria-label="breadcrumb"`.
110
+
111
+ ```tsx
112
+ <Breadcrumb>
113
+ <BreadcrumbList>{/* items */}</BreadcrumbList>
114
+ </Breadcrumb>
115
+ ```
116
+
117
+ **Props**: Hereda todas las props de `React.ComponentProps<"nav">`.
118
+
119
+ ### BreadcrumbList
120
+
121
+ Lista ordenada que contiene los elementos del breadcrumb.
122
+
123
+ ```tsx
124
+ <BreadcrumbList>
125
+ <BreadcrumbItem>{/* ... */}</BreadcrumbItem>
126
+ <BreadcrumbSeparator />
127
+ <BreadcrumbItem>{/* ... */}</BreadcrumbItem>
128
+ </BreadcrumbList>
129
+ ```
130
+
131
+ **Estilos**:
132
+
133
+ - Text: `text-muted-foreground`, `text-sm`
134
+ - Layout: `flex`, `flex-wrap`, `items-center`
135
+ - Spacing: `gap-1.5`, `sm:gap-2.5`
136
+ - Utility: `break-words` para texto largo
137
+
138
+ **Props**: Hereda todas las props de `React.ComponentProps<"ol">`.
139
+
140
+ ### BreadcrumbItem
141
+
142
+ Elemento individual del breadcrumb (un nivel de navegación).
143
+
144
+ ```tsx
145
+ <BreadcrumbItem>
146
+ <BreadcrumbLink href="/docs">Docs</BreadcrumbLink>
147
+ </BreadcrumbItem>
148
+ ```
149
+
150
+ **Estilos**:
151
+
152
+ - Layout: `inline-flex`, `items-center`
153
+ - Spacing: `gap-1.5` entre icono y texto
154
+
155
+ **Props**: Hereda todas las props de `React.ComponentProps<"li">`.
156
+
157
+ ### BreadcrumbLink
158
+
159
+ Link navegable dentro del breadcrumb.
160
+
161
+ ```tsx
162
+ <BreadcrumbLink href="/docs">Documentation</BreadcrumbLink>
163
+
164
+ // Con asChild
165
+ <BreadcrumbLink asChild>
166
+ <Link to="/docs">Documentation</Link>
167
+ </BreadcrumbLink>
168
+ ```
169
+
170
+ **Estilos**:
171
+
172
+ - Text: `text-muted-foreground`
173
+ - Hover: `hover:text-foreground`
174
+ - Transition: `transition-colors`
175
+
176
+ **Props**:
177
+
178
+ - Hereda todas las props de `React.ComponentProps<"a">`
179
+ - `asChild?: boolean` - Usar Radix UI Slot para renderizar como elemento hijo
180
+
181
+ ### BreadcrumbPage
182
+
183
+ Página actual (no navegable).
184
+
185
+ ```tsx
186
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
187
+ ```
188
+
189
+ **Estilos**:
190
+
191
+ - Text: `text-foreground`, `font-normal`
192
+
193
+ **Atributos de accesibilidad**:
194
+
195
+ - `role="link"`
196
+ - `aria-disabled="true"`
197
+ - `aria-current="page"`
198
+
199
+ **Props**: Hereda todas las props de `React.ComponentProps<"span">`.
200
+
201
+ ### BreadcrumbSeparator
202
+
203
+ Separador visual entre elementos del breadcrumb.
204
+
205
+ ```tsx
206
+ // Separador por defecto (ChevronRight)
207
+ <BreadcrumbSeparator />
208
+
209
+ // Separador personalizado
210
+ <BreadcrumbSeparator>
211
+ <SlashIcon />
212
+ </BreadcrumbSeparator>
213
+ ```
214
+
215
+ **Estilos**:
216
+
217
+ - Icon size: `[&>svg]:size-3.5` (14px)
218
+
219
+ **Atributos de accesibilidad**:
220
+
221
+ - `role="presentation"`
222
+ - `aria-hidden="true"`
223
+
224
+ **Props**: Hereda todas las props de `React.ComponentProps<"li">`.
225
+
226
+ ### BreadcrumbEllipsis
227
+
228
+ Indicador de elementos colapsados (tres puntos).
229
+
230
+ ```tsx
231
+ <BreadcrumbEllipsis />
232
+ ```
233
+
234
+ **Estilos**:
235
+
236
+ - Layout: `flex`, `items-center`, `justify-center`
237
+ - Size: `size-9` (36x36px)
238
+ - Icon: `size-4` (16px MoreHorizontal)
239
+
240
+ **Incluye**:
241
+
242
+ - Icono `MoreHorizontal` de lucide-react
243
+ - `<span className="sr-only">More</span>` para accesibilidad
244
+
245
+ **Props**: Hereda todas las props de `React.ComponentProps<"span">`.
246
+
247
+ ## Patrones de Uso
248
+
249
+ ### Ruta Larga con Elipsis
250
+
251
+ Para rutas de navegación largas, usa `BreadcrumbEllipsis` para indicar elementos ocultos:
252
+
253
+ ```tsx
254
+ <Breadcrumb>
255
+ <BreadcrumbList>
256
+ <BreadcrumbItem>
257
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
258
+ </BreadcrumbItem>
259
+ <BreadcrumbSeparator />
260
+ <BreadcrumbItem>
261
+ <BreadcrumbEllipsis />
262
+ </BreadcrumbItem>
263
+ <BreadcrumbSeparator />
264
+ <BreadcrumbItem>
265
+ <BreadcrumbLink href="/components">Components</BreadcrumbLink>
266
+ </BreadcrumbItem>
267
+ <BreadcrumbSeparator />
268
+ <BreadcrumbItem>
269
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
270
+ </BreadcrumbItem>
271
+ </BreadcrumbList>
272
+ </Breadcrumb>
273
+ ```
274
+
275
+ ### Ruta Larga con Dropdown
276
+
277
+ Para mejor UX en rutas largas, combina con `DropdownMenu`:
278
+
279
+ ```tsx
280
+ import {
281
+ DropdownMenu,
282
+ DropdownMenuContent,
283
+ DropdownMenuItem,
284
+ DropdownMenuTrigger,
285
+ } from "@adamosuiteservices/ui/dropdown-menu";
286
+
287
+ <Breadcrumb>
288
+ <BreadcrumbList>
289
+ <BreadcrumbItem>
290
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
291
+ </BreadcrumbItem>
292
+ <BreadcrumbSeparator />
293
+ <BreadcrumbItem>
294
+ <DropdownMenu>
295
+ <DropdownMenuTrigger className="flex items-center gap-1">
296
+ <BreadcrumbEllipsis />
297
+ </DropdownMenuTrigger>
298
+ <DropdownMenuContent align="start">
299
+ <DropdownMenuItem>
300
+ <a href="/docs">Documentation</a>
301
+ </DropdownMenuItem>
302
+ <DropdownMenuItem>
303
+ <a href="/components">Components</a>
304
+ </DropdownMenuItem>
305
+ <DropdownMenuItem>
306
+ <a href="/themes">Themes</a>
307
+ </DropdownMenuItem>
308
+ </DropdownMenuContent>
309
+ </DropdownMenu>
310
+ </BreadcrumbItem>
311
+ <BreadcrumbSeparator />
312
+ <BreadcrumbItem>
313
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
314
+ </BreadcrumbItem>
315
+ </BreadcrumbList>
316
+ </Breadcrumb>;
317
+ ```
318
+
319
+ ### Breadcrumb Responsive
320
+
321
+ Colapsa elementos en móvil para ahorrar espacio:
322
+
323
+ ```tsx
324
+ <Breadcrumb>
325
+ <BreadcrumbList>
326
+ <BreadcrumbItem className="hidden md:block">
327
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
328
+ </BreadcrumbItem>
329
+ <BreadcrumbSeparator className="hidden md:block" />
330
+ <BreadcrumbItem>
331
+ <DropdownMenu>
332
+ <DropdownMenuTrigger className="flex items-center gap-1 md:hidden">
333
+ <BreadcrumbEllipsis />
334
+ </DropdownMenuTrigger>
335
+ <DropdownMenuContent align="start">
336
+ <DropdownMenuItem>
337
+ <a href="/">Home</a>
338
+ </DropdownMenuItem>
339
+ <DropdownMenuItem>
340
+ <a href="/docs">Documentation</a>
341
+ </DropdownMenuItem>
342
+ </DropdownMenuContent>
343
+ </DropdownMenu>
344
+ <BreadcrumbLink href="/docs" className="hidden md:block">
345
+ Documentation
346
+ </BreadcrumbLink>
347
+ </BreadcrumbItem>
348
+ <BreadcrumbSeparator />
349
+ <BreadcrumbItem>
350
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
351
+ </BreadcrumbItem>
352
+ </BreadcrumbList>
353
+ </Breadcrumb>
354
+ ```
355
+
356
+ ### Separadores Personalizados
357
+
358
+ Usa cualquier icono o elemento como separador:
359
+
360
+ ```tsx
361
+ import { SlashIcon, ChevronRight, ArrowRight } from "lucide-react";
362
+
363
+ // Slash
364
+ <BreadcrumbSeparator>
365
+ <SlashIcon />
366
+ </BreadcrumbSeparator>
367
+
368
+ // Texto
369
+ <BreadcrumbSeparator>
370
+ /
371
+ </BreadcrumbSeparator>
372
+
373
+ // Arrow
374
+ <BreadcrumbSeparator>
375
+ <ArrowRight />
376
+ </BreadcrumbSeparator>
377
+ ```
378
+
379
+ ## Casos de Uso
380
+
381
+ ### E-commerce
382
+
383
+ Navegación de categorías de productos:
384
+
385
+ ```tsx
386
+ <Breadcrumb>
387
+ <BreadcrumbList>
388
+ <BreadcrumbItem>
389
+ <BreadcrumbLink href="/">Home</BreadcrumbLink>
390
+ </BreadcrumbItem>
391
+ <BreadcrumbSeparator />
392
+ <BreadcrumbItem>
393
+ <BreadcrumbLink href="/products">Products</BreadcrumbLink>
394
+ </BreadcrumbItem>
395
+ <BreadcrumbSeparator />
396
+ <BreadcrumbItem>
397
+ <BreadcrumbLink href="/products/electronics">Electronics</BreadcrumbLink>
398
+ </BreadcrumbItem>
399
+ <BreadcrumbSeparator />
400
+ <BreadcrumbItem>
401
+ <BreadcrumbPage>Laptops</BreadcrumbPage>
402
+ </BreadcrumbItem>
403
+ </BreadcrumbList>
404
+ </Breadcrumb>
405
+ ```
406
+
407
+ ### Documentación
408
+
409
+ Navegación de documentos anidados:
410
+
411
+ ```tsx
412
+ <Breadcrumb>
413
+ <BreadcrumbList>
414
+ <BreadcrumbItem>
415
+ <BreadcrumbLink href="/">Docs</BreadcrumbLink>
416
+ </BreadcrumbItem>
417
+ <BreadcrumbSeparator />
418
+ <BreadcrumbItem>
419
+ <BreadcrumbLink href="/components">Components</BreadcrumbLink>
420
+ </BreadcrumbItem>
421
+ <BreadcrumbSeparator />
422
+ <BreadcrumbItem>
423
+ <BreadcrumbLink href="/components/navigation">Navigation</BreadcrumbLink>
424
+ </BreadcrumbItem>
425
+ <BreadcrumbSeparator />
426
+ <BreadcrumbItem>
427
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
428
+ </BreadcrumbItem>
429
+ </BreadcrumbList>
430
+ </Breadcrumb>
431
+ ```
432
+
433
+ ### Gestión de Archivos
434
+
435
+ Sistema de archivos o carpetas:
436
+
437
+ ```tsx
438
+ import { FolderIcon, FileIcon } from "lucide-react";
439
+
440
+ <Breadcrumb>
441
+ <BreadcrumbList>
442
+ <BreadcrumbItem>
443
+ <BreadcrumbLink href="/files">
444
+ <FolderIcon className="h-4 w-4" />
445
+ My Files
446
+ </BreadcrumbLink>
447
+ </BreadcrumbItem>
448
+ <BreadcrumbSeparator />
449
+ <BreadcrumbItem>
450
+ <BreadcrumbLink href="/files/documents">
451
+ <FolderIcon className="h-4 w-4" />
452
+ Documents
453
+ </BreadcrumbLink>
454
+ </BreadcrumbItem>
455
+ <BreadcrumbSeparator />
456
+ <BreadcrumbItem>
457
+ <BreadcrumbPage>
458
+ <FileIcon className="h-4 w-4" />
459
+ Report.pdf
460
+ </BreadcrumbPage>
461
+ </BreadcrumbItem>
462
+ </BreadcrumbList>
463
+ </Breadcrumb>;
464
+ ```
465
+
466
+ ## Accesibilidad
467
+
468
+ ### Estructura Semántica
469
+
470
+ - `<nav aria-label="breadcrumb">`: Identifica el breadcrumb para screen readers
471
+ - `<ol>`: Lista ordenada que refleja la jerarquía
472
+ - `<li>`: Elementos individuales del breadcrumb
473
+
474
+ ### Página Actual
475
+
476
+ ```tsx
477
+ <BreadcrumbPage>Current Page</BreadcrumbPage>
478
+ ```
479
+
480
+ **Atributos**:
481
+
482
+ - `role="link"`: Indica que es un elemento de navegación
483
+ - `aria-disabled="true"`: No es interactivo
484
+ - `aria-current="page"`: Marca la página actual
485
+
486
+ ### Separadores
487
+
488
+ ```tsx
489
+ <BreadcrumbSeparator />
490
+ ```
491
+
492
+ **Atributos**:
493
+
494
+ - `role="presentation"`: Decorativo, no semántico
495
+ - `aria-hidden="true"`: Oculto de screen readers
496
+
497
+ ### Elipsis
498
+
499
+ ```tsx
500
+ <BreadcrumbEllipsis />
501
+ ```
502
+
503
+ **Incluye**:
504
+
505
+ - `<span className="sr-only">More</span>`: Texto descriptivo para screen readers
506
+
507
+ ## Mejores Prácticas
508
+
509
+ ### ✅ Hacer
510
+
511
+ - **Usar en navegación jerárquica**: Sitios con estructura de páginas anidadas
512
+ - **Mostrar ruta completa**: Incluir todos los niveles relevantes
513
+ - **Primera letra mayúscula**: Consistencia en nombres de páginas
514
+ - **Responsive**: Colapsar en móvil si hay muchos niveles
515
+ - **Links funcionales**: Todos los links deben navegar correctamente
516
+ - **Página actual no clickeable**: Usar `BreadcrumbPage` para el nivel actual
517
+
518
+ ### ❌ Evitar
519
+
520
+ - **En sitios planos**: Si no hay jerarquía clara
521
+ - **Redundancia con navegación principal**: No duplicar menús
522
+ - **Demasiados niveles visibles**: Usar dropdown o elipsis para >5 niveles
523
+ - **Solo en desktop**: Debe funcionar en móvil
524
+ - **Página actual como link**: Usar `BreadcrumbPage` sin `href`
525
+
526
+ ## Personalización
527
+
528
+ ### Estilos Personalizados
529
+
530
+ ```tsx
531
+ <Breadcrumb className="my-custom-breadcrumb">
532
+ <BreadcrumbList className="gap-4">
533
+ <BreadcrumbItem>
534
+ <BreadcrumbLink href="/" className="text-lg font-semibold">
535
+ Home
536
+ </BreadcrumbLink>
537
+ </BreadcrumbItem>
538
+ <BreadcrumbSeparator className="text-primary" />
539
+ <BreadcrumbItem>
540
+ <BreadcrumbPage className="text-lg">Current</BreadcrumbPage>
541
+ </BreadcrumbItem>
542
+ </BreadcrumbList>
543
+ </Breadcrumb>
544
+ ```
545
+
546
+ ### Separador Custom
547
+
548
+ ```tsx
549
+ <BreadcrumbSeparator className="text-primary">
550
+ <span>•</span>
551
+ </BreadcrumbSeparator>
552
+ ```
553
+
554
+ ### Dark Mode
555
+
556
+ Los estilos de dark mode están incluidos automáticamente:
557
+
558
+ - Links: `text-muted-foreground` → colores ajustados en dark
559
+ - Hover: `hover:text-foreground` → transición suave
560
+ - Página actual: `text-foreground` → contraste adecuado
561
+
562
+ ## Data Slots
563
+
564
+ Cada componente incluye un atributo `data-slot` para facilitar el targeting con CSS:
565
+
566
+ ```tsx
567
+ data-slot="breadcrumb" // Breadcrumb
568
+ data-slot="breadcrumb-list" // BreadcrumbList
569
+ data-slot="breadcrumb-item" // BreadcrumbItem
570
+ data-slot="breadcrumb-link" // BreadcrumbLink
571
+ data-slot="breadcrumb-page" // BreadcrumbPage
572
+ data-slot="breadcrumb-separator" // BreadcrumbSeparator
573
+ data-slot="breadcrumb-ellipsis" // BreadcrumbEllipsis
574
+ ```
575
+
576
+ **Uso en CSS**:
577
+
578
+ ```css
579
+ [data-slot="breadcrumb-link"]:hover {
580
+ color: var(--primary);
581
+ }
582
+
583
+ [data-slot="breadcrumb-separator"] {
584
+ color: var(--muted-foreground);
585
+ }
586
+ ```
587
+
588
+ ## TypeScript
589
+
590
+ Todos los componentes incluyen tipos completos:
591
+
592
+ ```typescript
593
+ import type { ComponentProps } from "react";
594
+
595
+ type BreadcrumbProps = ComponentProps<"nav">;
596
+ type BreadcrumbListProps = ComponentProps<"ol">;
597
+ type BreadcrumbItemProps = ComponentProps<"li">;
598
+ type BreadcrumbLinkProps = ComponentProps<"a"> & { asChild?: boolean };
599
+ type BreadcrumbPageProps = ComponentProps<"span">;
600
+ type BreadcrumbSeparatorProps = ComponentProps<"li">;
601
+ type BreadcrumbEllipsisProps = ComponentProps<"span">;
602
+ ```
603
+
604
+ ## Dependencias
605
+
606
+ - **@radix-ui/react-slot**: Para el patrón `asChild`
607
+ - **lucide-react**: Iconos por defecto (ChevronRight, MoreHorizontal)
608
+ - **@src/lib/utils**: Utilidad `cn` para combinar clases
609
+
610
+ ## Recursos
611
+
612
+ - [ARIA Breadcrumb Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/)
613
+ - [MDN: Breadcrumb Navigation](https://developer.mozilla.org/en-US/docs/Web/CSS/Layout_cookbook/Breadcrumb_Navigation)
614
+ - [Nielsen Norman Group: Breadcrumb Navigation](https://www.nngroup.com/articles/breadcrumbs/)