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
package/docs/spacing.md
ADDED
|
@@ -0,0 +1,1684 @@
|
|
|
1
|
+
# Sistema de Spacing - Siesa UI Kit
|
|
2
|
+
|
|
3
|
+
## 📋 Tabla de Contenidos
|
|
4
|
+
|
|
5
|
+
1. [Introducción](#introducción)
|
|
6
|
+
2. [Escala de Spacing](#escala-de-spacing)
|
|
7
|
+
3. [Guía de Uso](#guía-de-uso)
|
|
8
|
+
4. [Ejemplos de Código](#ejemplos-de-código)
|
|
9
|
+
5. [Mejores Prácticas](#mejores-prácticas)
|
|
10
|
+
6. [Dark Mode](#dark-mode)
|
|
11
|
+
7. [Referencia Rápida](#referencia-rápida)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Introducción
|
|
16
|
+
|
|
17
|
+
El sistema de spacing de Siesa UI Kit proporciona una escala consistente para controlar márgenes (margin), padding, gaps entre elementos, y posicionamiento. Este sistema está basado en Tailwind CSS con algunas extensiones personalizadas para casos de uso específicos.
|
|
18
|
+
|
|
19
|
+
### Objetivos del Sistema
|
|
20
|
+
|
|
21
|
+
- **Consistencia Visual**: Usar múltiplos de 4px para crear una cuadrícula visual coherente
|
|
22
|
+
- **Escalabilidad**: Escala logarítmica que permite desde espacios pequeños (2px) hasta grandes (384px)
|
|
23
|
+
- **Facilidad de Uso**: Nombres memorables y predecibles
|
|
24
|
+
- **Responsive Design**: Fácil de combinar con breakpoints para diseños adaptables
|
|
25
|
+
|
|
26
|
+
### Principios de Diseño
|
|
27
|
+
|
|
28
|
+
1. **Sistema Base-4**: La mayoría de los valores son múltiplos de 4px (excepto px, 0.5, 1.5, 2.5, 3.5)
|
|
29
|
+
2. **Progresión Lógica**: Los valores crecen de manera predecible
|
|
30
|
+
3. **Valores Intermedios**: Escalas .5 (2px, 6px, 10px, 14px) para ajustes finos
|
|
31
|
+
4. **Responsive First**: Diseñado para funcionar con modificadores responsive (sm:, md:, lg:)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Escala de Spacing
|
|
36
|
+
|
|
37
|
+
El sistema de spacing usa una convención numérica donde cada unidad representa un incremento basado en `rem` (donde 1rem = 16px por defecto).
|
|
38
|
+
|
|
39
|
+
### Tabla Completa de Spacing
|
|
40
|
+
|
|
41
|
+
| Clase Tailwind | REM | Pixels | Uso Principal |
|
|
42
|
+
|----------------|-----|--------|---------------|
|
|
43
|
+
| `0` | 0px | 0px | Sin espaciado |
|
|
44
|
+
| `px` | 1px | 1px | Bordes finos, líneas divisorias |
|
|
45
|
+
| `0.5` | 0.125rem | 2px | Espaciado mínimo |
|
|
46
|
+
| `1` | 0.25rem | 4px | Espaciado muy pequeño |
|
|
47
|
+
| `1.5` | 0.375rem | 6px | **Espaciado compacto** |
|
|
48
|
+
| `2` | 0.5rem | 8px | Espaciado pequeño |
|
|
49
|
+
| `2.5` | 0.625rem | 10px | Espaciado entre pequeño y medio |
|
|
50
|
+
| `3` | 0.75rem | 12px | **Padding interno de componentes** |
|
|
51
|
+
| `3.5` | 0.875rem | 14px | Espaciado medio-compacto |
|
|
52
|
+
| `4` | 1rem | 16px | **Espaciado base estándar** |
|
|
53
|
+
| `5` | 1.25rem | 20px | Espaciado medio |
|
|
54
|
+
| `6` | 1.5rem | 24px | **Padding de cards, modales** |
|
|
55
|
+
| `7` | 1.75rem | 28px | Espaciado medio-grande |
|
|
56
|
+
| `8` | 2rem | 32px | **Gaps entre secciones** |
|
|
57
|
+
| `9` | 2.25rem | 36px | Espaciado grande |
|
|
58
|
+
| `10` | 2.5rem | 40px | Espaciado grande |
|
|
59
|
+
| `11` | 2.75rem | 44px | Espaciado muy grande |
|
|
60
|
+
| `12` | 3rem | 48px | **Separación entre secciones** |
|
|
61
|
+
| `14` | 3.5rem | 56px | Espaciado extra grande |
|
|
62
|
+
| `16` | 4rem | 64px | **Padding de containers** |
|
|
63
|
+
| `20` | 5rem | 80px | Espaciado muy amplio |
|
|
64
|
+
| `24` | 6rem | 96px | Espaciado masivo |
|
|
65
|
+
| `28` | 7rem | 112px | Espaciado extra masivo |
|
|
66
|
+
| `32` | 8rem | 128px | **Separación entre secciones principales** |
|
|
67
|
+
| `36` | 9rem | 144px | Espaciado muy amplio |
|
|
68
|
+
| `40` | 10rem | 160px | Márgenes grandes de página |
|
|
69
|
+
| `44` | 11rem | 176px | Márgenes muy grandes |
|
|
70
|
+
| `48` | 12rem | 192px | Espaciado hero |
|
|
71
|
+
| `52` | 13rem | 208px | Espaciado hero grande |
|
|
72
|
+
| `56` | 14rem | 224px | Espaciado hero muy grande |
|
|
73
|
+
| `60` | 15rem | 240px | Espaciado extremo |
|
|
74
|
+
| `64` | 16rem | 256px | Márgenes de página completos |
|
|
75
|
+
| `72` | 18rem | 288px | Espaciado máximo |
|
|
76
|
+
| `80` | 20rem | 320px | Espaciado extra máximo |
|
|
77
|
+
| `96` | 24rem | 384px | Espaciado ultra máximo |
|
|
78
|
+
|
|
79
|
+
### Valores Más Comunes
|
|
80
|
+
|
|
81
|
+
Los siguientes valores se usan en el 90% de los casos:
|
|
82
|
+
|
|
83
|
+
- **`3` (12px)**: Padding interno de botones, inputs, labels
|
|
84
|
+
- **`4` (16px)**: Espaciado estándar entre elementos
|
|
85
|
+
- **`6` (24px)**: Padding de cards, paneles, modales
|
|
86
|
+
- **`8` (32px)**: Gaps entre secciones relacionadas
|
|
87
|
+
- **`12` (48px)**: Separación entre secciones distintas
|
|
88
|
+
- **`16` (64px)**: Padding horizontal de containers principales
|
|
89
|
+
|
|
90
|
+
### Valores Personalizados
|
|
91
|
+
|
|
92
|
+
El sistema de Siesa UI Kit incluye dos valores personalizados que no son estándar en Tailwind:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// tailwind.config.js
|
|
96
|
+
spacing: {
|
|
97
|
+
'1.5': '6px', // Entre 1 (4px) y 2 (8px)
|
|
98
|
+
'2.5': '10px', // Entre 2 (8px) y 3 (12px)
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Estos valores son útiles para ajustes finos en componentes específicos.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Guía de Uso
|
|
107
|
+
|
|
108
|
+
### Por Tipo de Espaciado
|
|
109
|
+
|
|
110
|
+
#### 1. Padding (p-, px-, py-, pt-, pr-, pb-, pl-)
|
|
111
|
+
|
|
112
|
+
Controla el espacio interior de un elemento.
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
// Padding uniforme en todos los lados
|
|
116
|
+
<div className="p-6">Card content</div>
|
|
117
|
+
|
|
118
|
+
// Padding horizontal (izquierda y derecha)
|
|
119
|
+
<div className="px-4">Horizontal padding</div>
|
|
120
|
+
|
|
121
|
+
// Padding vertical (arriba y abajo)
|
|
122
|
+
<div className="py-2">Vertical padding</div>
|
|
123
|
+
|
|
124
|
+
// Padding individual por lado
|
|
125
|
+
<div className="pt-8 pr-6 pb-8 pl-6">Custom padding each side</div>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Casos de Uso Comunes:**
|
|
129
|
+
- Botones: `px-4 py-2` o `px-6 py-3`
|
|
130
|
+
- Cards: `p-6` o `p-8`
|
|
131
|
+
- Inputs: `px-3 py-2`
|
|
132
|
+
- Containers: `px-6` o `px-16`
|
|
133
|
+
|
|
134
|
+
#### 2. Margin (m-, mx-, my-, mt-, mr-, mb-, ml-)
|
|
135
|
+
|
|
136
|
+
Controla el espacio exterior entre elementos.
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// Margin bottom para separar elementos verticalmente
|
|
140
|
+
<div className="mb-4">First element</div>
|
|
141
|
+
|
|
142
|
+
// Margin top
|
|
143
|
+
<div className="mt-8">Second element</div>
|
|
144
|
+
|
|
145
|
+
// Margin horizontal (auto para centrar)
|
|
146
|
+
<div className="mx-auto">Centered content</div>
|
|
147
|
+
|
|
148
|
+
// Margin negativo para overlays
|
|
149
|
+
<div className="mt-[-2rem]">Overlapping element</div>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Casos de Uso Comunes:**
|
|
153
|
+
- Separar párrafos: `mb-4`
|
|
154
|
+
- Separar secciones: `mb-12` o `mb-16`
|
|
155
|
+
- Centrar elementos: `mx-auto`
|
|
156
|
+
- Espaciar elementos en listas: `mb-2` o `mb-3`
|
|
157
|
+
|
|
158
|
+
#### 3. Gap (gap-, gap-x-, gap-y-)
|
|
159
|
+
|
|
160
|
+
Controla el espacio entre elementos en flex y grid.
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
// Gap uniforme en flex/grid
|
|
164
|
+
<div className="flex gap-4">
|
|
165
|
+
<div>Item 1</div>
|
|
166
|
+
<div>Item 2</div>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
// Gap horizontal (entre columnas)
|
|
170
|
+
<div className="grid grid-cols-3 gap-x-6">
|
|
171
|
+
{/* items */}
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
// Gap vertical (entre filas)
|
|
175
|
+
<div className="grid gap-y-4">
|
|
176
|
+
{/* items */}
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
// Gap diferente para horizontal y vertical
|
|
180
|
+
<div className="grid gap-x-6 gap-y-4">
|
|
181
|
+
{/* items */}
|
|
182
|
+
</div>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Casos de Uso Comunes:**
|
|
186
|
+
- Botones en grupo: `gap-2` o `gap-3`
|
|
187
|
+
- Cards en grid: `gap-6`
|
|
188
|
+
- Formularios: `gap-4`
|
|
189
|
+
- Navegación: `gap-6` o `gap-8`
|
|
190
|
+
|
|
191
|
+
#### 4. Space Between (space-x-, space-y-)
|
|
192
|
+
|
|
193
|
+
Añade espacio entre elementos hijos (alternativa a gap).
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
// Espacio horizontal entre hijos
|
|
197
|
+
<div className="flex space-x-4">
|
|
198
|
+
<button>Button 1</button>
|
|
199
|
+
<button>Button 2</button>
|
|
200
|
+
<button>Button 3</button>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
// Espacio vertical entre hijos
|
|
204
|
+
<div className="space-y-6">
|
|
205
|
+
<article>Article 1</article>
|
|
206
|
+
<article>Article 2</article>
|
|
207
|
+
</div>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Diferencia entre `gap` y `space-x/y`:**
|
|
211
|
+
- `gap`: Aplica espacio en contenedores flex/grid (más moderno)
|
|
212
|
+
- `space-x/y`: Aplica margin a los hijos (compatible con más navegadores antiguos)
|
|
213
|
+
|
|
214
|
+
#### 5. Inset (top-, right-, bottom-, left-)
|
|
215
|
+
|
|
216
|
+
Controla el posicionamiento absoluto/relativo.
|
|
217
|
+
|
|
218
|
+
```tsx
|
|
219
|
+
// Posicionar elemento en la esquina superior derecha
|
|
220
|
+
<div className="absolute top-4 right-4">
|
|
221
|
+
Notification badge
|
|
222
|
+
</div>
|
|
223
|
+
|
|
224
|
+
// Posicionar overlay completo
|
|
225
|
+
<div className="absolute inset-0">
|
|
226
|
+
Full overlay
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
// Posicionar desde el centro
|
|
230
|
+
<div className="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2">
|
|
231
|
+
Centered absolutely
|
|
232
|
+
</div>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Por Caso de Uso
|
|
236
|
+
|
|
237
|
+
#### 1. Botones
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
// Botón pequeño (Small)
|
|
241
|
+
<button className="px-3 py-1.5 text-sm">
|
|
242
|
+
Small Button
|
|
243
|
+
</button>
|
|
244
|
+
|
|
245
|
+
// Botón mediano (Medium - Default)
|
|
246
|
+
<button className="px-4 py-2 text-sm">
|
|
247
|
+
Medium Button
|
|
248
|
+
</button>
|
|
249
|
+
|
|
250
|
+
// Botón grande (Large)
|
|
251
|
+
<button className="px-6 py-3 text-base">
|
|
252
|
+
Large Button
|
|
253
|
+
</button>
|
|
254
|
+
|
|
255
|
+
// Grupo de botones
|
|
256
|
+
<div className="flex gap-3">
|
|
257
|
+
<button className="px-4 py-2">Cancel</button>
|
|
258
|
+
<button className="px-4 py-2">Confirm</button>
|
|
259
|
+
</div>
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### 2. Cards y Paneles
|
|
263
|
+
|
|
264
|
+
```tsx
|
|
265
|
+
// Card compacta
|
|
266
|
+
<div className="p-4 rounded-2xl border border-border-primary">
|
|
267
|
+
<h3 className="mb-2 font-bold">Card Title</h3>
|
|
268
|
+
<p>Card content</p>
|
|
269
|
+
</div>
|
|
270
|
+
|
|
271
|
+
// Card estándar
|
|
272
|
+
<div className="p-6 rounded-2xl border border-border-primary">
|
|
273
|
+
<h3 className="mb-4 font-bold text-lg">Card Title</h3>
|
|
274
|
+
<p className="mb-4">Card content</p>
|
|
275
|
+
<button className="px-4 py-2">Action</button>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
// Card espaciosa
|
|
279
|
+
<div className="p-8 rounded-2xl border border-border-primary">
|
|
280
|
+
<h2 className="mb-6 font-bold text-2xl">Card Title</h2>
|
|
281
|
+
<p className="mb-6">Card content with more breathing room</p>
|
|
282
|
+
<div className="flex gap-3">
|
|
283
|
+
<button>Cancel</button>
|
|
284
|
+
<button>Confirm</button>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### 3. Formularios
|
|
290
|
+
|
|
291
|
+
```tsx
|
|
292
|
+
// Formulario con spacing consistente
|
|
293
|
+
<form className="space-y-6">
|
|
294
|
+
{/* Campo de input */}
|
|
295
|
+
<div className="space-y-2">
|
|
296
|
+
<label className="block font-bold text-sm">Email</label>
|
|
297
|
+
<input
|
|
298
|
+
type="email"
|
|
299
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md"
|
|
300
|
+
/>
|
|
301
|
+
<p className="text-xs text-content-secondary">
|
|
302
|
+
We'll never share your email.
|
|
303
|
+
</p>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
{/* Campo de input */}
|
|
307
|
+
<div className="space-y-2">
|
|
308
|
+
<label className="block font-bold text-sm">Password</label>
|
|
309
|
+
<input
|
|
310
|
+
type="password"
|
|
311
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md"
|
|
312
|
+
/>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
{/* Botones */}
|
|
316
|
+
<div className="flex gap-3 pt-4">
|
|
317
|
+
<button type="button" className="px-4 py-2">Cancel</button>
|
|
318
|
+
<button type="submit" className="px-4 py-2">Submit</button>
|
|
319
|
+
</div>
|
|
320
|
+
</form>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
#### 4. Grid de Cards
|
|
324
|
+
|
|
325
|
+
```tsx
|
|
326
|
+
// Grid responsive con spacing
|
|
327
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
328
|
+
<div className="p-6 border rounded-2xl">Card 1</div>
|
|
329
|
+
<div className="p-6 border rounded-2xl">Card 2</div>
|
|
330
|
+
<div className="p-6 border rounded-2xl">Card 3</div>
|
|
331
|
+
<div className="p-6 border rounded-2xl">Card 4</div>
|
|
332
|
+
<div className="p-6 border rounded-2xl">Card 5</div>
|
|
333
|
+
<div className="p-6 border rounded-2xl">Card 6</div>
|
|
334
|
+
</div>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
#### 5. Navegación
|
|
338
|
+
|
|
339
|
+
```tsx
|
|
340
|
+
// Navbar con spacing
|
|
341
|
+
<nav className="px-6 py-4 border-b border-border-primary">
|
|
342
|
+
<div className="container mx-auto flex items-center justify-between">
|
|
343
|
+
<div className="font-bold text-xl">Logo</div>
|
|
344
|
+
<ul className="flex gap-6">
|
|
345
|
+
<li><a href="#home">Home</a></li>
|
|
346
|
+
<li><a href="#about">About</a></li>
|
|
347
|
+
<li><a href="#contact">Contact</a></li>
|
|
348
|
+
</ul>
|
|
349
|
+
<button className="px-4 py-2">Sign In</button>
|
|
350
|
+
</div>
|
|
351
|
+
</nav>
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
#### 6. Layouts de Página
|
|
355
|
+
|
|
356
|
+
```tsx
|
|
357
|
+
// Layout con márgenes consistentes
|
|
358
|
+
<div className="min-h-screen">
|
|
359
|
+
{/* Header */}
|
|
360
|
+
<header className="px-6 py-4">
|
|
361
|
+
<div className="container mx-auto">Header content</div>
|
|
362
|
+
</header>
|
|
363
|
+
|
|
364
|
+
{/* Main content */}
|
|
365
|
+
<main className="px-6 py-12">
|
|
366
|
+
<div className="container mx-auto">
|
|
367
|
+
{/* Hero section */}
|
|
368
|
+
<section className="mb-16">
|
|
369
|
+
<h1 className="mb-6 font-bold text-6xl">Hero Title</h1>
|
|
370
|
+
<p className="mb-8 text-lg">Hero description</p>
|
|
371
|
+
<button className="px-6 py-3">Get Started</button>
|
|
372
|
+
</section>
|
|
373
|
+
|
|
374
|
+
{/* Features section */}
|
|
375
|
+
<section className="mb-16">
|
|
376
|
+
<h2 className="mb-8 font-bold text-4xl">Features</h2>
|
|
377
|
+
<div className="grid grid-cols-3 gap-6">
|
|
378
|
+
{/* Feature cards */}
|
|
379
|
+
</div>
|
|
380
|
+
</section>
|
|
381
|
+
</div>
|
|
382
|
+
</main>
|
|
383
|
+
|
|
384
|
+
{/* Footer */}
|
|
385
|
+
<footer className="px-6 py-12 bg-background-secondary">
|
|
386
|
+
<div className="container mx-auto">Footer content</div>
|
|
387
|
+
</footer>
|
|
388
|
+
</div>
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
---
|
|
392
|
+
|
|
393
|
+
## Ejemplos de Código
|
|
394
|
+
|
|
395
|
+
### Ejemplo 1: Sistema de Cards Completo
|
|
396
|
+
|
|
397
|
+
```tsx
|
|
398
|
+
export const CardSystem = () => {
|
|
399
|
+
return (
|
|
400
|
+
<div className="p-8 space-y-8">
|
|
401
|
+
{/* Compact Card - Para información densa */}
|
|
402
|
+
<div className="p-4 border border-border-primary rounded-2xl">
|
|
403
|
+
<div className="flex items-center gap-3 mb-2">
|
|
404
|
+
<div className="w-8 h-8 rounded-full bg-primary-custom-600" />
|
|
405
|
+
<h3 className="font-bold text-sm">Compact Card</h3>
|
|
406
|
+
</div>
|
|
407
|
+
<p className="text-xs text-content-secondary">
|
|
408
|
+
Minimal spacing for dense information display.
|
|
409
|
+
</p>
|
|
410
|
+
</div>
|
|
411
|
+
|
|
412
|
+
{/* Standard Card - Uso general */}
|
|
413
|
+
<div className="p-6 border border-border-primary rounded-2xl shadow-base">
|
|
414
|
+
<div className="flex items-center gap-4 mb-4">
|
|
415
|
+
<div className="w-12 h-12 rounded-full bg-primary-custom-600" />
|
|
416
|
+
<h3 className="font-bold text-base">Standard Card</h3>
|
|
417
|
+
</div>
|
|
418
|
+
<p className="mb-4 text-sm text-content-secondary">
|
|
419
|
+
Balanced spacing for most use cases. This is the most common card style.
|
|
420
|
+
</p>
|
|
421
|
+
<div className="flex gap-3">
|
|
422
|
+
<button className="px-4 py-2 border border-border-primary rounded-md text-sm font-bold">
|
|
423
|
+
Cancel
|
|
424
|
+
</button>
|
|
425
|
+
<button className="px-4 py-2 bg-primary-custom-600 text-white rounded-md text-sm font-bold">
|
|
426
|
+
Confirm
|
|
427
|
+
</button>
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
|
|
431
|
+
{/* Spacious Card - Para contenido importante */}
|
|
432
|
+
<div className="p-8 border border-border-primary rounded-2xl shadow-lg">
|
|
433
|
+
<div className="flex items-center gap-6 mb-6">
|
|
434
|
+
<div className="w-16 h-16 rounded-full bg-primary-custom-600" />
|
|
435
|
+
<h2 className="font-bold text-xl">Spacious Card</h2>
|
|
436
|
+
</div>
|
|
437
|
+
<p className="mb-6 text-base text-content-secondary">
|
|
438
|
+
Generous spacing for important content that needs breathing room.
|
|
439
|
+
Perfect for hero cards or feature highlights.
|
|
440
|
+
</p>
|
|
441
|
+
<div className="flex gap-4">
|
|
442
|
+
<button className="px-6 py-3 border border-border-primary rounded-md font-bold">
|
|
443
|
+
Learn More
|
|
444
|
+
</button>
|
|
445
|
+
<button className="px-6 py-3 bg-primary-custom-600 text-white rounded-md font-bold">
|
|
446
|
+
Get Started
|
|
447
|
+
</button>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
</div>
|
|
451
|
+
);
|
|
452
|
+
};
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Ejemplo 2: Formulario con Spacing Consistente
|
|
456
|
+
|
|
457
|
+
```tsx
|
|
458
|
+
export const ConsistentForm = () => {
|
|
459
|
+
return (
|
|
460
|
+
<div className="max-w-md mx-auto p-8">
|
|
461
|
+
<form className="space-y-6">
|
|
462
|
+
{/* Form header */}
|
|
463
|
+
<div className="space-y-2">
|
|
464
|
+
<h2 className="font-bold text-2xl">Create Account</h2>
|
|
465
|
+
<p className="text-sm text-content-secondary">
|
|
466
|
+
Fill in your details to get started.
|
|
467
|
+
</p>
|
|
468
|
+
</div>
|
|
469
|
+
|
|
470
|
+
{/* Name field */}
|
|
471
|
+
<div className="space-y-2">
|
|
472
|
+
<label htmlFor="name" className="block font-bold text-sm">
|
|
473
|
+
Full Name
|
|
474
|
+
</label>
|
|
475
|
+
<input
|
|
476
|
+
id="name"
|
|
477
|
+
type="text"
|
|
478
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md text-sm"
|
|
479
|
+
placeholder="John Doe"
|
|
480
|
+
/>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
{/* Email field */}
|
|
484
|
+
<div className="space-y-2">
|
|
485
|
+
<label htmlFor="email" className="block font-bold text-sm">
|
|
486
|
+
Email Address
|
|
487
|
+
</label>
|
|
488
|
+
<input
|
|
489
|
+
id="email"
|
|
490
|
+
type="email"
|
|
491
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md text-sm"
|
|
492
|
+
placeholder="john@example.com"
|
|
493
|
+
/>
|
|
494
|
+
<p className="text-xs text-content-secondary">
|
|
495
|
+
We'll send a verification email to this address.
|
|
496
|
+
</p>
|
|
497
|
+
</div>
|
|
498
|
+
|
|
499
|
+
{/* Password field */}
|
|
500
|
+
<div className="space-y-2">
|
|
501
|
+
<label htmlFor="password" className="block font-bold text-sm">
|
|
502
|
+
Password
|
|
503
|
+
</label>
|
|
504
|
+
<input
|
|
505
|
+
id="password"
|
|
506
|
+
type="password"
|
|
507
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md text-sm"
|
|
508
|
+
placeholder="••••••••"
|
|
509
|
+
/>
|
|
510
|
+
<p className="text-xs text-content-secondary">
|
|
511
|
+
Must be at least 8 characters long.
|
|
512
|
+
</p>
|
|
513
|
+
</div>
|
|
514
|
+
|
|
515
|
+
{/* Checkbox */}
|
|
516
|
+
<div className="flex items-start gap-3">
|
|
517
|
+
<input
|
|
518
|
+
id="terms"
|
|
519
|
+
type="checkbox"
|
|
520
|
+
className="mt-1 w-4 h-4"
|
|
521
|
+
/>
|
|
522
|
+
<label htmlFor="terms" className="text-sm text-content-secondary">
|
|
523
|
+
I agree to the{' '}
|
|
524
|
+
<a href="#" className="text-primary-custom-600 font-bold">
|
|
525
|
+
Terms of Service
|
|
526
|
+
</a>{' '}
|
|
527
|
+
and{' '}
|
|
528
|
+
<a href="#" className="text-primary-custom-600 font-bold">
|
|
529
|
+
Privacy Policy
|
|
530
|
+
</a>
|
|
531
|
+
</label>
|
|
532
|
+
</div>
|
|
533
|
+
|
|
534
|
+
{/* Submit button */}
|
|
535
|
+
<button
|
|
536
|
+
type="submit"
|
|
537
|
+
className="w-full px-4 py-3 bg-primary-custom-600 text-white rounded-md font-bold text-sm"
|
|
538
|
+
>
|
|
539
|
+
Create Account
|
|
540
|
+
</button>
|
|
541
|
+
|
|
542
|
+
{/* Divider */}
|
|
543
|
+
<div className="relative py-4">
|
|
544
|
+
<div className="absolute inset-0 flex items-center">
|
|
545
|
+
<div className="w-full border-t border-border-primary" />
|
|
546
|
+
</div>
|
|
547
|
+
<div className="relative flex justify-center">
|
|
548
|
+
<span className="px-4 bg-white text-xs text-content-secondary">
|
|
549
|
+
Or continue with
|
|
550
|
+
</span>
|
|
551
|
+
</div>
|
|
552
|
+
</div>
|
|
553
|
+
|
|
554
|
+
{/* Social buttons */}
|
|
555
|
+
<div className="grid grid-cols-2 gap-3">
|
|
556
|
+
<button className="px-4 py-2 border border-border-primary rounded-md text-sm font-bold">
|
|
557
|
+
Google
|
|
558
|
+
</button>
|
|
559
|
+
<button className="px-4 py-2 border border-border-primary rounded-md text-sm font-bold">
|
|
560
|
+
GitHub
|
|
561
|
+
</button>
|
|
562
|
+
</div>
|
|
563
|
+
</form>
|
|
564
|
+
</div>
|
|
565
|
+
);
|
|
566
|
+
};
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Ejemplo 3: Dashboard Layout con Spacing
|
|
570
|
+
|
|
571
|
+
```tsx
|
|
572
|
+
export const DashboardLayout = () => {
|
|
573
|
+
return (
|
|
574
|
+
<div className="min-h-screen bg-background-secondary">
|
|
575
|
+
{/* Header */}
|
|
576
|
+
<header className="bg-white border-b border-border-primary px-6 py-4">
|
|
577
|
+
<div className="flex items-center justify-between">
|
|
578
|
+
<div className="flex items-center gap-8">
|
|
579
|
+
<div className="font-bold text-xl">Dashboard</div>
|
|
580
|
+
<nav className="flex gap-6">
|
|
581
|
+
<a href="#" className="text-sm font-bold">Overview</a>
|
|
582
|
+
<a href="#" className="text-sm">Analytics</a>
|
|
583
|
+
<a href="#" className="text-sm">Reports</a>
|
|
584
|
+
</nav>
|
|
585
|
+
</div>
|
|
586
|
+
<button className="px-4 py-2 bg-primary-custom-600 text-white rounded-md text-sm font-bold">
|
|
587
|
+
New Project
|
|
588
|
+
</button>
|
|
589
|
+
</div>
|
|
590
|
+
</header>
|
|
591
|
+
|
|
592
|
+
{/* Main content */}
|
|
593
|
+
<main className="p-6">
|
|
594
|
+
<div className="max-w-7xl mx-auto">
|
|
595
|
+
{/* Page title */}
|
|
596
|
+
<div className="mb-8">
|
|
597
|
+
<h1 className="mb-2 font-bold text-4xl">Welcome back, John</h1>
|
|
598
|
+
<p className="text-content-secondary">
|
|
599
|
+
Here's what's happening with your projects today.
|
|
600
|
+
</p>
|
|
601
|
+
</div>
|
|
602
|
+
|
|
603
|
+
{/* Stats grid */}
|
|
604
|
+
<div className="grid grid-cols-4 gap-6 mb-8">
|
|
605
|
+
{[
|
|
606
|
+
{ label: 'Total Projects', value: '24' },
|
|
607
|
+
{ label: 'Active Tasks', value: '156' },
|
|
608
|
+
{ label: 'Team Members', value: '12' },
|
|
609
|
+
{ label: 'Completion', value: '87%' },
|
|
610
|
+
].map((stat) => (
|
|
611
|
+
<div key={stat.label} className="p-6 bg-white rounded-2xl border border-border-primary">
|
|
612
|
+
<p className="mb-2 text-xs text-content-secondary">
|
|
613
|
+
{stat.label}
|
|
614
|
+
</p>
|
|
615
|
+
<p className="font-bold text-3xl">{stat.value}</p>
|
|
616
|
+
</div>
|
|
617
|
+
))}
|
|
618
|
+
</div>
|
|
619
|
+
|
|
620
|
+
{/* Content sections */}
|
|
621
|
+
<div className="grid grid-cols-3 gap-6">
|
|
622
|
+
{/* Recent activity */}
|
|
623
|
+
<div className="col-span-2 p-6 bg-white rounded-2xl border border-border-primary">
|
|
624
|
+
<h2 className="mb-6 font-bold text-xl">Recent Activity</h2>
|
|
625
|
+
<div className="space-y-4">
|
|
626
|
+
{[1, 2, 3, 4].map((item) => (
|
|
627
|
+
<div key={item} className="flex items-start gap-4 pb-4 border-b border-border-primary last:border-0">
|
|
628
|
+
<div className="w-10 h-10 rounded-full bg-primary-custom-100" />
|
|
629
|
+
<div className="flex-1">
|
|
630
|
+
<p className="mb-1 font-bold text-sm">Activity title</p>
|
|
631
|
+
<p className="text-xs text-content-secondary">
|
|
632
|
+
Activity description goes here
|
|
633
|
+
</p>
|
|
634
|
+
</div>
|
|
635
|
+
<span className="text-xs text-content-secondary">2h ago</span>
|
|
636
|
+
</div>
|
|
637
|
+
))}
|
|
638
|
+
</div>
|
|
639
|
+
</div>
|
|
640
|
+
|
|
641
|
+
{/* Sidebar */}
|
|
642
|
+
<div className="space-y-6">
|
|
643
|
+
{/* Team card */}
|
|
644
|
+
<div className="p-6 bg-white rounded-2xl border border-border-primary">
|
|
645
|
+
<h3 className="mb-4 font-bold">Team Members</h3>
|
|
646
|
+
<div className="space-y-3">
|
|
647
|
+
{[1, 2, 3].map((member) => (
|
|
648
|
+
<div key={member} className="flex items-center gap-3">
|
|
649
|
+
<div className="w-8 h-8 rounded-full bg-primary-custom-600" />
|
|
650
|
+
<div className="flex-1">
|
|
651
|
+
<p className="font-bold text-sm">Team Member</p>
|
|
652
|
+
<p className="text-xs text-content-secondary">Role</p>
|
|
653
|
+
</div>
|
|
654
|
+
</div>
|
|
655
|
+
))}
|
|
656
|
+
</div>
|
|
657
|
+
<button className="mt-4 w-full px-4 py-2 border border-border-primary rounded-md text-sm font-bold">
|
|
658
|
+
View All
|
|
659
|
+
</button>
|
|
660
|
+
</div>
|
|
661
|
+
|
|
662
|
+
{/* Quick actions */}
|
|
663
|
+
<div className="p-6 bg-white rounded-2xl border border-border-primary">
|
|
664
|
+
<h3 className="mb-4 font-bold">Quick Actions</h3>
|
|
665
|
+
<div className="space-y-2">
|
|
666
|
+
<button className="w-full px-4 py-2 text-left border border-border-primary rounded-md text-sm">
|
|
667
|
+
Create Project
|
|
668
|
+
</button>
|
|
669
|
+
<button className="w-full px-4 py-2 text-left border border-border-primary rounded-md text-sm">
|
|
670
|
+
Add Task
|
|
671
|
+
</button>
|
|
672
|
+
<button className="w-full px-4 py-2 text-left border border-border-primary rounded-md text-sm">
|
|
673
|
+
Invite Member
|
|
674
|
+
</button>
|
|
675
|
+
</div>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
</div>
|
|
679
|
+
</div>
|
|
680
|
+
</main>
|
|
681
|
+
</div>
|
|
682
|
+
);
|
|
683
|
+
};
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
### Ejemplo 4: Modal con Spacing Correcto
|
|
687
|
+
|
|
688
|
+
```tsx
|
|
689
|
+
export const SpacedModal = ({ isOpen, onClose }) => {
|
|
690
|
+
if (!isOpen) return null;
|
|
691
|
+
|
|
692
|
+
return (
|
|
693
|
+
<div className="fixed inset-0 z-50 flex items-center justify-center p-4">
|
|
694
|
+
{/* Overlay */}
|
|
695
|
+
<div
|
|
696
|
+
className="absolute inset-0 bg-black/50 backdrop-blur-lg"
|
|
697
|
+
onClick={onClose}
|
|
698
|
+
/>
|
|
699
|
+
|
|
700
|
+
{/* Modal */}
|
|
701
|
+
<div className="relative z-10 w-full max-w-md bg-white rounded-3xl shadow-2xl">
|
|
702
|
+
{/* Header */}
|
|
703
|
+
<div className="flex items-center justify-between p-6 border-b border-border-primary">
|
|
704
|
+
<h2 className="font-bold text-2xl">Modal Title</h2>
|
|
705
|
+
<button
|
|
706
|
+
onClick={onClose}
|
|
707
|
+
className="p-2 hover:bg-background-secondary rounded-full"
|
|
708
|
+
>
|
|
709
|
+
<XIcon className="w-5 h-5" />
|
|
710
|
+
</button>
|
|
711
|
+
</div>
|
|
712
|
+
|
|
713
|
+
{/* Body */}
|
|
714
|
+
<div className="p-6">
|
|
715
|
+
<p className="mb-4 text-content-secondary">
|
|
716
|
+
This is the modal body. Notice the consistent spacing throughout
|
|
717
|
+
the modal for a polished look.
|
|
718
|
+
</p>
|
|
719
|
+
|
|
720
|
+
{/* Form inside modal */}
|
|
721
|
+
<div className="space-y-4">
|
|
722
|
+
<div className="space-y-2">
|
|
723
|
+
<label className="block font-bold text-sm">Name</label>
|
|
724
|
+
<input
|
|
725
|
+
type="text"
|
|
726
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md"
|
|
727
|
+
/>
|
|
728
|
+
</div>
|
|
729
|
+
|
|
730
|
+
<div className="space-y-2">
|
|
731
|
+
<label className="block font-bold text-sm">Email</label>
|
|
732
|
+
<input
|
|
733
|
+
type="email"
|
|
734
|
+
className="w-full px-3 py-2 border border-border-primary rounded-md"
|
|
735
|
+
/>
|
|
736
|
+
</div>
|
|
737
|
+
</div>
|
|
738
|
+
</div>
|
|
739
|
+
|
|
740
|
+
{/* Footer */}
|
|
741
|
+
<div className="flex gap-3 justify-end p-6 border-t border-border-primary">
|
|
742
|
+
<button
|
|
743
|
+
onClick={onClose}
|
|
744
|
+
className="px-4 py-2 border border-border-primary rounded-md font-bold"
|
|
745
|
+
>
|
|
746
|
+
Cancel
|
|
747
|
+
</button>
|
|
748
|
+
<button className="px-4 py-2 bg-primary-custom-600 text-white rounded-md font-bold">
|
|
749
|
+
Save Changes
|
|
750
|
+
</button>
|
|
751
|
+
</div>
|
|
752
|
+
</div>
|
|
753
|
+
</div>
|
|
754
|
+
);
|
|
755
|
+
};
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
### Ejemplo 5: List con Spacing Consistente
|
|
759
|
+
|
|
760
|
+
```tsx
|
|
761
|
+
export const SpacedList = () => {
|
|
762
|
+
const items = [
|
|
763
|
+
{ id: 1, title: 'First item', description: 'Description for first item' },
|
|
764
|
+
{ id: 2, title: 'Second item', description: 'Description for second item' },
|
|
765
|
+
{ id: 3, title: 'Third item', description: 'Description for third item' },
|
|
766
|
+
];
|
|
767
|
+
|
|
768
|
+
return (
|
|
769
|
+
<div className="max-w-2xl mx-auto p-8">
|
|
770
|
+
{/* List header */}
|
|
771
|
+
<div className="mb-6">
|
|
772
|
+
<h2 className="mb-2 font-bold text-2xl">Task List</h2>
|
|
773
|
+
<p className="text-sm text-content-secondary">
|
|
774
|
+
Manage your daily tasks and priorities.
|
|
775
|
+
</p>
|
|
776
|
+
</div>
|
|
777
|
+
|
|
778
|
+
{/* List */}
|
|
779
|
+
<div className="space-y-3">
|
|
780
|
+
{items.map((item) => (
|
|
781
|
+
<div
|
|
782
|
+
key={item.id}
|
|
783
|
+
className="p-4 border border-border-primary rounded-xl hover:border-primary-custom-300 transition-colors"
|
|
784
|
+
>
|
|
785
|
+
<div className="flex items-start gap-4">
|
|
786
|
+
{/* Checkbox */}
|
|
787
|
+
<input
|
|
788
|
+
type="checkbox"
|
|
789
|
+
className="mt-1 w-5 h-5"
|
|
790
|
+
/>
|
|
791
|
+
|
|
792
|
+
{/* Content */}
|
|
793
|
+
<div className="flex-1">
|
|
794
|
+
<h3 className="mb-1 font-bold">{item.title}</h3>
|
|
795
|
+
<p className="text-sm text-content-secondary">
|
|
796
|
+
{item.description}
|
|
797
|
+
</p>
|
|
798
|
+
</div>
|
|
799
|
+
|
|
800
|
+
{/* Actions */}
|
|
801
|
+
<div className="flex gap-2">
|
|
802
|
+
<button className="p-2 hover:bg-background-secondary rounded-md">
|
|
803
|
+
<EditIcon className="w-4 h-4" />
|
|
804
|
+
</button>
|
|
805
|
+
<button className="p-2 hover:bg-background-secondary rounded-md">
|
|
806
|
+
<TrashIcon className="w-4 h-4" />
|
|
807
|
+
</button>
|
|
808
|
+
</div>
|
|
809
|
+
</div>
|
|
810
|
+
</div>
|
|
811
|
+
))}
|
|
812
|
+
</div>
|
|
813
|
+
|
|
814
|
+
{/* Add button */}
|
|
815
|
+
<button className="mt-6 w-full px-4 py-3 border border-dashed border-border-primary rounded-xl font-bold hover:border-primary-custom-300 hover:bg-primary-custom-100/50 transition-colors">
|
|
816
|
+
+ Add New Task
|
|
817
|
+
</button>
|
|
818
|
+
</div>
|
|
819
|
+
);
|
|
820
|
+
};
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
---
|
|
824
|
+
|
|
825
|
+
## Mejores Prácticas
|
|
826
|
+
|
|
827
|
+
### ✅ Hacer
|
|
828
|
+
|
|
829
|
+
1. **Usar valores consistentes del sistema**
|
|
830
|
+
```tsx
|
|
831
|
+
// ✅ CORRECTO - Usar valores del sistema
|
|
832
|
+
<div className="p-6 mb-8">Content</div>
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
2. **Mantener jerarquía visual con spacing**
|
|
836
|
+
```tsx
|
|
837
|
+
// ✅ CORRECTO - Spacing más pequeño para elementos relacionados
|
|
838
|
+
<div className="space-y-2">
|
|
839
|
+
<label>Label</label>
|
|
840
|
+
<input />
|
|
841
|
+
<p className="text-xs">Helper text</p>
|
|
842
|
+
</div>
|
|
843
|
+
|
|
844
|
+
// Spacing más grande entre grupos diferentes
|
|
845
|
+
<form className="space-y-6">
|
|
846
|
+
<div className="space-y-2">{/* Group 1 */}</div>
|
|
847
|
+
<div className="space-y-2">{/* Group 2 */}</div>
|
|
848
|
+
</form>
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
3. **Usar `gap` en lugar de margin cuando sea posible**
|
|
852
|
+
```tsx
|
|
853
|
+
// ✅ CORRECTO - gap es más limpio y predecible
|
|
854
|
+
<div className="flex gap-4">
|
|
855
|
+
<button>Button 1</button>
|
|
856
|
+
<button>Button 2</button>
|
|
857
|
+
</div>
|
|
858
|
+
```
|
|
859
|
+
|
|
860
|
+
4. **Usar spacing responsive**
|
|
861
|
+
```tsx
|
|
862
|
+
// ✅ CORRECTO - Ajustar spacing para diferentes tamaños
|
|
863
|
+
<div className="p-4 md:p-6 lg:p-8">
|
|
864
|
+
Responsive padding
|
|
865
|
+
</div>
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
5. **Agrupar elementos relacionados**
|
|
869
|
+
```tsx
|
|
870
|
+
// ✅ CORRECTO - Spacing menor dentro de grupos
|
|
871
|
+
<div className="space-y-8">
|
|
872
|
+
<div className="space-y-2">
|
|
873
|
+
<h2>Section 1</h2>
|
|
874
|
+
<p>Content related to section 1</p>
|
|
875
|
+
</div>
|
|
876
|
+
|
|
877
|
+
<div className="space-y-2">
|
|
878
|
+
<h2>Section 2</h2>
|
|
879
|
+
<p>Content related to section 2</p>
|
|
880
|
+
</div>
|
|
881
|
+
</div>
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
### ❌ Evitar
|
|
885
|
+
|
|
886
|
+
1. **No usar valores arbitrarios sin necesidad**
|
|
887
|
+
```tsx
|
|
888
|
+
// ❌ INCORRECTO - Valor arbitrario
|
|
889
|
+
<div className="p-[13px]">Content</div>
|
|
890
|
+
|
|
891
|
+
// ✅ CORRECTO - Usar valor del sistema
|
|
892
|
+
<div className="p-3">Content</div>
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
2. **No mezclar unidades de spacing inconsistentes**
|
|
896
|
+
```tsx
|
|
897
|
+
// ❌ INCORRECTO - Valores aleatorios
|
|
898
|
+
<div className="space-y-5">
|
|
899
|
+
<div className="mb-7">Item 1</div>
|
|
900
|
+
<div className="mb-11">Item 2</div>
|
|
901
|
+
</div>
|
|
902
|
+
|
|
903
|
+
// ✅ CORRECTO - Valores consistentes
|
|
904
|
+
<div className="space-y-6">
|
|
905
|
+
<div>Item 1</div>
|
|
906
|
+
<div>Item 2</div>
|
|
907
|
+
</div>
|
|
908
|
+
```
|
|
909
|
+
|
|
910
|
+
3. **No usar demasiado spacing pequeño**
|
|
911
|
+
```tsx
|
|
912
|
+
// ❌ INCORRECTO - Muy compacto, difícil de clickear
|
|
913
|
+
<button className="px-1 py-0.5">Button</button>
|
|
914
|
+
|
|
915
|
+
// ✅ CORRECTO - Área de click adecuada
|
|
916
|
+
<button className="px-4 py-2">Button</button>
|
|
917
|
+
```
|
|
918
|
+
|
|
919
|
+
4. **No apilar márgenes innecesarios**
|
|
920
|
+
```tsx
|
|
921
|
+
// ❌ INCORRECTO - Margen doble
|
|
922
|
+
<div className="mb-4">
|
|
923
|
+
<p className="mb-4">Text</p>
|
|
924
|
+
</div>
|
|
925
|
+
|
|
926
|
+
// ✅ CORRECTO - Usar space-y o gap
|
|
927
|
+
<div className="space-y-4">
|
|
928
|
+
<p>Text 1</p>
|
|
929
|
+
<p>Text 2</p>
|
|
930
|
+
</div>
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
5. **No ignorar el padding en elementos clickeables**
|
|
934
|
+
```tsx
|
|
935
|
+
// ❌ INCORRECTO - Área de click pequeña
|
|
936
|
+
<button className="p-0">Click me</button>
|
|
937
|
+
|
|
938
|
+
// ✅ CORRECTO - Área de click generosa
|
|
939
|
+
<button className="px-4 py-2">Click me</button>
|
|
940
|
+
```
|
|
941
|
+
|
|
942
|
+
### Reglas de Consistencia
|
|
943
|
+
|
|
944
|
+
1. **Elementos similares deben tener spacing similar**
|
|
945
|
+
- Todos los botones primarios: `px-4 py-2`
|
|
946
|
+
- Todas las cards estándar: `p-6`
|
|
947
|
+
- Todos los inputs: `px-3 py-2`
|
|
948
|
+
|
|
949
|
+
2. **Escalar spacing proporcionalmente**
|
|
950
|
+
- Botón small: `px-3 py-1.5`
|
|
951
|
+
- Botón medium: `px-4 py-2`
|
|
952
|
+
- Botón large: `px-6 py-3`
|
|
953
|
+
|
|
954
|
+
3. **Mantener ritmo vertical**
|
|
955
|
+
- Usar `space-y-*` para mantener spacing vertical consistente
|
|
956
|
+
- Duplicar el spacing entre secciones principales
|
|
957
|
+
|
|
958
|
+
4. **Responsive scaling**
|
|
959
|
+
- Mobile: Padding más pequeño (p-4)
|
|
960
|
+
- Tablet: Padding medio (md:p-6)
|
|
961
|
+
- Desktop: Padding grande (lg:p-8)
|
|
962
|
+
|
|
963
|
+
---
|
|
964
|
+
|
|
965
|
+
## Dark Mode
|
|
966
|
+
|
|
967
|
+
Los valores de spacing permanecen idénticos entre light y dark mode, pero es importante combinarlos con colores adaptativos para mantener la coherencia visual en ambos modos.
|
|
968
|
+
|
|
969
|
+
### Configuración de Tailwind CSS
|
|
970
|
+
|
|
971
|
+
El modo oscuro en Siesa UI Kit se basa en la estrategia de clases de Tailwind CSS:
|
|
972
|
+
|
|
973
|
+
```javascript
|
|
974
|
+
// tailwind.config.js
|
|
975
|
+
module.exports = {
|
|
976
|
+
darkMode: 'class', // ✅ Estrategia basada en clases (NO 'media')
|
|
977
|
+
// ...resto de la configuración
|
|
978
|
+
}
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
Con esta configuración, el modo oscuro se activa añadiendo la clase `.dark` al elemento `<html>`:
|
|
982
|
+
|
|
983
|
+
```html
|
|
984
|
+
<!-- Modo claro -->
|
|
985
|
+
<html>
|
|
986
|
+
<body>
|
|
987
|
+
<!-- Contenido en modo claro -->
|
|
988
|
+
</body>
|
|
989
|
+
</html>
|
|
990
|
+
|
|
991
|
+
<!-- Modo oscuro -->
|
|
992
|
+
<html class="dark">
|
|
993
|
+
<body>
|
|
994
|
+
<!-- Contenido en modo oscuro -->
|
|
995
|
+
</body>
|
|
996
|
+
</html>
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
### El Modificador `dark:`
|
|
1000
|
+
|
|
1001
|
+
El modificador `dark:` de Tailwind funciona como un **prefijo condicional** que aplica estilos solo cuando la clase `.dark` está presente en un elemento padre (típicamente `<html>`).
|
|
1002
|
+
|
|
1003
|
+
#### Sintaxis Básica para Spacing
|
|
1004
|
+
|
|
1005
|
+
```tsx
|
|
1006
|
+
// Patrón básico - Mismo spacing, colores adaptativos
|
|
1007
|
+
<div className="p-6 bg-white dark:bg-dark-bg-primary rounded-2xl">
|
|
1008
|
+
Card con padding consistente
|
|
1009
|
+
</div>
|
|
1010
|
+
|
|
1011
|
+
// Los valores de spacing (p-6, mb-4, gap-3, etc.) NO cambian
|
|
1012
|
+
// Solo los colores se adaptan al modo oscuro
|
|
1013
|
+
```
|
|
1014
|
+
|
|
1015
|
+
### Principios de Spacing en Dark Mode
|
|
1016
|
+
|
|
1017
|
+
**Regla de Oro**: El sistema de spacing no cambia, pero el contexto visual sí:
|
|
1018
|
+
|
|
1019
|
+
```tsx
|
|
1020
|
+
// ✅ CORRECTO - Mismo spacing, colores adaptativos
|
|
1021
|
+
<div className="p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl">
|
|
1022
|
+
<h3 className="mb-4 text-content-primary dark:text-dark-content-primary font-bold">
|
|
1023
|
+
Title
|
|
1024
|
+
</h3>
|
|
1025
|
+
<p className="text-content-secondary dark:text-content-secondary">
|
|
1026
|
+
Content
|
|
1027
|
+
</p>
|
|
1028
|
+
</div>
|
|
1029
|
+
|
|
1030
|
+
// ❌ INCORRECTO - Cambiar spacing en dark mode
|
|
1031
|
+
<div className="p-6 dark:p-8">
|
|
1032
|
+
NO hacer esto - mantener spacing consistente
|
|
1033
|
+
</div>
|
|
1034
|
+
```
|
|
1035
|
+
|
|
1036
|
+
### Combinando Spacing con Estados Interactivos
|
|
1037
|
+
|
|
1038
|
+
El modificador `dark:` se puede combinar con hover y otros estados, manteniendo el spacing consistente:
|
|
1039
|
+
|
|
1040
|
+
```tsx
|
|
1041
|
+
// Dark mode + Hover (spacing no cambia, solo colores)
|
|
1042
|
+
<button className="
|
|
1043
|
+
px-4 py-2
|
|
1044
|
+
bg-primary-custom-600 dark:bg-dark-bg-inverse
|
|
1045
|
+
hover:bg-primary-custom-500 dark:hover:bg-dark-bg-inverse/90
|
|
1046
|
+
text-white dark:text-dark-content-inverse
|
|
1047
|
+
">
|
|
1048
|
+
Button con spacing consistente
|
|
1049
|
+
</button>
|
|
1050
|
+
|
|
1051
|
+
// Dark mode + Focus en inputs
|
|
1052
|
+
<input className="
|
|
1053
|
+
px-3 py-2
|
|
1054
|
+
border border-border-primary dark:border-dark-border-primary
|
|
1055
|
+
focus:ring-2 focus:ring-primary-custom-400/20 dark:focus:ring-dark-border-custom/20
|
|
1056
|
+
" />
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
### Orden de Modificadores
|
|
1060
|
+
|
|
1061
|
+
Tailwind CSS recomienda un orden específico:
|
|
1062
|
+
|
|
1063
|
+
**Formato**: `{responsive}:{dark}:{state}:{utility}`
|
|
1064
|
+
|
|
1065
|
+
```tsx
|
|
1066
|
+
// ✅ CORRECTO - Orden: responsive → dark → state → utility
|
|
1067
|
+
<div className="
|
|
1068
|
+
p-4
|
|
1069
|
+
md:p-6
|
|
1070
|
+
bg-white
|
|
1071
|
+
md:dark:bg-dark-bg-primary
|
|
1072
|
+
md:dark:hover:bg-dark-bg-secondary
|
|
1073
|
+
">
|
|
1074
|
+
Card con orden correcto
|
|
1075
|
+
</div>
|
|
1076
|
+
|
|
1077
|
+
// ❌ INCORRECTO - Orden equivocado
|
|
1078
|
+
<div className="
|
|
1079
|
+
dark:md:hover:bg-dark-bg-secondary
|
|
1080
|
+
p-4
|
|
1081
|
+
">
|
|
1082
|
+
Orden confuso
|
|
1083
|
+
</div>
|
|
1084
|
+
```
|
|
1085
|
+
|
|
1086
|
+
### Ejemplos de Spacing con Dark Mode
|
|
1087
|
+
|
|
1088
|
+
#### 1. Cards con Spacing Adaptado
|
|
1089
|
+
|
|
1090
|
+
```tsx
|
|
1091
|
+
// Card con padding y spacing interno consistente
|
|
1092
|
+
<div className="p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl shadow-base">
|
|
1093
|
+
{/* Header con margin-bottom */}
|
|
1094
|
+
<div className="mb-4 flex items-center justify-between">
|
|
1095
|
+
<h2 className="text-content-primary dark:text-dark-content-primary font-bold text-xl">
|
|
1096
|
+
Card Title
|
|
1097
|
+
</h2>
|
|
1098
|
+
<span className="text-content-secondary dark:text-content-secondary text-sm">
|
|
1099
|
+
Just now
|
|
1100
|
+
</span>
|
|
1101
|
+
</div>
|
|
1102
|
+
|
|
1103
|
+
{/* Content con margin-bottom */}
|
|
1104
|
+
<p className="mb-4 text-content-secondary dark:text-content-secondary">
|
|
1105
|
+
Esta card mantiene el mismo spacing (p-6, mb-4) en ambos modos,
|
|
1106
|
+
pero los colores se adaptan automáticamente.
|
|
1107
|
+
</p>
|
|
1108
|
+
|
|
1109
|
+
{/* Actions con gap */}
|
|
1110
|
+
<div className="flex gap-3">
|
|
1111
|
+
<button className="px-4 py-2 bg-primary-custom-600 dark:bg-dark-bg-inverse text-primary-inverse-content dark:text-dark-content-inverse rounded-md font-bold">
|
|
1112
|
+
Primary
|
|
1113
|
+
</button>
|
|
1114
|
+
<button className="px-4 py-2 border border-border-primary dark:border-dark-border-custom text-content-primary dark:text-dark-content-primary rounded-md font-bold">
|
|
1115
|
+
Secondary
|
|
1116
|
+
</button>
|
|
1117
|
+
</div>
|
|
1118
|
+
</div>
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
#### 2. Form con Spacing Vertical
|
|
1122
|
+
|
|
1123
|
+
```tsx
|
|
1124
|
+
// Formulario con spacing consistente en ambos modos
|
|
1125
|
+
<form className="max-w-md mx-auto p-8 bg-white dark:bg-dark-bg-primary rounded-2xl border border-border-primary dark:border-dark-border-primary">
|
|
1126
|
+
{/* Form header - spacing con mb-6 */}
|
|
1127
|
+
<div className="mb-6">
|
|
1128
|
+
<h2 className="mb-2 text-content-primary dark:text-dark-content-primary font-bold text-2xl">
|
|
1129
|
+
Sign Up
|
|
1130
|
+
</h2>
|
|
1131
|
+
<p className="text-content-secondary dark:text-content-secondary text-sm">
|
|
1132
|
+
Create your account to get started
|
|
1133
|
+
</p>
|
|
1134
|
+
</div>
|
|
1135
|
+
|
|
1136
|
+
{/* Form fields - spacing con space-y-6 */}
|
|
1137
|
+
<div className="space-y-6">
|
|
1138
|
+
{/* Field 1 */}
|
|
1139
|
+
<div className="space-y-2">
|
|
1140
|
+
<label className="block text-content-primary dark:text-dark-content-primary font-bold text-sm">
|
|
1141
|
+
Email
|
|
1142
|
+
</label>
|
|
1143
|
+
<input
|
|
1144
|
+
type="email"
|
|
1145
|
+
className="w-full px-3 py-2 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary text-content-primary dark:text-dark-content-primary rounded-md"
|
|
1146
|
+
placeholder="you@example.com"
|
|
1147
|
+
/>
|
|
1148
|
+
<p className="text-content-tertiary dark:text-content-tertiary text-xs">
|
|
1149
|
+
We'll never share your email
|
|
1150
|
+
</p>
|
|
1151
|
+
</div>
|
|
1152
|
+
|
|
1153
|
+
{/* Field 2 */}
|
|
1154
|
+
<div className="space-y-2">
|
|
1155
|
+
<label className="block text-content-primary dark:text-dark-content-primary font-bold text-sm">
|
|
1156
|
+
Password
|
|
1157
|
+
</label>
|
|
1158
|
+
<input
|
|
1159
|
+
type="password"
|
|
1160
|
+
className="w-full px-3 py-2 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary text-content-primary dark:text-dark-content-primary rounded-md"
|
|
1161
|
+
placeholder="••••••••"
|
|
1162
|
+
/>
|
|
1163
|
+
</div>
|
|
1164
|
+
|
|
1165
|
+
{/* Submit button - spacing con pt-4 */}
|
|
1166
|
+
<button
|
|
1167
|
+
type="submit"
|
|
1168
|
+
className="w-full px-4 py-3 bg-primary-custom-600 dark:bg-dark-bg-inverse text-primary-inverse-content dark:text-dark-content-inverse rounded-md font-bold"
|
|
1169
|
+
>
|
|
1170
|
+
Create Account
|
|
1171
|
+
</button>
|
|
1172
|
+
</div>
|
|
1173
|
+
</form>
|
|
1174
|
+
```
|
|
1175
|
+
|
|
1176
|
+
#### 3. Grid de Cards con Gaps
|
|
1177
|
+
|
|
1178
|
+
```tsx
|
|
1179
|
+
// Grid con gaps consistentes y colores adaptativos
|
|
1180
|
+
<div className="p-8 bg-background-secondary dark:bg-dark-bg-primary min-h-screen">
|
|
1181
|
+
<div className="max-w-7xl mx-auto">
|
|
1182
|
+
{/* Header con mb-8 */}
|
|
1183
|
+
<div className="mb-8">
|
|
1184
|
+
<h1 className="mb-2 text-content-primary dark:text-dark-content-primary font-bold text-4xl">
|
|
1185
|
+
Dashboard
|
|
1186
|
+
</h1>
|
|
1187
|
+
<p className="text-content-secondary dark:text-content-secondary">
|
|
1188
|
+
Overview of your projects
|
|
1189
|
+
</p>
|
|
1190
|
+
</div>
|
|
1191
|
+
|
|
1192
|
+
{/* Grid con gap-6 */}
|
|
1193
|
+
<div className="grid grid-cols-3 gap-6">
|
|
1194
|
+
{[1, 2, 3, 4, 5, 6].map((item) => (
|
|
1195
|
+
<div
|
|
1196
|
+
key={item}
|
|
1197
|
+
className="p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl shadow-base hover:shadow-lg transition-shadow"
|
|
1198
|
+
>
|
|
1199
|
+
<div className="mb-4 w-12 h-12 rounded-full bg-primary-custom-100 dark:bg-dark-border-custom flex items-center justify-center">
|
|
1200
|
+
<span className="text-2xl">📊</span>
|
|
1201
|
+
</div>
|
|
1202
|
+
<h3 className="mb-2 text-content-primary dark:text-dark-content-primary font-bold">
|
|
1203
|
+
Project {item}
|
|
1204
|
+
</h3>
|
|
1205
|
+
<p className="text-content-secondary dark:text-content-secondary text-sm">
|
|
1206
|
+
Description for project {item}
|
|
1207
|
+
</p>
|
|
1208
|
+
</div>
|
|
1209
|
+
))}
|
|
1210
|
+
</div>
|
|
1211
|
+
</div>
|
|
1212
|
+
</div>
|
|
1213
|
+
```
|
|
1214
|
+
|
|
1215
|
+
#### 4. Navigation Bar con Spacing Horizontal
|
|
1216
|
+
|
|
1217
|
+
```tsx
|
|
1218
|
+
// Navbar con padding y gaps adaptados
|
|
1219
|
+
<nav className="px-6 py-4 bg-white dark:bg-dark-bg-primary border-b border-border-primary dark:border-dark-border-primary">
|
|
1220
|
+
<div className="container mx-auto flex items-center justify-between">
|
|
1221
|
+
{/* Logo */}
|
|
1222
|
+
<div className="text-content-primary dark:text-dark-content-primary font-bold text-xl">
|
|
1223
|
+
Logo
|
|
1224
|
+
</div>
|
|
1225
|
+
|
|
1226
|
+
{/* Nav items con gap-6 */}
|
|
1227
|
+
<ul className="flex gap-6">
|
|
1228
|
+
{['Home', 'About', 'Services', 'Contact'].map((item) => (
|
|
1229
|
+
<li key={item}>
|
|
1230
|
+
<a
|
|
1231
|
+
href={`#${item.toLowerCase()}`}
|
|
1232
|
+
className="text-content-primary dark:text-dark-content-primary font-bold hover:text-primary-custom-600 dark:hover:text-dark-content-primary transition-colors"
|
|
1233
|
+
>
|
|
1234
|
+
{item}
|
|
1235
|
+
</a>
|
|
1236
|
+
</li>
|
|
1237
|
+
))}
|
|
1238
|
+
</ul>
|
|
1239
|
+
|
|
1240
|
+
{/* CTA Button */}
|
|
1241
|
+
<button className="px-4 py-2 bg-primary-custom-600 dark:bg-dark-bg-inverse text-primary-inverse-content dark:text-dark-content-inverse rounded-md font-bold">
|
|
1242
|
+
Sign In
|
|
1243
|
+
</button>
|
|
1244
|
+
</div>
|
|
1245
|
+
</nav>
|
|
1246
|
+
```
|
|
1247
|
+
|
|
1248
|
+
#### 5. List con Spacing Vertical
|
|
1249
|
+
|
|
1250
|
+
```tsx
|
|
1251
|
+
// Lista con spacing entre items
|
|
1252
|
+
<div className="max-w-2xl mx-auto p-8">
|
|
1253
|
+
<h2 className="mb-6 text-content-primary dark:text-dark-content-primary font-bold text-2xl">
|
|
1254
|
+
Notifications
|
|
1255
|
+
</h2>
|
|
1256
|
+
|
|
1257
|
+
{/* Lista con space-y-3 */}
|
|
1258
|
+
<div className="space-y-3">
|
|
1259
|
+
{[1, 2, 3, 4].map((item) => (
|
|
1260
|
+
<div
|
|
1261
|
+
key={item}
|
|
1262
|
+
className="p-4 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-xl hover:border-primary-custom-300 dark:hover:border-dark-border-custom transition-colors"
|
|
1263
|
+
>
|
|
1264
|
+
<div className="flex items-start gap-4">
|
|
1265
|
+
{/* Avatar */}
|
|
1266
|
+
<div className="w-10 h-10 rounded-full bg-primary-custom-100 dark:bg-dark-border-custom flex-shrink-0" />
|
|
1267
|
+
|
|
1268
|
+
{/* Content */}
|
|
1269
|
+
<div className="flex-1">
|
|
1270
|
+
<h3 className="mb-1 text-content-primary dark:text-dark-content-primary font-bold">
|
|
1271
|
+
Notification Title
|
|
1272
|
+
</h3>
|
|
1273
|
+
<p className="text-content-secondary dark:text-content-secondary text-sm">
|
|
1274
|
+
Notification description with some details
|
|
1275
|
+
</p>
|
|
1276
|
+
</div>
|
|
1277
|
+
|
|
1278
|
+
{/* Time */}
|
|
1279
|
+
<span className="text-content-tertiary dark:text-content-tertiary text-xs">
|
|
1280
|
+
2h ago
|
|
1281
|
+
</span>
|
|
1282
|
+
</div>
|
|
1283
|
+
</div>
|
|
1284
|
+
))}
|
|
1285
|
+
</div>
|
|
1286
|
+
</div>
|
|
1287
|
+
```
|
|
1288
|
+
|
|
1289
|
+
### Mejores Prácticas de Spacing en Dark Mode
|
|
1290
|
+
|
|
1291
|
+
#### 1. Mantener Spacing Consistente
|
|
1292
|
+
|
|
1293
|
+
```tsx
|
|
1294
|
+
// ✅ CORRECTO - Mismo spacing en ambos modos
|
|
1295
|
+
<div className="p-6 bg-white dark:bg-dark-bg-primary">
|
|
1296
|
+
Content
|
|
1297
|
+
</div>
|
|
1298
|
+
|
|
1299
|
+
// ❌ INCORRECTO - Cambiar spacing en dark mode
|
|
1300
|
+
<div className="p-6 dark:p-8 bg-white dark:bg-dark-bg-primary">
|
|
1301
|
+
Content
|
|
1302
|
+
</div>
|
|
1303
|
+
```
|
|
1304
|
+
|
|
1305
|
+
#### 2. Combinar con Colores Adaptativos
|
|
1306
|
+
|
|
1307
|
+
```tsx
|
|
1308
|
+
// ✅ CORRECTO - Todos los colores se adaptan
|
|
1309
|
+
<div className="p-6 mb-4 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary">
|
|
1310
|
+
<h3 className="mb-2 text-content-primary dark:text-dark-content-primary">Title</h3>
|
|
1311
|
+
<p className="text-content-secondary dark:text-content-secondary">Content</p>
|
|
1312
|
+
</div>
|
|
1313
|
+
```
|
|
1314
|
+
|
|
1315
|
+
#### 3. Gaps en Flexbox/Grid
|
|
1316
|
+
|
|
1317
|
+
```tsx
|
|
1318
|
+
// ✅ CORRECTO - Gap consistente, colores adaptativos
|
|
1319
|
+
<div className="flex gap-4">
|
|
1320
|
+
<button className="px-4 py-2 bg-primary-custom-600 dark:bg-dark-bg-inverse text-white">
|
|
1321
|
+
Button 1
|
|
1322
|
+
</button>
|
|
1323
|
+
<button className="px-4 py-2 border border-border-primary dark:border-dark-border-custom text-content-primary dark:text-dark-content-primary">
|
|
1324
|
+
Button 2
|
|
1325
|
+
</button>
|
|
1326
|
+
</div>
|
|
1327
|
+
```
|
|
1328
|
+
|
|
1329
|
+
#### 4. Spacing Responsive
|
|
1330
|
+
|
|
1331
|
+
```tsx
|
|
1332
|
+
// ✅ CORRECTO - Spacing responsive + dark mode
|
|
1333
|
+
<div className="p-4 md:p-6 lg:p-8 bg-white dark:bg-dark-bg-primary">
|
|
1334
|
+
Responsive padding que funciona en ambos modos
|
|
1335
|
+
</div>
|
|
1336
|
+
|
|
1337
|
+
// Para containers principales
|
|
1338
|
+
<div className="px-4 sm:px-6 lg:px-16 py-8 bg-background-secondary dark:bg-dark-bg-primary">
|
|
1339
|
+
Main content
|
|
1340
|
+
</div>
|
|
1341
|
+
```
|
|
1342
|
+
|
|
1343
|
+
### Ejemplo Completo: Dashboard Layout con Dark Mode
|
|
1344
|
+
|
|
1345
|
+
```tsx
|
|
1346
|
+
export const DashboardDarkMode = () => {
|
|
1347
|
+
return (
|
|
1348
|
+
<div className="min-h-screen bg-background-secondary dark:bg-dark-bg-primary">
|
|
1349
|
+
{/* Header - px-6 py-4 */}
|
|
1350
|
+
<header className="bg-white dark:bg-dark-bg-primary border-b border-border-primary dark:border-dark-border-primary px-6 py-4">
|
|
1351
|
+
<div className="flex items-center justify-between">
|
|
1352
|
+
<h1 className="text-content-primary dark:text-dark-content-primary font-bold text-xl">
|
|
1353
|
+
Dashboard
|
|
1354
|
+
</h1>
|
|
1355
|
+
<div className="flex items-center gap-4">
|
|
1356
|
+
<button className="px-4 py-2 bg-primary-custom-600 dark:bg-dark-bg-inverse text-primary-inverse-content dark:text-dark-content-inverse rounded-md font-bold">
|
|
1357
|
+
New Project
|
|
1358
|
+
</button>
|
|
1359
|
+
</div>
|
|
1360
|
+
</div>
|
|
1361
|
+
</header>
|
|
1362
|
+
|
|
1363
|
+
{/* Main content - p-6 */}
|
|
1364
|
+
<main className="p-6">
|
|
1365
|
+
<div className="max-w-7xl mx-auto">
|
|
1366
|
+
{/* Page title - mb-8 */}
|
|
1367
|
+
<div className="mb-8">
|
|
1368
|
+
<h2 className="mb-2 text-content-primary dark:text-dark-content-primary font-bold text-4xl">
|
|
1369
|
+
Welcome back
|
|
1370
|
+
</h2>
|
|
1371
|
+
<p className="text-content-secondary dark:text-content-secondary">
|
|
1372
|
+
Here's what's happening with your projects
|
|
1373
|
+
</p>
|
|
1374
|
+
</div>
|
|
1375
|
+
|
|
1376
|
+
{/* Stats grid - gap-6, mb-8 */}
|
|
1377
|
+
<div className="grid grid-cols-4 gap-6 mb-8">
|
|
1378
|
+
{['24', '156', '12', '87%'].map((value, index) => (
|
|
1379
|
+
<div
|
|
1380
|
+
key={index}
|
|
1381
|
+
className="p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl"
|
|
1382
|
+
>
|
|
1383
|
+
<p className="mb-2 text-content-secondary dark:text-content-secondary text-xs">
|
|
1384
|
+
Stat {index + 1}
|
|
1385
|
+
</p>
|
|
1386
|
+
<p className="text-content-primary dark:text-dark-content-primary font-bold text-3xl">
|
|
1387
|
+
{value}
|
|
1388
|
+
</p>
|
|
1389
|
+
</div>
|
|
1390
|
+
))}
|
|
1391
|
+
</div>
|
|
1392
|
+
|
|
1393
|
+
{/* Content sections - grid gap-6 */}
|
|
1394
|
+
<div className="grid grid-cols-3 gap-6">
|
|
1395
|
+
{/* Main content - col-span-2 */}
|
|
1396
|
+
<div className="col-span-2 p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl">
|
|
1397
|
+
<h3 className="mb-6 text-content-primary dark:text-dark-content-primary font-bold text-xl">
|
|
1398
|
+
Recent Activity
|
|
1399
|
+
</h3>
|
|
1400
|
+
<div className="space-y-4">
|
|
1401
|
+
{[1, 2, 3].map((item) => (
|
|
1402
|
+
<div
|
|
1403
|
+
key={item}
|
|
1404
|
+
className="flex items-start gap-4 pb-4 border-b border-border-primary dark:border-dark-border-primary last:border-0"
|
|
1405
|
+
>
|
|
1406
|
+
<div className="w-10 h-10 rounded-full bg-primary-custom-100 dark:bg-dark-border-custom" />
|
|
1407
|
+
<div className="flex-1">
|
|
1408
|
+
<p className="mb-1 text-content-primary dark:text-dark-content-primary font-bold text-sm">
|
|
1409
|
+
Activity title
|
|
1410
|
+
</p>
|
|
1411
|
+
<p className="text-content-secondary dark:text-content-secondary text-xs">
|
|
1412
|
+
Description
|
|
1413
|
+
</p>
|
|
1414
|
+
</div>
|
|
1415
|
+
</div>
|
|
1416
|
+
))}
|
|
1417
|
+
</div>
|
|
1418
|
+
</div>
|
|
1419
|
+
|
|
1420
|
+
{/* Sidebar - space-y-6 */}
|
|
1421
|
+
<div className="space-y-6">
|
|
1422
|
+
<div className="p-6 bg-white dark:bg-dark-bg-primary border border-border-primary dark:border-dark-border-primary rounded-2xl">
|
|
1423
|
+
<h4 className="mb-4 text-content-primary dark:text-dark-content-primary font-bold">
|
|
1424
|
+
Team
|
|
1425
|
+
</h4>
|
|
1426
|
+
<div className="space-y-3">
|
|
1427
|
+
{[1, 2, 3].map((member) => (
|
|
1428
|
+
<div key={member} className="flex items-center gap-3">
|
|
1429
|
+
<div className="w-8 h-8 rounded-full bg-primary-custom-600 dark:bg-dark-bg-inverse" />
|
|
1430
|
+
<div>
|
|
1431
|
+
<p className="text-content-primary dark:text-dark-content-primary font-bold text-sm">
|
|
1432
|
+
Member {member}
|
|
1433
|
+
</p>
|
|
1434
|
+
</div>
|
|
1435
|
+
</div>
|
|
1436
|
+
))}
|
|
1437
|
+
</div>
|
|
1438
|
+
</div>
|
|
1439
|
+
</div>
|
|
1440
|
+
</div>
|
|
1441
|
+
</div>
|
|
1442
|
+
</main>
|
|
1443
|
+
</div>
|
|
1444
|
+
);
|
|
1445
|
+
};
|
|
1446
|
+
```
|
|
1447
|
+
|
|
1448
|
+
### Guía de Spacing con Dark Mode
|
|
1449
|
+
|
|
1450
|
+
Los mismos valores de spacing funcionan perfectamente en ambos modos:
|
|
1451
|
+
|
|
1452
|
+
| Uso | Spacing | Light Mode Colors | Dark Mode Colors |
|
|
1453
|
+
|-----|---------|-------------------|------------------|
|
|
1454
|
+
| **Card padding** | `p-6` | `bg-white` | `dark:bg-dark-bg-primary` |
|
|
1455
|
+
| **Button padding** | `px-4 py-2` | `bg-primary-custom-600` | `dark:bg-dark-bg-inverse` |
|
|
1456
|
+
| **Section margin** | `mb-8` | - | - |
|
|
1457
|
+
| **Form spacing** | `space-y-6` | - | - |
|
|
1458
|
+
| **Grid gap** | `gap-6` | - | - |
|
|
1459
|
+
| **Container padding** | `px-6` | `bg-background-secondary` | `dark:bg-dark-bg-primary` |
|
|
1460
|
+
|
|
1461
|
+
### Recursos Adicionales sobre Dark Mode
|
|
1462
|
+
|
|
1463
|
+
Para más información sobre el modo oscuro:
|
|
1464
|
+
- Ver `docs/dark-mode-guide.md` - Guía completa de Dark Mode en Tailwind CSS
|
|
1465
|
+
- Ver `docs/colors.md` - Sistema de colores completo con tokens dark mode
|
|
1466
|
+
- Ver `docs/border-radius.md` - Border radius con ejemplos de dark mode
|
|
1467
|
+
- Ver `docs/shadows.md` - Sombras adaptadas a dark mode
|
|
1468
|
+
- Ver `docs/filters.md` - Filtros y glassmorphism en dark mode
|
|
1469
|
+
- Ver `docs/typography.md` - Sistema tipográfico adaptado a dark mode
|
|
1470
|
+
- [Documentación oficial de Tailwind Dark Mode](https://tailwindcss.com/docs/dark-mode)
|
|
1471
|
+
|
|
1472
|
+
---
|
|
1473
|
+
|
|
1474
|
+
## Referencia Rápida
|
|
1475
|
+
|
|
1476
|
+
### Cheat Sheet: Por Caso de Uso
|
|
1477
|
+
|
|
1478
|
+
```tsx
|
|
1479
|
+
// ===== BOTONES =====
|
|
1480
|
+
// Small
|
|
1481
|
+
<button className="px-3 py-1.5 text-sm">Small</button>
|
|
1482
|
+
|
|
1483
|
+
// Medium (default)
|
|
1484
|
+
<button className="px-4 py-2 text-sm">Medium</button>
|
|
1485
|
+
|
|
1486
|
+
// Large
|
|
1487
|
+
<button className="px-6 py-3 text-base">Large</button>
|
|
1488
|
+
|
|
1489
|
+
// ===== CARDS =====
|
|
1490
|
+
// Compact
|
|
1491
|
+
<div className="p-4">Compact card</div>
|
|
1492
|
+
|
|
1493
|
+
// Standard
|
|
1494
|
+
<div className="p-6">Standard card</div>
|
|
1495
|
+
|
|
1496
|
+
// Spacious
|
|
1497
|
+
<div className="p-8">Spacious card</div>
|
|
1498
|
+
|
|
1499
|
+
// ===== INPUTS =====
|
|
1500
|
+
<input className="px-3 py-2" />
|
|
1501
|
+
|
|
1502
|
+
// ===== FORMULARIOS =====
|
|
1503
|
+
// Spacing entre campos
|
|
1504
|
+
<form className="space-y-6">
|
|
1505
|
+
<div className="space-y-2">
|
|
1506
|
+
<label>Label</label>
|
|
1507
|
+
<input />
|
|
1508
|
+
<p>Helper</p>
|
|
1509
|
+
</div>
|
|
1510
|
+
</form>
|
|
1511
|
+
|
|
1512
|
+
// ===== GRIDS =====
|
|
1513
|
+
// Compact grid
|
|
1514
|
+
<div className="grid gap-4">...</div>
|
|
1515
|
+
|
|
1516
|
+
// Standard grid
|
|
1517
|
+
<div className="grid gap-6">...</div>
|
|
1518
|
+
|
|
1519
|
+
// Spacious grid
|
|
1520
|
+
<div className="grid gap-8">...</div>
|
|
1521
|
+
|
|
1522
|
+
// ===== LAYOUTS =====
|
|
1523
|
+
// Page padding
|
|
1524
|
+
<div className="px-6 py-12">Page content</div>
|
|
1525
|
+
|
|
1526
|
+
// Container
|
|
1527
|
+
<div className="container mx-auto px-6">Content</div>
|
|
1528
|
+
|
|
1529
|
+
// Section spacing
|
|
1530
|
+
<div className="space-y-16">
|
|
1531
|
+
<section>Section 1</section>
|
|
1532
|
+
<section>Section 2</section>
|
|
1533
|
+
</div>
|
|
1534
|
+
```
|
|
1535
|
+
|
|
1536
|
+
### Cheat Sheet: Valores Más Comunes
|
|
1537
|
+
|
|
1538
|
+
```tsx
|
|
1539
|
+
// Espaciado interno (padding)
|
|
1540
|
+
p-3 → 12px (botones, inputs)
|
|
1541
|
+
p-4 → 16px (cards compactas)
|
|
1542
|
+
p-6 → 24px (cards estándar)
|
|
1543
|
+
p-8 → 32px (cards espaciosas)
|
|
1544
|
+
p-12 → 48px (secciones)
|
|
1545
|
+
p-16 → 64px (containers)
|
|
1546
|
+
|
|
1547
|
+
// Espaciado externo (margin)
|
|
1548
|
+
mb-2 → 8px (spacing mínimo)
|
|
1549
|
+
mb-4 → 16px (entre elementos)
|
|
1550
|
+
mb-6 → 24px (entre grupos)
|
|
1551
|
+
mb-8 → 32px (entre secciones relacionadas)
|
|
1552
|
+
mb-12 → 48px (entre secciones)
|
|
1553
|
+
mb-16 → 64px (entre secciones principales)
|
|
1554
|
+
|
|
1555
|
+
// Gap (flex/grid)
|
|
1556
|
+
gap-2 → 8px (botones en grupo)
|
|
1557
|
+
gap-3 → 12px (elementos pequeños)
|
|
1558
|
+
gap-4 → 16px (elementos medianos)
|
|
1559
|
+
gap-6 → 24px (cards, elementos grandes)
|
|
1560
|
+
gap-8 → 32px (secciones)
|
|
1561
|
+
|
|
1562
|
+
// Responsive padding
|
|
1563
|
+
p-4 md:p-6 lg:p-8 (mobile → tablet → desktop)
|
|
1564
|
+
px-4 sm:px-6 lg:px-16 (horizontal padding responsive)
|
|
1565
|
+
```
|
|
1566
|
+
|
|
1567
|
+
### Cheat Sheet: Combinaciones Comunes
|
|
1568
|
+
|
|
1569
|
+
```tsx
|
|
1570
|
+
// Card con contenido
|
|
1571
|
+
<div className="p-6 space-y-4">
|
|
1572
|
+
<h3 className="font-bold">Title</h3>
|
|
1573
|
+
<p>Content</p>
|
|
1574
|
+
<div className="flex gap-3 pt-2">
|
|
1575
|
+
<button className="px-4 py-2">Action</button>
|
|
1576
|
+
</div>
|
|
1577
|
+
</div>
|
|
1578
|
+
|
|
1579
|
+
// Form field
|
|
1580
|
+
<div className="space-y-2">
|
|
1581
|
+
<label className="block font-bold text-sm">Label</label>
|
|
1582
|
+
<input className="w-full px-3 py-2" />
|
|
1583
|
+
<p className="text-xs">Helper text</p>
|
|
1584
|
+
</div>
|
|
1585
|
+
|
|
1586
|
+
// Navigation
|
|
1587
|
+
<nav className="px-6 py-4">
|
|
1588
|
+
<ul className="flex gap-6">
|
|
1589
|
+
<li>Item</li>
|
|
1590
|
+
</ul>
|
|
1591
|
+
</nav>
|
|
1592
|
+
|
|
1593
|
+
// Modal
|
|
1594
|
+
<div className="rounded-3xl">
|
|
1595
|
+
<div className="p-6 border-b">Header</div>
|
|
1596
|
+
<div className="p-6">Body</div>
|
|
1597
|
+
<div className="p-6 border-t flex gap-3 justify-end">
|
|
1598
|
+
<button className="px-4 py-2">Action</button>
|
|
1599
|
+
</div>
|
|
1600
|
+
</div>
|
|
1601
|
+
|
|
1602
|
+
// Grid de cards
|
|
1603
|
+
<div className="grid grid-cols-3 gap-6">
|
|
1604
|
+
<div className="p-6">Card</div>
|
|
1605
|
+
</div>
|
|
1606
|
+
|
|
1607
|
+
// Hero section
|
|
1608
|
+
<section className="px-6 py-16 md:py-24">
|
|
1609
|
+
<h1 className="mb-6">Title</h1>
|
|
1610
|
+
<p className="mb-8">Description</p>
|
|
1611
|
+
<button className="px-6 py-3">CTA</button>
|
|
1612
|
+
</section>
|
|
1613
|
+
```
|
|
1614
|
+
|
|
1615
|
+
### Cheat Sheet: Regla del 4
|
|
1616
|
+
|
|
1617
|
+
La mayoría de spacing debe ser múltiplo de 4px:
|
|
1618
|
+
|
|
1619
|
+
```
|
|
1620
|
+
4px → 1
|
|
1621
|
+
8px → 2
|
|
1622
|
+
12px → 3 ← Padding de botones
|
|
1623
|
+
16px → 4 ← Spacing base
|
|
1624
|
+
24px → 6 ← Padding de cards
|
|
1625
|
+
32px → 8 ← Gap entre secciones
|
|
1626
|
+
48px → 12 ← Separación entre secciones
|
|
1627
|
+
64px → 16 ← Padding de containers
|
|
1628
|
+
```
|
|
1629
|
+
|
|
1630
|
+
Valores intermedios (.5) para ajustes finos:
|
|
1631
|
+
```
|
|
1632
|
+
2px → 0.5
|
|
1633
|
+
6px → 1.5
|
|
1634
|
+
10px → 2.5
|
|
1635
|
+
14px → 3.5
|
|
1636
|
+
```
|
|
1637
|
+
|
|
1638
|
+
---
|
|
1639
|
+
|
|
1640
|
+
## Recursos Adicionales
|
|
1641
|
+
|
|
1642
|
+
### Documentación de Tailwind CSS
|
|
1643
|
+
|
|
1644
|
+
- **Padding**: https://tailwindcss.com/docs/padding
|
|
1645
|
+
- **Margin**: https://tailwindcss.com/docs/margin
|
|
1646
|
+
- **Space Between**: https://tailwindcss.com/docs/space
|
|
1647
|
+
- **Gap**: https://tailwindcss.com/docs/gap
|
|
1648
|
+
|
|
1649
|
+
### Archivos Relacionados
|
|
1650
|
+
|
|
1651
|
+
- `tailwind.config.js` - Configuración de spacing personalizado (tailwind.config.js:109-112)
|
|
1652
|
+
- `docs/typography.md` - Sistema de tipografía (combina bien con spacing)
|
|
1653
|
+
- `docs/colors.md` - Sistema de colores
|
|
1654
|
+
- `docs/border-radius.md` - Border radius para complementar cards
|
|
1655
|
+
|
|
1656
|
+
### Conversión de Unidades
|
|
1657
|
+
|
|
1658
|
+
```
|
|
1659
|
+
1rem = 16px (por defecto en navegadores)
|
|
1660
|
+
|
|
1661
|
+
Spacing → Pixels:
|
|
1662
|
+
0.5 → 2px
|
|
1663
|
+
1 → 4px
|
|
1664
|
+
1.5 → 6px
|
|
1665
|
+
2 → 8px
|
|
1666
|
+
3 → 12px
|
|
1667
|
+
4 → 16px
|
|
1668
|
+
6 → 24px
|
|
1669
|
+
8 → 32px
|
|
1670
|
+
12 → 48px
|
|
1671
|
+
16 → 64px
|
|
1672
|
+
```
|
|
1673
|
+
|
|
1674
|
+
### Tips de Performance
|
|
1675
|
+
|
|
1676
|
+
1. **Usar `gap` en lugar de margin cuando sea posible**: Más eficiente para el navegador
|
|
1677
|
+
2. **Evitar valores arbitrarios**: Los valores del sistema están optimizados
|
|
1678
|
+
3. **Usar spacing responsive**: Mejora la experiencia en diferentes dispositivos
|
|
1679
|
+
|
|
1680
|
+
---
|
|
1681
|
+
|
|
1682
|
+
**Última actualización**: 2025-11-11
|
|
1683
|
+
**Versión**: 1.0.0
|
|
1684
|
+
**Mantenedor**: Siesa UI Kit Team
|