@adamosuiteservices/ui 1.7.13 → 1.8.13

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 (307) hide show
  1. package/dist/accordion-rounded.cjs +24 -2
  2. package/dist/accordion-rounded.js +46 -8
  3. package/dist/accordion.cjs +20 -1
  4. package/dist/accordion.js +29 -5
  5. package/dist/alert.cjs +26 -1
  6. package/dist/alert.js +33 -8
  7. package/dist/avatar.cjs +7 -1
  8. package/dist/avatar.js +8 -2
  9. package/dist/badge.cjs +83 -1
  10. package/dist/badge.js +106 -24
  11. package/dist/breadcrumb.cjs +8 -1
  12. package/dist/breadcrumb.js +11 -4
  13. package/dist/button-B7ZP4LZN.js +127 -0
  14. package/dist/button-D-qFRXiM.cjs +70 -0
  15. package/dist/button-group.cjs +25 -1
  16. package/dist/button-group.js +33 -9
  17. package/dist/button.cjs +1 -1
  18. package/dist/button.js +1 -1
  19. package/dist/calendar.cjs +74 -1
  20. package/dist/calendar.js +114 -35
  21. package/dist/card.cjs +35 -1
  22. package/dist/card.js +45 -11
  23. package/dist/{checkbox-YWAnswaW.cjs → checkbox-CdnZ8VFJ.cjs} +21 -1
  24. package/dist/{checkbox-Dr487kAg.js → checkbox-DhBcmKze.js} +34 -4
  25. package/dist/checkbox.cjs +1 -1
  26. package/dist/checkbox.js +1 -1
  27. package/dist/combobox.cjs +36 -2
  28. package/dist/combobox.js +62 -22
  29. package/dist/components/icons/account-balance-icon.d.ts +3 -0
  30. package/dist/components/icons/account-icon.d.ts +3 -0
  31. package/dist/components/icons/add-circle-icon.d.ts +3 -0
  32. package/dist/components/icons/alarm-icon.d.ts +3 -0
  33. package/dist/components/icons/archive-icon.d.ts +3 -0
  34. package/dist/components/icons/arrow-back-icon.d.ts +3 -0
  35. package/dist/components/icons/arrow-circle-up-icon.d.ts +3 -0
  36. package/dist/components/icons/arrow-forward-icon.d.ts +3 -0
  37. package/dist/components/icons/arrow-outward-icon.d.ts +3 -0
  38. package/dist/components/icons/article-icon.d.ts +3 -0
  39. package/dist/components/icons/attach-file-icon.d.ts +3 -0
  40. package/dist/components/icons/autorenew-icon.d.ts +3 -0
  41. package/dist/components/icons/bookmark-icon.d.ts +3 -0
  42. package/dist/components/icons/calculate-icon.d.ts +3 -0
  43. package/dist/components/icons/calendar-today-icon.d.ts +3 -0
  44. package/dist/components/icons/call-split-icon.d.ts +3 -0
  45. package/dist/components/icons/cancel-filled-icon.d.ts +3 -0
  46. package/dist/components/icons/cancel-icon.d.ts +3 -0
  47. package/dist/components/icons/check-circle-icon.d.ts +3 -0
  48. package/dist/components/icons/check-icon.d.ts +3 -0
  49. package/dist/components/icons/chevron-back-icon.d.ts +3 -0
  50. package/dist/components/icons/chevron-down-icon.d.ts +3 -0
  51. package/dist/components/icons/chevron-forward-icon.d.ts +3 -0
  52. package/dist/components/icons/chevron-up-icon.d.ts +3 -0
  53. package/dist/components/icons/clarify-icon.d.ts +3 -0
  54. package/dist/components/icons/clock-icon.d.ts +3 -0
  55. package/dist/components/icons/close-icon.d.ts +3 -0
  56. package/dist/components/icons/confirmation-number-icon.d.ts +3 -0
  57. package/dist/components/icons/contacts-icon.d.ts +3 -0
  58. package/dist/components/icons/contract-delete-icon.d.ts +3 -0
  59. package/dist/components/icons/copy-icon.d.ts +3 -0
  60. package/dist/components/icons/do-not-touch-icon.d.ts +3 -0
  61. package/dist/components/icons/download-icon.d.ts +3 -0
  62. package/dist/components/icons/dragger-icon.d.ts +3 -0
  63. package/dist/components/icons/edit-icon.d.ts +3 -0
  64. package/dist/components/icons/edit-square-icon.d.ts +3 -0
  65. package/dist/components/icons/exclamation-icon.d.ts +3 -0
  66. package/dist/components/icons/expand-circle-right-icon.d.ts +3 -0
  67. package/dist/components/icons/feature-search-icon.d.ts +3 -0
  68. package/dist/components/icons/filter-icon.d.ts +3 -0
  69. package/dist/components/icons/folder-icon.d.ts +3 -0
  70. package/dist/components/icons/folder-open-icon.d.ts +3 -0
  71. package/dist/components/icons/format-list-bulleted-icon.d.ts +3 -0
  72. package/dist/components/icons/hamburger-menu-icon.d.ts +3 -0
  73. package/dist/components/icons/help-icon.d.ts +3 -0
  74. package/dist/components/icons/hide-pass-icon.d.ts +3 -0
  75. package/dist/components/icons/home-icon.d.ts +3 -0
  76. package/dist/components/icons/id-card-icon.d.ts +3 -0
  77. package/dist/components/icons/index.d.ts +88 -0
  78. package/dist/components/icons/info-icon.d.ts +3 -0
  79. package/dist/components/icons/kid-star-icon.d.ts +3 -0
  80. package/dist/components/icons/language-icon.d.ts +3 -0
  81. package/dist/components/icons/last-page-icon.d.ts +3 -0
  82. package/dist/components/icons/layers-icon.d.ts +3 -0
  83. package/dist/components/icons/location-icon.d.ts +3 -0
  84. package/dist/components/icons/mail-icon.d.ts +3 -0
  85. package/dist/components/icons/manage-search-icon.d.ts +3 -0
  86. package/dist/components/icons/menu-icon.d.ts +3 -0
  87. package/dist/components/icons/message-icon.d.ts +3 -0
  88. package/dist/components/icons/metrics-icon.d.ts +3 -0
  89. package/dist/components/icons/mic-icon.d.ts +3 -0
  90. package/dist/components/icons/minus-icon.d.ts +3 -0
  91. package/dist/components/icons/mode-comment-icon.d.ts +3 -0
  92. package/dist/components/icons/money-icon.d.ts +3 -0
  93. package/dist/components/icons/monitoring-icon.d.ts +3 -0
  94. package/dist/components/icons/more-icon.d.ts +3 -0
  95. package/dist/components/icons/notifications-icon.d.ts +3 -0
  96. package/dist/components/icons/open-in-new-icon.d.ts +3 -0
  97. package/dist/components/icons/palette-icon.d.ts +3 -0
  98. package/dist/components/icons/password-icon.d.ts +3 -0
  99. package/dist/components/icons/pending-icon.d.ts +3 -0
  100. package/dist/components/icons/person-add-icon.d.ts +3 -0
  101. package/dist/components/icons/person-search-icon.d.ts +3 -0
  102. package/dist/components/icons/photo-icon.d.ts +3 -0
  103. package/dist/components/icons/plus-icon.d.ts +3 -0
  104. package/dist/components/icons/policy-icon.d.ts +3 -0
  105. package/dist/components/icons/publish-icon.d.ts +3 -0
  106. package/dist/components/icons/ready-icon.d.ts +3 -0
  107. package/dist/components/icons/receipt-icon.d.ts +3 -0
  108. package/dist/components/icons/receive-icon.d.ts +3 -0
  109. package/dist/components/icons/refresh-icon.d.ts +3 -0
  110. package/dist/components/icons/search-icon.d.ts +3 -0
  111. package/dist/components/icons/see-icon.d.ts +3 -0
  112. package/dist/components/icons/send-icon.d.ts +3 -0
  113. package/dist/components/icons/settings-icon.d.ts +3 -0
  114. package/dist/components/icons/shield-icon.d.ts +3 -0
  115. package/dist/components/icons/swap-horiz-icon.d.ts +3 -0
  116. package/dist/components/icons/tag-icon.d.ts +3 -0
  117. package/dist/components/icons/trash-icon.d.ts +3 -0
  118. package/dist/components/layout/toaster/toaster.d.ts +1 -1
  119. package/dist/components/layout/toaster/toaster.stories.d.ts +1 -1
  120. package/dist/components/ui/accordion/accordion.d.ts +1 -1
  121. package/dist/components/ui/accordion/accordion.stories.d.ts +1 -1
  122. package/dist/components/ui/accordion-rounded/accordion-rounded.d.ts +1 -1
  123. package/dist/components/ui/accordion-rounded/accordion-rounded.stories.d.ts +1 -1
  124. package/dist/components/ui/alert/alert.stories.d.ts +1 -1
  125. package/dist/components/ui/avatar/avatar.d.ts +1 -1
  126. package/dist/components/ui/avatar/avatar.stories.d.ts +1 -1
  127. package/dist/components/ui/badge/badge.stories.d.ts +1 -1
  128. package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts +1 -1
  129. package/dist/components/ui/button/button.stories.d.ts +1 -1
  130. package/dist/components/ui/button-group/button-group.d.ts +1 -1
  131. package/dist/components/ui/button-group/button-group.stories.d.ts +1 -1
  132. package/dist/components/ui/calendar/calendar.d.ts +1 -1
  133. package/dist/components/ui/calendar/calendar.stories.d.ts +1 -1
  134. package/dist/components/ui/card/card.stories.d.ts +1 -1
  135. package/dist/components/ui/checkbox/checkbox.d.ts +1 -1
  136. package/dist/components/ui/checkbox/checkbox.stories.d.ts +1 -1
  137. package/dist/components/ui/collapsible/collapsible.stories.d.ts +1 -1
  138. package/dist/components/ui/combobox/combobox.stories.d.ts +1 -1
  139. package/dist/components/ui/command/command.d.ts +1 -1
  140. package/dist/components/ui/context-menu/context-menu.d.ts +1 -1
  141. package/dist/components/ui/context-menu/context-menu.stories.d.ts +1 -1
  142. package/dist/components/ui/dialog/dialog.d.ts +1 -1
  143. package/dist/components/ui/dialog/dialog.stories.d.ts +1 -1
  144. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +1 -1
  145. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.d.ts +1 -1
  146. package/dist/components/ui/field/field.d.ts +1 -1
  147. package/dist/components/ui/field/field.stories.d.ts +1 -1
  148. package/dist/components/ui/hover-card/hover-card.d.ts +1 -1
  149. package/dist/components/ui/hover-card/hover-card.stories.d.ts +1 -1
  150. package/dist/components/ui/input/input.stories.d.ts +1 -1
  151. package/dist/components/ui/input-group/Input-group.stories.d.ts +1 -1
  152. package/dist/components/ui/input-group/input-group.d.ts +1 -1
  153. package/dist/components/ui/kbd/kbd.stories.d.ts +1 -1
  154. package/dist/components/ui/label/label.d.ts +1 -1
  155. package/dist/components/ui/label/label.stories.d.ts +1 -1
  156. package/dist/components/ui/pagination/pagination.stories.d.ts +1 -1
  157. package/dist/components/ui/popover/popover.d.ts +1 -1
  158. package/dist/components/ui/popover/popover.stories.d.ts +1 -1
  159. package/dist/components/ui/progress/progress.d.ts +1 -1
  160. package/dist/components/ui/progress/progress.stories.d.ts +1 -1
  161. package/dist/components/ui/radio-group/radio-group.d.ts +1 -1
  162. package/dist/components/ui/radio-group/radio-group.stories.d.ts +1 -1
  163. package/dist/components/ui/scroll-area/scroll-area.d.ts +1 -1
  164. package/dist/components/ui/scroll-area/scroll-area.stories.d.ts +1 -1
  165. package/dist/components/ui/select/select.d.ts +1 -1
  166. package/dist/components/ui/select/select.stories.d.ts +1 -1
  167. package/dist/components/ui/separator/separator.d.ts +1 -1
  168. package/dist/components/ui/separator/separator.stories.d.ts +1 -1
  169. package/dist/components/ui/sheet/sheet.d.ts +1 -1
  170. package/dist/components/ui/sheet/sheet.stories.d.ts +1 -1
  171. package/dist/components/ui/skeleton/skeleton.stories.d.ts +1 -1
  172. package/dist/components/ui/slider/slider.d.ts +1 -1
  173. package/dist/components/ui/slider/slider.stories.d.ts +1 -1
  174. package/dist/components/ui/spinner/spinner.stories.d.ts +1 -1
  175. package/dist/components/ui/switch/switch.d.ts +1 -1
  176. package/dist/components/ui/switch/switch.stories.d.ts +1 -1
  177. package/dist/components/ui/tabs/tabs.d.ts +1 -1
  178. package/dist/components/ui/tabs/tabs.stories.d.ts +1 -1
  179. package/dist/components/ui/tabs-underline/tabs-underline.d.ts +1 -1
  180. package/dist/components/ui/tabs-underline/tabs-underline.stories.d.ts +1 -1
  181. package/dist/components/ui/textarea/textarea.stories.d.ts +1 -1
  182. package/dist/components/ui/toggle/toggle.d.ts +1 -1
  183. package/dist/components/ui/toggle/toggle.stories.d.ts +1 -1
  184. package/dist/components/ui/tooltip/tooltip.d.ts +1 -1
  185. package/dist/components/ui/tooltip/tooltip.stories.d.ts +1 -1
  186. package/dist/context-menu.cjs +79 -1
  187. package/dist/context-menu.js +101 -11
  188. package/dist/custom-layered-styles.css +1 -1
  189. package/dist/dialog.cjs +30 -1
  190. package/dist/dialog.js +35 -6
  191. package/dist/dropdown-menu.cjs +79 -1
  192. package/dist/dropdown-menu.js +101 -11
  193. package/dist/field.cjs +66 -1
  194. package/dist/field.js +91 -26
  195. package/dist/hover-card.cjs +15 -1
  196. package/dist/hover-card.js +15 -1
  197. package/dist/icons.cjs +1 -0
  198. package/dist/icons.js +1507 -0
  199. package/dist/input-BQZUpTEY.js +42 -0
  200. package/dist/input-DSmxdfq5.cjs +21 -0
  201. package/dist/input-group.cjs +76 -1
  202. package/dist/input-group.js +99 -24
  203. package/dist/input.cjs +1 -1
  204. package/dist/input.js +1 -1
  205. package/dist/kbd.cjs +10 -1
  206. package/dist/kbd.js +11 -2
  207. package/dist/{label-CmwGvhy1.js → label-BJ8Yf6Ft.js} +7 -1
  208. package/dist/{label-BjXORCBM.cjs → label-CNGQhi5L.cjs} +7 -1
  209. package/dist/label.cjs +1 -1
  210. package/dist/label.js +1 -1
  211. package/dist/pagination.cjs +13 -1
  212. package/dist/pagination.js +30 -6
  213. package/dist/{popover-FCKBtFo-.cjs → popover-CYbik-H4.cjs} +15 -1
  214. package/dist/{popover-3rIoNCXs.js → popover-DAwH8jUh.js} +15 -1
  215. package/dist/popover.cjs +1 -1
  216. package/dist/popover.js +1 -1
  217. package/dist/radio-group.cjs +14 -1
  218. package/dist/radio-group.js +20 -2
  219. package/dist/select.cjs +68 -1
  220. package/dist/select.js +83 -10
  221. package/dist/{separator-BaZqZZ9R.cjs → separator-Brpax0EI.cjs} +7 -1
  222. package/dist/{separator-DR7lQjv9.js → separator-DVypR3Qf.js} +7 -1
  223. package/dist/separator.cjs +1 -1
  224. package/dist/separator.js +1 -1
  225. package/dist/sheet-CGahUP7F.cjs +41 -0
  226. package/dist/sheet-Q3dBOQG-.js +174 -0
  227. package/dist/sheet.cjs +1 -1
  228. package/dist/sheet.js +1 -1
  229. package/dist/sidebar.cjs +20 -2
  230. package/dist/sidebar.js +58 -26
  231. package/dist/skeleton.cjs +1 -1
  232. package/dist/skeleton.js +1 -1
  233. package/dist/slider.cjs +27 -1
  234. package/dist/slider.js +30 -4
  235. package/dist/space.css +1 -1
  236. package/dist/styles.css +1 -1
  237. package/dist/switch.cjs +18 -1
  238. package/dist/switch.js +19 -2
  239. package/dist/table.cjs +20 -1
  240. package/dist/table.js +26 -7
  241. package/dist/tabs-underline.cjs +21 -1
  242. package/dist/tabs-underline.js +23 -3
  243. package/dist/tabs.cjs +22 -1
  244. package/dist/tabs.js +24 -3
  245. package/dist/textarea-CG7iQcb3.cjs +14 -0
  246. package/dist/textarea-CUPWKl-S.js +32 -0
  247. package/dist/textarea.cjs +1 -1
  248. package/dist/textarea.js +1 -1
  249. package/dist/toaster.cjs +4 -1
  250. package/dist/toaster.js +9 -6
  251. package/dist/toggle.cjs +17 -1
  252. package/dist/toggle.js +25 -9
  253. package/dist/tooltip.cjs +16 -1
  254. package/dist/tooltip.js +22 -2
  255. package/dist/typography.cjs +1 -1
  256. package/dist/typography.js +6 -6
  257. package/docs/AI-GUIDE.md +321 -321
  258. package/docs/components/layout/sidebar.md +404 -404
  259. package/docs/components/layout/toaster.md +436 -436
  260. package/docs/components/ui/accordion-rounded.md +583 -583
  261. package/docs/components/ui/accordion.md +267 -267
  262. package/docs/components/ui/alert.md +671 -671
  263. package/docs/components/ui/avatar.md +588 -588
  264. package/docs/components/ui/badge.md +1024 -1024
  265. package/docs/components/ui/button-group.md +1002 -1002
  266. package/docs/components/ui/button.md +1078 -1078
  267. package/docs/components/ui/calendar.md +1159 -1159
  268. package/docs/components/ui/card.md +1265 -1265
  269. package/docs/components/ui/checkbox.md +292 -292
  270. package/docs/components/ui/collapsible.md +320 -320
  271. package/docs/components/ui/command.md +454 -454
  272. package/docs/components/ui/context-menu.md +540 -540
  273. package/docs/components/ui/dialog.md +628 -628
  274. package/docs/components/ui/dropdown-menu.md +731 -731
  275. package/docs/components/ui/field.md +706 -706
  276. package/docs/components/ui/hover-card.md +446 -446
  277. package/docs/components/ui/input-group.md +509 -509
  278. package/docs/components/ui/input.md +362 -362
  279. package/docs/components/ui/kbd.md +434 -434
  280. package/docs/components/ui/label.md +359 -359
  281. package/docs/components/ui/pagination.md +650 -650
  282. package/docs/components/ui/popover.md +536 -536
  283. package/docs/components/ui/progress.md +182 -182
  284. package/docs/components/ui/radio-group.md +311 -311
  285. package/docs/components/ui/select.md +352 -352
  286. package/docs/components/ui/separator.md +214 -214
  287. package/docs/components/ui/sheet.md +142 -142
  288. package/docs/components/ui/skeleton.md +140 -140
  289. package/docs/components/ui/slider.md +341 -341
  290. package/docs/components/ui/spinner.md +170 -170
  291. package/docs/components/ui/switch.md +402 -402
  292. package/docs/components/ui/table.md +183 -183
  293. package/docs/components/ui/tabs-underline.md +106 -106
  294. package/docs/components/ui/tabs.md +122 -122
  295. package/docs/components/ui/textarea.md +243 -243
  296. package/docs/components/ui/toggle.md +243 -243
  297. package/docs/components/ui/tooltip.md +320 -320
  298. package/docs/components/ui/typography.md +191 -191
  299. package/package.json +7 -1
  300. package/dist/button-2GdKenQI.js +0 -58
  301. package/dist/button-DEQVHMrX.cjs +0 -1
  302. package/dist/input-BF73maXg.cjs +0 -1
  303. package/dist/input-C04hsVXE.js +0 -22
  304. package/dist/sheet-B-9YHdR5.js +0 -128
  305. package/dist/sheet-CU-sFSaJ.cjs +0 -1
  306. package/dist/textarea-3ZdbFRDN.cjs +0 -1
  307. package/dist/textarea-BZbcAAAu.js +0 -19
