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.
Files changed (290) 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 +72 -0
  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/border-radius.md +1261 -0
  46. package/docs/colors.md +832 -0
  47. package/docs/dark-mode-guide.md +1426 -0
  48. package/docs/filters.md +1243 -0
  49. package/docs/icons.md +1264 -0
  50. package/docs/shadows.md +1377 -0
  51. package/docs/spacing.md +1684 -0
  52. package/docs/typography.md +1268 -0
  53. package/package.json +111 -103
  54. package/postcss.config.cjs +6 -0
  55. package/public/,Business Logo.png +0 -0
  56. package/public/.Siesa Logo.png +0 -0
  57. package/public/bg_siesa.png +0 -0
  58. package/public/siesa_logo_mobile.png +0 -0
  59. package/public/vite.svg +1 -0
  60. package/src/App.css +42 -0
  61. package/src/App.tsx +8 -0
  62. package/src/ButtonTest.tsx +147 -0
  63. package/src/assets/fonts/README.md +261 -0
  64. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  65. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  66. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  67. package/src/assets/react.svg +1 -0
  68. package/src/components/Alert/Alert.stories.tsx +332 -0
  69. package/src/components/Alert/Alert.tsx +106 -0
  70. package/src/components/Alert/Alert.types.ts +54 -0
  71. package/src/components/Avatar/Avatar.stories.tsx +494 -0
  72. package/src/components/Avatar/Avatar.tsx +143 -0
  73. package/src/components/Avatar/Avatar.types.ts +53 -0
  74. package/src/components/Badge/Badge.stories.tsx +339 -0
  75. package/src/components/Badge/Badge.tsx +278 -0
  76. package/src/components/Badge/Badge.types.ts +58 -0
  77. package/src/components/Button/Button.stories.tsx +950 -0
  78. package/src/components/Button/Button.tsx +337 -0
  79. package/src/components/Button/Button.types.ts +180 -0
  80. package/src/components/Button/icons.tsx +48 -0
  81. package/src/components/Button/index.ts +3 -0
  82. package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
  83. package/src/components/Checkbox/Checkbox.tsx +208 -0
  84. package/src/components/Checkbox/Checkbox.types.ts +61 -0
  85. package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
  86. package/src/components/DescriptionList/DescriptionList.tsx +96 -0
  87. package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
  88. package/src/components/Divider/Divider.stories.tsx +263 -0
  89. package/src/components/Divider/Divider.tsx +80 -0
  90. package/src/components/Divider/Divider.types.ts +24 -0
  91. package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
  92. package/src/components/Dropdown/Dropdown.tsx +422 -0
  93. package/src/components/Dropdown/Dropdown.types.ts +146 -0
  94. package/src/components/Dropdown/README.md +266 -0
  95. package/src/components/Dropdown/icons.tsx +72 -0
  96. package/src/components/Dropdown/index.ts +8 -0
  97. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
  98. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -0
  99. package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -0
  100. package/src/components/DropdownItemCollapsible/README.md +264 -0
  101. package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
  102. package/src/components/DropdownItemCollapsible/index.ts +12 -0
  103. package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
  104. package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
  105. package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
  106. package/src/components/DropdownItemHeading/README.md +573 -0
  107. package/src/components/DropdownItemHeading/icons.tsx +125 -0
  108. package/src/components/DropdownItemHeading/index.ts +3 -0
  109. package/src/components/Input/Input.stories.tsx +583 -0
  110. package/src/components/Input/Input.tsx +204 -0
  111. package/src/components/Input/Input.types.ts +80 -0
  112. package/src/components/Input/icons.tsx +145 -0
  113. package/src/components/Input/index.ts +2 -0
  114. package/src/components/LoginView/LoginView.stories.tsx +148 -0
  115. package/src/components/LoginView/LoginView.tsx +426 -0
  116. package/src/components/LoginView/LoginView.types.ts +52 -0
  117. package/src/components/LoginView/README.md +396 -0
  118. package/src/components/LoginView/icons.tsx +85 -0
  119. package/src/components/LoginView/index.ts +3 -0
  120. package/src/components/Navbar/Navbar.stories.tsx +810 -0
  121. package/src/components/Navbar/Navbar.tsx +755 -0
  122. package/src/components/Navbar/Navbar.types.ts +219 -0
  123. package/src/components/Navbar/README.md +279 -0
  124. package/src/components/Navbar/icons.tsx +102 -0
  125. package/src/components/Navbar/index.ts +8 -0
  126. package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
  127. package/src/components/NavigationBar/NavigationBar.tsx +246 -0
  128. package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
  129. package/src/components/NavigationBar/README.md +469 -0
  130. package/src/components/NavigationBar/index.ts +2 -0
  131. package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
  132. package/src/components/NavigationRail/NavigationRail.tsx +418 -0
  133. package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
  134. package/src/components/NavigationRail/README.md +224 -0
  135. package/src/components/NavigationRail/index.ts +2 -0
  136. package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
  137. package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
  138. package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
  139. package/src/components/NavigationRailCommercial/README.md +251 -0
  140. package/src/components/NavigationRailCommercial/icons.tsx +54 -0
  141. package/src/components/NavigationRailCommercial/index.ts +6 -0
  142. package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -0
  143. package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -0
  144. package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -0
  145. package/src/components/NavigationRailItem/README.md +476 -0
  146. package/src/components/NavigationRailItem/index.ts +2 -0
  147. package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
  148. package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
  149. package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
  150. package/src/components/NavigationRailPanel/README.md +461 -0
  151. package/src/components/NavigationRailPanel/index.ts +6 -0
  152. package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -0
  153. package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -0
  154. package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -0
  155. package/src/components/NavigationRailTypes/README.md +573 -0
  156. package/src/components/NavigationRailTypes/icons.tsx +76 -0
  157. package/src/components/NavigationRailTypes/index.ts +7 -0
  158. package/src/components/Notification/Notification.stories.tsx +513 -0
  159. package/src/components/Notification/Notification.tsx +145 -0
  160. package/src/components/Notification/Notification.types.ts +142 -0
  161. package/src/components/Notification/README.md +409 -0
  162. package/src/components/Notification/index.ts +3 -0
  163. package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
  164. package/src/components/POSConvention/POSConvention.tsx +129 -0
  165. package/src/components/POSConvention/POSConvention.types.ts +38 -0
  166. package/src/components/POSConvention/README.md +123 -0
  167. package/src/components/POSConvention/icons.tsx +45 -0
  168. package/src/components/POSConvention/index.ts +3 -0
  169. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
  170. package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
  171. package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
  172. package/src/components/POSLocationButton/README.md +253 -0
  173. package/src/components/POSLocationButton/icons.tsx +120 -0
  174. package/src/components/POSLocationButton/index.ts +14 -0
  175. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
  176. package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
  177. package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
  178. package/src/components/POSNumberButton/README.md +321 -0
  179. package/src/components/POSNumberButton/index.ts +3 -0
  180. package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
  181. package/src/components/POSProductButton/POSProductButton.tsx +152 -0
  182. package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
  183. package/src/components/POSProductButton/README.md +269 -0
  184. package/src/components/POSProductButton/index.ts +2 -0
  185. package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
  186. package/src/components/POSProductCard/POSProductCard.tsx +208 -0
  187. package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
  188. package/src/components/POSProductCard/README.md +179 -0
  189. package/src/components/POSProductCard/icons.tsx +26 -0
  190. package/src/components/POSProductCard/index.ts +2 -0
  191. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
  192. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
  193. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
  194. package/src/components/POSProductSidebarItems/README.md +198 -0
  195. package/src/components/POSProductSidebarItems/icons.tsx +21 -0
  196. package/src/components/POSProductSidebarItems/index.ts +3 -0
  197. package/src/components/POSTable/POSTable.stories.tsx +737 -0
  198. package/src/components/POSTable/POSTable.tsx +401 -0
  199. package/src/components/POSTable/POSTable.types.ts +83 -0
  200. package/src/components/POSTable/README.md +286 -0
  201. package/src/components/POSTable/index.ts +7 -0
  202. package/src/components/Pagination/Pagination.stories.tsx +555 -0
  203. package/src/components/Pagination/Pagination.tsx +286 -0
  204. package/src/components/Pagination/Pagination.types.ts +93 -0
  205. package/src/components/Pagination/README.md +298 -0
  206. package/src/components/Pagination/icons.tsx +47 -0
  207. package/src/components/Pagination/index.ts +3 -0
  208. package/src/components/Quantity/Quantity.stories.tsx +457 -0
  209. package/src/components/Quantity/Quantity.tsx +289 -0
  210. package/src/components/Quantity/Quantity.types.ts +70 -0
  211. package/src/components/Radio/Radio.stories.tsx +523 -0
  212. package/src/components/Radio/Radio.tsx +170 -0
  213. package/src/components/Radio/Radio.types.ts +122 -0
  214. package/src/components/Select/README.md +299 -0
  215. package/src/components/Select/Select.stories.tsx +705 -0
  216. package/src/components/Select/Select.tsx +457 -0
  217. package/src/components/Select/Select.types.ts +148 -0
  218. package/src/components/Select/icons.tsx +25 -0
  219. package/src/components/Select/index.ts +3 -0
  220. package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
  221. package/src/components/SignUpView/SignUpView.tsx +503 -0
  222. package/src/components/SignUpView/SignUpView.types.ts +58 -0
  223. package/src/components/SignUpView/icons.tsx +71 -0
  224. package/src/components/SignUpView/index.ts +3 -0
  225. package/src/components/Switch/README.md +112 -0
  226. package/src/components/Switch/Switch.stories.tsx +550 -0
  227. package/src/components/Switch/Switch.tsx +246 -0
  228. package/src/components/Switch/Switch.types.ts +67 -0
  229. package/src/components/Table/README.md +369 -0
  230. package/src/components/Table/Table.stories.tsx +805 -0
  231. package/src/components/Table/Table.tsx +688 -0
  232. package/src/components/Table/Table.types.ts +204 -0
  233. package/src/components/Table/index.ts +9 -0
  234. package/src/components/Tabs/README.md +201 -0
  235. package/src/components/Tabs/Tabs.stories.tsx +580 -0
  236. package/src/components/Tabs/Tabs.tsx +356 -0
  237. package/src/components/Tabs/Tabs.types.ts +127 -0
  238. package/src/components/Tabs/icons.tsx +129 -0
  239. package/src/components/Tabs/index.ts +11 -0
  240. package/src/components/Textarea/Textarea.stories.tsx +535 -0
  241. package/src/components/Textarea/Textarea.tsx +188 -0
  242. package/src/components/Textarea/Textarea.types.ts +54 -0
  243. package/src/context/ThemeContext.tsx +99 -0
  244. package/src/context/index.ts +1 -0
  245. package/src/index.css +29 -0
  246. package/src/index.ts +133 -0
  247. package/src/main.tsx +10 -0
  248. package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
  249. package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
  250. package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
  251. package/src/views/LayoutCommercial/README.md +286 -0
  252. package/src/views/LayoutCommercial/index.ts +2 -0
  253. package/src/views/ListView/ListView.stories.tsx +329 -0
  254. package/src/views/ListView/ListView.tsx +570 -0
  255. package/src/views/ListView/ListView.types.ts +211 -0
  256. package/src/views/ListView/icons.tsx +282 -0
  257. package/src/views/ListView/index.ts +11 -0
  258. package/src/views/LoginView/LoginView.stories.tsx +148 -0
  259. package/src/views/LoginView/LoginView.tsx +426 -0
  260. package/src/views/LoginView/LoginView.types.ts +52 -0
  261. package/src/views/LoginView/README.md +396 -0
  262. package/src/views/LoginView/icons.tsx +85 -0
  263. package/src/views/LoginView/index.ts +3 -0
  264. package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
  265. package/src/views/ProductsView/ProductsView.tsx +480 -0
  266. package/src/views/ProductsView/ProductsView.types.ts +238 -0
  267. package/src/views/ProductsView/README.md +312 -0
  268. package/src/views/ProductsView/icons.tsx +38 -0
  269. package/src/views/ProductsView/index.ts +8 -0
  270. package/src/views/RecoverPasswordView/README.md +269 -0
  271. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
  272. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
  273. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
  274. package/src/views/RecoverPasswordView/icons.tsx +17 -0
  275. package/src/views/RecoverPasswordView/index.ts +2 -0
  276. package/src/views/SignUpView/SignUpView.stories.tsx +129 -0
  277. package/src/views/SignUpView/SignUpView.tsx +503 -0
  278. package/src/views/SignUpView/SignUpView.types.ts +58 -0
  279. package/src/views/SignUpView/icons.tsx +71 -0
  280. package/src/views/SignUpView/index.ts +3 -0
  281. package/src/views/TableLayoutView/README.md +268 -0
  282. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
  283. package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
  284. package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
  285. package/src/views/TableLayoutView/icons.tsx +113 -0
  286. package/src/views/TableLayoutView/index.ts +6 -0
  287. package/storybook/main.ts +20 -0
  288. package/storybook/preview.tsx +84 -0
  289. package/storybook/vitest.setup.ts +7 -0
  290. 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
+ ![LayoutCommercial - Figma Design](https://www.figma.com/design/T675Nqfx0myJSt1GmRAYao/SB-Comercial?node-id=145-1383&m=dev)
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,2 @@
1
+ export { LayoutCommercial } from './LayoutCommercial';
2
+ export type { LayoutCommercialProps } from './LayoutCommercial.types';
@@ -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
+ };