siesa-ui-kit 1.0.3 → 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 +28 -54
- package/claude/agents/siesa-ui-kit-specialist.md +2401 -0
- package/claude/prompts/component-template.md +121 -0
- package/claude/settings.local.json +61 -0
- package/docs/border-radius.md +1261 -0
- package/docs/colors.md +832 -0
- package/docs/dark-mode-guide.md +1426 -0
- package/docs/filters.md +1243 -0
- package/docs/icons.md +1283 -0
- package/docs/shadows.md +1377 -0
- package/docs/spacing.md +1684 -0
- package/docs/typography.md +1268 -0
- package/package.json +14 -34
- package/postcss.config.cjs +6 -0
- package/public/,Business Logo.png +0 -0
- package/public/.Siesa Logo.png +0 -0
- package/public/bg_siesa.png +0 -0
- package/public/siesa_logo_mobile.png +0 -0
- package/public/vite.svg +1 -0
- package/src/App.css +42 -0
- package/src/App.tsx +8 -0
- package/src/ButtonTest.tsx +147 -0
- package/src/assets/fonts/README.md +261 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +1 -0
- package/src/components/Alert/Alert.stories.tsx +332 -0
- package/src/components/Alert/Alert.tsx +106 -0
- package/src/components/Alert/Alert.types.ts +54 -0
- package/src/components/Avatar/Avatar.stories.tsx +494 -0
- package/src/components/Avatar/Avatar.tsx +143 -0
- package/src/components/Avatar/Avatar.types.ts +53 -0
- package/src/components/Badge/Badge.stories.tsx +339 -0
- package/src/components/Badge/Badge.tsx +278 -0
- package/src/components/Badge/Badge.types.ts +58 -0
- package/src/components/Button/Button.stories.tsx +950 -0
- package/src/components/Button/Button.tsx +337 -0
- package/src/components/Button/Button.types.ts +180 -0
- package/src/components/Button/icons.tsx +87 -0
- package/{dist/components/Button/index.d.ts → src/components/Button/index.ts} +3 -4
- package/src/components/Checkbox/Checkbox.stories.tsx +453 -0
- package/src/components/Checkbox/Checkbox.tsx +208 -0
- package/src/components/Checkbox/Checkbox.types.ts +61 -0
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -0
- package/src/components/DescriptionList/DescriptionList.tsx +96 -0
- package/src/components/DescriptionList/DescriptionList.types.ts +29 -0
- package/src/components/Divider/Divider.stories.tsx +263 -0
- package/src/components/Divider/Divider.tsx +80 -0
- package/src/components/Divider/Divider.types.ts +24 -0
- package/src/components/Dropdown/Dropdown.stories.tsx +552 -0
- package/src/components/Dropdown/Dropdown.tsx +422 -0
- package/src/components/Dropdown/Dropdown.types.ts +146 -0
- package/src/components/Dropdown/README.md +266 -0
- package/src/components/Dropdown/icons.tsx +72 -0
- package/{dist/components/Dropdown/index.d.ts → src/components/Dropdown/index.ts} +8 -4
- package/src/components/Input/Input.stories.tsx +583 -0
- package/src/components/Input/Input.tsx +204 -0
- package/src/components/Input/Input.types.ts +80 -0
- package/src/components/Input/icons.tsx +145 -0
- package/{dist/components/Input/index.d.ts → src/components/Input/index.ts} +2 -3
- package/src/components/LoginView/LoginView.stories.tsx +148 -0
- package/src/components/LoginView/LoginView.tsx +426 -0
- package/src/components/LoginView/LoginView.types.ts +52 -0
- package/src/components/LoginView/README.md +396 -0
- package/src/components/LoginView/icons.tsx +85 -0
- package/{dist/components/LoginView/index.d.ts → src/components/LoginView/index.ts} +3 -4
- package/src/components/Navbar/Navbar.stories.tsx +810 -0
- package/src/components/Navbar/Navbar.tsx +755 -0
- package/src/components/Navbar/Navbar.types.ts +219 -0
- package/src/components/Navbar/README.md +279 -0
- package/src/components/Navbar/icons.tsx +102 -0
- package/src/components/Navbar/index.ts +8 -0
- package/src/components/NavigationBar/NavigationBar.stories.tsx +406 -0
- package/src/components/NavigationBar/NavigationBar.tsx +246 -0
- package/src/components/NavigationBar/NavigationBar.types.ts +74 -0
- package/src/components/NavigationBar/README.md +469 -0
- package/{dist/components/NavigationBar/index.d.ts → src/components/NavigationBar/index.ts} +2 -3
- package/src/components/NavigationRail/NavigationRail.stories.tsx +417 -0
- package/src/components/NavigationRail/NavigationRail.tsx +418 -0
- package/src/components/NavigationRail/NavigationRail.types.ts +109 -0
- package/src/components/NavigationRail/README.md +224 -0
- package/{dist/components/NavigationRail/index.d.ts → src/components/NavigationRail/index.ts} +2 -3
- package/src/components/Notification/Notification.stories.tsx +513 -0
- package/src/components/Notification/Notification.tsx +145 -0
- package/src/components/Notification/Notification.types.ts +142 -0
- package/src/components/Notification/README.md +409 -0
- package/{dist/components/Notification/index.d.ts → src/components/Notification/index.ts} +3 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -0
- package/src/components/POSConvention/POSConvention.tsx +129 -0
- package/{dist/components/POSConvention/POSConvention.types.d.ts → src/components/POSConvention/POSConvention.types.ts} +38 -37
- package/src/components/POSConvention/README.md +123 -0
- package/src/components/POSConvention/icons.tsx +45 -0
- package/{dist/components/POSConvention/index.d.ts → src/components/POSConvention/index.ts} +3 -4
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -0
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -0
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -0
- package/src/components/POSLocationButton/README.md +253 -0
- package/src/components/POSLocationButton/icons.tsx +120 -0
- package/src/components/POSLocationButton/index.ts +14 -0
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -0
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -0
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -0
- package/src/components/POSNumberButton/README.md +321 -0
- package/{dist/components/POSNumberButton/index.d.ts → src/components/POSNumberButton/index.ts} +3 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -0
- package/src/components/POSProductButton/POSProductButton.tsx +152 -0
- package/src/components/POSProductButton/POSProductButton.types.ts +46 -0
- package/src/components/POSProductButton/README.md +269 -0
- package/{dist/components/POSProductButton/index.d.ts → src/components/POSProductButton/index.ts} +2 -3
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -0
- package/src/components/POSProductCard/POSProductCard.tsx +208 -0
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -0
- package/src/components/POSProductCard/README.md +179 -0
- package/src/components/POSProductCard/icons.tsx +26 -0
- package/{dist/components/POSProductCard/index.d.ts → src/components/POSProductCard/index.ts} +2 -3
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -0
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -0
- package/src/components/POSProductSidebarItems/README.md +198 -0
- package/src/components/POSProductSidebarItems/icons.tsx +21 -0
- package/{dist/components/POSProductSidebarItems/index.d.ts → src/components/POSProductSidebarItems/index.ts} +3 -4
- package/src/components/POSTable/POSTable.stories.tsx +737 -0
- package/src/components/POSTable/POSTable.tsx +401 -0
- package/src/components/POSTable/POSTable.types.ts +83 -0
- package/src/components/POSTable/README.md +286 -0
- package/src/components/POSTable/index.ts +7 -0
- package/src/components/Pagination/Pagination.stories.tsx +555 -0
- package/src/components/Pagination/Pagination.tsx +286 -0
- package/src/components/Pagination/Pagination.types.ts +93 -0
- package/src/components/Pagination/README.md +298 -0
- package/src/components/Pagination/icons.tsx +47 -0
- package/{dist/components/Pagination/index.d.ts → src/components/Pagination/index.ts} +3 -4
- package/src/components/Quantity/Quantity.stories.tsx +457 -0
- package/src/components/Quantity/Quantity.tsx +289 -0
- package/src/components/Quantity/Quantity.types.ts +70 -0
- package/src/components/Radio/Radio.stories.tsx +523 -0
- package/src/components/Radio/Radio.tsx +170 -0
- package/src/components/Radio/Radio.types.ts +122 -0
- package/src/components/Select/README.md +299 -0
- package/src/components/Select/Select.stories.tsx +673 -0
- package/src/components/Select/Select.tsx +454 -0
- package/src/components/Select/Select.types.ts +148 -0
- package/src/components/Select/icons.tsx +50 -0
- package/{dist/components/Select/index.d.ts → src/components/Select/index.ts} +3 -4
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/components/SignUpView/SignUpView.tsx +503 -0
- package/src/components/SignUpView/SignUpView.types.ts +58 -0
- package/src/components/SignUpView/icons.tsx +71 -0
- package/{dist/components/SignUpView/index.d.ts → src/components/SignUpView/index.ts} +3 -4
- package/src/components/Switch/README.md +112 -0
- package/src/components/Switch/Switch.stories.tsx +550 -0
- package/src/components/Switch/Switch.tsx +246 -0
- package/src/components/Switch/Switch.types.ts +67 -0
- package/src/components/Table/README.md +369 -0
- package/src/components/Table/Table.stories.tsx +805 -0
- package/src/components/Table/Table.tsx +688 -0
- package/src/components/Table/Table.types.ts +204 -0
- package/src/components/Table/index.ts +9 -0
- package/src/components/Tabs/README.md +201 -0
- package/src/components/Tabs/Tabs.stories.tsx +580 -0
- package/src/components/Tabs/Tabs.tsx +356 -0
- package/src/components/Tabs/Tabs.types.ts +127 -0
- package/src/components/Tabs/icons.tsx +129 -0
- package/src/components/Tabs/index.ts +11 -0
- package/src/components/Textarea/Textarea.stories.tsx +535 -0
- package/src/components/Textarea/Textarea.tsx +188 -0
- package/src/components/Textarea/Textarea.types.ts +54 -0
- package/src/context/ThemeContext.tsx +99 -0
- package/{dist/context/index.d.ts → src/context/index.ts} +1 -2
- package/src/index.css +29 -0
- package/src/index.ts +39 -0
- package/src/main.tsx +10 -0
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -0
- package/src/views/ProductsView/ProductsView.tsx +480 -0
- package/src/views/ProductsView/ProductsView.types.ts +238 -0
- package/src/views/ProductsView/README.md +312 -0
- package/src/views/ProductsView/icons.tsx +38 -0
- package/src/views/ProductsView/index.ts +8 -0
- package/src/views/RecoverPasswordView/README.md +269 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -0
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +56 -0
- package/src/views/RecoverPasswordView/icons.tsx +17 -0
- package/{dist/views/RecoverPasswordView/index.d.ts → src/views/RecoverPasswordView/index.ts} +2 -3
- package/src/views/TableLayoutView/README.md +268 -0
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -0
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -0
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -0
- package/src/views/TableLayoutView/icons.tsx +113 -0
- package/src/views/TableLayoutView/index.ts +6 -0
- package/storybook/main.ts +20 -0
- package/storybook/preview.tsx +84 -0
- package/storybook/vitest.setup.ts +7 -0
- package/tailwind.config.js +128 -0
- 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 -26
- package/dist/components/Button/icons.d.ts.map +0 -1
- 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.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 -95
- 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.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.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.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.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 -155
- 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 -111
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +0 -1
- package/dist/components/NavigationRailTypes/icons.d.ts +0 -58
- 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.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.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.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.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.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.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.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.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 -16
- package/dist/components/Select/icons.d.ts.map +0 -1
- 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.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.map +0 -1
- package/dist/index.d.ts +0 -56
- package/dist/index.d.ts.map +0 -1
- package/dist/siesa-ui-kit.cjs +0 -1260
- package/dist/siesa-ui-kit.cjs.map +0 -1
- package/dist/siesa-ui-kit.mjs +0 -4496
- package/dist/siesa-ui-kit.mjs.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.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
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { POSLocationButtonProps } from './POSLocationButton.types';
|
|
3
|
+
import { CheckIcon, XMarkIcon, CalendarIcon, NoSymbolIcon, UsersIcon } from './icons';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* POSLocationButton del sistema de diseño Siesa
|
|
7
|
+
*
|
|
8
|
+
* Botón especializado para punto de venta (POS) que muestra el estado de disponibilidad
|
|
9
|
+
* de una ubicación física (mesa, salón, terraza, etc.) con indicadores visuales claros.
|
|
10
|
+
*
|
|
11
|
+
* **Estados de disponibilidad (status):**
|
|
12
|
+
* - `available`: Disponible (verde/lime) con icono ✓
|
|
13
|
+
* - `occupied`: Ocupada (naranja/yellow) con icono ✗
|
|
14
|
+
* - `reserved`: Reservada (morado/purple) con icono 📅
|
|
15
|
+
* - `outOfService`: Fuera de servicio (gris/zinc) con icono 🚫
|
|
16
|
+
*
|
|
17
|
+
* **Estados visuales (state):**
|
|
18
|
+
* - `enabled`: Estado normal con fondo blanco/dark
|
|
19
|
+
* - `actived`: Estado seleccionado con fondo coloreado
|
|
20
|
+
*
|
|
21
|
+
* **Características:**
|
|
22
|
+
* - Ancho flexible: por defecto ocupa el 100% del contenedor (fullWidth=true)
|
|
23
|
+
* - Altura fija: 68px (optimizado para interfaces POS)
|
|
24
|
+
* - Muestra nombre de ubicación y capacidad (ej: "1/8 mesas")
|
|
25
|
+
* - Badge visual con icono y texto del estado
|
|
26
|
+
* - Dark mode completo en todos los estados
|
|
27
|
+
* - Focus ring adaptativo
|
|
28
|
+
* - Transiciones suaves
|
|
29
|
+
*
|
|
30
|
+
* Mejores prácticas implementadas:
|
|
31
|
+
* - Orden de modificadores: {responsive}:{dark}:{state}:{utility}
|
|
32
|
+
* - Dark mode con estrategia 'class' (darkMode: 'class')
|
|
33
|
+
* - Tokens de color consistentes con la documentación
|
|
34
|
+
* - Type safety con TypeScript estricto
|
|
35
|
+
* - Accesibilidad con ARIA labels
|
|
36
|
+
*
|
|
37
|
+
* @see docs/colors.md - Sistema de colores
|
|
38
|
+
* @see docs/typography.md - Sistema tipográfico
|
|
39
|
+
* @see docs/spacing.md - Sistema de espaciado
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* // Ubicación disponible
|
|
44
|
+
* <POSLocationButton
|
|
45
|
+
* locationName="Antejardín"
|
|
46
|
+
* status="available"
|
|
47
|
+
* capacity={{ current: 1, total: 8 }}
|
|
48
|
+
* onClick={() => console.log('Seleccionado')}
|
|
49
|
+
* />
|
|
50
|
+
*
|
|
51
|
+
* // Ubicación ocupada y seleccionada
|
|
52
|
+
* <POSLocationButton
|
|
53
|
+
* locationName="Terraza"
|
|
54
|
+
* status="occupied"
|
|
55
|
+
* state="actived"
|
|
56
|
+
* capacity={{ current: 5, total: 8 }}
|
|
57
|
+
* />
|
|
58
|
+
*
|
|
59
|
+
* // Ubicación reservada
|
|
60
|
+
* <POSLocationButton
|
|
61
|
+
* locationName="Salón Principal"
|
|
62
|
+
* status="reserved"
|
|
63
|
+
* capacity={{ current: 3, total: 12 }}
|
|
64
|
+
* />
|
|
65
|
+
*
|
|
66
|
+
* // Fuera de servicio
|
|
67
|
+
* <POSLocationButton
|
|
68
|
+
* locationName="Bar"
|
|
69
|
+
* status="outOfService"
|
|
70
|
+
* disabled
|
|
71
|
+
* />
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export const POSLocationButton: React.FC<POSLocationButtonProps> = ({
|
|
75
|
+
locationName,
|
|
76
|
+
status = 'available',
|
|
77
|
+
state = 'enabled',
|
|
78
|
+
capacity,
|
|
79
|
+
onClick,
|
|
80
|
+
disabled = false,
|
|
81
|
+
className = '',
|
|
82
|
+
ariaLabel,
|
|
83
|
+
fullWidth = true,
|
|
84
|
+
}) => {
|
|
85
|
+
// ===== CONFIGURACIÓN DE COLORES POR STATUS =====
|
|
86
|
+
// Mapeo de colores según especificaciones de Figma (pixel-perfect)
|
|
87
|
+
const statusConfig = {
|
|
88
|
+
available: {
|
|
89
|
+
// Azul Primary Custom (según Figma: #0e79fd)
|
|
90
|
+
textColor: 'text-primary-custom-600 dark:text-primary-custom-600',
|
|
91
|
+
badgeBg: 'bg-primary-custom-100 dark:bg-blue-900/30',
|
|
92
|
+
badgeText: 'text-primary-custom-600 dark:text-blue-400',
|
|
93
|
+
activedBg: 'bg-primary-custom-100 dark:bg-blue-900/30',
|
|
94
|
+
icon: CheckIcon,
|
|
95
|
+
badgeLabel: 'Disponible',
|
|
96
|
+
},
|
|
97
|
+
occupied: {
|
|
98
|
+
// Naranja/Yellow (según Figma: #af460e para texto, #fcedc9 para fondo)
|
|
99
|
+
textColor: 'text-[#af460e] dark:text-orange-400',
|
|
100
|
+
badgeBg: 'bg-[#fcedc9] dark:bg-yellow-900/30',
|
|
101
|
+
badgeText: 'text-[#af460e] dark:text-orange-400',
|
|
102
|
+
activedBg: 'bg-[#fcedc9] dark:bg-yellow-900/30',
|
|
103
|
+
icon: XMarkIcon,
|
|
104
|
+
badgeLabel: 'Ocupada',
|
|
105
|
+
},
|
|
106
|
+
reserved: {
|
|
107
|
+
// Morado/Purple (según Figma: #7e22ce para texto, #f3e8ff para fondo)
|
|
108
|
+
textColor: 'text-[#7e22ce] dark:text-fuchsia-400',
|
|
109
|
+
badgeBg: 'bg-[#f3e8ff] dark:bg-purple-900/30',
|
|
110
|
+
badgeText: 'text-[#7e22ce] dark:text-purple-400',
|
|
111
|
+
activedBg: 'bg-[#f3e8ff] dark:bg-purple-900/30',
|
|
112
|
+
icon: CalendarIcon,
|
|
113
|
+
badgeLabel: 'Reservada',
|
|
114
|
+
},
|
|
115
|
+
outOfService: {
|
|
116
|
+
// Gris/Zinc (según Figma: #3f3f46 para texto, #f4f4f5 para fondo)
|
|
117
|
+
textColor: 'text-[#3f3f46] dark:text-zinc-400',
|
|
118
|
+
badgeBg: 'bg-[#f4f4f5] dark:bg-zinc-800/30',
|
|
119
|
+
badgeText: 'text-content-tertiary dark:text-zinc-400',
|
|
120
|
+
activedBg: 'bg-[#f4f4f5] dark:bg-zinc-800/30',
|
|
121
|
+
icon: NoSymbolIcon,
|
|
122
|
+
badgeLabel: 'F. de Servicio',
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const config = statusConfig[status];
|
|
127
|
+
const StatusIcon = config.icon;
|
|
128
|
+
|
|
129
|
+
// ===== CLASES DE FONDO SEGÚN STATE =====
|
|
130
|
+
const backgroundClasses =
|
|
131
|
+
state === 'actived'
|
|
132
|
+
? config.activedBg // Fondo coloreado cuando está activo
|
|
133
|
+
: 'bg-white dark:bg-dark-bg-primary'; // Fondo blanco/dark cuando está enabled
|
|
134
|
+
|
|
135
|
+
// ===== CLASES DE ANCHO =====
|
|
136
|
+
const widthClasses = fullWidth ? 'w-full' : 'w-[189px]';
|
|
137
|
+
|
|
138
|
+
// ===== CLASES BASE =====
|
|
139
|
+
const baseClasses = `
|
|
140
|
+
flex
|
|
141
|
+
flex-col
|
|
142
|
+
items-stretch
|
|
143
|
+
justify-between
|
|
144
|
+
${widthClasses}
|
|
145
|
+
h-[68px]
|
|
146
|
+
p-2
|
|
147
|
+
rounded-lg
|
|
148
|
+
cursor-pointer
|
|
149
|
+
transition-all
|
|
150
|
+
duration-150
|
|
151
|
+
focus:outline-none
|
|
152
|
+
focus:ring-2
|
|
153
|
+
focus:ring-primary-custom-400
|
|
154
|
+
focus:ring-offset-2
|
|
155
|
+
dark:focus:ring-dark-border-custom
|
|
156
|
+
dark:focus:ring-offset-dark-bg-primary
|
|
157
|
+
hover:shadow-md
|
|
158
|
+
active:scale-[0.98]
|
|
159
|
+
disabled:opacity-50
|
|
160
|
+
disabled:cursor-not-allowed
|
|
161
|
+
disabled:pointer-events-none
|
|
162
|
+
`;
|
|
163
|
+
|
|
164
|
+
// ===== COMBINAR CLASES =====
|
|
165
|
+
const buttonClasses = [baseClasses, backgroundClasses, className]
|
|
166
|
+
.join(' ')
|
|
167
|
+
.replace(/\s+/g, ' ')
|
|
168
|
+
.trim();
|
|
169
|
+
|
|
170
|
+
// ===== FORMATEAR TEXTO DE CAPACIDAD =====
|
|
171
|
+
const capacityText = capacity
|
|
172
|
+
? `${capacity.current}/${capacity.total} mesas`
|
|
173
|
+
: null;
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
<button
|
|
177
|
+
className={buttonClasses}
|
|
178
|
+
onClick={onClick}
|
|
179
|
+
disabled={disabled}
|
|
180
|
+
aria-label={ariaLabel || `${locationName} - ${config.badgeLabel}`}
|
|
181
|
+
type="button"
|
|
182
|
+
>
|
|
183
|
+
{/* ===== TÍTULO (Nombre de ubicación) ===== */}
|
|
184
|
+
<div
|
|
185
|
+
className={`
|
|
186
|
+
text-base
|
|
187
|
+
font-bold
|
|
188
|
+
leading-6
|
|
189
|
+
${config.textColor}
|
|
190
|
+
`
|
|
191
|
+
.replace(/\s+/g, ' ')
|
|
192
|
+
.trim()}
|
|
193
|
+
>
|
|
194
|
+
{locationName}
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
{/* ===== CONTENIDO (Capacidad + Badge) ===== */}
|
|
198
|
+
<div className="flex items-center justify-between">
|
|
199
|
+
{/* Capacidad (izquierda) */}
|
|
200
|
+
{capacityText && (
|
|
201
|
+
<div className="flex items-center gap-1">
|
|
202
|
+
<UsersIcon className={config.textColor} />
|
|
203
|
+
<span
|
|
204
|
+
className={`
|
|
205
|
+
text-[10px]
|
|
206
|
+
leading-[12px]
|
|
207
|
+
${config.textColor}
|
|
208
|
+
`
|
|
209
|
+
.replace(/\s+/g, ' ')
|
|
210
|
+
.trim()}
|
|
211
|
+
>
|
|
212
|
+
{capacityText}
|
|
213
|
+
</span>
|
|
214
|
+
</div>
|
|
215
|
+
)}
|
|
216
|
+
|
|
217
|
+
{/* Badge (derecha) */}
|
|
218
|
+
<div
|
|
219
|
+
className={`
|
|
220
|
+
inline-flex
|
|
221
|
+
items-center
|
|
222
|
+
gap-1
|
|
223
|
+
px-1.5
|
|
224
|
+
py-1
|
|
225
|
+
rounded-md
|
|
226
|
+
${config.badgeBg}
|
|
227
|
+
`
|
|
228
|
+
.replace(/\s+/g, ' ')
|
|
229
|
+
.trim()}
|
|
230
|
+
>
|
|
231
|
+
<StatusIcon className={config.badgeText} />
|
|
232
|
+
<span
|
|
233
|
+
className={`
|
|
234
|
+
text-xs
|
|
235
|
+
leading-4
|
|
236
|
+
${config.badgeText}
|
|
237
|
+
`
|
|
238
|
+
.replace(/\s+/g, ' ')
|
|
239
|
+
.trim()}
|
|
240
|
+
>
|
|
241
|
+
{config.badgeLabel}
|
|
242
|
+
</span>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
</button>
|
|
246
|
+
);
|
|
247
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { MouseEvent } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Estado de disponibilidad de la ubicación POS
|
|
5
|
+
* - available: Disponible (verde/lime)
|
|
6
|
+
* - occupied: Ocupada (naranja/yellow)
|
|
7
|
+
* - reserved: Reservada (morado/purple)
|
|
8
|
+
* - outOfService: Fuera de servicio (gris/zinc)
|
|
9
|
+
*/
|
|
10
|
+
export type POSLocationStatus = 'available' | 'occupied' | 'reserved' | 'outOfService';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Estado visual del botón
|
|
14
|
+
* - enabled: Estado normal (fondo blanco/dark-bg-primary)
|
|
15
|
+
* - actived: Estado activo/seleccionado (fondo con color del badge)
|
|
16
|
+
*/
|
|
17
|
+
export type POSLocationState = 'enabled' | 'actived';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Información de capacidad de la ubicación
|
|
21
|
+
*/
|
|
22
|
+
export interface POSLocationCapacity {
|
|
23
|
+
/**
|
|
24
|
+
* Número actual de mesas/espacios ocupados
|
|
25
|
+
*/
|
|
26
|
+
current: number;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Total de mesas/espacios disponibles
|
|
30
|
+
*/
|
|
31
|
+
total: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Props del componente POSLocationButton
|
|
36
|
+
*/
|
|
37
|
+
export interface POSLocationButtonProps {
|
|
38
|
+
/**
|
|
39
|
+
* Nombre de la ubicación (ej: "Antejardín", "Terraza", "Salón Principal")
|
|
40
|
+
*/
|
|
41
|
+
locationName: string;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Estado de disponibilidad de la ubicación
|
|
45
|
+
* @default 'available'
|
|
46
|
+
*/
|
|
47
|
+
status?: POSLocationStatus;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Estado visual del botón (enabled o actived)
|
|
51
|
+
* @default 'enabled'
|
|
52
|
+
*/
|
|
53
|
+
state?: POSLocationState;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Información de capacidad (mesas ocupadas/total)
|
|
57
|
+
* Ejemplo: { current: 1, total: 8 } → "1/8 mesas"
|
|
58
|
+
*/
|
|
59
|
+
capacity?: POSLocationCapacity;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Función a ejecutar al hacer clic en el botón
|
|
63
|
+
*/
|
|
64
|
+
onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Si el botón está deshabilitado
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
disabled?: boolean;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Clases CSS adicionales
|
|
74
|
+
*/
|
|
75
|
+
className?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Label para accesibilidad (ARIA)
|
|
79
|
+
*/
|
|
80
|
+
ariaLabel?: string;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Si el botón ocupa todo el ancho disponible del contenedor padre
|
|
84
|
+
* @default true
|
|
85
|
+
*/
|
|
86
|
+
fullWidth?: boolean;
|
|
87
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# POSLocationButton
|
|
2
|
+
|
|
3
|
+
Botón especializado para punto de venta (POS) que muestra el estado de disponibilidad de una ubicación física (mesa, salón, terraza, etc.) con indicadores visuales claros.
|
|
4
|
+
|
|
5
|
+
## 📋 Características
|
|
6
|
+
|
|
7
|
+
- ✅ **4 estados de disponibilidad**: Available, Occupied, Reserved, Out of Service
|
|
8
|
+
- ✅ **2 estados visuales**: Enabled (normal) y Actived (seleccionado)
|
|
9
|
+
- ✅ **Información de capacidad**: Muestra mesas ocupadas/total
|
|
10
|
+
- ✅ **Iconos visuales**: Cada estado tiene su icono distintivo
|
|
11
|
+
- ✅ **Dark mode completo**: Todos los estados adaptados para modo oscuro
|
|
12
|
+
- ✅ **Tamaño fijo**: 189x68px optimizado para interfaces POS
|
|
13
|
+
- ✅ **Accesibilidad**: ARIA labels y estados semánticos
|
|
14
|
+
- ✅ **TypeScript**: Type safety completo
|
|
15
|
+
|
|
16
|
+
## 🎨 Estados de Disponibilidad
|
|
17
|
+
|
|
18
|
+
| Status | Color | Icono | Uso |
|
|
19
|
+
|--------|-------|-------|-----|
|
|
20
|
+
| `available` | Verde/Lime | ✓ | Ubicación disponible para asignar |
|
|
21
|
+
| `occupied` | Naranja/Yellow | ✗ | Ubicación actualmente en uso |
|
|
22
|
+
| `reserved` | Morado/Purple | 📅 | Ubicación reservada para uso futuro |
|
|
23
|
+
| `outOfService` | Gris/Zinc | 🚫 | Ubicación fuera de servicio temporalmente |
|
|
24
|
+
|
|
25
|
+
## 🔧 Estados Visuales
|
|
26
|
+
|
|
27
|
+
| State | Descripción | Uso |
|
|
28
|
+
|-------|-------------|-----|
|
|
29
|
+
| `enabled` | Estado normal con fondo blanco/dark | Vista por defecto |
|
|
30
|
+
| `actived` | Estado seleccionado con fondo coloreado | Ubicación actualmente seleccionada en la interfaz |
|
|
31
|
+
|
|
32
|
+
## 📦 Instalación
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { POSLocationButton } from '@/components/POSLocationButton';
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 🚀 Uso Básico
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
// Ubicación disponible
|
|
42
|
+
<POSLocationButton
|
|
43
|
+
locationName="Antejardín"
|
|
44
|
+
status="available"
|
|
45
|
+
capacity={{ current: 1, total: 8 }}
|
|
46
|
+
onClick={() => console.log('Seleccionado')}
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## 📖 Ejemplos
|
|
51
|
+
|
|
52
|
+
### Dashboard de Restaurante
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<div className="grid grid-cols-2 gap-3">
|
|
56
|
+
<POSLocationButton
|
|
57
|
+
locationName="Antejardín"
|
|
58
|
+
status="available"
|
|
59
|
+
capacity={{ current: 1, total: 8 }}
|
|
60
|
+
/>
|
|
61
|
+
<POSLocationButton
|
|
62
|
+
locationName="Terraza"
|
|
63
|
+
status="occupied"
|
|
64
|
+
capacity={{ current: 5, total: 8 }}
|
|
65
|
+
/>
|
|
66
|
+
<POSLocationButton
|
|
67
|
+
locationName="Salón Principal"
|
|
68
|
+
status="reserved"
|
|
69
|
+
capacity={{ current: 3, total: 12 }}
|
|
70
|
+
/>
|
|
71
|
+
<POSLocationButton
|
|
72
|
+
locationName="Bar"
|
|
73
|
+
status="outOfService"
|
|
74
|
+
disabled
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Ubicación Seleccionada
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
// Estado normal
|
|
83
|
+
<POSLocationButton
|
|
84
|
+
locationName="Terraza"
|
|
85
|
+
status="available"
|
|
86
|
+
capacity={{ current: 2, total: 10 }}
|
|
87
|
+
/>
|
|
88
|
+
|
|
89
|
+
// Estado seleccionado (actived)
|
|
90
|
+
<POSLocationButton
|
|
91
|
+
locationName="Salón VIP"
|
|
92
|
+
status="available"
|
|
93
|
+
state="actived"
|
|
94
|
+
capacity={{ current: 1, total: 6 }}
|
|
95
|
+
/>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Sin Información de Capacidad
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
<POSLocationButton
|
|
102
|
+
locationName="Área de Espera"
|
|
103
|
+
status="available"
|
|
104
|
+
/>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Ubicación Deshabilitada
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
<POSLocationButton
|
|
111
|
+
locationName="Bar"
|
|
112
|
+
status="outOfService"
|
|
113
|
+
disabled
|
|
114
|
+
/>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## 🎯 Props
|
|
118
|
+
|
|
119
|
+
### POSLocationButtonProps
|
|
120
|
+
|
|
121
|
+
| Prop | Tipo | Default | Descripción |
|
|
122
|
+
|------|------|---------|-------------|
|
|
123
|
+
| `locationName` | `string` | **requerido** | Nombre de la ubicación (ej: "Antejardín", "Terraza") |
|
|
124
|
+
| `status` | `POSLocationStatus` | `'available'` | Estado de disponibilidad |
|
|
125
|
+
| `state` | `POSLocationState` | `'enabled'` | Estado visual del botón |
|
|
126
|
+
| `capacity` | `POSLocationCapacity` | `undefined` | Información de capacidad (mesas ocupadas/total) |
|
|
127
|
+
| `onClick` | `(event) => void` | `undefined` | Función a ejecutar al hacer clic |
|
|
128
|
+
| `disabled` | `boolean` | `false` | Si el botón está deshabilitado |
|
|
129
|
+
| `className` | `string` | `''` | Clases CSS adicionales |
|
|
130
|
+
| `ariaLabel` | `string` | `undefined` | Label para accesibilidad (ARIA) |
|
|
131
|
+
|
|
132
|
+
### POSLocationStatus
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
type POSLocationStatus = 'available' | 'occupied' | 'reserved' | 'outOfService';
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### POSLocationState
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
type POSLocationState = 'enabled' | 'actived';
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### POSLocationCapacity
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
interface POSLocationCapacity {
|
|
148
|
+
current: number; // Número actual de mesas/espacios ocupados
|
|
149
|
+
total: number; // Total de mesas/espacios disponibles
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 🎨 Especificaciones de Diseño
|
|
154
|
+
|
|
155
|
+
### Tamaños
|
|
156
|
+
|
|
157
|
+
- **Ancho**: 189px (fijo)
|
|
158
|
+
- **Alto**: 68px (fijo)
|
|
159
|
+
- **Padding**: 8px
|
|
160
|
+
- **Border radius**: 8px (rounded-lg)
|
|
161
|
+
|
|
162
|
+
### Tipografía
|
|
163
|
+
|
|
164
|
+
- **Título (locationName)**: 16px Bold (text-base font-bold), line-height 24px
|
|
165
|
+
- **Capacidad**: 10px Regular, line-height 12px
|
|
166
|
+
- **Badge**: 12px Regular (text-xs), line-height 16px
|
|
167
|
+
|
|
168
|
+
### Colores (Light Mode)
|
|
169
|
+
|
|
170
|
+
| Status | Texto | Badge Fondo | Badge Texto |
|
|
171
|
+
|--------|-------|-------------|-------------|
|
|
172
|
+
| `available` | `#4d7c0f` (lime-700) | `#ecfccb` (lime-100) | `#4d7c0f` (lime-700) |
|
|
173
|
+
| `occupied` | `#af460e` (orange-700) | `#fcedc9` (yellow-100) | `#af460e` (orange-700) |
|
|
174
|
+
| `reserved` | `#7e22ce` (purple-700) | `#f3e8ff` (purple-100) | `#7e22ce` (purple-700) |
|
|
175
|
+
| `outOfService` | `#3f3f46` (zinc-700) | `#f4f4f5` (zinc-100) | `#71717a` (zinc-500) |
|
|
176
|
+
|
|
177
|
+
### Colores (Dark Mode)
|
|
178
|
+
|
|
179
|
+
| Status | Texto | Badge Fondo | Badge Texto |
|
|
180
|
+
|--------|-------|-------------|-------------|
|
|
181
|
+
| `available` | `#4d7c0f` (lime-700) | `lime-900/30` | `#a3e635` (lime-400) |
|
|
182
|
+
| `occupied` | `#af460e` (orange-700) | `yellow-900/30` | `#facc15` (yellow-400) |
|
|
183
|
+
| `reserved` | `#7e22ce` (purple-700) | `purple-900/30` | `#c084fc` (purple-400) |
|
|
184
|
+
| `outOfService` | `#3f3f46` (zinc-700) | `zinc-800/30` | `#a1a1aa` (zinc-400) |
|
|
185
|
+
|
|
186
|
+
## ♿ Accesibilidad
|
|
187
|
+
|
|
188
|
+
- **ARIA labels**: Cada botón incluye un aria-label descriptivo por defecto
|
|
189
|
+
- **Estados semánticos**: Los estados disabled y actived son accesibles
|
|
190
|
+
- **Contraste**: Todos los colores cumplen con WCAG AA
|
|
191
|
+
- **Focus ring**: Anillo de enfoque visible y adaptativo
|
|
192
|
+
|
|
193
|
+
## 🌓 Dark Mode
|
|
194
|
+
|
|
195
|
+
El componente se adapta automáticamente al modo oscuro usando la estrategia `class` de Tailwind CSS. Todos los colores tienen variantes dark optimizadas para mantener la legibilidad y el contraste.
|
|
196
|
+
|
|
197
|
+
## 🔗 Archivos Relacionados
|
|
198
|
+
|
|
199
|
+
- `POSLocationButton.tsx` - Componente principal
|
|
200
|
+
- `POSLocationButton.types.ts` - TypeScript types
|
|
201
|
+
- `POSLocationButton.stories.tsx` - Stories de Storybook
|
|
202
|
+
- `icons.tsx` - Iconos del componente
|
|
203
|
+
- `index.ts` - Exports
|
|
204
|
+
|
|
205
|
+
## 📚 Referencias
|
|
206
|
+
|
|
207
|
+
- **Figma**: [POSLocationButton Specs](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4368-30644)
|
|
208
|
+
- **Documentación**: `docs/colors.md`, `docs/typography.md`, `docs/spacing.md`
|
|
209
|
+
- **Referencia**: `src/components/Button/` - Patrón de implementación
|
|
210
|
+
|
|
211
|
+
## ✅ Checklist de Implementación
|
|
212
|
+
|
|
213
|
+
- [x] Componente con JSDoc completo
|
|
214
|
+
- [x] Dark mode en todos los estados
|
|
215
|
+
- [x] TypeScript types estrictos
|
|
216
|
+
- [x] 4 estados de disponibilidad (available, occupied, reserved, outOfService)
|
|
217
|
+
- [x] 2 estados visuales (enabled, actived)
|
|
218
|
+
- [x] Información de capacidad opcional
|
|
219
|
+
- [x] Iconos visuales distintivos
|
|
220
|
+
- [x] Focus rings adaptativos
|
|
221
|
+
- [x] Stories de Storybook completas
|
|
222
|
+
- [x] README con ejemplos
|
|
223
|
+
- [x] Accesibilidad (ARIA)
|
|
224
|
+
- [x] Validación con build
|
|
225
|
+
|
|
226
|
+
## 🎯 Casos de Uso
|
|
227
|
+
|
|
228
|
+
### ✅ Ideal para:
|
|
229
|
+
|
|
230
|
+
- Sistemas POS de restaurantes
|
|
231
|
+
- Gestión de mesas y ubicaciones
|
|
232
|
+
- Dashboards de disponibilidad
|
|
233
|
+
- Interfaces de asignación de recursos
|
|
234
|
+
- Aplicaciones de reservas
|
|
235
|
+
|
|
236
|
+
### ❌ No usar para:
|
|
237
|
+
|
|
238
|
+
- Botones de acción genéricos (usar `Button` en su lugar)
|
|
239
|
+
- Navegación principal (usar `NavigationBar` o `NavigationRail`)
|
|
240
|
+
- Formularios (usar `Button` estándar)
|
|
241
|
+
|
|
242
|
+
## 📝 Notas
|
|
243
|
+
|
|
244
|
+
- El componente tiene un tamaño fijo de 189x68px optimizado para interfaces POS
|
|
245
|
+
- Si no se proporciona `capacity`, solo se muestra el nombre y el estado
|
|
246
|
+
- El estado `actived` es puramente visual y debe ser manejado por el componente padre
|
|
247
|
+
- Para interfaces responsive, considera usar un grid adaptativo para organizar múltiples botones
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
**Versión**: 1.0.0
|
|
252
|
+
**Última actualización**: 2025-11-24
|
|
253
|
+
**Mantenido por**: Equipo Siesa UI Kit
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Icono Check (✓) para estado Available
|
|
5
|
+
* Tamaño: 12x12px
|
|
6
|
+
*/
|
|
7
|
+
export const CheckIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
8
|
+
<svg
|
|
9
|
+
width="12"
|
|
10
|
+
height="12"
|
|
11
|
+
viewBox="0 0 12 12"
|
|
12
|
+
fill="none"
|
|
13
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
14
|
+
className={className}
|
|
15
|
+
>
|
|
16
|
+
<path
|
|
17
|
+
d="M10 3L4.5 8.5L2 6"
|
|
18
|
+
stroke="currentColor"
|
|
19
|
+
strokeWidth="1.5"
|
|
20
|
+
strokeLinecap="round"
|
|
21
|
+
strokeLinejoin="round"
|
|
22
|
+
/>
|
|
23
|
+
</svg>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Icono X Mark para estado Occupied
|
|
28
|
+
* Tamaño: 12x12px
|
|
29
|
+
*/
|
|
30
|
+
export const XMarkIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
31
|
+
<svg
|
|
32
|
+
width="12"
|
|
33
|
+
height="12"
|
|
34
|
+
viewBox="0 0 12 12"
|
|
35
|
+
fill="none"
|
|
36
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
37
|
+
className={className}
|
|
38
|
+
>
|
|
39
|
+
<path
|
|
40
|
+
d="M9 3L3 9M3 3L9 9"
|
|
41
|
+
stroke="currentColor"
|
|
42
|
+
strokeWidth="1.5"
|
|
43
|
+
strokeLinecap="round"
|
|
44
|
+
strokeLinejoin="round"
|
|
45
|
+
/>
|
|
46
|
+
</svg>
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Icono Calendar para estado Reserved
|
|
51
|
+
* Tamaño: 12x12px
|
|
52
|
+
*/
|
|
53
|
+
export const CalendarIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
54
|
+
<svg
|
|
55
|
+
width="12"
|
|
56
|
+
height="12"
|
|
57
|
+
viewBox="0 0 12 12"
|
|
58
|
+
fill="none"
|
|
59
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
60
|
+
className={className}
|
|
61
|
+
>
|
|
62
|
+
<path
|
|
63
|
+
d="M10.5 5H1.5M8.5 1V3M3.5 1V3M3.25 11H8.75C9.57843 11 10.25 10.3284 10.25 9.5V3.5C10.25 2.67157 9.57843 2 8.75 2H3.25C2.42157 2 1.75 2.67157 1.75 3.5V9.5C1.75 10.3284 2.42157 11 3.25 11Z"
|
|
64
|
+
stroke="currentColor"
|
|
65
|
+
strokeWidth="1.5"
|
|
66
|
+
strokeLinecap="round"
|
|
67
|
+
strokeLinejoin="round"
|
|
68
|
+
/>
|
|
69
|
+
</svg>
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Icono No Symbol (Prohibido) para estado Out of Service
|
|
74
|
+
* Tamaño: 12x12px
|
|
75
|
+
*/
|
|
76
|
+
export const NoSymbolIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
77
|
+
<svg
|
|
78
|
+
width="12"
|
|
79
|
+
height="12"
|
|
80
|
+
viewBox="0 0 12 12"
|
|
81
|
+
fill="none"
|
|
82
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
83
|
+
className={className}
|
|
84
|
+
>
|
|
85
|
+
<path
|
|
86
|
+
d="M10.5 6C10.5 8.48528 8.48528 10.5 6 10.5C3.51472 10.5 1.5 8.48528 1.5 6C1.5 3.51472 3.51472 1.5 6 1.5C8.48528 1.5 10.5 3.51472 10.5 6Z"
|
|
87
|
+
stroke="currentColor"
|
|
88
|
+
strokeWidth="1.5"
|
|
89
|
+
/>
|
|
90
|
+
<path
|
|
91
|
+
d="M9.18198 2.81802L2.81802 9.18198"
|
|
92
|
+
stroke="currentColor"
|
|
93
|
+
strokeWidth="1.5"
|
|
94
|
+
strokeLinecap="round"
|
|
95
|
+
/>
|
|
96
|
+
</svg>
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Icono de Usuario/Personas para mostrar capacidad
|
|
101
|
+
* Tamaño: 13x10px (según especificaciones de Figma)
|
|
102
|
+
*/
|
|
103
|
+
export const UsersIcon: React.FC<{ className?: string }> = ({ className = '' }) => (
|
|
104
|
+
<svg
|
|
105
|
+
width="13"
|
|
106
|
+
height="10"
|
|
107
|
+
viewBox="0 0 13 10"
|
|
108
|
+
fill="none"
|
|
109
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
110
|
+
className={className}
|
|
111
|
+
>
|
|
112
|
+
<path
|
|
113
|
+
d="M9.25 9V8C9.25 6.89543 8.35457 6 7.25 6H2.75C1.64543 6 0.75 6.89543 0.75 8V9M12.25 9V8C12.25 6.89543 11.3546 6 10.25 6H9.75M7 2.5C7 3.60457 6.10457 4.5 5 4.5C3.89543 4.5 3 3.60457 3 2.5C3 1.39543 3.89543 0.5 5 0.5C6.10457 0.5 7 1.39543 7 2.5ZM10 2C10 2.82843 9.32843 3.5 8.5 3.5C7.67157 3.5 7 2.82843 7 2C7 1.17157 7.67157 0.5 8.5 0.5C9.32843 0.5 10 1.17157 10 2Z"
|
|
114
|
+
stroke="currentColor"
|
|
115
|
+
strokeWidth="1"
|
|
116
|
+
strokeLinecap="round"
|
|
117
|
+
strokeLinejoin="round"
|
|
118
|
+
/>
|
|
119
|
+
</svg>
|
|
120
|
+
);
|