siesa-ui-kit 1.0.4 → 1.0.5
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 +89 -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 +2401 -2445
- package/claude/prompts/component-template.md +121 -121
- package/claude/settings.local.json +61 -72
- package/docs/border-radius.md +1261 -1261
- package/docs/colors.md +832 -832
- package/docs/dark-mode-guide.md +1426 -1426
- package/docs/filters.md +1243 -1243
- package/docs/icons.md +1283 -1264
- package/docs/shadows.md +1377 -1377
- package/docs/spacing.md +1684 -1684
- package/docs/typography.md +1268 -1268
- package/package.json +83 -111
- package/postcss.config.cjs +6 -6
- package/src/App.css +42 -42
- package/src/App.tsx +8 -8
- package/src/ButtonTest.tsx +147 -147
- package/src/assets/fonts/README.md +261 -261
- package/src/components/Alert/Alert.stories.tsx +332 -332
- package/src/components/Alert/Alert.tsx +106 -106
- package/src/components/Alert/Alert.types.ts +54 -54
- package/src/components/Avatar/Avatar.stories.tsx +494 -494
- package/src/components/Avatar/Avatar.tsx +143 -143
- package/src/components/Avatar/Avatar.types.ts +53 -53
- package/src/components/Badge/Badge.stories.tsx +339 -339
- package/src/components/Badge/Badge.tsx +278 -278
- package/src/components/Badge/Badge.types.ts +58 -58
- package/src/components/Button/Button.stories.tsx +950 -950
- package/src/components/Button/Button.tsx +337 -337
- package/src/components/Button/Button.types.ts +180 -180
- package/src/components/Button/icons.tsx +87 -48
- package/src/components/Button/index.ts +3 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +453 -453
- package/src/components/Checkbox/Checkbox.tsx +208 -208
- package/src/components/Checkbox/Checkbox.types.ts +61 -61
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
- package/src/components/DescriptionList/DescriptionList.tsx +96 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +29 -29
- package/src/components/Divider/Divider.stories.tsx +263 -263
- package/src/components/Divider/Divider.tsx +80 -80
- package/src/components/Divider/Divider.types.ts +24 -24
- package/src/components/Dropdown/Dropdown.stories.tsx +552 -552
- package/src/components/Dropdown/Dropdown.tsx +422 -422
- package/src/components/Dropdown/Dropdown.types.ts +146 -146
- package/src/components/Dropdown/README.md +266 -266
- package/src/components/Dropdown/icons.tsx +72 -72
- package/src/components/Dropdown/index.ts +8 -8
- package/src/components/Input/Input.stories.tsx +583 -583
- package/src/components/Input/Input.tsx +204 -204
- package/src/components/Input/Input.types.ts +80 -80
- package/src/components/Input/icons.tsx +145 -145
- package/src/components/Input/index.ts +2 -2
- package/src/components/LoginView/LoginView.stories.tsx +148 -148
- package/src/components/LoginView/LoginView.tsx +426 -426
- package/src/components/LoginView/LoginView.types.ts +52 -52
- package/src/components/LoginView/README.md +396 -396
- package/src/components/LoginView/icons.tsx +85 -85
- package/src/components/LoginView/index.ts +3 -3
- package/src/components/Navbar/Navbar.stories.tsx +810 -810
- package/src/components/Navbar/Navbar.tsx +755 -755
- package/src/components/Navbar/Navbar.types.ts +219 -219
- package/src/components/Navbar/README.md +279 -279
- package/src/components/Navbar/icons.tsx +102 -102
- package/src/components/Navbar/index.ts +8 -8
- package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -406
- package/src/components/NavigationBar/NavigationBar.tsx +246 -246
- package/src/components/NavigationBar/NavigationBar.types.ts +74 -74
- package/src/components/NavigationBar/README.md +469 -469
- package/src/components/NavigationBar/index.ts +2 -2
- package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -417
- package/src/components/NavigationRail/NavigationRail.tsx +418 -418
- package/src/components/NavigationRail/NavigationRail.types.ts +109 -109
- package/src/components/NavigationRail/README.md +224 -224
- package/src/components/NavigationRail/index.ts +2 -2
- package/src/components/Notification/Notification.stories.tsx +513 -513
- package/src/components/Notification/Notification.tsx +145 -145
- package/src/components/Notification/Notification.types.ts +142 -142
- package/src/components/Notification/README.md +409 -409
- package/src/components/Notification/index.ts +3 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
- package/src/components/POSConvention/POSConvention.tsx +129 -129
- package/src/components/POSConvention/POSConvention.types.ts +38 -38
- package/src/components/POSConvention/README.md +123 -123
- package/src/components/POSConvention/icons.tsx +45 -45
- package/src/components/POSConvention/index.ts +3 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
- package/src/components/POSLocationButton/README.md +253 -253
- package/src/components/POSLocationButton/icons.tsx +120 -120
- package/src/components/POSLocationButton/index.ts +14 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
- package/src/components/POSNumberButton/README.md +321 -321
- package/src/components/POSNumberButton/index.ts +3 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
- package/src/components/POSProductButton/POSProductButton.tsx +152 -152
- package/src/components/POSProductButton/POSProductButton.types.ts +46 -46
- package/src/components/POSProductButton/README.md +269 -269
- package/src/components/POSProductButton/index.ts +2 -2
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
- package/src/components/POSProductCard/POSProductCard.tsx +208 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
- package/src/components/POSProductCard/README.md +179 -179
- package/src/components/POSProductCard/icons.tsx +26 -26
- package/src/components/POSProductCard/index.ts +2 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
- package/src/components/POSProductSidebarItems/README.md +198 -198
- package/src/components/POSProductSidebarItems/icons.tsx +21 -21
- package/src/components/POSProductSidebarItems/index.ts +3 -3
- package/src/components/POSTable/POSTable.stories.tsx +737 -737
- package/src/components/POSTable/POSTable.tsx +401 -401
- package/src/components/POSTable/POSTable.types.ts +83 -83
- package/src/components/POSTable/README.md +286 -286
- package/src/components/POSTable/index.ts +7 -7
- package/src/components/Pagination/Pagination.stories.tsx +555 -555
- package/src/components/Pagination/Pagination.tsx +286 -286
- package/src/components/Pagination/Pagination.types.ts +93 -93
- package/src/components/Pagination/README.md +298 -298
- package/src/components/Pagination/icons.tsx +47 -47
- package/src/components/Pagination/index.ts +3 -3
- package/src/components/Quantity/Quantity.stories.tsx +457 -457
- package/src/components/Quantity/Quantity.tsx +289 -289
- package/src/components/Quantity/Quantity.types.ts +70 -70
- package/src/components/Radio/Radio.stories.tsx +523 -523
- package/src/components/Radio/Radio.tsx +170 -170
- package/src/components/Radio/Radio.types.ts +122 -122
- package/src/components/Select/README.md +299 -299
- package/src/components/Select/Select.stories.tsx +673 -705
- package/src/components/Select/Select.tsx +454 -457
- package/src/components/Select/Select.types.ts +148 -148
- package/src/components/Select/icons.tsx +50 -25
- package/src/components/Select/index.ts +3 -3
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
- package/src/components/SignUpView/SignUpView.tsx +503 -503
- package/src/components/SignUpView/SignUpView.types.ts +58 -58
- package/src/components/SignUpView/icons.tsx +71 -71
- package/src/components/SignUpView/index.ts +3 -3
- package/src/components/Switch/README.md +112 -112
- package/src/components/Switch/Switch.stories.tsx +550 -550
- package/src/components/Switch/Switch.tsx +246 -246
- package/src/components/Switch/Switch.types.ts +67 -67
- package/src/components/Table/README.md +369 -369
- package/src/components/Table/Table.stories.tsx +805 -805
- package/src/components/Table/Table.tsx +688 -688
- package/src/components/Table/Table.types.ts +204 -204
- package/src/components/Table/index.ts +9 -9
- package/src/components/Tabs/README.md +201 -201
- package/src/components/Tabs/Tabs.stories.tsx +580 -580
- package/src/components/Tabs/Tabs.tsx +356 -356
- package/src/components/Tabs/Tabs.types.ts +127 -127
- package/src/components/Tabs/icons.tsx +129 -129
- package/src/components/Tabs/index.ts +11 -11
- package/src/components/Textarea/Textarea.stories.tsx +535 -535
- package/src/components/Textarea/Textarea.tsx +188 -188
- package/src/components/Textarea/Textarea.types.ts +54 -54
- package/src/context/ThemeContext.tsx +99 -99
- package/src/context/index.ts +1 -1
- package/src/index.css +29 -29
- package/src/index.ts +39 -133
- package/src/main.tsx +10 -10
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
- package/src/views/ProductsView/ProductsView.tsx +480 -480
- package/src/views/ProductsView/ProductsView.types.ts +238 -238
- package/src/views/ProductsView/README.md +312 -312
- package/src/views/ProductsView/icons.tsx +38 -38
- package/src/views/ProductsView/index.ts +8 -8
- package/src/views/RecoverPasswordView/README.md +269 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -131
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -56
- package/src/views/RecoverPasswordView/icons.tsx +17 -17
- package/src/views/RecoverPasswordView/index.ts +2 -2
- package/src/views/TableLayoutView/README.md +268 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
- package/src/views/TableLayoutView/icons.tsx +113 -113
- package/src/views/TableLayoutView/index.ts +6 -6
- package/storybook/main.ts +19 -19
- package/storybook/preview.tsx +84 -84
- package/storybook/vitest.setup.ts +6 -6
- package/tailwind.config.js +128 -128
- package/claude/prompts/siesa-ui-kit.md +0 -28
- package/dist/ButtonTest.d.ts +0 -6
- package/dist/ButtonTest.d.ts.map +0 -1
- package/dist/components/Alert/Alert.d.ts +0 -23
- package/dist/components/Alert/Alert.d.ts.map +0 -1
- package/dist/components/Alert/Alert.types.d.ts +0 -46
- package/dist/components/Alert/Alert.types.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.d.ts +0 -41
- package/dist/components/Avatar/Avatar.d.ts.map +0 -1
- package/dist/components/Avatar/Avatar.types.d.ts +0 -46
- package/dist/components/Avatar/Avatar.types.d.ts.map +0 -1
- package/dist/components/Badge/Badge.d.ts +0 -42
- package/dist/components/Badge/Badge.d.ts.map +0 -1
- package/dist/components/Badge/Badge.types.d.ts +0 -32
- package/dist/components/Badge/Badge.types.d.ts.map +0 -1
- package/dist/components/Button/Button.d.ts +0 -84
- package/dist/components/Button/Button.d.ts.map +0 -1
- package/dist/components/Button/Button.types.d.ts +0 -162
- package/dist/components/Button/Button.types.d.ts.map +0 -1
- package/dist/components/Button/icons.d.ts +0 -27
- package/dist/components/Button/icons.d.ts.map +0 -1
- package/dist/components/Button/index.d.ts +0 -4
- package/dist/components/Button/index.d.ts.map +0 -1
- package/dist/components/Checkbox/Checkbox.d.ts +0 -31
- package/dist/components/Checkbox/Checkbox.d.ts.map +0 -1
- package/dist/components/Checkbox/Checkbox.types.d.ts +0 -53
- package/dist/components/Checkbox/Checkbox.types.d.ts.map +0 -1
- package/dist/components/DescriptionList/DescriptionList.d.ts +0 -38
- package/dist/components/DescriptionList/DescriptionList.d.ts.map +0 -1
- package/dist/components/DescriptionList/DescriptionList.types.d.ts +0 -27
- package/dist/components/DescriptionList/DescriptionList.types.d.ts.map +0 -1
- package/dist/components/Divider/Divider.d.ts +0 -33
- package/dist/components/Divider/Divider.d.ts.map +0 -1
- package/dist/components/Divider/Divider.types.d.ts +0 -22
- package/dist/components/Divider/Divider.types.d.ts.map +0 -1
- package/dist/components/Dropdown/Dropdown.d.ts +0 -66
- package/dist/components/Dropdown/Dropdown.d.ts.map +0 -1
- package/dist/components/Dropdown/Dropdown.types.d.ts +0 -124
- package/dist/components/Dropdown/Dropdown.types.d.ts.map +0 -1
- package/dist/components/Dropdown/icons.d.ts +0 -10
- package/dist/components/Dropdown/icons.d.ts.map +0 -1
- package/dist/components/Dropdown/index.d.ts +0 -4
- package/dist/components/Dropdown/index.d.ts.map +0 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts +0 -101
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +0 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +0 -116
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +0 -1
- package/dist/components/DropdownItemCollapsible/icons.d.ts +0 -19
- package/dist/components/DropdownItemCollapsible/icons.d.ts.map +0 -1
- package/dist/components/DropdownItemCollapsible/index.d.ts +0 -9
- package/dist/components/DropdownItemCollapsible/index.d.ts.map +0 -1
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts +0 -75
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts.map +0 -1
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts +0 -85
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts.map +0 -1
- package/dist/components/DropdownItemHeading/icons.d.ts +0 -48
- package/dist/components/DropdownItemHeading/icons.d.ts.map +0 -1
- package/dist/components/DropdownItemHeading/index.d.ts +0 -4
- package/dist/components/DropdownItemHeading/index.d.ts.map +0 -1
- package/dist/components/Input/Input.d.ts +0 -40
- package/dist/components/Input/Input.d.ts.map +0 -1
- package/dist/components/Input/Input.types.d.ts +0 -71
- package/dist/components/Input/Input.types.d.ts.map +0 -1
- package/dist/components/Input/icons.d.ts +0 -15
- package/dist/components/Input/icons.d.ts.map +0 -1
- package/dist/components/Input/index.d.ts +0 -3
- package/dist/components/Input/index.d.ts.map +0 -1
- package/dist/components/LoginView/LoginView.d.ts +0 -36
- package/dist/components/LoginView/LoginView.d.ts.map +0 -1
- package/dist/components/LoginView/LoginView.types.d.ts +0 -46
- package/dist/components/LoginView/LoginView.types.d.ts.map +0 -1
- package/dist/components/LoginView/icons.d.ts +0 -18
- package/dist/components/LoginView/icons.d.ts.map +0 -1
- package/dist/components/LoginView/index.d.ts +0 -4
- package/dist/components/LoginView/index.d.ts.map +0 -1
- package/dist/components/Navbar/Navbar.d.ts +0 -63
- package/dist/components/Navbar/Navbar.d.ts.map +0 -1
- package/dist/components/Navbar/Navbar.types.d.ts +0 -194
- package/dist/components/Navbar/Navbar.types.d.ts.map +0 -1
- package/dist/components/Navbar/icons.d.ts +0 -12
- package/dist/components/Navbar/icons.d.ts.map +0 -1
- package/dist/components/Navbar/index.d.ts +0 -4
- package/dist/components/Navbar/index.d.ts.map +0 -1
- package/dist/components/NavigationBar/NavigationBar.d.ts +0 -75
- package/dist/components/NavigationBar/NavigationBar.d.ts.map +0 -1
- package/dist/components/NavigationBar/NavigationBar.types.d.ts +0 -63
- package/dist/components/NavigationBar/NavigationBar.types.d.ts.map +0 -1
- package/dist/components/NavigationBar/index.d.ts +0 -3
- package/dist/components/NavigationBar/index.d.ts.map +0 -1
- package/dist/components/NavigationRail/NavigationRail.d.ts +0 -7
- package/dist/components/NavigationRail/NavigationRail.d.ts.map +0 -1
- package/dist/components/NavigationRail/NavigationRail.types.d.ts +0 -92
- package/dist/components/NavigationRail/NavigationRail.types.d.ts.map +0 -1
- package/dist/components/NavigationRail/index.d.ts +0 -3
- package/dist/components/NavigationRail/index.d.ts.map +0 -1
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +0 -122
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +0 -1
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +0 -139
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +0 -1
- package/dist/components/NavigationRailCommercial/icons.d.ts +0 -33
- package/dist/components/NavigationRailCommercial/icons.d.ts.map +0 -1
- package/dist/components/NavigationRailCommercial/index.d.ts +0 -4
- package/dist/components/NavigationRailCommercial/index.d.ts.map +0 -1
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts +0 -90
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +0 -1
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +0 -162
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +0 -1
- package/dist/components/NavigationRailItem/index.d.ts +0 -3
- package/dist/components/NavigationRailItem/index.d.ts.map +0 -1
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts +0 -124
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts.map +0 -1
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts +0 -154
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts.map +0 -1
- package/dist/components/NavigationRailPanel/index.d.ts +0 -3
- package/dist/components/NavigationRailPanel/index.d.ts.map +0 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts +0 -99
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +0 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +0 -152
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +0 -1
- package/dist/components/NavigationRailTypes/icons.d.ts +0 -44
- package/dist/components/NavigationRailTypes/icons.d.ts.map +0 -1
- package/dist/components/NavigationRailTypes/index.d.ts +0 -4
- package/dist/components/NavigationRailTypes/index.d.ts.map +0 -1
- package/dist/components/Notification/Notification.d.ts +0 -52
- package/dist/components/Notification/Notification.d.ts.map +0 -1
- package/dist/components/Notification/Notification.types.d.ts +0 -138
- package/dist/components/Notification/Notification.types.d.ts.map +0 -1
- package/dist/components/Notification/index.d.ts +0 -3
- package/dist/components/Notification/index.d.ts.map +0 -1
- package/dist/components/POSConvention/POSConvention.d.ts +0 -55
- package/dist/components/POSConvention/POSConvention.d.ts.map +0 -1
- package/dist/components/POSConvention/POSConvention.types.d.ts +0 -37
- package/dist/components/POSConvention/POSConvention.types.d.ts.map +0 -1
- package/dist/components/POSConvention/icons.d.ts +0 -21
- package/dist/components/POSConvention/icons.d.ts.map +0 -1
- package/dist/components/POSConvention/index.d.ts +0 -4
- package/dist/components/POSConvention/index.d.ts.map +0 -1
- package/dist/components/POSLocationButton/POSLocationButton.d.ts +0 -73
- package/dist/components/POSLocationButton/POSLocationButton.d.ts.map +0 -1
- package/dist/components/POSLocationButton/POSLocationButton.types.d.ts +0 -75
- package/dist/components/POSLocationButton/POSLocationButton.types.d.ts.map +0 -1
- package/dist/components/POSLocationButton/icons.d.ts +0 -37
- package/dist/components/POSLocationButton/icons.d.ts.map +0 -1
- package/dist/components/POSLocationButton/index.d.ts +0 -4
- package/dist/components/POSLocationButton/index.d.ts.map +0 -1
- package/dist/components/POSNumberButton/POSNumberButton.d.ts +0 -61
- package/dist/components/POSNumberButton/POSNumberButton.d.ts.map +0 -1
- package/dist/components/POSNumberButton/POSNumberButton.types.d.ts +0 -43
- package/dist/components/POSNumberButton/POSNumberButton.types.d.ts.map +0 -1
- package/dist/components/POSNumberButton/index.d.ts +0 -3
- package/dist/components/POSNumberButton/index.d.ts.map +0 -1
- package/dist/components/POSProductButton/POSProductButton.d.ts +0 -59
- package/dist/components/POSProductButton/POSProductButton.d.ts.map +0 -1
- package/dist/components/POSProductButton/POSProductButton.types.d.ts +0 -40
- package/dist/components/POSProductButton/POSProductButton.types.d.ts.map +0 -1
- package/dist/components/POSProductButton/index.d.ts +0 -3
- package/dist/components/POSProductButton/index.d.ts.map +0 -1
- package/dist/components/POSProductCard/POSProductCard.d.ts +0 -68
- package/dist/components/POSProductCard/POSProductCard.d.ts.map +0 -1
- package/dist/components/POSProductCard/POSProductCard.types.d.ts +0 -67
- package/dist/components/POSProductCard/POSProductCard.types.d.ts.map +0 -1
- package/dist/components/POSProductCard/icons.d.ts +0 -10
- package/dist/components/POSProductCard/icons.d.ts.map +0 -1
- package/dist/components/POSProductCard/index.d.ts +0 -3
- package/dist/components/POSProductCard/index.d.ts.map +0 -1
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts +0 -57
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts.map +0 -1
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts +0 -85
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts.map +0 -1
- package/dist/components/POSProductSidebarItems/icons.d.ts +0 -9
- package/dist/components/POSProductSidebarItems/icons.d.ts.map +0 -1
- package/dist/components/POSProductSidebarItems/index.d.ts +0 -4
- package/dist/components/POSProductSidebarItems/index.d.ts.map +0 -1
- package/dist/components/POSTable/POSTable.d.ts +0 -75
- package/dist/components/POSTable/POSTable.d.ts.map +0 -1
- package/dist/components/POSTable/POSTable.types.d.ts +0 -71
- package/dist/components/POSTable/POSTable.types.d.ts.map +0 -1
- package/dist/components/POSTable/index.d.ts +0 -3
- package/dist/components/POSTable/index.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.d.ts +0 -29
- package/dist/components/Pagination/Pagination.d.ts.map +0 -1
- package/dist/components/Pagination/Pagination.types.d.ts +0 -79
- package/dist/components/Pagination/Pagination.types.d.ts.map +0 -1
- package/dist/components/Pagination/icons.d.ts +0 -18
- package/dist/components/Pagination/icons.d.ts.map +0 -1
- package/dist/components/Pagination/index.d.ts +0 -4
- package/dist/components/Pagination/index.d.ts.map +0 -1
- package/dist/components/Quantity/Quantity.d.ts +0 -38
- package/dist/components/Quantity/Quantity.d.ts.map +0 -1
- package/dist/components/Quantity/Quantity.types.d.ts +0 -59
- package/dist/components/Quantity/Quantity.types.d.ts.map +0 -1
- package/dist/components/Radio/Radio.d.ts +0 -45
- package/dist/components/Radio/Radio.d.ts.map +0 -1
- package/dist/components/Radio/Radio.types.d.ts +0 -115
- package/dist/components/Radio/Radio.types.d.ts.map +0 -1
- package/dist/components/Select/Select.d.ts +0 -37
- package/dist/components/Select/Select.d.ts.map +0 -1
- package/dist/components/Select/Select.types.d.ts +0 -124
- package/dist/components/Select/Select.types.d.ts.map +0 -1
- package/dist/components/Select/icons.d.ts +0 -20
- package/dist/components/Select/icons.d.ts.map +0 -1
- package/dist/components/Select/index.d.ts +0 -4
- package/dist/components/Select/index.d.ts.map +0 -1
- package/dist/components/SignUpView/SignUpView.d.ts +0 -38
- package/dist/components/SignUpView/SignUpView.d.ts.map +0 -1
- package/dist/components/SignUpView/SignUpView.types.d.ts +0 -51
- package/dist/components/SignUpView/SignUpView.types.d.ts.map +0 -1
- package/dist/components/SignUpView/icons.d.ts +0 -18
- package/dist/components/SignUpView/icons.d.ts.map +0 -1
- package/dist/components/SignUpView/index.d.ts +0 -4
- package/dist/components/SignUpView/index.d.ts.map +0 -1
- package/dist/components/Switch/Switch.d.ts +0 -46
- package/dist/components/Switch/Switch.d.ts.map +0 -1
- package/dist/components/Switch/Switch.types.d.ts +0 -58
- package/dist/components/Switch/Switch.types.d.ts.map +0 -1
- package/dist/components/Table/Table.d.ts +0 -64
- package/dist/components/Table/Table.d.ts.map +0 -1
- package/dist/components/Table/Table.types.d.ts +0 -173
- package/dist/components/Table/Table.types.d.ts.map +0 -1
- package/dist/components/Table/index.d.ts +0 -3
- package/dist/components/Table/index.d.ts.map +0 -1
- package/dist/components/Tabs/Tabs.d.ts +0 -76
- package/dist/components/Tabs/Tabs.d.ts.map +0 -1
- package/dist/components/Tabs/Tabs.types.d.ts +0 -107
- package/dist/components/Tabs/Tabs.types.d.ts.map +0 -1
- package/dist/components/Tabs/icons.d.ts +0 -45
- package/dist/components/Tabs/icons.d.ts.map +0 -1
- package/dist/components/Tabs/index.d.ts +0 -4
- package/dist/components/Tabs/index.d.ts.map +0 -1
- package/dist/components/Textarea/Textarea.d.ts +0 -38
- package/dist/components/Textarea/Textarea.d.ts.map +0 -1
- package/dist/components/Textarea/Textarea.types.d.ts +0 -46
- package/dist/components/Textarea/Textarea.types.d.ts.map +0 -1
- package/dist/context/ThemeContext.d.ts +0 -46
- package/dist/context/ThemeContext.d.ts.map +0 -1
- package/dist/context/index.d.ts +0 -2
- package/dist/context/index.d.ts.map +0 -1
- package/dist/index.d.ts +0 -88
- package/dist/index.d.ts.map +0 -1
- package/dist/siesa-ui-kit.cjs +0 -1474
- package/dist/siesa-ui-kit.cjs.map +0 -1
- package/dist/siesa-ui-kit.mjs +0 -9580
- package/dist/siesa-ui-kit.mjs.map +0 -1
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +0 -48
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +0 -1
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +0 -49
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +0 -1
- package/dist/views/LayoutCommercial/index.d.ts +0 -3
- package/dist/views/LayoutCommercial/index.d.ts.map +0 -1
- package/dist/views/ListView/ListView.d.ts +0 -47
- package/dist/views/ListView/ListView.d.ts.map +0 -1
- package/dist/views/ListView/ListView.types.d.ts +0 -177
- package/dist/views/ListView/ListView.types.d.ts.map +0 -1
- package/dist/views/ListView/icons.d.ts +0 -60
- package/dist/views/ListView/icons.d.ts.map +0 -1
- package/dist/views/ListView/index.d.ts +0 -3
- package/dist/views/ListView/index.d.ts.map +0 -1
- package/dist/views/LoginView/LoginView.d.ts +0 -36
- package/dist/views/LoginView/LoginView.d.ts.map +0 -1
- package/dist/views/LoginView/LoginView.types.d.ts +0 -46
- package/dist/views/LoginView/LoginView.types.d.ts.map +0 -1
- package/dist/views/LoginView/icons.d.ts +0 -18
- package/dist/views/LoginView/icons.d.ts.map +0 -1
- package/dist/views/LoginView/index.d.ts +0 -4
- package/dist/views/LoginView/index.d.ts.map +0 -1
- package/dist/views/ProductsView/ProductsView.d.ts +0 -56
- package/dist/views/ProductsView/ProductsView.d.ts.map +0 -1
- package/dist/views/ProductsView/ProductsView.types.d.ts +0 -184
- package/dist/views/ProductsView/ProductsView.types.d.ts.map +0 -1
- package/dist/views/ProductsView/icons.d.ts +0 -12
- package/dist/views/ProductsView/icons.d.ts.map +0 -1
- package/dist/views/ProductsView/index.d.ts +0 -3
- package/dist/views/ProductsView/index.d.ts.map +0 -1
- package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts +0 -34
- package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts.map +0 -1
- package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts +0 -50
- package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts.map +0 -1
- package/dist/views/RecoverPasswordView/icons.d.ts +0 -9
- package/dist/views/RecoverPasswordView/icons.d.ts.map +0 -1
- package/dist/views/RecoverPasswordView/index.d.ts +0 -3
- package/dist/views/RecoverPasswordView/index.d.ts.map +0 -1
- package/dist/views/SignUpView/SignUpView.d.ts +0 -38
- package/dist/views/SignUpView/SignUpView.d.ts.map +0 -1
- package/dist/views/SignUpView/SignUpView.types.d.ts +0 -51
- package/dist/views/SignUpView/SignUpView.types.d.ts.map +0 -1
- package/dist/views/SignUpView/icons.d.ts +0 -18
- package/dist/views/SignUpView/icons.d.ts.map +0 -1
- package/dist/views/SignUpView/index.d.ts +0 -4
- package/dist/views/SignUpView/index.d.ts.map +0 -1
- package/dist/views/TableLayoutView/TableLayoutView.d.ts +0 -46
- package/dist/views/TableLayoutView/TableLayoutView.d.ts.map +0 -1
- package/dist/views/TableLayoutView/TableLayoutView.types.d.ts +0 -170
- package/dist/views/TableLayoutView/TableLayoutView.types.d.ts.map +0 -1
- package/dist/views/TableLayoutView/icons.d.ts +0 -27
- package/dist/views/TableLayoutView/icons.d.ts.map +0 -1
- package/dist/views/TableLayoutView/index.d.ts +0 -3
- package/dist/views/TableLayoutView/index.d.ts.map +0 -1
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -307
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -136
- package/src/components/DropdownItemCollapsible/README.md +0 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
- package/src/components/DropdownItemCollapsible/index.ts +0 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
- package/src/components/DropdownItemHeading/README.md +0 -573
- package/src/components/DropdownItemHeading/icons.tsx +0 -125
- package/src/components/DropdownItemHeading/index.ts +0 -3
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +0 -464
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +0 -301
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +0 -162
- package/src/components/NavigationRailCommercial/README.md +0 -251
- package/src/components/NavigationRailCommercial/icons.tsx +0 -54
- package/src/components/NavigationRailCommercial/index.ts +0 -6
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -314
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -175
- package/src/components/NavigationRailItem/README.md +0 -476
- package/src/components/NavigationRailItem/index.ts +0 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
- package/src/components/NavigationRailPanel/README.md +0 -461
- package/src/components/NavigationRailPanel/index.ts +0 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -682
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -363
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -178
- package/src/components/NavigationRailTypes/README.md +0 -573
- package/src/components/NavigationRailTypes/icons.tsx +0 -76
- package/src/components/NavigationRailTypes/index.ts +0 -7
- package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +0 -374
- package/src/views/LayoutCommercial/LayoutCommercial.tsx +0 -125
- package/src/views/LayoutCommercial/LayoutCommercial.types.ts +0 -54
- package/src/views/LayoutCommercial/README.md +0 -286
- package/src/views/LayoutCommercial/index.ts +0 -2
- package/src/views/ListView/ListView.stories.tsx +0 -329
- package/src/views/ListView/ListView.tsx +0 -570
- package/src/views/ListView/ListView.types.ts +0 -211
- package/src/views/ListView/icons.tsx +0 -282
- package/src/views/ListView/index.ts +0 -11
- package/src/views/LoginView/LoginView.stories.tsx +0 -148
- package/src/views/LoginView/LoginView.tsx +0 -426
- package/src/views/LoginView/LoginView.types.ts +0 -52
- package/src/views/LoginView/README.md +0 -396
- package/src/views/LoginView/icons.tsx +0 -85
- package/src/views/LoginView/index.ts +0 -3
- package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/views/SignUpView/SignUpView.tsx +0 -503
- package/src/views/SignUpView/SignUpView.types.ts +0 -58
- package/src/views/SignUpView/icons.tsx +0 -71
- package/src/views/SignUpView/index.ts +0 -3
|
@@ -1,480 +1,480 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { ProductsViewProps } from './ProductsView.types';
|
|
3
|
-
import { Button } from '../../components/Button';
|
|
4
|
-
import { POSProductButton } from '../../components/POSProductButton';
|
|
5
|
-
import { POSProductCard } from '../../components/POSProductCard';
|
|
6
|
-
import { POSProductSidebarItems } from '../../components/POSProductSidebarItems';
|
|
7
|
-
import { Divider } from '../../components/Divider/Divider';
|
|
8
|
-
import { Navbar } from '../../components/Navbar';
|
|
9
|
-
import {
|
|
10
|
-
ArrowLeftIcon,
|
|
11
|
-
CheckIcon,
|
|
12
|
-
} from './icons';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* ProductsView - Vista de selección de productos para sistema POS
|
|
16
|
-
*
|
|
17
|
-
* Vista completa para sistemas POS que permite:
|
|
18
|
-
* - Seleccionar categorías de productos
|
|
19
|
-
* - Ver y agregar productos al pedido
|
|
20
|
-
* - Gestionar items del pedido (cantidad, eliminar)
|
|
21
|
-
* - Ver resumen con subtotal, impuestos y total
|
|
22
|
-
* - Confirmar pedido
|
|
23
|
-
*
|
|
24
|
-
* **Composición:**
|
|
25
|
-
* - Navbar superior con navegación y usuario
|
|
26
|
-
* - Área de contenido con 3 columnas:
|
|
27
|
-
* - Columna 1: Sidebar de categorías (POSProductButton)
|
|
28
|
-
* - Columna 2: Grid de productos (POSProductCard)
|
|
29
|
-
* - Columna 3: Sidebar de pedido (POSProductSidebarItems)
|
|
30
|
-
*
|
|
31
|
-
* **Responsive:**
|
|
32
|
-
* - Mobile (< 768px): Layout vertical adaptativo
|
|
33
|
-
* - Desktop (≥ 768px): Layout de 3 columnas según Figma
|
|
34
|
-
*
|
|
35
|
-
* **Dark Mode:**
|
|
36
|
-
* - Soporte completo con tokens del sistema
|
|
37
|
-
* - Fondos, textos y bordes adaptativos
|
|
38
|
-
*
|
|
39
|
-
* Mejores prácticas implementadas:
|
|
40
|
-
* - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
|
|
41
|
-
* - Dark mode con estrategia 'class' (darkMode: 'class')
|
|
42
|
-
* - Tokens de color consistentes con la documentación
|
|
43
|
-
* - Type safety con TypeScript estricto
|
|
44
|
-
* - Responsive design con breakpoints
|
|
45
|
-
* - Composición con componentes del sistema
|
|
46
|
-
*
|
|
47
|
-
* @see docs/colors.md - Sistema de colores
|
|
48
|
-
* @see docs/typography.md - Sistema tipográfico
|
|
49
|
-
* @see docs/spacing.md - Sistema de espaciado
|
|
50
|
-
* @see src/components/POSProductButton - Botón de categoría
|
|
51
|
-
* @see src/components/POSProductCard - Card de producto
|
|
52
|
-
* @see src/components/POSProductSidebarItems - Item de pedido
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```tsx
|
|
56
|
-
* <ProductsView
|
|
57
|
-
* tableTitle="Mesa 1"
|
|
58
|
-
* categories={categories}
|
|
59
|
-
* products={products}
|
|
60
|
-
* orderItems={orderItems}
|
|
61
|
-
* onAddProduct={(id) => console.log('Agregar', id)}
|
|
62
|
-
* onConfirmOrder={() => console.log('Confirmar')}
|
|
63
|
-
* />
|
|
64
|
-
* ```
|
|
65
|
-
*/
|
|
66
|
-
export const ProductsView: React.FC<ProductsViewProps> = ({
|
|
67
|
-
tableTitle = 'Mesa 1',
|
|
68
|
-
changeTableLabel = 'Cambiar Mesa',
|
|
69
|
-
menusTitle = 'Menús',
|
|
70
|
-
menus = [
|
|
71
|
-
{ id: '1', label: 'Corral' },
|
|
72
|
-
{ id: '2', label: 'Burguer One' },
|
|
73
|
-
{ id: '3', label: 'Andrés Carne de Res' },
|
|
74
|
-
{ id: '4', label: 'Aceites' },
|
|
75
|
-
{ id: '5', label: 'Kiosco Mac' },
|
|
76
|
-
{ id: '6', label: 'Kiosco Qbano' },
|
|
77
|
-
{ id: '7', label: 'Premier Dinning' },
|
|
78
|
-
],
|
|
79
|
-
selectedMenuId = '1',
|
|
80
|
-
onMenuSelect,
|
|
81
|
-
onChangeTable,
|
|
82
|
-
categoryTitle = 'Categoría',
|
|
83
|
-
categories = [],
|
|
84
|
-
selectedCategoryId,
|
|
85
|
-
onCategorySelect,
|
|
86
|
-
productsTitle = 'Productos',
|
|
87
|
-
products = [],
|
|
88
|
-
onAddProduct,
|
|
89
|
-
activeTab = 'products',
|
|
90
|
-
onTabChange,
|
|
91
|
-
orderItems = [],
|
|
92
|
-
onOrderItemQuantityChange,
|
|
93
|
-
onOrderItemDelete,
|
|
94
|
-
subtotal = '40,000.00',
|
|
95
|
-
taxes = '40,000.00',
|
|
96
|
-
total = '40,000.00',
|
|
97
|
-
confirmLabel = 'Confirmar Pedido',
|
|
98
|
-
onConfirmOrder,
|
|
99
|
-
isLoading = false,
|
|
100
|
-
errorMessage,
|
|
101
|
-
userAvatar,
|
|
102
|
-
userName = 'Jhonnatan Diaz',
|
|
103
|
-
userRole = 'Administrador',
|
|
104
|
-
businessLogo,
|
|
105
|
-
siesaLogo,
|
|
106
|
-
className = '',
|
|
107
|
-
}) => {
|
|
108
|
-
return (
|
|
109
|
-
<div
|
|
110
|
-
className={`
|
|
111
|
-
min-h-screen
|
|
112
|
-
w-full
|
|
113
|
-
bg-background-secondary
|
|
114
|
-
dark:bg-dark-bg-primary
|
|
115
|
-
flex
|
|
116
|
-
flex-col
|
|
117
|
-
${className}
|
|
118
|
-
`.trim().replace(/\s+/g, ' ')}
|
|
119
|
-
>
|
|
120
|
-
{/* ===== NAVBAR ===== */}
|
|
121
|
-
<Navbar
|
|
122
|
-
logo={
|
|
123
|
-
businessLogo && (
|
|
124
|
-
<div className="h-[30px] w-[168px] overflow-hidden">
|
|
125
|
-
{typeof businessLogo === 'string' ? (
|
|
126
|
-
<img src={businessLogo} alt="Business Logo" className="h-full w-full object-contain" />
|
|
127
|
-
) : (
|
|
128
|
-
businessLogo
|
|
129
|
-
)}
|
|
130
|
-
</div>
|
|
131
|
-
)
|
|
132
|
-
}
|
|
133
|
-
productName=""
|
|
134
|
-
userDropdown={
|
|
135
|
-
userAvatar
|
|
136
|
-
? {
|
|
137
|
-
avatar: userAvatar,
|
|
138
|
-
name: userName,
|
|
139
|
-
role: userRole,
|
|
140
|
-
}
|
|
141
|
-
: undefined
|
|
142
|
-
}
|
|
143
|
-
hideActionButtons
|
|
144
|
-
siesaLogo={
|
|
145
|
-
siesaLogo && (
|
|
146
|
-
<div className="h-[30px] w-[120px] overflow-hidden">
|
|
147
|
-
{typeof siesaLogo === 'string' ? (
|
|
148
|
-
<img src={siesaLogo} alt="Siesa Logo" className="h-full w-full object-contain" />
|
|
149
|
-
) : (
|
|
150
|
-
siesaLogo
|
|
151
|
-
)}
|
|
152
|
-
</div>
|
|
153
|
-
)
|
|
154
|
-
}
|
|
155
|
-
variant="desktop"
|
|
156
|
-
className="bg-background-secondary dark:bg-dark-bg-primary"
|
|
157
|
-
/>
|
|
158
|
-
|
|
159
|
-
{/* ===== CONTAINER ===== */}
|
|
160
|
-
<div className="flex flex-1 w-full overflow-hidden">
|
|
161
|
-
{/* ===== ROW PRINCIPAL ===== */}
|
|
162
|
-
<div className="flex flex-1 w-full overflow-hidden">
|
|
163
|
-
{/* ===== COLUMNA 1: ÁREA DE CONTENIDO (Menu + Body) ===== */}
|
|
164
|
-
<div
|
|
165
|
-
className="
|
|
166
|
-
flex-1
|
|
167
|
-
flex
|
|
168
|
-
flex-col
|
|
169
|
-
gap-4
|
|
170
|
-
p-4
|
|
171
|
-
bg-white
|
|
172
|
-
dark:bg-dark-bg-primary
|
|
173
|
-
rounded-tl-3xl
|
|
174
|
-
rounded-tr-3xl
|
|
175
|
-
overflow-hidden
|
|
176
|
-
"
|
|
177
|
-
>
|
|
178
|
-
{/* Menu de navegación */}
|
|
179
|
-
<div className="flex items-center gap-4 w-full">
|
|
180
|
-
{/* Cambiar Mesa Button */}
|
|
181
|
-
<div className="shrink-0">
|
|
182
|
-
<Button
|
|
183
|
-
type="default"
|
|
184
|
-
leftIcon={<ArrowLeftIcon className="w-4 h-4" />}
|
|
185
|
-
onClick={onChangeTable}
|
|
186
|
-
ariaLabel={changeTableLabel}
|
|
187
|
-
>
|
|
188
|
-
{changeTableLabel}
|
|
189
|
-
</Button>
|
|
190
|
-
</div>
|
|
191
|
-
|
|
192
|
-
{/* Divider */}
|
|
193
|
-
<div className="h-8 w-px bg-border-primary dark:bg-dark-border-primary shrink-0" />
|
|
194
|
-
|
|
195
|
-
{/* Título Menús */}
|
|
196
|
-
<div className="shrink-0">
|
|
197
|
-
<h2 className="text-xl font-bold leading-7 tracking-tight text-content-primary dark:text-dark-content-primary">
|
|
198
|
-
{menusTitle}
|
|
199
|
-
</h2>
|
|
200
|
-
</div>
|
|
201
|
-
|
|
202
|
-
{/* Botones de menús con scroll horizontal */}
|
|
203
|
-
<div className="flex-1 flex gap-2 overflow-x-auto overflow-y-hidden">
|
|
204
|
-
{menus.map((menu) => (
|
|
205
|
-
<Button
|
|
206
|
-
key={menu.id}
|
|
207
|
-
type={selectedMenuId === menu.id ? 'default' : 'outline'}
|
|
208
|
-
onClick={() => onMenuSelect?.(menu.id)}
|
|
209
|
-
>
|
|
210
|
-
{menu.label}
|
|
211
|
-
</Button>
|
|
212
|
-
))}
|
|
213
|
-
</div>
|
|
214
|
-
</div>
|
|
215
|
-
|
|
216
|
-
{/* Body: Categorías + Productos */}
|
|
217
|
-
<div
|
|
218
|
-
className="
|
|
219
|
-
flex-1
|
|
220
|
-
flex
|
|
221
|
-
gap-0
|
|
222
|
-
bg-background-secondary
|
|
223
|
-
dark:bg-dark-bg-primary/50
|
|
224
|
-
rounded-xl
|
|
225
|
-
overflow-hidden
|
|
226
|
-
"
|
|
227
|
-
>
|
|
228
|
-
{/* ===== SIDEBAR IZQUIERDO: CATEGORÍAS ===== */}
|
|
229
|
-
<div className="w-[213px] p-4 border-b border-border-primary dark:border-dark-border-primary">
|
|
230
|
-
<div className="flex flex-col gap-4 h-full">
|
|
231
|
-
{/* Título */}
|
|
232
|
-
<div className="flex items-center justify-center w-full">
|
|
233
|
-
<h3 className="text-xl font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
234
|
-
{categoryTitle}
|
|
235
|
-
</h3>
|
|
236
|
-
</div>
|
|
237
|
-
|
|
238
|
-
{/* Lista de categorías con scroll */}
|
|
239
|
-
<div className="flex-1 flex flex-col gap-2 overflow-x-hidden overflow-y-auto">
|
|
240
|
-
{categories.map((category) => (
|
|
241
|
-
<POSProductButton
|
|
242
|
-
key={category.id}
|
|
243
|
-
image={category.image}
|
|
244
|
-
label={category.label}
|
|
245
|
-
active={selectedCategoryId === category.id}
|
|
246
|
-
onClick={() => onCategorySelect?.(category.id)}
|
|
247
|
-
/>
|
|
248
|
-
))}
|
|
249
|
-
</div>
|
|
250
|
-
</div>
|
|
251
|
-
</div>
|
|
252
|
-
|
|
253
|
-
{/* ===== CONTENIDO PRINCIPAL: PRODUCTOS ===== */}
|
|
254
|
-
<div className="flex-1 p-4 border-l border-b border-border-primary dark:border-dark-border-primary">
|
|
255
|
-
<div className="flex flex-col gap-4 h-full">
|
|
256
|
-
{/* Título */}
|
|
257
|
-
<div className="flex items-center justify-center w-full">
|
|
258
|
-
<h3 className="text-xl font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
259
|
-
{productsTitle}
|
|
260
|
-
</h3>
|
|
261
|
-
</div>
|
|
262
|
-
|
|
263
|
-
{/* Grid de productos con scroll - Flexbox centrado con max-width para 4 columnas (170px * 4 + 8px * 3 = 704px) */}
|
|
264
|
-
<div className="flex-1 overflow-x-hidden overflow-y-auto">
|
|
265
|
-
<div className="flex flex-col items-center justify-start min-h-full w-full">
|
|
266
|
-
<div className="flex flex-wrap gap-2 justify-center max-w-[704px]">
|
|
267
|
-
{products.map((product) => (
|
|
268
|
-
<POSProductCard
|
|
269
|
-
key={product.id}
|
|
270
|
-
image={product.image}
|
|
271
|
-
productName={product.name}
|
|
272
|
-
price={product.price}
|
|
273
|
-
onAddClick={() => onAddProduct?.(product.id)}
|
|
274
|
-
/>
|
|
275
|
-
))}
|
|
276
|
-
</div>
|
|
277
|
-
</div>
|
|
278
|
-
|
|
279
|
-
{/* Estado vacío */}
|
|
280
|
-
{products.length === 0 && (
|
|
281
|
-
<div className="flex items-center justify-center h-full">
|
|
282
|
-
<p className="text-content-secondary dark:text-content-secondary">
|
|
283
|
-
No hay productos disponibles
|
|
284
|
-
</p>
|
|
285
|
-
</div>
|
|
286
|
-
)}
|
|
287
|
-
|
|
288
|
-
{/* Estado de carga */}
|
|
289
|
-
{isLoading && (
|
|
290
|
-
<div className="flex items-center justify-center h-full">
|
|
291
|
-
<p className="text-content-secondary dark:text-content-secondary">
|
|
292
|
-
Cargando productos...
|
|
293
|
-
</p>
|
|
294
|
-
</div>
|
|
295
|
-
)}
|
|
296
|
-
|
|
297
|
-
{/* Estado de error */}
|
|
298
|
-
{errorMessage && (
|
|
299
|
-
<div className="flex items-center justify-center h-full">
|
|
300
|
-
<p className="text-red-600 dark:text-red-400">
|
|
301
|
-
{errorMessage}
|
|
302
|
-
</p>
|
|
303
|
-
</div>
|
|
304
|
-
)}
|
|
305
|
-
</div>
|
|
306
|
-
</div>
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
</div>
|
|
310
|
-
|
|
311
|
-
{/* ===== COLUMNA 2: SIDEBAR DERECHO (Pedido) ===== */}
|
|
312
|
-
<div className="w-[304px] p-4 flex flex-col gap-0 h-full overflow-hidden">
|
|
313
|
-
<div className="flex flex-col h-full relative">
|
|
314
|
-
{/* Heading */}
|
|
315
|
-
<div className="border-b border-border-primary dark:border-dark-border-primary pb-4 z-10">
|
|
316
|
-
<h2 className="text-xl font-bold leading-7 tracking-tight text-content-primary dark:text-dark-content-primary">
|
|
317
|
-
{tableTitle}
|
|
318
|
-
</h2>
|
|
319
|
-
</div>
|
|
320
|
-
|
|
321
|
-
{/* Tabs */}
|
|
322
|
-
<div className="flex items-start py-2.5 z-10">
|
|
323
|
-
<button
|
|
324
|
-
className={`
|
|
325
|
-
flex-1
|
|
326
|
-
flex
|
|
327
|
-
flex-col
|
|
328
|
-
items-center
|
|
329
|
-
p-2
|
|
330
|
-
rounded-lg
|
|
331
|
-
transition-colors
|
|
332
|
-
duration-150
|
|
333
|
-
${activeTab === 'products' ? 'relative' : ''}
|
|
334
|
-
`}
|
|
335
|
-
onClick={() => onTabChange?.('products')}
|
|
336
|
-
>
|
|
337
|
-
<span
|
|
338
|
-
className={`
|
|
339
|
-
text-sm
|
|
340
|
-
font-bold
|
|
341
|
-
leading-5
|
|
342
|
-
${activeTab === 'products'
|
|
343
|
-
? 'text-primary-custom-600 dark:text-primary-custom-600'
|
|
344
|
-
: 'text-content-primary dark:text-dark-content-primary'
|
|
345
|
-
}
|
|
346
|
-
`}
|
|
347
|
-
>
|
|
348
|
-
Productos
|
|
349
|
-
</span>
|
|
350
|
-
{activeTab === 'products' && (
|
|
351
|
-
<div className="absolute bottom-[-10px] left-0 right-0 h-0.5 bg-primary-custom-600 dark:bg-primary-custom-600 rounded-full" />
|
|
352
|
-
)}
|
|
353
|
-
</button>
|
|
354
|
-
|
|
355
|
-
<button
|
|
356
|
-
className={`
|
|
357
|
-
flex-1
|
|
358
|
-
flex
|
|
359
|
-
flex-col
|
|
360
|
-
items-center
|
|
361
|
-
p-2
|
|
362
|
-
rounded-lg
|
|
363
|
-
transition-colors
|
|
364
|
-
duration-150
|
|
365
|
-
${activeTab === 'client' ? 'relative' : ''}
|
|
366
|
-
`}
|
|
367
|
-
onClick={() => onTabChange?.('client')}
|
|
368
|
-
>
|
|
369
|
-
<span
|
|
370
|
-
className={`
|
|
371
|
-
text-sm
|
|
372
|
-
font-bold
|
|
373
|
-
leading-5
|
|
374
|
-
${activeTab === 'client'
|
|
375
|
-
? 'text-primary-custom-600 dark:text-primary-custom-600'
|
|
376
|
-
: 'text-content-primary dark:text-dark-content-primary'
|
|
377
|
-
}
|
|
378
|
-
`}
|
|
379
|
-
>
|
|
380
|
-
Cliente
|
|
381
|
-
</span>
|
|
382
|
-
{activeTab === 'client' && (
|
|
383
|
-
<div className="absolute bottom-[-10px] left-0 right-0 h-0.5 bg-primary-custom-600 dark:bg-primary-custom-600 rounded-full" />
|
|
384
|
-
)}
|
|
385
|
-
</button>
|
|
386
|
-
</div>
|
|
387
|
-
|
|
388
|
-
{/* Body: Lista de items del pedido */}
|
|
389
|
-
<div
|
|
390
|
-
className="
|
|
391
|
-
flex-1
|
|
392
|
-
flex
|
|
393
|
-
flex-col
|
|
394
|
-
gap-2
|
|
395
|
-
p-4
|
|
396
|
-
bg-white
|
|
397
|
-
dark:bg-dark-bg-primary
|
|
398
|
-
rounded-bl-lg
|
|
399
|
-
rounded-br-lg
|
|
400
|
-
overflow-x-hidden
|
|
401
|
-
overflow-y-auto
|
|
402
|
-
z-10
|
|
403
|
-
"
|
|
404
|
-
>
|
|
405
|
-
{orderItems.map((item, index) => (
|
|
406
|
-
<React.Fragment key={item.productId}>
|
|
407
|
-
<POSProductSidebarItems
|
|
408
|
-
categoryLabel={item.categoryLabel}
|
|
409
|
-
categoryColor={item.categoryColor}
|
|
410
|
-
productRef={item.productRef}
|
|
411
|
-
price={item.price}
|
|
412
|
-
productName={item.productName}
|
|
413
|
-
descriptionItems={item.descriptionItems}
|
|
414
|
-
showDescription={!!item.descriptionItems && item.descriptionItems.length > 0}
|
|
415
|
-
quantity={item.quantity}
|
|
416
|
-
onQuantityChange={(qty) => onOrderItemQuantityChange?.(item.productId, qty)}
|
|
417
|
-
onDelete={() => onOrderItemDelete?.(item.productId)}
|
|
418
|
-
/>
|
|
419
|
-
{index < orderItems.length - 1 && <Divider />}
|
|
420
|
-
</React.Fragment>
|
|
421
|
-
))}
|
|
422
|
-
|
|
423
|
-
{/* Estado vacío */}
|
|
424
|
-
{orderItems.length === 0 && (
|
|
425
|
-
<div className="flex items-center justify-center h-full">
|
|
426
|
-
<p className="text-content-secondary dark:text-content-secondary text-center">
|
|
427
|
-
No hay productos en el pedido
|
|
428
|
-
</p>
|
|
429
|
-
</div>
|
|
430
|
-
)}
|
|
431
|
-
</div>
|
|
432
|
-
|
|
433
|
-
{/* Footer: Resumen y botón confirmar */}
|
|
434
|
-
<div className="flex flex-col gap-4 pt-4 z-10">
|
|
435
|
-
{/* Resumen de precios */}
|
|
436
|
-
<div className="flex flex-col gap-2">
|
|
437
|
-
{/* Subtotal */}
|
|
438
|
-
<div className="flex items-start text-base font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
439
|
-
<div className="flex-1">Subtotal</div>
|
|
440
|
-
<div className="flex-1 text-right">{subtotal}</div>
|
|
441
|
-
</div>
|
|
442
|
-
|
|
443
|
-
{/* Impuestos */}
|
|
444
|
-
<div className="flex items-start text-base font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
445
|
-
<div className="flex-1">Impuestos</div>
|
|
446
|
-
<div className="flex-1 text-right">{taxes}</div>
|
|
447
|
-
</div>
|
|
448
|
-
|
|
449
|
-
{/* Divider */}
|
|
450
|
-
<Divider />
|
|
451
|
-
|
|
452
|
-
{/* Total */}
|
|
453
|
-
<div className="flex items-start text-lg font-bold leading-7 text-content-primary dark:text-dark-content-primary">
|
|
454
|
-
<div className="flex-1">Total</div>
|
|
455
|
-
<div className="flex-1 text-right">{total}</div>
|
|
456
|
-
</div>
|
|
457
|
-
</div>
|
|
458
|
-
|
|
459
|
-
{/* Botón confirmar */}
|
|
460
|
-
<div className="flex gap-2 w-full">
|
|
461
|
-
<Button
|
|
462
|
-
type="default"
|
|
463
|
-
leftIcon={<CheckIcon className="w-4 h-4" />}
|
|
464
|
-
onClick={onConfirmOrder}
|
|
465
|
-
fullWidth
|
|
466
|
-
disabled={orderItems.length === 0 || isLoading}
|
|
467
|
-
>
|
|
468
|
-
{confirmLabel}
|
|
469
|
-
</Button>
|
|
470
|
-
</div>
|
|
471
|
-
</div>
|
|
472
|
-
</div>
|
|
473
|
-
</div>
|
|
474
|
-
</div>
|
|
475
|
-
</div>
|
|
476
|
-
</div>
|
|
477
|
-
);
|
|
478
|
-
};
|
|
479
|
-
|
|
480
|
-
ProductsView.displayName = 'ProductsView';
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ProductsViewProps } from './ProductsView.types';
|
|
3
|
+
import { Button } from '../../components/Button';
|
|
4
|
+
import { POSProductButton } from '../../components/POSProductButton';
|
|
5
|
+
import { POSProductCard } from '../../components/POSProductCard';
|
|
6
|
+
import { POSProductSidebarItems } from '../../components/POSProductSidebarItems';
|
|
7
|
+
import { Divider } from '../../components/Divider/Divider';
|
|
8
|
+
import { Navbar } from '../../components/Navbar';
|
|
9
|
+
import {
|
|
10
|
+
ArrowLeftIcon,
|
|
11
|
+
CheckIcon,
|
|
12
|
+
} from './icons';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* ProductsView - Vista de selección de productos para sistema POS
|
|
16
|
+
*
|
|
17
|
+
* Vista completa para sistemas POS que permite:
|
|
18
|
+
* - Seleccionar categorías de productos
|
|
19
|
+
* - Ver y agregar productos al pedido
|
|
20
|
+
* - Gestionar items del pedido (cantidad, eliminar)
|
|
21
|
+
* - Ver resumen con subtotal, impuestos y total
|
|
22
|
+
* - Confirmar pedido
|
|
23
|
+
*
|
|
24
|
+
* **Composición:**
|
|
25
|
+
* - Navbar superior con navegación y usuario
|
|
26
|
+
* - Área de contenido con 3 columnas:
|
|
27
|
+
* - Columna 1: Sidebar de categorías (POSProductButton)
|
|
28
|
+
* - Columna 2: Grid de productos (POSProductCard)
|
|
29
|
+
* - Columna 3: Sidebar de pedido (POSProductSidebarItems)
|
|
30
|
+
*
|
|
31
|
+
* **Responsive:**
|
|
32
|
+
* - Mobile (< 768px): Layout vertical adaptativo
|
|
33
|
+
* - Desktop (≥ 768px): Layout de 3 columnas según Figma
|
|
34
|
+
*
|
|
35
|
+
* **Dark Mode:**
|
|
36
|
+
* - Soporte completo con tokens del sistema
|
|
37
|
+
* - Fondos, textos y bordes adaptativos
|
|
38
|
+
*
|
|
39
|
+
* Mejores prácticas implementadas:
|
|
40
|
+
* - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
|
|
41
|
+
* - Dark mode con estrategia 'class' (darkMode: 'class')
|
|
42
|
+
* - Tokens de color consistentes con la documentación
|
|
43
|
+
* - Type safety con TypeScript estricto
|
|
44
|
+
* - Responsive design con breakpoints
|
|
45
|
+
* - Composición con componentes del sistema
|
|
46
|
+
*
|
|
47
|
+
* @see docs/colors.md - Sistema de colores
|
|
48
|
+
* @see docs/typography.md - Sistema tipográfico
|
|
49
|
+
* @see docs/spacing.md - Sistema de espaciado
|
|
50
|
+
* @see src/components/POSProductButton - Botón de categoría
|
|
51
|
+
* @see src/components/POSProductCard - Card de producto
|
|
52
|
+
* @see src/components/POSProductSidebarItems - Item de pedido
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* <ProductsView
|
|
57
|
+
* tableTitle="Mesa 1"
|
|
58
|
+
* categories={categories}
|
|
59
|
+
* products={products}
|
|
60
|
+
* orderItems={orderItems}
|
|
61
|
+
* onAddProduct={(id) => console.log('Agregar', id)}
|
|
62
|
+
* onConfirmOrder={() => console.log('Confirmar')}
|
|
63
|
+
* />
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export const ProductsView: React.FC<ProductsViewProps> = ({
|
|
67
|
+
tableTitle = 'Mesa 1',
|
|
68
|
+
changeTableLabel = 'Cambiar Mesa',
|
|
69
|
+
menusTitle = 'Menús',
|
|
70
|
+
menus = [
|
|
71
|
+
{ id: '1', label: 'Corral' },
|
|
72
|
+
{ id: '2', label: 'Burguer One' },
|
|
73
|
+
{ id: '3', label: 'Andrés Carne de Res' },
|
|
74
|
+
{ id: '4', label: 'Aceites' },
|
|
75
|
+
{ id: '5', label: 'Kiosco Mac' },
|
|
76
|
+
{ id: '6', label: 'Kiosco Qbano' },
|
|
77
|
+
{ id: '7', label: 'Premier Dinning' },
|
|
78
|
+
],
|
|
79
|
+
selectedMenuId = '1',
|
|
80
|
+
onMenuSelect,
|
|
81
|
+
onChangeTable,
|
|
82
|
+
categoryTitle = 'Categoría',
|
|
83
|
+
categories = [],
|
|
84
|
+
selectedCategoryId,
|
|
85
|
+
onCategorySelect,
|
|
86
|
+
productsTitle = 'Productos',
|
|
87
|
+
products = [],
|
|
88
|
+
onAddProduct,
|
|
89
|
+
activeTab = 'products',
|
|
90
|
+
onTabChange,
|
|
91
|
+
orderItems = [],
|
|
92
|
+
onOrderItemQuantityChange,
|
|
93
|
+
onOrderItemDelete,
|
|
94
|
+
subtotal = '40,000.00',
|
|
95
|
+
taxes = '40,000.00',
|
|
96
|
+
total = '40,000.00',
|
|
97
|
+
confirmLabel = 'Confirmar Pedido',
|
|
98
|
+
onConfirmOrder,
|
|
99
|
+
isLoading = false,
|
|
100
|
+
errorMessage,
|
|
101
|
+
userAvatar,
|
|
102
|
+
userName = 'Jhonnatan Diaz',
|
|
103
|
+
userRole = 'Administrador',
|
|
104
|
+
businessLogo,
|
|
105
|
+
siesaLogo,
|
|
106
|
+
className = '',
|
|
107
|
+
}) => {
|
|
108
|
+
return (
|
|
109
|
+
<div
|
|
110
|
+
className={`
|
|
111
|
+
min-h-screen
|
|
112
|
+
w-full
|
|
113
|
+
bg-background-secondary
|
|
114
|
+
dark:bg-dark-bg-primary
|
|
115
|
+
flex
|
|
116
|
+
flex-col
|
|
117
|
+
${className}
|
|
118
|
+
`.trim().replace(/\s+/g, ' ')}
|
|
119
|
+
>
|
|
120
|
+
{/* ===== NAVBAR ===== */}
|
|
121
|
+
<Navbar
|
|
122
|
+
logo={
|
|
123
|
+
businessLogo && (
|
|
124
|
+
<div className="h-[30px] w-[168px] overflow-hidden">
|
|
125
|
+
{typeof businessLogo === 'string' ? (
|
|
126
|
+
<img src={businessLogo} alt="Business Logo" className="h-full w-full object-contain" />
|
|
127
|
+
) : (
|
|
128
|
+
businessLogo
|
|
129
|
+
)}
|
|
130
|
+
</div>
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
productName=""
|
|
134
|
+
userDropdown={
|
|
135
|
+
userAvatar
|
|
136
|
+
? {
|
|
137
|
+
avatar: userAvatar,
|
|
138
|
+
name: userName,
|
|
139
|
+
role: userRole,
|
|
140
|
+
}
|
|
141
|
+
: undefined
|
|
142
|
+
}
|
|
143
|
+
hideActionButtons
|
|
144
|
+
siesaLogo={
|
|
145
|
+
siesaLogo && (
|
|
146
|
+
<div className="h-[30px] w-[120px] overflow-hidden">
|
|
147
|
+
{typeof siesaLogo === 'string' ? (
|
|
148
|
+
<img src={siesaLogo} alt="Siesa Logo" className="h-full w-full object-contain" />
|
|
149
|
+
) : (
|
|
150
|
+
siesaLogo
|
|
151
|
+
)}
|
|
152
|
+
</div>
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
variant="desktop"
|
|
156
|
+
className="bg-background-secondary dark:bg-dark-bg-primary"
|
|
157
|
+
/>
|
|
158
|
+
|
|
159
|
+
{/* ===== CONTAINER ===== */}
|
|
160
|
+
<div className="flex flex-1 w-full overflow-hidden">
|
|
161
|
+
{/* ===== ROW PRINCIPAL ===== */}
|
|
162
|
+
<div className="flex flex-1 w-full overflow-hidden">
|
|
163
|
+
{/* ===== COLUMNA 1: ÁREA DE CONTENIDO (Menu + Body) ===== */}
|
|
164
|
+
<div
|
|
165
|
+
className="
|
|
166
|
+
flex-1
|
|
167
|
+
flex
|
|
168
|
+
flex-col
|
|
169
|
+
gap-4
|
|
170
|
+
p-4
|
|
171
|
+
bg-white
|
|
172
|
+
dark:bg-dark-bg-primary
|
|
173
|
+
rounded-tl-3xl
|
|
174
|
+
rounded-tr-3xl
|
|
175
|
+
overflow-hidden
|
|
176
|
+
"
|
|
177
|
+
>
|
|
178
|
+
{/* Menu de navegación */}
|
|
179
|
+
<div className="flex items-center gap-4 w-full">
|
|
180
|
+
{/* Cambiar Mesa Button */}
|
|
181
|
+
<div className="shrink-0">
|
|
182
|
+
<Button
|
|
183
|
+
type="default"
|
|
184
|
+
leftIcon={<ArrowLeftIcon className="w-4 h-4" />}
|
|
185
|
+
onClick={onChangeTable}
|
|
186
|
+
ariaLabel={changeTableLabel}
|
|
187
|
+
>
|
|
188
|
+
{changeTableLabel}
|
|
189
|
+
</Button>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
{/* Divider */}
|
|
193
|
+
<div className="h-8 w-px bg-border-primary dark:bg-dark-border-primary shrink-0" />
|
|
194
|
+
|
|
195
|
+
{/* Título Menús */}
|
|
196
|
+
<div className="shrink-0">
|
|
197
|
+
<h2 className="text-xl font-bold leading-7 tracking-tight text-content-primary dark:text-dark-content-primary">
|
|
198
|
+
{menusTitle}
|
|
199
|
+
</h2>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
{/* Botones de menús con scroll horizontal */}
|
|
203
|
+
<div className="flex-1 flex gap-2 overflow-x-auto overflow-y-hidden">
|
|
204
|
+
{menus.map((menu) => (
|
|
205
|
+
<Button
|
|
206
|
+
key={menu.id}
|
|
207
|
+
type={selectedMenuId === menu.id ? 'default' : 'outline'}
|
|
208
|
+
onClick={() => onMenuSelect?.(menu.id)}
|
|
209
|
+
>
|
|
210
|
+
{menu.label}
|
|
211
|
+
</Button>
|
|
212
|
+
))}
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
|
|
216
|
+
{/* Body: Categorías + Productos */}
|
|
217
|
+
<div
|
|
218
|
+
className="
|
|
219
|
+
flex-1
|
|
220
|
+
flex
|
|
221
|
+
gap-0
|
|
222
|
+
bg-background-secondary
|
|
223
|
+
dark:bg-dark-bg-primary/50
|
|
224
|
+
rounded-xl
|
|
225
|
+
overflow-hidden
|
|
226
|
+
"
|
|
227
|
+
>
|
|
228
|
+
{/* ===== SIDEBAR IZQUIERDO: CATEGORÍAS ===== */}
|
|
229
|
+
<div className="w-[213px] p-4 border-b border-border-primary dark:border-dark-border-primary">
|
|
230
|
+
<div className="flex flex-col gap-4 h-full">
|
|
231
|
+
{/* Título */}
|
|
232
|
+
<div className="flex items-center justify-center w-full">
|
|
233
|
+
<h3 className="text-xl font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
234
|
+
{categoryTitle}
|
|
235
|
+
</h3>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
{/* Lista de categorías con scroll */}
|
|
239
|
+
<div className="flex-1 flex flex-col gap-2 overflow-x-hidden overflow-y-auto">
|
|
240
|
+
{categories.map((category) => (
|
|
241
|
+
<POSProductButton
|
|
242
|
+
key={category.id}
|
|
243
|
+
image={category.image}
|
|
244
|
+
label={category.label}
|
|
245
|
+
active={selectedCategoryId === category.id}
|
|
246
|
+
onClick={() => onCategorySelect?.(category.id)}
|
|
247
|
+
/>
|
|
248
|
+
))}
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
{/* ===== CONTENIDO PRINCIPAL: PRODUCTOS ===== */}
|
|
254
|
+
<div className="flex-1 p-4 border-l border-b border-border-primary dark:border-dark-border-primary">
|
|
255
|
+
<div className="flex flex-col gap-4 h-full">
|
|
256
|
+
{/* Título */}
|
|
257
|
+
<div className="flex items-center justify-center w-full">
|
|
258
|
+
<h3 className="text-xl font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
259
|
+
{productsTitle}
|
|
260
|
+
</h3>
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
{/* Grid de productos con scroll - Flexbox centrado con max-width para 4 columnas (170px * 4 + 8px * 3 = 704px) */}
|
|
264
|
+
<div className="flex-1 overflow-x-hidden overflow-y-auto">
|
|
265
|
+
<div className="flex flex-col items-center justify-start min-h-full w-full">
|
|
266
|
+
<div className="flex flex-wrap gap-2 justify-center max-w-[704px]">
|
|
267
|
+
{products.map((product) => (
|
|
268
|
+
<POSProductCard
|
|
269
|
+
key={product.id}
|
|
270
|
+
image={product.image}
|
|
271
|
+
productName={product.name}
|
|
272
|
+
price={product.price}
|
|
273
|
+
onAddClick={() => onAddProduct?.(product.id)}
|
|
274
|
+
/>
|
|
275
|
+
))}
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
{/* Estado vacío */}
|
|
280
|
+
{products.length === 0 && (
|
|
281
|
+
<div className="flex items-center justify-center h-full">
|
|
282
|
+
<p className="text-content-secondary dark:text-content-secondary">
|
|
283
|
+
No hay productos disponibles
|
|
284
|
+
</p>
|
|
285
|
+
</div>
|
|
286
|
+
)}
|
|
287
|
+
|
|
288
|
+
{/* Estado de carga */}
|
|
289
|
+
{isLoading && (
|
|
290
|
+
<div className="flex items-center justify-center h-full">
|
|
291
|
+
<p className="text-content-secondary dark:text-content-secondary">
|
|
292
|
+
Cargando productos...
|
|
293
|
+
</p>
|
|
294
|
+
</div>
|
|
295
|
+
)}
|
|
296
|
+
|
|
297
|
+
{/* Estado de error */}
|
|
298
|
+
{errorMessage && (
|
|
299
|
+
<div className="flex items-center justify-center h-full">
|
|
300
|
+
<p className="text-red-600 dark:text-red-400">
|
|
301
|
+
{errorMessage}
|
|
302
|
+
</p>
|
|
303
|
+
</div>
|
|
304
|
+
)}
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
|
|
311
|
+
{/* ===== COLUMNA 2: SIDEBAR DERECHO (Pedido) ===== */}
|
|
312
|
+
<div className="w-[304px] p-4 flex flex-col gap-0 h-full overflow-hidden">
|
|
313
|
+
<div className="flex flex-col h-full relative">
|
|
314
|
+
{/* Heading */}
|
|
315
|
+
<div className="border-b border-border-primary dark:border-dark-border-primary pb-4 z-10">
|
|
316
|
+
<h2 className="text-xl font-bold leading-7 tracking-tight text-content-primary dark:text-dark-content-primary">
|
|
317
|
+
{tableTitle}
|
|
318
|
+
</h2>
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
{/* Tabs */}
|
|
322
|
+
<div className="flex items-start py-2.5 z-10">
|
|
323
|
+
<button
|
|
324
|
+
className={`
|
|
325
|
+
flex-1
|
|
326
|
+
flex
|
|
327
|
+
flex-col
|
|
328
|
+
items-center
|
|
329
|
+
p-2
|
|
330
|
+
rounded-lg
|
|
331
|
+
transition-colors
|
|
332
|
+
duration-150
|
|
333
|
+
${activeTab === 'products' ? 'relative' : ''}
|
|
334
|
+
`}
|
|
335
|
+
onClick={() => onTabChange?.('products')}
|
|
336
|
+
>
|
|
337
|
+
<span
|
|
338
|
+
className={`
|
|
339
|
+
text-sm
|
|
340
|
+
font-bold
|
|
341
|
+
leading-5
|
|
342
|
+
${activeTab === 'products'
|
|
343
|
+
? 'text-primary-custom-600 dark:text-primary-custom-600'
|
|
344
|
+
: 'text-content-primary dark:text-dark-content-primary'
|
|
345
|
+
}
|
|
346
|
+
`}
|
|
347
|
+
>
|
|
348
|
+
Productos
|
|
349
|
+
</span>
|
|
350
|
+
{activeTab === 'products' && (
|
|
351
|
+
<div className="absolute bottom-[-10px] left-0 right-0 h-0.5 bg-primary-custom-600 dark:bg-primary-custom-600 rounded-full" />
|
|
352
|
+
)}
|
|
353
|
+
</button>
|
|
354
|
+
|
|
355
|
+
<button
|
|
356
|
+
className={`
|
|
357
|
+
flex-1
|
|
358
|
+
flex
|
|
359
|
+
flex-col
|
|
360
|
+
items-center
|
|
361
|
+
p-2
|
|
362
|
+
rounded-lg
|
|
363
|
+
transition-colors
|
|
364
|
+
duration-150
|
|
365
|
+
${activeTab === 'client' ? 'relative' : ''}
|
|
366
|
+
`}
|
|
367
|
+
onClick={() => onTabChange?.('client')}
|
|
368
|
+
>
|
|
369
|
+
<span
|
|
370
|
+
className={`
|
|
371
|
+
text-sm
|
|
372
|
+
font-bold
|
|
373
|
+
leading-5
|
|
374
|
+
${activeTab === 'client'
|
|
375
|
+
? 'text-primary-custom-600 dark:text-primary-custom-600'
|
|
376
|
+
: 'text-content-primary dark:text-dark-content-primary'
|
|
377
|
+
}
|
|
378
|
+
`}
|
|
379
|
+
>
|
|
380
|
+
Cliente
|
|
381
|
+
</span>
|
|
382
|
+
{activeTab === 'client' && (
|
|
383
|
+
<div className="absolute bottom-[-10px] left-0 right-0 h-0.5 bg-primary-custom-600 dark:bg-primary-custom-600 rounded-full" />
|
|
384
|
+
)}
|
|
385
|
+
</button>
|
|
386
|
+
</div>
|
|
387
|
+
|
|
388
|
+
{/* Body: Lista de items del pedido */}
|
|
389
|
+
<div
|
|
390
|
+
className="
|
|
391
|
+
flex-1
|
|
392
|
+
flex
|
|
393
|
+
flex-col
|
|
394
|
+
gap-2
|
|
395
|
+
p-4
|
|
396
|
+
bg-white
|
|
397
|
+
dark:bg-dark-bg-primary
|
|
398
|
+
rounded-bl-lg
|
|
399
|
+
rounded-br-lg
|
|
400
|
+
overflow-x-hidden
|
|
401
|
+
overflow-y-auto
|
|
402
|
+
z-10
|
|
403
|
+
"
|
|
404
|
+
>
|
|
405
|
+
{orderItems.map((item, index) => (
|
|
406
|
+
<React.Fragment key={item.productId}>
|
|
407
|
+
<POSProductSidebarItems
|
|
408
|
+
categoryLabel={item.categoryLabel}
|
|
409
|
+
categoryColor={item.categoryColor}
|
|
410
|
+
productRef={item.productRef}
|
|
411
|
+
price={item.price}
|
|
412
|
+
productName={item.productName}
|
|
413
|
+
descriptionItems={item.descriptionItems}
|
|
414
|
+
showDescription={!!item.descriptionItems && item.descriptionItems.length > 0}
|
|
415
|
+
quantity={item.quantity}
|
|
416
|
+
onQuantityChange={(qty) => onOrderItemQuantityChange?.(item.productId, qty)}
|
|
417
|
+
onDelete={() => onOrderItemDelete?.(item.productId)}
|
|
418
|
+
/>
|
|
419
|
+
{index < orderItems.length - 1 && <Divider />}
|
|
420
|
+
</React.Fragment>
|
|
421
|
+
))}
|
|
422
|
+
|
|
423
|
+
{/* Estado vacío */}
|
|
424
|
+
{orderItems.length === 0 && (
|
|
425
|
+
<div className="flex items-center justify-center h-full">
|
|
426
|
+
<p className="text-content-secondary dark:text-content-secondary text-center">
|
|
427
|
+
No hay productos en el pedido
|
|
428
|
+
</p>
|
|
429
|
+
</div>
|
|
430
|
+
)}
|
|
431
|
+
</div>
|
|
432
|
+
|
|
433
|
+
{/* Footer: Resumen y botón confirmar */}
|
|
434
|
+
<div className="flex flex-col gap-4 pt-4 z-10">
|
|
435
|
+
{/* Resumen de precios */}
|
|
436
|
+
<div className="flex flex-col gap-2">
|
|
437
|
+
{/* Subtotal */}
|
|
438
|
+
<div className="flex items-start text-base font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
439
|
+
<div className="flex-1">Subtotal</div>
|
|
440
|
+
<div className="flex-1 text-right">{subtotal}</div>
|
|
441
|
+
</div>
|
|
442
|
+
|
|
443
|
+
{/* Impuestos */}
|
|
444
|
+
<div className="flex items-start text-base font-bold leading-6 text-content-primary dark:text-dark-content-primary">
|
|
445
|
+
<div className="flex-1">Impuestos</div>
|
|
446
|
+
<div className="flex-1 text-right">{taxes}</div>
|
|
447
|
+
</div>
|
|
448
|
+
|
|
449
|
+
{/* Divider */}
|
|
450
|
+
<Divider />
|
|
451
|
+
|
|
452
|
+
{/* Total */}
|
|
453
|
+
<div className="flex items-start text-lg font-bold leading-7 text-content-primary dark:text-dark-content-primary">
|
|
454
|
+
<div className="flex-1">Total</div>
|
|
455
|
+
<div className="flex-1 text-right">{total}</div>
|
|
456
|
+
</div>
|
|
457
|
+
</div>
|
|
458
|
+
|
|
459
|
+
{/* Botón confirmar */}
|
|
460
|
+
<div className="flex gap-2 w-full">
|
|
461
|
+
<Button
|
|
462
|
+
type="default"
|
|
463
|
+
leftIcon={<CheckIcon className="w-4 h-4" />}
|
|
464
|
+
onClick={onConfirmOrder}
|
|
465
|
+
fullWidth
|
|
466
|
+
disabled={orderItems.length === 0 || isLoading}
|
|
467
|
+
>
|
|
468
|
+
{confirmLabel}
|
|
469
|
+
</Button>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</div>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
</div>
|
|
476
|
+
</div>
|
|
477
|
+
);
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
ProductsView.displayName = 'ProductsView';
|