@@ -1,404 +1,404 @@
1
- # Sidebar Component
2
-
3
- ## Descripción
4
-
5
- El componente `Sidebar` es un layout component que proporciona navegación lateral responsive. En desktop muestra un sidebar fijo lateral, mientras que en mobile se convierte automáticamente en un menú Sheet desplegable con icono hamburguesa.
6
-
7
- ## Importación
8
-
9
- ```typescript
10
- import {
11
- Sidebar,
12
- SidebarContent,
13
- SidebarInset,
14
- SidebarTopBar,
15
- SidebarTrigger,
16
- SidebarHeader,
17
- SidebarFooter,
18
- SidebarMenu,
19
- SidebarMenuItem,
20
- } from "@adamosuiteservices/ui/sidebar";
21
- ```
22
-
23
- **Nota**: Si usas `SidebarMenuItem` con `asChild`, también puedes importar componentes de navegación:
24
-
25
- ```typescript
26
- import { Link } from "react-router-dom"; // o Next.js Link
27
- ```
28
-
29
- ## Uso Básico
30
-
31
- ```tsx
32
- <Sidebar>
33
- <SidebarContent>
34
- <SidebarHeader className="adm:items-center">
35
- {/* Logo o título */}
36
- </SidebarHeader>
37
-
38
- <SidebarMenu>
39
- <SidebarMenuItem>
40
- <HomeIcon /> Dashboard
41
- </SidebarMenuItem>
42
- <SidebarMenuItem>
43
- <FolderIcon /> Projects
44
- </SidebarMenuItem>
45
- <SidebarMenuItem>
46
- <SettingsIcon /> Settings
47
- </SidebarMenuItem>
48
- </SidebarMenu>
49
-
50
- <SidebarFooter>
51
- <SidebarMenuItem>
52
- <CircleUserRoundIcon /> Profile
53
- </SidebarMenuItem>
54
- </SidebarFooter>
55
- </SidebarContent>
56
-
57
- <SidebarInset>
58
- <SidebarTopBar>
59
- <h1 className="adm:text-lg adm:font-semibold">Dashboard</h1>
60
- <SidebarTrigger />
61
- </SidebarTopBar>
62
- {/* Contenido principal */}
63
- </SidebarInset>
64
- </Sidebar>
65
- ```
66
-
67
- ## Componentes
68
-
69
- ### Sidebar (Root)
70
-
71
- Contenedor principal con context provider.
72
-
73
- ### SidebarContent
74
-
75
- Contenido del sidebar con Portal para posicionamiento fijo.
76
-
77
- ### SidebarInset
78
-
79
- Contenedor para el contenido principal que se ajusta al sidebar.
80
-
81
- ### SidebarTopBar
82
-
83
- Barra superior sticky para el contenido principal, ideal para incluir el trigger del sidebar y el título de la página.
84
-
85
- ### SidebarTrigger
86
-
87
- Botón hamburguesa que abre/cierra el sidebar en mobile. Automáticamente oculto en desktop (xl+).
88
-
89
- ### SidebarHeader
90
-
91
- Sección superior del sidebar.
92
-
93
- ### SidebarFooter
94
-
95
- Sección inferior del sidebar.
96
-
97
- ### SidebarMenu
98
-
99
- Contenedor para items de menú con scroll.
100
-
101
- ### SidebarMenuItem
102
-
103
- Item individual del menú con hover effects.
104
-
105
- ## Responsive
106
-
107
- - **Desktop (xl+)**: Sidebar fijo lateral (256px de ancho)
108
- - **Mobile**: Sidebar en Sheet (modal lateral)
109
- - Incluye icono hamburguesa automático en mobile
110
-
111
- ## Props
112
-
113
- ### Sidebar
114
-
115
- | Prop | Tipo | Descripción |
116
- | -------- | ----------- | --------------------------------------------------- |
117
- | children | `ReactNode` | Contenido del sidebar (debe incluir SidebarContent) |
118
-
119
- ### SidebarContent
120
-
121
- | Prop | Tipo | Descripción |
122
- | --------- | ----------------------- | ------------------------------------- |
123
- | className | `string` | Clases adicionales para el contenedor |
124
- | children | `ReactNode` | Contenido del sidebar |
125
- | ...props | `ComponentProps<"div">` | Props nativas de div |
126
-
127
- ### SidebarInset
128
-
129
- | Prop | Tipo | Descripción |
130
- | --------- | ----------------------- | ------------------------------------ |
131
- | className | `string` | Clases adicionales |
132
- | children | `ReactNode` | Contenido principal de la aplicación |
133
- | ...props | `ComponentProps<"div">` | Props nativas de div |
134
-
135
- ### SidebarTopBar
136
-
137
- | Prop | Tipo | Descripción |
138
- | --------- | ----------------------- | ------------------------------------------------- |
139
- | className | `string` | Clases adicionales |
140
- | children | `ReactNode` | Contenido de la barra (trigger, título, acciones) |
141
- | ...props | `ComponentProps<"div">` | Props nativas de div |
142
-
143
- **Estilos por defecto**: sticky, top-0, flex, gap-2, items-center, justify-between, bg-background, p-4, border-b
144
-
145
- ### SidebarTrigger
146
-
147
- | Prop | Tipo | Descripción |
148
- | --------- | -------------------------- | ----------------------- |
149
- | className | `string` | Clases adicionales |
150
- | ...props | `ComponentProps<"button">` | Props nativas de button |
151
-
152
- **Comportamiento**: Oculto automáticamente en desktop (xl:hidden). Incluye icono MenuIcon de lucide-react.
153
-
154
- ### SidebarHeader
155
-
156
- | Prop | Tipo | Descripción |
157
- | --------- | -------------------------- | ----------------------------------- |
158
- | className | `string` | Clases adicionales |
159
- | children | `ReactNode` | Contenido del header (logo, título) |
160
- | ...props | `ComponentProps<"header">` | Props nativas de header |
161
-
162
- ### SidebarFooter
163
-
164
- | Prop | Tipo | Descripción |
165
- | --------- | -------------------------- | -------------------------------------- |
166
- | className | `string` | Clases adicionales |
167
- | children | `ReactNode` | Contenido del footer (usuario, logout) |
168
- | ...props | `ComponentProps<"footer">` | Props nativas de footer |
169
-
170
- ### SidebarMenu
171
-
172
- | Prop | Tipo | Descripción |
173
- | --------- | ----------------------- | -------------------------------- |
174
- | className | `string` | Clases adicionales |
175
- | children | `ReactNode` | Items del menú (SidebarMenuItem) |
176
- | ...props | `ComponentProps<"div">` | Props nativas de div |
177
-
178
- ### SidebarMenuItem
179
-
180
- | Prop | Tipo | Default | Descripción |
181
- | --------- | -------------------------- | ------- | ----------------------------------------------------------- |
182
- | asChild | `boolean` | `false` | Si es true, renderiza el hijo directo en lugar de un button |
183
- | className | `string` | - | Clases adicionales |
184
- | ...props | `ComponentProps<"button">` | - | Props nativas de button |
185
-
186
- ## Características Principales
187
-
188
- - **Responsive automático**: Desktop muestra sidebar fijo, mobile usa Sheet con hamburger
189
- - **Auto-manejo del height**: Previene layout shifts al calcular altura automáticamente
190
- - **Breakpoint xl (1280px)**: Usa `useMediaQuery` para detectar el cambio
191
- - **Portal rendering**: Usa Radix Portal para z-index correcto
192
- - **Sheet integration**: Integración nativa con componente Sheet para mobile
193
- - **Accesibilidad**: Incluye VisuallyHidden para screen readers
194
- - **Sticky positioning**: Sidebar fijo en desktop con scroll independiente del contenido
195
-
196
- ## Ejemplo Completo
197
-
198
- ```tsx
199
- import {
200
- Sidebar,
201
- SidebarContent,
202
- SidebarFooter,
203
- SidebarHeader,
204
- SidebarInset,
205
- SidebarMenu,
206
- SidebarMenuItem,
207
- SidebarTopBar,
208
- SidebarTrigger,
209
- } from "@adamosuiteservices/ui/sidebar";
210
- import {
211
- CircleUserRoundIcon,
212
- HomeIcon,
213
- SettingsIcon,
214
- FolderIcon,
215
- } from "lucide-react";
216
-
217
- export default function AppLayout() {
218
- return (
219
- <Sidebar>
220
- <SidebarContent>
221
- <SidebarHeader className="adm:items-center">
222
- <Logo />
223
- </SidebarHeader>
224
-
225
- <SidebarMenu>
226
- <SidebarMenuItem>
227
- <HomeIcon /> Dashboard
228
- </SidebarMenuItem>
229
- <SidebarMenuItem>
230
- <FolderIcon /> Projects
231
- </SidebarMenuItem>
232
- <SidebarMenuItem>
233
- <SettingsIcon /> Settings
234
- </SidebarMenuItem>
235
- </SidebarMenu>
236
-
237
- <SidebarFooter>
238
- <SidebarMenuItem>
239
- <CircleUserRoundIcon /> Profile
240
- </SidebarMenuItem>
241
- </SidebarFooter>
242
- </SidebarContent>
243
-
244
- <SidebarInset>
245
- <SidebarTopBar>
246
- <h1 className="adm:text-lg adm:font-semibold">Dashboard</h1>
247
- <SidebarTrigger />
248
- </SidebarTopBar>
249
- <main className="adm:p-6">{/* Tu contenido aquí */}</main>
250
- </SidebarInset>
251
- </Sidebar>
252
- );
253
- }
254
- ```
255
-
256
- ## Hook Personalizado
257
-
258
- ### useSidebarContext()
259
-
260
- Hook para acceder al contexto del Sidebar desde componentes hijos.
261
-
262
- ```tsx
263
- import { useSidebarContext } from "@adamosuiteservices/ui/sidebar";
264
-
265
- function CustomSidebarComponent() {
266
- const { isXl, sidebarHeight, sheetOpen, setSheetOpen } = useSidebarContext();
267
-
268
- return (
269
- <div>
270
- {isXl ? "Desktop" : "Mobile"}
271
- <span>Height: {sidebarHeight}</span>
272
- <button onClick={() => setSheetOpen(!sheetOpen)}>Toggle Sidebar</button>
273
- </div>
274
- );
275
- }
276
- ```
277
-
278
- **Retorna**:
279
- | Propiedad | Tipo | Descripción |
280
- |-----------|------|-------------|
281
- | isXl | `boolean` | True si el viewport es >= 1280px |
282
- | sidebarHeight | `string` | Altura calculada del sidebar ("auto" en desktop, px en mobile) |
283
- | setSidebarHeight | `Dispatch<SetStateAction<string>>` | Setter para actualizar la altura |
284
- | sheetOpen | `boolean` | Estado del Sheet en mobile (abierto/cerrado) |
285
- | setSheetOpen | `Dispatch<SetStateAction<boolean>>` | Setter para controlar el estado del Sheet |
286
-
287
- **Nota**: Este hook debe usarse dentro de un componente que sea hijo de `<Sidebar>`.
288
-
289
- ## Ejemplos Adicionales
290
-
291
- ### Items Básicos con Iconos
292
-
293
- El ejemplo principal muestra el uso más simple - items como buttons con iconos:
294
-
295
- ```tsx
296
- <SidebarMenu>
297
- <SidebarMenuItem>
298
- <HomeIcon /> Dashboard
299
- </SidebarMenuItem>
300
- <SidebarMenuItem>
301
- <FolderIcon /> Projects
302
- </SidebarMenuItem>
303
- <SidebarMenuItem>
304
- <SettingsIcon /> Settings
305
- </SidebarMenuItem>
306
- </SidebarMenu>
307
- ```
308
-
309
- ### Con React Router (usando asChild)
310
-
311
- ```tsx
312
- import { Link } from "react-router-dom";
313
-
314
- <SidebarMenu>
315
- <SidebarMenuItem asChild>
316
- <Link to="/dashboard">
317
- <HomeIcon /> Dashboard
318
- </Link>
319
- </SidebarMenuItem>
320
- <SidebarMenuItem asChild>
321
- <Link to="/settings">
322
- <SettingsIcon /> Settings
323
- </Link>
324
- </SidebarMenuItem>
325
- </SidebarMenu>;
326
- ```
327
-
328
- ### Con Next.js (usando asChild)
329
-
330
- ```tsx
331
- import Link from "next/link";
332
-
333
- <SidebarMenu>
334
- <SidebarMenuItem asChild>
335
- <Link href="/dashboard">
336
- <HomeIcon /> Dashboard
337
- </Link>
338
- </SidebarMenuItem>
339
- </SidebarMenu>;
340
- ```
341
-
342
- ### Estados Activos
343
-
344
- ```tsx
345
- const pathname = usePathname(); // Next.js o similar
346
-
347
- <SidebarMenu>
348
- <SidebarMenuItem
349
- className={pathname === "/dashboard" ? "adm:bg-white/20" : ""}
350
- >
351
- <HomeIcon /> Dashboard
352
- </SidebarMenuItem>
353
- <SidebarMenuItem
354
- className={pathname === "/settings" ? "adm:bg-white/20" : ""}
355
- >
356
- <SettingsIcon /> Settings
357
- </SidebarMenuItem>
358
- </SidebarMenu>;
359
- ```
360
-
361
- ### Personalización de Colores
362
-
363
- El sidebar usa variables CSS de tema. Puedes personalizarlas:
364
-
365
- ```css
366
- :root {
367
- --sidebar-primary: 220 13% 18%;
368
- --sidebar-primary-foreground: 210 20% 98%;
369
- }
370
- ```
371
-
372
- ## Notas de Implementación
373
-
374
- - El componente usa internamente las clases con prefijo `adm:` para evitar conflictos de estilos
375
- - `SidebarContent` usa Portal de Radix para renderizar en el top level del DOM
376
- - El cambio responsive ocurre automáticamente en el breakpoint xl (1280px)
377
- - En mobile, el Sheet se abre desde la izquierda
378
- - `SidebarMenuItem` tiene hover effects y padding predefinidos
379
- - `SidebarMenu` incluye scroll automático si el contenido excede la altura
380
- - Los componentes usan `data-slot` attributes para debugging y testing:
381
- - `sidebar` - Contenedor root
382
- - `sidebar-content` - Contenido principal del sidebar
383
- - `sidebar-trigger` - Botón hamburguesa para mobile
384
- - `sidebar-inset` - Contenedor del contenido principal
385
- - `sidebar-top-bar` - Barra superior (si se usa)
386
- - `sidebar-header` - Header del sidebar
387
- - `sidebar-footer` - Footer del sidebar
388
- - `sidebar-menu` - Contenedor de items del menú
389
- - `sidebar-menu-item` - Item individual del menú
390
-
391
- ## Accesibilidad
392
-
393
- - ✅ El Sheet en mobile incluye SheetTitle y SheetDescription (ocultos visualmente)
394
- - ✅ Navegación por teclado soportada en todos los items
395
- - ✅ Focus visible en items del menú
396
- - ✅ Semántica HTML correcta (nav, header, footer)
397
- - ✅ ARIA labels automáticos en el Sheet trigger
398
-
399
- ## Referencias
400
-
401
- - Similar a shadcn/ui Sidebar pattern
402
- - Usa Radix UI Portal para rendering
403
- - Usa Radix UI Sheet para modal mobile
404
- - Implementa useMediaQuery de @uidotdev/usehooks
1
+ # Sidebar Component
2
+
3
+ ## Descripción
4
+
5
+ El componente `Sidebar` es un layout component que proporciona navegación lateral responsive. En desktop muestra un sidebar fijo lateral, mientras que en mobile se convierte automáticamente en un menú Sheet desplegable con icono hamburguesa.
6
+
7
+ ## Importación
8
+
9
+ ```typescript
10
+ import {
11
+ Sidebar,
12
+ SidebarContent,
13
+ SidebarInset,
14
+ SidebarTopBar,
15
+ SidebarTrigger,
16
+ SidebarHeader,
17
+ SidebarFooter,
18
+ SidebarMenu,
19
+ SidebarMenuItem,
20
+ } from "@adamosuiteservices/ui/sidebar";
21
+ ```
22
+
23
+ **Nota**: Si usas `SidebarMenuItem` con `asChild`, también puedes importar componentes de navegación:
24
+
25
+ ```typescript
26
+ import { Link } from "react-router-dom"; // o Next.js Link
27
+ ```
28
+
29
+ ## Uso Básico
30
+
31
+ ```tsx
32
+ <Sidebar>
33
+ <SidebarContent>
34
+ <SidebarHeader className="adm:items-center">
35
+ {/* Logo o título */}
36
+ </SidebarHeader>
37
+
38
+ <SidebarMenu>
39
+ <SidebarMenuItem>
40
+ <HomeIcon /> Dashboard
41
+ </SidebarMenuItem>
42
+ <SidebarMenuItem>
43
+ <FolderIcon /> Projects
44
+ </SidebarMenuItem>
45
+ <SidebarMenuItem>
46
+ <SettingsIcon /> Settings
47
+ </SidebarMenuItem>
48
+ </SidebarMenu>
49
+
50
+ <SidebarFooter>
51
+ <SidebarMenuItem>
52
+ <CircleUserRoundIcon /> Profile
53
+ </SidebarMenuItem>
54
+ </SidebarFooter>
55
+ </SidebarContent>
56
+
57
+ <SidebarInset>
58
+ <SidebarTopBar>
59
+ <h1 className="adm:text-lg adm:font-semibold">Dashboard</h1>
60
+ <SidebarTrigger />
61
+ </SidebarTopBar>
62
+ {/* Contenido principal */}
63
+ </SidebarInset>
64
+ </Sidebar>
65
+ ```
66
+
67
+ ## Componentes
68
+
69
+ ### Sidebar (Root)
70
+
71
+ Contenedor principal con context provider.
72
+
73
+ ### SidebarContent
74
+
75
+ Contenido del sidebar con Portal para posicionamiento fijo.
76
+
77
+ ### SidebarInset
78
+
79
+ Contenedor para el contenido principal que se ajusta al sidebar.
80
+
81
+ ### SidebarTopBar
82
+
83
+ Barra superior sticky para el contenido principal, ideal para incluir el trigger del sidebar y el título de la página.
84
+
85
+ ### SidebarTrigger
86
+
87
+ Botón hamburguesa que abre/cierra el sidebar en mobile. Automáticamente oculto en desktop (xl+).
88
+
89
+ ### SidebarHeader
90
+
91
+ Sección superior del sidebar.
92
+
93
+ ### SidebarFooter
94
+
95
+ Sección inferior del sidebar.
96
+
97
+ ### SidebarMenu
98
+
99
+ Contenedor para items de menú con scroll.
100
+
101
+ ### SidebarMenuItem
102
+
103
+ Item individual del menú con hover effects.
104
+
105
+ ## Responsive
106
+
107
+ - **Desktop (xl+)**: Sidebar fijo lateral (256px de ancho)
108
+ - **Mobile**: Sidebar en Sheet (modal lateral)
109
+ - Incluye icono hamburguesa automático en mobile
110
+
111
+ ## Props
112
+
113
+ ### Sidebar
114
+
115
+ | Prop | Tipo | Descripción |
116
+ | -------- | ----------- | --------------------------------------------------- |
117
+ | children | `ReactNode` | Contenido del sidebar (debe incluir SidebarContent) |
118
+
119
+ ### SidebarContent
120
+
121
+ | Prop | Tipo | Descripción |
122
+ | --------- | ----------------------- | ------------------------------------- |
123
+ | className | `string` | Clases adicionales para el contenedor |
124
+ | children | `ReactNode` | Contenido del sidebar |
125
+ | ...props | `ComponentProps<"div">` | Props nativas de div |
126
+
127
+ ### SidebarInset
128
+
129
+ | Prop | Tipo | Descripción |
130
+ | --------- | ----------------------- | ------------------------------------ |
131
+ | className | `string` | Clases adicionales |
132
+ | children | `ReactNode` | Contenido principal de la aplicación |
133
+ | ...props | `ComponentProps<"div">` | Props nativas de div |
134
+
135
+ ### SidebarTopBar
136
+
137
+ | Prop | Tipo | Descripción |
138
+ | --------- | ----------------------- | ------------------------------------------------- |
139
+ | className | `string` | Clases adicionales |
140
+ | children | `ReactNode` | Contenido de la barra (trigger, título, acciones) |
141
+ | ...props | `ComponentProps<"div">` | Props nativas de div |
142
+
143
+ **Estilos por defecto**: sticky, top-0, flex, gap-2, items-center, justify-between, bg-background, p-4, border-b
144
+
145
+ ### SidebarTrigger
146
+
147
+ | Prop | Tipo | Descripción |
148
+ | --------- | -------------------------- | ----------------------- |
149
+ | className | `string` | Clases adicionales |
150
+ | ...props | `ComponentProps<"button">` | Props nativas de button |
151
+
152
+ **Comportamiento**: Oculto automáticamente en desktop (xl:hidden). Incluye icono MenuIcon de lucide-react.
153
+
154
+ ### SidebarHeader
155
+
156
+ | Prop | Tipo | Descripción |
157
+ | --------- | -------------------------- | ----------------------------------- |
158
+ | className | `string` | Clases adicionales |
159
+ | children | `ReactNode` | Contenido del header (logo, título) |
160
+ | ...props | `ComponentProps<"header">` | Props nativas de header |
161
+
162
+ ### SidebarFooter
163
+
164
+ | Prop | Tipo | Descripción |
165
+ | --------- | -------------------------- | -------------------------------------- |
166
+ | className | `string` | Clases adicionales |
167
+ | children | `ReactNode` | Contenido del footer (usuario, logout) |
168
+ | ...props | `ComponentProps<"footer">` | Props nativas de footer |
169
+
170
+ ### SidebarMenu
171
+
172
+ | Prop | Tipo | Descripción |
173
+ | --------- | ----------------------- | -------------------------------- |
174
+ | className | `string` | Clases adicionales |
175
+ | children | `ReactNode` | Items del menú (SidebarMenuItem) |
176
+ | ...props | `ComponentProps<"div">` | Props nativas de div |
177
+
178
+ ### SidebarMenuItem
179
+
180
+ | Prop | Tipo | Default | Descripción |
181
+ | --------- | -------------------------- | ------- | ----------------------------------------------------------- |
182
+ | asChild | `boolean` | `false` | Si es true, renderiza el hijo directo en lugar de un button |
183
+ | className | `string` | - | Clases adicionales |
184
+ | ...props | `ComponentProps<"button">` | - | Props nativas de button |
185
+
186
+ ## Características Principales
187
+
188
+ - **Responsive automático**: Desktop muestra sidebar fijo, mobile usa Sheet con hamburger
189
+ - **Auto-manejo del height**: Previene layout shifts al calcular altura automáticamente
190
+ - **Breakpoint xl (1280px)**: Usa `useMediaQuery` para detectar el cambio
191
+ - **Portal rendering**: Usa Radix Portal para z-index correcto
192
+ - **Sheet integration**: Integración nativa con componente Sheet para mobile
193
+ - **Accesibilidad**: Incluye VisuallyHidden para screen readers
194
+ - **Sticky positioning**: Sidebar fijo en desktop con scroll independiente del contenido
195
+
196
+ ## Ejemplo Completo
197
+
198
+ ```tsx
199
+ import {
200
+ Sidebar,
201
+ SidebarContent,
202
+ SidebarFooter,
203
+ SidebarHeader,
204
+ SidebarInset,
205
+ SidebarMenu,
206
+ SidebarMenuItem,
207
+ SidebarTopBar,
208
+ SidebarTrigger,
209
+ } from "@adamosuiteservices/ui/sidebar";
210
+ import {
211
+ CircleUserRoundIcon,
212
+ HomeIcon,
213
+ SettingsIcon,
214
+ FolderIcon,
215
+ } from "lucide-react";
216
+
217
+ export default function AppLayout() {
218
+ return (
219
+ <Sidebar>
220
+ <SidebarContent>
221
+ <SidebarHeader className="adm:items-center">
222
+ <Logo />
223
+ </SidebarHeader>
224
+
225
+ <SidebarMenu>
226
+ <SidebarMenuItem>
227
+ <HomeIcon /> Dashboard
228
+ </SidebarMenuItem>
229
+ <SidebarMenuItem>
230
+ <FolderIcon /> Projects
231
+ </SidebarMenuItem>
232
+ <SidebarMenuItem>
233
+ <SettingsIcon /> Settings
234
+ </SidebarMenuItem>
235
+ </SidebarMenu>
236
+
237
+ <SidebarFooter>
238
+ <SidebarMenuItem>
239
+ <CircleUserRoundIcon /> Profile
240
+ </SidebarMenuItem>
241
+ </SidebarFooter>
242
+ </SidebarContent>
243
+
244
+ <SidebarInset>
245
+ <SidebarTopBar>
246
+ <h1 className="adm:text-lg adm:font-semibold">Dashboard</h1>
247
+ <SidebarTrigger />
248
+ </SidebarTopBar>
249
+ <main className="adm:p-6">{/* Tu contenido aquí */}</main>
250
+ </SidebarInset>
251
+ </Sidebar>
252
+ );
253
+ }
254
+ ```
255
+
256
+ ## Hook Personalizado
257
+
258
+ ### useSidebarContext()
259
+
260
+ Hook para acceder al contexto del Sidebar desde componentes hijos.
261
+
262
+ ```tsx
263
+ import { useSidebarContext } from "@adamosuiteservices/ui/sidebar";
264
+
265
+ function CustomSidebarComponent() {
266
+ const { isXl, sidebarHeight, sheetOpen, setSheetOpen } = useSidebarContext();
267
+
268
+ return (
269
+ <div>
270
+ {isXl ? "Desktop" : "Mobile"}
271
+ <span>Height: {sidebarHeight}</span>
272
+ <button onClick={() => setSheetOpen(!sheetOpen)}>Toggle Sidebar</button>
273
+ </div>
274
+ );
275
+ }
276
+ ```
277
+
278
+ **Retorna**:
279
+ | Propiedad | Tipo | Descripción |
280
+ |-----------|------|-------------|
281
+ | isXl | `boolean` | True si el viewport es >= 1280px |
282
+ | sidebarHeight | `string` | Altura calculada del sidebar ("auto" en desktop, px en mobile) |
283
+ | setSidebarHeight | `Dispatch<SetStateAction<string>>` | Setter para actualizar la altura |
284
+ | sheetOpen | `boolean` | Estado del Sheet en mobile (abierto/cerrado) |
285
+ | setSheetOpen | `Dispatch<SetStateAction<boolean>>` | Setter para controlar el estado del Sheet |
286
+
287
+ **Nota**: Este hook debe usarse dentro de un componente que sea hijo de `<Sidebar>`.
288
+
289
+ ## Ejemplos Adicionales
290
+
291
+ ### Items Básicos con Iconos
292
+
293
+ El ejemplo principal muestra el uso más simple - items como buttons con iconos:
294
+
295
+ ```tsx
296
+ <SidebarMenu>
297
+ <SidebarMenuItem>
298
+ <HomeIcon /> Dashboard
299
+ </SidebarMenuItem>
300
+ <SidebarMenuItem>
301
+ <FolderIcon /> Projects
302
+ </SidebarMenuItem>
303
+ <SidebarMenuItem>
304
+ <SettingsIcon /> Settings
305
+ </SidebarMenuItem>
306
+ </SidebarMenu>
307
+ ```
308
+
309
+ ### Con React Router (usando asChild)
310
+
311
+ ```tsx
312
+ import { Link } from "react-router-dom";
313
+
314
+ <SidebarMenu>
315
+ <SidebarMenuItem asChild>
316
+ <Link to="/dashboard">
317
+ <HomeIcon /> Dashboard
318
+ </Link>
319
+ </SidebarMenuItem>
320
+ <SidebarMenuItem asChild>
321
+ <Link to="/settings">
322
+ <SettingsIcon /> Settings
323
+ </Link>
324
+ </SidebarMenuItem>
325
+ </SidebarMenu>;
326
+ ```
327
+
328
+ ### Con Next.js (usando asChild)
329
+
330
+ ```tsx
331
+ import Link from "next/link";
332
+
333
+ <SidebarMenu>
334
+ <SidebarMenuItem asChild>
335
+ <Link href="/dashboard">
336
+ <HomeIcon /> Dashboard
337
+ </Link>
338
+ </SidebarMenuItem>
339
+ </SidebarMenu>;
340
+ ```
341
+
342
+ ### Estados Activos
343
+
344
+ ```tsx
345
+ const pathname = usePathname(); // Next.js o similar
346
+
347
+ <SidebarMenu>
348
+ <SidebarMenuItem
349
+ className={pathname === "/dashboard" ? "adm:bg-white/20" : ""}
350
+ >
351
+ <HomeIcon /> Dashboard
352
+ </SidebarMenuItem>
353
+ <SidebarMenuItem
354
+ className={pathname === "/settings" ? "adm:bg-white/20" : ""}
355
+ >
356
+ <SettingsIcon /> Settings
357
+ </SidebarMenuItem>
358
+ </SidebarMenu>;
359
+ ```
360
+
361
+ ### Personalización de Colores
362
+
363
+ El sidebar usa variables CSS de tema. Puedes personalizarlas:
364
+
365
+ ```css
366
+ :root {
367
+ --sidebar-primary: 220 13% 18%;
368
+ --sidebar-primary-foreground: 210 20% 98%;
369
+ }
370
+ ```
371
+
372
+ ## Notas de Implementación
373
+
374
+ - El componente usa internamente las clases con prefijo `adm:` para evitar conflictos de estilos
375
+ - `SidebarContent` usa Portal de Radix para renderizar en el top level del DOM
376
+ - El cambio responsive ocurre automáticamente en el breakpoint xl (1280px)
377
+ - En mobile, el Sheet se abre desde la izquierda
378
+ - `SidebarMenuItem` tiene hover effects y padding predefinidos
379
+ - `SidebarMenu` incluye scroll automático si el contenido excede la altura
380
+ - Los componentes usan `data-slot` attributes para debugging y testing:
381
+ - `sidebar` - Contenedor root
382
+ - `sidebar-content` - Contenido principal del sidebar
383
+ - `sidebar-trigger` - Botón hamburguesa para mobile
384
+ - `sidebar-inset` - Contenedor del contenido principal
385
+ - `sidebar-top-bar` - Barra superior (si se usa)
386
+ - `sidebar-header` - Header del sidebar
387
+ - `sidebar-footer` - Footer del sidebar
388
+ - `sidebar-menu` - Contenedor de items del menú
389
+ - `sidebar-menu-item` - Item individual del menú
390
+
391
+ ## Accesibilidad
392
+
393
+ - ✅ El Sheet en mobile incluye SheetTitle y SheetDescription (ocultos visualmente)
394
+ - ✅ Navegación por teclado soportada en todos los items
395
+ - ✅ Focus visible en items del menú
396
+ - ✅ Semántica HTML correcta (nav, header, footer)
397
+ - ✅ ARIA labels automáticos en el Sheet trigger
398
+
399
+ ## Referencias
400
+
401
+ - Similar a shadcn/ui Sidebar pattern
402
+ - Usa Radix UI Portal para rendering
403
+ - Usa Radix UI Sheet para modal mobile
404
+ - Implementa useMediaQuery de @uidotdev/usehooks