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,374 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { useState } from 'react';
3
+ import { LayoutCommercial } from './LayoutCommercial';
4
+ import {
5
+ Cog6ToothIcon,
6
+ ShoppingCartIcon,
7
+ CubeIcon,
8
+ DocumentIcon,
9
+ } from '../../components/NavigationRailCommercial/icons';
10
+
11
+ const meta = {
12
+ title: 'Siesa UI Kit/Views/LayoutCommercial',
13
+ component: LayoutCommercial,
14
+ parameters: {
15
+ layout: 'fullscreen',
16
+ docs: {
17
+ description: {
18
+ component:
19
+ 'Vista de layout comercial completa con NavigationRail lateral, Navbar superior y formulario de configuración de ítems.',
20
+ },
21
+ },
22
+ },
23
+ tags: ['autodocs'],
24
+ argTypes: {
25
+ productName: {
26
+ control: 'text',
27
+ description: 'Nombre del producto en el Navbar',
28
+ table: {
29
+ type: { summary: 'string' },
30
+ category: 'Apariencia',
31
+ },
32
+ },
33
+ userDropdown: {
34
+ control: 'object',
35
+ description: 'Configuración del dropdown de usuario',
36
+ table: {
37
+ type: { summary: 'UserDropdownProps' },
38
+ category: 'Contenido',
39
+ },
40
+ },
41
+ navigationItems: {
42
+ control: 'object',
43
+ description: 'Items del NavigationRail',
44
+ table: {
45
+ type: { summary: 'NavigationRailCommercialMenuItem[]' },
46
+ category: 'Contenido',
47
+ },
48
+ },
49
+ formData: {
50
+ control: 'object',
51
+ description: 'Datos del formulario',
52
+ table: {
53
+ type: { summary: 'FormData' },
54
+ category: 'Estado',
55
+ },
56
+ },
57
+ },
58
+ } satisfies Meta<typeof LayoutCommercial>;
59
+
60
+ export default meta;
61
+ type Story = StoryObj<typeof meta>;
62
+
63
+ // ============================================
64
+ // DATOS DE PRUEBA
65
+ // ============================================
66
+
67
+ const avatarUrl = 'https://avatar.iran.liara.run/public/boy?username=carlos';
68
+
69
+ const defaultUserDropdown = {
70
+ avatar: avatarUrl,
71
+ name: 'Carlos',
72
+ email: 'carlos@siesa.com',
73
+ };
74
+
75
+ const defaultNavigationItems = [
76
+ {
77
+ id: 'config',
78
+ label: 'Configuración',
79
+ icon: <Cog6ToothIcon />,
80
+ active: true,
81
+ isCollapsible: true,
82
+ children: [
83
+ {
84
+ id: 'general',
85
+ label: 'General',
86
+ icon: <Cog6ToothIcon />,
87
+ },
88
+ {
89
+ id: 'users',
90
+ label: 'Usuarios',
91
+ icon: <Cog6ToothIcon />,
92
+ },
93
+ {
94
+ id: 'permissions',
95
+ label: 'Permisos',
96
+ icon: <Cog6ToothIcon />,
97
+ },
98
+ ],
99
+ },
100
+ {
101
+ id: 'cart',
102
+ label: 'Carrito',
103
+ icon: <ShoppingCartIcon />,
104
+ isCollapsible: true,
105
+ children: [
106
+ {
107
+ id: 'active-carts',
108
+ label: 'Carritos activos',
109
+ icon: <ShoppingCartIcon />,
110
+ },
111
+ {
112
+ id: 'pending',
113
+ label: 'Pendientes',
114
+ icon: <ShoppingCartIcon />,
115
+ },
116
+ ],
117
+ },
118
+ {
119
+ id: 'products',
120
+ label: 'Productos',
121
+ icon: <CubeIcon />,
122
+ isCollapsible: true,
123
+ children: [
124
+ {
125
+ id: 'catalog',
126
+ label: 'Catálogo',
127
+ icon: <CubeIcon />,
128
+ },
129
+ {
130
+ id: 'inventory',
131
+ label: 'Inventario',
132
+ icon: <CubeIcon />,
133
+ },
134
+ {
135
+ id: 'categories',
136
+ label: 'Categorías',
137
+ icon: <CubeIcon />,
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ id: 'documents',
143
+ label: 'Documentos',
144
+ icon: <DocumentIcon />,
145
+ isCollapsible: true,
146
+ children: [
147
+ {
148
+ id: 'invoices',
149
+ label: 'Facturas',
150
+ icon: <DocumentIcon />,
151
+ },
152
+ {
153
+ id: 'orders',
154
+ label: 'Pedidos',
155
+ icon: <DocumentIcon />,
156
+ },
157
+ {
158
+ id: 'reports',
159
+ label: 'Reportes',
160
+ icon: <DocumentIcon />,
161
+ },
162
+ ],
163
+ },
164
+ ];
165
+
166
+ const defaultFormData = {
167
+ codigoItem: '',
168
+ nombre: '',
169
+ tipoItem: 'inventario' as const,
170
+ extension1: '',
171
+ extension2: '',
172
+ modeloCosto: '',
173
+ configuracionSerial: '',
174
+ manejaLotes: '',
175
+ manejaSeriales: false,
176
+ procesoManufactura: false,
177
+ puedeComprarse: false,
178
+ puedeVenderse: false,
179
+ permitirExtension1: false,
180
+ permitirExtension2: false,
181
+ permitirModeloCosto: false,
182
+ permitirManejaLotes: false,
183
+ permitirManejaSeriales: false,
184
+ permitirConfiguracionSerial: false,
185
+ permitirProcesoManufactura: false,
186
+ permitirCompras: false,
187
+ permitirVentas: false,
188
+ };
189
+
190
+ // ============================================
191
+ // 1. PLAYGROUND INTERACTIVO
192
+ // ============================================
193
+ export const Playground: Story = {
194
+ args: {
195
+ productName: 'SB Comercial',
196
+ userDropdown: defaultUserDropdown,
197
+ navigationItems: defaultNavigationItems,
198
+ formData: defaultFormData,
199
+ },
200
+ render: (args) => {
201
+ const [formData, setFormData] = useState(args.formData);
202
+
203
+ return (
204
+ <LayoutCommercial
205
+ {...args}
206
+ formData={formData}
207
+ onFormChange={setFormData}
208
+ />
209
+ );
210
+ },
211
+ };
212
+
213
+ // ============================================
214
+ // 2. ESTADO: FORMULARIO VACÍO
215
+ // ============================================
216
+ export const FormularioVacio: Story = {
217
+ render: () => {
218
+ const [formData, setFormData] = useState(defaultFormData);
219
+
220
+ return (
221
+ <LayoutCommercial
222
+ productName="SB Comercial"
223
+ userDropdown={defaultUserDropdown}
224
+ navigationItems={defaultNavigationItems}
225
+ formData={formData}
226
+ onFormChange={setFormData}
227
+ />
228
+ );
229
+ },
230
+ };
231
+
232
+ // ============================================
233
+ // 3. ESTADO: FORMULARIO CON DATOS
234
+ // ============================================
235
+ export const FormularioConDatos: Story = {
236
+ render: () => {
237
+ const [formData, setFormData] = useState({
238
+ codigoItem: 'ITEM-001',
239
+ nombre: 'Producto de Ejemplo',
240
+ tipoItem: 'inventario' as const,
241
+ extension1: 'azul',
242
+ extension2: 'm',
243
+ modeloCosto: 'fifo',
244
+ configuracionSerial: '1234567890123456789O',
245
+ manejaLotes: 'si',
246
+ manejaSeriales: true,
247
+ procesoManufactura: true,
248
+ puedeComprarse: true,
249
+ puedeVenderse: true,
250
+ permitirExtension1: true,
251
+ permitirExtension2: true,
252
+ permitirModeloCosto: false,
253
+ permitirManejaLotes: true,
254
+ permitirManejaSeriales: true,
255
+ permitirConfiguracionSerial: false,
256
+ permitirProcesoManufactura: true,
257
+ permitirCompras: true,
258
+ permitirVentas: true,
259
+ });
260
+
261
+ return (
262
+ <LayoutCommercial
263
+ productName="SB Comercial"
264
+ userDropdown={defaultUserDropdown}
265
+ navigationItems={defaultNavigationItems}
266
+ formData={formData}
267
+ onFormChange={setFormData}
268
+ />
269
+ );
270
+ },
271
+ };
272
+
273
+ // ============================================
274
+ // 4. ESTADO: TIPO SERVICIO
275
+ // ============================================
276
+ export const TipoServicio: Story = {
277
+ render: () => {
278
+ const [formData, setFormData] = useState({
279
+ ...defaultFormData,
280
+ codigoItem: 'SERV-001',
281
+ nombre: 'Servicio de Consultoría',
282
+ tipoItem: 'servicio' as const,
283
+ puedeComprarse: false,
284
+ puedeVenderse: true,
285
+ });
286
+
287
+ return (
288
+ <LayoutCommercial
289
+ productName="SB Comercial"
290
+ userDropdown={defaultUserDropdown}
291
+ navigationItems={defaultNavigationItems}
292
+ formData={formData}
293
+ onFormChange={setFormData}
294
+ />
295
+ );
296
+ },
297
+ };
298
+
299
+ // ============================================
300
+ // 5. ESTADO: SIN USUARIO
301
+ // ============================================
302
+ export const SinUsuario: Story = {
303
+ render: () => {
304
+ const [formData, setFormData] = useState(defaultFormData);
305
+
306
+ return (
307
+ <LayoutCommercial
308
+ productName="SB Comercial"
309
+ navigationItems={defaultNavigationItems}
310
+ formData={formData}
311
+ onFormChange={setFormData}
312
+ />
313
+ );
314
+ },
315
+ };
316
+
317
+ // ============================================
318
+ // 6. ESTADO: SIN NAVEGACIÓN
319
+ // ============================================
320
+ export const SinNavegacion: Story = {
321
+ render: () => {
322
+ const [formData, setFormData] = useState(defaultFormData);
323
+
324
+ return (
325
+ <LayoutCommercial
326
+ productName="SB Comercial"
327
+ userDropdown={defaultUserDropdown}
328
+ formData={formData}
329
+ onFormChange={setFormData}
330
+ />
331
+ );
332
+ },
333
+ };
334
+
335
+ // ============================================
336
+ // 7. ESTADO: CREACIÓN ÍTEM (BASADO EN FIGMA)
337
+ // ============================================
338
+ export const CreacionItem: Story = {
339
+ render: () => {
340
+ const [formData, setFormData] = useState({
341
+ codigoItem: '',
342
+ nombre: '',
343
+ tipoItem: 'inventario' as const,
344
+ extension1: '',
345
+ extension2: '',
346
+ modeloCosto: '',
347
+ configuracionSerial: '',
348
+ manejaLotes: '',
349
+ manejaSeriales: false,
350
+ procesoManufactura: false,
351
+ puedeComprarse: true,
352
+ puedeVenderse: true,
353
+ permitirExtension1: false,
354
+ permitirExtension2: false,
355
+ permitirModeloCosto: false,
356
+ permitirManejaLotes: false,
357
+ permitirManejaSeriales: false,
358
+ permitirConfiguracionSerial: false,
359
+ permitirProcesoManufactura: false,
360
+ permitirCompras: true,
361
+ permitirVentas: true,
362
+ });
363
+
364
+ return (
365
+ <LayoutCommercial
366
+ productName="SB Comercial"
367
+ userDropdown={defaultUserDropdown}
368
+ navigationItems={defaultNavigationItems}
369
+ formData={formData}
370
+ onFormChange={setFormData}
371
+ />
372
+ );
373
+ },
374
+ };
@@ -0,0 +1,125 @@
1
+ import React, { useState } from 'react';
2
+ import { Navbar } from '../../components/Navbar';
3
+ import { NavigationRailCommercial } from '../../components/NavigationRailCommercial';
4
+ import type { LayoutCommercialProps } from './LayoutCommercial.types';
5
+
6
+ /**
7
+ * LayoutCommercial - Layout general comercial del sistema Siesa
8
+ *
9
+ * Layout reutilizable que implementa la estructura base del sistema comercial
10
+ * con NavigationRail lateral, Navbar superior y área de contenido dinámico.
11
+ * Diseñado para ser usado como wrapper en diferentes vistas comerciales.
12
+ *
13
+ * **Composición:**
14
+ * - Navbar: Barra superior con logo Siesa, título del producto y dropdown de usuario
15
+ * - NavigationRailCommercial: Rail de navegación lateral con iconos y búsqueda
16
+ * - Área de contenido: Contenido dinámico pasado como children
17
+ *
18
+ * **Mejores prácticas implementadas:**
19
+ * - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
20
+ * - Dark mode con estrategia 'class' (darkMode: 'class')
21
+ * - Tokens de color consistentes con la documentación
22
+ * - Responsive design mobile-first con breakpoints md:, lg:, xl:
23
+ * - Composición con componentes del sistema (NO reimplementación)
24
+ * - Type safety con TypeScript estricto
25
+ *
26
+ * @see docs/colors.md - Sistema de colores
27
+ * @see docs/typography.md - Sistema tipográfico
28
+ * @see docs/spacing.md - Sistema de espaciado
29
+ * @see src/components/Navbar - Componente Navbar reutilizado
30
+ * @see src/components/NavigationRailCommercial - Componente NavigationRail reutilizado
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * <LayoutCommercial
35
+ * productName="SB Comercial"
36
+ * userDropdown={{
37
+ * avatar: '/avatar.jpg',
38
+ * name: 'Carlos',
39
+ * email: 'carlos@siesa.com',
40
+ * }}
41
+ * navigationItems={navigationItems}
42
+ * >
43
+ * <div>
44
+ * <h1>Mi contenido personalizado</h1>
45
+ * <p>Cualquier contenido puede ir aquí</p>
46
+ * </div>
47
+ * </LayoutCommercial>
48
+ * ```
49
+ */
50
+ export const LayoutCommercial: React.FC<LayoutCommercialProps> = ({
51
+ productName = 'SB Comercial',
52
+ userDropdown,
53
+ navigationItems,
54
+ children,
55
+ className = '',
56
+ contentClassName = '',
57
+ }) => {
58
+ // Estado local para el NavigationRail
59
+ const [navState, setNavState] = useState<'collapsed' | 'expanded' | 'hover' | 'searcher'>('collapsed');
60
+
61
+ // Handler para cambio de estado del NavigationRail
62
+ const handleNavStateChange = (state: 'collapsed' | 'expanded' | 'hover' | 'searcher' | undefined) => {
63
+ if (state) {
64
+ setNavState(state);
65
+ }
66
+ };
67
+
68
+ return (
69
+ <div
70
+ className={[
71
+ // ===== BASE CONTAINER =====
72
+ 'h-screen', // Altura fija de pantalla completa
73
+ 'w-full',
74
+ 'bg-white', // Fondo blanco para Navbar y NavigationRail
75
+ 'dark:bg-dark-bg-primary',
76
+ 'flex',
77
+ 'flex-col',
78
+ 'overflow-hidden', // Prevenir scroll en contenedor principal
79
+ className,
80
+ ]
81
+ .join(' ')
82
+ .replace(/\s+/g, ' ')
83
+ .trim()}
84
+ >
85
+ {/* ===== NAVBAR ===== */}
86
+ <Navbar
87
+ productName={productName}
88
+ userDropdown={userDropdown}
89
+ hideActionButtons
90
+ showSiesaLogoLeading
91
+ showBusinessLogo={false}
92
+ className="bg-white dark:bg-dark-bg-primary"
93
+ />
94
+
95
+ {/* ===== LAYOUT: NAVIGATION RAIL + CONTENT ===== */}
96
+ <div className="flex flex-1 overflow-hidden">
97
+ {/* ===== NAVIGATION RAIL ===== */}
98
+ <NavigationRailCommercial
99
+ state={navState}
100
+ items={navigationItems}
101
+ showSearchButton={false}
102
+ onStateChange={handleNavStateChange}
103
+ onItemClick={(item) => console.log('Item clicked:', item)}
104
+ onItemHover={(item) => console.log('Item hover:', item)}
105
+ />
106
+
107
+ {/* ===== CONTENT AREA ===== */}
108
+ <div
109
+ className={[
110
+ 'flex-1',
111
+ 'overflow-y-auto',
112
+ 'bg-gray-50',
113
+ 'dark:bg-dark-bg-primary',
114
+ contentClassName,
115
+ ]
116
+ .join(' ')
117
+ .replace(/\s+/g, ' ')
118
+ .trim()}
119
+ >
120
+ {children}
121
+ </div>
122
+ </div>
123
+ </div>
124
+ );
125
+ };
@@ -0,0 +1,54 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { UserDropdownProps } from '../../components/Navbar/Navbar.types';
3
+ import type { NavigationRailCommercialMenuItem } from '../../components/NavigationRailCommercial/NavigationRailCommercial.types';
4
+
5
+ /**
6
+ * Props del componente LayoutCommercial
7
+ *
8
+ * Layout general comercial con NavigationRail lateral, Navbar superior y área
9
+ * de contenido dinámico. Diseñado para ser reutilizado en diferentes vistas
10
+ * del sistema comercial.
11
+ *
12
+ * **Mejores prácticas implementadas:**
13
+ * - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
14
+ * - Dark mode con estrategia 'class' (darkMode: 'class')
15
+ * - Tokens de color consistentes con la documentación
16
+ * - Responsive design mobile-first
17
+ * - Composición con componentes del sistema
18
+ *
19
+ * @see docs/colors.md - Sistema de colores
20
+ * @see docs/typography.md - Sistema tipográfico
21
+ * @see docs/spacing.md - Sistema de espaciado
22
+ */
23
+ export interface LayoutCommercialProps {
24
+ /**
25
+ * Nombre del producto que aparece en el Navbar
26
+ * @default 'SB Comercial'
27
+ */
28
+ productName?: string;
29
+
30
+ /**
31
+ * Configuración del dropdown de usuario en el Navbar
32
+ */
33
+ userDropdown?: UserDropdownProps;
34
+
35
+ /**
36
+ * Items de navegación para el NavigationRail
37
+ */
38
+ navigationItems?: NavigationRailCommercialMenuItem[];
39
+
40
+ /**
41
+ * Contenido dinámico que se renderiza en el área principal
42
+ */
43
+ children?: ReactNode;
44
+
45
+ /**
46
+ * Clases CSS adicionales para el contenedor principal
47
+ */
48
+ className?: string;
49
+
50
+ /**
51
+ * Clases CSS adicionales para el área de contenido
52
+ */
53
+ contentClassName?: string;
54
+ }