@react-fabric/core 1.0.0-beta.8 → 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,239 @@
|
|
|
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 { isString, shortHash } from "@react-fabric/utilities";
|
|
27
|
+
import { useEffect, useRef } from "react";
|
|
28
|
+
import type { ToastT } from "sonner";
|
|
29
|
+
import { toast, useSonner } from "sonner";
|
|
30
|
+
import type { AlertProps } from "../components/alert/Alert";
|
|
31
|
+
import { Alert } from "../components/alert/Alert";
|
|
32
|
+
import { useGlobals } from "../context/context";
|
|
33
|
+
import { useIsRtl } from "./useIsRtl";
|
|
34
|
+
|
|
35
|
+
type POSITION = "top" | "bottom";
|
|
36
|
+
|
|
37
|
+
const DEFAULT_DURATION = 5000;
|
|
38
|
+
|
|
39
|
+
const TOAST_POSITIONS_LTR = {
|
|
40
|
+
top: "top-right",
|
|
41
|
+
bottom: "bottom-right",
|
|
42
|
+
};
|
|
43
|
+
const TOAST_POSITIONS_RTL = {
|
|
44
|
+
top: "top-left",
|
|
45
|
+
bottom: "bottom-left",
|
|
46
|
+
};
|
|
47
|
+
const MESSAGE_POSITIONS = {
|
|
48
|
+
top: "top-center",
|
|
49
|
+
bottom: "bottom-center",
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
interface Action {
|
|
53
|
+
label: string;
|
|
54
|
+
onClick: () => void;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface ToastProps {
|
|
58
|
+
message: string;
|
|
59
|
+
type?: "info" | "error" | "success" | "warning";
|
|
60
|
+
position?: POSITION;
|
|
61
|
+
icon?: React.ReactElement;
|
|
62
|
+
description?: string;
|
|
63
|
+
actions?: Action[];
|
|
64
|
+
link?: Action;
|
|
65
|
+
duration?: number;
|
|
66
|
+
}
|
|
67
|
+
interface MessageProps {
|
|
68
|
+
message: string;
|
|
69
|
+
type?: "info" | "error" | "success" | "warning";
|
|
70
|
+
position?: POSITION;
|
|
71
|
+
icon?: React.ReactElement;
|
|
72
|
+
link?: Action;
|
|
73
|
+
duration?: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function useNotificationService() {
|
|
77
|
+
const isRtl = useIsRtl();
|
|
78
|
+
const { toasts } = useSonner();
|
|
79
|
+
const toastRef = useRef(toasts);
|
|
80
|
+
const { showAlert } = useGlobals();
|
|
81
|
+
|
|
82
|
+
const makeToastOptions = (options: string | ToastProps, promiseId?: string) => {
|
|
83
|
+
const opts = isString(options) ? { message: options } : options;
|
|
84
|
+
const id = promiseId ?? shortHash();
|
|
85
|
+
const duration = opts.duration ?? DEFAULT_DURATION;
|
|
86
|
+
return {
|
|
87
|
+
message: (
|
|
88
|
+
<>
|
|
89
|
+
<div>{opts.message}</div>
|
|
90
|
+
<button data-button data-close-all onClick={c}>
|
|
91
|
+
Close All
|
|
92
|
+
</button>
|
|
93
|
+
</>
|
|
94
|
+
),
|
|
95
|
+
id,
|
|
96
|
+
position: (isRtl ? TOAST_POSITIONS_RTL : TOAST_POSITIONS_LTR)[opts.position ?? "top"] as ToastT["position"],
|
|
97
|
+
icon: opts.icon,
|
|
98
|
+
toasterId: "toasting",
|
|
99
|
+
closeButton: true,
|
|
100
|
+
action: (opts.actions || opts.link) && (
|
|
101
|
+
<div data-actionbar>
|
|
102
|
+
{opts.actions?.map((act) => (
|
|
103
|
+
<button key={act.label} data-button data-action onClick={() => (act.onClick(), toast.dismiss(id))}>
|
|
104
|
+
{act.label}
|
|
105
|
+
</button>
|
|
106
|
+
))}
|
|
107
|
+
{opts.link && (
|
|
108
|
+
<button key={opts.link.label} data-link data-action onClick={() => (opts.link?.onClick(), toast.dismiss(id))}>
|
|
109
|
+
{opts.link.label}
|
|
110
|
+
</button>
|
|
111
|
+
)}
|
|
112
|
+
</div>
|
|
113
|
+
),
|
|
114
|
+
className: duration > 0 ? "progress" : undefined,
|
|
115
|
+
style: {
|
|
116
|
+
"--sonner-duration": duration,
|
|
117
|
+
} as React.CSSProperties,
|
|
118
|
+
description: opts.description,
|
|
119
|
+
duration: duration === 0 ? Infinity : duration,
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
const makeMessageOptions = (options: string | MessageProps) => {
|
|
124
|
+
const opts = isString(options) ? { message: options } : options;
|
|
125
|
+
const id = shortHash();
|
|
126
|
+
const duration = opts.duration ?? DEFAULT_DURATION;
|
|
127
|
+
return {
|
|
128
|
+
message: (
|
|
129
|
+
<>
|
|
130
|
+
<div>{opts.message}</div>
|
|
131
|
+
<button data-button data-close-all onClick={c}>
|
|
132
|
+
Close All
|
|
133
|
+
</button>
|
|
134
|
+
</>
|
|
135
|
+
),
|
|
136
|
+
id,
|
|
137
|
+
position: MESSAGE_POSITIONS[opts.position ?? "top"] as ToastT["position"],
|
|
138
|
+
icon: opts.icon,
|
|
139
|
+
toasterId: "toasting",
|
|
140
|
+
closeButton: true,
|
|
141
|
+
action: opts.link && (
|
|
142
|
+
<div data-actionbar>
|
|
143
|
+
{opts.link && (
|
|
144
|
+
<button key={opts.link.label} data-link data-action onClick={() => (opts.link?.onClick(), toast.dismiss(id))}>
|
|
145
|
+
{opts.link.label}
|
|
146
|
+
</button>
|
|
147
|
+
)}
|
|
148
|
+
</div>
|
|
149
|
+
),
|
|
150
|
+
className: duration > 0 ? "progress" : undefined,
|
|
151
|
+
style: {
|
|
152
|
+
"--sonner-duration": duration,
|
|
153
|
+
} as React.CSSProperties,
|
|
154
|
+
duration: duration === 0 ? Infinity : duration,
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
toastRef.current = toasts;
|
|
160
|
+
}, [toasts]);
|
|
161
|
+
|
|
162
|
+
const c = () => {
|
|
163
|
+
showAlert();
|
|
164
|
+
toastRef.current.forEach((t) => {
|
|
165
|
+
if (t.toasterId === "toasting" && !t.promise) toast.dismiss(t.id);
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const t = (props: string | ToastProps) => {
|
|
170
|
+
const opts = makeToastOptions(props);
|
|
171
|
+
const tt = !isString(props) && props.type ? toast[props.type] : toast;
|
|
172
|
+
tt(opts.message, opts);
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const m = (props: string | MessageProps) => {
|
|
176
|
+
const opts = makeMessageOptions(props);
|
|
177
|
+
const tt = !isString(props) && props.type ? toast[props.type] : toast;
|
|
178
|
+
tt(opts.message, opts);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
const p = (
|
|
182
|
+
promise: Promise<string | ToastProps>,
|
|
183
|
+
props?: {
|
|
184
|
+
loading?: string;
|
|
185
|
+
position?: "top" | "bottom";
|
|
186
|
+
onCancel?: () => void;
|
|
187
|
+
},
|
|
188
|
+
) => {
|
|
189
|
+
const id = shortHash();
|
|
190
|
+
toast.loading(
|
|
191
|
+
<div className="flex items-center">
|
|
192
|
+
<div className="flex-1">{props?.loading ?? "Loading"}</div>
|
|
193
|
+
{props?.onCancel && (
|
|
194
|
+
<button
|
|
195
|
+
data-button
|
|
196
|
+
data-cancel
|
|
197
|
+
onClick={() => {
|
|
198
|
+
void Promise.resolve(props.onCancel?.()).finally(() => {
|
|
199
|
+
toast.dismiss(id);
|
|
200
|
+
});
|
|
201
|
+
}}
|
|
202
|
+
>
|
|
203
|
+
Cancel
|
|
204
|
+
</button>
|
|
205
|
+
)}
|
|
206
|
+
</div>,
|
|
207
|
+
{
|
|
208
|
+
id,
|
|
209
|
+
toasterId: "toasting",
|
|
210
|
+
position: (isRtl ? TOAST_POSITIONS_RTL : TOAST_POSITIONS_LTR)[props?.position ?? "bottom"] as ToastT["position"],
|
|
211
|
+
},
|
|
212
|
+
);
|
|
213
|
+
void promise
|
|
214
|
+
.then((props) => {
|
|
215
|
+
const opts = makeToastOptions(props, id);
|
|
216
|
+
toast.success(opts.message, opts);
|
|
217
|
+
})
|
|
218
|
+
.catch((props: string | ToastProps) => {
|
|
219
|
+
if (props) {
|
|
220
|
+
const opts = makeToastOptions(props, id);
|
|
221
|
+
toast.error(opts.message, opts);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
const a = (props: AlertProps) => {
|
|
227
|
+
return new Promise((r) => {
|
|
228
|
+
showAlert(<Alert {...props} onClose={(ret) => (r(ret), showAlert())} />);
|
|
229
|
+
});
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
return {
|
|
233
|
+
alert: a,
|
|
234
|
+
toast: t,
|
|
235
|
+
message: m,
|
|
236
|
+
promise: p,
|
|
237
|
+
closeAll: c,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
@@ -21,31 +21,78 @@
|
|
|
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
|
|
24
|
+
import type { JSX } from "react";
|
|
25
|
+
import { useCallback, useRef, useState } from "react";
|
|
26
|
+
import type { ModalProps } from "../types";
|
|
25
27
|
|
|
26
|
-
type
|
|
27
|
-
onClose: (args?: AnyObject) => void;
|
|
28
|
-
[key: string]: AnyObject;
|
|
29
|
-
}>;
|
|
28
|
+
type OverlayProps<P, T> = Partial<ModalProps<P, T>>;
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Hook to manage overlay components like modals or flyouts.
|
|
32
|
+
* It provides a way to open an overlay with specified properties and handle its closure.
|
|
33
|
+
* This hook returns the current overlay component and a function to open it with props.
|
|
34
|
+
* It is useful for scenarios where you need to display overlays dynamically,
|
|
35
|
+
* such as modals, flyouts, or any other overlay components in a React application.
|
|
36
|
+
* The `openOverlay` function returns a promise that resolves with the result
|
|
37
|
+
* of the overlay when it is closed, allowing you to handle the result in a controlled manner.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```jsx
|
|
41
|
+
* const [Overlay, openOverlay] = useOverlayService(MyModalComponent);
|
|
42
|
+
* // To open the overlay:
|
|
43
|
+
* const handleOpen = async () => {
|
|
44
|
+
* const result = await openOverlay({ title: "My Modal", content: "Hello World" });
|
|
45
|
+
* console.log(result); // Handle the result from the overlay
|
|
46
|
+
* };
|
|
47
|
+
* <button onClick={handleOpen}>Open Modal</button>
|
|
48
|
+
* <Overlay />
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function useOverlayService<P extends AnyObject = AnyObject, T extends AnyObject = AnyObject>(
|
|
52
|
+
OverlayComponent: React.FunctionComponent<ModalProps<P, T>>,
|
|
33
53
|
): [
|
|
34
|
-
|
|
35
|
-
openOverlay: (props?:
|
|
36
|
-
|
|
37
|
-
|
|
54
|
+
renderOverlay: (props?: OverlayProps<P, T>) => JSX.Element | null,
|
|
55
|
+
openOverlay: (props?: OverlayProps<P, T>) => Promise<T | null>,
|
|
56
|
+
closeOverlay: ((args: T | null) => void) | null,
|
|
57
|
+
] {
|
|
58
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
59
|
+
const [modalProps, setModalProps] = useState<OverlayProps<P, T>>({} as OverlayProps<P, T>);
|
|
60
|
+
const existingOpenPromiseRef = useRef<(args: T | null, onClose?: (args: T | null) => void) => void>(null);
|
|
38
61
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
62
|
+
// Open modal and optionally pass dynamic props down to it
|
|
63
|
+
const openOverlay = useCallback(async (props: OverlayProps<P, T> = {}) => {
|
|
64
|
+
setModalProps(props);
|
|
65
|
+
setIsOpen(true);
|
|
66
|
+
return await new Promise<T | null>((resolve) => {
|
|
67
|
+
existingOpenPromiseRef.current = (args: T | null) => {
|
|
43
68
|
resolve(args);
|
|
44
|
-
onClose?.(args);
|
|
69
|
+
props?.onClose?.(args);
|
|
70
|
+
setIsOpen(false);
|
|
71
|
+
setModalProps({});
|
|
72
|
+
existingOpenPromiseRef.current = null;
|
|
45
73
|
};
|
|
46
|
-
setOverlay(<ModalOrFlyout {...props} onClose={handleClose} />);
|
|
47
74
|
});
|
|
48
|
-
};
|
|
75
|
+
}, []);
|
|
76
|
+
|
|
77
|
+
const closeOverlay = useCallback((args: T | null) => {
|
|
78
|
+
existingOpenPromiseRef.current?.(args);
|
|
79
|
+
}, []);
|
|
80
|
+
|
|
81
|
+
// A wrapper component that handles the Portal attachment safely
|
|
82
|
+
const renderOverlay = useCallback(
|
|
83
|
+
(props: OverlayProps<P, T> = {}) => {
|
|
84
|
+
if (!isOpen) return null;
|
|
85
|
+
return (
|
|
86
|
+
// @ts-expect-error ignore
|
|
87
|
+
<OverlayComponent
|
|
88
|
+
{...props}
|
|
89
|
+
{...modalProps}
|
|
90
|
+
onClose={(args) => existingOpenPromiseRef.current?.(args, props.onClose)}
|
|
91
|
+
/>
|
|
92
|
+
);
|
|
93
|
+
},
|
|
94
|
+
[OverlayComponent, isOpen, modalProps],
|
|
95
|
+
);
|
|
49
96
|
|
|
50
|
-
return [
|
|
51
|
-
}
|
|
97
|
+
return [renderOverlay, openOverlay, closeOverlay];
|
|
98
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
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 { isEqual } from "@react-fabric/utilities";
|
|
27
|
+
import { useRef, useState } from "react";
|
|
28
|
+
|
|
29
|
+
export function usePropState<T>(value: T, callback?: (value: T) => void) {
|
|
30
|
+
const currentRef = useRef(value);
|
|
31
|
+
const [state, setState] = useState(() => value);
|
|
32
|
+
|
|
33
|
+
if (!isEqual(currentRef.current, value)) {
|
|
34
|
+
currentRef.current = value;
|
|
35
|
+
setState(value);
|
|
36
|
+
callback?.(value);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return [state, setState] as [T, React.Dispatch<React.SetStateAction<T>>];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function usePropWatcher<T>(value: T, ...args: unknown[]) {
|
|
43
|
+
const currentRef = useRef(args);
|
|
44
|
+
const [state, setState] = useState(() => value);
|
|
45
|
+
|
|
46
|
+
if (!isEqual(currentRef.current, args)) {
|
|
47
|
+
currentRef.current = args;
|
|
48
|
+
setState(value);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return [state, setState] as [T, React.Dispatch<React.SetStateAction<T>>];
|
|
52
|
+
}
|
|
@@ -1,61 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* React Fabric
|
|
3
|
-
* @version
|
|
4
|
-
*
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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:
|
|
8
13
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
|
-
import { useCallback
|
|
25
|
-
import {
|
|
26
|
+
import { useCallback } from "react";
|
|
27
|
+
import { usePropState } from "./usePropState";
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
|
-
* hook to
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* @
|
|
30
|
+
* This hook is used to manage a toggle state based on a prop value.
|
|
31
|
+
* It allows you to toggle the state and also provides a reference to the current state.
|
|
32
|
+
* It is useful for scenarios where you want to control a toggle state from a parent component while also allowing local toggling.
|
|
33
|
+
*
|
|
34
|
+
* @param isOn - The initial state of the toggle.
|
|
35
|
+
* @param onToggle - A callback function that is called when the toggle state changes.
|
|
36
|
+
* @param key - A unique key to identify the toggle state.
|
|
37
|
+
* @returns A tuple containing the current toggle state, a function to toggle the state, and a reference to the current state.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```jsx
|
|
41
|
+
* const [isToggled, toggle, toggleRef] = usePropToggle(false, (newState) => {
|
|
42
|
+
* console.log("Toggle state changed to:", newState);
|
|
43
|
+
* });
|
|
44
|
+
* toggle(); // This will toggle the state and call the onToggle callback
|
|
45
|
+
* ```
|
|
33
46
|
*/
|
|
34
|
-
export
|
|
47
|
+
export function usePropToggle(
|
|
35
48
|
isOn = false,
|
|
36
|
-
onToggle?: (is: boolean, key?: string) => unknown,
|
|
37
|
-
key?: string,
|
|
38
|
-
): [boolean, () => void
|
|
39
|
-
const
|
|
40
|
-
const [toggleOn, setToggleOn] = useState(isOn);
|
|
49
|
+
onToggle?: (is: boolean, key?: string | number) => unknown,
|
|
50
|
+
key?: string | number,
|
|
51
|
+
): [boolean, (toggle?: boolean) => void] {
|
|
52
|
+
const [toggleOn, setToggleOn] = usePropState(isOn);
|
|
41
53
|
|
|
42
|
-
/** *****************
|
|
43
|
-
|
|
44
|
-
() => {
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
/** ***************** toggle handler *******************/
|
|
55
|
+
const doToggle = useCallback(
|
|
56
|
+
(toggle?: boolean) => {
|
|
57
|
+
setToggleOn((toggleOn) => {
|
|
58
|
+
if (onToggle?.(toggle ?? !toggleOn, key) !== false) {
|
|
59
|
+
return toggle ?? !toggleOn;
|
|
60
|
+
}
|
|
61
|
+
return toggleOn;
|
|
62
|
+
});
|
|
47
63
|
},
|
|
48
|
-
[
|
|
49
|
-
"usePropToggle",
|
|
64
|
+
[setToggleOn, onToggle, key],
|
|
50
65
|
);
|
|
51
66
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (onToggle?.(!toggleOn, key) !== false) {
|
|
55
|
-
toggleRef.current = !toggleOn;
|
|
56
|
-
setToggleOn(!toggleOn);
|
|
57
|
-
}
|
|
58
|
-
}, [toggleOn, onToggle, key]);
|
|
59
|
-
|
|
60
|
-
return [toggleOn, doToggle, toggleRef];
|
|
61
|
-
};
|
|
67
|
+
return [toggleOn, doToggle];
|
|
68
|
+
}
|
package/src/hooks/useResize.ts
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* React Fabric
|
|
3
|
-
* @version
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
4
6
|
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
5
13
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
8
16
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* portions of the Software.
|
|
17
|
-
*
|
|
18
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
19
|
-
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
20
|
-
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
-
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
|
-
import { useCallback, useRef,
|
|
26
|
+
import { useCallback, useRef, useState } from "react";
|
|
25
27
|
import { useIsRtl } from "./useIsRtl";
|
|
26
28
|
|
|
27
29
|
interface Options {
|
|
@@ -43,48 +45,70 @@ interface Options {
|
|
|
43
45
|
onEnd?: () => void;
|
|
44
46
|
}
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Custom hook to handle resizing of an element.
|
|
50
|
+
* It provides a ref to the element and a mouse down event handler to initiate resizing.
|
|
51
|
+
* The resizing is done by tracking mouse movements and calculating the difference in x and y coordinates.
|
|
52
|
+
* It supports both horizontal and vertical resizing, and can be configured to reverse the direction based on RTL (Right-to-Left) layout.
|
|
53
|
+
*
|
|
54
|
+
* @param onResize - Callback function to handle the resize difference.
|
|
55
|
+
* @param options - Options for the resizing behavior.
|
|
56
|
+
* @returns An object containing the ref to the element, a boolean indicating if resizing is in progress, and a mouse down event handler.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```jsx
|
|
60
|
+
* const { ref, onMouseDown } = useResize((diff) => {
|
|
61
|
+
* console.log("Resize difference:", diff);
|
|
62
|
+
* }, { isReverse: true, isVertical: false });
|
|
63
|
+
* <div ref={ref} onMouseDown={onMouseDown}>Resize Me</div>
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export function useResize<T extends HTMLElement = HTMLDivElement>(
|
|
47
67
|
onResize: (diff: { x: number; y: number }) => void,
|
|
48
68
|
{ isReverse = false, isVertical = false, onStart, onEnd }: Options,
|
|
49
|
-
): { ref: RefObject<T>; onMouseDown: React.MouseEventHandler }
|
|
50
|
-
const
|
|
69
|
+
): { ref: React.RefObject<T | null>; isResizing: boolean; onMouseDown: React.MouseEventHandler } {
|
|
70
|
+
const elRef = useRef<T>(null);
|
|
51
71
|
const isRtl = useIsRtl();
|
|
72
|
+
const [isResizing, setIsResizing] = useState(false);
|
|
52
73
|
|
|
53
|
-
const
|
|
54
|
-
(
|
|
55
|
-
if
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
},
|
|
66
|
-
[onResize, isRtl, isReverse],
|
|
67
|
-
);
|
|
74
|
+
const onResizingRef = useRef((evt: MouseEvent) => {
|
|
75
|
+
if (elRef.current != null) {
|
|
76
|
+
/** ***************** check if reverse enabled of RTL *******************/
|
|
77
|
+
const reversed = ((isRtl ? 1 : 0) ^ (isReverse ? 1 : 0)) === 1;
|
|
78
|
+
const box = elRef.current?.getBoundingClientRect();
|
|
79
|
+
const diffX = isReverse ? box.left : box.right;
|
|
80
|
+
const diffY = isReverse ? box.top : box.bottom;
|
|
81
|
+
const x = (evt.clientX - diffX) * (reversed ? -1 : 1);
|
|
82
|
+
const y = (evt.clientY - diffY) * (isReverse ? -1 : 1);
|
|
83
|
+
onResize({ x, y });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
68
86
|
|
|
69
87
|
/** ***************** dettach handlers on mouseup *******************/
|
|
70
|
-
const
|
|
88
|
+
const onResizeEndRef = useRef(() => {
|
|
71
89
|
document.body.style.cursor = "unset";
|
|
72
|
-
document.
|
|
73
|
-
document.removeEventListener("
|
|
90
|
+
document.body.style.userSelect = "unset";
|
|
91
|
+
document.removeEventListener("mousemove", onResizingRef.current);
|
|
92
|
+
document.removeEventListener("mouseup", onResizeEndRef.current);
|
|
93
|
+
setIsResizing(false);
|
|
74
94
|
onEnd?.();
|
|
75
|
-
}
|
|
95
|
+
});
|
|
76
96
|
|
|
77
97
|
/** ***************** attach handlers on mousedown *******************/
|
|
78
98
|
const onResizeStart = useCallback(
|
|
79
99
|
(e: React.MouseEvent) => {
|
|
100
|
+
if (e.button !== 0) return;
|
|
80
101
|
e.preventDefault();
|
|
102
|
+
e.stopPropagation();
|
|
103
|
+
document.body.style.userSelect = "none";
|
|
81
104
|
document.body.style.cursor = isVertical ? "row-resize" : "col-resize";
|
|
82
|
-
document.addEventListener("mousemove",
|
|
83
|
-
document.addEventListener("mouseup",
|
|
105
|
+
document.addEventListener("mousemove", onResizingRef.current);
|
|
106
|
+
document.addEventListener("mouseup", onResizeEndRef.current);
|
|
107
|
+
setIsResizing(true);
|
|
84
108
|
onStart?.();
|
|
85
109
|
},
|
|
86
|
-
[
|
|
110
|
+
[isVertical, onStart],
|
|
87
111
|
);
|
|
88
112
|
|
|
89
|
-
return { ref:
|
|
90
|
-
}
|
|
113
|
+
return { ref: elRef, isResizing, onMouseDown: onResizeStart };
|
|
114
|
+
}
|