siesa-ui-kit 1.0.1 → 1.0.2

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 (297) hide show
  1. package/bin/install.cjs +502 -0
  2. package/bin/prepare-publish.cjs +28 -0
  3. package/bin/restore-folders.cjs +28 -0
  4. package/claude/settings.local.json +7 -0
  5. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts +101 -0
  6. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -0
  7. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +95 -0
  8. package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -0
  9. package/dist/components/DropdownItemCollapsible/icons.d.ts +19 -0
  10. package/dist/components/DropdownItemCollapsible/icons.d.ts.map +1 -0
  11. package/dist/components/DropdownItemCollapsible/index.d.ts +9 -0
  12. package/dist/components/DropdownItemCollapsible/index.d.ts.map +1 -0
  13. package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts +75 -0
  14. package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts.map +1 -0
  15. package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts +85 -0
  16. package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts.map +1 -0
  17. package/dist/components/DropdownItemHeading/icons.d.ts +48 -0
  18. package/dist/components/DropdownItemHeading/icons.d.ts.map +1 -0
  19. package/dist/components/DropdownItemHeading/index.d.ts +4 -0
  20. package/dist/components/DropdownItemHeading/index.d.ts.map +1 -0
  21. package/dist/components/LoginView/LoginView.d.ts +36 -0
  22. package/dist/components/LoginView/LoginView.d.ts.map +1 -0
  23. package/dist/components/LoginView/LoginView.types.d.ts +46 -0
  24. package/dist/components/LoginView/LoginView.types.d.ts.map +1 -0
  25. package/dist/components/LoginView/icons.d.ts +18 -0
  26. package/dist/components/LoginView/icons.d.ts.map +1 -0
  27. package/dist/components/LoginView/index.d.ts +4 -0
  28. package/dist/components/LoginView/index.d.ts.map +1 -0
  29. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts +90 -0
  30. package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -0
  31. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +155 -0
  32. package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -0
  33. package/dist/components/NavigationRailItem/index.d.ts +3 -0
  34. package/dist/components/NavigationRailItem/index.d.ts.map +1 -0
  35. package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts +124 -0
  36. package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts.map +1 -0
  37. package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts +154 -0
  38. package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts.map +1 -0
  39. package/dist/components/NavigationRailPanel/index.d.ts +3 -0
  40. package/dist/components/NavigationRailPanel/index.d.ts.map +1 -0
  41. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts +99 -0
  42. package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -0
  43. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +111 -0
  44. package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -0
  45. package/dist/components/NavigationRailTypes/icons.d.ts +58 -0
  46. package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -0
  47. package/dist/components/NavigationRailTypes/index.d.ts +4 -0
  48. package/dist/components/NavigationRailTypes/index.d.ts.map +1 -0
  49. package/dist/components/SignUpView/SignUpView.d.ts +38 -0
  50. package/dist/components/SignUpView/SignUpView.d.ts.map +1 -0
  51. package/dist/components/SignUpView/SignUpView.types.d.ts +51 -0
  52. package/dist/components/SignUpView/SignUpView.types.d.ts.map +1 -0
  53. package/dist/components/SignUpView/icons.d.ts +18 -0
  54. package/dist/components/SignUpView/icons.d.ts.map +1 -0
  55. package/dist/components/SignUpView/index.d.ts +4 -0
  56. package/dist/components/SignUpView/index.d.ts.map +1 -0
  57. package/dist/index.d.ts +30 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/siesa-ui-kit.cjs +906 -66
  60. package/dist/siesa-ui-kit.cjs.map +1 -1
  61. package/dist/siesa-ui-kit.mjs +3547 -411
  62. package/dist/siesa-ui-kit.mjs.map +1 -1
  63. package/docs/border-radius.md +1261 -0
  64. package/docs/colors.md +832 -0
  65. package/docs/dark-mode-guide.md +1426 -0
  66. package/docs/filters.md +1243 -0
  67. package/docs/icons.md +1283 -0
  68. package/docs/shadows.md +1377 -0
  69. package/docs/spacing.md +1684 -0
  70. package/docs/typography.md +1268 -0
  71. package/package.json +21 -3
  72. package/postcss.config.cjs +6 -0
  73. package/public/,Business Logo.png +0 -0
  74. package/public/.Siesa Logo.png +0 -0
  75. package/public/bg_siesa.png +0 -0
  76. package/public/siesa_logo_mobile.png +0 -0
  77. package/public/vite.svg +1 -0
  78. package/src/App.css +42 -0
  79. package/src/App.tsx +8 -0
  80. package/src/ButtonTest.tsx +147 -0
  81. package/src/assets/fonts/README.md +261 -0
  82. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  83. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  84. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  85. package/src/assets/react.svg +1 -0
  86. package/src/components/Alert/Alert.stories.tsx +332 -0
  87. package/src/components/Alert/Alert.tsx +106 -0
  88. package/src/components/Alert/Alert.types.ts +54 -0
  89. package/src/components/Avatar/Avatar.stories.tsx +494 -0
  90. package/src/components/Avatar/Avatar.tsx +143 -0
  91. package/src/components/Avatar/Avatar.types.ts +53 -0
  92. package/src/components/Badge/Badge.stories.tsx +339 -0
  93. package/src/components/Badge/Badge.tsx +278 -0
  94. package/src/components/Badge/Badge.types.ts +58 -0
  95. package/src/components/Button/Button.stories.tsx +950 -0
  96. package/src/components/Button/Button.tsx +337 -0
  97. package/src/components/Button/Button.types.ts +180 -0
  98. package/src/components/Button/icons.tsx +87 -0
  99. package/src/components/Button/index.ts +3 -0
  100. package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
  101. package/src/components/Checkbox/Checkbox.tsx +208 -0
  102. package/src/components/Checkbox/Checkbox.types.ts +61 -0
  103. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
  104. package/src/components/DescriptionList/DescriptionList.tsx +96 -0
  105. package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
  106. package/src/components/Divider/Divider.stories.tsx +263 -0
  107. package/src/components/Divider/Divider.tsx +80 -0
  108. package/src/components/Divider/Divider.types.ts +24 -0
  109. package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
  110. package/src/components/Dropdown/Dropdown.tsx +422 -0
  111. package/src/components/Dropdown/Dropdown.types.ts +146 -0
  112. package/src/components/Dropdown/README.md +266 -0
  113. package/src/components/Dropdown/icons.tsx +72 -0
  114. package/src/components/Dropdown/index.ts +8 -0
  115. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
  116. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +287 -0
  117. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +111 -0
  118. package/src/components/DropdownItemCollapsible/README.md +264 -0
  119. package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
  120. package/src/components/DropdownItemCollapsible/index.ts +12 -0
  121. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
  122. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
  123. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
  124. package/src/components/DropdownItemHeading/README.md +573 -0
  125. package/src/components/DropdownItemHeading/icons.tsx +125 -0
  126. package/src/components/DropdownItemHeading/index.ts +3 -0
  127. package/src/components/Input/Input.stories.tsx +583 -0
  128. package/src/components/Input/Input.tsx +204 -0
  129. package/src/components/Input/Input.types.ts +80 -0
  130. package/src/components/Input/icons.tsx +145 -0
  131. package/src/components/Input/index.ts +2 -0
  132. package/src/components/LoginView/LoginView.stories.tsx +148 -0
  133. package/src/components/LoginView/LoginView.tsx +426 -0
  134. package/src/components/LoginView/LoginView.types.ts +52 -0
  135. package/src/components/LoginView/README.md +396 -0
  136. package/src/components/LoginView/icons.tsx +85 -0
  137. package/src/components/LoginView/index.ts +3 -0
  138. package/src/components/Navbar/Navbar.stories.tsx +810 -0
  139. package/src/components/Navbar/Navbar.tsx +755 -0
  140. package/src/components/Navbar/Navbar.types.ts +219 -0
  141. package/src/components/Navbar/README.md +279 -0
  142. package/src/components/Navbar/icons.tsx +102 -0
  143. package/src/components/Navbar/index.ts +8 -0
  144. package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
  145. package/src/components/NavigationBar/NavigationBar.tsx +246 -0
  146. package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
  147. package/src/components/NavigationBar/README.md +469 -0
  148. package/src/components/NavigationBar/index.ts +2 -0
  149. package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
  150. package/src/components/NavigationRail/NavigationRail.tsx +418 -0
  151. package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
  152. package/src/components/NavigationRail/README.md +224 -0
  153. package/src/components/NavigationRail/index.ts +2 -0
  154. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -0
  155. package/src/components/NavigationRailItem/NavigationRailItem.tsx +313 -0
  156. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +167 -0
  157. package/src/components/NavigationRailItem/README.md +476 -0
  158. package/src/components/NavigationRailItem/index.ts +2 -0
  159. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
  160. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
  161. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
  162. package/src/components/NavigationRailPanel/README.md +461 -0
  163. package/src/components/NavigationRailPanel/index.ts +6 -0
  164. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +528 -0
  165. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +378 -0
  166. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +130 -0
  167. package/src/components/NavigationRailTypes/README.md +573 -0
  168. package/src/components/NavigationRailTypes/icons.tsx +141 -0
  169. package/src/components/NavigationRailTypes/index.ts +7 -0
  170. package/src/components/Notification/Notification.stories.tsx +513 -0
  171. package/src/components/Notification/Notification.tsx +145 -0
  172. package/src/components/Notification/Notification.types.ts +142 -0
  173. package/src/components/Notification/README.md +409 -0
  174. package/src/components/Notification/index.ts +3 -0
  175. package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
  176. package/src/components/POSConvention/POSConvention.tsx +129 -0
  177. package/src/components/POSConvention/POSConvention.types.ts +38 -0
  178. package/src/components/POSConvention/README.md +123 -0
  179. package/src/components/POSConvention/icons.tsx +45 -0
  180. package/src/components/POSConvention/index.ts +3 -0
  181. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
  182. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
  183. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
  184. package/src/components/POSLocationButton/README.md +253 -0
  185. package/src/components/POSLocationButton/icons.tsx +120 -0
  186. package/src/components/POSLocationButton/index.ts +14 -0
  187. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
  188. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
  189. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
  190. package/src/components/POSNumberButton/README.md +321 -0
  191. package/src/components/POSNumberButton/index.ts +3 -0
  192. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
  193. package/src/components/POSProductButton/POSProductButton.tsx +152 -0
  194. package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
  195. package/src/components/POSProductButton/README.md +269 -0
  196. package/src/components/POSProductButton/index.ts +2 -0
  197. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
  198. package/src/components/POSProductCard/POSProductCard.tsx +208 -0
  199. package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
  200. package/src/components/POSProductCard/README.md +179 -0
  201. package/src/components/POSProductCard/icons.tsx +26 -0
  202. package/src/components/POSProductCard/index.ts +2 -0
  203. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
  204. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
  205. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
  206. package/src/components/POSProductSidebarItems/README.md +198 -0
  207. package/src/components/POSProductSidebarItems/icons.tsx +21 -0
  208. package/src/components/POSProductSidebarItems/index.ts +3 -0
  209. package/src/components/POSTable/POSTable.stories.tsx +737 -0
  210. package/src/components/POSTable/POSTable.tsx +401 -0
  211. package/src/components/POSTable/POSTable.types.ts +83 -0
  212. package/src/components/POSTable/README.md +286 -0
  213. package/src/components/POSTable/index.ts +7 -0
  214. package/src/components/Pagination/Pagination.stories.tsx +555 -0
  215. package/src/components/Pagination/Pagination.tsx +286 -0
  216. package/src/components/Pagination/Pagination.types.ts +93 -0
  217. package/src/components/Pagination/README.md +298 -0
  218. package/src/components/Pagination/icons.tsx +47 -0
  219. package/src/components/Pagination/index.ts +3 -0
  220. package/src/components/Quantity/Quantity.stories.tsx +457 -0
  221. package/src/components/Quantity/Quantity.tsx +289 -0
  222. package/src/components/Quantity/Quantity.types.ts +70 -0
  223. package/src/components/Radio/Radio.stories.tsx +523 -0
  224. package/src/components/Radio/Radio.tsx +170 -0
  225. package/src/components/Radio/Radio.types.ts +122 -0
  226. package/src/components/Select/README.md +299 -0
  227. package/src/components/Select/Select.stories.tsx +673 -0
  228. package/src/components/Select/Select.tsx +454 -0
  229. package/src/components/Select/Select.types.ts +148 -0
  230. package/src/components/Select/icons.tsx +50 -0
  231. package/src/components/Select/index.ts +3 -0
  232. package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
  233. package/src/components/SignUpView/SignUpView.tsx +503 -0
  234. package/src/components/SignUpView/SignUpView.types.ts +58 -0
  235. package/src/components/SignUpView/icons.tsx +71 -0
  236. package/src/components/SignUpView/index.ts +3 -0
  237. package/src/components/Switch/README.md +112 -0
  238. package/src/components/Switch/Switch.stories.tsx +550 -0
  239. package/src/components/Switch/Switch.tsx +246 -0
  240. package/src/components/Switch/Switch.types.ts +67 -0
  241. package/src/components/Table/README.md +369 -0
  242. package/src/components/Table/Table.stories.tsx +805 -0
  243. package/src/components/Table/Table.tsx +688 -0
  244. package/src/components/Table/Table.types.ts +204 -0
  245. package/src/components/Table/index.ts +9 -0
  246. package/src/components/Tabs/README.md +201 -0
  247. package/src/components/Tabs/Tabs.stories.tsx +580 -0
  248. package/src/components/Tabs/Tabs.tsx +356 -0
  249. package/src/components/Tabs/Tabs.types.ts +127 -0
  250. package/src/components/Tabs/icons.tsx +129 -0
  251. package/src/components/Tabs/index.ts +11 -0
  252. package/src/components/Textarea/Textarea.stories.tsx +535 -0
  253. package/src/components/Textarea/Textarea.tsx +188 -0
  254. package/src/components/Textarea/Textarea.types.ts +54 -0
  255. package/src/context/ThemeContext.tsx +99 -0
  256. package/src/context/index.ts +1 -0
  257. package/src/index.css +29 -0
  258. package/src/index.ts +102 -0
  259. package/src/main.tsx +10 -0
  260. package/src/views/ListView/ListView.stories.tsx +329 -0
  261. package/src/views/ListView/ListView.tsx +570 -0
  262. package/src/views/ListView/ListView.types.ts +211 -0
  263. package/src/views/ListView/icons.tsx +282 -0
  264. package/src/views/ListView/index.ts +11 -0
  265. package/src/views/LoginView/LoginView.stories.tsx +148 -0
  266. package/src/views/LoginView/LoginView.tsx +426 -0
  267. package/src/views/LoginView/LoginView.types.ts +52 -0
  268. package/src/views/LoginView/README.md +396 -0
  269. package/src/views/LoginView/icons.tsx +85 -0
  270. package/src/views/LoginView/index.ts +3 -0
  271. package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
  272. package/src/views/ProductsView/ProductsView.tsx +480 -0
  273. package/src/views/ProductsView/ProductsView.types.ts +238 -0
  274. package/src/views/ProductsView/README.md +312 -0
  275. package/src/views/ProductsView/icons.tsx +38 -0
  276. package/src/views/ProductsView/index.ts +8 -0
  277. package/src/views/RecoverPasswordView/README.md +269 -0
  278. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
  279. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
  280. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
  281. package/src/views/RecoverPasswordView/icons.tsx +17 -0
  282. package/src/views/RecoverPasswordView/index.ts +2 -0
  283. package/src/views/SignUpView/SignUpView.stories.tsx +129 -0
  284. package/src/views/SignUpView/SignUpView.tsx +503 -0
  285. package/src/views/SignUpView/SignUpView.types.ts +58 -0
  286. package/src/views/SignUpView/icons.tsx +71 -0
  287. package/src/views/SignUpView/index.ts +3 -0
  288. package/src/views/TableLayoutView/README.md +268 -0
  289. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
  290. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
  291. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
  292. package/src/views/TableLayoutView/icons.tsx +113 -0
  293. package/src/views/TableLayoutView/index.ts +6 -0
  294. package/storybook/main.ts +20 -0
  295. package/storybook/preview.tsx +84 -0
  296. package/storybook/vitest.setup.ts +7 -0
  297. 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,141 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * Icono Chevron Right (apunta hacia la derecha)
