siesa-ui-kit 1.0.2 → 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 (189) 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 +67 -2
  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/icons.md +12 -31
  46. package/package.json +111 -110
  47. package/src/components/Avatar/Avatar.stories.tsx +494 -494
  48. package/src/components/Button/Button.stories.tsx +950 -950
  49. package/src/components/Button/Button.tsx +337 -337
  50. package/src/components/Button/Button.types.ts +180 -180
  51. package/src/components/Button/icons.tsx +23 -62
  52. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
  53. package/src/components/Divider/Divider.stories.tsx +263 -263
  54. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -317
  55. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -287
  56. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -111
  57. package/src/components/DropdownItemCollapsible/README.md +264 -264
  58. package/src/components/DropdownItemCollapsible/icons.tsx +57 -57
  59. package/src/components/DropdownItemCollapsible/index.ts +12 -12
  60. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -386
  61. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -216
  62. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -93
  63. package/src/components/DropdownItemHeading/README.md +573 -573
  64. package/src/components/DropdownItemHeading/icons.tsx +125 -125
  65. package/src/components/DropdownItemHeading/index.ts +3 -3
  66. package/src/components/Input/Input.stories.tsx +583 -583
  67. package/src/components/LoginView/LoginView.stories.tsx +148 -148
  68. package/src/components/LoginView/LoginView.tsx +426 -426
  69. package/src/components/LoginView/LoginView.types.ts +52 -52
  70. package/src/components/LoginView/README.md +396 -396
  71. package/src/components/LoginView/icons.tsx +85 -85
  72. package/src/components/LoginView/index.ts +3 -3
  73. package/src/components/Navbar/Navbar.stories.tsx +810 -810
  74. package/src/components/Navbar/Navbar.tsx +755 -755
  75. package/src/components/Navbar/Navbar.types.ts +219 -219
  76. package/src/components/Navbar/README.md +279 -279
  77. package/src/components/Navbar/index.ts +8 -8
  78. package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
  79. package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
  80. package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
  81. package/src/components/NavigationRailCommercial/README.md +251 -0
  82. package/src/components/NavigationRailCommercial/icons.tsx +54 -0
  83. package/src/components/NavigationRailCommercial/index.ts +6 -0
  84. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -667
  85. package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -313
  86. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -167
  87. package/src/components/NavigationRailItem/README.md +476 -476
  88. package/src/components/NavigationRailItem/index.ts +2 -2
  89. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -462
  90. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -332
  91. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -178
  92. package/src/components/NavigationRailPanel/README.md +461 -461
  93. package/src/components/NavigationRailPanel/index.ts +6 -6
  94. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -528
  95. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -378
  96. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -130
  97. package/src/components/NavigationRailTypes/README.md +573 -573
  98. package/src/components/NavigationRailTypes/icons.tsx +76 -141
  99. package/src/components/NavigationRailTypes/index.ts +7 -7
  100. package/src/components/Notification/Notification.stories.tsx +513 -513
  101. package/src/components/Notification/Notification.tsx +145 -145
  102. package/src/components/Notification/Notification.types.ts +142 -142
  103. package/src/components/Notification/README.md +409 -409
  104. package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
  105. package/src/components/POSConvention/POSConvention.tsx +129 -129
  106. package/src/components/POSConvention/POSConvention.types.ts +38 -38
  107. package/src/components/POSConvention/README.md +123 -123
  108. package/src/components/POSConvention/icons.tsx +45 -45
  109. package/src/components/POSConvention/index.ts +3 -3
  110. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
  111. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
  112. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
  113. package/src/components/POSLocationButton/README.md +253 -253
  114. package/src/components/POSLocationButton/icons.tsx +120 -120
  115. package/src/components/POSLocationButton/index.ts +14 -14
  116. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
  117. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
  118. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
  119. package/src/components/POSNumberButton/README.md +321 -321
  120. package/src/components/POSNumberButton/index.ts +3 -3
  121. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
  122. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
  123. package/src/components/POSProductCard/POSProductCard.tsx +208 -208
  124. package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
  125. package/src/components/POSProductCard/README.md +179 -179
  126. package/src/components/POSProductCard/icons.tsx +26 -26
  127. package/src/components/POSProductCard/index.ts +2 -2
  128. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
  129. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
  130. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
  131. package/src/components/POSProductSidebarItems/README.md +198 -198
  132. package/src/components/POSProductSidebarItems/icons.tsx +21 -21
  133. package/src/components/POSProductSidebarItems/index.ts +3 -3
  134. package/src/components/POSTable/POSTable.stories.tsx +737 -737
  135. package/src/components/POSTable/POSTable.tsx +401 -401
  136. package/src/components/POSTable/README.md +286 -286
  137. package/src/components/Quantity/Quantity.stories.tsx +457 -457
  138. package/src/components/Radio/Radio.stories.tsx +523 -523
  139. package/src/components/Radio/Radio.tsx +1 -1
  140. package/src/components/Select/Select.stories.tsx +32 -0
  141. package/src/components/Select/Select.tsx +457 -454
  142. package/src/components/Select/icons.tsx +16 -41
  143. package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
  144. package/src/components/SignUpView/SignUpView.tsx +503 -503
  145. package/src/components/SignUpView/SignUpView.types.ts +58 -58
  146. package/src/components/SignUpView/icons.tsx +71 -71
  147. package/src/components/SignUpView/index.ts +3 -3
  148. package/src/components/Switch/README.md +112 -112
  149. package/src/components/Switch/Switch.stories.tsx +550 -550
  150. package/src/components/Switch/Switch.tsx +246 -246
  151. package/src/components/Switch/Switch.types.ts +67 -67
  152. package/src/components/Table/Table.stories.tsx +805 -805
  153. package/src/components/Tabs/README.md +201 -201
  154. package/src/components/Tabs/Tabs.stories.tsx +580 -580
  155. package/src/components/Tabs/Tabs.tsx +356 -356
  156. package/src/components/Tabs/Tabs.types.ts +127 -127
  157. package/src/components/Tabs/icons.tsx +129 -129
  158. package/src/components/Tabs/index.ts +11 -11
  159. package/src/components/Textarea/Textarea.stories.tsx +535 -535
  160. package/src/index.ts +133 -102
  161. package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
  162. package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
  163. package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
  164. package/src/views/LayoutCommercial/README.md +286 -0
  165. package/src/views/LayoutCommercial/index.ts +2 -0
  166. package/src/views/ListView/ListView.stories.tsx +329 -329
  167. package/src/views/ListView/ListView.tsx +570 -570
  168. package/src/views/ListView/ListView.types.ts +211 -211
  169. package/src/views/ListView/icons.tsx +282 -282
  170. package/src/views/ListView/index.ts +11 -11
  171. package/src/views/LoginView/LoginView.tsx +426 -426
  172. package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
  173. package/src/views/ProductsView/ProductsView.tsx +480 -480
  174. package/src/views/ProductsView/ProductsView.types.ts +238 -238
  175. package/src/views/ProductsView/README.md +312 -312
  176. package/src/views/ProductsView/icons.tsx +38 -38
  177. package/src/views/ProductsView/index.ts +8 -8
  178. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
  179. package/src/views/SignUpView/SignUpView.tsx +503 -503
  180. package/src/views/TableLayoutView/README.md +268 -268
  181. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
  182. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
  183. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
  184. package/src/views/TableLayoutView/icons.tsx +113 -113
  185. package/src/views/TableLayoutView/index.ts +6 -6
  186. package/storybook/main.ts +19 -19
  187. package/storybook/preview.tsx +84 -84
  188. package/storybook/vitest.setup.ts +6 -6
  189. package/tailwind.config.js +128 -128
