@react-fabric/core 1.0.0-beta.9 → 1.0.1
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/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
- package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
- package/css/components/_animations.css +52 -0
- package/css/components/_avatar.css +89 -0
- package/css/components/_button.css +218 -0
- package/css/components/_buttonGroup.css +62 -0
- package/css/components/_callout.css +32 -0
- package/css/components/_card.css +167 -0
- package/css/components/_chip.css +125 -0
- package/css/components/_collapsable.css +32 -0
- package/{src/overlays/message/Message.module.css → css/components/_divider.css} +11 -10
- package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +3 -2
- package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +15 -9
- package/css/components/_media.css +102 -0
- package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
- package/{src/components/meter/Meter.module.css → css/components/_meter.css} +15 -20
- package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +9 -9
- package/{src/components/panel/Panel.module.css → css/components/_panel.css} +19 -19
- package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
- package/css/components/_sonner.css +431 -0
- package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +125 -85
- package/css/components/_titlebar.css +48 -0
- package/css/components/index.css +47 -0
- package/css/core/_aside.css +176 -0
- package/css/core/_content.css +31 -0
- package/css/core/_errorboundary.css +55 -0
- package/css/core/_responsive.css +45 -0
- package/css/core/_typography.css +69 -0
- package/css/core/_viewport.css +33 -0
- package/{src/hooks/useClientService.tsx → css/core/index.css} +7 -7
- package/css/reset/_gradients.css +36 -33
- package/css/reset/_reset.css +206 -300
- package/css/reset/_text.css +31 -61
- package/css/reset/_theme.css +467 -81
- package/css/reset/index.css +23 -21
- package/css/styles.css +30 -23
- package/css/theme/_colors.css +445 -0
- package/css/theme/_utilities.css +528 -0
- package/css/theme/_variants.css +128 -0
- package/css/theme/index.css +55 -0
- package/dist/cjs/components/actionLabel/ActionLabel.js +25 -12
- package/dist/cjs/{overlays → components}/alert/Alert.js +76 -53
- package/dist/cjs/components/animations/Indicator.js +72 -0
- package/dist/cjs/components/animations/Loader.js +77 -0
- package/dist/cjs/components/animations/LoadingBars.js +37 -0
- package/dist/cjs/components/animations/LoadingLine.js +59 -0
- package/dist/cjs/components/animations/LoadingSpinner.js +37 -0
- package/dist/cjs/components/animations/Skeleton.js +88 -0
- package/dist/cjs/components/avatar/Avatar.js +41 -20
- package/dist/cjs/components/avatar/AvatarGroup.js +37 -16
- package/dist/cjs/components/badge/Badge.js +90 -68
- package/dist/cjs/components/button/Button.js +198 -136
- package/dist/cjs/components/button/ButtonGroup.js +86 -21
- package/dist/cjs/components/button/ConfirmButton.js +55 -41
- package/dist/cjs/components/button/ToggleButtonGroup.js +84 -32
- package/dist/cjs/components/callout/Callout.js +56 -25
- package/dist/cjs/components/card/Card.js +90 -42
- package/dist/cjs/components/card/CardCover.js +38 -27
- package/dist/cjs/components/card/FlipContent.js +47 -0
- package/dist/cjs/components/chip/Chip.js +80 -37
- package/dist/cjs/components/collapsable/Collapsable.js +62 -31
- package/dist/cjs/components/divider/Divider.js +58 -24
- package/dist/cjs/components/dropdown/Dropdown.js +92 -45
- package/dist/cjs/components/dropdown/DropdownTool.js +6 -7
- package/dist/cjs/components/effect/GlassEffect.js +259 -0
- package/dist/cjs/components/effect/MatteEffect.js +127 -0
- package/dist/cjs/components/effect/StyleEffect.js +43 -0
- package/dist/cjs/components/empty/EmptyContent.js +37 -49
- package/dist/cjs/components/flyout/Flyout.js +170 -0
- package/dist/cjs/components/hotkey/HotKey.js +42 -0
- package/dist/cjs/components/icon/Icon.js +81 -80
- package/dist/cjs/components/media/Media.js +154 -77
- package/dist/cjs/components/menu/ContextMenu.js +45 -20
- package/dist/cjs/components/menu/Menu.js +98 -38
- package/dist/cjs/components/menu/MenuItem.js +102 -74
- package/dist/cjs/components/meter/Meter.js +35 -12
- package/dist/cjs/components/modal/Modal.js +152 -0
- package/dist/cjs/components/navigator/Navigator.js +81 -36
- package/dist/cjs/components/panel/Panel.js +115 -60
- package/dist/cjs/components/panel/PanelGroup.js +42 -16
- package/dist/cjs/components/panel/PanelStack.js +47 -16
- package/dist/cjs/components/pillbox/Pillbox.js +118 -0
- package/dist/cjs/components/progress/ProgressBar.js +30 -14
- package/dist/cjs/components/progress/ProgressCircle.js +27 -11
- package/dist/cjs/components/tabpanel/Tab.js +53 -37
- package/dist/cjs/components/tabpanel/TabPanel.js +74 -28
- package/dist/cjs/components/titlebar/Titlebar.js +52 -0
- package/dist/cjs/components/tooltip/Tooltip.js +180 -0
- package/dist/cjs/context/Global.js +159 -80
- package/dist/cjs/context/ModalManager.js +60 -0
- package/dist/cjs/context/context.js +43 -0
- package/dist/cjs/core/areaToggle/AreaToggle.js +41 -0
- package/dist/cjs/core/aside/Aside.js +178 -83
- package/dist/cjs/core/boundary/ErrorBoundary.js +37 -34
- package/dist/cjs/core/boundary/ErrorIcon.js +32 -19
- package/dist/cjs/core/content/Content.js +26 -37
- package/dist/cjs/core/headfoot/HeadFoot.js +133 -35
- package/dist/cjs/core/layout/Layout.js +28 -0
- package/dist/cjs/core/responsive/Responsive.js +62 -26
- package/dist/cjs/core/theme/ThemeProvider.js +35 -41
- package/dist/cjs/core/viewport/Viewport.js +26 -22
- package/dist/cjs/hooks/useClientService.js +39 -18
- package/dist/cjs/hooks/useContextMenu.js +103 -0
- package/dist/cjs/hooks/useControlledValue.js +13 -7
- package/dist/cjs/hooks/useDebounce.js +37 -21
- package/dist/cjs/hooks/useEffectDebugger.js +79 -60
- package/dist/cjs/hooks/useIsDark.js +34 -26
- package/dist/cjs/hooks/useIsRtl.js +13 -3
- package/dist/cjs/hooks/useNavigator.js +12 -9
- package/dist/cjs/hooks/useNotificationService.js +199 -0
- package/dist/cjs/hooks/useOverlayService.js +82 -41
- package/dist/cjs/hooks/usePropState.js +41 -0
- package/dist/cjs/hooks/usePropToggle.js +32 -26
- package/dist/cjs/hooks/useResize.js +47 -38
- package/dist/cjs/hooks/useResizeObserver.js +26 -7
- package/dist/cjs/hooks/useStorage.js +29 -16
- package/dist/cjs/i18n/index.js +25 -23
- package/dist/cjs/index.js +142 -94
- package/dist/cjs/typography/Abbr.js +43 -20
- package/dist/cjs/typography/Anchor.js +39 -0
- package/dist/cjs/typography/Copy.js +28 -28
- package/dist/cjs/typography/Kbd.js +43 -0
- package/dist/cjs/typography/Mark.js +34 -17
- package/dist/cjs/typography/Text.js +36 -54
- package/dist/cjs/typography/Title.js +17 -40
- package/dist/cjs/utils/calculateDimensions.js +38 -23
- package/dist/cjs/utils/cloneElement.js +64 -0
- package/dist/cjs/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
- package/dist/cjs/utils/getColor.js +42 -36
- package/dist/cjs/utils/getIconProps.js +63 -0
- package/dist/cjs/utils/getTooltipProps.js +66 -0
- package/dist/cjs/utils/nodeCheck.js +4 -4
- package/dist/esm/components/actionLabel/ActionLabel.js +25 -12
- package/dist/esm/{overlays → components}/alert/Alert.js +73 -50
- package/dist/esm/components/animations/Indicator.js +72 -0
- package/dist/esm/components/animations/Loader.js +77 -0
- package/dist/esm/components/animations/LoadingBars.js +37 -0
- package/dist/esm/components/animations/LoadingLine.js +59 -0
- package/dist/esm/components/animations/LoadingSpinner.js +37 -0
- package/dist/esm/components/animations/Skeleton.js +88 -0
- package/dist/esm/components/avatar/Avatar.js +42 -21
- package/dist/esm/components/avatar/AvatarGroup.js +37 -16
- package/dist/esm/components/badge/Badge.js +93 -70
- package/dist/esm/components/button/Button.js +199 -137
- package/dist/esm/components/button/ButtonGroup.js +87 -22
- package/dist/esm/components/button/ConfirmButton.js +58 -44
- package/dist/esm/components/button/ToggleButtonGroup.js +86 -34
- package/dist/esm/components/callout/Callout.js +56 -25
- package/dist/esm/components/card/Card.js +92 -44
- package/dist/esm/components/card/CardCover.js +38 -27
- package/dist/esm/components/card/FlipContent.js +47 -0
- package/dist/esm/components/chip/Chip.js +81 -38
- package/dist/esm/components/collapsable/Collapsable.js +63 -32
- package/dist/esm/components/divider/Divider.js +59 -25
- package/dist/esm/components/dropdown/Dropdown.js +95 -48
- package/dist/esm/components/dropdown/DropdownTool.js +6 -7
- package/dist/esm/components/effect/GlassEffect.js +259 -0
- package/dist/esm/components/effect/MatteEffect.js +127 -0
- package/dist/esm/components/effect/StyleEffect.js +43 -0
- package/dist/esm/components/empty/EmptyContent.js +38 -50
- package/dist/esm/components/flyout/Flyout.js +170 -0
- package/dist/esm/components/hotkey/HotKey.js +42 -0
- package/dist/esm/components/icon/Icon.js +83 -82
- package/dist/esm/components/media/Media.js +156 -79
- package/dist/esm/components/menu/ContextMenu.js +46 -21
- package/dist/esm/components/menu/Menu.js +101 -41
- package/dist/esm/components/menu/MenuItem.js +98 -70
- package/dist/esm/components/meter/Meter.js +36 -13
- package/dist/esm/components/modal/Modal.js +152 -0
- package/dist/esm/components/navigator/Navigator.js +81 -36
- package/dist/esm/components/panel/Panel.js +117 -62
- package/dist/esm/components/panel/PanelGroup.js +43 -17
- package/dist/esm/components/panel/PanelStack.js +48 -17
- package/dist/esm/components/pillbox/Pillbox.js +118 -0
- package/dist/esm/components/progress/ProgressBar.js +31 -15
- package/dist/esm/components/progress/ProgressCircle.js +28 -12
- package/dist/esm/components/tabpanel/Tab.js +54 -38
- package/dist/esm/components/tabpanel/TabPanel.js +75 -29
- package/dist/esm/components/titlebar/Titlebar.js +52 -0
- package/dist/esm/components/tooltip/Tooltip.js +180 -0
- package/dist/esm/context/Global.js +161 -78
- package/dist/esm/context/ModalManager.js +60 -0
- package/dist/esm/context/context.js +40 -0
- package/dist/esm/core/areaToggle/AreaToggle.js +41 -0
- package/dist/esm/core/aside/Aside.js +179 -84
- package/dist/esm/core/boundary/ErrorBoundary.js +38 -35
- package/dist/esm/core/boundary/ErrorIcon.js +32 -19
- package/dist/esm/core/content/Content.js +26 -37
- package/dist/esm/core/headfoot/HeadFoot.js +134 -36
- package/dist/esm/core/layout/Layout.js +28 -0
- package/dist/esm/core/responsive/Responsive.js +62 -26
- package/dist/esm/core/theme/ThemeProvider.js +36 -42
- package/dist/esm/core/viewport/Viewport.js +26 -22
- package/dist/esm/hooks/useClientService.js +39 -18
- package/dist/esm/hooks/useContextMenu.js +103 -0
- package/dist/esm/hooks/useControlledValue.js +14 -8
- package/dist/esm/hooks/useDebounce.js +37 -21
- package/dist/esm/hooks/useEffectDebugger.js +81 -62
- package/dist/esm/hooks/useIsDark.js +34 -26
- package/dist/esm/hooks/useIsRtl.js +13 -3
- package/dist/esm/hooks/useNavigator.js +13 -10
- package/dist/esm/hooks/useNotificationService.js +199 -0
- package/dist/esm/hooks/useOverlayService.js +83 -42
- package/dist/esm/hooks/usePropState.js +40 -0
- package/dist/esm/hooks/usePropToggle.js +33 -27
- package/dist/esm/hooks/useResize.js +48 -39
- package/dist/esm/hooks/useResizeObserver.js +27 -8
- package/dist/esm/hooks/useStorage.js +30 -17
- package/dist/esm/i18n/index.js +23 -21
- package/dist/esm/index.js +87 -44
- package/dist/esm/typography/Abbr.js +45 -22
- package/dist/esm/typography/Anchor.js +39 -0
- package/dist/esm/typography/Copy.js +28 -28
- package/dist/esm/typography/Kbd.js +43 -0
- package/dist/esm/typography/Mark.js +35 -18
- package/dist/esm/typography/Text.js +39 -57
- package/dist/esm/typography/Title.js +17 -40
- package/dist/esm/utils/calculateDimensions.js +38 -23
- package/dist/esm/utils/cloneElement.js +64 -0
- package/dist/esm/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
- package/dist/esm/utils/getColor.js +43 -34
- package/dist/esm/utils/getIconProps.js +63 -0
- package/dist/esm/utils/getTooltipProps.js +66 -0
- package/dist/esm/utils/nodeCheck.js +4 -4
- package/dist/types/components/actionLabel/ActionLabel.d.ts +20 -7
- package/dist/types/components/alert/Alert.d.ts +74 -0
- package/dist/types/components/animations/Indicator.d.ts +57 -0
- package/dist/types/components/animations/Loader.d.ts +65 -0
- package/dist/types/components/animations/LoadingBars.d.ts +61 -0
- package/dist/types/components/animations/LoadingLine.d.ts +43 -0
- package/dist/types/components/animations/LoadingSpinner.d.ts +61 -0
- package/dist/types/components/animations/Skeleton.d.ts +61 -0
- package/dist/types/components/avatar/Avatar.d.ts +70 -19
- package/dist/types/components/avatar/AvatarGroup.d.ts +51 -14
- package/dist/types/components/badge/Badge.d.ts +64 -14
- package/dist/types/components/button/Button.d.ts +72 -55
- package/dist/types/components/button/ButtonGroup.d.ts +86 -24
- package/dist/types/components/button/ConfirmButton.d.ts +21 -7
- package/dist/types/components/button/ToggleButtonGroup.d.ts +88 -44
- package/dist/types/components/callout/Callout.d.ts +58 -7
- package/dist/types/components/card/Card.d.ts +66 -25
- package/dist/types/components/card/CardCover.d.ts +52 -7
- package/dist/types/components/card/FlipContent.d.ts +50 -0
- package/dist/types/components/chip/Chip.d.ts +72 -20
- package/dist/types/components/collapsable/Collapsable.d.ts +55 -15
- package/dist/types/components/divider/Divider.d.ts +25 -8
- package/dist/types/components/dropdown/Dropdown.d.ts +42 -9
- package/dist/types/components/dropdown/DropdownTool.d.ts +22 -4
- package/dist/types/components/effect/GlassEffect.d.ts +5 -0
- package/dist/types/components/effect/MatteEffect.d.ts +40 -0
- package/dist/types/components/effect/StyleEffect.d.ts +27 -0
- package/dist/types/components/empty/EmptyContent.d.ts +53 -9
- package/dist/types/components/flyout/Flyout.d.ts +60 -0
- package/dist/types/components/hotkey/HotKey.d.ts +41 -0
- package/dist/types/components/icon/Icon.d.ts +74 -24
- package/dist/types/components/media/Media.d.ts +72 -4
- package/dist/types/components/menu/ContextMenu.d.ts +22 -5
- package/dist/types/components/menu/Menu.d.ts +26 -2
- package/dist/types/components/menu/MenuItem.d.ts +19 -4
- package/dist/types/components/menu/types.d.ts +23 -14
- package/dist/types/components/meter/Meter.d.ts +23 -3
- package/dist/types/components/modal/Modal.d.ts +52 -0
- package/dist/types/components/navigator/Navigator.d.ts +30 -4
- package/dist/types/components/panel/Panel.d.ts +43 -23
- package/dist/types/components/panel/PanelGroup.d.ts +22 -3
- package/dist/types/components/panel/PanelStack.d.ts +28 -2
- package/dist/types/components/pillbox/Pillbox.d.ts +95 -0
- package/dist/types/components/progress/ProgressBar.d.ts +19 -4
- package/dist/types/components/progress/ProgressCircle.d.ts +18 -4
- package/dist/types/components/tabpanel/Tab.d.ts +42 -10
- package/dist/types/components/tabpanel/TabPanel.d.ts +47 -7
- package/dist/types/components/titlebar/Titlebar.d.ts +54 -0
- package/dist/types/components/tooltip/Tooltip.d.ts +76 -0
- package/dist/types/context/Global.d.ts +39 -69
- package/dist/types/context/ModalManager.d.ts +30 -0
- package/dist/types/context/context.d.ts +107 -0
- package/dist/types/core/areaToggle/AreaToggle.d.ts +33 -0
- package/dist/types/core/aside/Aside.d.ts +75 -20
- package/dist/types/core/boundary/ErrorBoundary.d.ts +43 -4
- package/dist/types/core/boundary/ErrorIcon.d.ts +38 -1
- package/dist/types/core/content/Content.d.ts +38 -6
- package/dist/types/core/headfoot/HeadFoot.d.ts +48 -14
- package/dist/types/core/layout/Layout.d.ts +38 -0
- package/dist/types/core/responsive/Responsive.d.ts +45 -15
- package/dist/types/core/theme/ThemeProvider.d.ts +35 -11
- package/dist/types/core/viewport/Viewport.d.ts +27 -3
- package/dist/types/hooks/useClientService.d.ts +43 -1
- package/dist/types/hooks/useContextMenu.d.ts +10 -0
- package/dist/types/hooks/useControlledValue.d.ts +28 -4
- package/dist/types/hooks/useDebounce.d.ts +38 -2
- package/dist/types/hooks/useEffectDebugger.d.ts +73 -4
- package/dist/types/hooks/useIsDark.d.ts +6 -0
- package/dist/types/hooks/useIsRtl.d.ts +35 -1
- package/dist/types/hooks/useNavigator.d.ts +37 -2
- package/dist/types/hooks/useNotificationService.d.ts +60 -0
- package/dist/types/hooks/useOverlayService.d.ts +28 -8
- package/dist/types/hooks/usePropState.d.ts +26 -0
- package/dist/types/hooks/usePropToggle.d.ts +41 -7
- package/dist/types/hooks/useResize.d.ts +46 -4
- package/dist/types/hooks/useResizeObserver.d.ts +45 -3
- package/dist/types/hooks/useStorage.d.ts +32 -2
- package/dist/types/i18n/index.d.ts +27 -3
- package/dist/types/index.d.ts +106 -18
- package/dist/types/types/colors.d.ts +29 -0
- package/dist/types/types/index.d.ts +216 -76
- package/dist/types/typography/Abbr.d.ts +51 -6
- package/dist/types/typography/Anchor.d.ts +41 -0
- package/dist/types/typography/Copy.d.ts +36 -2
- package/dist/types/typography/Kbd.d.ts +40 -0
- package/dist/types/typography/Mark.d.ts +44 -7
- package/dist/types/typography/Text.d.ts +40 -24
- package/dist/types/typography/Title.d.ts +37 -26
- package/dist/types/typography/types.d.ts +32 -0
- package/dist/types/utils/calculateDimensions.d.ts +50 -6
- package/dist/types/utils/cloneElement.d.ts +41 -0
- package/dist/types/utils/getBadgeProps.d.ts +16 -0
- package/dist/types/utils/getColor.d.ts +43 -4
- package/dist/types/utils/getIconProps.d.ts +45 -0
- package/dist/types/utils/getTooltipProps.d.ts +47 -0
- package/dist/types/utils/index.d.ts +28 -0
- package/dist/types/utils/nodeCheck.d.ts +1 -2
- package/package.json +29 -21
- package/src/components/actionLabel/ActionLabel.tsx +28 -39
- package/src/components/alert/Alert.tsx +261 -0
- package/src/components/animations/Indicator.tsx +76 -0
- package/src/components/animations/Loader.tsx +89 -0
- package/src/components/animations/LoadingBars.tsx +70 -0
- package/src/components/animations/LoadingLine.tsx +51 -0
- package/src/components/animations/LoadingSpinner.tsx +70 -0
- package/src/components/animations/Skeleton.tsx +100 -0
- package/src/components/avatar/Avatar.tsx +89 -70
- package/src/components/avatar/AvatarGroup.tsx +65 -74
- package/src/components/badge/Badge.tsx +141 -108
- package/src/components/button/Button.tsx +223 -238
- package/src/components/button/ButtonGroup.tsx +117 -77
- package/src/components/button/ConfirmButton.tsx +60 -90
- package/src/components/button/ToggleButtonGroup.tsx +134 -120
- package/src/components/callout/Callout.tsx +81 -59
- package/src/components/card/Card.tsx +131 -113
- package/src/components/card/CardCover.tsx +61 -61
- package/src/components/card/FlipContent.tsx +78 -0
- package/src/components/chip/Chip.tsx +139 -99
- package/src/components/collapsable/Collapsable.tsx +79 -77
- package/src/components/divider/Divider.tsx +74 -53
- package/src/components/dropdown/Dropdown.tsx +109 -106
- package/src/components/dropdown/DropdownTool.tsx +29 -12
- package/src/components/effect/GlassEffect.tsx +221 -0
- package/src/components/effect/MatteEffect.tsx +99 -0
- package/src/components/effect/StyleEffect.tsx +36 -0
- package/src/components/empty/EmptyContent.tsx +60 -99
- package/src/components/flyout/Flyout.tsx +257 -0
- package/src/components/hotkey/HotKey.tsx +57 -0
- package/src/components/icon/Icon.tsx +131 -130
- package/src/components/media/Media.tsx +184 -154
- package/src/components/menu/ContextMenu.tsx +56 -39
- package/src/components/menu/Menu.tsx +121 -84
- package/src/components/menu/MenuItem.tsx +87 -69
- package/src/components/menu/types.ts +23 -28
- package/src/components/meter/Meter.tsx +34 -17
- package/src/components/modal/Modal.tsx +226 -0
- package/src/components/navigator/Navigator.tsx +93 -38
- package/src/components/panel/Panel.tsx +123 -131
- package/src/components/panel/PanelGroup.tsx +49 -43
- package/src/components/panel/PanelStack.tsx +63 -62
- package/src/components/pillbox/Pillbox.tsx +208 -0
- package/src/components/progress/ProgressBar.tsx +33 -33
- package/src/components/progress/ProgressCircle.tsx +29 -37
- package/src/components/tabpanel/Tab.tsx +84 -73
- package/src/components/tabpanel/TabPanel.tsx +102 -51
- package/src/components/titlebar/Titlebar.tsx +115 -0
- package/src/components/tooltip/Tooltip.tsx +255 -0
- package/src/context/Global.tsx +148 -148
- package/src/context/ModalManager.tsx +68 -0
- package/src/context/context.ts +111 -0
- package/src/core/areaToggle/AreaToggle.tsx +45 -0
- package/src/core/aside/Aside.tsx +200 -155
- package/src/core/boundary/ErrorBoundary.tsx +50 -68
- package/src/core/boundary/ErrorIcon.tsx +34 -32
- package/src/core/content/Content.tsx +41 -50
- package/src/core/headfoot/HeadFoot.tsx +162 -81
- package/src/core/layout/Layout.tsx +54 -0
- package/src/core/responsive/Responsive.tsx +91 -98
- package/src/core/theme/ThemeProvider.tsx +45 -56
- package/src/core/viewport/Viewport.tsx +25 -27
- package/src/hooks/useClientService.ts +47 -0
- package/src/hooks/useContextMenu.tsx +131 -0
- package/src/hooks/useControlledValue.ts +47 -0
- package/src/hooks/useDebounce.ts +41 -24
- package/src/hooks/useEffectDebugger.ts +105 -94
- package/src/hooks/useIsDark.ts +10 -24
- package/src/hooks/useIsRtl.ts +32 -20
- package/src/hooks/useNavigator.tsx +41 -26
- package/src/hooks/useNotificationService.tsx +239 -0
- package/src/hooks/useOverlayService.tsx +67 -20
- package/src/hooks/usePropState.ts +52 -0
- package/src/hooks/usePropToggle.ts +54 -47
- package/src/hooks/useResize.ts +69 -45
- package/src/hooks/useResizeObserver.ts +59 -34
- package/src/hooks/useStorage.ts +40 -48
- package/src/i18n/index.ts +24 -25
- package/src/index.ts +115 -44
- package/src/types/colors.ts +49 -0
- package/src/types/global.d.ts +40 -17
- package/src/types/index.ts +243 -155
- package/src/typography/Abbr.tsx +62 -59
- package/src/typography/Anchor.tsx +63 -0
- package/src/typography/Copy.tsx +39 -29
- package/src/typography/Kbd.tsx +50 -0
- package/src/typography/Mark.tsx +56 -51
- package/src/typography/Text.tsx +57 -128
- package/src/typography/Title.tsx +36 -108
- package/src/typography/types.ts +27 -17
- package/src/utils/calculateDimensions.ts +50 -40
- package/src/utils/cloneElement.ts +61 -0
- package/src/{core/content/Content.module.css → utils/getBadgeProps.ts} +20 -15
- package/src/utils/getColor.ts +42 -36
- package/src/utils/getIconProps.ts +58 -0
- package/src/utils/getTooltipProps.ts +59 -0
- package/src/utils/index.ts +23 -17
- package/src/utils/nodeCheck.ts +4 -8
- package/css/flags.rect.css +0 -1607
- package/css/flags.wavy.css +0 -1606
- package/css/index.js +0 -250
- package/css/tailwind/colors.ts +0 -158
- package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/cjs/components/animations/Animations.js +0 -142
- package/dist/cjs/components/animations/Animations.module.css +0 -1
- package/dist/cjs/components/avatar/Avatar.module.css +0 -1
- package/dist/cjs/components/badge/Badge.module.css +0 -1
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +0 -71
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/cjs/components/button/Button.module.css +0 -1
- package/dist/cjs/components/card/Card.module.css +0 -1
- package/dist/cjs/components/chip/Chip.module.css +0 -1
- package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
- package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
- package/dist/cjs/components/icon/Icon.module.css +0 -1
- package/dist/cjs/components/media/Media.module.css +0 -1
- package/dist/cjs/components/menu/Menu.module.css +0 -1
- package/dist/cjs/components/meter/Meter.module.css +0 -1
- package/dist/cjs/components/panel/Panel.module.css +0 -1
- package/dist/cjs/components/progress/Progress.module.css +0 -1
- package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/cjs/context/NotificationCenter.js +0 -254
- package/dist/cjs/core/aside/Aside.module.css +0 -1
- package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/cjs/core/content/Content.module.css +0 -1
- package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/cjs/core/page/Page.js +0 -66
- package/dist/cjs/core/page/Page.module.css +0 -1
- package/dist/cjs/core/responsive/Responsive.module.css +0 -1
- package/dist/cjs/core/section/Section.module.css +0 -1
- package/dist/cjs/core/theme/Theme.module.css +0 -1
- package/dist/cjs/core/viewport/Viewport.module.css +0 -1
- package/dist/cjs/hotkeys/HotKey.js +0 -47
- package/dist/cjs/hotkeys/HotKeyLabel.js +0 -52
- package/dist/cjs/hotkeys/HotKeyWrapper.js +0 -98
- package/dist/cjs/hotkeys/commons.js +0 -56
- package/dist/cjs/overlays/alert/Alert.module.css +0 -1
- package/dist/cjs/overlays/flyout/Flyout.js +0 -152
- package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
- package/dist/cjs/overlays/message/Message.js +0 -84
- package/dist/cjs/overlays/message/Message.module.css +0 -1
- package/dist/cjs/overlays/modal/Modal.js +0 -132
- package/dist/cjs/overlays/modal/Modal.module.css +0 -1
- package/dist/cjs/overlays/toast/Toast.js +0 -166
- package/dist/cjs/overlays/toast/Toast.module.css +0 -1
- package/dist/cjs/overlays/tooltip/Tooltip.js +0 -133
- package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/cjs/types/icons.js +0 -200
- package/dist/cjs/typography/Link.js +0 -55
- package/dist/cjs/typography/Typography.module.css +0 -1
- package/dist/cjs/typography/types.js +0 -42
- package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/esm/components/animations/Animations.js +0 -138
- package/dist/esm/components/animations/Animations.module.css +0 -1
- package/dist/esm/components/avatar/Avatar.module.css +0 -1
- package/dist/esm/components/badge/Badge.module.css +0 -1
- package/dist/esm/components/breadcrumbs/Breadcrumbs.js +0 -71
- package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/esm/components/button/Button.module.css +0 -1
- package/dist/esm/components/card/Card.module.css +0 -1
- package/dist/esm/components/chip/Chip.module.css +0 -1
- package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
- package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
- package/dist/esm/components/icon/Icon.module.css +0 -1
- package/dist/esm/components/media/Media.module.css +0 -1
- package/dist/esm/components/menu/Menu.module.css +0 -1
- package/dist/esm/components/meter/Meter.module.css +0 -1
- package/dist/esm/components/panel/Panel.module.css +0 -1
- package/dist/esm/components/progress/Progress.module.css +0 -1
- package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/esm/context/NotificationCenter.js +0 -254
- package/dist/esm/core/aside/Aside.module.css +0 -1
- package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/esm/core/content/Content.module.css +0 -1
- package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/esm/core/page/Page.js +0 -66
- package/dist/esm/core/page/Page.module.css +0 -1
- package/dist/esm/core/responsive/Responsive.module.css +0 -1
- package/dist/esm/core/section/Section.module.css +0 -1
- package/dist/esm/core/theme/Theme.module.css +0 -1
- package/dist/esm/core/viewport/Viewport.module.css +0 -1
- package/dist/esm/hotkeys/HotKey.js +0 -47
- package/dist/esm/hotkeys/HotKeyLabel.js +0 -52
- package/dist/esm/hotkeys/HotKeyWrapper.js +0 -96
- package/dist/esm/hotkeys/commons.js +0 -56
- package/dist/esm/overlays/alert/Alert.module.css +0 -1
- package/dist/esm/overlays/flyout/Flyout.js +0 -152
- package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
- package/dist/esm/overlays/message/Message.js +0 -84
- package/dist/esm/overlays/message/Message.module.css +0 -1
- package/dist/esm/overlays/modal/Modal.js +0 -132
- package/dist/esm/overlays/modal/Modal.module.css +0 -1
- package/dist/esm/overlays/toast/Toast.js +0 -166
- package/dist/esm/overlays/toast/Toast.module.css +0 -1
- package/dist/esm/overlays/tooltip/Tooltip.js +0 -132
- package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/esm/types/icons.js +0 -202
- package/dist/esm/typography/Link.js +0 -55
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/esm/typography/types.js +0 -41
- package/dist/types/components/animations/Animations.d.ts +0 -23
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +0 -17
- package/dist/types/components/index.d.ts +0 -33
- package/dist/types/context/NotificationCenter.d.ts +0 -11
- package/dist/types/core/index.d.ts +0 -9
- package/dist/types/core/page/Page.d.ts +0 -23
- package/dist/types/core/section/Section.d.ts +0 -7
- package/dist/types/hotkeys/HotKey.d.ts +0 -2
- package/dist/types/hotkeys/HotKeyLabel.d.ts +0 -2
- package/dist/types/hotkeys/HotKeyWrapper.d.ts +0 -11
- package/dist/types/hotkeys/commons.d.ts +0 -28
- package/dist/types/overlays/alert/Alert.d.ts +0 -41
- package/dist/types/overlays/flyout/Flyout.d.ts +0 -57
- package/dist/types/overlays/index.d.ts +0 -6
- package/dist/types/overlays/message/Message.d.ts +0 -21
- package/dist/types/overlays/modal/Modal.d.ts +0 -53
- package/dist/types/overlays/toast/Toast.d.ts +0 -33
- package/dist/types/overlays/tooltip/Tooltip.d.ts +0 -18
- package/dist/types/types/icons.d.ts +0 -197
- package/dist/types/typography/Link.d.ts +0 -25
- package/dist/types/typography/index.d.ts +0 -6
- package/src/components/animations/Animations.module.css +0 -253
- package/src/components/animations/Animations.tsx +0 -196
- package/src/components/avatar/Avatar.module.css +0 -90
- package/src/components/badge/Badge.module.css +0 -165
- package/src/components/breadcrumbs/Breadcrumbs.module.css +0 -189
- package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -109
- package/src/components/button/Button.module.css +0 -375
- package/src/components/card/Card.module.css +0 -152
- package/src/components/chip/Chip.module.css +0 -118
- package/src/components/collapsable/Collapsable.module.css +0 -30
- package/src/components/icon/Icon.module.css +0 -71
- package/src/components/index.ts +0 -62
- package/src/components/media/Media.module.css +0 -112
- package/src/context/NotificationCenter.tsx +0 -223
- package/src/core/aside/Aside.module.css +0 -231
- package/src/core/boundary/ErrorBoundary.module.css +0 -65
- package/src/core/headfoot/HeadFoot.module.css +0 -38
- package/src/core/index.ts +0 -32
- package/src/core/page/Page.module.css +0 -46
- package/src/core/page/Page.tsx +0 -101
- package/src/core/responsive/Responsive.module.css +0 -85
- package/src/core/section/Section.module.css +0 -28
- package/src/core/section/Section.tsx +0 -54
- package/src/core/theme/Theme.module.css +0 -30
- package/src/core/viewport/Viewport.module.css +0 -32
- package/src/hooks/useControlledValue.tsx +0 -43
- package/src/hotkeys/HotKey.tsx +0 -39
- package/src/hotkeys/HotKeyLabel.tsx +0 -61
- package/src/hotkeys/HotKeyWrapper.tsx +0 -137
- package/src/hotkeys/commons.ts +0 -74
- package/src/overlays/alert/Alert.tsx +0 -252
- package/src/overlays/flyout/Flyout.tsx +0 -283
- package/src/overlays/index.ts +0 -29
- package/src/overlays/message/Message.tsx +0 -107
- package/src/overlays/modal/Modal.tsx +0 -244
- package/src/overlays/toast/Toast.module.css +0 -37
- package/src/overlays/toast/Toast.tsx +0 -216
- package/src/overlays/tooltip/Tooltip.module.css +0 -53
- package/src/overlays/tooltip/Tooltip.tsx +0 -200
- package/src/types/icons.ts +0 -426
- package/src/typography/Link.tsx +0 -113
- package/src/typography/Typography.module.css +0 -68
- package/src/typography/index.ts +0 -29
- /package/dist/cjs/i18n/{ar.json.js → ar/core.json.js} +0 -0
- /package/dist/cjs/i18n/{en.json.js → en/core.json.js} +0 -0
- /package/dist/esm/i18n/{ar.json.js → ar/core.json.js} +0 -0
- /package/dist/esm/i18n/{en.json.js → en/core.json.js} +0 -0
- /package/src/i18n/{ar.json → ar/core.json} +0 -0
- /package/src/i18n/{en.json → en/core.json} +0 -0
|
@@ -1,85 +1,93 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* React Fabric
|
|
3
|
-
* @version
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
4
6
|
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
5
13
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
8
16
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* portions of the Software.
|
|
17
|
-
*
|
|
18
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
-
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
20
|
-
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
|
-
import
|
|
25
|
-
import { useCallback
|
|
26
|
+
import { cn } from "@react-fabric/utilities";
|
|
27
|
+
import { useCallback } from "react";
|
|
26
28
|
import { useMemoDebugger } from "../../hooks/useEffectDebugger";
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
import type {
|
|
30
|
+
ChildProp,
|
|
31
|
+
ColorBase,
|
|
32
|
+
CssPropWithMap,
|
|
33
|
+
CustomColors,
|
|
34
|
+
Draggable,
|
|
35
|
+
HtmlEvents,
|
|
36
|
+
PolymorphicProps,
|
|
37
|
+
RefProp,
|
|
38
|
+
SizeWithCustom,
|
|
39
|
+
TestProps,
|
|
37
40
|
} from "../../types";
|
|
38
|
-
import { getColor,
|
|
41
|
+
import { getColor, getIconProps } from "../../utils";
|
|
42
|
+
import type { IconProps } from "../icon/Icon";
|
|
39
43
|
import { Icon } from "../icon/Icon";
|
|
40
|
-
import classes from "./Chip.module.css";
|
|
41
44
|
|
|
42
45
|
export interface ChipProps
|
|
43
|
-
extends
|
|
44
|
-
|
|
45
|
-
IconProps,
|
|
46
|
+
extends
|
|
47
|
+
CssPropWithMap<{ root: string; value: string }>,
|
|
46
48
|
TestProps,
|
|
47
|
-
|
|
49
|
+
HtmlEvents,
|
|
50
|
+
Draggable,
|
|
51
|
+
ChildProp<string | React.ReactNode>,
|
|
48
52
|
RefProp<HTMLDivElement> {
|
|
49
53
|
/**
|
|
50
|
-
* chip
|
|
54
|
+
* Value displayed in a small badge on the chip (e.g., count, index).
|
|
55
|
+
*/
|
|
56
|
+
value?: string | number;
|
|
57
|
+
/**
|
|
58
|
+
* Chip size — uses predefined `SizeType` keys (`xs`–`xl`) or a custom font-size string/number.
|
|
51
59
|
*/
|
|
52
|
-
size?:
|
|
60
|
+
size?: SizeWithCustom;
|
|
53
61
|
/**
|
|
54
|
-
*
|
|
62
|
+
* Color token (from the design system palette) or arbitrary CSS color string.
|
|
55
63
|
*/
|
|
56
|
-
color?:
|
|
64
|
+
color?: CustomColors<ColorBase>;
|
|
57
65
|
/**
|
|
58
|
-
*
|
|
66
|
+
* Visual style variant — controls background, border, and text color treatment.
|
|
59
67
|
*/
|
|
60
|
-
variant?: "solid" | "
|
|
68
|
+
variant?: "default" | "soft" | "solid" | "outlined";
|
|
61
69
|
/**
|
|
62
|
-
* full
|
|
70
|
+
* When `true`, rounds the chip edges into a full pill shape.
|
|
63
71
|
*/
|
|
64
72
|
rounded?: boolean;
|
|
65
73
|
/**
|
|
66
|
-
*
|
|
74
|
+
* Icon configuration — accepts either a string (icon name) or full `IconProps`. Renders to the left of the label.
|
|
67
75
|
*/
|
|
68
|
-
|
|
76
|
+
icon?: IconProps;
|
|
69
77
|
/**
|
|
70
|
-
*
|
|
78
|
+
* Disables interaction and applies a dimmed opacity.
|
|
71
79
|
*/
|
|
72
|
-
|
|
80
|
+
disabled?: boolean;
|
|
73
81
|
/**
|
|
74
|
-
* click
|
|
82
|
+
* Calls `e.preventDefault()` on click — useful when the chip lives inside an `<a>` element.
|
|
75
83
|
*/
|
|
76
|
-
|
|
84
|
+
preventDefault?: boolean;
|
|
77
85
|
/**
|
|
78
|
-
*
|
|
86
|
+
* Calls `e.stopPropagation()` on click to prevent event bubbling.
|
|
79
87
|
*/
|
|
80
|
-
|
|
88
|
+
stopPropagation?: boolean;
|
|
81
89
|
/**
|
|
82
|
-
* remove
|
|
90
|
+
* Click handler for the remove (×) button; receives the native mouse event.
|
|
83
91
|
*/
|
|
84
92
|
onRemove?: React.MouseEventHandler;
|
|
85
93
|
}
|
|
@@ -92,38 +100,62 @@ const SizeMap: KeyValue<string> = {
|
|
|
92
100
|
xl: "2rem",
|
|
93
101
|
};
|
|
94
102
|
|
|
95
|
-
|
|
103
|
+
/**
|
|
104
|
+
* A compact, interactive chip used to represent tags, filters, selections, or status indicators.
|
|
105
|
+
*
|
|
106
|
+
* Renders a horizontally-flowing container with optional left-to-right slots:
|
|
107
|
+
* value badge → icon → label → remove (×) button.
|
|
108
|
+
*
|
|
109
|
+
* Supports four visual variants (`default`, `soft`, `solid`, `outlined`), five predefined sizes,
|
|
110
|
+
* and full color customization via the design system palette. The chip is keyboard-accessible,
|
|
111
|
+
* respects `disabled` and `data-clickable` states, and provides hooks for click and remove actions.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```tsx
|
|
115
|
+
* <Chip color="primary" size="md">
|
|
116
|
+
* React
|
|
117
|
+
* </Chip>
|
|
118
|
+
*
|
|
119
|
+
* <Chip color="secondary" variant="outlined" icon="star" onRemove={() => console.log('removed')}>
|
|
120
|
+
* Filter
|
|
121
|
+
* </Chip>
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
export function Chip<Tag extends React.ElementType = "div">({
|
|
96
125
|
ref,
|
|
97
126
|
children,
|
|
98
127
|
className,
|
|
128
|
+
classNames,
|
|
99
129
|
size,
|
|
100
130
|
color,
|
|
101
131
|
variant,
|
|
102
132
|
icon,
|
|
103
|
-
|
|
104
|
-
iconColor,
|
|
105
|
-
rtlFlip,
|
|
133
|
+
value,
|
|
106
134
|
disabled,
|
|
107
135
|
onClick,
|
|
108
|
-
onIconClick,
|
|
109
136
|
onRemove,
|
|
110
137
|
rounded,
|
|
138
|
+
preventDefault,
|
|
111
139
|
stopPropagation,
|
|
112
140
|
as,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
141
|
+
draggable,
|
|
142
|
+
dragKey,
|
|
143
|
+
dragData,
|
|
144
|
+
onDragStart,
|
|
145
|
+
...props
|
|
146
|
+
}: ChipProps & PolymorphicProps<Tag>) {
|
|
147
|
+
// Compute inline styles from props (memoized to prevent re-renders)
|
|
116
148
|
const styles = useMemoDebugger(
|
|
117
149
|
() => {
|
|
118
150
|
const s: KeyValue = {};
|
|
119
151
|
if (color) {
|
|
120
|
-
s
|
|
121
|
-
}
|
|
122
|
-
if (size && !(size in SizeMap)) {
|
|
123
|
-
s.fontSize = size;
|
|
152
|
+
s["--color"] = getColor(color);
|
|
124
153
|
}
|
|
125
154
|
if (size && size in SizeMap) {
|
|
126
155
|
s.fontSize = SizeMap[size];
|
|
156
|
+
} else if (size) {
|
|
157
|
+
// Treat as a custom font-size value when not in the predefined map.
|
|
158
|
+
s.fontSize = size;
|
|
127
159
|
}
|
|
128
160
|
return s;
|
|
129
161
|
},
|
|
@@ -131,63 +163,71 @@ export const Chip = <Tag extends React.ElementType = "div">({
|
|
|
131
163
|
"Chip styles",
|
|
132
164
|
);
|
|
133
165
|
|
|
134
|
-
const
|
|
135
|
-
(
|
|
136
|
-
if (
|
|
137
|
-
|
|
166
|
+
const handleDragStart = useCallback(
|
|
167
|
+
(event: React.DragEvent) => {
|
|
168
|
+
if (dragKey) {
|
|
169
|
+
event.dataTransfer?.setData(dragKey, JSON.stringify(dragData));
|
|
170
|
+
onDragStart?.(event, dragKey, dragData);
|
|
171
|
+
}
|
|
138
172
|
},
|
|
139
|
-
[
|
|
173
|
+
[dragKey, dragData, onDragStart],
|
|
140
174
|
);
|
|
141
175
|
|
|
142
|
-
const
|
|
143
|
-
(e
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
)
|
|
176
|
+
const clickHandler = (e: React.MouseEvent) => {
|
|
177
|
+
if (preventDefault) e.preventDefault();
|
|
178
|
+
if (stopPropagation) e.stopPropagation();
|
|
179
|
+
onClick?.(e);
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const removeHandler = (e: React.MouseEvent) => {
|
|
183
|
+
e.stopPropagation();
|
|
184
|
+
onRemove?.(e);
|
|
185
|
+
};
|
|
149
186
|
|
|
187
|
+
// Resolve the polymorphic element: falls back to `<div>`.
|
|
150
188
|
const E = as ?? "div";
|
|
151
189
|
return (
|
|
152
190
|
<E
|
|
153
191
|
ref={ref}
|
|
154
192
|
role="term"
|
|
155
|
-
|
|
156
|
-
|
|
193
|
+
data-ref="chip"
|
|
194
|
+
className={cn(
|
|
195
|
+
"fabric-chip",
|
|
196
|
+
"select-none inline-flex flex-nowrap items-center max-w-72 overflow-hidden rounded",
|
|
197
|
+
"is-disabled:pointer-events-none is-rounded:rounded-full",
|
|
198
|
+
"is-clickable:cursor-pointer is-clickable:bg-(image:--click-gradient) is-clickable:is-disabled:pointer-events-none is-clickable:is-disabled:opacity-50",
|
|
157
199
|
className,
|
|
158
|
-
|
|
159
|
-
"select-none inline-flex flex-nowrap items-center max-w-72 text-sm rounded",
|
|
160
|
-
rounded && "rounded-full",
|
|
161
|
-
!!onClick && classes.clickable,
|
|
162
|
-
disabled && classes.disabled,
|
|
200
|
+
classNames?.root,
|
|
163
201
|
)}
|
|
164
202
|
style={styles}
|
|
165
203
|
data-variant={variant}
|
|
166
|
-
data-
|
|
167
|
-
{
|
|
168
|
-
{
|
|
204
|
+
data-disabled={disabled}
|
|
205
|
+
data-rounded={rounded}
|
|
206
|
+
data-clickable={!!onClick}
|
|
207
|
+
draggable={draggable}
|
|
208
|
+
onDragStart={!draggable ? undefined : handleDragStart}
|
|
209
|
+
onClick={disabled ? undefined : clickHandler}
|
|
210
|
+
{...props}
|
|
169
211
|
>
|
|
170
|
-
{
|
|
171
|
-
<
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
bg={iconBg}
|
|
175
|
-
onClick={onIconClick}
|
|
176
|
-
color={iconColor}
|
|
177
|
-
rtlFlip={rtlFlip}
|
|
178
|
-
/>
|
|
212
|
+
{value && (
|
|
213
|
+
<div className={cn("fabric-chipValue inline-flex items-center px-[0.25em]", classNames?.value)}>
|
|
214
|
+
<span>{value}</span>
|
|
215
|
+
</div>
|
|
179
216
|
)}
|
|
217
|
+
{icon && <Icon data-ref="chipIcon" className="fabric-chipIcon m-1 flex-content" {...getIconProps(icon)} />}
|
|
180
218
|
{children && (
|
|
181
|
-
<label className=
|
|
219
|
+
<label data-ref="chipLabel" className="fabric-chipLabel truncate flex-1 px-[0.5em]">
|
|
182
220
|
{children}
|
|
183
221
|
</label>
|
|
184
222
|
)}
|
|
185
223
|
{onRemove && (
|
|
186
224
|
<span
|
|
187
225
|
role="none"
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
226
|
+
data-ref="chipRemove"
|
|
227
|
+
data-inner-clickable
|
|
228
|
+
className={cn(
|
|
229
|
+
"fabric-chipRemove",
|
|
230
|
+
"cursor-pointer pe-1 pb-0.5 opacity-65 leading-none align-middle text-default hover:opacity-90",
|
|
191
231
|
)}
|
|
192
232
|
onClick={removeHandler}
|
|
193
233
|
>
|
|
@@ -196,4 +236,4 @@ export const Chip = <Tag extends React.ElementType = "div">({
|
|
|
196
236
|
)}
|
|
197
237
|
</E>
|
|
198
238
|
);
|
|
199
|
-
}
|
|
239
|
+
}
|
|
@@ -1,71 +1,46 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* React Fabric
|
|
3
|
-
* @version
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
4
6
|
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
5
13
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
8
16
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* portions of the Software.
|
|
17
|
-
*
|
|
18
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
-
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
20
|
-
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
|
-
import
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
useImperativeHandle,
|
|
29
|
-
useMemo,
|
|
30
|
-
useRef,
|
|
31
|
-
useState,
|
|
32
|
-
type RefObject,
|
|
33
|
-
} from "react";
|
|
34
|
-
import {
|
|
35
|
-
type AriaProps,
|
|
36
|
-
type ChildrenProp,
|
|
37
|
-
type CssProp,
|
|
38
|
-
type RefProp,
|
|
39
|
-
type TestProps,
|
|
40
|
-
} from "../../types";
|
|
41
|
-
import { CoreIcons } from "../../types/icons";
|
|
26
|
+
import { cn } from "@react-fabric/utilities";
|
|
27
|
+
import { Activity, Children, useEffect, useEffectEvent, useImperativeHandle, useMemo, useRef } from "react";
|
|
28
|
+
import { usePropState } from "../../hooks/usePropState";
|
|
29
|
+
import type { ChildrenProp, CssPropWithMap, RefProp, TestProps } from "../../types";
|
|
42
30
|
import { Icon } from "../icon/Icon";
|
|
43
|
-
import classes from "./Collapsable.module.css";
|
|
44
31
|
|
|
45
32
|
interface CollapsableRef {
|
|
46
|
-
button: RefObject<HTMLElement>;
|
|
47
|
-
body: RefObject<HTMLElement>;
|
|
33
|
+
button: React.RefObject<HTMLElement | null>;
|
|
34
|
+
body: React.RefObject<HTMLElement | null>;
|
|
48
35
|
open: boolean;
|
|
49
36
|
}
|
|
50
37
|
|
|
51
38
|
export interface CollapsableProps
|
|
52
|
-
extends
|
|
53
|
-
AriaProps,
|
|
54
|
-
TestProps,
|
|
55
|
-
RefProp<CollapsableRef>,
|
|
56
|
-
ChildrenProp {
|
|
39
|
+
extends CssPropWithMap<{ root?: string; header?: string; body?: string }>, TestProps, RefProp<CollapsableRef>, ChildrenProp {
|
|
57
40
|
/**
|
|
58
41
|
* expand icon alignment
|
|
59
42
|
*/
|
|
60
43
|
iconAlign?: "start" | "end";
|
|
61
|
-
/**
|
|
62
|
-
* panel body className
|
|
63
|
-
*/
|
|
64
|
-
bodyClassName?: string;
|
|
65
|
-
/**
|
|
66
|
-
* header button className
|
|
67
|
-
*/
|
|
68
|
-
headerClassName?: string;
|
|
69
44
|
/**
|
|
70
45
|
* Header position sticky
|
|
71
46
|
*/
|
|
@@ -91,28 +66,49 @@ export interface CollapsableProps
|
|
|
91
66
|
*/
|
|
92
67
|
onOpen?: () => void;
|
|
93
68
|
/**
|
|
94
|
-
*
|
|
69
|
+
* close handler
|
|
95
70
|
*/
|
|
96
71
|
onClose?: () => void;
|
|
97
72
|
}
|
|
98
73
|
|
|
99
|
-
|
|
74
|
+
/**
|
|
75
|
+
* A component that can be expanded or collapsed to show or hide content.
|
|
76
|
+
* It is useful for organizing content in a way that allows users to focus on the information they are interested in.
|
|
77
|
+
* It supports custom icons for open and closed states, alignment options, and can be made sticky.
|
|
78
|
+
* This component is ideal for creating accordions, expandable panels, or sections that can be toggled by the user.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```jsx
|
|
82
|
+
* <Collapsable
|
|
83
|
+
* iconAlign="start"
|
|
84
|
+
* iconOpen="icon-[mdi--chevron-down]"
|
|
85
|
+
* iconClosed="icon-[mdi--chevron-right]"
|
|
86
|
+
* open={true}
|
|
87
|
+
* onOpen={() => console.log("Opened")}
|
|
88
|
+
* onClose={() => console.log("Closed")}
|
|
89
|
+
* >
|
|
90
|
+
* <div>Header Content</div>
|
|
91
|
+
* <div>Body Content</div>
|
|
92
|
+
* </Collapsable>
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export function Collapsable({
|
|
100
96
|
ref,
|
|
101
97
|
disabled,
|
|
102
98
|
className,
|
|
103
|
-
|
|
104
|
-
headerClassName,
|
|
99
|
+
classNames,
|
|
105
100
|
children,
|
|
106
101
|
iconAlign,
|
|
107
102
|
stickyHeader,
|
|
108
|
-
iconClosed =
|
|
109
|
-
iconOpen =
|
|
103
|
+
iconClosed = "icon-[mdi--chevron-right]",
|
|
104
|
+
iconOpen = "icon-[mdi--chevron-down]",
|
|
110
105
|
open,
|
|
111
106
|
onClose,
|
|
112
107
|
onOpen,
|
|
113
|
-
...
|
|
114
|
-
}: CollapsableProps)
|
|
115
|
-
const [openState, setOpenState] =
|
|
108
|
+
...props
|
|
109
|
+
}: CollapsableProps) {
|
|
110
|
+
const [openState, setOpenState] = usePropState(open);
|
|
111
|
+
|
|
116
112
|
const headRef = useRef(null);
|
|
117
113
|
const bodyRef = useRef(null);
|
|
118
114
|
|
|
@@ -126,39 +122,45 @@ export const Collapsable = ({
|
|
|
126
122
|
[openState],
|
|
127
123
|
);
|
|
128
124
|
|
|
125
|
+
const toggleHandler = useEffectEvent(() => {
|
|
126
|
+
if (openState) {
|
|
127
|
+
onOpen?.();
|
|
128
|
+
} else {
|
|
129
|
+
onClose?.();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
129
133
|
useEffect(() => {
|
|
130
|
-
|
|
131
|
-
}, [
|
|
134
|
+
toggleHandler();
|
|
135
|
+
}, [openState]);
|
|
132
136
|
|
|
133
137
|
const [head, body] = useMemo(() => {
|
|
138
|
+
// eslint-disable-next-line @eslint-react/no-children-to-array
|
|
134
139
|
const [h, ...b] = Children.toArray(children);
|
|
135
140
|
return [h, b];
|
|
136
141
|
}, [children]);
|
|
137
142
|
return (
|
|
138
|
-
<div className={
|
|
143
|
+
<div className={cn("fabric-collapsable", className, classNames?.root)} {...props}>
|
|
139
144
|
<div
|
|
140
145
|
role="none"
|
|
141
146
|
ref={headRef}
|
|
142
|
-
className={
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
+
className={cn(
|
|
148
|
+
"fabric-collapsableHead",
|
|
149
|
+
stickyHeader && "bg-default sticky top-0 py-1 z-10",
|
|
150
|
+
classNames?.header,
|
|
151
|
+
"flex gap-1 flex-nowrap py-2 cursor-pointer items-center select-none hover:opacity-70",
|
|
147
152
|
iconAlign === "end" ? "flex-row-reverse" : "flex-row",
|
|
148
153
|
)}
|
|
149
154
|
onClick={() => !disabled && setOpenState(!openState)}
|
|
150
155
|
>
|
|
151
|
-
<Icon size="
|
|
152
|
-
<div className="flex-1
|
|
156
|
+
<Icon size="1em" icon={openState ? iconOpen : iconClosed} rtlFlip />
|
|
157
|
+
<div className="flex-1">{head}</div>
|
|
153
158
|
</div>
|
|
154
|
-
{openState
|
|
155
|
-
<div
|
|
156
|
-
ref={bodyRef}
|
|
157
|
-
className={classNames(classes.collapsableBody, bodyClassName)}
|
|
158
|
-
>
|
|
159
|
+
<Activity mode={openState ? "visible" : "hidden"}>
|
|
160
|
+
<div ref={bodyRef} className={cn("fabric-collapsableBody", classNames?.body)}>
|
|
159
161
|
{body}
|
|
160
162
|
</div>
|
|
161
|
-
|
|
163
|
+
</Activity>
|
|
162
164
|
</div>
|
|
163
165
|
);
|
|
164
|
-
}
|
|
166
|
+
}
|