5
+ * Usado en el botón de collapse
6
+ * Tamaño recomendado: 16x16px
7
+ */
8
+ export const ChevronRightIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
9
+ <svg
10
+ viewBox="0 0 24 24"
11
+ fill="none"
12
+ stroke="currentColor"
13
+ strokeWidth="2"
14
+ strokeLinecap="round"
15
+ strokeLinejoin="round"
16
+ className={className}
17
+ >
18
+ <polyline points="9 18 15 12 9 6"></polyline>
19
+ </svg>
20
+ );
21
+
22
+ /**
23
+ * Icono Chevron Left (apunta hacia la izquierda)
24
+ * Usado en el botón de expand
25
+ * Tamaño recomendado: 16x16px
26
+ */
27
+ export const ChevronLeftIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
28
+ <svg
29
+ viewBox="0 0 24 24"
30
+ fill="none"
31
+ stroke="currentColor"
32
+ strokeWidth="2"
33
+ strokeLinecap="round"
34
+ strokeLinejoin="round"
35
+ className={className}
36
+ >
37
+ <polyline points="15 18 9 12 15 6"></polyline>
38
+ </svg>
39
+ );
40
+
41
+ /**
42
+ * Icono Clock (reloj)
43
+ * Usado en el botón "Recientes"
44
+ * Tamaño recomendado: 16x16px
45
+ */
46
+ export const ClockIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
47
+ <svg
48
+ viewBox="0 0 24 24"
49
+ fill="none"
50
+ stroke="currentColor"
51
+ strokeWidth="2"
52
+ strokeLinecap="round"
53
+ strokeLinejoin="round"
54
+ className={className}
55
+ >
56
+ <circle cx="12" cy="12" r="10"></circle>
57
+ <polyline points="12 6 12 12 16 14"></polyline>
58
+ </svg>
59
+ );
60
+
61
+ /**
62
+ * Icono Magnifying Glass (búsqueda)
63
+ * Usado en el botón de búsqueda
64
+ * Tamaño recomendado: 16x16px
65
+ */
66
+ export const MagnifyingGlassIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
67
+ <svg
68
+ viewBox="0 0 24 24"
69
+ fill="none"
70
+ stroke="currentColor"
71
+ strokeWidth="2"
72
+ strokeLinecap="round"
73
+ strokeLinejoin="round"
74
+ className={className}
75
+ >
76
+ <circle cx="11" cy="11" r="8"></circle>
77
+ <path d="m21 21-4.35-4.35"></path>
78
+ </svg>
79
+ );
80
+
81
+ /**
82
+ * Icono Home
83
+ * Ejemplo para items de navegación
84
+ * Tamaño recomendado: 16x16px
85
+ */
86
+ export const HomeIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
87
+ <svg
88
+ viewBox="0 0 24 24"
89
+ fill="none"
90
+ stroke="currentColor"
91
+ strokeWidth="2"
92
+ strokeLinecap="round"
93
+ strokeLinejoin="round"
94
+ className={className}
95
+ >
96
+ <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
97
+ <polyline points="9 22 9 12 15 12 15 22"></polyline>
98
+ </svg>
99
+ );
100
+
101
+ /**
102
+ * Icono Users
103
+ * Ejemplo para items de navegación
104
+ * Tamaño recomendado: 16x16px
105
+ */
106
+ export const UsersIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
107
+ <svg
108
+ viewBox="0 0 24 24"
109
+ fill="none"
110
+ stroke="currentColor"
111
+ strokeWidth="2"
112
+ strokeLinecap="round"
113
+ strokeLinejoin="round"
114
+ className={className}
115
+ >
116
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
117
+ <circle cx="9" cy="7" r="4"></circle>
118
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
119
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
120
+ </svg>
121
+ );
122
+
123
+ /**
124
+ * Icono Settings
125
+ * Ejemplo para items de navegación
126
+ * Tamaño recomendado: 16x16px
127
+ */
128
+ export const SettingsIcon: React.FC<{ className?: string }> = ({ className = 'size-4' }) => (
129
+ <svg
130
+ viewBox="0 0 24 24"
131
+ fill="none"
132
+ stroke="currentColor"
133
+ strokeWidth="2"
134
+ strokeLinecap="round"
135
+ strokeLinejoin="round"
136
+ className={className}
137
+ >
138
+ <circle cx="12" cy="12" r="3"></circle>
139
+ <path d="M12 1v6m0 6v6M4.22 4.22l4.24 4.24m3.08 3.08l4.24 4.24M1 12h6m6 0h6m-2.78-7.78l-4.24 4.24m-3.08 3.08l-4.24 4.24"></path>
140
+ </svg>
141
+ );
@@ -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';