@@ -1,461 +1,461 @@
1
- # NavigationRailPanel
2
-
3
- Panel de navegación vertical (rail) que puede contener múltiples secciones de items, búsqueda y encabezados. Se usa típicamente en aplicaciones con navegación compleja que requieren una estructura jerárquica.
4
-
5
- ## 📋 Tabla de Contenidos
6
-
7
- 1. [Descripción](#descripción)
8
- 2. [Características](#características)
9
- 3. [Props](#props)
10
- 4. [Estructura](#estructura)
11
- 5. [Ejemplos de Uso](#ejemplos-de-uso)
12
- 6. [Especificaciones de Figma](#especificaciones-de-figma)
13
- 7. [Colores y Dark Mode](#colores-y-dark-mode)
14
- 8. [Espaciado](#espaciado)
15
- 9. [Accesibilidad](#accesibilidad)
16
- 10. [Referencias](#referencias)
17
-
18
- ---
19
-
20
- ## Descripción
21
-
22
- El componente `NavigationRailPanel` es un contenedor de navegación vertical que organiza elementos en una estructura jerárquica. Está diseñado para uso en aplicaciones complejas que requieren navegación por categorías, búsqueda de items y menús expandibles.
23
-
24
- ### Casos de Uso
25
-
26
- - Aplicaciones con muchas opciones de navegación
27
- - Paneles de administración con menús colapsables
28
- - Sistemas de gestión con categorización
29
- - Aplicaciones POS con categorías de productos
30
- - Navegación de módulos en aplicaciones empresariales
31
-
32
- ---
33
-
34
- ## Características
35
-
36
- ✅ **Estructura Flexible**
37
- - Soporte para secciones con encabezados
38
- - Items simples y colapsables
39
- - Items anidados con indentación automática
40
-
41
- ✅ **Búsqueda Integrada**
42
- - Input de búsqueda con placeholder personalizable
43
- - Callbacks de cambio de valor
44
- - Controlable desde el padre
45
-
46
- ✅ **Encabezado Personalizable**
47
- - DropdownItemHeading reutilizado
48
- - Icono, label, descripción y acción
49
- - Callback para acción
50
-
51
- ✅ **Dark Mode Completo**
52
- - Todos los elementos inversos en dark mode
53
- - Colores adaptativos
54
- - Accesibilidad mantenida
55
-
56
- ✅ **Estados Visuales**
57
- - Hover, focus, active, disabled
58
- - Transiciones suaves
59
- - Focus rings adaptativos
60
-
61
- ✅ **Scroll**
62
- - El body es scrolleable
63
- - Encabezado y búsqueda fijos
64
- - Comportamiento nativo del navegador
65
-
66
- ✅ **Componentes Reutilizados**
67
- - `DropdownItemHeading` - Para el encabezado
68
- - `DropdownItemCollapsible` - Para items colapsables
69
- - `Input` - Para la búsqueda
70
- - `Divider` - Para separadores
71
-
72
- ---
73
-
74
- ## Props
75
-
76
- ### NavigationRailPanelProps
77
-
78
- ```typescript
79
- interface NavigationRailPanelProps {
80
- // Dimensiones
81
- height?: number | string; // Por defecto: 900
82
- width?: number | string; // Por defecto: 248
83
-
84
- // Encabezado
85
- showHeading?: boolean; // Por defecto: true
86
- heading?: {
87
- label: string;
88
- description?: string;
89
- showDescription?: boolean;
90
- iconName?: string;
91
- actionLabel?: string;
92
- showAction?: boolean;
93
- onActionClick?: () => void;
94
- };
95
-
96
- // Búsqueda
97
- showSearch?: boolean; // Por defecto: true
98
- search?: {
99
- placeholder?: string; // Por defecto: "Buscar módulo"
100
- value?: string;
101
- onChange?: (value: string) => void;
102
- showLabel?: boolean; // Por defecto: false
103
- showLink?: boolean; // Por defecto: true
104
- };
105
-
106
- // Contenido
107
- sections?: NavigationRailPanelSectionProps[];
108
- items?: NavigationRailPanelItemProps[];
109
-
110
- // Clases CSS
111
- className?: string;
112
- panelClassName?: string;
113
- }
114
- ```
115
-
116
- ### NavigationRailPanelSectionProps
117
-
118
- ```typescript
119
- interface NavigationRailPanelSectionProps {
120
- heading?: string; // Encabezado de la sección
121
- items: NavigationRailPanelItemProps[];
122
- showDivider?: boolean; // Por defecto: true
123
- className?: string;
124
- }
125
- ```
126
-
127
- ### NavigationRailPanelItemProps
128
-
129
- ```typescript
130
- interface NavigationRailPanelItemProps {
131
- label: string; // Texto del item
132
- icon?: ReactNode; // Icono opcional
133
- isCollapsible?: boolean; // Por defecto: false
134
- children?: DropdownItemCollapsibleChildProps[];
135
- defaultOpen?: boolean; // Por defecto: false
136
- disabled?: boolean; // Por defecto: false
137
- onClick?: (e: React.MouseEvent) => void;
138
- onOpenChange?: (open: boolean) => void;
139
- className?: string;
140
- }
141
- ```
142
-
143
- ---
144
-
145
- ## Estructura
146
-
147
- ### Layout Principal
148
-
149
- ```
150
- ┌─────────────────────────┐
151
- │ Encabezado (Opcional) │ <- DropdownItemHeading
152
- ├─────────────────────────┤
153
- │ Búsqueda (Opcional) │ <- Input
154
- ├─────────────────────────┤
155
- │ Body (Scrolleable) │
156
- │ ┌─────────────────────┐ │
157
- │ │ Section Heading │ │
158
- │ │ Item 1 (Simple) │ │
159
- │ │ Item 2 (Collapsible)│
160
- │ │ ├─ Sub Item 1 │ │
161
- │ │ └─ Sub Item 2 │ │
162
- │ │ --- │ │
163
- │ │ Section Heading │ │
164
- │ │ Item 3 │ │
165
- │ │ Item 4 │ │
166
- │ └─────────────────────┘ │
167
- └─────────────────────────┘
168
- ```
169
-
170
- ### Especificaciones
171
-
172
- | Elemento | Ancho | Altura | Padding | Border Radius |
173
- |----------|-------|--------|---------|---------------|
174
- | Panel | 248px | Variable | 12px | 0px |
175
- | Encabezado | 224px | Auto | 8v, 16h | 8px |
176
- | Búsqueda | 224px | 40px | 8v, 16h | 6px |
177
- | Item | 224px | 32px | 8v, 16p | 8px |
178
- | Section Heading | 224px | Auto | 12t, 4b | 0px |
179
-
180
- ---
181
-
182
- ## Ejemplos de Uso
183
-
184
- ### Ejemplo Simple con Secciones
185
-
186
- ```tsx
187
- import { NavigationRailPanel } from '@/components/NavigationRailPanel';
188
-
189
- export function Dashboard() {
190
- return (
191
- <NavigationRailPanel
192
- height={900}
193
- showHeading={true}
194
- heading={{
195
- label: 'Settings',
196
- description: 'Configure your preferences',
197
- iconName: 'cog-6-tooth',
198
- }}
199
- showSearch={true}
200
- sections={[
201
- {
202
- heading: 'NAVIGATION',
203
- items: [
204
- { label: 'Dashboard', isCollapsible: false },
205
- { label: 'Analytics', isCollapsible: false },
206
- ],
207
- },
208
- {
209
- heading: 'MANAGEMENT',
210
- items: [
211
- {
212
- label: 'Users',
213
- isCollapsible: true,
214
- children: [
215
- { label: 'Active Users' },
216
- { label: 'Inactive Users' },
217
- ],
218
- },
219
- ],
220
- },
221
- ]}
222
- />
223
- );
224
- }
225
- ```
226
-
227
- ### Ejemplo sin Encabezado y Búsqueda
228
-
229
- ```tsx
230
- <NavigationRailPanel
231
- showHeading={false}
232
- showSearch={false}
233
- items={[
234
- { label: 'Dashboard' },
235
- { label: 'Users' },
236
- { label: 'Settings' },
237
- ]}
238
- />
239
- ```
240
-
241
- ### Ejemplo con Callbacks
242
-
243
- ```tsx
244
- <NavigationRailPanel
245
- heading={{
246
- label: 'Menu',
247
- actionLabel: 'Clear',
248
- showAction: true,
249
- onActionClick: () => console.log('Clear clicked'),
250
- }}
251
- search={{
252
- placeholder: 'Search...',
253
- onChange: (value) => console.log('Search:', value),
254
- }}
255
- items={[
256
- {
257
- label: 'Item 1',
258
- onClick: () => console.log('Item 1 clicked'),
259
- },
260
- {
261
- label: 'Category',
262
- isCollapsible: true,
263
- onOpenChange: (open) => console.log('Toggled:', open),
264
- children: [
265
- { label: 'Sub Item' },
266
- ],
267
- },
268
- ]}
269
- />
270
- ```
271
-
272
- ### Ejemplo con Items Deshabilitados
273
-
274
- ```tsx
275
- <NavigationRailPanel
276
- items={[
277
- { label: 'Active', disabled: false },
278
- { label: 'Disabled', disabled: true },
279
- {
280
- label: 'Category',
281
- isCollapsible: true,
282
- disabled: true,
283
- children: [
284
- { label: 'Sub Item 1' },
285
- { label: 'Sub Item 2', disabled: true },
286
- ],
287
- },
288
- ]}
289
- />
290
- ```
291
-
292
- ---
293
-
294
- ## Especificaciones de Figma
295
-
296
- - **Nodo**: 6134-34415
297
- - **URL**: https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6134-34415
298
-
299
- ### Dimensiones
300
-
301
- - Altura: 900px (variable)
302
- - Ancho: 248px (estándar)
303
- - Padding: 12px (todo)
304
- - Border radius: 0px (panel completo)
305
-
306
- ### Tipografía
307
-
308
- | Elemento | Escala | Font Weight | Size | Line Height |
309
- |----------|--------|------------|------|------------|
310
- | Encabezado | Label/Small | 700 (Bold) | 14px | 20px |
311
- | Descripción | Paragraph/Tiny | 400 | 12px | 16px |
312
- | Section Heading | Paragraph/Tiny | 400 | 12px | 16px |
313
- | Item | Paragraph/Small | 400 | 14px | 20px |
314
- | Acción | Paragraph/XXSmall | 400 | 10px | 12px |
315
-
316
- ---
317
-
318
- ## Colores y Dark Mode
319
-
320
- ### Light Mode
321
-
322
- | Elemento | Color | Hex |
323
- |----------|-------|-----|
324
- | Background | bg-primary | #ffffff |
325
- | Border | border-primary | #e4e4e7 |
326
- | Heading text | content-primary | #18181b |
327
- | Section heading | content-tertiary | #71717a |
328
- | Item text | content-primary | #18181b |
329
- | Icon | content-secondary | #a1a1aa |
330
- | Hover bg | background-custom-primary | #dbeefe |
331
-
332
- ### Dark Mode
333
-
334
- | Elemento | Color | Hex |
335
- |----------|-------|-----|
336
- | Background | dark:bg-zinc-900 | #18181b |
337
- | Border | dark:border-zinc-800 | #3f3f46 |
338
- | Heading text | dark:content-primary-dark | #fafafa |
339
- | Section heading | dark:content-tertiary-dark | #a1a1aa |
340
- | Item text | dark:content-primary-dark | #fafafa |
341
- | Icon | dark:content-secondary | #a1a1aa |
342
- | Hover bg | dark:bg-background-custom-primary-dark | #0e5ab0 |
343
-
344
- ### Tokens Utilizados
345
-
346
- - **Colores**: `content-primary`, `content-secondary`, `content-tertiary`, `bg-primary`, `border-primary`, `background-custom-primary`
347
- - **Dark Mode**: Se invierten automáticamente con prefijo `dark:`
348
- - **No hay colores hardcodeados**: Todo usa el sistema de tokens
349
-
350
- ---
351
-
352
- ## Espaciado
353
-
354
- | Elemento | Valor | Px |
355
- |----------|-------|-----|
356
- | Panel padding | 3 | 12px |
357
- | Item padding (h) | 4 | 16px |
358
- | Item padding (v) | 2 | 8px |
359
- | Gap entre items | 0.5 | 2px |
360
- | Gap entre elemento e icono | 3 | 12px |
361
- | Section heading pt | 3 | 12px |
362
- | Section heading pb | 1 | 4px |
363
- | Divider margin top | 3 | 12px |
364
-
365
- ---
366
-
367
- ## Accesibilidad
368
-
369
- ✅ **Focus Management**
370
- - Focus rings adaptativos de 4px
371
- - Offset de 2px en light mode
372
- - Offset transparente en dark mode
373
- - Color focus: primary-custom-400 (#60b6fa)
374
-
375
- ✅ **Keyboard Navigation**
376
- - Tab para navegar entre items
377
- - Enter/Space para activar
378
- - Arrow keys para items colapsables (heredado de DropdownItemCollapsible)
379
-
380
- ✅ **ARIA**
381
- - Roles semánticos (button, heading, menuitem)
382
- - aria-disabled para items deshabilitados
383
- - aria-expanded para items colapsables
384
-
385
- ✅ **Colores**
386
- - Contraste AA/AAA mantenido
387
- - No depender solo de color para indicar estado
388
- - Íconos con suficiente contraste
389
-
390
- ---
391
-
392
- ## Dark Mode
393
-
394
- El componente es **100% compatible con dark mode**:
395
-
396
- ```tsx
397
- // El componente detecta automáticamente el tema
398
- <NavigationRailPanel
399
- // Automáticamente invierte colores en dark mode
400
- showHeading={true}
401
- showSearch={true}
402
- />
403
- ```
404
-
405
- ### Cambios en Dark Mode
406
-
407
- 1. **Background**: white (#ffffff) → zinc-900 (#18181b)
408
- 2. **Border**: border-primary (#e4e4e7) → border-zinc-800 (#3f3f46)
409
- 3. **Text**: content-primary (#18181b) → content-primary-dark (#fafafa)
410
- 4. **Icon hover**: dbeefe (#dbeefe) → 0e5ab0 (#0e5ab0)
411
- 5. **Focus ring offset**: blanco → zinc-900
412
-
413
- ---
414
-
415
- ## Estados Visuales
416
-
417
- ### Default
418
- - Sin interacción
419
- - Colores base
420
-
421
- ### Hover
422
- - Background sutil: `background-custom-primary`
423
- - Cursor pointer
424
- - Transición suave
425
-
426
- ### Focus
427
- - Focus ring de 4px
428
- - Color: `primary-custom-400`
429
- - Offset: 2px (light) / transparent (dark)
430
-
431
- ### Active
432
- - Item colapsable expandido
433
- - Indicado por chevron rotado
434
-
435
- ### Disabled
436
- - Opacidad: 50%
437
- - Cursor: not-allowed
438
- - Sin hover/focus interactivo
439
-
440
- ---
441
-
442
- ## Referencias
443
-
444
- ### Documentación del Sistema
445
-
446
- - [@see docs/colors.md](../../../docs/colors.md) - Sistema de colores
447
- - [@see docs/typography.md](../../../docs/typography.md) - Sistema tipográfico
448
- - [@see docs/spacing.md](../../../docs/spacing.md) - Sistema de espaciado
449
- - [@see docs/shadows.md](../../../docs/shadows.md) - Sistema de sombras
450
-
451
- ### Componentes Relacionados
452
-
453
- - [@see ../DropdownItemHeading](../DropdownItemHeading) - Encabezado reutilizado
454
- - [@see ../DropdownItemCollapsible](../DropdownItemCollapsible) - Items colapsables
455
- - [@see ../Input](../Input) - Búsqueda
456
- - [@see ../Divider](../Divider) - Separadores
457
-
458
- ### Figma
459
-
460
- - [NavigationRailPanel en Figma](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6134-34415)
461
- - [Design System Documentation](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit)
1
+ # NavigationRailPanel
2
+
3
+ Panel de navegación vertical (rail) que puede contener múltiples secciones de items, búsqueda y encabezados. Se usa típicamente en aplicaciones con navegación compleja que requieren una estructura jerárquica.
4
+
5
+ ## 📋 Tabla de Contenidos
6
+
7
+ 1. [Descripción](#descripción)
8
+ 2. [Características](#características)
9
+ 3. [Props](#props)
10
+ 4. [Estructura](#estructura)
11
+ 5. [Ejemplos de Uso](#ejemplos-de-uso)
12
+ 6. [Especificaciones de Figma](#especificaciones-de-figma)
13
+ 7. [Colores y Dark Mode](#colores-y-dark-mode)
14
+ 8. [Espaciado](#espaciado)
15
+ 9. [Accesibilidad](#accesibilidad)
16
+ 10. [Referencias](#referencias)
17
+
18
+ ---
19
+
20
+ ## Descripción
21
+
22
+ El componente `NavigationRailPanel` es un contenedor de navegación vertical que organiza elementos en una estructura jerárquica. Está diseñado para uso en aplicaciones complejas que requieren navegación por categorías, búsqueda de items y menús expandibles.
23
+
24
+ ### Casos de Uso
25
+
26
+ - Aplicaciones con muchas opciones de navegación
27
+ - Paneles de administración con menús colapsables
28
+ - Sistemas de gestión con categorización
29
+ - Aplicaciones POS con categorías de productos
30
+ - Navegación de módulos en aplicaciones empresariales
31
+
32
+ ---
33
+
34
+ ## Características
35
+
36
+ ✅ **Estructura Flexible**
37
+ - Soporte para secciones con encabezados
38
+ - Items simples y colapsables
39
+ - Items anidados con indentación automática
40
+
41
+ ✅ **Búsqueda Integrada**
42
+ - Input de búsqueda con placeholder personalizable
43
+ - Callbacks de cambio de valor
44
+ - Controlable desde el padre
45
+
46
+ ✅ **Encabezado Personalizable**
47
+ - DropdownItemHeading reutilizado
48
+ - Icono, label, descripción y acción
49
+ - Callback para acción
50
+
51
+ ✅ **Dark Mode Completo**
52
+ - Todos los elementos inversos en dark mode
53
+ - Colores adaptativos
54
+ - Accesibilidad mantenida
55
+
56
+ ✅ **Estados Visuales**
57
+ - Hover, focus, active, disabled
58
+ - Transiciones suaves
59
+ - Focus rings adaptativos
60
+
61
+ ✅ **Scroll**
62
+ - El body es scrolleable
63
+ - Encabezado y búsqueda fijos
64
+ - Comportamiento nativo del navegador
65
+
66
+ ✅ **Componentes Reutilizados**
67
+ - `DropdownItemHeading` - Para el encabezado
68
+ - `DropdownItemCollapsible` - Para items colapsables
69
+ - `Input` - Para la búsqueda
70
+ - `Divider` - Para separadores
71
+
72
+ ---
73
+
74
+ ## Props
75
+
76
+ ### NavigationRailPanelProps
77
+
78
+ ```typescript
79
+ interface NavigationRailPanelProps {
80
+ // Dimensiones
81
+ height?: number | string; // Por defecto: 900
82
+ width?: number | string; // Por defecto: 248
83
+
84
+ // Encabezado
85
+ showHeading?: boolean; // Por defecto: true
86
+ heading?: {
87
+ label: string;
88
+ description?: string;
89
+ showDescription?: boolean;
90
+ iconName?: string;
91
+ actionLabel?: string;
92
+ showAction?: boolean;
93
+ onActionClick?: () => void;
94
+ };
95
+
96
+ // Búsqueda
97
+ showSearch?: boolean; // Por defecto: true
98
+ search?: {
99
+ placeholder?: string; // Por defecto: "Buscar módulo"
100
+ value?: string;
101
+ onChange?: (value: string) => void;
102
+ showLabel?: boolean; // Por defecto: false
103
+ showLink?: boolean; // Por defecto: true
104
+ };
105
+
106
+ // Contenido
107
+ sections?: NavigationRailPanelSectionProps[];
108
+ items?: NavigationRailPanelItemProps[];
109
+
110
+ // Clases CSS
111
+ className?: string;
112
+ panelClassName?: string;
113
+ }
114
+ ```
115
+
116
+ ### NavigationRailPanelSectionProps
117
+
118
+ ```typescript
119
+ interface NavigationRailPanelSectionProps {
120
+ heading?: string; // Encabezado de la sección
121
+ items: NavigationRailPanelItemProps[];
122
+ showDivider?: boolean; // Por defecto: true
123
+ className?: string;
124
+ }
125
+ ```
126
+
127
+ ### NavigationRailPanelItemProps
128
+
129
+ ```typescript
130
+ interface NavigationRailPanelItemProps {
131
+ label: string; // Texto del item
132
+ icon?: ReactNode; // Icono opcional
133
+ isCollapsible?: boolean; // Por defecto: false
134
+ children?: DropdownItemCollapsibleChildProps[];
135
+ defaultOpen?: boolean; // Por defecto: false
136
+ disabled?: boolean; // Por defecto: false
137
+ onClick?: (e: React.MouseEvent) => void;
138
+ onOpenChange?: (open: boolean) => void;
139
+ className?: string;
140
+ }
141
+ ```
142
+
143
+ ---
144
+
145
+ ## Estructura
146
+
147
+ ### Layout Principal
148
+
149
+ ```
150
+ ┌─────────────────────────┐
151
+ │ Encabezado (Opcional) │ <- DropdownItemHeading
152
+ ├─────────────────────────┤
153
+ │ Búsqueda (Opcional) │ <- Input
154
+ ├─────────────────────────┤
155
+ │ Body (Scrolleable) │
156
+ │ ┌─────────────────────┐ │
157
+ │ │ Section Heading │ │
158
+ │ │ Item 1 (Simple) │ │
159
+ │ │ Item 2 (Collapsible)│
160
+ │ │ ├─ Sub Item 1 │ │
161
+ │ │ └─ Sub Item 2 │ │
162
+ │ │ --- │ │
163
+ │ │ Section Heading │ │
164
+ │ │ Item 3 │ │
165
+ │ │ Item 4 │ │
166
+ │ └─────────────────────┘ │
167
+ └─────────────────────────┘
168
+ ```
169
+
170
+ ### Especificaciones
171
+
172
+ | Elemento | Ancho | Altura | Padding | Border Radius |
173
+ |----------|-------|--------|---------|---------------|
174
+ | Panel | 248px | Variable | 12px | 0px |
175
+ | Encabezado | 224px | Auto | 8v, 16h | 8px |
176
+ | Búsqueda | 224px | 40px | 8v, 16h | 6px |
177
+ | Item | 224px | 32px | 8v, 16p | 8px |
178
+ | Section Heading | 224px | Auto | 12t, 4b | 0px |
179
+
180
+ ---
181
+
182
+ ## Ejemplos de Uso
183
+
184
+ ### Ejemplo Simple con Secciones
185
+
186
+ ```tsx
187
+ import { NavigationRailPanel } from '@/components/NavigationRailPanel';
188
+
189
+ export function Dashboard() {
190
+ return (
191
+ <NavigationRailPanel
192
+ height={900}
193
+ showHeading={true}
194
+ heading={{
195
+ label: 'Settings',
196
+ description: 'Configure your preferences',
197
+ iconName: 'cog-6-tooth',
198
+ }}
199
+ showSearch={true}
200
+ sections={[
201
+ {
202
+ heading: 'NAVIGATION',
203
+ items: [
204
+ { label: 'Dashboard', isCollapsible: false },
205
+ { label: 'Analytics', isCollapsible: false },
206
+ ],
207
+ },
208
+ {
209
+ heading: 'MANAGEMENT',
210
+ items: [
211
+ {
212
+ label: 'Users',
213
+ isCollapsible: true,
214
+ children: [
215
+ { label: 'Active Users' },
216
+ { label: 'Inactive Users' },
217
+ ],
218
+ },
219
+ ],
220
+ },
221
+ ]}
222
+ />
223
+ );
224
+ }
225
+ ```
226
+
227
+ ### Ejemplo sin Encabezado y Búsqueda
228
+
229
+ ```tsx
230
+ <NavigationRailPanel
231
+ showHeading={false}
232
+ showSearch={false}
233
+ items={[
234
+ { label: 'Dashboard' },
235
+ { label: 'Users' },
236
+ { label: 'Settings' },
237
+ ]}
238
+ />
239
+ ```
240
+
241
+ ### Ejemplo con Callbacks
242
+
243
+ ```tsx
244
+ <NavigationRailPanel
245
+ heading={{
246
+ label: 'Menu',
247
+ actionLabel: 'Clear',
248
+ showAction: true,
249
+ onActionClick: () => console.log('Clear clicked'),
250
+ }}
251
+ search={{
252
+ placeholder: 'Search...',
253
+ onChange: (value) => console.log('Search:', value),
254
+ }}
255
+ items={[
256
+ {
257
+ label: 'Item 1',
258
+ onClick: () => console.log('Item 1 clicked'),
259
+ },
260
+ {
261
+ label: 'Category',
262
+ isCollapsible: true,
263
+ onOpenChange: (open) => console.log('Toggled:', open),
264
+ children: [
265
+ { label: 'Sub Item' },
266
+ ],
267
+ },
268
+ ]}
269
+ />
270
+ ```
271
+
272
+ ### Ejemplo con Items Deshabilitados
273
+
274
+ ```tsx
275
+ <NavigationRailPanel
276
+ items={[
277
+ { label: 'Active', disabled: false },
278
+ { label: 'Disabled', disabled: true },
279
+ {
280
+ label: 'Category',
281
+ isCollapsible: true,
282
+ disabled: true,
283
+ children: [
284
+ { label: 'Sub Item 1' },
285
+ { label: 'Sub Item 2', disabled: true },
286
+ ],
287
+ },
288
+ ]}
289
+ />
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Especificaciones de Figma
295
+
296
+ - **Nodo**: 6134-34415
297
+ - **URL**: https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6134-34415
298
+
299
+ ### Dimensiones
300
+
301
+ - Altura: 900px (variable)
302
+ - Ancho: 248px (estándar)
303
+ - Padding: 12px (todo)
304
+ - Border radius: 0px (panel completo)
305
+
306
+ ### Tipografía
307
+
308
+ | Elemento | Escala | Font Weight | Size | Line Height |
309
+ |----------|--------|------------|------|------------|
310
+ | Encabezado | Label/Small | 700 (Bold) | 14px | 20px |
311
+ | Descripción | Paragraph/Tiny | 400 | 12px | 16px |
312
+ | Section Heading | Paragraph/Tiny | 400 | 12px | 16px |
313
+ | Item | Paragraph/Small | 400 | 14px | 20px |
314
+ | Acción | Paragraph/XXSmall | 400 | 10px | 12px |
315
+
316
+ ---
317
+
318
+ ## Colores y Dark Mode
319
+
320
+ ### Light Mode
321
+
322
+ | Elemento | Color | Hex |
323
+ |----------|-------|-----|
324
+ | Background | bg-primary | #ffffff |
325
+ | Border | border-primary | #e4e4e7 |
326
+ | Heading text | content-primary | #18181b |
327
+ | Section heading | content-tertiary | #71717a |
328
+ | Item text | content-primary | #18181b |
329
+ | Icon | content-secondary | #a1a1aa |
330
+ | Hover bg | background-custom-primary | #dbeefe |
331
+
332
+ ### Dark Mode
333
+
334
+ | Elemento | Color | Hex |
335
+ |----------|-------|-----|
336
+ | Background | dark:bg-zinc-900 | #18181b |
337
+ | Border | dark:border-zinc-800 | #3f3f46 |
338
+ | Heading text | dark:content-primary-dark | #fafafa |
339
+ | Section heading | dark:content-tertiary-dark | #a1a1aa |
340
+ | Item text | dark:content-primary-dark | #fafafa |
341
+ | Icon | dark:content-secondary | #a1a1aa |
342
+ | Hover bg | dark:bg-background-custom-primary-dark | #0e5ab0 |
343
+
344
+ ### Tokens Utilizados
345
+
346
+ - **Colores**: `content-primary`, `content-secondary`, `content-tertiary`, `bg-primary`, `border-primary`, `background-custom-primary`
347
+ - **Dark Mode**: Se invierten automáticamente con prefijo `dark:`
348
+ - **No hay colores hardcodeados**: Todo usa el sistema de tokens
349
+
350
+ ---
351
+
352
+ ## Espaciado
353
+
354
+ | Elemento | Valor | Px |
355
+ |----------|-------|-----|
356
+ | Panel padding | 3 | 12px |
357
+ | Item padding (h) | 4 | 16px |
358
+ | Item padding (v) | 2 | 8px |
359
+ | Gap entre items | 0.5 | 2px |
360
+ | Gap entre elemento e icono | 3 | 12px |
361
+ | Section heading pt | 3 | 12px |
362
+ | Section heading pb | 1 | 4px |
363
+ | Divider margin top | 3 | 12px |
364
+
365
+ ---
366
+
367
+ ## Accesibilidad
368
+
369
+ ✅ **Focus Management**
370
+ - Focus rings adaptativos de 4px
371
+ - Offset de 2px en light mode
372
+ - Offset transparente en dark mode
373
+ - Color focus: primary-custom-400 (#60b6fa)
374
+
375
+ ✅ **Keyboard Navigation**
376
+ - Tab para navegar entre items
377
+ - Enter/Space para activar
378
+ - Arrow keys para items colapsables (heredado de DropdownItemCollapsible)
379
+
380
+ ✅ **ARIA**
381
+ - Roles semánticos (button, heading, menuitem)
382
+ - aria-disabled para items deshabilitados
383
+ - aria-expanded para items colapsables
384
+
385
+ ✅ **Colores**
386
+ - Contraste AA/AAA mantenido
387
+ - No depender solo de color para indicar estado
388
+ - Íconos con suficiente contraste
389
+
390
+ ---
391
+
392
+ ## Dark Mode
393
+
394
+ El componente es **100% compatible con dark mode**:
395
+
396
+ ```tsx
397
+ // El componente detecta automáticamente el tema
398
+ <NavigationRailPanel
399
+ // Automáticamente invierte colores en dark mode
400
+ showHeading={true}
401
+ showSearch={true}
402
+ />
403
+ ```
404
+
405
+ ### Cambios en Dark Mode
406
+
407
+ 1. **Background**: white (#ffffff) → zinc-900 (#18181b)
408
+ 2. **Border**: border-primary (#e4e4e7) → border-zinc-800 (#3f3f46)
409
+ 3. **Text**: content-primary (#18181b) → content-primary-dark (#fafafa)
410
+ 4. **Icon hover**: dbeefe (#dbeefe) → 0e5ab0 (#0e5ab0)
411
+ 5. **Focus ring offset**: blanco → zinc-900
412
+
413
+ ---
414
+
415
+ ## Estados Visuales
416
+
417
+ ### Default
418
+ - Sin interacción
419
+ - Colores base
420
+
421
+ ### Hover
422
+ - Background sutil: `background-custom-primary`
423
+ - Cursor pointer
424
+ - Transición suave
425
+
426
+ ### Focus
427
+ - Focus ring de 4px
428
+ - Color: `primary-custom-400`
429
+ - Offset: 2px (light) / transparent (dark)
430
+
431
+ ### Active
432
+ - Item colapsable expandido
433
+ - Indicado por chevron rotado
434
+
435
+ ### Disabled
436
+ - Opacidad: 50%
437
+ - Cursor: not-allowed
438
+ - Sin hover/focus interactivo
439
+
440
+ ---
441
+
442
+ ## Referencias
443
+
444
+ ### Documentación del Sistema
445
+
446
+ - [@see docs/colors.md](../../../docs/colors.md) - Sistema de colores
447
+ - [@see docs/typography.md](../../../docs/typography.md) - Sistema tipográfico
448
+ - [@see docs/spacing.md](../../../docs/spacing.md) - Sistema de espaciado
449
+ - [@see docs/shadows.md](../../../docs/shadows.md) - Sistema de sombras
450
+
451
+ ### Componentes Relacionados
452
+
453
+ - [@see ../DropdownItemHeading](../DropdownItemHeading) - Encabezado reutilizado
454
+ - [@see ../DropdownItemCollapsible](../DropdownItemCollapsible) - Items colapsables
455
+ - [@see ../Input](../Input) - Búsqueda
456
+ - [@see ../Divider](../Divider) - Separadores
457
+
458
+ ### Figma
459
+
460
+ - [NavigationRailPanel en Figma](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6134-34415)
461
+ - [Design System Documentation](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit)