@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
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Fabric
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
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:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
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.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { cn } from "@react-fabric/utilities";
|
|
27
|
+
import { useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
28
|
+
import { useControlledValue } from "../../hooks/useControlledValue";
|
|
29
|
+
import type { CssProp, CustomColors } from "../../types";
|
|
30
|
+
import { getColor, getIconProps } from "../../utils";
|
|
31
|
+
import { StyleEffect } from "../effect/StyleEffect";
|
|
32
|
+
import type { IconProps } from "../icon/Icon";
|
|
33
|
+
import { Icon } from "../icon/Icon";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Represents a single selectable value type within a Pillbox.
|
|
37
|
+
*/
|
|
38
|
+
type ValueType = string | number | boolean;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Configuration for a single pill option.
|
|
42
|
+
*/
|
|
43
|
+
interface PillOption {
|
|
44
|
+
/**
|
|
45
|
+
* Unique value identifying this option.
|
|
46
|
+
*/
|
|
47
|
+
value: ValueType;
|
|
48
|
+
/**
|
|
49
|
+
* Display text shown inside the pill.
|
|
50
|
+
*/
|
|
51
|
+
label?: React.ReactNode;
|
|
52
|
+
/**
|
|
53
|
+
* Icon configuration rendered before the label.
|
|
54
|
+
*/
|
|
55
|
+
icon?: IconProps;
|
|
56
|
+
/**
|
|
57
|
+
* Background color override for the active pill highlight.
|
|
58
|
+
*/
|
|
59
|
+
bg?: CustomColors;
|
|
60
|
+
/**
|
|
61
|
+
* Text color override for the active pill.
|
|
62
|
+
*/
|
|
63
|
+
color?: CustomColors;
|
|
64
|
+
/**
|
|
65
|
+
* Whether this option is disabled and cannot be selected.
|
|
66
|
+
*/
|
|
67
|
+
disabled?: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Props for the Pillbox component.
|
|
72
|
+
*/
|
|
73
|
+
interface PillboxProps extends CssProp {
|
|
74
|
+
/**
|
|
75
|
+
* Render pills in a full-width flex layout instead of inline.
|
|
76
|
+
*/
|
|
77
|
+
block?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Enable toggle behavior when exactly two options exist, allowing
|
|
80
|
+
* deselect on click.
|
|
81
|
+
*/
|
|
82
|
+
toggle?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Hide pills visually when the group is not hovered.
|
|
85
|
+
*/
|
|
86
|
+
autoHide?: boolean;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Array of pill options to render.
|
|
90
|
+
*/
|
|
91
|
+
options: PillOption[];
|
|
92
|
+
/**
|
|
93
|
+
* Currently selected value. Controlled component pattern.
|
|
94
|
+
*/
|
|
95
|
+
value?: ValueType | null;
|
|
96
|
+
/**
|
|
97
|
+
* Callback invoked when a pill is selected with its value.
|
|
98
|
+
*/
|
|
99
|
+
onChange?: (value: ValueType) => void;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* A pill-based selector that renders a horizontal group of clickable options
|
|
104
|
+
* with an animated highlight tracking the selected pill.
|
|
105
|
+
*/
|
|
106
|
+
export function Pillbox({ options, className, block, toggle, value, autoHide, onChange }: PillboxProps) {
|
|
107
|
+
const pillboxRef = useRef<HTMLDivElement>(null);
|
|
108
|
+
const [hilightStyle, setHilightStyle] = useState(() => ({ left: 0, top: 0, width: 0, height: 0 }));
|
|
109
|
+
const { currentValue, updateValue } = useControlledValue(value, null);
|
|
110
|
+
|
|
111
|
+
// Allow toggle behavior only when exactly two options exist and toggle is enabled
|
|
112
|
+
const canToggle = useMemo(() => options.length === 2 && toggle, [options, toggle]);
|
|
113
|
+
const currentIndex = useMemo(() => {
|
|
114
|
+
// Use Math.max to default to 0 when no option matches (prevents -1 index)
|
|
115
|
+
return Math.max(
|
|
116
|
+
0,
|
|
117
|
+
options.findIndex((o) => o.value === currentValue),
|
|
118
|
+
);
|
|
119
|
+
}, [options, currentValue]);
|
|
120
|
+
|
|
121
|
+
const currentOption = options[currentIndex];
|
|
122
|
+
|
|
123
|
+
// Update highlight position whenever the selected index or ref changes
|
|
124
|
+
useLayoutEffect(() => {
|
|
125
|
+
const el = pillboxRef.current?.querySelectorAll("button")[currentIndex];
|
|
126
|
+
|
|
127
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect
|
|
128
|
+
setHilightStyle({
|
|
129
|
+
left: el?.offsetLeft ?? 0,
|
|
130
|
+
top: el?.offsetTop ?? 0,
|
|
131
|
+
width: el?.offsetWidth ?? 0,
|
|
132
|
+
height: el?.offsetHeight ?? 0,
|
|
133
|
+
});
|
|
134
|
+
}, [pillboxRef, currentIndex]);
|
|
135
|
+
|
|
136
|
+
const handleValueChange = (value: ValueType) => {
|
|
137
|
+
// Handle pill selection with optional toggle behavior
|
|
138
|
+
// In toggle mode, clicking the selected pill switches to the other option
|
|
139
|
+
updateValue((oldValue) => {
|
|
140
|
+
if (canToggle) {
|
|
141
|
+
// Toggle between the two options: click selected pill to switch to the other
|
|
142
|
+
const newValue = oldValue === options[1].value ? options[0].value : options[1].value;
|
|
143
|
+
onChange?.(newValue);
|
|
144
|
+
return newValue;
|
|
145
|
+
} else {
|
|
146
|
+
onChange?.(value);
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<div ref={pillboxRef} className={cn("fabric-pillbox", className, "relative p-1 outline rounded overflow-hidden")}>
|
|
154
|
+
<div
|
|
155
|
+
className={cn(
|
|
156
|
+
"fabric-pillboxContainer",
|
|
157
|
+
"relative group rounded select-none overflow-hidden flex-nowrap",
|
|
158
|
+
block ? "flex" : "inline-flex",
|
|
159
|
+
autoHide && "not-hover:bg-(--currentBg)",
|
|
160
|
+
)}
|
|
161
|
+
style={
|
|
162
|
+
{
|
|
163
|
+
"--currentBg": getColor(currentOption.bg ?? "primary-500"),
|
|
164
|
+
"--currentColor": getColor(currentOption.color ?? "white"),
|
|
165
|
+
} as React.CSSProperties
|
|
166
|
+
}
|
|
167
|
+
>
|
|
168
|
+
<div
|
|
169
|
+
className={cn(
|
|
170
|
+
"fabric-pillHilight",
|
|
171
|
+
"absolute rounded -z-1! top-0 h-full bg-(--currentBg) transition-[background-color,width,left] ease-in-out duration-500",
|
|
172
|
+
autoHide && "not-group-hover:hidden",
|
|
173
|
+
)}
|
|
174
|
+
style={hilightStyle}
|
|
175
|
+
/>
|
|
176
|
+
{options.map((opt, idx) => (
|
|
177
|
+
<button
|
|
178
|
+
key={`${opt.value}`}
|
|
179
|
+
disabled={opt.disabled}
|
|
180
|
+
onClick={() => handleValueChange(opt.value)}
|
|
181
|
+
data-color={opt.color}
|
|
182
|
+
type="button"
|
|
183
|
+
className={cn(
|
|
184
|
+
"fabric-pill",
|
|
185
|
+
"flex justify-center flex-initial has-[.fabric-pillLabel]:px-4 has-[.fabric-pillLabel]:py-1 z-1 rounded not-disabled:cursor-pointer disabled:cursor-not-allowed items-center transition-colors ease-in-out duration-500",
|
|
186
|
+
idx === currentIndex ? "text-(--currentColor)" : "not-disabled:hover:bg-primary-500/20",
|
|
187
|
+
autoHide && idx !== currentIndex && "not-group-hover:hidden",
|
|
188
|
+
opt.disabled && "opacity-50",
|
|
189
|
+
block && "flex-1",
|
|
190
|
+
)}
|
|
191
|
+
>
|
|
192
|
+
{opt.icon && (
|
|
193
|
+
<Icon
|
|
194
|
+
className={cn(
|
|
195
|
+
"fabric-pillIcon",
|
|
196
|
+
"not-has-[~_.fabric-pillLabel]:m-[0.375em] text-[1.125em] has-[~_.fabric-pillLabel]:me-1 inline-block size-[1em] flex-content pointer-events-none",
|
|
197
|
+
)}
|
|
198
|
+
{...getIconProps(opt.icon)}
|
|
199
|
+
/>
|
|
200
|
+
)}
|
|
201
|
+
{opt.label && <span className="fabric-pillLabel flex-initial truncate">{opt.label}</span>}
|
|
202
|
+
</button>
|
|
203
|
+
))}
|
|
204
|
+
</div>
|
|
205
|
+
<StyleEffect />
|
|
206
|
+
</div>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
@@ -21,16 +21,14 @@
|
|
|
21
21
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Format } from "@react-fabric/utilities";
|
|
25
|
-
import classNames from "classnames";
|
|
24
|
+
import { Format, cn } from "@react-fabric/utilities";
|
|
26
25
|
import { useMemoDebugger } from "../../hooks/useEffectDebugger";
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import classes from "./Progress.module.css";
|
|
26
|
+
import type { CustomColors } from "../../types";
|
|
27
|
+
import { getColor } from "../../utils";
|
|
30
28
|
|
|
31
29
|
export interface ProgressProps {
|
|
32
30
|
/**
|
|
33
|
-
* progress value (0-
|
|
31
|
+
* progress value (0-1)
|
|
34
32
|
*/
|
|
35
33
|
value: number;
|
|
36
34
|
/**
|
|
@@ -40,7 +38,7 @@ export interface ProgressProps {
|
|
|
40
38
|
/**
|
|
41
39
|
* color
|
|
42
40
|
*/
|
|
43
|
-
color?:
|
|
41
|
+
color?: CustomColors;
|
|
44
42
|
/**
|
|
45
43
|
* animate
|
|
46
44
|
*/
|
|
@@ -51,7 +49,7 @@ export interface ProgressProps {
|
|
|
51
49
|
label?: string;
|
|
52
50
|
}
|
|
53
51
|
|
|
54
|
-
const SizeMap: KeyValue = {
|
|
52
|
+
const SizeMap: KeyValue<string> = {
|
|
55
53
|
"": "0.875rem",
|
|
56
54
|
xxs: "3px",
|
|
57
55
|
xs: "0.375rem",
|
|
@@ -61,23 +59,28 @@ const SizeMap: KeyValue = {
|
|
|
61
59
|
xl: "2rem",
|
|
62
60
|
};
|
|
63
61
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
/**
|
|
63
|
+
* A component that displays a progress bar indicating the completion percentage of a task or operation.
|
|
64
|
+
* The progress bar is styled with a background color and a track that fills based on the value provided.
|
|
65
|
+
* It can also display a label showing the percentage value.
|
|
66
|
+
* The label can be customized or hidden based on the props provided.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```jsx
|
|
70
|
+
* <ProgressBar value={0.75} size="md" color="primary-500" label="Loading" animate />
|
|
71
|
+
* // Renders a progress bar with 75% completion, medium size, primary color, and a label "Loading"
|
|
72
|
+
*
|
|
73
|
+
* <ProgressBar value={0.5} size="lg" color="success-500" />
|
|
74
|
+
* // Renders a progress bar with 50% completion, large size, and success color without a label
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export function ProgressBar({ value = 0, size, color = "primary-500", label = "", animate }: ProgressProps) {
|
|
71
78
|
/** ***************** make sure value is between 0 and 100 *******************/
|
|
72
|
-
const actualValue = useMemoDebugger(
|
|
73
|
-
() => Math.min(Math.max(value, 0), 100),
|
|
74
|
-
[value],
|
|
75
|
-
"ProgressBar value",
|
|
76
|
-
);
|
|
79
|
+
const actualValue = useMemoDebugger(() => Math.min(Math.max(value, 0), 1), [value], "ProgressBar value");
|
|
77
80
|
|
|
78
81
|
const progressVar = useMemoDebugger<KeyValue>(
|
|
79
82
|
() => ({
|
|
80
|
-
"--progress": actualValue,
|
|
83
|
+
"--progress": actualValue * 100,
|
|
81
84
|
}),
|
|
82
85
|
[actualValue],
|
|
83
86
|
"ProgressBar cssVar",
|
|
@@ -86,13 +89,10 @@ export const ProgressBar = ({
|
|
|
86
89
|
/** ***************** component *******************/
|
|
87
90
|
return (
|
|
88
91
|
<div
|
|
89
|
-
className={
|
|
90
|
-
classes.progressbar,
|
|
91
|
-
getColorClass(color),
|
|
92
|
-
"block bg-dimmed relative rounded font-bold overflow-hidden whitespace-nowrap",
|
|
93
|
-
)}
|
|
92
|
+
className={cn("fabric-progressbar", "block bg-tint-50 relative rounded font-bold overflow-hidden whitespace-nowrap")}
|
|
94
93
|
style={{
|
|
95
94
|
...progressVar,
|
|
95
|
+
color: getColor(color),
|
|
96
96
|
minHeight: SizeMap[size ?? ""],
|
|
97
97
|
fontSize: SizeMap[size ?? ""],
|
|
98
98
|
}}
|
|
@@ -101,22 +101,22 @@ export const ProgressBar = ({
|
|
|
101
101
|
>
|
|
102
102
|
{!["xxs", "xs", "sm"].includes(size ?? "") && (
|
|
103
103
|
<div className="absolute inset-0 text-center z-0 align-top">
|
|
104
|
-
{label} {Format.percent(actualValue
|
|
104
|
+
{label} {Format.percent(actualValue)}
|
|
105
105
|
</div>
|
|
106
106
|
)}
|
|
107
107
|
<div
|
|
108
|
-
className={
|
|
109
|
-
|
|
110
|
-
animate &&
|
|
108
|
+
className={cn(
|
|
109
|
+
"fabric-progressTrack",
|
|
110
|
+
animate && "fabric-progressAnimate",
|
|
111
111
|
"h-full overflow-clip bg-current relative z-0",
|
|
112
112
|
)}
|
|
113
113
|
/>
|
|
114
114
|
{!["xxs", "xs", "sm"].includes(size ?? "") && (
|
|
115
115
|
<div
|
|
116
|
-
className={
|
|
117
|
-
data-label={`${label} ${Format.percent(actualValue
|
|
116
|
+
className={cn("h-full absolute inset-0 overflow-hidden z-1")}
|
|
117
|
+
data-label={`${label} ${Format.percent(actualValue)}`}
|
|
118
118
|
/>
|
|
119
119
|
)}
|
|
120
120
|
</div>
|
|
121
121
|
);
|
|
122
|
-
}
|
|
122
|
+
}
|
|
@@ -21,15 +21,14 @@
|
|
|
21
21
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { Format } from "@react-fabric/utilities";
|
|
25
|
-
import classNames from "classnames";
|
|
24
|
+
import { Format, cn } from "@react-fabric/utilities";
|
|
26
25
|
import { useMemoDebugger } from "../../hooks/useEffectDebugger";
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
26
|
+
import type { CustomColors } from "../../types";
|
|
27
|
+
import { getColor } from "../../utils";
|
|
29
28
|
|
|
30
29
|
export interface ProgressProps {
|
|
31
30
|
/**
|
|
32
|
-
* progress value (0-
|
|
31
|
+
* progress value (0-1)
|
|
33
32
|
*/
|
|
34
33
|
value: number;
|
|
35
34
|
/**
|
|
@@ -39,10 +38,10 @@ export interface ProgressProps {
|
|
|
39
38
|
/**
|
|
40
39
|
* color
|
|
41
40
|
*/
|
|
42
|
-
color?:
|
|
41
|
+
color?: CustomColors;
|
|
43
42
|
}
|
|
44
43
|
|
|
45
|
-
const SizeMap: KeyValue = {
|
|
44
|
+
const SizeMap: KeyValue<string> = {
|
|
46
45
|
"": "1rem",
|
|
47
46
|
sm: "0.875rem",
|
|
48
47
|
md: "1.125rem",
|
|
@@ -50,23 +49,29 @@ const SizeMap: KeyValue = {
|
|
|
50
49
|
xl: "2rem",
|
|
51
50
|
};
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
52
|
+
/**
|
|
53
|
+
* A circular progress indicator that visually represents a percentage of completion.
|
|
54
|
+
* It displays a circular track with a stroke that fills based on the `value` prop.
|
|
55
|
+
* The component is customizable with size and color props.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```jsx
|
|
59
|
+
* <ProgressCircle value={0.75} size="md" color="primary-500" />
|
|
60
|
+
* // Renders a circular progress indicator with 75% completion, medium size, and primary color.
|
|
61
|
+
*
|
|
62
|
+
* <ProgressCircle value={0.5} size="lg" color="secondary-500" />
|
|
63
|
+
* // Renders a circular progress indicator with 50% completion, large size, and secondary color.
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function ProgressCircle({ value = 0, size = "sm", color = "primary-500" }: ProgressProps) {
|
|
58
67
|
/** ***************** make sure value is between 0 and 100 *******************/
|
|
59
|
-
const actualValue = useMemoDebugger(
|
|
60
|
-
() => Math.min(Math.max(value, 0), 100),
|
|
61
|
-
[value],
|
|
62
|
-
"ProgressCirle value",
|
|
63
|
-
);
|
|
68
|
+
const actualValue = useMemoDebugger(() => Math.min(Math.max(value, 0), 1), [value], "ProgressCirle value");
|
|
64
69
|
|
|
65
70
|
/** ***************** calculate stroke offset by actual value *******************/
|
|
66
71
|
const strokeDashoffset = useMemoDebugger(
|
|
67
72
|
() => {
|
|
68
73
|
const circumfrence = Math.PI * 2 * 44;
|
|
69
|
-
return circumfrence * (1 - actualValue
|
|
74
|
+
return circumfrence * (1 - actualValue);
|
|
70
75
|
},
|
|
71
76
|
[actualValue],
|
|
72
77
|
"ProgressCirle dashOffset",
|
|
@@ -75,25 +80,12 @@ export const ProgressCircle = ({
|
|
|
75
80
|
/** ***************** component *******************/
|
|
76
81
|
return (
|
|
77
82
|
<div
|
|
78
|
-
className={
|
|
79
|
-
"inline-block w-[4em] h-[4em] text-lg relative",
|
|
80
|
-
getColorClass(color),
|
|
81
|
-
)}
|
|
83
|
+
className={cn("inline-block w-[4em] h-[4em] text-lg relative")}
|
|
82
84
|
aria-hidden="true"
|
|
83
|
-
style={{ fontSize: SizeMap[size] }}
|
|
85
|
+
style={{ fontSize: SizeMap[size], color: getColor(color) }}
|
|
84
86
|
>
|
|
85
|
-
<svg
|
|
86
|
-
|
|
87
|
-
className={classNames("absolute inset-0 w-full h-full stroke-dimmed")}
|
|
88
|
-
>
|
|
89
|
-
<circle
|
|
90
|
-
cx="50"
|
|
91
|
-
cy="50"
|
|
92
|
-
r="44"
|
|
93
|
-
strokeWidth="12"
|
|
94
|
-
strokeOpacity="0.25"
|
|
95
|
-
fillOpacity="0"
|
|
96
|
-
/>
|
|
87
|
+
<svg viewBox="0 0 100 100" className={cn("absolute inset-0 w-full h-full stroke-tint-500")}>
|
|
88
|
+
<circle cx="50" cy="50" r="44" strokeWidth="12" strokeOpacity="0.25" fillOpacity="0" />
|
|
97
89
|
<circle
|
|
98
90
|
cx="50"
|
|
99
91
|
cy="50"
|
|
@@ -111,8 +103,8 @@ export const ProgressCircle = ({
|
|
|
111
103
|
/>
|
|
112
104
|
</svg>
|
|
113
105
|
<span className="flex w-full h-full items-center justify-center select-none font-bold text-[0.625em]">
|
|
114
|
-
{Format.percent(actualValue
|
|
106
|
+
{Format.percent(actualValue)}
|
|
115
107
|
</span>
|
|
116
108
|
</div>
|
|
117
109
|
);
|
|
118
|
-
}
|
|
110
|
+
}
|
|
@@ -21,36 +21,32 @@
|
|
|
21
21
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { isString } from "@react-fabric/utilities";
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
type CssProp,
|
|
35
|
-
type IconProps,
|
|
36
|
-
type PolymorphicProps,
|
|
37
|
-
type RefProp,
|
|
38
|
-
type TestProps,
|
|
39
|
-
type TooltipProp,
|
|
24
|
+
import { cn, isString } from "@react-fabric/utilities";
|
|
25
|
+
import { Fragment, useMemo } from "react";
|
|
26
|
+
import type {
|
|
27
|
+
CallbackReturn,
|
|
28
|
+
ChildrenProp,
|
|
29
|
+
ColorBase,
|
|
30
|
+
CssPropWithMap,
|
|
31
|
+
PolymorphicProps,
|
|
32
|
+
RefProp,
|
|
33
|
+
TestProps,
|
|
40
34
|
} from "../../types";
|
|
41
|
-
import {
|
|
35
|
+
import { getBadgeProps, getIconProps } from "../../utils";
|
|
36
|
+
import type { BadgeType } from "../badge/Badge";
|
|
37
|
+
import { Badge } from "../badge/Badge";
|
|
42
38
|
import { DropdownTool } from "../dropdown/DropdownTool";
|
|
39
|
+
import type { IconProps } from "../icon/Icon";
|
|
43
40
|
import { Icon } from "../icon/Icon";
|
|
44
|
-
import
|
|
41
|
+
import type { TooltipType } from "../tooltip/Tooltip";
|
|
42
|
+
import { Tooltip } from "../tooltip/Tooltip";
|
|
45
43
|
|
|
46
44
|
export interface TabProps
|
|
47
|
-
extends
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
TestProps
|
|
52
|
-
IconProps,
|
|
53
|
-
TooltipProp {
|
|
45
|
+
extends
|
|
46
|
+
Partial<ChildrenProp>,
|
|
47
|
+
CssPropWithMap<{ root: string; label: string; active: string; badge: string }>,
|
|
48
|
+
RefProp<HTMLButtonElement>,
|
|
49
|
+
TestProps {
|
|
54
50
|
/**
|
|
55
51
|
* tab id
|
|
56
52
|
*/
|
|
@@ -62,11 +58,17 @@ export interface TabProps
|
|
|
62
58
|
/**
|
|
63
59
|
* tab color
|
|
64
60
|
*/
|
|
65
|
-
color?:
|
|
61
|
+
color?: ColorBase;
|
|
62
|
+
/**
|
|
63
|
+
* icon path or props
|
|
64
|
+
*/
|
|
65
|
+
icon?: IconProps;
|
|
66
66
|
/**
|
|
67
67
|
* tab badge
|
|
68
68
|
*/
|
|
69
69
|
badge?: string | number | BadgeType;
|
|
70
|
+
|
|
71
|
+
tooltip?: string | TooltipType;
|
|
70
72
|
/**
|
|
71
73
|
* disabled
|
|
72
74
|
*/
|
|
@@ -75,14 +77,10 @@ export interface TabProps
|
|
|
75
77
|
* tab flex to fill button
|
|
76
78
|
*/
|
|
77
79
|
tabFlex?: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* className for active state
|
|
80
|
-
*/
|
|
81
|
-
activeClassName?: string;
|
|
82
80
|
/**
|
|
83
81
|
* action dropdown body
|
|
84
82
|
*/
|
|
85
|
-
actions?: ReactElement;
|
|
83
|
+
actions?: React.ReactElement;
|
|
86
84
|
/**
|
|
87
85
|
* close handler
|
|
88
86
|
*/
|
|
@@ -93,35 +91,56 @@ export interface TabProps
|
|
|
93
91
|
onClick?: (id: string) => CallbackReturn;
|
|
94
92
|
}
|
|
95
93
|
|
|
96
|
-
|
|
94
|
+
/**
|
|
95
|
+
* A component that represents a tab in a tabbed interface. It can display an icon, label, badge, and actions.
|
|
96
|
+
* It supports polymorphic rendering, allowing it to be rendered as different HTML elements.
|
|
97
|
+
* It also supports tooltips, active states, and click handling.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```jsx
|
|
101
|
+
* <Tab
|
|
102
|
+
* id="tab1"
|
|
103
|
+
* label="Tab 1"
|
|
104
|
+
* icon="home"
|
|
105
|
+
* badge="New"
|
|
106
|
+
* onClick={(id) => console.log(`Tab clicked: ${id}`)}
|
|
107
|
+
* onClose={() => console.log("Tab closed")}
|
|
108
|
+
* active={true}
|
|
109
|
+
* actions={<button>Action</button>}
|
|
110
|
+
* color="primary"
|
|
111
|
+
* tooltip="This is a tab"
|
|
112
|
+
* activeClassName="bg-blue-100"
|
|
113
|
+
* />
|
|
114
|
+
* // Renders a tab with label "Tab 1", home icon, blue background, white text, badge "New",
|
|
115
|
+
* // and an action button. The tab is active and has a tooltip.
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export function Tab<Tag extends React.ElementType = "button">({
|
|
97
119
|
ref,
|
|
98
120
|
as,
|
|
99
121
|
id,
|
|
100
122
|
className,
|
|
123
|
+
classNames,
|
|
101
124
|
label,
|
|
102
125
|
icon,
|
|
103
|
-
iconBg,
|
|
104
|
-
iconColor,
|
|
105
|
-
rtlFlip,
|
|
106
126
|
badge,
|
|
107
127
|
disabled,
|
|
108
128
|
onClose,
|
|
109
|
-
// @ts-expect-error ignore
|
|
110
|
-
active,
|
|
111
|
-
// @ts-expect-error ignore
|
|
112
|
-
minimal,
|
|
113
129
|
onClick,
|
|
114
130
|
tabFlex,
|
|
115
131
|
color,
|
|
116
132
|
actions,
|
|
117
133
|
tooltip,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
// @ts-expect-error ignore
|
|
135
|
+
active,
|
|
136
|
+
...props
|
|
137
|
+
}: TabProps & PolymorphicProps<Tag>): React.ReactElement<TabProps> {
|
|
121
138
|
const badgeProps = useMemo(() => {
|
|
122
139
|
return getBadgeProps(badge);
|
|
123
140
|
}, [badge]);
|
|
124
141
|
|
|
142
|
+
const minimal = useMemo(() => !label, [label]);
|
|
143
|
+
|
|
125
144
|
const tooltipProps = useMemo(() => {
|
|
126
145
|
if (isString(tooltip)) return { content: tooltip };
|
|
127
146
|
|
|
@@ -136,49 +155,41 @@ export const Tab = <Tag extends React.ElementType = "button">({
|
|
|
136
155
|
data-id={id}
|
|
137
156
|
disabled={disabled}
|
|
138
157
|
data-color={color}
|
|
139
|
-
|
|
140
|
-
|
|
158
|
+
data-inner-clickable
|
|
159
|
+
className={cn(
|
|
160
|
+
"fabric-tabButton",
|
|
141
161
|
className,
|
|
142
|
-
|
|
143
|
-
active &&
|
|
162
|
+
classNames?.root,
|
|
163
|
+
!!active && "active pointer-events-none",
|
|
164
|
+
!!active && classNames?.active,
|
|
144
165
|
disabled && "text-tint-500 pointer-events-none",
|
|
145
|
-
tabFlex ? "flex-1" : "flex-initial max-w-36
|
|
146
|
-
|
|
166
|
+
tabFlex ? "flex-1" : "flex-initial max-w-36",
|
|
167
|
+
minimal && "min-w-6",
|
|
168
|
+
"flex items-center min-w-18 justify-center overflow-hidden cursor-pointer group/tool",
|
|
147
169
|
)}
|
|
148
170
|
onClick={() => !active && onClick?.(id)}
|
|
149
|
-
ref={ref
|
|
150
|
-
{...
|
|
171
|
+
ref={ref}
|
|
172
|
+
{...props}
|
|
151
173
|
>
|
|
152
|
-
{icon && (
|
|
153
|
-
|
|
154
|
-
icon={icon}
|
|
155
|
-
bg={iconBg}
|
|
156
|
-
color={iconColor}
|
|
157
|
-
rtlFlip={rtlFlip}
|
|
158
|
-
className="flex-content"
|
|
159
|
-
/>
|
|
160
|
-
)}
|
|
161
|
-
{!minimal && (
|
|
162
|
-
<label className="flex-initial truncate text-center px-1 py-1">
|
|
163
|
-
{label}
|
|
164
|
-
</label>
|
|
165
|
-
)}
|
|
174
|
+
{icon && <Icon className="flex-content p-2" {...getIconProps(icon)} />}
|
|
175
|
+
{!minimal && <label className={cn(classNames?.label, "flex-initial truncate text-center px-1 py-1")}>{label}</label>}
|
|
166
176
|
{badge && (
|
|
167
177
|
<Badge
|
|
168
|
-
{...badgeProps}
|
|
169
|
-
|
|
170
|
-
|
|
178
|
+
{...(badgeProps as AnyObject)}
|
|
179
|
+
inline={!minimal}
|
|
180
|
+
placement={minimal ? "end" : undefined}
|
|
181
|
+
className={cn("me-1", classNames?.badge)}
|
|
171
182
|
/>
|
|
172
183
|
)}
|
|
173
|
-
{actions &&
|
|
174
|
-
<DropdownTool className="bg-
|
|
184
|
+
{actions && (
|
|
185
|
+
<DropdownTool groupHover={!active} className="bg-tint-50/20 me-1 z-5">
|
|
186
|
+
{actions}
|
|
187
|
+
</DropdownTool>
|
|
175
188
|
)}
|
|
176
189
|
{onClose && (
|
|
177
190
|
<span
|
|
178
191
|
role="none"
|
|
179
|
-
className={
|
|
180
|
-
"cursor-pointer me-1 opacity-65 hover:opacity-90 pointer-events-auto",
|
|
181
|
-
)}
|
|
192
|
+
className={cn("cursor-pointer mx-1 opacity-65 hover:opacity-90 pointer-events-auto")}
|
|
182
193
|
onClick={(e) => {
|
|
183
194
|
onClose?.();
|
|
184
195
|
e.stopPropagation();
|
|
@@ -190,4 +201,4 @@ export const Tab = <Tag extends React.ElementType = "button">({
|
|
|
190
201
|
</E>
|
|
191
202
|
</W>
|
|
192
203
|
);
|
|
193
|
-
}
|
|
204
|
+
}
|