siesa-ui-kit 1.0.0 → 1.0.2
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 +54 -28
- package/claude/settings.local.json +7 -61
- package/dist/ButtonTest.d.ts +6 -0
- package/dist/ButtonTest.d.ts.map +1 -0
- package/dist/components/Alert/Alert.d.ts +23 -0
- package/dist/components/Alert/Alert.d.ts.map +1 -0
- package/dist/components/Alert/Alert.types.d.ts +46 -0
- package/dist/components/Alert/Alert.types.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.d.ts +41 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.types.d.ts +46 -0
- package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
- package/dist/components/Badge/Badge.d.ts +42 -0
- package/dist/components/Badge/Badge.d.ts.map +1 -0
- package/dist/components/Badge/Badge.types.d.ts +32 -0
- package/dist/components/Badge/Badge.types.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +84 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/Button.types.d.ts +162 -0
- package/dist/components/Button/Button.types.d.ts.map +1 -0
- package/dist/components/Button/icons.d.ts +26 -0
- package/dist/components/Button/icons.d.ts.map +1 -0
- package/dist/components/Button/index.d.ts +4 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.d.ts +31 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts +53 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts +38 -0
- package/dist/components/DescriptionList/DescriptionList.d.ts.map +1 -0
- package/dist/components/DescriptionList/DescriptionList.types.d.ts +27 -0
- package/dist/components/DescriptionList/DescriptionList.types.d.ts.map +1 -0
- package/dist/components/Divider/Divider.d.ts +33 -0
- package/dist/components/Divider/Divider.d.ts.map +1 -0
- package/dist/components/Divider/Divider.types.d.ts +22 -0
- package/dist/components/Divider/Divider.types.d.ts.map +1 -0
- package/dist/components/Dropdown/Dropdown.d.ts +66 -0
- package/dist/components/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/Dropdown/Dropdown.types.d.ts +124 -0
- package/dist/components/Dropdown/Dropdown.types.d.ts.map +1 -0
- package/dist/components/Dropdown/icons.d.ts +10 -0
- package/dist/components/Dropdown/icons.d.ts.map +1 -0
- package/dist/components/Dropdown/index.d.ts +4 -0
- package/dist/components/Dropdown/index.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts +101 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +95 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/icons.d.ts +19 -0
- package/dist/components/DropdownItemCollapsible/icons.d.ts.map +1 -0
- package/dist/components/DropdownItemCollapsible/index.d.ts +9 -0
- package/dist/components/DropdownItemCollapsible/index.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts +75 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts +85 -0
- package/dist/components/DropdownItemHeading/DropdownItemHeading.types.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/icons.d.ts +48 -0
- package/dist/components/DropdownItemHeading/icons.d.ts.map +1 -0
- package/dist/components/DropdownItemHeading/index.d.ts +4 -0
- package/dist/components/DropdownItemHeading/index.d.ts.map +1 -0
- package/dist/components/Input/Input.d.ts +40 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/Input.types.d.ts +71 -0
- package/dist/components/Input/Input.types.d.ts.map +1 -0
- package/dist/components/Input/icons.d.ts +15 -0
- package/dist/components/Input/icons.d.ts.map +1 -0
- package/dist/components/Input/index.d.ts +3 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/LoginView/LoginView.d.ts +36 -0
- package/dist/components/LoginView/LoginView.d.ts.map +1 -0
- package/dist/components/LoginView/LoginView.types.d.ts +46 -0
- package/dist/components/LoginView/LoginView.types.d.ts.map +1 -0
- package/dist/components/LoginView/icons.d.ts +18 -0
- package/dist/components/LoginView/icons.d.ts.map +1 -0
- package/dist/components/LoginView/index.d.ts +4 -0
- package/dist/components/LoginView/index.d.ts.map +1 -0
- package/dist/components/Navbar/Navbar.d.ts +63 -0
- package/dist/components/Navbar/Navbar.d.ts.map +1 -0
- package/dist/components/Navbar/Navbar.types.d.ts +194 -0
- package/dist/components/Navbar/Navbar.types.d.ts.map +1 -0
- package/dist/components/Navbar/icons.d.ts +12 -0
- package/dist/components/Navbar/icons.d.ts.map +1 -0
- package/dist/components/Navbar/index.d.ts +4 -0
- package/dist/components/Navbar/index.d.ts.map +1 -0
- package/dist/components/NavigationBar/NavigationBar.d.ts +75 -0
- package/dist/components/NavigationBar/NavigationBar.d.ts.map +1 -0
- package/dist/components/NavigationBar/NavigationBar.types.d.ts +63 -0
- package/dist/components/NavigationBar/NavigationBar.types.d.ts.map +1 -0
- package/dist/components/NavigationBar/index.d.ts +3 -0
- package/dist/components/NavigationBar/index.d.ts.map +1 -0
- package/dist/components/NavigationRail/NavigationRail.d.ts +7 -0
- package/dist/components/NavigationRail/NavigationRail.d.ts.map +1 -0
- package/dist/components/NavigationRail/NavigationRail.types.d.ts +92 -0
- package/dist/components/NavigationRail/NavigationRail.types.d.ts.map +1 -0
- package/dist/components/NavigationRail/index.d.ts +3 -0
- package/dist/components/NavigationRail/index.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts +90 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +155 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/index.d.ts +3 -0
- package/dist/components/NavigationRailItem/index.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts +124 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts +154 -0
- package/dist/components/NavigationRailPanel/NavigationRailPanel.types.d.ts.map +1 -0
- package/dist/components/NavigationRailPanel/index.d.ts +3 -0
- package/dist/components/NavigationRailPanel/index.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts +99 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +111 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/icons.d.ts +58 -0
- package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -0
- package/dist/components/NavigationRailTypes/index.d.ts +4 -0
- package/dist/components/NavigationRailTypes/index.d.ts.map +1 -0
- package/dist/components/Notification/Notification.d.ts +52 -0
- package/dist/components/Notification/Notification.d.ts.map +1 -0
- package/dist/components/Notification/Notification.types.d.ts +138 -0
- package/dist/components/Notification/Notification.types.d.ts.map +1 -0
- package/dist/components/Notification/index.d.ts +3 -0
- package/dist/components/Notification/index.d.ts.map +1 -0
- package/dist/components/POSConvention/POSConvention.d.ts +55 -0
- package/dist/components/POSConvention/POSConvention.d.ts.map +1 -0
- package/dist/components/POSConvention/POSConvention.types.d.ts +37 -0
- package/dist/components/POSConvention/POSConvention.types.d.ts.map +1 -0
- package/dist/components/POSConvention/icons.d.ts +21 -0
- package/dist/components/POSConvention/icons.d.ts.map +1 -0
- package/dist/components/POSConvention/index.d.ts +4 -0
- package/dist/components/POSConvention/index.d.ts.map +1 -0
- package/dist/components/POSLocationButton/POSLocationButton.d.ts +73 -0
- package/dist/components/POSLocationButton/POSLocationButton.d.ts.map +1 -0
- package/dist/components/POSLocationButton/POSLocationButton.types.d.ts +75 -0
- package/dist/components/POSLocationButton/POSLocationButton.types.d.ts.map +1 -0
- package/dist/components/POSLocationButton/icons.d.ts +37 -0
- package/dist/components/POSLocationButton/icons.d.ts.map +1 -0
- package/dist/components/POSLocationButton/index.d.ts +4 -0
- package/dist/components/POSLocationButton/index.d.ts.map +1 -0
- package/dist/components/POSNumberButton/POSNumberButton.d.ts +61 -0
- package/dist/components/POSNumberButton/POSNumberButton.d.ts.map +1 -0
- package/dist/components/POSNumberButton/POSNumberButton.types.d.ts +43 -0
- package/dist/components/POSNumberButton/POSNumberButton.types.d.ts.map +1 -0
- package/dist/components/POSNumberButton/index.d.ts +3 -0
- package/dist/components/POSNumberButton/index.d.ts.map +1 -0
- package/dist/components/POSProductButton/POSProductButton.d.ts +59 -0
- package/dist/components/POSProductButton/POSProductButton.d.ts.map +1 -0
- package/dist/components/POSProductButton/POSProductButton.types.d.ts +40 -0
- package/dist/components/POSProductButton/POSProductButton.types.d.ts.map +1 -0
- package/dist/components/POSProductButton/index.d.ts +3 -0
- package/dist/components/POSProductButton/index.d.ts.map +1 -0
- package/dist/components/POSProductCard/POSProductCard.d.ts +68 -0
- package/dist/components/POSProductCard/POSProductCard.d.ts.map +1 -0
- package/dist/components/POSProductCard/POSProductCard.types.d.ts +67 -0
- package/dist/components/POSProductCard/POSProductCard.types.d.ts.map +1 -0
- package/dist/components/POSProductCard/icons.d.ts +10 -0
- package/dist/components/POSProductCard/icons.d.ts.map +1 -0
- package/dist/components/POSProductCard/index.d.ts +3 -0
- package/dist/components/POSProductCard/index.d.ts.map +1 -0
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts +57 -0
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.d.ts.map +1 -0
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts +85 -0
- package/dist/components/POSProductSidebarItems/POSProductSidebarItems.types.d.ts.map +1 -0
- package/dist/components/POSProductSidebarItems/icons.d.ts +9 -0
- package/dist/components/POSProductSidebarItems/icons.d.ts.map +1 -0
- package/dist/components/POSProductSidebarItems/index.d.ts +4 -0
- package/dist/components/POSProductSidebarItems/index.d.ts.map +1 -0
- package/dist/components/POSTable/POSTable.d.ts +75 -0
- package/dist/components/POSTable/POSTable.d.ts.map +1 -0
- package/dist/components/POSTable/POSTable.types.d.ts +71 -0
- package/dist/components/POSTable/POSTable.types.d.ts.map +1 -0
- package/dist/components/POSTable/index.d.ts +3 -0
- package/dist/components/POSTable/index.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +29 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.types.d.ts +79 -0
- package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
- package/dist/components/Pagination/icons.d.ts +18 -0
- package/dist/components/Pagination/icons.d.ts.map +1 -0
- package/dist/components/Pagination/index.d.ts +4 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Quantity/Quantity.d.ts +38 -0
- package/dist/components/Quantity/Quantity.d.ts.map +1 -0
- package/dist/components/Quantity/Quantity.types.d.ts +59 -0
- package/dist/components/Quantity/Quantity.types.d.ts.map +1 -0
- package/dist/components/Radio/Radio.d.ts +45 -0
- package/dist/components/Radio/Radio.d.ts.map +1 -0
- package/dist/components/Radio/Radio.types.d.ts +115 -0
- package/dist/components/Radio/Radio.types.d.ts.map +1 -0
- package/dist/components/Select/Select.d.ts +37 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/Select.types.d.ts +124 -0
- package/dist/components/Select/Select.types.d.ts.map +1 -0
- package/dist/components/Select/icons.d.ts +16 -0
- package/dist/components/Select/icons.d.ts.map +1 -0
- package/dist/components/Select/index.d.ts +4 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/SignUpView/SignUpView.d.ts +38 -0
- package/dist/components/SignUpView/SignUpView.d.ts.map +1 -0
- package/dist/components/SignUpView/SignUpView.types.d.ts +51 -0
- package/dist/components/SignUpView/SignUpView.types.d.ts.map +1 -0
- package/dist/components/SignUpView/icons.d.ts +18 -0
- package/dist/components/SignUpView/icons.d.ts.map +1 -0
- package/dist/components/SignUpView/index.d.ts +4 -0
- package/dist/components/SignUpView/index.d.ts.map +1 -0
- package/dist/components/Switch/Switch.d.ts +46 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/Switch.types.d.ts +58 -0
- package/dist/components/Switch/Switch.types.d.ts.map +1 -0
- package/dist/components/Table/Table.d.ts +64 -0
- package/dist/components/Table/Table.d.ts.map +1 -0
- package/dist/components/Table/Table.types.d.ts +173 -0
- package/dist/components/Table/Table.types.d.ts.map +1 -0
- package/dist/components/Table/index.d.ts +3 -0
- package/dist/components/Table/index.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.d.ts +76 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.types.d.ts +107 -0
- package/dist/components/Tabs/Tabs.types.d.ts.map +1 -0
- package/dist/components/Tabs/icons.d.ts +45 -0
- package/dist/components/Tabs/icons.d.ts.map +1 -0
- package/dist/components/Tabs/index.d.ts +4 -0
- package/dist/components/Tabs/index.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.d.ts +38 -0
- package/dist/components/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/Textarea/Textarea.types.d.ts +46 -0
- package/dist/components/Textarea/Textarea.types.d.ts.map +1 -0
- package/dist/context/ThemeContext.d.ts +46 -0
- package/dist/context/ThemeContext.d.ts.map +1 -0
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/siesa-ui-kit.cjs +1260 -0
- package/dist/siesa-ui-kit.cjs.map +1 -0
- package/dist/siesa-ui-kit.mjs +4496 -0
- package/dist/siesa-ui-kit.mjs.map +1 -0
- package/dist/views/ListView/ListView.d.ts +47 -0
- package/dist/views/ListView/ListView.d.ts.map +1 -0
- package/dist/views/ListView/ListView.types.d.ts +177 -0
- package/dist/views/ListView/ListView.types.d.ts.map +1 -0
- package/dist/views/ListView/icons.d.ts +60 -0
- package/dist/views/ListView/icons.d.ts.map +1 -0
- package/dist/views/ListView/index.d.ts +3 -0
- package/dist/views/ListView/index.d.ts.map +1 -0
- package/dist/views/LoginView/LoginView.d.ts +36 -0
- package/dist/views/LoginView/LoginView.d.ts.map +1 -0
- package/dist/views/LoginView/LoginView.types.d.ts +46 -0
- package/dist/views/LoginView/LoginView.types.d.ts.map +1 -0
- package/dist/views/LoginView/icons.d.ts +18 -0
- package/dist/views/LoginView/icons.d.ts.map +1 -0
- package/dist/views/LoginView/index.d.ts +4 -0
- package/dist/views/LoginView/index.d.ts.map +1 -0
- package/dist/views/ProductsView/ProductsView.d.ts +56 -0
- package/dist/views/ProductsView/ProductsView.d.ts.map +1 -0
- package/dist/views/ProductsView/ProductsView.types.d.ts +184 -0
- package/dist/views/ProductsView/ProductsView.types.d.ts.map +1 -0
- package/dist/views/ProductsView/icons.d.ts +12 -0
- package/dist/views/ProductsView/icons.d.ts.map +1 -0
- package/dist/views/ProductsView/index.d.ts +3 -0
- package/dist/views/ProductsView/index.d.ts.map +1 -0
- package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts +34 -0
- package/dist/views/RecoverPasswordView/RecoverPasswordView.d.ts.map +1 -0
- package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts +50 -0
- package/dist/views/RecoverPasswordView/RecoverPasswordView.types.d.ts.map +1 -0
- package/dist/views/RecoverPasswordView/icons.d.ts +9 -0
- package/dist/views/RecoverPasswordView/icons.d.ts.map +1 -0
- package/dist/views/RecoverPasswordView/index.d.ts +3 -0
- package/dist/views/RecoverPasswordView/index.d.ts.map +1 -0
- package/dist/views/SignUpView/SignUpView.d.ts +38 -0
- package/dist/views/SignUpView/SignUpView.d.ts.map +1 -0
- package/dist/views/SignUpView/SignUpView.types.d.ts +51 -0
- package/dist/views/SignUpView/SignUpView.types.d.ts.map +1 -0
- package/dist/views/SignUpView/icons.d.ts +18 -0
- package/dist/views/SignUpView/icons.d.ts.map +1 -0
- package/dist/views/SignUpView/index.d.ts +4 -0
- package/dist/views/SignUpView/index.d.ts.map +1 -0
- package/dist/views/TableLayoutView/TableLayoutView.d.ts +46 -0
- package/dist/views/TableLayoutView/TableLayoutView.d.ts.map +1 -0
- package/dist/views/TableLayoutView/TableLayoutView.types.d.ts +170 -0
- package/dist/views/TableLayoutView/TableLayoutView.types.d.ts.map +1 -0
- package/dist/views/TableLayoutView/icons.d.ts +27 -0
- package/dist/views/TableLayoutView/icons.d.ts.map +1 -0
- package/dist/views/TableLayoutView/index.d.ts +3 -0
- package/dist/views/TableLayoutView/index.d.ts.map +1 -0
- 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 -1283
- package/docs/shadows.md +1377 -1377
- package/docs/spacing.md +1684 -1684
- package/docs/typography.md +1268 -1268
- package/package.json +33 -6
- 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.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/icons.tsx +87 -87
- 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.tsx +96 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +29 -29
- 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/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +287 -0
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +111 -0
- package/src/components/DropdownItemCollapsible/README.md +264 -0
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -0
- package/src/components/DropdownItemCollapsible/index.ts +12 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -0
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -0
- package/src/components/DropdownItemHeading/README.md +573 -0
- package/src/components/DropdownItemHeading/icons.tsx +125 -0
- package/src/components/DropdownItemHeading/index.ts +3 -0
- package/src/components/Input/Input.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/Navbar/icons.tsx +102 -102
- 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/NavigationRailItem/NavigationRailItem.stories.tsx +667 -0
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +313 -0
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +167 -0
- package/src/components/NavigationRailItem/README.md +476 -0
- package/src/components/NavigationRailItem/index.ts +2 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -0
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -0
- package/src/components/NavigationRailPanel/README.md +461 -0
- package/src/components/NavigationRailPanel/index.ts +6 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +528 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +378 -0
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +130 -0
- package/src/components/NavigationRailTypes/README.md +573 -0
- package/src/components/NavigationRailTypes/icons.tsx +141 -0
- package/src/components/NavigationRailTypes/index.ts +7 -0
- package/src/components/Notification/index.ts +3 -3
- 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/POSTable/POSTable.types.ts +83 -83
- 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.tsx +289 -289
- package/src/components/Quantity/Quantity.types.ts +70 -70
- 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 -673
- package/src/components/Select/Select.types.ts +148 -148
- package/src/components/Select/icons.tsx +50 -50
- package/src/components/Select/index.ts +3 -3
- package/src/components/Table/README.md +369 -369
- 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/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 +63 -0
- package/src/main.tsx +10 -10
- package/src/views/ListView/ListView.stories.tsx +329 -0
- package/src/views/ListView/ListView.tsx +570 -0
- package/src/views/ListView/ListView.types.ts +211 -0
- package/src/views/ListView/icons.tsx +282 -0
- package/src/views/ListView/index.ts +11 -0
- package/src/views/LoginView/LoginView.stories.tsx +148 -0
- package/src/views/LoginView/LoginView.tsx +426 -0
- package/src/views/LoginView/LoginView.types.ts +52 -0
- package/src/views/LoginView/README.md +396 -0
- package/src/views/LoginView/icons.tsx +85 -0
- package/src/views/LoginView/index.ts +3 -0
- package/src/views/RecoverPasswordView/README.md +269 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +131 -131
- 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/SignUpView/SignUpView.stories.tsx +129 -0
- package/src/views/SignUpView/SignUpView.tsx +503 -0
- package/src/views/SignUpView/SignUpView.types.ts +58 -0
- package/src/views/SignUpView/icons.tsx +71 -0
- package/src/views/SignUpView/index.ts +3 -0
- package/claude/agents/siesa-ui-kit-specialist.md +0 -2401
- package/claude/prompts/component-template.md +0 -121
|
@@ -1,369 +1,369 @@
|
|
|
1
|
-
# Table Component
|
|
2
|
-
|
|
3
|
-
Componente de tabla flexible y accesible con soporte para sorting, variantes visuales y dark mode completo.
|
|
4
|
-
|
|
5
|
-
## Características
|
|
6
|
-
|
|
7
|
-
- ✅ **Definición de columnas flexible** con `accessor` y `render` custom
|
|
8
|
-
- ✅ **Sorting** en columnas (controlado o no controlado)
|
|
9
|
-
- ✅ **Variantes visuales**: basic, fullWidth, striped, grid
|
|
10
|
-
- ✅ **Dark mode completo** en todos los estados
|
|
11
|
-
- ✅ **Estados de loading y empty**
|
|
12
|
-
- ✅ **Filas clickeables**
|
|
13
|
-
- ✅ **TypeScript** con tipos estrictos y generics
|
|
14
|
-
- ✅ **Accesibilidad** con roles y keyboard navigation
|
|
15
|
-
|
|
16
|
-
## Uso Básico
|
|
17
|
-
|
|
18
|
-
```tsx
|
|
19
|
-
import { Table } from '@/components/Table';
|
|
20
|
-
import type { TableColumn } from '@/components/Table';
|
|
21
|
-
|
|
22
|
-
interface Usuario {
|
|
23
|
-
id: number;
|
|
24
|
-
nombre: string;
|
|
25
|
-
email: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const usuarios: Usuario[] = [
|
|
29
|
-
{ id: 1, nombre: 'Juan Pérez', email: 'juan@example.com' },
|
|
30
|
-
{ id: 2, nombre: 'María García', email: 'maria@example.com' },
|
|
31
|
-
];
|
|
32
|
-
|
|
33
|
-
const columns: TableColumn<Usuario>[] = [
|
|
34
|
-
{ header: 'Nombre', accessor: 'nombre' },
|
|
35
|
-
{ header: 'Email', accessor: 'email' },
|
|
36
|
-
];
|
|
37
|
-
|
|
38
|
-
function App() {
|
|
39
|
-
return (
|
|
40
|
-
<Table
|
|
41
|
-
title="Usuarios"
|
|
42
|
-
columns={columns}
|
|
43
|
-
data={usuarios}
|
|
44
|
-
/>
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Variantes
|
|
50
|
-
|
|
51
|
-
### Basic
|
|
52
|
-
Tabla estándar con padding y spacing consistente.
|
|
53
|
-
|
|
54
|
-
```tsx
|
|
55
|
-
<Table
|
|
56
|
-
title="Usuarios"
|
|
57
|
-
columns={columns}
|
|
58
|
-
data={data}
|
|
59
|
-
variant="basic"
|
|
60
|
-
/>
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Full Width
|
|
64
|
-
Tabla que ocupa todo el ancho disponible.
|
|
65
|
-
|
|
66
|
-
```tsx
|
|
67
|
-
<Table
|
|
68
|
-
title="Usuarios"
|
|
69
|
-
columns={columns}
|
|
70
|
-
data={data}
|
|
71
|
-
variant="fullWidth"
|
|
72
|
-
/>
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Striped (Filas Alternas)
|
|
76
|
-
Filas con fondo alternado para mejor legibilidad.
|
|
77
|
-
|
|
78
|
-
```tsx
|
|
79
|
-
<Table
|
|
80
|
-
title="Usuarios"
|
|
81
|
-
columns={columns}
|
|
82
|
-
data={data}
|
|
83
|
-
variant="striped"
|
|
84
|
-
/>
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### Grid (Con Bordes)
|
|
88
|
-
Tabla con bordes alrededor de las celdas.
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
<Table
|
|
92
|
-
title="Usuarios"
|
|
93
|
-
columns={columns}
|
|
94
|
-
data={data}
|
|
95
|
-
variant="grid"
|
|
96
|
-
/>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## Sorting
|
|
100
|
-
|
|
101
|
-
### Sorting No Controlado (Interno)
|
|
102
|
-
|
|
103
|
-
```tsx
|
|
104
|
-
const columns: TableColumn<Usuario>[] = [
|
|
105
|
-
{
|
|
106
|
-
header: 'Nombre',
|
|
107
|
-
accessor: 'nombre',
|
|
108
|
-
sortable: true, // Habilitar sorting
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
header: 'Email',
|
|
112
|
-
accessor: 'email',
|
|
113
|
-
sortable: true,
|
|
114
|
-
},
|
|
115
|
-
];
|
|
116
|
-
|
|
117
|
-
<Table columns={columns} data={data} />
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### Sorting Controlado (Externo)
|
|
121
|
-
|
|
122
|
-
```tsx
|
|
123
|
-
const [sortColumn, setSortColumn] = useState<keyof Usuario | null>(null);
|
|
124
|
-
const [sortDirection, setSortDirection] = useState<SortDirection>(null);
|
|
125
|
-
|
|
126
|
-
const handleSort = (column: keyof Usuario | string, direction: SortDirection) => {
|
|
127
|
-
setSortColumn(column as keyof Usuario);
|
|
128
|
-
setSortDirection(direction);
|
|
129
|
-
|
|
130
|
-
// Ordenar los datos
|
|
131
|
-
const sorted = [...data].sort((a, b) => {
|
|
132
|
-
// Lógica de ordenamiento
|
|
133
|
-
});
|
|
134
|
-
setData(sorted);
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
<Table
|
|
138
|
-
columns={columns}
|
|
139
|
-
data={data}
|
|
140
|
-
sortColumn={sortColumn}
|
|
141
|
-
sortDirection={sortDirection}
|
|
142
|
-
onSort={handleSort}
|
|
143
|
-
/>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Render Custom
|
|
147
|
-
|
|
148
|
-
Puedes personalizar cómo se renderiza el contenido de una celda:
|
|
149
|
-
|
|
150
|
-
```tsx
|
|
151
|
-
const columns: TableColumn<Usuario>[] = [
|
|
152
|
-
{
|
|
153
|
-
header: 'Estado',
|
|
154
|
-
accessor: 'estado',
|
|
155
|
-
render: (value, row, index) => (
|
|
156
|
-
<span
|
|
157
|
-
className={`
|
|
158
|
-
px-2 py-1 rounded-md text-xs font-bold
|
|
159
|
-
${value === 'activo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}
|
|
160
|
-
`}
|
|
161
|
-
>
|
|
162
|
-
{value}
|
|
163
|
-
</span>
|
|
164
|
-
),
|
|
165
|
-
},
|
|
166
|
-
];
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Accessor Function
|
|
170
|
-
|
|
171
|
-
Puedes usar una función para acceder a valores anidados o calculados:
|
|
172
|
-
|
|
173
|
-
```tsx
|
|
174
|
-
const columns: TableColumn<Usuario>[] = [
|
|
175
|
-
{
|
|
176
|
-
header: 'Nombre Completo',
|
|
177
|
-
accessor: (row) => `${row.nombre} ${row.apellido}`,
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
header: 'Email',
|
|
181
|
-
accessor: (row) => row.contacto.email.toLowerCase(),
|
|
182
|
-
},
|
|
183
|
-
];
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
## Alineación de Columnas
|
|
187
|
-
|
|
188
|
-
```tsx
|
|
189
|
-
const columns: TableColumn<Usuario>[] = [
|
|
190
|
-
{
|
|
191
|
-
header: 'ID',
|
|
192
|
-
accessor: 'id',
|
|
193
|
-
align: 'center', // 'left' | 'center' | 'right'
|
|
194
|
-
width: '80px', // Ancho fijo
|
|
195
|
-
},
|
|
196
|
-
{
|
|
197
|
-
header: 'Nombre',
|
|
198
|
-
accessor: 'nombre',
|
|
199
|
-
align: 'left',
|
|
200
|
-
},
|
|
201
|
-
];
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## Estados
|
|
205
|
-
|
|
206
|
-
### Loading
|
|
207
|
-
|
|
208
|
-
```tsx
|
|
209
|
-
<Table
|
|
210
|
-
title="Usuarios"
|
|
211
|
-
columns={columns}
|
|
212
|
-
data={[]}
|
|
213
|
-
loading={true}
|
|
214
|
-
loadingRows={5}
|
|
215
|
-
/>
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### Empty
|
|
219
|
-
|
|
220
|
-
```tsx
|
|
221
|
-
<Table
|
|
222
|
-
title="Usuarios"
|
|
223
|
-
columns={columns}
|
|
224
|
-
data={[]}
|
|
225
|
-
emptyMessage="No hay usuarios registrados"
|
|
226
|
-
/>
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Filas Clickeables
|
|
230
|
-
|
|
231
|
-
```tsx
|
|
232
|
-
const handleRowClick = (row: Usuario, index: number) => {
|
|
233
|
-
console.log('Clicked:', row);
|
|
234
|
-
// Navegar a detalle, abrir modal, etc.
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
<Table
|
|
238
|
-
columns={columns}
|
|
239
|
-
data={data}
|
|
240
|
-
onRowClick={handleRowClick}
|
|
241
|
-
/>
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
## Props
|
|
245
|
-
|
|
246
|
-
### TableProps
|
|
247
|
-
|
|
248
|
-
| Prop | Tipo | Default | Descripción |
|
|
249
|
-
|------|------|---------|-------------|
|
|
250
|
-
| `title` | `string` | `undefined` | Título opcional de la tabla |
|
|
251
|
-
| `columns` | `TableColumn<T>[]` | **Required** | Definición de las columnas |
|
|
252
|
-
| `data` | `T[]` | **Required** | Datos de las filas |
|
|
253
|
-
| `variant` | `'basic' \| 'fullWidth' \| 'striped' \| 'grid'` | `'basic'` | Variante visual |
|
|
254
|
-
| `showBorder` | `boolean` | `true` | Si se muestra el borde del container |
|
|
255
|
-
| `showShadow` | `boolean` | `true` | Si se muestra la sombra del container |
|
|
256
|
-
| `onRowClick` | `(row: T, index: number) => void` | `undefined` | Callback al hacer click en una fila |
|
|
257
|
-
| `onSort` | `(column: string, direction: SortDirection) => void` | `undefined` | Callback al cambiar el sort |
|
|
258
|
-
| `sortColumn` | `keyof T \| string` | `undefined` | Columna ordenada (controlado) |
|
|
259
|
-
| `sortDirection` | `SortDirection` | `undefined` | Dirección de sort (controlado) |
|
|
260
|
-
| `fullWidth` | `boolean` | `false` | Si ocupa todo el ancho |
|
|
261
|
-
| `emptyMessage` | `string` | `'No hay datos disponibles'` | Mensaje cuando no hay datos |
|
|
262
|
-
| `loading` | `boolean` | `false` | Si está cargando |
|
|
263
|
-
| `loadingRows` | `number` | `5` | Número de rows skeleton |
|
|
264
|
-
| `className` | `string` | `''` | Clases CSS adicionales |
|
|
265
|
-
| `id` | `string` | `undefined` | ID único |
|
|
266
|
-
|
|
267
|
-
### TableColumn
|
|
268
|
-
|
|
269
|
-
| Prop | Tipo | Default | Descripción |
|
|
270
|
-
|------|------|---------|-------------|
|
|
271
|
-
| `header` | `string` | **Required** | Título del header |
|
|
272
|
-
| `accessor` | `keyof T \| (row: T) => any` | **Required** | Key o función para obtener valor |
|
|
273
|
-
| `sortable` | `boolean` | `false` | Si la columna es sortable |
|
|
274
|
-
| `render` | `(value: any, row: T, index: number) => ReactNode` | `undefined` | Función custom de render |
|
|
275
|
-
| `align` | `'left' \| 'center' \| 'right'` | `'left'` | Alineación del contenido |
|
|
276
|
-
| `width` | `string` | `undefined` | Ancho de la columna |
|
|
277
|
-
|
|
278
|
-
## Dark Mode
|
|
279
|
-
|
|
280
|
-
El componente Table se adapta automáticamente a dark mode usando los tokens de color del sistema:
|
|
281
|
-
|
|
282
|
-
```tsx
|
|
283
|
-
// Los colores se adaptan automáticamente
|
|
284
|
-
<Table
|
|
285
|
-
columns={columns}
|
|
286
|
-
data={data}
|
|
287
|
-
// En light mode: bg-white, text-content-primary
|
|
288
|
-
// En dark mode: bg-dark-bg-primary, text-dark-content-primary
|
|
289
|
-
/>
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
## Accesibilidad
|
|
293
|
-
|
|
294
|
-
- ✅ Headers clickeables tienen `role="button"` y `tabIndex={0}`
|
|
295
|
-
- ✅ Soporta navegación por teclado (Enter y Space)
|
|
296
|
-
- ✅ Estados de sort anunciados visualmente con iconos
|
|
297
|
-
- ✅ Filas clickeables con keyboard support
|
|
298
|
-
|
|
299
|
-
## Ejemplos Avanzados
|
|
300
|
-
|
|
301
|
-
### Tabla de Productos con Render Custom
|
|
302
|
-
|
|
303
|
-
```tsx
|
|
304
|
-
interface Producto {
|
|
305
|
-
id: number;
|
|
306
|
-
nombre: string;
|
|
307
|
-
precio: number;
|
|
308
|
-
stock: number;
|
|
309
|
-
disponible: boolean;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
const columns: TableColumn<Producto>[] = [
|
|
313
|
-
{
|
|
314
|
-
header: 'Producto',
|
|
315
|
-
accessor: 'nombre',
|
|
316
|
-
sortable: true,
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
header: 'Precio',
|
|
320
|
-
accessor: 'precio',
|
|
321
|
-
align: 'right',
|
|
322
|
-
render: (value) => `$${value.toFixed(2)}`,
|
|
323
|
-
},
|
|
324
|
-
{
|
|
325
|
-
header: 'Stock',
|
|
326
|
-
accessor: 'stock',
|
|
327
|
-
align: 'center',
|
|
328
|
-
render: (value) => (
|
|
329
|
-
<span className={value < 10 ? 'text-red-600 font-bold' : ''}>
|
|
330
|
-
{value}
|
|
331
|
-
</span>
|
|
332
|
-
),
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
header: 'Disponibilidad',
|
|
336
|
-
accessor: 'disponible',
|
|
337
|
-
align: 'center',
|
|
338
|
-
render: (value) => (
|
|
339
|
-
<span className={`
|
|
340
|
-
px-2 py-1 rounded text-xs font-bold
|
|
341
|
-
${value ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800'}
|
|
342
|
-
`}>
|
|
343
|
-
{value ? 'Disponible' : 'Agotado'}
|
|
344
|
-
</span>
|
|
345
|
-
),
|
|
346
|
-
},
|
|
347
|
-
];
|
|
348
|
-
|
|
349
|
-
<Table
|
|
350
|
-
title="Inventario de Productos"
|
|
351
|
-
columns={columns}
|
|
352
|
-
data={productos}
|
|
353
|
-
variant="fullWidth"
|
|
354
|
-
/>
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
## Archivos Relacionados
|
|
358
|
-
|
|
359
|
-
- `Table.tsx` - Implementación del componente (561 líneas)
|
|
360
|
-
- `Table.types.ts` - Tipos TypeScript (149 líneas)
|
|
361
|
-
- `Table.stories.tsx` - Stories de Storybook (11 ejemplos)
|
|
362
|
-
- `index.ts` - Exports del módulo
|
|
363
|
-
|
|
364
|
-
## Referencias
|
|
365
|
-
|
|
366
|
-
- [Figma Design](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4184-15615&m=dev)
|
|
367
|
-
- `docs/colors.md` - Sistema de colores
|
|
368
|
-
- `docs/typography.md` - Sistema tipográfico
|
|
369
|
-
- `docs/spacing.md` - Sistema de espaciado
|
|
1
|
+
# Table Component
|
|
2
|
+
|
|
3
|
+
Componente de tabla flexible y accesible con soporte para sorting, variantes visuales y dark mode completo.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
- ✅ **Definición de columnas flexible** con `accessor` y `render` custom
|
|
8
|
+
- ✅ **Sorting** en columnas (controlado o no controlado)
|
|
9
|
+
- ✅ **Variantes visuales**: basic, fullWidth, striped, grid
|
|
10
|
+
- ✅ **Dark mode completo** en todos los estados
|
|
11
|
+
- ✅ **Estados de loading y empty**
|
|
12
|
+
- ✅ **Filas clickeables**
|
|
13
|
+
- ✅ **TypeScript** con tipos estrictos y generics
|
|
14
|
+
- ✅ **Accesibilidad** con roles y keyboard navigation
|
|
15
|
+
|
|
16
|
+
## Uso Básico
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { Table } from '@/components/Table';
|
|
20
|
+
import type { TableColumn } from '@/components/Table';
|
|
21
|
+
|
|
22
|
+
interface Usuario {
|
|
23
|
+
id: number;
|
|
24
|
+
nombre: string;
|
|
25
|
+
email: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const usuarios: Usuario[] = [
|
|
29
|
+
{ id: 1, nombre: 'Juan Pérez', email: 'juan@example.com' },
|
|
30
|
+
{ id: 2, nombre: 'María García', email: 'maria@example.com' },
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const columns: TableColumn<Usuario>[] = [
|
|
34
|
+
{ header: 'Nombre', accessor: 'nombre' },
|
|
35
|
+
{ header: 'Email', accessor: 'email' },
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
function App() {
|
|
39
|
+
return (
|
|
40
|
+
<Table
|
|
41
|
+
title="Usuarios"
|
|
42
|
+
columns={columns}
|
|
43
|
+
data={usuarios}
|
|
44
|
+
/>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Variantes
|
|
50
|
+
|
|
51
|
+
### Basic
|
|
52
|
+
Tabla estándar con padding y spacing consistente.
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<Table
|
|
56
|
+
title="Usuarios"
|
|
57
|
+
columns={columns}
|
|
58
|
+
data={data}
|
|
59
|
+
variant="basic"
|
|
60
|
+
/>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Full Width
|
|
64
|
+
Tabla que ocupa todo el ancho disponible.
|
|
65
|
+
|
|
66
|
+
```tsx
|
|
67
|
+
<Table
|
|
68
|
+
title="Usuarios"
|
|
69
|
+
columns={columns}
|
|
70
|
+
data={data}
|
|
71
|
+
variant="fullWidth"
|
|
72
|
+
/>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Striped (Filas Alternas)
|
|
76
|
+
Filas con fondo alternado para mejor legibilidad.
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<Table
|
|
80
|
+
title="Usuarios"
|
|
81
|
+
columns={columns}
|
|
82
|
+
data={data}
|
|
83
|
+
variant="striped"
|
|
84
|
+
/>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Grid (Con Bordes)
|
|
88
|
+
Tabla con bordes alrededor de las celdas.
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
<Table
|
|
92
|
+
title="Usuarios"
|
|
93
|
+
columns={columns}
|
|
94
|
+
data={data}
|
|
95
|
+
variant="grid"
|
|
96
|
+
/>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Sorting
|
|
100
|
+
|
|
101
|
+
### Sorting No Controlado (Interno)
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
const columns: TableColumn<Usuario>[] = [
|
|
105
|
+
{
|
|
106
|
+
header: 'Nombre',
|
|
107
|
+
accessor: 'nombre',
|
|
108
|
+
sortable: true, // Habilitar sorting
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
header: 'Email',
|
|
112
|
+
accessor: 'email',
|
|
113
|
+
sortable: true,
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
<Table columns={columns} data={data} />
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Sorting Controlado (Externo)
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
const [sortColumn, setSortColumn] = useState<keyof Usuario | null>(null);
|
|
124
|
+
const [sortDirection, setSortDirection] = useState<SortDirection>(null);
|
|
125
|
+
|
|
126
|
+
const handleSort = (column: keyof Usuario | string, direction: SortDirection) => {
|
|
127
|
+
setSortColumn(column as keyof Usuario);
|
|
128
|
+
setSortDirection(direction);
|
|
129
|
+
|
|
130
|
+
// Ordenar los datos
|
|
131
|
+
const sorted = [...data].sort((a, b) => {
|
|
132
|
+
// Lógica de ordenamiento
|
|
133
|
+
});
|
|
134
|
+
setData(sorted);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
<Table
|
|
138
|
+
columns={columns}
|
|
139
|
+
data={data}
|
|
140
|
+
sortColumn={sortColumn}
|
|
141
|
+
sortDirection={sortDirection}
|
|
142
|
+
onSort={handleSort}
|
|
143
|
+
/>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Render Custom
|
|
147
|
+
|
|
148
|
+
Puedes personalizar cómo se renderiza el contenido de una celda:
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
const columns: TableColumn<Usuario>[] = [
|
|
152
|
+
{
|
|
153
|
+
header: 'Estado',
|
|
154
|
+
accessor: 'estado',
|
|
155
|
+
render: (value, row, index) => (
|
|
156
|
+
<span
|
|
157
|
+
className={`
|
|
158
|
+
px-2 py-1 rounded-md text-xs font-bold
|
|
159
|
+
${value === 'activo' ? 'bg-green-100 text-green-800' : 'bg-red-100 text-red-800'}
|
|
160
|
+
`}
|
|
161
|
+
>
|
|
162
|
+
{value}
|
|
163
|
+
</span>
|
|
164
|
+
),
|
|
165
|
+
},
|
|
166
|
+
];
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Accessor Function
|
|
170
|
+
|
|
171
|
+
Puedes usar una función para acceder a valores anidados o calculados:
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
const columns: TableColumn<Usuario>[] = [
|
|
175
|
+
{
|
|
176
|
+
header: 'Nombre Completo',
|
|
177
|
+
accessor: (row) => `${row.nombre} ${row.apellido}`,
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
header: 'Email',
|
|
181
|
+
accessor: (row) => row.contacto.email.toLowerCase(),
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Alineación de Columnas
|
|
187
|
+
|
|
188
|
+
```tsx
|
|
189
|
+
const columns: TableColumn<Usuario>[] = [
|
|
190
|
+
{
|
|
191
|
+
header: 'ID',
|
|
192
|
+
accessor: 'id',
|
|
193
|
+
align: 'center', // 'left' | 'center' | 'right'
|
|
194
|
+
width: '80px', // Ancho fijo
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
header: 'Nombre',
|
|
198
|
+
accessor: 'nombre',
|
|
199
|
+
align: 'left',
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Estados
|
|
205
|
+
|
|
206
|
+
### Loading
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
<Table
|
|
210
|
+
title="Usuarios"
|
|
211
|
+
columns={columns}
|
|
212
|
+
data={[]}
|
|
213
|
+
loading={true}
|
|
214
|
+
loadingRows={5}
|
|
215
|
+
/>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Empty
|
|
219
|
+
|
|
220
|
+
```tsx
|
|
221
|
+
<Table
|
|
222
|
+
title="Usuarios"
|
|
223
|
+
columns={columns}
|
|
224
|
+
data={[]}
|
|
225
|
+
emptyMessage="No hay usuarios registrados"
|
|
226
|
+
/>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Filas Clickeables
|
|
230
|
+
|
|
231
|
+
```tsx
|
|
232
|
+
const handleRowClick = (row: Usuario, index: number) => {
|
|
233
|
+
console.log('Clicked:', row);
|
|
234
|
+
// Navegar a detalle, abrir modal, etc.
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
<Table
|
|
238
|
+
columns={columns}
|
|
239
|
+
data={data}
|
|
240
|
+
onRowClick={handleRowClick}
|
|
241
|
+
/>
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Props
|
|
245
|
+
|
|
246
|
+
### TableProps
|
|
247
|
+
|
|
248
|
+
| Prop | Tipo | Default | Descripción |
|
|
249
|
+
|------|------|---------|-------------|
|
|
250
|
+
| `title` | `string` | `undefined` | Título opcional de la tabla |
|
|
251
|
+
| `columns` | `TableColumn<T>[]` | **Required** | Definición de las columnas |
|
|
252
|
+
| `data` | `T[]` | **Required** | Datos de las filas |
|
|
253
|
+
| `variant` | `'basic' \| 'fullWidth' \| 'striped' \| 'grid'` | `'basic'` | Variante visual |
|
|
254
|
+
| `showBorder` | `boolean` | `true` | Si se muestra el borde del container |
|
|
255
|
+
| `showShadow` | `boolean` | `true` | Si se muestra la sombra del container |
|
|
256
|
+
| `onRowClick` | `(row: T, index: number) => void` | `undefined` | Callback al hacer click en una fila |
|
|
257
|
+
| `onSort` | `(column: string, direction: SortDirection) => void` | `undefined` | Callback al cambiar el sort |
|
|
258
|
+
| `sortColumn` | `keyof T \| string` | `undefined` | Columna ordenada (controlado) |
|
|
259
|
+
| `sortDirection` | `SortDirection` | `undefined` | Dirección de sort (controlado) |
|
|
260
|
+
| `fullWidth` | `boolean` | `false` | Si ocupa todo el ancho |
|
|
261
|
+
| `emptyMessage` | `string` | `'No hay datos disponibles'` | Mensaje cuando no hay datos |
|
|
262
|
+
| `loading` | `boolean` | `false` | Si está cargando |
|
|
263
|
+
| `loadingRows` | `number` | `5` | Número de rows skeleton |
|
|
264
|
+
| `className` | `string` | `''` | Clases CSS adicionales |
|
|
265
|
+
| `id` | `string` | `undefined` | ID único |
|
|
266
|
+
|
|
267
|
+
### TableColumn
|
|
268
|
+
|
|
269
|
+
| Prop | Tipo | Default | Descripción |
|
|
270
|
+
|------|------|---------|-------------|
|
|
271
|
+
| `header` | `string` | **Required** | Título del header |
|
|
272
|
+
| `accessor` | `keyof T \| (row: T) => any` | **Required** | Key o función para obtener valor |
|
|
273
|
+
| `sortable` | `boolean` | `false` | Si la columna es sortable |
|
|
274
|
+
| `render` | `(value: any, row: T, index: number) => ReactNode` | `undefined` | Función custom de render |
|
|
275
|
+
| `align` | `'left' \| 'center' \| 'right'` | `'left'` | Alineación del contenido |
|
|
276
|
+
| `width` | `string` | `undefined` | Ancho de la columna |
|
|
277
|
+
|
|
278
|
+
## Dark Mode
|
|
279
|
+
|
|
280
|
+
El componente Table se adapta automáticamente a dark mode usando los tokens de color del sistema:
|
|
281
|
+
|
|
282
|
+
```tsx
|
|
283
|
+
// Los colores se adaptan automáticamente
|
|
284
|
+
<Table
|
|
285
|
+
columns={columns}
|
|
286
|
+
data={data}
|
|
287
|
+
// En light mode: bg-white, text-content-primary
|
|
288
|
+
// En dark mode: bg-dark-bg-primary, text-dark-content-primary
|
|
289
|
+
/>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Accesibilidad
|
|
293
|
+
|
|
294
|
+
- ✅ Headers clickeables tienen `role="button"` y `tabIndex={0}`
|
|
295
|
+
- ✅ Soporta navegación por teclado (Enter y Space)
|
|
296
|
+
- ✅ Estados de sort anunciados visualmente con iconos
|
|
297
|
+
- ✅ Filas clickeables con keyboard support
|
|
298
|
+
|
|
299
|
+
## Ejemplos Avanzados
|
|
300
|
+
|
|
301
|
+
### Tabla de Productos con Render Custom
|
|
302
|
+
|
|
303
|
+
```tsx
|
|
304
|
+
interface Producto {
|
|
305
|
+
id: number;
|
|
306
|
+
nombre: string;
|
|
307
|
+
precio: number;
|
|
308
|
+
stock: number;
|
|
309
|
+
disponible: boolean;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const columns: TableColumn<Producto>[] = [
|
|
313
|
+
{
|
|
314
|
+
header: 'Producto',
|
|
315
|
+
accessor: 'nombre',
|
|
316
|
+
sortable: true,
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
header: 'Precio',
|
|
320
|
+
accessor: 'precio',
|
|
321
|
+
align: 'right',
|
|
322
|
+
render: (value) => `$${value.toFixed(2)}`,
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
header: 'Stock',
|
|
326
|
+
accessor: 'stock',
|
|
327
|
+
align: 'center',
|
|
328
|
+
render: (value) => (
|
|
329
|
+
<span className={value < 10 ? 'text-red-600 font-bold' : ''}>
|
|
330
|
+
{value}
|
|
331
|
+
</span>
|
|
332
|
+
),
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
header: 'Disponibilidad',
|
|
336
|
+
accessor: 'disponible',
|
|
337
|
+
align: 'center',
|
|
338
|
+
render: (value) => (
|
|
339
|
+
<span className={`
|
|
340
|
+
px-2 py-1 rounded text-xs font-bold
|
|
341
|
+
${value ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-800'}
|
|
342
|
+
`}>
|
|
343
|
+
{value ? 'Disponible' : 'Agotado'}
|
|
344
|
+
</span>
|
|
345
|
+
),
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
|
|
349
|
+
<Table
|
|
350
|
+
title="Inventario de Productos"
|
|
351
|
+
columns={columns}
|
|
352
|
+
data={productos}
|
|
353
|
+
variant="fullWidth"
|
|
354
|
+
/>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
## Archivos Relacionados
|
|
358
|
+
|
|
359
|
+
- `Table.tsx` - Implementación del componente (561 líneas)
|
|
360
|
+
- `Table.types.ts` - Tipos TypeScript (149 líneas)
|
|
361
|
+
- `Table.stories.tsx` - Stories de Storybook (11 ejemplos)
|
|
362
|
+
- `index.ts` - Exports del módulo
|
|
363
|
+
|
|
364
|
+
## Referencias
|
|
365
|
+
|
|
366
|
+
- [Figma Design](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4184-15615&m=dev)
|
|
367
|
+
- `docs/colors.md` - Sistema de colores
|
|
368
|
+
- `docs/typography.md` - Sistema tipográfico
|
|
369
|
+
- `docs/spacing.md` - Sistema de espaciado
|