siesa-ui-kit 1.0.2 → 1.0.3

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 (236) hide show
  1. package/package.json +2 -9
  2. package/claude/settings.local.json +0 -7
  3. package/docs/border-radius.md +0 -1261
  4. package/docs/colors.md +0 -832
  5. package/docs/dark-mode-guide.md +0 -1426
  6. package/docs/filters.md +0 -1243
  7. package/docs/icons.md +0 -1283
  8. package/docs/shadows.md +0 -1377
  9. package/docs/spacing.md +0 -1684
  10. package/docs/typography.md +0 -1268
  11. package/postcss.config.cjs +0 -6
  12. package/public/,Business Logo.png +0 -0
  13. package/public/.Siesa Logo.png +0 -0
  14. package/public/bg_siesa.png +0 -0
  15. package/public/siesa_logo_mobile.png +0 -0
  16. package/public/vite.svg +0 -1
  17. package/src/App.css +0 -42
  18. package/src/App.tsx +0 -8
  19. package/src/ButtonTest.tsx +0 -147
  20. package/src/assets/fonts/README.md +0 -261
  21. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  22. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  23. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  24. package/src/assets/react.svg +0 -1
  25. package/src/components/Alert/Alert.stories.tsx +0 -332
  26. package/src/components/Alert/Alert.tsx +0 -106
  27. package/src/components/Alert/Alert.types.ts +0 -54
  28. package/src/components/Avatar/Avatar.stories.tsx +0 -494
  29. package/src/components/Avatar/Avatar.tsx +0 -143
  30. package/src/components/Avatar/Avatar.types.ts +0 -53
  31. package/src/components/Badge/Badge.stories.tsx +0 -339
  32. package/src/components/Badge/Badge.tsx +0 -278
  33. package/src/components/Badge/Badge.types.ts +0 -58
  34. package/src/components/Button/Button.stories.tsx +0 -950
  35. package/src/components/Button/Button.tsx +0 -337
  36. package/src/components/Button/Button.types.ts +0 -180
  37. package/src/components/Button/icons.tsx +0 -87
  38. package/src/components/Button/index.ts +0 -3
  39. package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
  40. package/src/components/Checkbox/Checkbox.tsx +0 -208
  41. package/src/components/Checkbox/Checkbox.types.ts +0 -61
  42. package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
  43. package/src/components/DescriptionList/DescriptionList.tsx +0 -96
  44. package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
  45. package/src/components/Divider/Divider.stories.tsx +0 -263
  46. package/src/components/Divider/Divider.tsx +0 -80
  47. package/src/components/Divider/Divider.types.ts +0 -24
  48. package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
  49. package/src/components/Dropdown/Dropdown.tsx +0 -422
  50. package/src/components/Dropdown/Dropdown.types.ts +0 -146
  51. package/src/components/Dropdown/README.md +0 -266
  52. package/src/components/Dropdown/icons.tsx +0 -72
  53. package/src/components/Dropdown/index.ts +0 -8
  54. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
  55. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -287
  56. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -111
  57. package/src/components/DropdownItemCollapsible/README.md +0 -264
  58. package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
  59. package/src/components/DropdownItemCollapsible/index.ts +0 -12
  60. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
  61. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
  62. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
  63. package/src/components/DropdownItemHeading/README.md +0 -573
  64. package/src/components/DropdownItemHeading/icons.tsx +0 -125
  65. package/src/components/DropdownItemHeading/index.ts +0 -3
  66. package/src/components/Input/Input.stories.tsx +0 -583
  67. package/src/components/Input/Input.tsx +0 -204
  68. package/src/components/Input/Input.types.ts +0 -80
  69. package/src/components/Input/icons.tsx +0 -145
  70. package/src/components/Input/index.ts +0 -2
  71. package/src/components/LoginView/LoginView.stories.tsx +0 -148
  72. package/src/components/LoginView/LoginView.tsx +0 -426
  73. package/src/components/LoginView/LoginView.types.ts +0 -52
  74. package/src/components/LoginView/README.md +0 -396
  75. package/src/components/LoginView/icons.tsx +0 -85
  76. package/src/components/LoginView/index.ts +0 -3
  77. package/src/components/Navbar/Navbar.stories.tsx +0 -810
  78. package/src/components/Navbar/Navbar.tsx +0 -755
  79. package/src/components/Navbar/Navbar.types.ts +0 -219
  80. package/src/components/Navbar/README.md +0 -279
  81. package/src/components/Navbar/icons.tsx +0 -102
  82. package/src/components/Navbar/index.ts +0 -8
  83. package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
  84. package/src/components/NavigationBar/NavigationBar.tsx +0 -246
  85. package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
  86. package/src/components/NavigationBar/README.md +0 -469
  87. package/src/components/NavigationBar/index.ts +0 -2
  88. package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
  89. package/src/components/NavigationRail/NavigationRail.tsx +0 -418
  90. package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
  91. package/src/components/NavigationRail/README.md +0 -224
  92. package/src/components/NavigationRail/index.ts +0 -2
  93. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
  94. package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -313
  95. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -167
  96. package/src/components/NavigationRailItem/README.md +0 -476
  97. package/src/components/NavigationRailItem/index.ts +0 -2
  98. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
  99. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
  100. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
  101. package/src/components/NavigationRailPanel/README.md +0 -461
  102. package/src/components/NavigationRailPanel/index.ts +0 -6
  103. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -528
  104. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -378
  105. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -130
  106. package/src/components/NavigationRailTypes/README.md +0 -573
  107. package/src/components/NavigationRailTypes/icons.tsx +0 -141
  108. package/src/components/NavigationRailTypes/index.ts +0 -7
  109. package/src/components/Notification/Notification.stories.tsx +0 -513
  110. package/src/components/Notification/Notification.tsx +0 -145
  111. package/src/components/Notification/Notification.types.ts +0 -142
  112. package/src/components/Notification/README.md +0 -409
  113. package/src/components/Notification/index.ts +0 -3
  114. package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
  115. package/src/components/POSConvention/POSConvention.tsx +0 -129
  116. package/src/components/POSConvention/POSConvention.types.ts +0 -38
  117. package/src/components/POSConvention/README.md +0 -123
  118. package/src/components/POSConvention/icons.tsx +0 -45
  119. package/src/components/POSConvention/index.ts +0 -3
  120. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
  121. package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
  122. package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
  123. package/src/components/POSLocationButton/README.md +0 -253
  124. package/src/components/POSLocationButton/icons.tsx +0 -120
  125. package/src/components/POSLocationButton/index.ts +0 -14
  126. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
  127. package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
  128. package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
  129. package/src/components/POSNumberButton/README.md +0 -321
  130. package/src/components/POSNumberButton/index.ts +0 -3
  131. package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
  132. package/src/components/POSProductButton/POSProductButton.tsx +0 -152
  133. package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
  134. package/src/components/POSProductButton/README.md +0 -269
  135. package/src/components/POSProductButton/index.ts +0 -2
  136. package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
  137. package/src/components/POSProductCard/POSProductCard.tsx +0 -208
  138. package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
  139. package/src/components/POSProductCard/README.md +0 -179
  140. package/src/components/POSProductCard/icons.tsx +0 -26
  141. package/src/components/POSProductCard/index.ts +0 -2
  142. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
  143. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
  144. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
  145. package/src/components/POSProductSidebarItems/README.md +0 -198
  146. package/src/components/POSProductSidebarItems/icons.tsx +0 -21
  147. package/src/components/POSProductSidebarItems/index.ts +0 -3
  148. package/src/components/POSTable/POSTable.stories.tsx +0 -737
  149. package/src/components/POSTable/POSTable.tsx +0 -401
  150. package/src/components/POSTable/POSTable.types.ts +0 -83
  151. package/src/components/POSTable/README.md +0 -286
  152. package/src/components/POSTable/index.ts +0 -7
  153. package/src/components/Pagination/Pagination.stories.tsx +0 -555
  154. package/src/components/Pagination/Pagination.tsx +0 -286
  155. package/src/components/Pagination/Pagination.types.ts +0 -93
  156. package/src/components/Pagination/README.md +0 -298
  157. package/src/components/Pagination/icons.tsx +0 -47
  158. package/src/components/Pagination/index.ts +0 -3
  159. package/src/components/Quantity/Quantity.stories.tsx +0 -457
  160. package/src/components/Quantity/Quantity.tsx +0 -289
  161. package/src/components/Quantity/Quantity.types.ts +0 -70
  162. package/src/components/Radio/Radio.stories.tsx +0 -523
  163. package/src/components/Radio/Radio.tsx +0 -170
  164. package/src/components/Radio/Radio.types.ts +0 -122
  165. package/src/components/Select/README.md +0 -299
  166. package/src/components/Select/Select.stories.tsx +0 -673
  167. package/src/components/Select/Select.tsx +0 -454
  168. package/src/components/Select/Select.types.ts +0 -148
  169. package/src/components/Select/icons.tsx +0 -50
  170. package/src/components/Select/index.ts +0 -3
  171. package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
  172. package/src/components/SignUpView/SignUpView.tsx +0 -503
  173. package/src/components/SignUpView/SignUpView.types.ts +0 -58
  174. package/src/components/SignUpView/icons.tsx +0 -71
  175. package/src/components/SignUpView/index.ts +0 -3
  176. package/src/components/Switch/README.md +0 -112
  177. package/src/components/Switch/Switch.stories.tsx +0 -550
  178. package/src/components/Switch/Switch.tsx +0 -246
  179. package/src/components/Switch/Switch.types.ts +0 -67
  180. package/src/components/Table/README.md +0 -369
  181. package/src/components/Table/Table.stories.tsx +0 -805
  182. package/src/components/Table/Table.tsx +0 -688
  183. package/src/components/Table/Table.types.ts +0 -204
  184. package/src/components/Table/index.ts +0 -9
  185. package/src/components/Tabs/README.md +0 -201
  186. package/src/components/Tabs/Tabs.stories.tsx +0 -580
  187. package/src/components/Tabs/Tabs.tsx +0 -356
  188. package/src/components/Tabs/Tabs.types.ts +0 -127
  189. package/src/components/Tabs/icons.tsx +0 -129
  190. package/src/components/Tabs/index.ts +0 -11
  191. package/src/components/Textarea/Textarea.stories.tsx +0 -535
  192. package/src/components/Textarea/Textarea.tsx +0 -188
  193. package/src/components/Textarea/Textarea.types.ts +0 -54
  194. package/src/context/ThemeContext.tsx +0 -99
  195. package/src/context/index.ts +0 -1
  196. package/src/index.css +0 -29
  197. package/src/index.ts +0 -102
  198. package/src/main.tsx +0 -10
  199. package/src/views/ListView/ListView.stories.tsx +0 -329
  200. package/src/views/ListView/ListView.tsx +0 -570
  201. package/src/views/ListView/ListView.types.ts +0 -211
  202. package/src/views/ListView/icons.tsx +0 -282
  203. package/src/views/ListView/index.ts +0 -11
  204. package/src/views/LoginView/LoginView.stories.tsx +0 -148
  205. package/src/views/LoginView/LoginView.tsx +0 -426
  206. package/src/views/LoginView/LoginView.types.ts +0 -52
  207. package/src/views/LoginView/README.md +0 -396
  208. package/src/views/LoginView/icons.tsx +0 -85
  209. package/src/views/LoginView/index.ts +0 -3
  210. package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
  211. package/src/views/ProductsView/ProductsView.tsx +0 -480
  212. package/src/views/ProductsView/ProductsView.types.ts +0 -238
  213. package/src/views/ProductsView/README.md +0 -312
  214. package/src/views/ProductsView/icons.tsx +0 -38
  215. package/src/views/ProductsView/index.ts +0 -8
  216. package/src/views/RecoverPasswordView/README.md +0 -269
  217. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
  218. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
  219. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
  220. package/src/views/RecoverPasswordView/icons.tsx +0 -17
  221. package/src/views/RecoverPasswordView/index.ts +0 -2
  222. package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
  223. package/src/views/SignUpView/SignUpView.tsx +0 -503
  224. package/src/views/SignUpView/SignUpView.types.ts +0 -58
  225. package/src/views/SignUpView/icons.tsx +0 -71
  226. package/src/views/SignUpView/index.ts +0 -3
  227. package/src/views/TableLayoutView/README.md +0 -268
  228. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
  229. package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
  230. package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
  231. package/src/views/TableLayoutView/icons.tsx +0 -113
  232. package/src/views/TableLayoutView/index.ts +0 -6
  233. package/storybook/main.ts +0 -20
  234. package/storybook/preview.tsx +0 -84
  235. package/storybook/vitest.setup.ts +0 -7
  236. package/tailwind.config.js +0 -128
@@ -1,573 +0,0 @@
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.
@@ -1,141 +0,0 @@
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
- );
@@ -1,7 +0,0 @@
1
- export { NavigationRailTypes } from './NavigationRailTypes';
2
- export { default } from './NavigationRailTypes';
3
- export type {
4
- NavigationRailTypesProps,
5
- NavigationRailItem,
6
- NavigationRailCollapsibleItem,
7
- } from './NavigationRailTypes.types';