@fabio.caffarello/react-design-system 1.7.0 → 1.8.0
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 +48 -3
- package/dist/docs/components/ComponentStatusTable.d.ts +11 -0
- package/dist/ui/atoms/Accordion/Accordion.d.ts +34 -0
- package/dist/ui/atoms/Accordion/Accordion.stories.d.ts +11 -0
- package/dist/ui/atoms/Accordion/Accordion.test.d.ts +1 -0
- package/dist/ui/atoms/Accordion/index.d.ts +2 -0
- package/dist/ui/atoms/Avatar/Avatar.d.ts +30 -0
- package/dist/ui/atoms/Avatar/Avatar.stories.d.ts +13 -0
- package/dist/ui/atoms/Avatar/Avatar.test.d.ts +1 -0
- package/dist/ui/atoms/Avatar/AvatarGroup.d.ts +26 -0
- package/dist/ui/atoms/Avatar/index.d.ts +9 -0
- package/dist/ui/atoms/Badge/Badge.d.ts +14 -6
- package/dist/ui/atoms/Badge/Badge.stories.d.ts +8 -9
- package/dist/ui/atoms/BoxWrapper/BoxWrapper.d.ts +3 -3
- package/dist/ui/atoms/BoxWrapper/BoxWrapper.test.d.ts +1 -0
- package/dist/ui/atoms/Button/Button.d.ts +32 -10
- package/dist/ui/atoms/Button/Button.stories.d.ts +7 -0
- package/dist/ui/atoms/Button/Button.test.d.ts +1 -0
- package/dist/ui/atoms/Checkbox/Checkbox.d.ts +2 -1
- package/dist/ui/atoms/Collapsible/Collapsible.stories.d.ts +2 -0
- package/dist/ui/atoms/Info/Info.d.ts +2 -3
- package/dist/ui/atoms/Info/Info.test.d.ts +1 -0
- package/dist/ui/atoms/Input/Input.d.ts +14 -4
- package/dist/ui/atoms/Input/Input.stories.d.ts +6 -0
- package/dist/ui/atoms/Popover/Popover.d.ts +35 -0
- package/dist/ui/atoms/Popover/Popover.stories.d.ts +11 -0
- package/dist/ui/atoms/Popover/Popover.test.d.ts +1 -0
- package/dist/ui/atoms/Popover/index.d.ts +2 -0
- package/dist/ui/atoms/Progress/Progress.d.ts +33 -0
- package/dist/ui/atoms/Progress/Progress.stories.d.ts +12 -0
- package/dist/ui/atoms/Progress/Progress.test.d.ts +1 -0
- package/dist/ui/atoms/Select/Select.d.ts +18 -6
- package/dist/ui/atoms/Select/Select.stories.d.ts +11 -8
- package/dist/ui/atoms/Separator/Separator.d.ts +23 -0
- package/dist/ui/atoms/Separator/Separator.stories.d.ts +10 -0
- package/dist/ui/atoms/Separator/Separator.test.d.ts +1 -0
- package/dist/ui/atoms/Separator/index.d.ts +2 -0
- package/dist/ui/atoms/Skeleton/Skeleton.d.ts +1 -1
- package/dist/ui/atoms/Skeleton/Skeleton.stories.d.ts +24 -0
- package/dist/ui/atoms/Slider/Slider.d.ts +45 -0
- package/dist/ui/atoms/Slider/Slider.stories.d.ts +13 -0
- package/dist/ui/atoms/Slider/Slider.test.d.ts +1 -0
- package/dist/ui/atoms/Slider/index.d.ts +2 -0
- package/dist/ui/atoms/Spinner/Spinner.d.ts +22 -0
- package/dist/ui/atoms/Spinner/Spinner.stories.d.ts +9 -0
- package/dist/ui/atoms/Spinner/Spinner.test.d.ts +1 -0
- package/dist/ui/atoms/Switch/Switch.d.ts +28 -0
- package/dist/ui/atoms/Switch/Switch.stories.d.ts +11 -0
- package/dist/ui/atoms/Switch/Switch.test.d.ts +1 -0
- package/dist/ui/atoms/Switch/index.d.ts +2 -0
- package/dist/ui/atoms/Tooltip/Tooltip.d.ts +2 -1
- package/dist/ui/atoms/Tooltip/Tooltip.stories.d.ts +17 -0
- package/dist/ui/atoms/index.d.ts +20 -3
- package/dist/ui/index.d.ts +6 -1
- package/dist/ui/molecules/Card/Card.d.ts +6 -2
- package/dist/ui/molecules/Card/Card.stories.d.ts +2 -0
- package/dist/ui/molecules/ColorPicker/ColorPicker.d.ts +28 -0
- package/dist/ui/molecules/ColorPicker/ColorPicker.stories.d.ts +12 -0
- package/dist/ui/molecules/ColorPicker/ColorPicker.test.d.ts +1 -0
- package/dist/ui/molecules/ColorPicker/index.d.ts +2 -0
- package/dist/ui/molecules/DatePicker/DatePicker.d.ts +74 -0
- package/dist/ui/molecules/DatePicker/DatePicker.stories.d.ts +12 -0
- package/dist/ui/molecules/DatePicker/DatePicker.test.d.ts +1 -0
- package/dist/ui/molecules/DatePicker/DatePickerCalendar.d.ts +6 -0
- package/dist/ui/molecules/DatePicker/DatePickerContext.d.ts +28 -0
- package/dist/ui/molecules/DatePicker/DatePickerInput.d.ts +9 -0
- package/dist/ui/molecules/DatePicker/DatePickerProvider.d.ts +23 -0
- package/dist/ui/molecules/DatePicker/index.d.ts +14 -0
- package/dist/ui/molecules/Dropdown/Dropdown.d.ts +2 -1
- package/dist/ui/molecules/Dropdown/Dropdown.stories.d.ts +13 -0
- package/dist/ui/molecules/EmptyState/EmptyState.stories.d.ts +22 -0
- package/dist/ui/molecules/FileUpload/FileUpload.d.ts +37 -0
- package/dist/ui/molecules/FileUpload/FileUpload.stories.d.ts +12 -0
- package/dist/ui/molecules/FileUpload/FileUpload.test.d.ts +1 -0
- package/dist/ui/molecules/FileUpload/index.d.ts +2 -0
- package/dist/ui/molecules/Form/Form.d.ts +29 -4
- package/dist/ui/molecules/Form/Form.stories.d.ts +2 -0
- package/dist/ui/molecules/Form/FormContext.d.ts +17 -0
- package/dist/ui/molecules/Form/FormField.d.ts +36 -0
- package/dist/ui/molecules/Form/FormProvider.d.ts +14 -0
- package/dist/ui/molecules/Form/index.d.ts +13 -0
- package/dist/ui/molecules/Form/useFormFieldArray.d.ts +28 -0
- package/dist/ui/molecules/InputWithLabel/InputWithLabel.test.d.ts +1 -0
- package/dist/ui/molecules/Rating/Rating.d.ts +33 -0
- package/dist/ui/molecules/Rating/Rating.stories.d.ts +13 -0
- package/dist/ui/molecules/Rating/Rating.test.d.ts +1 -0
- package/dist/ui/molecules/Rating/index.d.ts +2 -0
- package/dist/ui/molecules/SearchInput/SearchInput.d.ts +24 -0
- package/dist/ui/molecules/SearchInput/SearchInput.stories.d.ts +10 -0
- package/dist/ui/molecules/SearchInput/SearchInput.test.d.ts +1 -0
- package/dist/ui/molecules/SearchInput/index.d.ts +2 -0
- package/dist/ui/molecules/SidebarHeader/SidebarHeader.test.d.ts +1 -0
- package/dist/ui/molecules/TableActions/TableActions.d.ts +31 -0
- package/dist/ui/molecules/TableActions/TableActions.stories.d.ts +7 -0
- package/dist/ui/molecules/TableActions/TableActions.test.d.ts +1 -0
- package/dist/ui/molecules/TableFilters/TableFilters.d.ts +37 -0
- package/dist/ui/molecules/TableFilters/TableFilters.stories.d.ts +7 -0
- package/dist/ui/molecules/TableFilters/TableFilters.test.d.ts +1 -0
- package/dist/ui/molecules/TablePagination/TablePagination.d.ts +29 -0
- package/dist/ui/molecules/TablePagination/TablePagination.stories.d.ts +8 -0
- package/dist/ui/molecules/TablePagination/TablePagination.test.d.ts +1 -0
- package/dist/ui/molecules/Tabs/Tabs.d.ts +15 -0
- package/dist/ui/molecules/Tabs/Tabs.stories.d.ts +10 -0
- package/dist/ui/molecules/Tabs/Tabs.test.d.ts +1 -0
- package/dist/ui/molecules/Tabs/TabsContent.d.ts +14 -0
- package/dist/ui/molecules/Tabs/TabsContext.d.ts +18 -0
- package/dist/ui/molecules/Tabs/TabsList.d.ts +12 -0
- package/dist/ui/molecules/Tabs/TabsProvider.d.ts +16 -0
- package/dist/ui/molecules/Tabs/TabsTrigger.d.ts +13 -0
- package/dist/ui/molecules/Tabs/index.d.ts +17 -0
- package/dist/ui/molecules/TimePicker/TimePicker.d.ts +29 -0
- package/dist/ui/molecules/TimePicker/TimePicker.stories.d.ts +12 -0
- package/dist/ui/molecules/TimePicker/TimePicker.test.d.ts +1 -0
- package/dist/ui/molecules/TimePicker/index.d.ts +2 -0
- package/dist/ui/molecules/index.d.ts +13 -5
- package/dist/ui/organisms/CommandPalette/CommandPalette.d.ts +37 -0
- package/dist/ui/organisms/CommandPalette/CommandPalette.stories.d.ts +11 -0
- package/dist/ui/organisms/CommandPalette/CommandPalette.test.d.ts +1 -0
- package/dist/ui/organisms/CommandPalette/index.d.ts +2 -0
- package/dist/ui/organisms/DataGrid/DataGrid.d.ts +84 -0
- package/dist/ui/organisms/DataGrid/DataGrid.stories.d.ts +14 -0
- package/dist/ui/organisms/DataGrid/DataGrid.test.d.ts +1 -0
- package/dist/ui/organisms/DataGrid/index.d.ts +2 -0
- package/dist/ui/organisms/Dialog/AlertDialog.d.ts +34 -0
- package/dist/ui/organisms/Dialog/Dialog.d.ts +58 -0
- package/dist/ui/organisms/Dialog/Dialog.stories.d.ts +13 -0
- package/dist/ui/organisms/Dialog/Dialog.test.d.ts +1 -0
- package/dist/ui/organisms/Dialog/DialogClose.d.ts +8 -0
- package/dist/ui/organisms/Dialog/DialogContent.d.ts +8 -0
- package/dist/ui/organisms/Dialog/DialogContext.d.ts +10 -0
- package/dist/ui/organisms/Dialog/DialogDescription.d.ts +4 -0
- package/dist/ui/organisms/Dialog/DialogFooter.d.ts +5 -0
- package/dist/ui/organisms/Dialog/DialogHeader.d.ts +5 -0
- package/dist/ui/organisms/Dialog/DialogProvider.d.ts +10 -0
- package/dist/ui/organisms/Dialog/DialogTitle.d.ts +5 -0
- package/dist/ui/organisms/Dialog/DialogTrigger.d.ts +6 -0
- package/dist/ui/organisms/Dialog/index.d.ts +22 -0
- package/dist/ui/organisms/Sidebar/Sidebar.d.ts +7 -4
- package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.d.ts +27 -0
- package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.stories.d.ts +11 -0
- package/dist/ui/organisms/Sidebar/SidebarGroup/SidebarGroup.test.d.ts +1 -0
- package/dist/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.d.ts +19 -0
- package/dist/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.test.d.ts +1 -0
- package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.d.ts +23 -0
- package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.stories.d.ts +10 -0
- package/dist/ui/organisms/Sidebar/SidebarItem/SidebarItem.test.d.ts +1 -0
- package/dist/ui/organisms/Sidebar/index.d.ts +8 -0
- package/dist/ui/organisms/Stepper/Stepper.d.ts +40 -0
- package/dist/ui/organisms/Stepper/Stepper.stories.d.ts +12 -0
- package/dist/ui/organisms/Stepper/Stepper.test.d.ts +1 -0
- package/dist/ui/organisms/Stepper/index.d.ts +2 -0
- package/dist/ui/organisms/Table/Table.d.ts +84 -16
- package/dist/ui/organisms/Table/Table.stories.d.ts +15 -0
- package/dist/ui/organisms/Table/TableActions/TableActions.d.ts +31 -0
- package/dist/ui/organisms/Table/TableActions/TableActions.stories.d.ts +7 -0
- package/dist/ui/organisms/Table/TableActions/TableActions.test.d.ts +1 -0
- package/dist/ui/organisms/Table/TableActions.d.ts +13 -0
- package/dist/ui/organisms/Table/TableBody.d.ts +12 -0
- package/dist/ui/organisms/Table/TableCell.d.ts +14 -0
- package/dist/ui/organisms/Table/TableContext.d.ts +75 -0
- package/dist/ui/organisms/Table/TableEmptyState.d.ts +11 -0
- package/dist/ui/organisms/Table/TableFilters/TableFilters.d.ts +37 -0
- package/dist/ui/organisms/Table/TableFilters/TableFilters.stories.d.ts +7 -0
- package/dist/ui/organisms/Table/TableFilters/TableFilters.test.d.ts +1 -0
- package/dist/ui/organisms/Table/TableFilters.d.ts +12 -0
- package/dist/ui/organisms/Table/TableHeader.d.ts +10 -0
- package/dist/ui/organisms/Table/TableHeaderCell.d.ts +18 -0
- package/dist/ui/organisms/Table/TableHeaderRow.d.ts +10 -0
- package/dist/ui/organisms/Table/TablePagination/TablePagination.d.ts +29 -0
- package/dist/ui/organisms/Table/TablePagination/TablePagination.stories.d.ts +8 -0
- package/dist/ui/organisms/Table/TablePagination/TablePagination.test.d.ts +1 -0
- package/dist/ui/organisms/Table/TablePagination.d.ts +14 -0
- package/dist/ui/organisms/Table/TableProvider.d.ts +55 -0
- package/dist/ui/organisms/Table/TableRow.d.ts +14 -0
- package/dist/ui/organisms/Table/TableTypes.d.ts +8 -0
- package/dist/ui/organisms/Table/index.d.ts +30 -0
- package/dist/ui/organisms/Table/useColumnResizing.d.ts +39 -0
- package/dist/ui/organisms/Table/useVirtualScrolling.d.ts +35 -0
- package/dist/ui/organisms/Timeline/Timeline.d.ts +34 -0
- package/dist/ui/organisms/Timeline/Timeline.stories.d.ts +12 -0
- package/dist/ui/organisms/Timeline/Timeline.test.d.ts +1 -0
- package/dist/ui/organisms/Timeline/index.d.ts +2 -0
- package/dist/ui/organisms/Toast/Toast.d.ts +8 -0
- package/dist/ui/organisms/Toast/Toast.stories.d.ts +14 -0
- package/dist/ui/organisms/Toast/Toast.test.d.ts +1 -0
- package/dist/ui/organisms/Toast/ToastContainer.d.ts +5 -0
- package/dist/ui/organisms/Toast/ToastContext.d.ts +21 -0
- package/dist/ui/organisms/Toast/ToastProvider.d.ts +7 -0
- package/dist/ui/organisms/Toast/index.d.ts +15 -0
- package/dist/ui/organisms/Toast/useToast.d.ts +35 -0
- package/dist/ui/organisms/index.d.ts +12 -2
- package/dist/ui/providers/AdvancedThemeProvider.d.ts +52 -0
- package/dist/ui/providers/index.d.ts +9 -0
- package/dist/ui/themes/ThemeBuilder.d.ts +28 -0
- package/dist/ui/themes/ThemeRegistry.d.ts +55 -0
- package/dist/ui/themes/index.d.ts +9 -0
- package/dist/ui/themes/types.d.ts +48 -0
- package/dist/ui/themes/utils.d.ts +21 -0
- package/dist/ui/tokens/TokenVisualizations.d.ts +41 -0
- package/dist/ui/tokens/animations.d.ts +65 -0
- package/dist/ui/tokens/borders.d.ts +61 -0
- package/dist/ui/tokens/gradients.d.ts +55 -0
- package/dist/ui/tokens/index.d.ts +31 -0
- package/dist/ui/tokens/opacity.d.ts +51 -0
- package/dist/ui/tokens/radius.d.ts +45 -0
- package/dist/ui/tokens/shadows.d.ts +42 -0
- package/dist/ui/tokens/themes/dark.d.ts +26 -26
- package/dist/ui/tokens/themes/light.d.ts +26 -26
- package/dist/ui/tokens/tokens.factory.d.ts +42 -0
- package/dist/ui/tokens/z-index.d.ts +44 -0
- package/dist/ui/utils/index.d.ts +6 -0
- package/package.json +50 -6
- package/src/docs/Accessibility.mdx +402 -0
- package/src/docs/BestPractices.mdx +315 -0
- package/src/docs/ComponentComposition.mdx +381 -0
- package/src/docs/ComponentStatus.mdx +177 -0
- package/src/docs/DesignSystem.mdx +121 -0
- package/src/docs/GettingStarted.mdx +284 -0
- package/src/docs/MigrationGuide.mdx +297 -0
- package/src/docs/Performance.mdx +206 -0
- package/src/docs/components/ComponentStatusTable.tsx +184 -0
- package/src/setupTests.ts +32 -0
- package/src/ui/atoms/Accordion/Accordion.stories.tsx +147 -0
- package/src/ui/atoms/Accordion/Accordion.test.tsx +86 -0
- package/src/ui/atoms/Accordion/Accordion.tsx +147 -0
- package/src/ui/atoms/Accordion/index.ts +2 -0
- package/src/ui/atoms/Avatar/Avatar.stories.tsx +226 -0
- package/src/ui/atoms/Avatar/Avatar.test.tsx +233 -0
- package/src/ui/atoms/Avatar/Avatar.tsx +128 -0
- package/src/ui/atoms/Avatar/AvatarGroup.tsx +96 -0
- package/src/ui/atoms/Avatar/index.ts +11 -0
- package/src/ui/atoms/Badge/Badge.stories.tsx +65 -56
- package/src/ui/atoms/Badge/Badge.test.tsx +27 -50
- package/src/ui/atoms/Badge/Badge.tsx +70 -27
- package/src/ui/atoms/BoxWrapper/BoxWrapper.stories.tsx +1 -1
- package/src/ui/atoms/BoxWrapper/BoxWrapper.test.tsx +27 -0
- package/src/ui/atoms/BoxWrapper/BoxWrapper.tsx +5 -2
- package/src/ui/atoms/Button/Button.stories.tsx +130 -1
- package/src/ui/atoms/Button/Button.test.tsx +233 -0
- package/src/ui/atoms/Button/Button.tsx +160 -53
- package/src/ui/atoms/Checkbox/Checkbox.tsx +14 -1
- package/src/ui/atoms/Collapsible/Collapsible.stories.tsx +47 -1
- package/src/ui/atoms/Collapsible/Collapsible.test.tsx +36 -24
- package/src/ui/atoms/Collapsible/Collapsible.tsx +9 -1
- package/src/ui/atoms/ErrorMessage/ErrorMessage.stories.tsx +1 -1
- package/src/ui/atoms/Info/Info.stories.tsx +1 -1
- package/src/ui/atoms/Info/Info.test.tsx +45 -0
- package/src/ui/atoms/Info/Info.tsx +2 -2
- package/src/ui/atoms/Input/Input.stories.tsx +80 -0
- package/src/ui/atoms/Input/Input.test.tsx +190 -36
- package/src/ui/atoms/Input/Input.tsx +144 -25
- package/src/ui/atoms/Label/Label.stories.tsx +1 -1
- package/src/ui/atoms/NavLink/NavLink.stories.tsx +1 -1
- package/src/ui/atoms/Popover/Popover.stories.tsx +157 -0
- package/src/ui/atoms/Popover/Popover.test.tsx +80 -0
- package/src/ui/atoms/Popover/Popover.tsx +256 -0
- package/src/ui/atoms/Popover/index.ts +2 -0
- package/src/ui/atoms/Progress/Progress.css +17 -0
- package/src/ui/atoms/Progress/Progress.stories.tsx +170 -0
- package/src/ui/atoms/Progress/Progress.test.tsx +134 -0
- package/src/ui/atoms/Progress/Progress.tsx +138 -0
- package/src/ui/atoms/Radio/Radio.tsx +1 -1
- package/src/ui/atoms/Select/Select.stories.tsx +93 -58
- package/src/ui/atoms/Select/Select.test.tsx +162 -46
- package/src/ui/atoms/Select/Select.tsx +142 -44
- package/src/ui/atoms/Separator/Separator.stories.tsx +88 -0
- package/src/ui/atoms/Separator/Separator.test.tsx +34 -0
- package/src/ui/atoms/Separator/Separator.tsx +81 -0
- package/src/ui/atoms/Separator/index.ts +2 -0
- package/src/ui/atoms/Skeleton/Skeleton.stories.tsx +62 -0
- package/src/ui/atoms/Skeleton/Skeleton.tsx +19 -2
- package/src/ui/atoms/Slider/Slider.stories.tsx +205 -0
- package/src/ui/atoms/Slider/Slider.test.tsx +53 -0
- package/src/ui/atoms/Slider/Slider.tsx +307 -0
- package/src/ui/atoms/Slider/index.ts +2 -0
- package/src/ui/atoms/Spinner/Spinner.stories.tsx +56 -0
- package/src/ui/atoms/Spinner/Spinner.test.tsx +35 -0
- package/src/ui/atoms/Spinner/Spinner.tsx +88 -0
- package/src/ui/atoms/Switch/Switch.stories.tsx +182 -0
- package/src/ui/atoms/Switch/Switch.test.tsx +90 -0
- package/src/ui/atoms/Switch/Switch.tsx +181 -0
- package/src/ui/atoms/Switch/index.ts +2 -0
- package/src/ui/atoms/Text/Text.stories.tsx +1 -1
- package/src/ui/atoms/Text/Text.test.tsx +48 -32
- package/src/ui/atoms/Textarea/Textarea.stories.tsx +1 -1
- package/src/ui/atoms/Tooltip/Tooltip.stories.tsx +44 -0
- package/src/ui/atoms/Tooltip/Tooltip.tsx +94 -6
- package/src/ui/atoms/index.ts +27 -4
- package/src/ui/index.ts +6 -1
- package/src/ui/molecules/Breadcrumb/Breadcrumb.stories.tsx +1 -1
- package/src/ui/molecules/Breadcrumb/Breadcrumb.tsx +1 -1
- package/src/ui/molecules/Card/Card.stories.tsx +49 -1
- package/src/ui/molecules/Card/Card.tsx +40 -5
- package/src/ui/molecules/ColorPicker/ColorPicker.stories.tsx +156 -0
- package/src/ui/molecules/ColorPicker/ColorPicker.test.tsx +47 -0
- package/src/ui/molecules/ColorPicker/ColorPicker.tsx +271 -0
- package/src/ui/molecules/ColorPicker/index.ts +2 -0
- package/src/ui/molecules/DatePicker/DatePicker.mdx +150 -0
- package/src/ui/molecules/DatePicker/DatePicker.stories.tsx +188 -0
- package/src/ui/molecules/DatePicker/DatePicker.test.tsx +381 -0
- package/src/ui/molecules/DatePicker/DatePicker.tsx +231 -0
- package/src/ui/molecules/DatePicker/DatePickerCalendar.tsx +277 -0
- package/src/ui/molecules/DatePicker/DatePickerContext.tsx +39 -0
- package/src/ui/molecules/DatePicker/DatePickerInput.tsx +147 -0
- package/src/ui/molecules/DatePicker/DatePickerProvider.tsx +100 -0
- package/src/ui/molecules/DatePicker/index.ts +16 -0
- package/src/ui/molecules/Dropdown/Dropdown.stories.tsx +50 -8
- package/src/ui/molecules/Dropdown/Dropdown.test.tsx +272 -12
- package/src/ui/molecules/Dropdown/Dropdown.tsx +176 -10
- package/src/ui/molecules/EmptyState/EmptyState.stories.tsx +24 -2
- package/src/ui/molecules/EmptyState/EmptyState.tsx +9 -3
- package/src/ui/molecules/FileUpload/FileUpload.stories.tsx +177 -0
- package/src/ui/molecules/FileUpload/FileUpload.test.tsx +114 -0
- package/src/ui/molecules/FileUpload/FileUpload.tsx +312 -0
- package/src/ui/molecules/FileUpload/index.ts +2 -0
- package/src/ui/molecules/Form/Form.mdx +145 -0
- package/src/ui/molecules/Form/Form.stories.tsx +121 -1
- package/src/ui/molecules/Form/Form.test.tsx +1 -3
- package/src/ui/molecules/Form/Form.tsx +95 -15
- package/src/ui/molecules/Form/FormContext.tsx +35 -0
- package/src/ui/molecules/Form/FormField.tsx +83 -0
- package/src/ui/molecules/Form/FormProvider.tsx +34 -0
- package/src/ui/molecules/Form/index.ts +21 -0
- package/src/ui/molecules/Form/useFormFieldArray.ts +46 -0
- package/src/ui/molecules/InputWithLabel/InputWithLabel.stories.tsx +1 -1
- package/src/ui/molecules/InputWithLabel/InputWithLabel.test.tsx +44 -0
- package/src/ui/molecules/InputWithLabel/InputWithLabel.tsx +3 -1
- package/src/ui/molecules/NavbarGroup/NavbarGroup.stories.tsx +1 -1
- package/src/ui/molecules/Pagination/Pagination.stories.tsx +1 -1
- package/src/ui/molecules/Rating/Rating.stories.tsx +206 -0
- package/src/ui/molecules/Rating/Rating.test.tsx +60 -0
- package/src/ui/molecules/Rating/Rating.tsx +173 -0
- package/src/ui/molecules/Rating/index.ts +2 -0
- package/src/ui/molecules/SearchInput/SearchInput.stories.tsx +146 -0
- package/src/ui/molecules/SearchInput/SearchInput.test.tsx +82 -0
- package/src/ui/molecules/SearchInput/SearchInput.tsx +133 -0
- package/src/ui/molecules/SearchInput/index.ts +2 -0
- package/src/ui/molecules/Tabs/Tabs.stories.tsx +229 -0
- package/src/ui/molecules/Tabs/Tabs.test.tsx +497 -0
- package/src/ui/molecules/Tabs/Tabs.tsx +58 -0
- package/src/ui/molecules/Tabs/TabsContent.tsx +50 -0
- package/src/ui/molecules/Tabs/TabsContext.tsx +36 -0
- package/src/ui/molecules/Tabs/TabsList.tsx +98 -0
- package/src/ui/molecules/Tabs/TabsProvider.tsx +53 -0
- package/src/ui/molecules/Tabs/TabsTrigger.tsx +111 -0
- package/src/ui/molecules/Tabs/index.ts +23 -0
- package/src/ui/molecules/TimePicker/TimePicker.stories.tsx +145 -0
- package/src/ui/molecules/TimePicker/TimePicker.test.tsx +41 -0
- package/src/ui/molecules/TimePicker/TimePicker.tsx +264 -0
- package/src/ui/molecules/TimePicker/index.ts +2 -0
- package/src/ui/molecules/index.ts +20 -7
- package/src/ui/organisms/CommandPalette/CommandPalette.stories.tsx +218 -0
- package/src/ui/organisms/CommandPalette/CommandPalette.test.tsx +85 -0
- package/src/ui/organisms/CommandPalette/CommandPalette.tsx +333 -0
- package/src/ui/organisms/CommandPalette/index.ts +2 -0
- package/src/ui/organisms/DataGrid/DataGrid.stories.tsx +196 -0
- package/src/ui/organisms/DataGrid/DataGrid.test.tsx +53 -0
- package/src/ui/organisms/DataGrid/DataGrid.tsx +294 -0
- package/src/ui/organisms/DataGrid/index.ts +2 -0
- package/src/ui/organisms/Dialog/AlertDialog.tsx +92 -0
- package/src/ui/organisms/Dialog/Dialog.mdx +200 -0
- package/src/ui/organisms/Dialog/Dialog.stories.tsx +226 -0
- package/src/ui/organisms/Dialog/Dialog.test.tsx +435 -0
- package/src/ui/organisms/Dialog/Dialog.tsx +79 -0
- package/src/ui/organisms/Dialog/DialogClose.tsx +45 -0
- package/src/ui/organisms/Dialog/DialogContent.tsx +149 -0
- package/src/ui/organisms/Dialog/DialogContext.tsx +25 -0
- package/src/ui/organisms/Dialog/DialogDescription.tsx +28 -0
- package/src/ui/organisms/Dialog/DialogFooter.tsx +18 -0
- package/src/ui/organisms/Dialog/DialogHeader.tsx +18 -0
- package/src/ui/organisms/Dialog/DialogProvider.tsx +73 -0
- package/src/ui/organisms/Dialog/DialogTitle.tsx +31 -0
- package/src/ui/organisms/Dialog/DialogTrigger.tsx +34 -0
- package/src/ui/organisms/Dialog/index.ts +24 -0
- package/src/ui/organisms/LoginBox/LoginBox.stories.tsx +1 -1
- package/src/ui/organisms/Modal/Modal.stories.tsx +2 -2
- package/src/ui/organisms/Modal/Modal.test.tsx +1 -1
- package/src/ui/organisms/Sidebar/Sidebar.stories.tsx +1 -1
- package/src/ui/organisms/Sidebar/Sidebar.test.tsx +5 -3
- package/src/ui/organisms/Sidebar/Sidebar.tsx +21 -6
- package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.stories.tsx +2 -2
- package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.test.tsx +32 -9
- package/src/ui/{molecules → organisms/Sidebar}/SidebarGroup/SidebarGroup.tsx +7 -7
- package/src/ui/organisms/Sidebar/SidebarHeader/SidebarHeader.test.tsx +66 -0
- package/src/ui/{molecules → organisms/Sidebar}/SidebarHeader/SidebarHeader.tsx +1 -2
- package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.stories.tsx +1 -1
- package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.test.tsx +9 -8
- package/src/ui/{atoms → organisms/Sidebar}/SidebarItem/SidebarItem.tsx +9 -3
- package/src/ui/organisms/Sidebar/index.ts +13 -0
- package/src/ui/organisms/Stepper/Stepper.stories.tsx +253 -0
- package/src/ui/organisms/Stepper/Stepper.test.tsx +76 -0
- package/src/ui/organisms/Stepper/Stepper.tsx +323 -0
- package/src/ui/organisms/Stepper/index.ts +2 -0
- package/src/ui/organisms/Table/Table.mdx +154 -0
- package/src/ui/organisms/Table/Table.stories.tsx +614 -4
- package/src/ui/organisms/Table/Table.test.tsx +86 -4
- package/src/ui/organisms/Table/Table.tsx +215 -99
- package/src/ui/organisms/Table/TableActions/TableActions.stories.tsx +88 -0
- package/src/ui/organisms/Table/TableActions/TableActions.test.tsx +64 -0
- package/src/ui/organisms/Table/TableActions/TableActions.tsx +71 -0
- package/src/ui/organisms/Table/TableActions.tsx +46 -0
- package/src/ui/organisms/Table/TableBody.tsx +137 -0
- package/src/ui/organisms/Table/TableCell.tsx +36 -0
- package/src/ui/organisms/Table/TableContext.tsx +111 -0
- package/src/ui/organisms/Table/TableEmptyState.tsx +51 -0
- package/src/ui/organisms/Table/TableFilters/TableFilters.stories.tsx +111 -0
- package/src/ui/organisms/Table/TableFilters/TableFilters.test.tsx +104 -0
- package/src/ui/organisms/Table/TableFilters/TableFilters.tsx +191 -0
- package/src/ui/organisms/Table/TableFilters.tsx +39 -0
- package/src/ui/organisms/Table/TableHeader.tsx +29 -0
- package/src/ui/organisms/Table/TableHeaderCell.tsx +142 -0
- package/src/ui/organisms/Table/TableHeaderRow.tsx +72 -0
- package/src/ui/organisms/Table/TablePagination/TablePagination.stories.tsx +87 -0
- package/src/ui/organisms/Table/TablePagination/TablePagination.test.tsx +90 -0
- package/src/ui/organisms/Table/TablePagination/TablePagination.tsx +207 -0
- package/src/ui/organisms/Table/TablePagination.tsx +48 -0
- package/src/ui/organisms/Table/TableProvider.tsx +429 -0
- package/src/ui/organisms/Table/TableRow.tsx +85 -0
- package/src/ui/organisms/Table/TableTypes.ts +11 -0
- package/src/ui/organisms/Table/index.ts +55 -0
- package/src/ui/organisms/Table/useColumnResizing.ts +134 -0
- package/src/ui/organisms/Table/useVirtualScrolling.ts +116 -0
- package/src/ui/organisms/Timeline/Timeline.stories.tsx +230 -0
- package/src/ui/organisms/Timeline/Timeline.test.tsx +47 -0
- package/src/ui/organisms/Timeline/Timeline.tsx +179 -0
- package/src/ui/organisms/Timeline/index.ts +2 -0
- package/src/ui/organisms/Toast/Toast.stories.tsx +169 -0
- package/src/ui/organisms/Toast/Toast.test.tsx +537 -0
- package/src/ui/organisms/Toast/Toast.tsx +144 -0
- package/src/ui/organisms/Toast/ToastContainer.tsx +54 -0
- package/src/ui/organisms/Toast/ToastContext.tsx +38 -0
- package/src/ui/organisms/Toast/ToastProvider.tsx +56 -0
- package/src/ui/organisms/Toast/index.ts +17 -0
- package/src/ui/organisms/Toast/useToast.ts +70 -0
- package/src/ui/organisms/index.ts +17 -2
- package/src/ui/providers/AdvancedThemeProvider.tsx +229 -0
- package/src/ui/providers/index.ts +14 -0
- package/src/ui/themes/README.md +281 -0
- package/src/ui/themes/ThemeBuilder.ts +149 -0
- package/src/ui/themes/ThemeRegistry.ts +187 -0
- package/src/ui/themes/index.ts +20 -0
- package/src/ui/themes/types.ts +53 -0
- package/src/ui/themes/utils.ts +70 -0
- package/src/ui/tokens/README.md +212 -0
- package/src/ui/tokens/TokenVisualizations.tsx +273 -0
- package/src/ui/tokens/Tokens.mdx +348 -0
- package/src/ui/tokens/animations.ts +157 -0
- package/src/ui/tokens/borders.ts +121 -0
- package/src/ui/tokens/gradients.ts +154 -0
- package/src/ui/tokens/index.ts +57 -0
- package/src/ui/tokens/opacity.ts +107 -0
- package/src/ui/tokens/radius.ts +107 -0
- package/src/ui/tokens/shadows.ts +92 -0
- package/src/ui/tokens/tokens.factory.ts +124 -0
- package/src/ui/tokens/z-index.ts +113 -0
- package/src/ui/utils/index.ts +10 -0
- package/src/App.css +0 -42
- package/src/App.tsx +0 -35
- package/src/index.css +0 -68
- package/src/main.tsx +0 -15
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for theme operations.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Deep merge utility
|
|
9
|
+
*/
|
|
10
|
+
export function mergeDeep<T extends Record<string, unknown>>(
|
|
11
|
+
target: T,
|
|
12
|
+
...sources: Partial<T>[]
|
|
13
|
+
): T {
|
|
14
|
+
if (!sources.length) return target;
|
|
15
|
+
const source = sources.shift();
|
|
16
|
+
|
|
17
|
+
if (isObject(target) && isObject(source)) {
|
|
18
|
+
for (const key in source) {
|
|
19
|
+
if (isObject(source[key])) {
|
|
20
|
+
if (!target[key]) Object.assign(target, { [key]: {} });
|
|
21
|
+
mergeDeep(target[key], source[key]);
|
|
22
|
+
} else {
|
|
23
|
+
Object.assign(target, { [key]: source[key] });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return mergeDeep(target, ...sources);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Check if value is an object
|
|
33
|
+
*/
|
|
34
|
+
function isObject(item: unknown): item is Record<string, unknown> {
|
|
35
|
+
return item && typeof item === 'object' && !Array.isArray(item);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Convert CSS variable name to kebab-case
|
|
40
|
+
*/
|
|
41
|
+
export function toCSSVariableName(name: string): string {
|
|
42
|
+
return name
|
|
43
|
+
.replace(/([A-Z])/g, '-$1')
|
|
44
|
+
.toLowerCase()
|
|
45
|
+
.replace(/^-/, '');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Apply CSS variables to element
|
|
50
|
+
*/
|
|
51
|
+
export function applyCSSVariables(
|
|
52
|
+
element: HTMLElement,
|
|
53
|
+
variables: Record<string, string>
|
|
54
|
+
): void {
|
|
55
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
56
|
+
element.style.setProperty(key, value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Remove CSS variables from element
|
|
62
|
+
*/
|
|
63
|
+
export function removeCSSVariables(
|
|
64
|
+
element: HTMLElement,
|
|
65
|
+
variableNames: string[]
|
|
66
|
+
): void {
|
|
67
|
+
for (const name of variableNames) {
|
|
68
|
+
element.style.removeProperty(name);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Design Tokens System
|
|
2
|
+
|
|
3
|
+
Este documento descreve o sistema de design tokens do `react-design-system`, que fornece valores centralizados e consistentes para cores, espaçamento, tipografia, sombras, bordas, raios e breakpoints.
|
|
4
|
+
|
|
5
|
+
## Visão Geral
|
|
6
|
+
|
|
7
|
+
O sistema de tokens utiliza o **Factory Pattern** para criar tokens de forma type-safe e consistente. Todos os tokens seguem uma estrutura padronizada e podem ser acessados através de helper functions.
|
|
8
|
+
|
|
9
|
+
## Estrutura de Tokens
|
|
10
|
+
|
|
11
|
+
### 1. Colors (`colors.ts`)
|
|
12
|
+
|
|
13
|
+
Sistema de cores semânticas com suporte a temas claro e escuro.
|
|
14
|
+
|
|
15
|
+
**Roles**: `primary`, `secondary`, `success`, `warning`, `error`, `info`, `neutral`
|
|
16
|
+
|
|
17
|
+
**Shades**: `light`, `DEFAULT`, `dark`, `contrast`
|
|
18
|
+
|
|
19
|
+
**Uso:**
|
|
20
|
+
```typescript
|
|
21
|
+
import { getColorClass, COLOR_TOKENS } from './tokens/colors';
|
|
22
|
+
|
|
23
|
+
// Obter classe Tailwind
|
|
24
|
+
const bgClass = getColorClass('primary', 'DEFAULT', 'bg'); // 'bg-indigo-500'
|
|
25
|
+
const textClass = getColorClass('error', 'dark', 'text'); // 'text-red-600'
|
|
26
|
+
|
|
27
|
+
// Acessar token diretamente
|
|
28
|
+
const primaryColor = COLOR_TOKENS.primary.DEFAULT.hex; // '#6366f1'
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 2. Spacing (`spacing.ts`)
|
|
32
|
+
|
|
33
|
+
Sistema de espaçamento baseado em unidades de 4px.
|
|
34
|
+
|
|
35
|
+
**Escala**: `xs` (4px), `sm` (8px), `md` (12px), `base` (16px), `lg` (24px), `xl` (32px), `2xl` (40px), `3xl` (48px), `4xl` (64px), `5xl` (80px), `6xl` (96px)
|
|
36
|
+
|
|
37
|
+
**Uso:**
|
|
38
|
+
```typescript
|
|
39
|
+
import { getSpacingClass, SPACING_TOKENS } from './tokens/spacing';
|
|
40
|
+
|
|
41
|
+
// Obter classe Tailwind
|
|
42
|
+
const paddingClass = getSpacingClass('md', 'p'); // 'p-3'
|
|
43
|
+
const marginClass = getSpacingClass('lg', 'mx'); // 'mx-6'
|
|
44
|
+
|
|
45
|
+
// Acessar token diretamente
|
|
46
|
+
const mdSpacing = SPACING_TOKENS.md.px; // '12px'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 3. Typography (`typography.ts`)
|
|
50
|
+
|
|
51
|
+
Sistema de tipografia com tamanhos, pesos e line heights.
|
|
52
|
+
|
|
53
|
+
**Tamanhos**: `xs`, `sm`, `base`, `lg`, `xl`, `2xl`, `3xl`, `4xl`, `5xl`, `6xl`
|
|
54
|
+
|
|
55
|
+
**Pesos**: `light`, `normal`, `medium`, `semibold`, `bold`
|
|
56
|
+
|
|
57
|
+
**Line Heights**: `none`, `tight`, `snug`, `normal`, `relaxed`, `loose`
|
|
58
|
+
|
|
59
|
+
**Uso:**
|
|
60
|
+
```typescript
|
|
61
|
+
import { getTypographyClasses, TYPOGRAPHY_TOKENS } from './tokens/typography';
|
|
62
|
+
|
|
63
|
+
// Obter classes completas
|
|
64
|
+
const headingClasses = getTypographyClasses('h1'); // 'text-4xl leading-tight font-bold'
|
|
65
|
+
|
|
66
|
+
// Acessar token diretamente
|
|
67
|
+
const h1Size = TYPOGRAPHY_TOKENS.h1.fontSize.px; // '36px'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 4. Shadows (`shadows.ts`)
|
|
71
|
+
|
|
72
|
+
Sistema de sombras para elevação e profundidade.
|
|
73
|
+
|
|
74
|
+
**Tamanhos**: `none`, `sm`, `md`, `lg`, `xl`, `2xl`, `inner`
|
|
75
|
+
|
|
76
|
+
**Uso:**
|
|
77
|
+
```typescript
|
|
78
|
+
import { getShadowClass, SHADOW_TOKENS } from './tokens/shadows';
|
|
79
|
+
|
|
80
|
+
// Obter classe Tailwind
|
|
81
|
+
const shadowClass = getShadowClass('lg'); // 'shadow-lg'
|
|
82
|
+
|
|
83
|
+
// Acessar token diretamente
|
|
84
|
+
const lgShadow = SHADOW_TOKENS.lg.value; // '0 4px 6px -1px rgb(0 0 0 / 0.1)...'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 5. Radius (`radius.ts`)
|
|
88
|
+
|
|
89
|
+
Sistema de border radius para cantos arredondados.
|
|
90
|
+
|
|
91
|
+
**Tamanhos**: `none`, `sm` (2px), `md` (6px), `lg` (8px), `xl` (12px), `2xl` (16px), `3xl` (24px), `full`
|
|
92
|
+
|
|
93
|
+
**Uso:**
|
|
94
|
+
```typescript
|
|
95
|
+
import { getRadiusClass, RADIUS_TOKENS } from './tokens/radius';
|
|
96
|
+
|
|
97
|
+
// Obter classe Tailwind
|
|
98
|
+
const radiusClass = getRadiusClass('lg'); // 'rounded-lg'
|
|
99
|
+
|
|
100
|
+
// Acessar token diretamente
|
|
101
|
+
const lgRadius = RADIUS_TOKENS.lg.px; // '8px'
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 6. Borders (`borders.ts`)
|
|
105
|
+
|
|
106
|
+
Sistema de bordas para larguras e estilos.
|
|
107
|
+
|
|
108
|
+
**Larguras**: `none`, `thin` (1px), `base` (1px), `medium` (2px), `thick` (4px)
|
|
109
|
+
|
|
110
|
+
**Estilos**: `solid`, `dashed`, `dotted`
|
|
111
|
+
|
|
112
|
+
**Uso:**
|
|
113
|
+
```typescript
|
|
114
|
+
import { getBorderWidthClass, getBorderStyleClass, getBorderClasses, BORDER_TOKENS } from './tokens/borders';
|
|
115
|
+
|
|
116
|
+
// Obter classes
|
|
117
|
+
const widthClass = getBorderWidthClass('base'); // 'border'
|
|
118
|
+
const styleClass = getBorderStyleClass('solid'); // 'border-solid'
|
|
119
|
+
const fullBorder = getBorderClasses('base', 'solid'); // 'border border-solid'
|
|
120
|
+
|
|
121
|
+
// Acessar token diretamente
|
|
122
|
+
const baseBorder = BORDER_TOKENS.base.width.px; // '1px'
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### 7. Breakpoints (`breakpoints.ts`)
|
|
126
|
+
|
|
127
|
+
Sistema de breakpoints responsivos.
|
|
128
|
+
|
|
129
|
+
**Breakpoints**: `sm` (640px), `md` (768px), `lg` (1024px), `xl` (1280px), `2xl` (1536px)
|
|
130
|
+
|
|
131
|
+
**Uso:**
|
|
132
|
+
```typescript
|
|
133
|
+
import { BREAKPOINT_TOKENS } from './tokens/breakpoints';
|
|
134
|
+
|
|
135
|
+
// Acessar breakpoint
|
|
136
|
+
const mdBreakpoint = BREAKPOINT_TOKENS.md.value; // 768
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Tokens Factory
|
|
140
|
+
|
|
141
|
+
O `TokensFactory` fornece uma interface unificada para criar todos os tipos de tokens:
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
import { TokensFactory } from './tokens/tokens.factory';
|
|
145
|
+
|
|
146
|
+
const factory = new TokensFactory('light');
|
|
147
|
+
const tokenSet = factory.createTokenSet();
|
|
148
|
+
|
|
149
|
+
// Acessar todos os tokens
|
|
150
|
+
const spacing = tokenSet.spacing;
|
|
151
|
+
const colors = tokenSet.colors;
|
|
152
|
+
const shadows = tokenSet.shadows;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Padrões de Uso
|
|
156
|
+
|
|
157
|
+
### ✅ Usar Tokens
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { getColorClass } from './tokens/colors';
|
|
161
|
+
import { getSpacingClass } from './tokens/spacing';
|
|
162
|
+
import { getRadiusClass } from './tokens/radius';
|
|
163
|
+
import { getShadowClass } from './tokens/shadows';
|
|
164
|
+
|
|
165
|
+
const className = `
|
|
166
|
+
${getColorClass('primary', 'DEFAULT', 'bg')}
|
|
167
|
+
${getSpacingClass('md', 'p')}
|
|
168
|
+
${getRadiusClass('lg')}
|
|
169
|
+
${getShadowClass('md')}
|
|
170
|
+
`;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### ❌ Evitar Classes Hardcoded
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
// ❌ Evitar
|
|
177
|
+
const className = 'bg-indigo-500 p-3 rounded-lg shadow-md';
|
|
178
|
+
|
|
179
|
+
// ✅ Preferir
|
|
180
|
+
const className = `
|
|
181
|
+
${getColorClass('primary', 'DEFAULT', 'bg')}
|
|
182
|
+
${getSpacingClass('md', 'p')}
|
|
183
|
+
${getRadiusClass('lg')}
|
|
184
|
+
${getShadowClass('md')}
|
|
185
|
+
`;
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Migração de Classes Hardcoded
|
|
189
|
+
|
|
190
|
+
Ao refatorar componentes, substitua classes hardcoded por tokens:
|
|
191
|
+
|
|
192
|
+
1. **Cores**: `bg-gray-500` → `getColorClass('neutral', 'DEFAULT', 'bg')`
|
|
193
|
+
2. **Espaçamento**: `p-4` → `getSpacingClass('base', 'p')`
|
|
194
|
+
3. **Sombras**: `shadow-lg` → `getShadowClass('lg')`
|
|
195
|
+
4. **Radius**: `rounded-md` → `getRadiusClass('md')`
|
|
196
|
+
5. **Bordas**: `border-2` → `getBorderWidthClass('medium')`
|
|
197
|
+
|
|
198
|
+
## Benefícios
|
|
199
|
+
|
|
200
|
+
1. **Consistência**: Valores centralizados garantem consistência visual
|
|
201
|
+
2. **Manutenibilidade**: Mudanças em um lugar refletem em todo o sistema
|
|
202
|
+
3. **Type Safety**: TypeScript garante uso correto dos tokens
|
|
203
|
+
4. **Temas**: Suporte fácil a temas claro/escuro
|
|
204
|
+
5. **Documentação**: Tokens são auto-documentados com descrições
|
|
205
|
+
|
|
206
|
+
## Próximos Passos
|
|
207
|
+
|
|
208
|
+
- [ ] Auditar todos os componentes para uso de tokens
|
|
209
|
+
- [ ] Substituir classes hardcoded por tokens
|
|
210
|
+
- [ ] Adicionar tokens para animações e transições
|
|
211
|
+
- [ ] Criar tokens para z-index layers
|
|
212
|
+
- [ ] Documentar tokens no Storybook
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Visualization Components
|
|
3
|
+
*
|
|
4
|
+
* React components for visualizing design tokens in Storybook
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import {
|
|
9
|
+
COLOR_TOKENS_LIGHT,
|
|
10
|
+
SPACING_TOKENS,
|
|
11
|
+
SHADOW_TOKENS,
|
|
12
|
+
RADIUS_TOKENS,
|
|
13
|
+
ANIMATION_TOKENS,
|
|
14
|
+
Z_INDEX_TOKENS,
|
|
15
|
+
OPACITY_TOKENS,
|
|
16
|
+
GRADIENT_TOKENS,
|
|
17
|
+
type ColorRole,
|
|
18
|
+
} from './index';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Color Palette Visualization
|
|
22
|
+
*/
|
|
23
|
+
export function ColorPalette() {
|
|
24
|
+
const colorRoles: ColorRole[] = ['primary', 'secondary', 'success', 'warning', 'error', 'info', 'neutral'];
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div className="space-y-6">
|
|
28
|
+
{colorRoles.map(role => {
|
|
29
|
+
const color = COLOR_TOKENS_LIGHT[role];
|
|
30
|
+
return (
|
|
31
|
+
<div key={role} className="space-y-2">
|
|
32
|
+
<h3 className="text-sm font-semibold text-gray-700 capitalize">{role}</h3>
|
|
33
|
+
<div className="flex gap-2">
|
|
34
|
+
<ColorSwatch
|
|
35
|
+
label="light"
|
|
36
|
+
color={color.light.hex}
|
|
37
|
+
textColor={color.light.contrast || '#000'}
|
|
38
|
+
/>
|
|
39
|
+
<ColorSwatch
|
|
40
|
+
label="DEFAULT"
|
|
41
|
+
color={color.DEFAULT.hex}
|
|
42
|
+
textColor={color.DEFAULT.contrast || '#fff'}
|
|
43
|
+
/>
|
|
44
|
+
<ColorSwatch
|
|
45
|
+
label="dark"
|
|
46
|
+
color={color.dark.hex}
|
|
47
|
+
textColor={color.dark.contrast || '#fff'}
|
|
48
|
+
/>
|
|
49
|
+
<ColorSwatch
|
|
50
|
+
label="contrast"
|
|
51
|
+
color={color.contrast.hex}
|
|
52
|
+
textColor={color.DEFAULT.hex}
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
55
|
+
<div className="text-xs text-gray-500 space-y-1">
|
|
56
|
+
<div>Light: {color.light.hex} ({color.light.tailwind})</div>
|
|
57
|
+
<div>Default: {color.DEFAULT.hex} ({color.DEFAULT.tailwind})</div>
|
|
58
|
+
<div>Dark: {color.dark.hex} ({color.dark.tailwind})</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
})}
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function ColorSwatch({ label, color, textColor }: { label: string; color: string; textColor: string }) {
|
|
68
|
+
return (
|
|
69
|
+
<div className="flex flex-col items-center gap-1">
|
|
70
|
+
<div
|
|
71
|
+
className="w-20 h-20 rounded-md border border-gray-200 flex items-center justify-center text-xs font-medium"
|
|
72
|
+
style={{ backgroundColor: color, color: textColor }}
|
|
73
|
+
>
|
|
74
|
+
{label}
|
|
75
|
+
</div>
|
|
76
|
+
<span className="text-xs text-gray-600">{label}</span>
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Spacing Reference Visualization
|
|
83
|
+
*/
|
|
84
|
+
export function SpacingReference() {
|
|
85
|
+
const spacingEntries = Object.entries(SPACING_TOKENS);
|
|
86
|
+
|
|
87
|
+
return (
|
|
88
|
+
<div className="space-y-4">
|
|
89
|
+
{spacingEntries.map(([key, token]) => (
|
|
90
|
+
<div key={key} className="flex items-center gap-4">
|
|
91
|
+
<div className="w-32 text-sm font-medium text-gray-700">{key}</div>
|
|
92
|
+
<div className="flex-1 flex items-center gap-2">
|
|
93
|
+
<div
|
|
94
|
+
className="bg-indigo-500 h-4"
|
|
95
|
+
style={{ width: token.px }}
|
|
96
|
+
/>
|
|
97
|
+
<span className="text-xs text-gray-600">{token.px} ({token.rem})</span>
|
|
98
|
+
</div>
|
|
99
|
+
<div className="w-24 text-xs text-gray-500 font-mono">{token.tailwind}</div>
|
|
100
|
+
</div>
|
|
101
|
+
))}
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Typography Reference Visualization
|
|
108
|
+
*/
|
|
109
|
+
export function TypographyReference() {
|
|
110
|
+
const typographyEntries = [
|
|
111
|
+
{ name: 'h1', size: '4xl', weight: 'bold', lineHeight: 'tight' },
|
|
112
|
+
{ name: 'h2', size: '3xl', weight: 'bold', lineHeight: 'tight' },
|
|
113
|
+
{ name: 'h3', size: '2xl', weight: 'semibold', lineHeight: 'snug' },
|
|
114
|
+
{ name: 'body', size: 'base', weight: 'normal', lineHeight: 'relaxed' },
|
|
115
|
+
{ name: 'label', size: 'sm', weight: 'medium', lineHeight: 'normal' },
|
|
116
|
+
{ name: 'caption', size: 'xs', weight: 'normal', lineHeight: 'normal' },
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<div className="space-y-4">
|
|
121
|
+
{typographyEntries.map(({ name, size, weight, lineHeight }) => (
|
|
122
|
+
<div key={name} className="border-b border-gray-200 pb-4">
|
|
123
|
+
<div className="flex items-baseline gap-4">
|
|
124
|
+
<div className="w-24 text-sm font-medium text-gray-700">{name}</div>
|
|
125
|
+
<div className={`text-${size} font-${weight} leading-${lineHeight}`}>
|
|
126
|
+
The quick brown fox jumps over the lazy dog
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
<div className="mt-2 text-xs text-gray-500">
|
|
130
|
+
Size: {size} | Weight: {weight} | Line Height: {lineHeight}
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
))}
|
|
134
|
+
</div>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Shadow Reference Visualization
|
|
140
|
+
*/
|
|
141
|
+
export function ShadowReference() {
|
|
142
|
+
const shadowEntries = Object.entries(SHADOW_TOKENS);
|
|
143
|
+
|
|
144
|
+
return (
|
|
145
|
+
<div className="grid grid-cols-2 gap-4">
|
|
146
|
+
{shadowEntries.map(([key, token]) => (
|
|
147
|
+
<div key={key} className="space-y-2">
|
|
148
|
+
<div className="text-sm font-medium text-gray-700">{key}</div>
|
|
149
|
+
<div
|
|
150
|
+
className="w-full h-20 bg-white rounded-md flex items-center justify-center"
|
|
151
|
+
style={{ boxShadow: token.value }}
|
|
152
|
+
>
|
|
153
|
+
<span className="text-xs text-gray-600">{token.description}</span>
|
|
154
|
+
</div>
|
|
155
|
+
<div className="text-xs text-gray-500 font-mono">{token.tailwind}</div>
|
|
156
|
+
</div>
|
|
157
|
+
))}
|
|
158
|
+
</div>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Radius Reference Visualization
|
|
164
|
+
*/
|
|
165
|
+
export function RadiusReference() {
|
|
166
|
+
const radiusEntries = Object.entries(RADIUS_TOKENS);
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<div className="grid grid-cols-4 gap-4">
|
|
170
|
+
{radiusEntries.map(([key, token]) => (
|
|
171
|
+
<div key={key} className="space-y-2">
|
|
172
|
+
<div className="text-sm font-medium text-gray-700">{key}</div>
|
|
173
|
+
<div
|
|
174
|
+
className="w-20 h-20 bg-indigo-500"
|
|
175
|
+
style={{ borderRadius: token.px }}
|
|
176
|
+
/>
|
|
177
|
+
<div className="text-xs text-gray-500">{token.px}</div>
|
|
178
|
+
<div className="text-xs text-gray-500 font-mono">{token.tailwind}</div>
|
|
179
|
+
</div>
|
|
180
|
+
))}
|
|
181
|
+
</div>
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Animation Reference Visualization
|
|
187
|
+
*/
|
|
188
|
+
export function AnimationReference() {
|
|
189
|
+
const animationEntries = Object.entries(ANIMATION_TOKENS);
|
|
190
|
+
|
|
191
|
+
return (
|
|
192
|
+
<div className="space-y-4">
|
|
193
|
+
{animationEntries.map(([key, token]) => (
|
|
194
|
+
<div key={key} className="border-b border-gray-200 pb-4">
|
|
195
|
+
<div className="text-sm font-medium text-gray-700 mb-2">{key}</div>
|
|
196
|
+
<div className="space-y-1 text-xs text-gray-600">
|
|
197
|
+
<div>Duration: {token.duration.value} ({token.duration.ms}ms)</div>
|
|
198
|
+
<div>Easing: {token.easing.description}</div>
|
|
199
|
+
<div className="font-mono">{token.duration.tailwind} {token.easing.tailwind}</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
))}
|
|
203
|
+
</div>
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Z-Index Reference Visualization
|
|
209
|
+
*/
|
|
210
|
+
export function ZIndexReference() {
|
|
211
|
+
const zIndexEntries = Object.entries(Z_INDEX_TOKENS).sort((a, b) => b[1].value - a[1].value);
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
<div className="space-y-2">
|
|
215
|
+
{zIndexEntries.map(([key, token]) => (
|
|
216
|
+
<div key={key} className="flex items-center gap-4 border-b border-gray-200 pb-2">
|
|
217
|
+
<div className="w-32 text-sm font-medium text-gray-700">{key}</div>
|
|
218
|
+
<div className="flex-1">
|
|
219
|
+
<div className="text-xs text-gray-600">{token.description}</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div className="w-24 text-xs text-gray-500 font-mono">{token.tailwind}</div>
|
|
222
|
+
<div className="w-16 text-xs text-gray-500 text-right">{token.value}</div>
|
|
223
|
+
</div>
|
|
224
|
+
))}
|
|
225
|
+
</div>
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Opacity Reference Visualization
|
|
231
|
+
*/
|
|
232
|
+
export function OpacityReference() {
|
|
233
|
+
const opacityEntries = Object.entries(OPACITY_TOKENS);
|
|
234
|
+
|
|
235
|
+
return (
|
|
236
|
+
<div className="grid grid-cols-5 gap-4">
|
|
237
|
+
{opacityEntries.map(([key, token]) => (
|
|
238
|
+
<div key={key} className="space-y-2">
|
|
239
|
+
<div className="text-sm font-medium text-gray-700">{key}</div>
|
|
240
|
+
<div
|
|
241
|
+
className="w-full h-16 bg-indigo-500 rounded-md"
|
|
242
|
+
style={{ opacity: token.decimal }}
|
|
243
|
+
/>
|
|
244
|
+
<div className="text-xs text-gray-500">{token.value}%</div>
|
|
245
|
+
<div className="text-xs text-gray-500 font-mono">{token.tailwind}</div>
|
|
246
|
+
</div>
|
|
247
|
+
))}
|
|
248
|
+
</div>
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Gradient Reference Visualization
|
|
254
|
+
*/
|
|
255
|
+
export function GradientReference() {
|
|
256
|
+
const gradientEntries = Object.entries(GRADIENT_TOKENS);
|
|
257
|
+
|
|
258
|
+
return (
|
|
259
|
+
<div className="grid grid-cols-2 gap-4">
|
|
260
|
+
{gradientEntries.map(([key, token]) => (
|
|
261
|
+
<div key={key} className="space-y-2">
|
|
262
|
+
<div className="text-sm font-medium text-gray-700">{key}</div>
|
|
263
|
+
<div
|
|
264
|
+
className="w-full h-20 rounded-md"
|
|
265
|
+
style={{ background: token.value }}
|
|
266
|
+
/>
|
|
267
|
+
<div className="text-xs text-gray-500">{token.description}</div>
|
|
268
|
+
<div className="text-xs text-gray-500 font-mono break-all">{token.tailwind}</div>
|
|
269
|
+
</div>
|
|
270
|
+
))}
|
|
271
|
+
</div>
|
|
272
|
+
);
|
|
273
|
+
}
|