siesa-ui-kit 1.0.3 → 1.0.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 (290) hide show
  1. package/README.md +115 -115
  2. package/bin/install.cjs +502 -502
  3. package/bin/prepare-publish.cjs +28 -28
  4. package/bin/restore-folders.cjs +28 -28
  5. package/claude/agents/siesa-ui-kit-specialist.md +2445 -0
  6. package/claude/prompts/component-template.md +121 -0
  7. package/claude/prompts/siesa-ui-kit.md +28 -0
  8. package/claude/settings.local.json +72 -0
  9. package/dist/components/Button/icons.d.ts +6 -5
  10. package/dist/components/Button/icons.d.ts.map +1 -1
  11. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -1
  12. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +21 -0
  13. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -1
  14. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +122 -0
  15. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +1 -0
  16. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +139 -0
  17. package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +1 -0
  18. package/dist/components/NavigationRailCommercial/icons.d.ts +33 -0
  19. package/dist/components/NavigationRailCommercial/icons.d.ts.map +1 -0
  20. package/dist/components/NavigationRailCommercial/index.d.ts +4 -0
  21. package/dist/components/NavigationRailCommercial/index.d.ts.map +1 -0
  22. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -1
  23. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +7 -0
  24. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -1
  25. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -1
  26. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +41 -0
  27. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -1
  28. package/dist/components/NavigationRailTypes/icons.d.ts +15 -29
  29. package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -1
  30. package/dist/components/Select/Select.d.ts.map +1 -1
  31. package/dist/components/Select/icons.d.ts +6 -2
  32. package/dist/components/Select/icons.d.ts.map +1 -1
  33. package/dist/index.d.ts +32 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/siesa-ui-kit.cjs +404 -190
  36. package/dist/siesa-ui-kit.cjs.map +1 -1
  37. package/dist/siesa-ui-kit.mjs +6590 -1506
  38. package/dist/siesa-ui-kit.mjs.map +1 -1
  39. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +48 -0
  40. package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +1 -0
  41. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +49 -0
  42. package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +1 -0
  43. package/dist/views/LayoutCommercial/index.d.ts +3 -0
  44. package/dist/views/LayoutCommercial/index.d.ts.map +1 -0
  45. package/docs/border-radius.md +1261 -0
  46. package/docs/colors.md +832 -0
  47. package/docs/dark-mode-guide.md +1426 -0
  48. package/docs/filters.md +1243 -0
  49. package/docs/icons.md +1264 -0
  50. package/docs/shadows.md +1377 -0
  51. package/docs/spacing.md +1684 -0
  52. package/docs/typography.md +1268 -0
  53. package/package.json +111 -103
  54. package/postcss.config.cjs +6 -0
  55. package/public/,Business Logo.png +0 -0
  56. package/public/.Siesa Logo.png +0 -0
  57. package/public/bg_siesa.png +0 -0
  58. package/public/siesa_logo_mobile.png +0 -0
  59. package/public/vite.svg +1 -0
  60. package/src/App.css +42 -0
  61. package/src/App.tsx +8 -0
  62. package/src/ButtonTest.tsx +147 -0
  63. package/src/assets/fonts/README.md +261 -0
  64. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  65. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  66. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  67. package/src/assets/react.svg +1 -0
  68. package/src/components/Alert/Alert.stories.tsx +332 -0
  69. package/src/components/Alert/Alert.tsx +106 -0
  70. package/src/components/Alert/Alert.types.ts +54 -0
  71. package/src/components/Avatar/Avatar.stories.tsx +494 -0
  72. package/src/components/Avatar/Avatar.tsx +143 -0
  73. package/src/components/Avatar/Avatar.types.ts +53 -0
  74. package/src/components/Badge/Badge.stories.tsx +339 -0
  75. package/src/components/Badge/Badge.tsx +278 -0
  76. package/src/components/Badge/Badge.types.ts +58 -0
  77. package/src/components/Button/Button.stories.tsx +950 -0
  78. package/src/components/Button/Button.tsx +337 -0
  79. package/src/components/Button/Button.types.ts +180 -0
  80. package/src/components/Button/icons.tsx +48 -0
  81. package/src/components/Button/index.ts +3 -0
  82. package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
  83. package/src/components/Checkbox/Checkbox.tsx +208 -0
  84. package/src/components/Checkbox/Checkbox.types.ts +61 -0
  85. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
  86. package/src/components/DescriptionList/DescriptionList.tsx +96 -0
  87. package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
  88. package/src/components/Divider/Divider.stories.tsx +263 -0
  89. package/src/components/Divider/Divider.tsx +80 -0
  90. package/src/components/Divider/Divider.types.ts +24 -0
  91. package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
  92. package/src/components/Dropdown/Dropdown.tsx +422 -0
  93. package/src/components/Dropdown/Dropdown.types.ts +146 -0
  94. package/src/components/Dropdown/README.md +266 -0
  95. package/src/components/Dropdown/icons.tsx +72 -0
  96. package/src/components/Dropdown/index.ts +8 -0
  97. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
  98. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -0
  99. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -0
  100. package/src/components/DropdownItemCollapsible/README.md +264 -0
  101. package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
  102. package/src/components/DropdownItemCollapsible/index.ts +12 -0
  103. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
  104. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
  105. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
  106. package/src/components/DropdownItemHeading/README.md +573 -0
  107. package/src/components/DropdownItemHeading/icons.tsx +125 -0
  108. package/src/components/DropdownItemHeading/index.ts +3 -0
  109. package/src/components/Input/Input.stories.tsx +583 -0
  110. package/src/components/Input/Input.tsx +204 -0
  111. package/src/components/Input/Input.types.ts +80 -0
  112. package/src/components/Input/icons.tsx +145 -0
  113. package/src/components/Input/index.ts +2 -0
  114. package/src/components/LoginView/LoginView.stories.tsx +148 -0
  115. package/src/components/LoginView/LoginView.tsx +426 -0
  116. package/src/components/LoginView/LoginView.types.ts +52 -0
  117. package/src/components/LoginView/README.md +396 -0
  118. package/src/components/LoginView/icons.tsx +85 -0
  119. package/src/components/LoginView/index.ts +3 -0
  120. package/src/components/Navbar/Navbar.stories.tsx +810 -0
  121. package/src/components/Navbar/Navbar.tsx +755 -0
  122. package/src/components/Navbar/Navbar.types.ts +219 -0
  123. package/src/components/Navbar/README.md +279 -0
  124. package/src/components/Navbar/icons.tsx +102 -0
  125. package/src/components/Navbar/index.ts +8 -0
  126. package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
  127. package/src/components/NavigationBar/NavigationBar.tsx +246 -0
  128. package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
  129. package/src/components/NavigationBar/README.md +469 -0
  130. package/src/components/NavigationBar/index.ts +2 -0
  131. package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
  132. package/src/components/NavigationRail/NavigationRail.tsx +418 -0
  133. package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
  134. package/src/components/NavigationRail/README.md +224 -0
  135. package/src/components/NavigationRail/index.ts +2 -0
  136. package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
  137. package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
  138. package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
  139. package/src/components/NavigationRailCommercial/README.md +251 -0
  140. package/src/components/NavigationRailCommercial/icons.tsx +54 -0
  141. package/src/components/NavigationRailCommercial/index.ts +6 -0
  142. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -0
  143. package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -0
  144. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -0
  145. package/src/components/NavigationRailItem/README.md +476 -0
  146. package/src/components/NavigationRailItem/index.ts +2 -0
  147. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
  148. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
  149. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
  150. package/src/components/NavigationRailPanel/README.md +461 -0
  151. package/src/components/NavigationRailPanel/index.ts +6 -0
  152. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -0
  153. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -0
  154. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -0
  155. package/src/components/NavigationRailTypes/README.md +573 -0
  156. package/src/components/NavigationRailTypes/icons.tsx +76 -0
  157. package/src/components/NavigationRailTypes/index.ts +7 -0
  158. package/src/components/Notification/Notification.stories.tsx +513 -0
  159. package/src/components/Notification/Notification.tsx +145 -0
  160. package/src/components/Notification/Notification.types.ts +142 -0
  161. package/src/components/Notification/README.md +409 -0
  162. package/src/components/Notification/index.ts +3 -0
  163. package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
  164. package/src/components/POSConvention/POSConvention.tsx +129 -0
  165. package/src/components/POSConvention/POSConvention.types.ts +38 -0
  166. package/src/components/POSConvention/README.md +123 -0
  167. package/src/components/POSConvention/icons.tsx +45 -0
  168. package/src/components/POSConvention/index.ts +3 -0
  169. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
  170. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
  171. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
  172. package/src/components/POSLocationButton/README.md +253 -0
  173. package/src/components/POSLocationButton/icons.tsx +120 -0
  174. package/src/components/POSLocationButton/index.ts +14 -0
  175. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
  176. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
  177. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
  178. package/src/components/POSNumberButton/README.md +321 -0
  179. package/src/components/POSNumberButton/index.ts +3 -0
  180. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
  181. package/src/components/POSProductButton/POSProductButton.tsx +152 -0
  182. package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
  183. package/src/components/POSProductButton/README.md +269 -0
  184. package/src/components/POSProductButton/index.ts +2 -0
  185. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
  186. package/src/components/POSProductCard/POSProductCard.tsx +208 -0
  187. package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
  188. package/src/components/POSProductCard/README.md +179 -0
  189. package/src/components/POSProductCard/icons.tsx +26 -0
  190. package/src/components/POSProductCard/index.ts +2 -0
  191. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
  192. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
  193. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
  194. package/src/components/POSProductSidebarItems/README.md +198 -0
  195. package/src/components/POSProductSidebarItems/icons.tsx +21 -0
  196. package/src/components/POSProductSidebarItems/index.ts +3 -0
  197. package/src/components/POSTable/POSTable.stories.tsx +737 -0
  198. package/src/components/POSTable/POSTable.tsx +401 -0
  199. package/src/components/POSTable/POSTable.types.ts +83 -0
  200. package/src/components/POSTable/README.md +286 -0
  201. package/src/components/POSTable/index.ts +7 -0
  202. package/src/components/Pagination/Pagination.stories.tsx +555 -0
  203. package/src/components/Pagination/Pagination.tsx +286 -0
  204. package/src/components/Pagination/Pagination.types.ts +93 -0
  205. package/src/components/Pagination/README.md +298 -0
  206. package/src/components/Pagination/icons.tsx +47 -0
  207. package/src/components/Pagination/index.ts +3 -0
  208. package/src/components/Quantity/Quantity.stories.tsx +457 -0
  209. package/src/components/Quantity/Quantity.tsx +289 -0
  210. package/src/components/Quantity/Quantity.types.ts +70 -0
  211. package/src/components/Radio/Radio.stories.tsx +523 -0
  212. package/src/components/Radio/Radio.tsx +170 -0
  213. package/src/components/Radio/Radio.types.ts +122 -0
  214. package/src/components/Select/README.md +299 -0
  215. package/src/components/Select/Select.stories.tsx +705 -0
  216. package/src/components/Select/Select.tsx +457 -0
  217. package/src/components/Select/Select.types.ts +148 -0
  218. package/src/components/Select/icons.tsx +25 -0
  219. package/src/components/Select/index.ts +3 -0
  220. package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
  221. package/src/components/SignUpView/SignUpView.tsx +503 -0
  222. package/src/components/SignUpView/SignUpView.types.ts +58 -0
  223. package/src/components/SignUpView/icons.tsx +71 -0
  224. package/src/components/SignUpView/index.ts +3 -0
  225. package/src/components/Switch/README.md +112 -0
  226. package/src/components/Switch/Switch.stories.tsx +550 -0
  227. package/src/components/Switch/Switch.tsx +246 -0
  228. package/src/components/Switch/Switch.types.ts +67 -0
  229. package/src/components/Table/README.md +369 -0
  230. package/src/components/Table/Table.stories.tsx +805 -0
  231. package/src/components/Table/Table.tsx +688 -0
  232. package/src/components/Table/Table.types.ts +204 -0
  233. package/src/components/Table/index.ts +9 -0
  234. package/src/components/Tabs/README.md +201 -0
  235. package/src/components/Tabs/Tabs.stories.tsx +580 -0
  236. package/src/components/Tabs/Tabs.tsx +356 -0
  237. package/src/components/Tabs/Tabs.types.ts +127 -0
  238. package/src/components/Tabs/icons.tsx +129 -0
  239. package/src/components/Tabs/index.ts +11 -0
  240. package/src/components/Textarea/Textarea.stories.tsx +535 -0
  241. package/src/components/Textarea/Textarea.tsx +188 -0
  242. package/src/components/Textarea/Textarea.types.ts +54 -0
  243. package/src/context/ThemeContext.tsx +99 -0
  244. package/src/context/index.ts +1 -0
  245. package/src/index.css +29 -0
  246. package/src/index.ts +133 -0
  247. package/src/main.tsx +10 -0
  248. package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
  249. package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
  250. package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
  251. package/src/views/LayoutCommercial/README.md +286 -0
  252. package/src/views/LayoutCommercial/index.ts +2 -0
  253. package/src/views/ListView/ListView.stories.tsx +329 -0
  254. package/src/views/ListView/ListView.tsx +570 -0
  255. package/src/views/ListView/ListView.types.ts +211 -0
  256. package/src/views/ListView/icons.tsx +282 -0
  257. package/src/views/ListView/index.ts +11 -0
  258. package/src/views/LoginView/LoginView.stories.tsx +148 -0
  259. package/src/views/LoginView/LoginView.tsx +426 -0
  260. package/src/views/LoginView/LoginView.types.ts +52 -0
  261. package/src/views/LoginView/README.md +396 -0
  262. package/src/views/LoginView/icons.tsx +85 -0
  263. package/src/views/LoginView/index.ts +3 -0
  264. package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
  265. package/src/views/ProductsView/ProductsView.tsx +480 -0
  266. package/src/views/ProductsView/ProductsView.types.ts +238 -0
  267. package/src/views/ProductsView/README.md +312 -0
  268. package/src/views/ProductsView/icons.tsx +38 -0
  269. package/src/views/ProductsView/index.ts +8 -0
  270. package/src/views/RecoverPasswordView/README.md +269 -0
  271. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
  272. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
  273. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
  274. package/src/views/RecoverPasswordView/icons.tsx +17 -0
  275. package/src/views/RecoverPasswordView/index.ts +2 -0
  276. package/src/views/SignUpView/SignUpView.stories.tsx +129 -0
  277. package/src/views/SignUpView/SignUpView.tsx +503 -0
  278. package/src/views/SignUpView/SignUpView.types.ts +58 -0
  279. package/src/views/SignUpView/icons.tsx +71 -0
  280. package/src/views/SignUpView/index.ts +3 -0
  281. package/src/views/TableLayoutView/README.md +268 -0
  282. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
  283. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
  284. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
  285. package/src/views/TableLayoutView/icons.tsx +113 -0
  286. package/src/views/TableLayoutView/index.ts +6 -0
  287. package/storybook/main.ts +20 -0
  288. package/storybook/preview.tsx +84 -0
  289. package/storybook/vitest.setup.ts +7 -0
  290. package/tailwind.config.js +128 -0
