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
@@ -0,0 +1,464 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { useState } from 'react';
3
+ import { NavigationRailCommercial } from './NavigationRailCommercial';
4
+ import type { NavigationRailCommercialProps } from './NavigationRailCommercial.types';
5
+ import {
6
+ Cog6ToothIcon,
7
+ ShoppingCartIcon,
8
+ CubeIcon,
9
+ DocumentIcon,
10
+ } from './icons';
11
+
12
+ // Wrapper con estado para las stories interactivas
13
+ const NavigationRailCommercialWithState = (args: NavigationRailCommercialProps) => {
14
+ const [state, setState] = useState(args.state || 'collapsed');
15
+
16
+ return (
17
+ <NavigationRailCommercial
18
+ {...args}
19
+ state={state}
20
+ onStateChange={(newState) => {
21
+ setState(newState);
22
+ args.onStateChange?.(newState);
23
+ }}
24
+ />
25
+ );
26
+ };
27
+
28
+ const meta = {
29
+ title: 'Siesa UI Kit/NavigationRailCommercial',
30
+ component: NavigationRailCommercial,
31
+ parameters: {
32
+ layout: 'fullscreen',
33
+ docs: {
34
+ description: {
35
+ component:
36
+ 'Componente de navegación lateral especializado para aplicaciones comerciales que combina NavigationRailTypes y NavigationRailPanel. Soporta cuatro estados: collapsed, expanded, hover y searcher.',
37
+ },
38
+ },
39
+ },
40
+ tags: ['autodocs'],
41
+ argTypes: {
42
+ state: {
43
+ control: 'select',
44
+ options: ['collapsed', 'expanded', 'hover', 'searcher'],
45
+ description: 'Estado visual del componente',
46
+ table: {
47
+ type: { summary: 'string' },
48
+ category: 'Apariencia',
49
+ defaultValue: { summary: 'collapsed' },
50
+ },
51
+ },
52
+ items: {
53
+ control: 'object',
54
+ description: 'Items de menú a mostrar',
55
+ table: {
56
+ type: { summary: 'NavigationRailCommercialMenuItem[]' },
57
+ category: 'Contenido',
58
+ },
59
+ },
60
+ showSearchButton: {
61
+ control: 'boolean',
62
+ description: 'Si mostrar el botón de búsqueda en modo collapsed',
63
+ table: {
64
+ type: { summary: 'boolean' },
65
+ category: 'Apariencia',
66
+ defaultValue: { summary: 'true' },
67
+ },
68
+ },
69
+ onStateChange: {
70
+ action: 'stateChanged',
71
+ description: 'Callback cuando cambia el estado',
72
+ table: {
73
+ category: 'Eventos',
74
+ },
75
+ },
76
+ onItemClick: {
77
+ action: 'itemClicked',
78
+ description: 'Callback cuando se hace click en un item',
79
+ table: {
80
+ category: 'Eventos',
81
+ },
82
+ },
83
+ onItemHover: {
84
+ action: 'itemHovered',
85
+ description: 'Callback cuando se hace hover en un item',
86
+ table: {
87
+ category: 'Eventos',
88
+ },
89
+ },
90
+ },
91
+ } satisfies Meta<typeof NavigationRailCommercial>;
92
+
93
+ export default meta;
94
+ type Story = StoryObj<typeof meta>;
95
+
96
+ // ============================================
97
+ // DATOS DE EJEMPLO
98
+ // ============================================
99
+ const exampleItems = [
100
+ {
101
+ id: 'admin',
102
+ label: 'Administración',
103
+ icon: <Cog6ToothIcon className="size-4" />,
104
+ isCollapsible: true,
105
+ children: [
106
+ {
107
+ id: 'users',
108
+ label: 'Usuarios',
109
+ icon: <Cog6ToothIcon className="size-4" />,
110
+ onClick: () => console.log('Usuarios clicked'),
111
+ },
112
+ {
113
+ id: 'roles',
114
+ label: 'Roles y Permisos',
115
+ icon: <Cog6ToothIcon className="size-4" />,
116
+ onClick: () => console.log('Roles clicked'),
117
+ },
118
+ {
119
+ id: 'config',
120
+ label: 'Configuración',
121
+ icon: <Cog6ToothIcon className="size-4" />,
122
+ onClick: () => console.log('Config clicked'),
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ id: 'sales',
128
+ label: 'Ventas',
129
+ icon: <ShoppingCartIcon className="size-4" />,
130
+ isCollapsible: true,
131
+ children: [
132
+ {
133
+ id: 'orders',
134
+ label: 'Pedidos',
135
+ icon: <ShoppingCartIcon className="size-4" />,
136
+ },
137
+ {
138
+ id: 'invoices',
139
+ label: 'Facturas',
140
+ icon: <ShoppingCartIcon className="size-4" />,
141
+ },
142
+ ],
143
+ },
144
+ {
145
+ id: 'inventory',
146
+ label: 'Inventario',
147
+ icon: <CubeIcon className="size-4" />,
148
+ isCollapsible: true,
149
+ children: [
150
+ {
151
+ id: 'products',
152
+ label: 'Productos',
153
+ icon: <CubeIcon className="size-4" />,
154
+ },
155
+ {
156
+ id: 'categories',
157
+ label: 'Categorías',
158
+ icon: <CubeIcon className="size-4" />,
159
+ },
160
+ ],
161
+ },
162
+ {
163
+ id: 'purchases',
164
+ label: 'Compras',
165
+ icon: <DocumentIcon className="size-4" />,
166
+ isCollapsible: true,
167
+ children: [
168
+ {
169
+ id: 'orders-purchase',
170
+ label: 'Órdenes de Compra',
171
+ icon: <DocumentIcon className="size-4" />,
172
+ },
173
+ {
174
+ id: 'suppliers',
175
+ label: 'Proveedores',
176
+ icon: <DocumentIcon className="size-4" />,
177
+ },
178
+ ],
179
+ },
180
+ ];
181
+
182
+ // ============================================
183
+ // 1. INTERACTIVE PLAYGROUND
184
+ // ============================================
185
+ export const Playground: Story = {
186
+ args: {
187
+ state: 'collapsed',
188
+ items: exampleItems,
189
+ showSearchButton: true,
190
+ },
191
+ render: (args) => <NavigationRailCommercialWithState {...args} />,
192
+ };
193
+
194
+ // ============================================
195
+ // 2. ESTADOS DEL COMPONENTE
196
+ // ============================================
197
+ export const EstadoColapsado: Story = {
198
+ args: {
199
+ state: 'collapsed',
200
+ items: exampleItems,
201
+ },
202
+ render: (args) => (
203
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
204
+ <NavigationRailCommercialWithState {...args} />
205
+ <div className="flex-1 p-8">
206
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
207
+ Estado Colapsado
208
+ </h3>
209
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
210
+ Barra de navegación compacta de 80px con solo iconos.
211
+ <br />
212
+ Pasa el mouse sobre un icono para ver el panel lateral con el submenú.
213
+ <br />
214
+ <strong>Prueba el botón de expandir</strong> en el footer.
215
+ </p>
216
+ </div>
217
+ </div>
218
+ ),
219
+ };
220
+
221
+ export const EstadoExpandido: Story = {
222
+ args: {
223
+ state: 'expanded',
224
+ items: exampleItems,
225
+ },
226
+ render: (args) => (
227
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
228
+ <NavigationRailCommercialWithState {...args} />
229
+ <div className="flex-1 p-8">
230
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
231
+ Estado Expandido
232
+ </h3>
233
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
234
+ Barra de navegación de 215px con labels visibles.
235
+ <br />
236
+ Los items colapsables se muestran con chevron down y se pueden expandir.
237
+ <br />
238
+ <strong>Prueba el botón "Colapsar"</strong> en el footer.
239
+ </p>
240
+ </div>
241
+ </div>
242
+ ),
243
+ };
244
+
245
+ export const EstadoHover: Story = {
246
+ args: {
247
+ state: 'hover',
248
+ items: exampleItems,
249
+ },
250
+ render: (args) => (
251
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
252
+ <div className="relative">
253
+ <NavigationRailCommercial {...args} />
254
+ <div className="absolute left-[80px] top-0 w-[248px] h-full bg-bg-primary dark:bg-dark-bg-primary border-l border-border-primary dark:border-dark-border-primary p-3 shadow-lg">
255
+ <div className="mb-3">
256
+ <h4 className="text-sm font-bold text-content-primary dark:text-dark-content-primary px-4 py-2">
257
+ Administración
258
+ </h4>
259
+ </div>
260
+ <div className="border-t border-border-primary dark:border-dark-border-primary mb-3" />
261
+ <div className="space-y-1">
262
+ <button className="w-full text-left px-4 py-2 text-sm text-content-primary dark:text-dark-content-primary hover:bg-primary-custom-100 dark:hover:bg-dark-bg-custom rounded-lg transition-colors">
263
+ Usuarios
264
+ </button>
265
+ <button className="w-full text-left px-4 py-2 text-sm text-content-primary dark:text-dark-content-primary hover:bg-primary-custom-100 dark:hover:bg-dark-bg-custom rounded-lg transition-colors">
266
+ Roles y Permisos
267
+ </button>
268
+ <button className="w-full text-left px-4 py-2 text-sm text-content-primary dark:text-dark-content-primary hover:bg-primary-custom-100 dark:hover:bg-dark-bg-custom rounded-lg transition-colors">
269
+ Configuración
270
+ </button>
271
+ </div>
272
+ </div>
273
+ </div>
274
+ <div className="flex-1 p-8">
275
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
276
+ Estado Hover
277
+ </h3>
278
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
279
+ Panel lateral se muestra al hacer hover sobre un item con submenú.
280
+ <br />
281
+ El panel desaparece cuando el mouse sale de la zona del rail + panel.
282
+ </p>
283
+ </div>
284
+ </div>
285
+ ),
286
+ };
287
+
288
+ export const EstadoBusqueda: Story = {
289
+ args: {
290
+ state: 'searcher',
291
+ items: exampleItems,
292
+ },
293
+ render: (args) => (
294
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
295
+ <div className="relative">
296
+ <NavigationRailCommercial {...args} />
297
+ <div className="absolute left-[80px] top-0 w-[248px] h-full bg-bg-primary dark:bg-dark-bg-primary border-l border-border-primary dark:border-dark-border-primary shadow-lg">
298
+ <div className="p-3">
299
+ <input
300
+ type="text"
301
+ placeholder="Buscar módulo"
302
+ className="w-full px-3 py-2 text-sm border border-border-primary dark:border-dark-border-primary rounded-lg bg-white dark:bg-dark-bg-primary text-content-primary dark:text-dark-content-primary placeholder-content-tertiary dark:placeholder-content-tertiary"
303
+ />
304
+ </div>
305
+ <div className="border-t border-border-primary dark:border-dark-border-primary mb-3" />
306
+ <div className="px-3 space-y-3">
307
+ <div>
308
+ <p className="text-xs text-content-tertiary dark:text-content-tertiary mb-2">
309
+ Recientes
310
+ </p>
311
+ <button className="w-full text-left px-4 py-2 text-sm text-content-primary dark:text-dark-content-primary hover:bg-primary-custom-100 dark:hover:bg-dark-bg-custom rounded-lg transition-colors">
312
+ Configuración
313
+ </button>
314
+ </div>
315
+ <div>
316
+ <p className="text-xs text-content-tertiary dark:text-content-tertiary mb-2">
317
+ Opciones frecuentes
318
+ </p>
319
+ <button className="w-full text-left px-4 py-2 text-sm text-content-primary dark:text-dark-content-primary hover:bg-primary-custom-100 dark:hover:bg-dark-bg-custom rounded-lg transition-colors">
320
+ Item
321
+ </button>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div>
326
+ <div className="flex-1 p-8">
327
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
328
+ Estado Búsqueda
329
+ </h3>
330
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
331
+ Panel lateral se muestra al hacer click en el botón de búsqueda (modo collapsed).
332
+ <br />
333
+ Incluye input de búsqueda, sección de recientes y opciones frecuentes.
334
+ </p>
335
+ </div>
336
+ </div>
337
+ ),
338
+ };
339
+
340
+ // ============================================
341
+ // 3. VARIANTES CON ITEMS ACTIVOS
342
+ // ============================================
343
+ export const ConItemActivo: Story = {
344
+ args: {
345
+ state: 'collapsed',
346
+ items: exampleItems.map((item, index) => ({
347
+ ...item,
348
+ active: index === 0,
349
+ })),
350
+ },
351
+ render: (args) => (
352
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
353
+ <NavigationRailCommercialWithState {...args} />
354
+ <div className="flex-1 p-8">
355
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
356
+ Con Item Activo
357
+ </h3>
358
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
359
+ El primer item (Administración) está marcado como activo.
360
+ <br />
361
+ Los items activos tienen un fondo de color custom-primary.
362
+ </p>
363
+ </div>
364
+ </div>
365
+ ),
366
+ };
367
+
368
+ export const ConBadges: Story = {
369
+ args: {
370
+ state: 'collapsed',
371
+ items: exampleItems.map((item, index) => ({
372
+ ...item,
373
+ badge: index === 1 || index === 3,
374
+ badgeCount: index === 1 ? 5 : index === 3 ? 12 : undefined,
375
+ })),
376
+ },
377
+ render: (args) => (
378
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
379
+ <NavigationRailCommercialWithState {...args} />
380
+ <div className="flex-1 p-8">
381
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
382
+ Con Badges de Notificación
383
+ </h3>
384
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
385
+ Algunos items tienen badges de notificación con contador.
386
+ <br />
387
+ Ventas (5) y Compras (12) tienen notificaciones pendientes.
388
+ </p>
389
+ </div>
390
+ </div>
391
+ ),
392
+ };
393
+
394
+ // ============================================
395
+ // 4. CASOS DE USO REALES
396
+ // ============================================
397
+ export const AplicacionCompleta: Story = {
398
+ args: {
399
+ state: 'collapsed',
400
+ items: exampleItems,
401
+ },
402
+ render: (args) => (
403
+ <div className="flex h-screen bg-white dark:bg-dark-bg-primary">
404
+ <NavigationRailCommercialWithState {...args} />
405
+ <div className="flex-1 p-8">
406
+ <div className="max-w-4xl">
407
+ <h1 className="text-3xl font-bold mb-2 text-content-primary dark:text-dark-content-primary">
408
+ Panel de Control
409
+ </h1>
410
+ <p className="text-content-secondary dark:text-content-secondary mb-8">
411
+ Bienvenido al sistema comercial de Siesa
412
+ </p>
413
+
414
+ <div className="grid grid-cols-3 gap-6 mb-8">
415
+ <div className="bg-white dark:bg-dark-bg-primary p-6 rounded-lg border border-border-primary dark:border-dark-border-primary">
416
+ <h3 className="text-lg font-bold mb-2 text-content-primary dark:text-dark-content-primary">
417
+ Ventas del Mes
418
+ </h3>
419
+ <p className="text-3xl font-bold text-primary-custom-600">$125,430</p>
420
+ </div>
421
+ <div className="bg-white dark:bg-dark-bg-primary p-6 rounded-lg border border-border-primary dark:border-dark-border-primary">
422
+ <h3 className="text-lg font-bold mb-2 text-content-primary dark:text-dark-content-primary">
423
+ Pedidos Activos
424
+ </h3>
425
+ <p className="text-3xl font-bold text-primary-custom-600">48</p>
426
+ </div>
427
+ <div className="bg-white dark:bg-dark-bg-primary p-6 rounded-lg border border-border-primary dark:border-dark-border-primary">
428
+ <h3 className="text-lg font-bold mb-2 text-content-primary dark:text-dark-content-primary">
429
+ Productos en Stock
430
+ </h3>
431
+ <p className="text-3xl font-bold text-primary-custom-600">1,234</p>
432
+ </div>
433
+ </div>
434
+
435
+ <div className="bg-white dark:bg-dark-bg-primary p-6 rounded-lg border border-border-primary dark:border-dark-border-primary">
436
+ <h3 className="text-lg font-bold mb-4 text-content-primary dark:text-dark-content-primary">
437
+ Actividad Reciente
438
+ </h3>
439
+ <div className="space-y-3">
440
+ {[1, 2, 3, 4].map((i) => (
441
+ <div
442
+ key={i}
443
+ className="flex items-center justify-between py-3 border-b border-border-primary dark:border-dark-border-primary last:border-0"
444
+ >
445
+ <div>
446
+ <p className="font-medium text-content-primary dark:text-dark-content-primary">
447
+ Nueva orden #{1000 + i}
448
+ </p>
449
+ <p className="text-sm text-content-secondary dark:text-content-secondary">
450
+ Cliente: Usuario {i}
451
+ </p>
452
+ </div>
453
+ <span className="text-sm text-content-secondary dark:text-content-secondary">
454
+ Hace {i} hora{i > 1 ? 's' : ''}
455
+ </span>
456
+ </div>
457
+ ))}
458
+ </div>
459
+ </div>
460
+ </div>
461
+ </div>
462
+ </div>
463
+ ),
464
+ };