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.
- package/README.md +115 -115
- package/bin/install.cjs +502 -502
- package/bin/prepare-publish.cjs +28 -28
- package/bin/restore-folders.cjs +28 -28
- package/claude/agents/siesa-ui-kit-specialist.md +2445 -0
- package/claude/prompts/component-template.md +121 -0
- package/claude/prompts/siesa-ui-kit.md +28 -0
- package/claude/settings.local.json +67 -2
- package/dist/components/Button/icons.d.ts +6 -5
- package/dist/components/Button/icons.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +21 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -1
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +122 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +139 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts +33 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/index.d.ts +4 -0
- package/dist/components/NavigationRailCommercial/index.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -1
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +7 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +41 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/icons.d.ts +15 -29
- package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/icons.d.ts +6 -2
- package/dist/components/Select/icons.d.ts.map +1 -1
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/siesa-ui-kit.cjs +404 -190
- package/dist/siesa-ui-kit.cjs.map +1 -1
- package/dist/siesa-ui-kit.mjs +6590 -1506
- package/dist/siesa-ui-kit.mjs.map +1 -1
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +48 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +49 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/index.d.ts +3 -0
- package/dist/views/LayoutCommercial/index.d.ts.map +1 -0
- package/docs/icons.md +12 -31
- package/package.json +111 -110
- package/src/components/Avatar/Avatar.stories.tsx +494 -494
- package/src/components/Button/Button.stories.tsx +950 -950
- package/src/components/Button/Button.tsx +337 -337
- package/src/components/Button/Button.types.ts +180 -180
- package/src/components/Button/icons.tsx +23 -62
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
- package/src/components/Divider/Divider.stories.tsx +263 -263
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -287
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -111
- package/src/components/DropdownItemCollapsible/README.md +264 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -57
- package/src/components/DropdownItemCollapsible/index.ts +12 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -93
- package/src/components/DropdownItemHeading/README.md +573 -573
- package/src/components/DropdownItemHeading/icons.tsx +125 -125
- package/src/components/DropdownItemHeading/index.ts +3 -3
- package/src/components/Input/Input.stories.tsx +583 -583
- package/src/components/LoginView/LoginView.stories.tsx +148 -148
- package/src/components/LoginView/LoginView.tsx +426 -426
- package/src/components/LoginView/LoginView.types.ts +52 -52
- package/src/components/LoginView/README.md +396 -396
- package/src/components/LoginView/icons.tsx +85 -85
- package/src/components/LoginView/index.ts +3 -3
- package/src/components/Navbar/Navbar.stories.tsx +810 -810
- package/src/components/Navbar/Navbar.tsx +755 -755
- package/src/components/Navbar/Navbar.types.ts +219 -219
- package/src/components/Navbar/README.md +279 -279
- package/src/components/Navbar/index.ts +8 -8
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
- package/src/components/NavigationRailCommercial/README.md +251 -0
- package/src/components/NavigationRailCommercial/icons.tsx +54 -0
- package/src/components/NavigationRailCommercial/index.ts +6 -0
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -313
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -167
- package/src/components/NavigationRailItem/README.md +476 -476
- package/src/components/NavigationRailItem/index.ts +2 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -178
- package/src/components/NavigationRailPanel/README.md +461 -461
- package/src/components/NavigationRailPanel/index.ts +6 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -528
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -378
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -130
- package/src/components/NavigationRailTypes/README.md +573 -573
- package/src/components/NavigationRailTypes/icons.tsx +76 -141
- package/src/components/NavigationRailTypes/index.ts +7 -7
- package/src/components/Notification/Notification.stories.tsx +513 -513
- package/src/components/Notification/Notification.tsx +145 -145
- package/src/components/Notification/Notification.types.ts +142 -142
- package/src/components/Notification/README.md +409 -409
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
- package/src/components/POSConvention/POSConvention.tsx +129 -129
- package/src/components/POSConvention/POSConvention.types.ts +38 -38
- package/src/components/POSConvention/README.md +123 -123
- package/src/components/POSConvention/icons.tsx +45 -45
- package/src/components/POSConvention/index.ts +3 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
- package/src/components/POSLocationButton/README.md +253 -253
- package/src/components/POSLocationButton/icons.tsx +120 -120
- package/src/components/POSLocationButton/index.ts +14 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
- package/src/components/POSNumberButton/README.md +321 -321
- package/src/components/POSNumberButton/index.ts +3 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
- package/src/components/POSProductCard/POSProductCard.tsx +208 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
- package/src/components/POSProductCard/README.md +179 -179
- package/src/components/POSProductCard/icons.tsx +26 -26
- package/src/components/POSProductCard/index.ts +2 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
- package/src/components/POSProductSidebarItems/README.md +198 -198
- package/src/components/POSProductSidebarItems/icons.tsx +21 -21
- package/src/components/POSProductSidebarItems/index.ts +3 -3
- package/src/components/POSTable/POSTable.stories.tsx +737 -737
- package/src/components/POSTable/POSTable.tsx +401 -401
- package/src/components/POSTable/README.md +286 -286
- package/src/components/Quantity/Quantity.stories.tsx +457 -457
- package/src/components/Radio/Radio.stories.tsx +523 -523
- package/src/components/Radio/Radio.tsx +1 -1
- package/src/components/Select/Select.stories.tsx +32 -0
- package/src/components/Select/Select.tsx +457 -454
- package/src/components/Select/icons.tsx +16 -41
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
- package/src/components/SignUpView/SignUpView.tsx +503 -503
- package/src/components/SignUpView/SignUpView.types.ts +58 -58
- package/src/components/SignUpView/icons.tsx +71 -71
- package/src/components/SignUpView/index.ts +3 -3
- package/src/components/Switch/README.md +112 -112
- package/src/components/Switch/Switch.stories.tsx +550 -550
- package/src/components/Switch/Switch.tsx +246 -246
- package/src/components/Switch/Switch.types.ts +67 -67
- package/src/components/Table/Table.stories.tsx +805 -805
- package/src/components/Tabs/README.md +201 -201
- package/src/components/Tabs/Tabs.stories.tsx +580 -580
- package/src/components/Tabs/Tabs.tsx +356 -356
- package/src/components/Tabs/Tabs.types.ts +127 -127
- package/src/components/Tabs/icons.tsx +129 -129
- package/src/components/Tabs/index.ts +11 -11
- package/src/components/Textarea/Textarea.stories.tsx +535 -535
- package/src/index.ts +133 -102
- package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
- package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
- package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
- package/src/views/LayoutCommercial/README.md +286 -0
- package/src/views/LayoutCommercial/index.ts +2 -0
- package/src/views/ListView/ListView.stories.tsx +329 -329
- package/src/views/ListView/ListView.tsx +570 -570
- package/src/views/ListView/ListView.types.ts +211 -211
- package/src/views/ListView/icons.tsx +282 -282
- package/src/views/ListView/index.ts +11 -11
- package/src/views/LoginView/LoginView.tsx +426 -426
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
- package/src/views/ProductsView/ProductsView.tsx +480 -480
- package/src/views/ProductsView/ProductsView.types.ts +238 -238
- package/src/views/ProductsView/README.md +312 -312
- package/src/views/ProductsView/icons.tsx +38 -38
- package/src/views/ProductsView/index.ts +8 -8
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
- package/src/views/SignUpView/SignUpView.tsx +503 -503
- package/src/views/TableLayoutView/README.md +268 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
- package/src/views/TableLayoutView/icons.tsx +113 -113
- package/src/views/TableLayoutView/index.ts +6 -6
- package/storybook/main.ts +19 -19
- package/storybook/preview.tsx +84 -84
- package/storybook/vitest.setup.ts +6 -6
- 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
|
+
};
|