@@ -0,0 +1,573 @@
1
+ # NavigationRailTypes
2
+
3
+ Barra de navegación lateral del sistema de diseño Siesa que permite dos modos visuales distintos: **collapsed** (solo iconos) y **expanded** (con labels y búsqueda).
4
+
5
+ ## 📋 Tabla de Contenidos
6
+
7
+ 1. [Descripción](#descripción)
8
+ 2. [Características](#características)
9
+ 3. [Especificaciones de Diseño](#especificaciones-de-diseño)
10
+ 4. [Uso](#uso)
11
+ 5. [Props](#props)
12
+ 6. [Estados](#estados)
13
+ 7. [Ejemplos](#ejemplos)
14
+ 8. [Accesibilidad](#accesibilidad)
15
+ 9. [Dark Mode](#dark-mode)
16
+ 10. [Referencias](#referencias)
17
+
18
+ ---
19
+
20
+ ## Descripción
21
+
22
+ El componente **NavigationRailTypes** es una barra de navegación lateral responsive que proporciona navegación vertical en aplicaciones de escritorio. Soporta dos modos de visualización que se pueden cambiar dinámicamente mediante el botón de collapse/expand.
23
+
24
+ ### Caso de Uso Principal
25
+
26
+ - **Navegación principal en aplicaciones desktop**: Menú lateral principal
27
+ - **Aplicaciones con múltiples módulos**: Agrupar opciones de navegación
28
+ - **Dashboard y sistemas administrativos**: Acceso rápido a secciones
29
+ - **Aplicaciones de desktop**: Similar a sidebars en VS Code, Figma, etc.
30
+
31
+ ---
32
+
33
+ ## Características
34
+
35
+ ✅ **Dos modos de visualización:**
36
+ - **Collapsed**: 80px width, solo iconos
37
+ - **Expanded**: 215px width, con labels y búsqueda integrada
38
+
39
+ ✅ **Items de navegación:**
40
+ - Iconos personalizables (16x16px)
41
+ - Labels descriptivos (solo en expanded)
42
+ - Estados: default, hover, active, disabled
43
+ - Badges de notificación (dot rojo o contador)
44
+
45
+ ✅ **Búsqueda integrada:**
46
+ - Solo visible en modo expanded
47
+ - Input con icono de búsqueda
48
+ - Placeholder "Buscar módulo"
49
+
50
+ ✅ **Footer con acciones:**
51
+ - Botón "Recientes" (clock icon)
52
+ - Botón collapse/expand con animación
53
+ - Divisores visuales
54
+
55
+ ✅ **Dark Mode:**
56
+ - Soporte completo para light/dark
57
+ - Colores adaptados automáticamente
58
+
59
+ ✅ **Accesibilidad:**
60
+ - Focus rings adaptativos
61
+ - ARIA labels en botones
62
+ - Navegación por teclado
63
+
64
+ ✅ **Animaciones:**
65
+ - Transición suave al collapse/expand
66
+ - Hover effects en items
67
+ - Rotación del chevron
68
+
69
+ ---
70
+
71
+ ## Especificaciones de Diseño
72
+
73
+ ### Dimensiones
74
+
75
+ | Propiedad | Collapsed | Expanded |
76
+ |-----------|-----------|----------|
77
+ | **Width** | 80px | 215px |
78
+ | **Height** | 900px | 900px |
79
+ | **Item Height** | Automático | Automático |
80
+ | **Border Radius** | N/A | 8px (items) |
81
+
82
+ ### Espaciado (Spacing)
83
+
84
+ | Elemento | Padding | Margin | Gap |
85
+ |----------|---------|--------|-----|
86
+ | **Item** (collapsed) | `px-4 py-1` | N/A | `gap-3` |
87
+ | **Item** (expanded) | `px-4 py-2` | N/A | `gap-3` |
88
+ | **Search** (expanded) | `px-3 py-3` | N/A | `gap-2` |
89
+ | **Footer** | `px-3` | N/A | `gap-3` |
90
+
91
+ ### Tipografía
92
+
93
+ | Elemento | Familia | Tamaño | Peso | Line Height |
94
+ |----------|---------|--------|------|-------------|
95
+ | **Label Item** | SiesaBT | 14px | Regular | 20px |
96
+ | **Button Label** | SiesaBT | 14px | Bold | 20px |
97
+ | **Placeholder** | Inter | 14px | Regular | 20px |
98
+
99
+ ### Colores (Light Mode)
100
+
101
+ | Elemento | Color | Hex |
102
+ |----------|-------|-----|
103
+ | **Background** | background-primary | #ffffff |
104
+ | **Border** | border-primary | #e4e4e7 |
105
+ | **Text** | content-primary | #18181b |
106
+ | **Icon** | content-secondary | #a1a1aa |
107
+ | **Icon Hover** | content-custom-primary | #0e79fd |
108
+ | **Active Bg** | background-custom-primary | #dbeefe |
109
+
110
+ ### Colores (Dark Mode)
111
+
112
+ | Elemento | Color | Hex |
113
+ |----------|-------|-----|
114
+ | **Background** | background-primary/dark | #09090b |
115
+ | **Border** | border-primary/dark | #3f3f46 |
116
+ | **Text** | content-primary/dark | #fafafa |
117
+ | **Icon** | content-secondary/dark | #a1a1aa |
118
+ | **Icon Hover** | content-custom-primary/dark | #bfe2fe |
119
+ | **Active Bg** | background-custom-primary/dark | #0e5ab0 |
120
+
121
+ ### Sombras
122
+
123
+ | Elemento | Sombra |
124
+ |----------|--------|
125
+ | **Search Button** | `shadow-button-inset` |
126
+ | **Search Input** | `shadow-sm` |
127
+ | **Items** | Ninguna |
128
+
129
+ ---
130
+
131
+ ## Uso
132
+
133
+ ### Importación
134
+
135
+ ```tsx
136
+ import { NavigationRailTypes } from '@/components/NavigationRailTypes';
137
+ import type { NavigationRailItem } from '@/components/NavigationRailTypes';
138
+ ```
139
+
140
+ ### Instalación de Dependencias
141
+
142
+ Este componente reutiliza:
143
+ - `Button` - Botones en footer
144
+ - `Input` - Input de búsqueda (input nativo mejorado)
145
+ - `Divider` - Líneas divisoras
146
+ - `DropdownItemCollapsible` - Items en modo expandido
147
+
148
+ Asegúrate de tener estos componentes instalados.
149
+
150
+ ---
151
+
152
+ ## Props
153
+
154
+ ### NavigationRailTypesProps
155
+
156
+ ```typescript
157
+ interface NavigationRailTypesProps {
158
+ /**
159
+ * Si el rail está colapsado (iconos solo) o expandido
160
+ * @default true
161
+ */
162
+ collapsed?: boolean;
163
+
164
+ /**
165
+ * Items de navegación a mostrar
166
+ * @default []
167
+ */
168
+ items?: NavigationRailItem[];
169
+
170
+ /**
171
+ * Si mostrar el botón "Recientes" en footer
172
+ * @default true
173
+ */
174
+ showRecentButton?: boolean;
175
+
176
+ /**
177
+ * Callback cuando collapsed cambia
178
+ */
179
+ onCollapsedChange?: (collapsed: boolean) => void;
180
+
181
+ /**
182
+ * Callback cuando se clickea un item
183
+ */
184
+ onItemClick?: (index: number, item: NavigationRailItem) => void;
185
+
186
+ /**
187
+ * Classes CSS adicionales
188
+ */
189
+ className?: string;
190
+ }
191
+ ```
192
+
193
+ ### NavigationRailItem
194
+
195
+ ```typescript
196
+ interface NavigationRailItem {
197
+ /**
198
+ * Identificador único
199
+ */
200
+ id: string;
201
+
202
+ /**
203
+ * Etiqueta del item
204
+ */
205
+ label: string;
206
+
207
+ /**
208
+ * Icono (16x16px recomendado)
209
+ */
210
+ icon: ReactNode;
211
+
212
+ /**
213
+ * Si está activo
214
+ * @default false
215
+ */
216
+ active?: boolean;
217
+
218
+ /**
219
+ * Si está deshabilitado
220
+ * @default false
221
+ */
222
+ disabled?: boolean;
223
+
224
+ /**
225
+ * Callback onClick
226
+ */
227
+ onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
228
+
229
+ /**
230
+ * URL para navegación
231
+ */
232
+ href?: string;
233
+
234
+ /**
235
+ * ARIA label para accesibilidad
236
+ */
237
+ ariaLabel?: string;
238
+
239
+ /**
240
+ * Badge de notificación (dot)
241
+ */
242
+ badge?: boolean;
243
+
244
+ /**
245
+ * Contador de notificaciones (99+ para >99)
246
+ */
247
+ badgeCount?: number;
248
+
249
+ /**
250
+ * Color del badge
251
+ * @default 'red'
252
+ */
253
+ badgeColor?: 'red' | 'blue' | 'green' | 'yellow' | 'orange';
254
+ }
255
+ ```
256
+
257
+ ---
258
+
259
+ ## Estados
260
+
261
+ ### Estado Default (No Interactuado)
262
+
263
+ ```
264
+ Collapsed:
265
+ - Icon color: content-secondary (#a1a1aa)
266
+ - Opacity: 100%
267
+ - Cursor: pointer
268
+
269
+ Expanded:
270
+ - Text color: content-primary (#18181b)
271
+ - Icon color: content-secondary (#a1a1aa)
272
+ - Background: transparent
273
+ - Opacity: 100%
274
+ ```
275
+
276
+ ### Estado Hover
277
+
278
+ ```
279
+ Collapsed:
280
+ - Icon color: content-custom-primary (#0e79fd)
281
+ - Opacity: 80%
282
+ - Scale: 1.05
283
+
284
+ Expanded:
285
+ - Background: background-custom-primary (#dbeefe)
286
+ - Text color: content-custom-primary (#0e79fd)
287
+ - Icon color: content-custom-primary (#0e79fd)
288
+ ```
289
+
290
+ ### Estado Active
291
+
292
+ ```
293
+ Collapsed:
294
+ - Icon color: content-custom-primary (#0e79fd)
295
+ - Background: Subtle overlay
296
+
297
+ Expanded:
298
+ - Background: background-custom-primary (#dbeefe)
299
+ - Text color: content-custom-primary (#0e79fd)
300
+ - Icon color: content-custom-primary (#0e79fd)
301
+ ```
302
+
303
+ ### Estado Disabled
304
+
305
+ ```
306
+ Collapsed & Expanded:
307
+ - Opacity: 50%
308
+ - Cursor: not-allowed
309
+ - Pointer events: none
310
+ ```
311
+
312
+ ### Estado Focus
313
+
314
+ ```
315
+ Collapsed & Expanded:
316
+ - Ring: 4px solid primary-custom-400 (#60b6fa)
317
+ - Ring offset: 2px background-primary (#ffffff)
318
+ - Outline: none
319
+ ```
320
+
321
+ ---
322
+
323
+ ## Ejemplos
324
+
325
+ ### Ejemplo Básico
326
+
327
+ ```tsx
328
+ import { NavigationRailTypes } from '@/components/NavigationRailTypes';
329
+ import { HomeIcon, UsersIcon, SettingsIcon } from '@heroicons/react/outline';
330
+
331
+ export function AppLayout() {
332
+ const [collapsed, setCollapsed] = useState(true);
333
+
334
+ const navItems = [
335
+ {
336
+ id: 'home',
337
+ label: 'Home',
338
+ icon: <HomeIcon className="size-4" />,
339
+ active: true,
340
+ },
341
+ {
342
+ id: 'users',
343
+ label: 'Users',
344
+ icon: <UsersIcon className="size-4" />,
345
+ },
346
+ {
347
+ id: 'settings',
348
+ label: 'Settings',
349
+ icon: <SettingsIcon className="size-4" />,
350
+ },
351
+ ];
352
+
353
+ return (
354
+ <div className="flex h-screen">
355
+ <NavigationRailTypes
356
+ collapsed={collapsed}
357
+ items={navItems}
358
+ onCollapsedChange={setCollapsed}
359
+ onItemClick={(index, item) => {
360
+ console.log('Navigated to:', item.id);
361
+ }}
362
+ />
363
+ <main className="flex-1 overflow-auto">
364
+ {/* Contenido principal */}
365
+ </main>
366
+ </div>
367
+ );
368
+ }
369
+ ```
370
+
371
+ ### Con Badges de Notificación
372
+
373
+ ```tsx
374
+ const navItems = [
375
+ {
376
+ id: 'messages',
377
+ label: 'Messages',
378
+ icon: <MessageIcon className="size-4" />,
379
+ badge: true, // Dot rojo simple
380
+ },
381
+ {
382
+ id: 'notifications',
383
+ label: 'Notifications',
384
+ icon: <BellIcon className="size-4" />,
385
+ badgeCount: 12, // Contador numérico
386
+ badgeColor: 'blue',
387
+ },
388
+ ];
389
+ ```
390
+
391
+ ### Con Items Deshabilitados
392
+
393
+ ```tsx
394
+ const navItems = [
395
+ {
396
+ id: 'premium',
397
+ label: 'Premium Features',
398
+ icon: <StarIcon className="size-4" />,
399
+ disabled: true, // No clickeable
400
+ },
401
+ ];
402
+ ```
403
+
404
+ ### Con Navegación Router
405
+
406
+ ```tsx
407
+ import { useNavigate } from 'react-router-dom';
408
+
409
+ export function Navigation() {
410
+ const navigate = useNavigate();
411
+
412
+ const navItems = [
413
+ {
414
+ id: 'dashboard',
415
+ label: 'Dashboard',
416
+ icon: <DashboardIcon className="size-4" />,
417
+ onClick: () => navigate('/dashboard'),
418
+ },
419
+ {
420
+ id: 'users',
421
+ label: 'Manage Users',
422
+ icon: <UsersIcon className="size-4" />,
423
+ onClick: () => navigate('/users'),
424
+ },
425
+ ];
426
+
427
+ return (
428
+ <NavigationRailTypes
429
+ items={navItems}
430
+ onItemClick={(_, item) => item.onClick?.({} as any)}
431
+ />
432
+ );
433
+ }
434
+ ```
435
+
436
+ ---
437
+
438
+ ## Accesibilidad
439
+
440
+ ### Features de Accesibilidad
441
+
442
+ ✅ **Focus Management:**
443
+ - Focus rings visibles (4px) en todos los items
444
+ - Focus visible en botones collapse/expand
445
+ - Orden tab lógico de arriba a abajo
446
+
447
+ ✅ **ARIA Attributes:**
448
+ - `aria-label` en botones sin texto visible (iconOnly)
449
+ - `role="button"` implícito en elementos clickeables
450
+ - `disabled` attribute para items deshabilitados
451
+
452
+ ✅ **Navegación por Teclado:**
453
+ - Tab/Shift+Tab para moverse entre items
454
+ - Enter/Space para activar items
455
+ - Escape para cerrar (si es popover)
456
+
457
+ ✅ **Colores y Contraste:**
458
+ - Ratio de contraste WCAG AA/AAA
459
+ - No depender solo del color para indicar estado
460
+ - Iconos con fallback a text
461
+
462
+ ✅ **Semántica:**
463
+ - Botones semánticos (`<button>`)
464
+ - Labels asociados a inputs
465
+ - Estructura lógica del DOM
466
+
467
+ ---
468
+
469
+ ## Dark Mode
470
+
471
+ El componente soporta dark mode automáticamente. Los colores se invierten cuando se activa:
472
+
473
+ ```tsx
474
+ <div className="dark">
475
+ <NavigationRailTypes {...props} />
476
+ </div>
477
+ ```
478
+
479
+ ### Colores en Dark Mode
480
+
481
+ | Light | Dark |
482
+ |-------|------|
483
+ | `#ffffff` bg | `#09090b` bg |
484
+ | `#18181b` text | `#fafafa` text |
485
+ | `#a1a1aa` icon | `#a1a1aa` icon |
486
+ | `#0e79fd` primary | `#bfe2fe` primary |
487
+ | `#e4e4e7` border | `#3f3f46` border |
488
+
489
+ ### Utilidades CSS para Dark Mode
490
+
491
+ El componente usa clases de dark mode nativas de Tailwind:
492
+
493
+ ```tsx
494
+ // Ejemplos en el código
495
+ className="dark:bg-background-primary"
496
+ className="dark:text-content-primary"
497
+ className="dark:border-border-primary"
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Referencias
503
+
504
+ - **Figma Design**: [NavigationRailTypes Node 6135-36219](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-36219&m=dev)
505
+ - **Sistema de Colores**: `docs/colors.md`
506
+ - **Sistema de Tipografía**: `docs/typography.md`
507
+ - **Sistema de Spacing**: `docs/spacing.md`
508
+ - **Sistema de Sombras**: `docs/shadows.md`
509
+ - **Componente Button**: `src/components/Button`
510
+ - **Componente DropdownItemCollapsible**: `src/components/DropdownItemCollapsible`
511
+ - **Componente Input**: `src/components/Input`
512
+ - **Componente Divider**: `src/components/Divider`
513
+
514
+ ---
515
+
516
+ ## Historial de Cambios
517
+
518
+ ### v1.0.0 (Inicial)
519
+
520
+ - ✨ Componente NavigationRailTypes creado
521
+ - ✨ Soporte para modo collapsed/expanded
522
+ - ✨ Badges de notificación
523
+ - ✨ Búsqueda integrada
524
+ - ✨ Dark mode completo
525
+ - ✨ Historias de Storybook
526
+ - ✨ Documentación completa
527
+
528
+ ---
529
+
530
+ ## Notas de Implementación
531
+
532
+ ### Reutilización de Componentes
533
+
534
+ Este componente reutiliza:
535
+
536
+ 1. **Button** - Para los botones en footer
537
+ 2. **Divider** - Para separadores visuales
538
+ 3. **DropdownItemCollapsible** - Para items en modo expandido
539
+ 4. **Input** - Mejorado con input nativo para búsqueda
540
+
541
+ ### Consideraciones de Performance
542
+
543
+ - Los items se renderizan conmigo un array `map()`
544
+ - No hay virtualization aún (500px altura para algunos browsers)
545
+ - Para 100+ items, considerar virtualización
546
+
547
+ ### Compatibilidad
548
+
549
+ - React 18+
550
+ - Tailwind CSS 3+
551
+ - Navegadores modernos (Chrome, Firefox, Safari, Edge)
552
+
553
+ ---
554
+
555
+ ## FAQ
556
+
557
+ **P: ¿Puedo personalizar el ancho del rail?**
558
+ R: Actualmente, el ancho está fijo (80px collapsed, 215px expanded). Para personalizar, modifica las clases `w-[80px]` y `w-[215px]` en el componente.
559
+
560
+ **P: ¿Cómo integro con React Router?**
561
+ R: Usa el callback `onItemClick` para navegar:
562
+ ```tsx
563
+ onItemClick={(_, item) => navigate(`/${item.id}`)}
564
+ ```
565
+
566
+ **P: ¿Puedo agregar más iconos?**
567
+ R: Sí, pasa cualquier ReactNode como prop `icon` en los items.
568
+
569
+ **P: ¿El rail es responsive para mobile?**
570
+ R: No actualmente. Para mobile, considera un dropdown o hamburger menu.
571
+
572
+ **P: ¿Puedo cambiar los colores?**
573
+ R: Sí, todos los colores usan tokens CSS del sistema. Modifica las clases Tailwind para personalizar.
@@ -0,0 +1,76 @@
1
+ import React from 'react';
2
+ // Importamos de 24/outline solo para el ClockIcon
3
+ import { ClockIcon as HeroClockOutline } from '@heroicons/react/24/outline';
4
+
5
+ // Importamos de 20/solid para los demás
6
+ import {
7
+ ChevronRightIcon as HeroChevronRight,
8
+ ChevronLeftIcon as HeroChevronLeft,
9
+ MagnifyingGlassIcon as HeroSearch,
10
+ HomeIcon as HeroHome,
11
+ UsersIcon as HeroUsers,
12
+ Cog6ToothIcon as HeroSettings,
13
+ } from '@heroicons/react/20/solid';
14
+
15
+ /**
16
+ * Props comunes para los iconos
17
+ */
18
+ interface IconProps {
19
+ className?: string;
20
+ }
21
+
22
+ /**
23
+ * Icono Chevron Right (apunta hacia la derecha)
24
+ * Usado en el botón de collapse
25
+ */
26
+ export const ChevronRightIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
27
+ <HeroChevronRight className={className} aria-hidden="true" />
28
+ );
29
+
30
+ /**
31
+ * Icono Chevron Left (apunta hacia la izquierda)
32
+ * Usado en el botón de expand
33
+ */
34
+ export const ChevronLeftIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
35
+ <HeroChevronLeft className={className} aria-hidden="true" />
36
+ );
37
+
38
+ /**
39
+ * Icono Clock (reloj) - Estilo OUTLINE 24
40
+ * Usado en el botón "Recientes"
41
+ */
42
+ export const ClockIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
43
+ <HeroClockOutline className={className} aria-hidden="true" />
44
+ );
45
+
46
+ /**
47
+ * Icono Magnifying Glass (búsqueda)
48
+ * Usado en el botón de búsqueda
49
+ */
50
+ export const MagnifyingGlassIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
51
+ <HeroSearch className={className} aria-hidden="true" />
52
+ );
53
+
54
+ /**
55
+ * Icono Home
56
+ * Ejemplo para items de navegación
57
+ */
58
+ export const HomeIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
59
+ <HeroHome className={className} aria-hidden="true" />
60
+ );
61
+
62
+ /**
63
+ * Icono Users
64
+ * Ejemplo para items de navegación
65
+ */
66
+ export const UsersIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
67
+ <HeroUsers className={className} aria-hidden="true" />
68
+ );
69
+
70
+ /**
71
+ * Icono Settings
72
+ * Ejemplo para items de navegación
73
+ */
74
+ export const SettingsIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
75
+ <HeroSettings className={className} aria-hidden="true" />
76
+ );
@@ -0,0 +1,7 @@
1
+ export { NavigationRailTypes } from './NavigationRailTypes';
2
+ export { default } from './NavigationRailTypes';
3
+ export type {
4
+ NavigationRailTypesProps,
5
+ NavigationRailItem,
6
+ NavigationRailCollapsibleItem,
7
+ } from './NavigationRailTypes.types';