siesa-ui-kit 1.0.3 → 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 +72 -0
- 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/border-radius.md +1261 -0
- package/docs/colors.md +832 -0
- package/docs/dark-mode-guide.md +1426 -0
- package/docs/filters.md +1243 -0
- package/docs/icons.md +1264 -0
- package/docs/shadows.md +1377 -0
- package/docs/spacing.md +1684 -0
- package/docs/typography.md +1268 -0
- package/package.json +111 -103
- package/postcss.config.cjs +6 -0
- package/public/,Business Logo.png +0 -0
- package/public/.Siesa Logo.png +0 -0
- package/public/bg_siesa.png +0 -0
- package/public/siesa_logo_mobile.png +0 -0
- package/public/vite.svg +1 -0
- package/src/App.css +42 -0
- package/src/App.tsx +8 -0
- package/src/ButtonTest.tsx +147 -0
- package/src/assets/fonts/README.md +261 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +1 -0
- package/src/components/Alert/Alert.stories.tsx +332 -0
- package/src/components/Alert/Alert.tsx +106 -0
- package/src/components/Alert/Alert.types.ts +54 -0
- package/src/components/Avatar/Avatar.stories.tsx +494 -0
- package/src/components/Avatar/Avatar.tsx +143 -0
- package/src/components/Avatar/Avatar.types.ts +53 -0
- package/src/components/Badge/Badge.stories.tsx +339 -0
- package/src/components/Badge/Badge.tsx +278 -0
- package/src/components/Badge/Badge.types.ts +58 -0
- package/src/components/Button/Button.stories.tsx +950 -0
- package/src/components/Button/Button.tsx +337 -0
- package/src/components/Button/Button.types.ts +180 -0
- package/src/components/Button/icons.tsx +48 -0
- package/src/components/Button/index.ts +3 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
- package/src/components/Checkbox/Checkbox.tsx +208 -0
- package/src/components/Checkbox/Checkbox.types.ts +61 -0
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
- package/src/components/DescriptionList/DescriptionList.tsx +96 -0
- package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
- package/src/components/Divider/Divider.stories.tsx +263 -0
- package/src/components/Divider/Divider.tsx +80 -0
- package/src/components/Divider/Divider.types.ts +24 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
- package/src/components/Dropdown/Dropdown.tsx +422 -0
- package/src/components/Dropdown/Dropdown.types.ts +146 -0
- package/src/components/Dropdown/README.md +266 -0
- package/src/components/Dropdown/icons.tsx +72 -0
- package/src/components/Dropdown/index.ts +8 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -0
- package/src/components/DropdownItemCollapsible/README.md +264 -0
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
- package/src/components/DropdownItemCollapsible/index.ts +12 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
- package/src/components/DropdownItemHeading/README.md +573 -0
- package/src/components/DropdownItemHeading/icons.tsx +125 -0
- package/src/components/DropdownItemHeading/index.ts +3 -0
- package/src/components/Input/Input.stories.tsx +583 -0
- package/src/components/Input/Input.tsx +204 -0
- package/src/components/Input/Input.types.ts +80 -0
- package/src/components/Input/icons.tsx +145 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/LoginView/LoginView.stories.tsx +148 -0
- package/src/components/LoginView/LoginView.tsx +426 -0
- package/src/components/LoginView/LoginView.types.ts +52 -0
- package/src/components/LoginView/README.md +396 -0
- package/src/components/LoginView/icons.tsx +85 -0
- package/src/components/LoginView/index.ts +3 -0
- package/src/components/Navbar/Navbar.stories.tsx +810 -0
- package/src/components/Navbar/Navbar.tsx +755 -0
- package/src/components/Navbar/Navbar.types.ts +219 -0
- package/src/components/Navbar/README.md +279 -0
- package/src/components/Navbar/icons.tsx +102 -0
- package/src/components/Navbar/index.ts +8 -0
- package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
- package/src/components/NavigationBar/NavigationBar.tsx +246 -0
- package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
- package/src/components/NavigationBar/README.md +469 -0
- package/src/components/NavigationBar/index.ts +2 -0
- package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
- package/src/components/NavigationRail/NavigationRail.tsx +418 -0
- package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
- package/src/components/NavigationRail/README.md +224 -0
- package/src/components/NavigationRail/index.ts +2 -0
- 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 -0
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -0
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -0
- package/src/components/NavigationRailItem/README.md +476 -0
- package/src/components/NavigationRailItem/index.ts +2 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
- package/src/components/NavigationRailPanel/README.md +461 -0
- package/src/components/NavigationRailPanel/index.ts +6 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -0
- package/src/components/NavigationRailTypes/README.md +573 -0
- package/src/components/NavigationRailTypes/icons.tsx +76 -0
- package/src/components/NavigationRailTypes/index.ts +7 -0
- package/src/components/Notification/Notification.stories.tsx +513 -0
- package/src/components/Notification/Notification.tsx +145 -0
- package/src/components/Notification/Notification.types.ts +142 -0
- package/src/components/Notification/README.md +409 -0
- package/src/components/Notification/index.ts +3 -0
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
- package/src/components/POSConvention/POSConvention.tsx +129 -0
- package/src/components/POSConvention/POSConvention.types.ts +38 -0
- package/src/components/POSConvention/README.md +123 -0
- package/src/components/POSConvention/icons.tsx +45 -0
- package/src/components/POSConvention/index.ts +3 -0
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
- package/src/components/POSLocationButton/README.md +253 -0
- package/src/components/POSLocationButton/icons.tsx +120 -0
- package/src/components/POSLocationButton/index.ts +14 -0
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
- package/src/components/POSNumberButton/README.md +321 -0
- package/src/components/POSNumberButton/index.ts +3 -0
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
- package/src/components/POSProductButton/POSProductButton.tsx +152 -0
- package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
- package/src/components/POSProductButton/README.md +269 -0
- package/src/components/POSProductButton/index.ts +2 -0
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
- package/src/components/POSProductCard/POSProductCard.tsx +208 -0
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
- package/src/components/POSProductCard/README.md +179 -0
- package/src/components/POSProductCard/icons.tsx +26 -0
- package/src/components/POSProductCard/index.ts +2 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
- package/src/components/POSProductSidebarItems/README.md +198 -0
- package/src/components/POSProductSidebarItems/icons.tsx +21 -0
- package/src/components/POSProductSidebarItems/index.ts +3 -0
- package/src/components/POSTable/POSTable.stories.tsx +737 -0
- package/src/components/POSTable/POSTable.tsx +401 -0
- package/src/components/POSTable/POSTable.types.ts +83 -0
- package/src/components/POSTable/README.md +286 -0
- package/src/components/POSTable/index.ts +7 -0
- package/src/components/Pagination/Pagination.stories.tsx +555 -0
- package/src/components/Pagination/Pagination.tsx +286 -0
- package/src/components/Pagination/Pagination.types.ts +93 -0
- package/src/components/Pagination/README.md +298 -0
- package/src/components/Pagination/icons.tsx +47 -0
- package/src/components/Pagination/index.ts +3 -0
- package/src/components/Quantity/Quantity.stories.tsx +457 -0
- package/src/components/Quantity/Quantity.tsx +289 -0
- package/src/components/Quantity/Quantity.types.ts +70 -0
- package/src/components/Radio/Radio.stories.tsx +523 -0
- package/src/components/Radio/Radio.tsx +170 -0
- package/src/components/Radio/Radio.types.ts +122 -0
- package/src/components/Select/README.md +299 -0
- package/src/components/Select/Select.stories.tsx +705 -0
- package/src/components/Select/Select.tsx +457 -0
- package/src/components/Select/Select.types.ts +148 -0
- package/src/components/Select/icons.tsx +25 -0
- package/src/components/Select/index.ts +3 -0
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/components/SignUpView/SignUpView.tsx +503 -0
- package/src/components/SignUpView/SignUpView.types.ts +58 -0
- package/src/components/SignUpView/icons.tsx +71 -0
- package/src/components/SignUpView/index.ts +3 -0
- package/src/components/Switch/README.md +112 -0
- package/src/components/Switch/Switch.stories.tsx +550 -0
- package/src/components/Switch/Switch.tsx +246 -0
- package/src/components/Switch/Switch.types.ts +67 -0
- package/src/components/Table/README.md +369 -0
- package/src/components/Table/Table.stories.tsx +805 -0
- package/src/components/Table/Table.tsx +688 -0
- package/src/components/Table/Table.types.ts +204 -0
- package/src/components/Table/index.ts +9 -0
- package/src/components/Tabs/README.md +201 -0
- package/src/components/Tabs/Tabs.stories.tsx +580 -0
- package/src/components/Tabs/Tabs.tsx +356 -0
- package/src/components/Tabs/Tabs.types.ts +127 -0
- package/src/components/Tabs/icons.tsx +129 -0
- package/src/components/Tabs/index.ts +11 -0
- package/src/components/Textarea/Textarea.stories.tsx +535 -0
- package/src/components/Textarea/Textarea.tsx +188 -0
- package/src/components/Textarea/Textarea.types.ts +54 -0
- package/src/context/ThemeContext.tsx +99 -0
- package/src/context/index.ts +1 -0
- package/src/index.css +29 -0
- package/src/index.ts +133 -0
- package/src/main.tsx +10 -0
- 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 -0
- package/src/views/ListView/ListView.tsx +570 -0
- package/src/views/ListView/ListView.types.ts +211 -0
- package/src/views/ListView/icons.tsx +282 -0
- package/src/views/ListView/index.ts +11 -0
- package/src/views/LoginView/LoginView.stories.tsx +148 -0
- package/src/views/LoginView/LoginView.tsx +426 -0
- package/src/views/LoginView/LoginView.types.ts +52 -0
- package/src/views/LoginView/README.md +396 -0
- package/src/views/LoginView/icons.tsx +85 -0
- package/src/views/LoginView/index.ts +3 -0
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
- package/src/views/ProductsView/ProductsView.tsx +480 -0
- package/src/views/ProductsView/ProductsView.types.ts +238 -0
- package/src/views/ProductsView/README.md +312 -0
- package/src/views/ProductsView/icons.tsx +38 -0
- package/src/views/ProductsView/index.ts +8 -0
- package/src/views/RecoverPasswordView/README.md +269 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
- package/src/views/RecoverPasswordView/icons.tsx +17 -0
- package/src/views/RecoverPasswordView/index.ts +2 -0
- package/src/views/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/views/SignUpView/SignUpView.tsx +503 -0
- package/src/views/SignUpView/SignUpView.types.ts +58 -0
- package/src/views/SignUpView/icons.tsx +71 -0
- package/src/views/SignUpView/index.ts +3 -0
- package/src/views/TableLayoutView/README.md +268 -0
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
- package/src/views/TableLayoutView/icons.tsx +113 -0
- package/src/views/TableLayoutView/index.ts +6 -0
- package/storybook/main.ts +20 -0
- package/storybook/preview.tsx +84 -0
- package/storybook/vitest.setup.ts +7 -0
- package/tailwind.config.js +128 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
# LayoutCommercial
|
|
2
|
+
|
|
3
|
+
Vista completa de layout comercial del sistema Siesa con NavigationRail lateral, Navbar superior y formulario de configuración de ítems.
|
|
4
|
+
|
|
5
|
+
## Captura del diseño
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Descripción
|
|
10
|
+
|
|
11
|
+
`LayoutCommercial` es una vista completa que implementa el layout comercial estándar de Siesa. Compone múltiples componentes del sistema para crear una interfaz cohesiva de gestión comercial con formulario de configuración de ítems.
|
|
12
|
+
|
|
13
|
+
### Composición
|
|
14
|
+
|
|
15
|
+
La vista está compuesta por los siguientes componentes del sistema:
|
|
16
|
+
|
|
17
|
+
| Componente | Ubicación | Descripción |
|
|
18
|
+
|------------|-----------|-------------|
|
|
19
|
+
| **Navbar** | Superior | Barra de navegación con logo Siesa, título "SB Comercial" y dropdown de usuario |
|
|
20
|
+
| **NavigationRailCommercial** | Lateral izquierdo | Rail de navegación con iconos (Configuración, Carrito, Productos, Documentos) |
|
|
21
|
+
| **Input** | Área de contenido | Campos de entrada para código, nombre y configuración |
|
|
22
|
+
| **Select** | Área de contenido | Selectores para extensiones, modelo de costo y lotes |
|
|
23
|
+
| **Radio** | Área de contenido | Selección entre "Inventario" y "Servicio" |
|
|
24
|
+
| **Checkbox** | Área de contenido | Opciones múltiples para permisos y características |
|
|
25
|
+
|
|
26
|
+
## Características
|
|
27
|
+
|
|
28
|
+
- **Dark mode completo**: Soporte para tema claro y oscuro en todos los componentes
|
|
29
|
+
- **Responsive design**: Adaptación automática a diferentes tamaños de pantalla
|
|
30
|
+
- **TypeScript estricto**: Type safety completo con interfaces bien definadas
|
|
31
|
+
- **Composición de componentes**: Reutiliza componentes del sistema (NO reimplementación)
|
|
32
|
+
- **State management**: Control de estado del formulario mediante callback
|
|
33
|
+
- **Tokens del sistema**: Colores, espaciado y tipografía consistentes
|
|
34
|
+
|
|
35
|
+
## Uso básico
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import { LayoutCommercial } from './views/LayoutCommercial';
|
|
39
|
+
import {
|
|
40
|
+
Cog6ToothIcon,
|
|
41
|
+
ShoppingCartIcon,
|
|
42
|
+
CubeIcon,
|
|
43
|
+
DocumentIcon,
|
|
44
|
+
} from './components/NavigationRailCommercial/icons';
|
|
45
|
+
|
|
46
|
+
const App = () => {
|
|
47
|
+
const [formData, setFormData] = useState({
|
|
48
|
+
codigoItem: '',
|
|
49
|
+
nombre: '',
|
|
50
|
+
tipoItem: 'inventario',
|
|
51
|
+
// ... más campos
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const navigationItems = [
|
|
55
|
+
{
|
|
56
|
+
id: 'config',
|
|
57
|
+
label: 'Configuración',
|
|
58
|
+
icon: <Cog6ToothIcon />,
|
|
59
|
+
active: true,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: 'cart',
|
|
63
|
+
label: 'Carrito',
|
|
64
|
+
icon: <ShoppingCartIcon />,
|
|
65
|
+
},
|
|
66
|
+
// ... más items
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<LayoutCommercial
|
|
71
|
+
productName="SB Comercial"
|
|
72
|
+
userDropdown={{
|
|
73
|
+
avatar: '/avatar.jpg',
|
|
74
|
+
name: 'Carlos',
|
|
75
|
+
email: 'carlos@siesa.com',
|
|
76
|
+
}}
|
|
77
|
+
navigationItems={navigationItems}
|
|
78
|
+
formData={formData}
|
|
79
|
+
onFormChange={setFormData}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Props
|
|
86
|
+
|
|
87
|
+
### LayoutCommercialProps
|
|
88
|
+
|
|
89
|
+
| Prop | Tipo | Default | Descripción |
|
|
90
|
+
|------|------|---------|-------------|
|
|
91
|
+
| `productName` | `string` | `'SB Comercial'` | Nombre del producto en el Navbar |
|
|
92
|
+
| `userDropdown` | `UserDropdownProps` | `undefined` | Configuración del dropdown de usuario |
|
|
93
|
+
| `navigationItems` | `NavigationRailCommercialMenuItem[]` | `undefined` | Items del NavigationRail |
|
|
94
|
+
| `formData` | `FormData` | `undefined` | Datos del formulario |
|
|
95
|
+
| `onFormChange` | `(data: FormData) => void` | `undefined` | Callback cuando cambian los datos |
|
|
96
|
+
| `className` | `string` | `''` | Clases CSS adicionales |
|
|
97
|
+
|
|
98
|
+
### FormData
|
|
99
|
+
|
|
100
|
+
| Campo | Tipo | Descripción |
|
|
101
|
+
|-------|------|-------------|
|
|
102
|
+
| `codigoItem` | `string` | Código único del ítem |
|
|
103
|
+
| `nombre` | `string` | Nombre del ítem |
|
|
104
|
+
| `tipoItem` | `'inventario' \| 'servicio'` | Tipo de ítem |
|
|
105
|
+
| `extension1` | `string` | Extensión 1 (ej: Color) |
|
|
106
|
+
| `extension2` | `string` | Extensión 2 (ej: Talla) |
|
|
107
|
+
| `modeloCosto` | `string` | Modelo de costo (FIFO, LIFO, Promedio) |
|
|
108
|
+
| `configuracionSerial` | `string` | Configuración del serial |
|
|
109
|
+
| `manejaLotes` | `string` | Si maneja lotes |
|
|
110
|
+
| `manejaSeriales` | `boolean` | Si maneja seriales |
|
|
111
|
+
| `procesoManufactura` | `boolean` | Si tiene procesos de manufactura/MRP |
|
|
112
|
+
| `puedeComprarse` | `boolean` | Si puede comprarse |
|
|
113
|
+
| `puedeVenderse` | `boolean` | Si puede venderse |
|
|
114
|
+
| `permitir*` | `boolean` | Permisos de modificación para cada campo |
|
|
115
|
+
|
|
116
|
+
## Ejemplos
|
|
117
|
+
|
|
118
|
+
### Formulario vacío
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
<LayoutCommercial
|
|
122
|
+
productName="SB Comercial"
|
|
123
|
+
userDropdown={{
|
|
124
|
+
avatar: '/avatar.jpg',
|
|
125
|
+
name: 'Carlos',
|
|
126
|
+
email: 'carlos@siesa.com',
|
|
127
|
+
}}
|
|
128
|
+
navigationItems={navigationItems}
|
|
129
|
+
formData={{
|
|
130
|
+
codigoItem: '',
|
|
131
|
+
nombre: '',
|
|
132
|
+
tipoItem: 'inventario',
|
|
133
|
+
}}
|
|
134
|
+
onFormChange={(data) => console.log(data)}
|
|
135
|
+
/>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Formulario con datos
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
<LayoutCommercial
|
|
142
|
+
productName="SB Comercial"
|
|
143
|
+
userDropdown={{
|
|
144
|
+
avatar: '/avatar.jpg',
|
|
145
|
+
name: 'Carlos',
|
|
146
|
+
email: 'carlos@siesa.com',
|
|
147
|
+
}}
|
|
148
|
+
navigationItems={navigationItems}
|
|
149
|
+
formData={{
|
|
150
|
+
codigoItem: 'ITEM-001',
|
|
151
|
+
nombre: 'Producto de Ejemplo',
|
|
152
|
+
tipoItem: 'inventario',
|
|
153
|
+
extension1: 'azul',
|
|
154
|
+
extension2: 'm',
|
|
155
|
+
modeloCosto: 'fifo',
|
|
156
|
+
manejaLotes: 'si',
|
|
157
|
+
manejaSeriales: true,
|
|
158
|
+
puedeComprarse: true,
|
|
159
|
+
puedeVenderse: true,
|
|
160
|
+
}}
|
|
161
|
+
onFormChange={(data) => console.log(data)}
|
|
162
|
+
/>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Tipo servicio
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
<LayoutCommercial
|
|
169
|
+
productName="SB Comercial"
|
|
170
|
+
userDropdown={{
|
|
171
|
+
avatar: '/avatar.jpg',
|
|
172
|
+
name: 'Carlos',
|
|
173
|
+
email: 'carlos@siesa.com',
|
|
174
|
+
}}
|
|
175
|
+
navigationItems={navigationItems}
|
|
176
|
+
formData={{
|
|
177
|
+
codigoItem: 'SERV-001',
|
|
178
|
+
nombre: 'Servicio de Consultoría',
|
|
179
|
+
tipoItem: 'servicio',
|
|
180
|
+
puedeVenderse: true,
|
|
181
|
+
}}
|
|
182
|
+
onFormChange={(data) => console.log(data)}
|
|
183
|
+
/>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Estructura del formulario
|
|
187
|
+
|
|
188
|
+
### Sección: Información básica
|
|
189
|
+
|
|
190
|
+
- **Código de ítem** (Input): Campo de texto para el código único
|
|
191
|
+
- **Nombre** (Input): Campo de texto para el nombre del ítem
|
|
192
|
+
- **Tipo** (Radio): Selección entre "Inventario" y "Servicio"
|
|
193
|
+
- **Extensión 1** (Select): Selector para primera extensión (ej: Color)
|
|
194
|
+
- **Extensión 2** (Select): Selector para segunda extensión (ej: Talla)
|
|
195
|
+
- **Modelo de costo** (Select): Selector para modelo de costo (FIFO, LIFO, Promedio)
|
|
196
|
+
- **Configuración del serial** (Input): Campo para configuración del serial
|
|
197
|
+
- **Maneja lotes** (Select): Selector Sí/No para manejo de lotes
|
|
198
|
+
- **Maneja seriales** (Checkbox): Checkbox para habilitar seriales
|
|
199
|
+
- **Procesos de manufactura/MRP** (Checkbox): Checkbox para procesos
|
|
200
|
+
- **Puede comprarse** (Checkbox): Checkbox para compras
|
|
201
|
+
- **Puede venderse** (Checkbox): Checkbox para ventas
|
|
202
|
+
|
|
203
|
+
### Sección: Permitir modificar ítem
|
|
204
|
+
|
|
205
|
+
Grid de checkboxes que controlan qué campos pueden modificarse:
|
|
206
|
+
|
|
207
|
+
- Extensión 1
|
|
208
|
+
- Extensión 2
|
|
209
|
+
- Modelo de costo
|
|
210
|
+
- Maneja lotes
|
|
211
|
+
- Maneja seriales
|
|
212
|
+
- Configuración del serial
|
|
213
|
+
- Proceso de manufactura
|
|
214
|
+
- Compras
|
|
215
|
+
- Ventas
|
|
216
|
+
|
|
217
|
+
## Tokens de diseño
|
|
218
|
+
|
|
219
|
+
### Colores
|
|
220
|
+
|
|
221
|
+
| Elemento | Light Mode | Dark Mode |
|
|
222
|
+
|----------|------------|-----------|
|
|
223
|
+
| Background principal | `bg-background-secondary` | `dark:bg-dark-bg-primary` |
|
|
224
|
+
| Cards/Formulario | `bg-white` | `dark:bg-dark-bg-primary` |
|
|
225
|
+
| Texto principal | `text-content-primary` | `dark:text-dark-content-primary` |
|
|
226
|
+
| Bordes | `border-border-primary` | `dark:border-dark-border-primary` |
|
|
227
|
+
|
|
228
|
+
### Espaciado
|
|
229
|
+
|
|
230
|
+
- **Padding contenedor**: `p-8` (32px)
|
|
231
|
+
- **Gap entre secciones**: `space-y-6` (24px)
|
|
232
|
+
- **Padding cards**: `p-6` (24px)
|
|
233
|
+
- **Gap entre campos**: `gap-4` (16px)
|
|
234
|
+
|
|
235
|
+
### Tipografía
|
|
236
|
+
|
|
237
|
+
- **Título página**: `text-2xl font-bold` (24px)
|
|
238
|
+
- **Título sección**: `text-lg font-semibold` (18px)
|
|
239
|
+
- **Labels**: `text-sm` (14px) - definido en componentes Input/Select/Checkbox
|
|
240
|
+
|
|
241
|
+
## Responsive Design
|
|
242
|
+
|
|
243
|
+
La vista se adapta automáticamente:
|
|
244
|
+
|
|
245
|
+
| Breakpoint | Comportamiento |
|
|
246
|
+
|------------|----------------|
|
|
247
|
+
| **Mobile** (`< 768px`) | Una columna para todos los campos |
|
|
248
|
+
| **Tablet** (`≥ 768px`) | Grid de 2 columnas para campos relacionados |
|
|
249
|
+
| **Desktop** (`≥ 1024px`) | Layout completo con NavigationRail, Navbar y contenido |
|
|
250
|
+
|
|
251
|
+
## Componentes reutilizados
|
|
252
|
+
|
|
253
|
+
Esta vista NO reimplementa componentes. Todos son importados del sistema:
|
|
254
|
+
|
|
255
|
+
```tsx
|
|
256
|
+
import { Navbar } from '../../components/Navbar';
|
|
257
|
+
import { NavigationRailCommercial } from '../../components/NavigationRailCommercial';
|
|
258
|
+
import { Input } from '../../components/Input';
|
|
259
|
+
import { Select } from '../../components/Select';
|
|
260
|
+
import { Radio } from '../../components/Radio/Radio';
|
|
261
|
+
import { Checkbox } from '../../components/Checkbox/Checkbox';
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Mejores prácticas implementadas
|
|
265
|
+
|
|
266
|
+
- ✅ **Composición sobre reimplementación**: Usa componentes existentes
|
|
267
|
+
- ✅ **Dark mode completo**: Todos los elementos tienen variante dark
|
|
268
|
+
- ✅ **Tokens del sistema**: Colores, espaciado y tipografía consistentes
|
|
269
|
+
- ✅ **TypeScript estricto**: Type safety en props y estado
|
|
270
|
+
- ✅ **Responsive design**: Mobile-first con breakpoints
|
|
271
|
+
- ✅ **State management**: Control de estado mediante callback
|
|
272
|
+
- ✅ **Documentación completa**: JSDoc en código y README
|
|
273
|
+
- ✅ **Accesibilidad**: Labels y ARIA en componentes
|
|
274
|
+
|
|
275
|
+
## Relacionado
|
|
276
|
+
|
|
277
|
+
- [Navbar](../../components/Navbar/README.md)
|
|
278
|
+
- [NavigationRailCommercial](../../components/NavigationRailCommercial/README.md)
|
|
279
|
+
- [Input](../../components/Input/README.md)
|
|
280
|
+
- [Select](../../components/Select/README.md)
|
|
281
|
+
- [Checkbox](../../components/Checkbox/README.md)
|
|
282
|
+
- [Radio](../../components/Radio/README.md)
|
|
283
|
+
|
|
284
|
+
## Figma
|
|
285
|
+
|
|
286
|
+
Diseño original: [LayoutCommercial en Figma](https://www.figma.com/design/T675Nqfx0myJSt1GmRAYao/SB-Comercial?node-id=145-1383&m=dev)
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { ListView } from './ListView';
|
|
3
|
+
import { Badge } from '../../components/Badge/Badge';
|
|
4
|
+
import { Avatar } from '../../components/Avatar/Avatar';
|
|
5
|
+
import type { ListViewQuickFilter } from './ListView.types';
|
|
6
|
+
import {
|
|
7
|
+
EllipsisHorizontalIcon,
|
|
8
|
+
DocumentCheckIcon,
|
|
9
|
+
DocumentMinusIcon,
|
|
10
|
+
DocumentArrowUpIcon,
|
|
11
|
+
} from './icons';
|
|
12
|
+
|
|
13
|
+
// ===== TIPOS PARA LA DATA DE EJEMPLO =====
|
|
14
|
+
interface User {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
email: string;
|
|
18
|
+
role: string;
|
|
19
|
+
status: 'active' | 'inactive';
|
|
20
|
+
avatar?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// ===== DATA DE EJEMPLO =====
|
|
24
|
+
const sampleUsers: User[] = [
|
|
25
|
+
{ id: '1', name: 'Jhonnatan Diaz', email: 'jhonnatan.diaz@siesa.com', role: 'Administrador', status: 'active' },
|
|
26
|
+
{ id: '2', name: 'Santiago Sanchez', email: 'santiago.sanchez@siesa.com', role: 'Editor', status: 'active' },
|
|
27
|
+
{ id: '3', name: 'Daniel Mesa', email: 'daniel.mesa@siesa.com', role: 'Editor', status: 'active' },
|
|
28
|
+
{ id: '4', name: 'Juan David Guevara', email: 'juan.guevara@siesa.com', role: 'Editor', status: 'active' },
|
|
29
|
+
{ id: '5', name: 'Francisco Gonzalez', email: 'francisco.gonzalez@siesa.com', role: 'Editor', status: 'active' },
|
|
30
|
+
{ id: '6', name: 'Francisco Gonzalez', email: 'francisco.gonzalez@siesa.com', role: 'Editor', status: 'inactive' },
|
|
31
|
+
{ id: '7', name: 'Brayan Perdomo', email: 'brayan.perdomo@siesa.com', role: 'Editor', status: 'active' },
|
|
32
|
+
{ id: '8', name: 'Brayan Quiñones', email: 'brayan.quinones@siesa.com', role: 'Editor', status: 'active' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
// ===== COLUMNAS DE EJEMPLO =====
|
|
36
|
+
const columns = [
|
|
37
|
+
{
|
|
38
|
+
header: 'Nombre',
|
|
39
|
+
accessor: 'name' as const,
|
|
40
|
+
sortable: true,
|
|
41
|
+
render: (value: string, row: User) => (
|
|
42
|
+
<div className="flex items-center gap-2">
|
|
43
|
+
<Avatar
|
|
44
|
+
src={row.avatar || `https://i.pravatar.cc/150?u=${row.id}`}
|
|
45
|
+
alt={value}
|
|
46
|
+
size="8"
|
|
47
|
+
type="circular"
|
|
48
|
+
/>
|
|
49
|
+
<div className="flex flex-col gap-1">
|
|
50
|
+
<span className="text-sm font-normal text-content-primary dark:text-dark-content-primary">
|
|
51
|
+
{value}
|
|
52
|
+
</span>
|
|
53
|
+
<a
|
|
54
|
+
href={`mailto:${row.email}`}
|
|
55
|
+
className="text-[10px] leading-3 text-content-secondary dark:text-content-secondary hover:underline"
|
|
56
|
+
>
|
|
57
|
+
{row.email}
|
|
58
|
+
</a>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
header: 'Rol',
|
|
65
|
+
accessor: 'role' as const,
|
|
66
|
+
sortable: true,
|
|
67
|
+
render: (value: string) => (
|
|
68
|
+
<span className="text-sm text-content-primary dark:text-dark-content-primary">
|
|
69
|
+
{value}
|
|
70
|
+
</span>
|
|
71
|
+
),
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
header: 'Estado',
|
|
75
|
+
accessor: 'status' as const,
|
|
76
|
+
sortable: false,
|
|
77
|
+
width: '96px',
|
|
78
|
+
render: (value: 'active' | 'inactive') => (
|
|
79
|
+
<Badge
|
|
80
|
+
color={value === 'active' ? 'lime' : 'zinc'}
|
|
81
|
+
label={value === 'active' ? 'Activo' : 'Inactivo'}
|
|
82
|
+
/>
|
|
83
|
+
),
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
header: '',
|
|
87
|
+
accessor: 'id' as const,
|
|
88
|
+
sortable: false,
|
|
89
|
+
width: '84px',
|
|
90
|
+
render: () => (
|
|
91
|
+
<button className="flex items-center justify-center p-2.5 rounded-lg shadow-sm hover:bg-bg-secondary dark:hover:bg-dark-bg-secondary transition-colors">
|
|
92
|
+
<EllipsisHorizontalIcon className="w-4 h-4 text-content-secondary dark:text-content-secondary" />
|
|
93
|
+
</button>
|
|
94
|
+
),
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
// ===== FILTROS RÁPIDOS DE EJEMPLO =====
|
|
99
|
+
const quickFilters: ListViewQuickFilter[] = [
|
|
100
|
+
{
|
|
101
|
+
id: 'paid',
|
|
102
|
+
label: 'Facturas Pagadas',
|
|
103
|
+
color: 'lime',
|
|
104
|
+
icon: <DocumentCheckIcon className="w-3 h-3" />,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'pending',
|
|
108
|
+
label: 'facturas Pendientes por Pago',
|
|
109
|
+
color: 'rose',
|
|
110
|
+
icon: <DocumentMinusIcon className="w-3 h-3" />,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
id: 'orders',
|
|
114
|
+
label: 'Ordenes de Compra',
|
|
115
|
+
color: 'sky',
|
|
116
|
+
icon: <DocumentArrowUpIcon className="w-3 h-3" />,
|
|
117
|
+
},
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
// ===== USER INFO =====
|
|
121
|
+
const sampleUserInfo = {
|
|
122
|
+
avatar: 'https://i.pravatar.cc/150?img=12',
|
|
123
|
+
name: 'Jhonnatan Diaz',
|
|
124
|
+
role: 'Administrador',
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// ===== META =====
|
|
128
|
+
const meta: Meta<typeof ListView> = {
|
|
129
|
+
title: 'Siesa UI Kit/Views/ListView',
|
|
130
|
+
component: ListView,
|
|
131
|
+
parameters: {
|
|
132
|
+
layout: 'fullscreen',
|
|
133
|
+
docs: {
|
|
134
|
+
description: {
|
|
135
|
+
component: `
|
|
136
|
+
Vista de lista completa del sistema de diseño Siesa.
|
|
137
|
+
|
|
138
|
+
Incluye:
|
|
139
|
+
- Navigation Rail lateral con FAB
|
|
140
|
+
- Navbar superior con logo, título y dropdown de usuario
|
|
141
|
+
- Barra de filtros rápidos con badges de colores
|
|
142
|
+
- Tabla de datos con cabecera, cuerpo y paginación
|
|
143
|
+
- Botones de acción (Crear, Auditoría, Filtrar)
|
|
144
|
+
- Buscador integrado
|
|
145
|
+
- Dropdown de opciones de vista
|
|
146
|
+
`,
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
tags: ['autodocs'],
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export default meta;
|
|
154
|
+
type Story = StoryObj<typeof ListView>;
|
|
155
|
+
|
|
156
|
+
// ============================================
|
|
157
|
+
// 1. DEFAULT - Vista completa por defecto
|
|
158
|
+
// ============================================
|
|
159
|
+
export const Default: Story = {
|
|
160
|
+
render: () => (
|
|
161
|
+
<div className="min-h-screen w-full">
|
|
162
|
+
<ListView
|
|
163
|
+
title="List View"
|
|
164
|
+
navbarTitle="List View"
|
|
165
|
+
tableTitle="Usuarios"
|
|
166
|
+
columns={columns}
|
|
167
|
+
data={sampleUsers}
|
|
168
|
+
quickFilters={quickFilters}
|
|
169
|
+
selectedNavId="home"
|
|
170
|
+
userDropdown={sampleUserInfo}
|
|
171
|
+
notifications={{
|
|
172
|
+
bell: true,
|
|
173
|
+
cart: 5,
|
|
174
|
+
}}
|
|
175
|
+
pagination={{
|
|
176
|
+
currentPage: 3,
|
|
177
|
+
totalPages: 66,
|
|
178
|
+
onPageChange: (page) => console.log('Page:', page),
|
|
179
|
+
previousLabel: 'Atrás',
|
|
180
|
+
nextLabel: 'Siguiente',
|
|
181
|
+
}}
|
|
182
|
+
onSearch={(query) => console.log('Search:', query)}
|
|
183
|
+
onFabClick={() => console.log('FAB clicked')}
|
|
184
|
+
onNavSelect={(id) => console.log('Nav selected:', id)}
|
|
185
|
+
/>
|
|
186
|
+
</div>
|
|
187
|
+
),
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// ============================================
|
|
191
|
+
// 2. LOADING - Estado de carga
|
|
192
|
+
// ============================================
|
|
193
|
+
export const Loading: Story = {
|
|
194
|
+
render: () => (
|
|
195
|
+
<div className="min-h-screen w-full">
|
|
196
|
+
<ListView
|
|
197
|
+
title="List View"
|
|
198
|
+
navbarTitle="List View"
|
|
199
|
+
tableTitle="Usuarios"
|
|
200
|
+
columns={columns}
|
|
201
|
+
data={[]}
|
|
202
|
+
loading={true}
|
|
203
|
+
loadingRows={8}
|
|
204
|
+
quickFilters={quickFilters}
|
|
205
|
+
selectedNavId="home"
|
|
206
|
+
userDropdown={sampleUserInfo}
|
|
207
|
+
pagination={{
|
|
208
|
+
currentPage: 1,
|
|
209
|
+
totalPages: 10,
|
|
210
|
+
onPageChange: () => {},
|
|
211
|
+
}}
|
|
212
|
+
/>
|
|
213
|
+
</div>
|
|
214
|
+
),
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
// ============================================
|
|
218
|
+
// 3. EMPTY - Sin datos
|
|
219
|
+
// ============================================
|
|
220
|
+
export const Empty: Story = {
|
|
221
|
+
render: () => (
|
|
222
|
+
<div className="min-h-screen w-full">
|
|
223
|
+
<ListView
|
|
224
|
+
title="List View"
|
|
225
|
+
navbarTitle="List View"
|
|
226
|
+
tableTitle="Usuarios"
|
|
227
|
+
columns={columns}
|
|
228
|
+
data={[]}
|
|
229
|
+
emptyMessage="No se encontraron usuarios"
|
|
230
|
+
quickFilters={quickFilters}
|
|
231
|
+
selectedNavId="home"
|
|
232
|
+
userDropdown={sampleUserInfo}
|
|
233
|
+
/>
|
|
234
|
+
</div>
|
|
235
|
+
),
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// ============================================
|
|
239
|
+
// 4. CON OPCIONES DE VISTA
|
|
240
|
+
// ============================================
|
|
241
|
+
export const WithViewOptions: Story = {
|
|
242
|
+
render: () => (
|
|
243
|
+
<div className="min-h-screen w-full">
|
|
244
|
+
<ListView
|
|
245
|
+
title="List View"
|
|
246
|
+
navbarTitle="List View"
|
|
247
|
+
tableTitle="Usuarios"
|
|
248
|
+
columns={columns}
|
|
249
|
+
data={sampleUsers}
|
|
250
|
+
quickFilters={quickFilters}
|
|
251
|
+
selectedNavId="home"
|
|
252
|
+
userDropdown={sampleUserInfo}
|
|
253
|
+
pagination={{
|
|
254
|
+
currentPage: 1,
|
|
255
|
+
totalPages: 66,
|
|
256
|
+
onPageChange: () => {},
|
|
257
|
+
}}
|
|
258
|
+
viewOptions={[
|
|
259
|
+
{ id: 'all', label: 'Todos' },
|
|
260
|
+
{ id: 'active', label: 'Activos' },
|
|
261
|
+
{ id: 'inactive', label: 'Inactivos' },
|
|
262
|
+
]}
|
|
263
|
+
selectedViewOption="all"
|
|
264
|
+
onViewOptionChange={(id) => console.log('View option:', id)}
|
|
265
|
+
/>
|
|
266
|
+
</div>
|
|
267
|
+
),
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// ============================================
|
|
271
|
+
// 5. MINIMAL - Sin elementos opcionales
|
|
272
|
+
// ============================================
|
|
273
|
+
export const Minimal: Story = {
|
|
274
|
+
render: () => (
|
|
275
|
+
<div className="min-h-screen w-full">
|
|
276
|
+
<ListView
|
|
277
|
+
title="Lista Simple"
|
|
278
|
+
navbarTitle="Lista Simple"
|
|
279
|
+
tableTitle="Datos"
|
|
280
|
+
columns={[
|
|
281
|
+
{ header: 'Nombre', accessor: 'name' as const },
|
|
282
|
+
{ header: 'Email', accessor: 'email' as const },
|
|
283
|
+
]}
|
|
284
|
+
data={sampleUsers.slice(0, 3)}
|
|
285
|
+
showFab={false}
|
|
286
|
+
selectedNavId="home"
|
|
287
|
+
/>
|
|
288
|
+
</div>
|
|
289
|
+
),
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
// ============================================
|
|
293
|
+
// 6. CON BOTONES DE ACCIÓN PERSONALIZADOS
|
|
294
|
+
// ============================================
|
|
295
|
+
export const WithCustomActions: Story = {
|
|
296
|
+
render: () => (
|
|
297
|
+
<div className="min-h-screen w-full">
|
|
298
|
+
<ListView
|
|
299
|
+
title="List View"
|
|
300
|
+
navbarTitle="List View"
|
|
301
|
+
tableTitle="Usuarios"
|
|
302
|
+
columns={columns}
|
|
303
|
+
data={sampleUsers}
|
|
304
|
+
quickFilters={quickFilters}
|
|
305
|
+
selectedNavId="home"
|
|
306
|
+
userDropdown={sampleUserInfo}
|
|
307
|
+
pagination={{
|
|
308
|
+
currentPage: 1,
|
|
309
|
+
totalPages: 10,
|
|
310
|
+
onPageChange: () => {},
|
|
311
|
+
}}
|
|
312
|
+
actionButtons={[
|
|
313
|
+
{
|
|
314
|
+
id: 'create',
|
|
315
|
+
label: 'Crear Usuario',
|
|
316
|
+
variant: 'primary',
|
|
317
|
+
onClick: () => alert('Crear usuario'),
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
id: 'export',
|
|
321
|
+
label: 'Exportar',
|
|
322
|
+
variant: 'secondary',
|
|
323
|
+
onClick: () => alert('Exportar'),
|
|
324
|
+
},
|
|
325
|
+
]}
|
|
326
|
+
/>
|
|
327
|
+
</div>
|
|
328
|
+
),
|
|
329
|
+
};
|