@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
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-fabric/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "RUF: Core package",
|
|
5
5
|
"author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"repository": "https://github.com/adarshpastakia/react-
|
|
7
|
+
"repository": "https://github.com/adarshpastakia/react-fabric/tree/main/packages/core",
|
|
8
8
|
"source": "src/index.ts",
|
|
9
9
|
"main": "dist/cjs/index.js",
|
|
10
10
|
"module": "dist/esm/index.js",
|
|
@@ -24,8 +24,6 @@
|
|
|
24
24
|
"registry": "https://registry.npmjs.org/"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
|
-
"makelink": "yarn link",
|
|
28
|
-
"removelink": "yarn unlink",
|
|
29
27
|
"prebuild": "rm -rf ./dist",
|
|
30
28
|
"build:dts": "tsc -p ./tsconfig.build.json",
|
|
31
29
|
"build:rollup": "rollup -c ../../rollup.config.mjs",
|
|
@@ -35,26 +33,36 @@
|
|
|
35
33
|
"watch": "npm-run-all -p watch:rollup watch:dts"
|
|
36
34
|
},
|
|
37
35
|
"dependencies": {
|
|
38
|
-
"@floating-ui/react": "
|
|
39
|
-
"@
|
|
40
|
-
"@
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
36
|
+
"@floating-ui/react": "~0.27.20",
|
|
37
|
+
"@fontsource-variable/alexandria": "~5.3.0",
|
|
38
|
+
"@fontsource-variable/inconsolata": "~5.3.0",
|
|
39
|
+
"@fontsource-variable/merriweather": "~5.3.0",
|
|
40
|
+
"@fontsource-variable/noto-kufi-arabic": "~5.3.0",
|
|
41
|
+
"@fontsource-variable/noto-sans": "~5.3.0",
|
|
42
|
+
"@fontsource/noto-color-emoji": "~5.3.0",
|
|
43
|
+
"@iconify-json/mdi": "~1.2.3",
|
|
44
|
+
"@iconify-json/mdi-light": "~1.2.2",
|
|
45
|
+
"@iconify-json/svg-spinners": "~1.2.4",
|
|
46
|
+
"@iconify-react/line-md": "~1.0.2",
|
|
47
|
+
"@iconify/tailwind4": "~1.2.3",
|
|
48
|
+
"@react-fabric/utilities": "^1.0.1",
|
|
49
|
+
"@tailwindcss/postcss": "~4.3.3",
|
|
50
|
+
"@tanstack/react-hotkeys": "~0.10.0",
|
|
51
|
+
"boring-avatars": "~2.0.4",
|
|
52
|
+
"iconify-icon": "~3.0.2",
|
|
53
|
+
"resize-observer-polyfill": "~1.5.1",
|
|
54
|
+
"sonner": "~2.0.7",
|
|
55
|
+
"tailwindcss": "~4.3.3"
|
|
48
56
|
},
|
|
49
57
|
"peerDependencies": {
|
|
50
|
-
"i18next": "
|
|
51
|
-
"react": "
|
|
52
|
-
"react-dom": "
|
|
53
|
-
"react-i18next": "
|
|
58
|
+
"i18next": "~26.3.6",
|
|
59
|
+
"react": "~19.3.0",
|
|
60
|
+
"react-dom": "~19.3.0",
|
|
61
|
+
"react-i18next": "~17.0.11"
|
|
54
62
|
},
|
|
55
63
|
"engines": {
|
|
56
|
-
"node": ">=
|
|
57
|
-
"npm": ">=
|
|
64
|
+
"node": ">=24.0.0",
|
|
65
|
+
"npm": ">=11.0.0"
|
|
58
66
|
},
|
|
59
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "1419a9df05b5e3850e1d2b4e896ab63df702c7e8"
|
|
60
68
|
}
|
|
@@ -21,22 +21,12 @@
|
|
|
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
|
|
25
|
-
import { useCallback
|
|
26
|
-
import {
|
|
27
|
-
type AriaProps,
|
|
28
|
-
type ChildProp,
|
|
29
|
-
type CssProp,
|
|
30
|
-
type TestProps,
|
|
31
|
-
} from "../../types";
|
|
24
|
+
import { cn } from "@react-fabric/utilities";
|
|
25
|
+
import { useCallback } from "react";
|
|
26
|
+
import type { ChildProp, CssProp, TestProps } from "../../types";
|
|
32
27
|
import { ButtonGroup } from "../button/ButtonGroup";
|
|
33
|
-
import classes from "./ActionLabel.module.css";
|
|
34
28
|
|
|
35
|
-
export interface ActionLabelProps
|
|
36
|
-
extends AriaProps,
|
|
37
|
-
CssProp,
|
|
38
|
-
ChildProp,
|
|
39
|
-
TestProps {
|
|
29
|
+
export interface ActionLabelProps extends CssProp, ChildProp, TestProps {
|
|
40
30
|
/**
|
|
41
31
|
* action buttons aligment
|
|
42
32
|
*/
|
|
@@ -48,24 +38,30 @@ export interface ActionLabelProps
|
|
|
48
38
|
/**
|
|
49
39
|
* buttons
|
|
50
40
|
*/
|
|
51
|
-
actions: ReactElement[];
|
|
41
|
+
actions: React.ReactElement[];
|
|
52
42
|
}
|
|
53
43
|
|
|
54
44
|
/**
|
|
55
|
-
* A
|
|
56
|
-
* useful
|
|
45
|
+
* A label with action buttons that can be aligned to the start or end.
|
|
46
|
+
* This component is useful for displaying a label with associated actions, such as buttons, that can be aligned based on the design requirements.
|
|
47
|
+
* It automatically calculates the width of the action buttons to ensure that the label text does not overflow the container.
|
|
48
|
+
* It uses CSS variables to manage the width of the label text dynamically based on the action buttons' width.
|
|
49
|
+
* This component is designed to be flexible and can be used in various contexts where a label with actions is needed.
|
|
50
|
+
* It supports custom alignment, disabled states, and can be easily styled with additional CSS classes.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```jsx
|
|
54
|
+
* <ActionLabel
|
|
55
|
+
* actions={[<Button>Action 1</Button>, <Button>Action 2</Button>]}
|
|
56
|
+
* align="end"
|
|
57
|
+
* >
|
|
58
|
+
* Label Text
|
|
59
|
+
* </ActionLabel>
|
|
60
|
+
* ```
|
|
57
61
|
*/
|
|
58
|
-
export
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
align,
|
|
62
|
-
actions,
|
|
63
|
-
disabled,
|
|
64
|
-
...rest
|
|
65
|
-
}: ActionLabelProps) => {
|
|
66
|
-
/**
|
|
67
|
-
* calculate the width of the action box, width will be used for a delayed transition on hover
|
|
68
|
-
*/
|
|
62
|
+
export function ActionLabel({ children, className, align, actions, disabled, ...rest }: ActionLabelProps) {
|
|
63
|
+
// Calculate the width of the action buttons to set a CSS variable
|
|
64
|
+
// This is used to ensure the label text does not overflow the container
|
|
69
65
|
const calculateBasis = useCallback((el: HTMLElement | null) => {
|
|
70
66
|
if (el) {
|
|
71
67
|
const clone = el.cloneNode(true) as HTMLElement;
|
|
@@ -82,25 +78,18 @@ export const ActionLabel = ({
|
|
|
82
78
|
|
|
83
79
|
return (
|
|
84
80
|
<div
|
|
85
|
-
className={
|
|
86
|
-
className,
|
|
87
|
-
classes.actionLabel,
|
|
88
|
-
"flex overflow-hidden gap-1 items-center cursor-default select-none",
|
|
89
|
-
)}
|
|
81
|
+
className={cn(className, "fabric-actionLabel", "flex overflow-hidden gap-1 items-center cursor-default select-none")}
|
|
90
82
|
data-disabled={disabled}
|
|
91
83
|
{...rest}
|
|
92
84
|
>
|
|
93
85
|
<ButtonGroup
|
|
94
86
|
ref={calculateBasis}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"overflow-hidden flex-content",
|
|
98
|
-
align === "end" && "order-2",
|
|
99
|
-
)}
|
|
87
|
+
data-inner-clickable
|
|
88
|
+
className={cn("fabric-actions", "overflow-hidden flex-content", align === "end" && "order-2")}
|
|
100
89
|
>
|
|
101
90
|
{actions}
|
|
102
91
|
</ButtonGroup>
|
|
103
92
|
<div className="flex-initial truncate">{children}</div>
|
|
104
93
|
</div>
|
|
105
94
|
);
|
|
106
|
-
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* React Fabric
|
|
3
|
+
* @version: 1.0.0
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
* The MIT License (MIT)
|
|
7
|
+
* Copyright (c) 2024 Adarsh Pastakia
|
|
8
|
+
*
|
|
9
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
10
|
+
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
11
|
+
* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
12
|
+
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
13
|
+
* subject to the following conditions:
|
|
14
|
+
*
|
|
15
|
+
* The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
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.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
FloatingFocusManager,
|
|
26
|
+
FloatingOverlay,
|
|
27
|
+
FloatingPortal,
|
|
28
|
+
useDismiss,
|
|
29
|
+
useFloating,
|
|
30
|
+
useInteractions,
|
|
31
|
+
useRole,
|
|
32
|
+
} from "@floating-ui/react";
|
|
33
|
+
import { cn } from "@react-fabric/utilities";
|
|
34
|
+
import { useLayoutEffect, useMemo, useState } from "react";
|
|
35
|
+
import { useTranslation } from "react-i18next";
|
|
36
|
+
import { AnimationIndicator } from "../../components/animations/Indicator";
|
|
37
|
+
import { Button } from "../../components/button/Button";
|
|
38
|
+
import { Icon } from "../../components/icon/Icon";
|
|
39
|
+
import type { ColorBase } from "../../types";
|
|
40
|
+
import { Title } from "../../typography/Title";
|
|
41
|
+
import { getColor } from "../../utils";
|
|
42
|
+
|
|
43
|
+
interface AlertBaseProps {
|
|
44
|
+
/**
|
|
45
|
+
* toast type
|
|
46
|
+
*/
|
|
47
|
+
type?: "alert" | "confirm" | "prompt";
|
|
48
|
+
/**
|
|
49
|
+
* svg path / webfont className / 1-4 letter text
|
|
50
|
+
*/
|
|
51
|
+
icon?: string;
|
|
52
|
+
/**
|
|
53
|
+
* flip icon in rtl
|
|
54
|
+
*/
|
|
55
|
+
rtlFlip?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* toast title
|
|
58
|
+
*/
|
|
59
|
+
title?: string;
|
|
60
|
+
/**
|
|
61
|
+
* toast text
|
|
62
|
+
*/
|
|
63
|
+
message: string | React.ReactElement;
|
|
64
|
+
/**
|
|
65
|
+
* theme color
|
|
66
|
+
*/
|
|
67
|
+
color?: ColorBase;
|
|
68
|
+
/**
|
|
69
|
+
* extra action button
|
|
70
|
+
*/
|
|
71
|
+
actions?: React.ReactNode;
|
|
72
|
+
/**
|
|
73
|
+
* ok label
|
|
74
|
+
*/
|
|
75
|
+
okLabel?: string;
|
|
76
|
+
/**
|
|
77
|
+
* cancel label
|
|
78
|
+
*/
|
|
79
|
+
cancelLabel?: string;
|
|
80
|
+
/**
|
|
81
|
+
* placeholder for prompt
|
|
82
|
+
*/
|
|
83
|
+
placeholder?: string;
|
|
84
|
+
/**
|
|
85
|
+
* default value for prompt
|
|
86
|
+
*/
|
|
87
|
+
defaultValue?: string;
|
|
88
|
+
multiline?: boolean;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export type AlertProps = AlertBaseProps &
|
|
92
|
+
(
|
|
93
|
+
| {
|
|
94
|
+
type?: "alert";
|
|
95
|
+
okLabel?: string;
|
|
96
|
+
cancelLabel?: never;
|
|
97
|
+
placeholder?: never;
|
|
98
|
+
defaultValue?: never;
|
|
99
|
+
multiline?: never;
|
|
100
|
+
}
|
|
101
|
+
| {
|
|
102
|
+
type: "confirm";
|
|
103
|
+
okLabel?: string;
|
|
104
|
+
cancelLabel?: string;
|
|
105
|
+
placeholder?: never;
|
|
106
|
+
defaultValue?: never;
|
|
107
|
+
multiline?: never;
|
|
108
|
+
}
|
|
109
|
+
| {
|
|
110
|
+
type: "prompt";
|
|
111
|
+
okLabel?: string;
|
|
112
|
+
cancelLabel?: string;
|
|
113
|
+
placeholder?: string;
|
|
114
|
+
defaultValue?: string;
|
|
115
|
+
multiline?: boolean;
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
export function Alert({
|
|
120
|
+
title,
|
|
121
|
+
message,
|
|
122
|
+
color = "primary",
|
|
123
|
+
icon,
|
|
124
|
+
rtlFlip,
|
|
125
|
+
actions,
|
|
126
|
+
onClose,
|
|
127
|
+
type = "alert",
|
|
128
|
+
multiline,
|
|
129
|
+
okLabel,
|
|
130
|
+
cancelLabel,
|
|
131
|
+
placeholder,
|
|
132
|
+
defaultValue,
|
|
133
|
+
}: AlertProps & { onClose?: (ret?: string | boolean) => void }) {
|
|
134
|
+
const { t } = useTranslation("core");
|
|
135
|
+
const [value, setValue] = useState(() => defaultValue);
|
|
136
|
+
const { refs, context } = useFloating({
|
|
137
|
+
open: true,
|
|
138
|
+
onOpenChange: () => {
|
|
139
|
+
handleClose(false);
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
const dismiss = useDismiss(context, {
|
|
143
|
+
outsidePressEvent: "mousedown",
|
|
144
|
+
escapeKey: true,
|
|
145
|
+
});
|
|
146
|
+
const role = useRole(context);
|
|
147
|
+
|
|
148
|
+
// Merge all the interactions into prop getters
|
|
149
|
+
const { getFloatingProps } = useInteractions([dismiss, role]);
|
|
150
|
+
|
|
151
|
+
const iconType = useMemo(() => {
|
|
152
|
+
if (icon) return <Icon icon={icon} size="md" rtlFlip={rtlFlip} color={`${color}-600`} />;
|
|
153
|
+
switch (color) {
|
|
154
|
+
case "danger":
|
|
155
|
+
return <AnimationIndicator type="cross" className="text-danger-600" />;
|
|
156
|
+
case "success":
|
|
157
|
+
return <AnimationIndicator type="check" className="text-success-600" />;
|
|
158
|
+
case "warning":
|
|
159
|
+
return <AnimationIndicator type="exclaim" className="text-warning-600" />;
|
|
160
|
+
default:
|
|
161
|
+
return <AnimationIndicator type={type === "confirm" ? "question" : "info"} className={`text-${color}-600`} />;
|
|
162
|
+
}
|
|
163
|
+
}, [color, type, icon, rtlFlip]);
|
|
164
|
+
|
|
165
|
+
const handleClose = (ret?: string | boolean) => {
|
|
166
|
+
if (refs.floating.current) refs.floating.current.dataset.show = "false";
|
|
167
|
+
setTimeout(() => {
|
|
168
|
+
onClose?.(ret);
|
|
169
|
+
}, 250);
|
|
170
|
+
};
|
|
171
|
+
useLayoutEffect(() => {
|
|
172
|
+
const tmr = setTimeout(() => refs.floating.current && (refs.floating.current.dataset.show = "true"), 100);
|
|
173
|
+
return () => {
|
|
174
|
+
clearTimeout(tmr);
|
|
175
|
+
|
|
176
|
+
try {
|
|
177
|
+
// call on close to kill the promise if unloaded without using close actions
|
|
178
|
+
onClose?.(false);
|
|
179
|
+
} catch {
|
|
180
|
+
//
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}, [refs.floating, onClose]);
|
|
184
|
+
|
|
185
|
+
const E = multiline ? "textarea" : "input";
|
|
186
|
+
|
|
187
|
+
return (
|
|
188
|
+
<FloatingPortal>
|
|
189
|
+
<FloatingOverlay
|
|
190
|
+
lockScroll
|
|
191
|
+
style={{ zIndex: "var(--z-overlay-mask)" }}
|
|
192
|
+
className="bg-tint-100/50 backdrop-blur-sm grid place-items-center"
|
|
193
|
+
>
|
|
194
|
+
<FloatingFocusManager context={context} modal>
|
|
195
|
+
<dialog
|
|
196
|
+
role="alertdialog"
|
|
197
|
+
className={cn(
|
|
198
|
+
"fabric-alert",
|
|
199
|
+
"grid bg-default border-2 pointer-events-auto overflow-hidden rounded-capped select-none",
|
|
200
|
+
"min-w-72 max-w-sm py-2 px-6 relative outline-0 shadow-lg",
|
|
201
|
+
)}
|
|
202
|
+
style={{
|
|
203
|
+
borderColor: getColor(`${color}-300`),
|
|
204
|
+
}}
|
|
205
|
+
ref={(el) => refs.setFloating(el)}
|
|
206
|
+
{...getFloatingProps()}
|
|
207
|
+
>
|
|
208
|
+
<div className={cn("area-[icon] self-start text-2xl")}>{iconType}</div>
|
|
209
|
+
<div className="area-[message]">
|
|
210
|
+
{title && <Title className="font-medium">{title}</Title>}
|
|
211
|
+
<div>{message}</div>
|
|
212
|
+
</div>
|
|
213
|
+
{type === "prompt" && (
|
|
214
|
+
<E
|
|
215
|
+
value={value}
|
|
216
|
+
placeholder={placeholder}
|
|
217
|
+
className={cn(`area-[input] appearance-none outline-0 border rounded w-full px-2 py-1`)}
|
|
218
|
+
style={
|
|
219
|
+
{
|
|
220
|
+
borderColor: getColor(`${color}-200`),
|
|
221
|
+
"--tw-ring-color": getColor(`${color}-500`),
|
|
222
|
+
} as React.CSSProperties
|
|
223
|
+
}
|
|
224
|
+
ref={(e: HTMLInputElement | HTMLTextAreaElement | null) => {
|
|
225
|
+
if (e !== null) setTimeout(() => e.focus(), 100);
|
|
226
|
+
}}
|
|
227
|
+
onBlur={(e) => e.target.focus()}
|
|
228
|
+
onChange={(e) => setValue(e.target.value)}
|
|
229
|
+
onKeyDown={(e) => !e.shiftKey && e.key === "Enter" && handleClose(value)}
|
|
230
|
+
/>
|
|
231
|
+
)}
|
|
232
|
+
<div className="flex gap-1 justify-center flex-nowrap pt-2 area-[actions]">
|
|
233
|
+
{type === "confirm" && (
|
|
234
|
+
<Button size="sm" variant="link" color={color} onClick={() => handleClose(false)}>
|
|
235
|
+
{cancelLabel ?? t("action.cancel", "Cancel")}
|
|
236
|
+
</Button>
|
|
237
|
+
)}
|
|
238
|
+
<div className="contents" onClickCapture={(e) => handleClose((e.target as HTMLElement).dataset.value)}>
|
|
239
|
+
{actions}
|
|
240
|
+
</div>
|
|
241
|
+
<Button size="sm" variant="solid" color={color} onClick={() => handleClose(type === "prompt" ? value : true)}>
|
|
242
|
+
{okLabel ?? t("action.ok", "OK")}
|
|
243
|
+
</Button>
|
|
244
|
+
</div>
|
|
245
|
+
<div className="absolute top-2 inset-e-0">
|
|
246
|
+
<Button
|
|
247
|
+
size="sm"
|
|
248
|
+
variant="link"
|
|
249
|
+
className="m-0"
|
|
250
|
+
color={color}
|
|
251
|
+
onClick={() => handleClose(false)}
|
|
252
|
+
icon="icon-[mdi--close]"
|
|
253
|
+
aria-label="close"
|
|
254
|
+
/>
|
|
255
|
+
</div>
|
|
256
|
+
</dialog>
|
|
257
|
+
</FloatingFocusManager>
|
|
258
|
+
</FloatingOverlay>
|
|
259
|
+
</FloatingPortal>
|
|
260
|
+
);
|
|
261
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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 AlertCircleIcon from "@iconify-react/line-md/alert-circle";
|
|
27
|
+
import CloseCircleIcon from "@iconify-react/line-md/close-circle";
|
|
28
|
+
import ConfirmCircleIcon from "@iconify-react/line-md/confirm-circle";
|
|
29
|
+
import QuestionCircleIcon from "@iconify-react/line-md/question-circle";
|
|
30
|
+
import type { CssProp } from "../../types";
|
|
31
|
+
import { Icon } from "../icon/Icon";
|
|
32
|
+
|
|
33
|
+
export interface AnimationIndicatorProps extends CssProp {
|
|
34
|
+
/**
|
|
35
|
+
* The indicator icon type. Each type maps to a distinct status icon.
|
|
36
|
+
* Defaults to `"info"`.
|
|
37
|
+
*/
|
|
38
|
+
type?: "info" | "check" | "cross" | "question" | "exclaim";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const ANIMATION_ICONS = {
|
|
42
|
+
info: <AlertCircleIcon height="1.25em" width="1.25em" className="rotate-180" />,
|
|
43
|
+
check: <ConfirmCircleIcon height="1.25em" width="1.25em" />,
|
|
44
|
+
cross: <CloseCircleIcon height="1.25em" width="1.25em" />,
|
|
45
|
+
question: <QuestionCircleIcon height="1.25em" width="1.25em" />,
|
|
46
|
+
exclaim: <AlertCircleIcon height="1.25em" width="1.25em" />,
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Animated status indicator that renders a themed icon with animation.
|
|
51
|
+
*
|
|
52
|
+
* Renders one of five predefined icon types (check, cross, question, exclaim, info)
|
|
53
|
+
* using the `Icon` component. Useful for displaying success, error, help, alert,
|
|
54
|
+
* or info states in forms, notifications, and feedback UI.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```tsx
|
|
58
|
+
* import { AnimationIndicator } from "@react-fabric/core";
|
|
59
|
+
*
|
|
60
|
+
* // Success indicator
|
|
61
|
+
* <AnimationIndicator type="check" color="success-500" />
|
|
62
|
+
*
|
|
63
|
+
* // Error indicator
|
|
64
|
+
* <AnimationIndicator type="cross" color="error-500" />
|
|
65
|
+
*
|
|
66
|
+
* // Warning indicator
|
|
67
|
+
* <AnimationIndicator type="exclaim" color="warning-500" />
|
|
68
|
+
*
|
|
69
|
+
* // Help indicator
|
|
70
|
+
* <AnimationIndicator type="question" />
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function AnimationIndicator({ type, ...props }: AnimationIndicatorProps) {
|
|
74
|
+
// Map the type to its corresponding icon and delegate rendering to the Icon component
|
|
75
|
+
return <Icon {...props} icon={ANIMATION_ICONS[type || "info"]} />;
|
|
76
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
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 type { CustomColors } from "../../types/colors";
|
|
28
|
+
import { getColor } from "../../utils";
|
|
29
|
+
|
|
30
|
+
export interface AnimationLoaderProps {
|
|
31
|
+
/**
|
|
32
|
+
* CSS class name for the icon to display (e.g., an iconify icon class like `"icon-[mdi--loading]"`).
|
|
33
|
+
*/
|
|
34
|
+
icon: string;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Blur intensity for the background mask. Defaults to no blur.
|
|
38
|
+
*/
|
|
39
|
+
maskBlur?: "sm" | "md" | "lg";
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Icon color. Accepts palette tokens or any CSS color. Defaults to `"tint-300"`.
|
|
43
|
+
*/
|
|
44
|
+
color?: CustomColors;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Icon size. Accepts CSS size values (px, em, rem). Defaults to `"2rem"`.
|
|
48
|
+
*/
|
|
49
|
+
size?: number | string;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Loading overlay that renders an animated icon over a blurred backdrop.
|
|
54
|
+
*
|
|
55
|
+
* Renders a centered icon inside a frosted-glass mask, typically used to
|
|
56
|
+
* indicate loading or disabled states. The mask covers its parent element
|
|
57
|
+
* and prevents user interaction while visible.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* import { AnimationLoader } from "@react-fabric/core";
|
|
62
|
+
*
|
|
63
|
+
* // Loading overlay with medium blur
|
|
64
|
+
* <div style={{ position: "relative" }}>
|
|
65
|
+
* <p>Page content</p>
|
|
66
|
+
* <AnimationLoader icon="icon-[mdi--loading]" maskBlur="md" />
|
|
67
|
+
* </div>
|
|
68
|
+
*
|
|
69
|
+
* // Custom color and size
|
|
70
|
+
* <AnimationLoader icon="icon-[mdi--loading]" color="primary-500" size="3rem" />
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function AnimationLoader({ color = "tint-500", size = "2rem", icon, maskBlur }: AnimationLoaderProps) {
|
|
74
|
+
return (
|
|
75
|
+
<div
|
|
76
|
+
className={cn(
|
|
77
|
+
"fabric-loader-mask",
|
|
78
|
+
"absolute inset-0 z-10 flex justify-center items-center cursor-wait",
|
|
79
|
+
maskBlur === "sm" && "backdrop-blur-sm",
|
|
80
|
+
maskBlur === "md" && "backdrop-blur-md",
|
|
81
|
+
maskBlur === "lg" && "backdrop-blur-lg",
|
|
82
|
+
)}
|
|
83
|
+
>
|
|
84
|
+
<div data-ref="loader" className="outline outline-tint-300/50 p-4 bg-white/50 dark:bg-black/50 backdrop-blur-xs leading-0 rounded">
|
|
85
|
+
<div className={cn(icon, "aspect-square")} style={{ fontSize: size, color: getColor(color) }} />
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 type { CustomColors } from "../../types";
|
|
27
|
+
import { AnimationLoader } from "./Loader";
|
|
28
|
+
|
|
29
|
+
export interface LoadingBarsProps {
|
|
30
|
+
/**
|
|
31
|
+
* Spinner color. Accepts palette tokens or any CSS color.
|
|
32
|
+
*/
|
|
33
|
+
color?: CustomColors;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Spinner size. Accepts CSS size values (px, em, rem).
|
|
37
|
+
*/
|
|
38
|
+
size?: number | string;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Blur intensity for the background mask. Defaults to no blur.
|
|
42
|
+
*/
|
|
43
|
+
maskBlur?: "sm" | "md" | "lg";
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Animated loading indicator that renders a "bars scale fade" spinner.
|
|
48
|
+
*
|
|
49
|
+
* A thin wrapper around `AnimationLoader` that provides a pre-configured
|
|
50
|
+
* bars-style loading animation. Useful for inline loading indicators in
|
|
51
|
+
* forms, tables, or content areas.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* import { LoadingBars } from "@react-fabric/core";
|
|
56
|
+
*
|
|
57
|
+
* // Basic bars spinner
|
|
58
|
+
* <LoadingBars />
|
|
59
|
+
*
|
|
60
|
+
* // Custom color and size
|
|
61
|
+
* <LoadingBars color="primary-500" size="2rem" />
|
|
62
|
+
*
|
|
63
|
+
* // With backdrop blur
|
|
64
|
+
* <LoadingBars maskBlur="sm" />
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export function LoadingBars(props: LoadingBarsProps) {
|
|
68
|
+
// Delegate to AnimationLoader with a pre-configured bars-scale-fade icon
|
|
69
|
+
return <AnimationLoader icon="icon-[svg-spinners--bars-scale-fade]" {...props} />;
|
|
70
|
+
}
|