@react-fabric/core 1.0.0-beta.9 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
- package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
- package/css/components/_animations.css +52 -0
- package/css/components/_avatar.css +89 -0
- package/css/components/_button.css +218 -0
- package/css/components/_buttonGroup.css +62 -0
- package/css/components/_callout.css +32 -0
- package/css/components/_card.css +167 -0
- package/css/components/_chip.css +125 -0
- package/css/components/_collapsable.css +32 -0
- package/{src/overlays/message/Message.module.css → css/components/_divider.css} +11 -10
- package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +3 -2
- package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +15 -9
- package/css/components/_media.css +102 -0
- package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
- package/{src/components/meter/Meter.module.css → css/components/_meter.css} +15 -20
- package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +9 -9
- package/{src/components/panel/Panel.module.css → css/components/_panel.css} +19 -19
- package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
- package/css/components/_sonner.css +431 -0
- package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +125 -85
- package/css/components/_titlebar.css +48 -0
- package/css/components/index.css +47 -0
- package/css/core/_aside.css +176 -0
- package/css/core/_content.css +31 -0
- package/css/core/_errorboundary.css +55 -0
- package/css/core/_responsive.css +45 -0
- package/css/core/_typography.css +69 -0
- package/css/core/_viewport.css +33 -0
- package/{src/hooks/useClientService.tsx → css/core/index.css} +7 -7
- package/css/reset/_gradients.css +36 -33
- package/css/reset/_reset.css +206 -300
- package/css/reset/_text.css +31 -61
- package/css/reset/_theme.css +467 -81
- package/css/reset/index.css +23 -21
- package/css/styles.css +30 -23
- package/css/theme/_colors.css +445 -0
- package/css/theme/_utilities.css +528 -0
- package/css/theme/_variants.css +128 -0
- package/css/theme/index.css +55 -0
- package/dist/cjs/components/actionLabel/ActionLabel.js +25 -12
- package/dist/cjs/{overlays → components}/alert/Alert.js +76 -53
- package/dist/cjs/components/animations/Indicator.js +72 -0
- package/dist/cjs/components/animations/Loader.js +77 -0
- package/dist/cjs/components/animations/LoadingBars.js +37 -0
- package/dist/cjs/components/animations/LoadingLine.js +59 -0
- package/dist/cjs/components/animations/LoadingSpinner.js +37 -0
- package/dist/cjs/components/animations/Skeleton.js +88 -0
- package/dist/cjs/components/avatar/Avatar.js +41 -20
- package/dist/cjs/components/avatar/AvatarGroup.js +37 -16
- package/dist/cjs/components/badge/Badge.js +90 -68
- package/dist/cjs/components/button/Button.js +198 -136
- package/dist/cjs/components/button/ButtonGroup.js +86 -21
- package/dist/cjs/components/button/ConfirmButton.js +55 -41
- package/dist/cjs/components/button/ToggleButtonGroup.js +84 -32
- package/dist/cjs/components/callout/Callout.js +56 -25
- package/dist/cjs/components/card/Card.js +90 -42
- package/dist/cjs/components/card/CardCover.js +38 -27
- package/dist/cjs/components/card/FlipContent.js +47 -0
- package/dist/cjs/components/chip/Chip.js +80 -37
- package/dist/cjs/components/collapsable/Collapsable.js +62 -31
- package/dist/cjs/components/divider/Divider.js +58 -24
- package/dist/cjs/components/dropdown/Dropdown.js +92 -45
- package/dist/cjs/components/dropdown/DropdownTool.js +6 -7
- package/dist/cjs/components/effect/GlassEffect.js +259 -0
- package/dist/cjs/components/effect/MatteEffect.js +127 -0
- package/dist/cjs/components/effect/StyleEffect.js +43 -0
- package/dist/cjs/components/empty/EmptyContent.js +37 -49
- package/dist/cjs/components/flyout/Flyout.js +170 -0
- package/dist/cjs/components/hotkey/HotKey.js +42 -0
- package/dist/cjs/components/icon/Icon.js +81 -80
- package/dist/cjs/components/media/Media.js +154 -77
- package/dist/cjs/components/menu/ContextMenu.js +45 -20
- package/dist/cjs/components/menu/Menu.js +98 -38
- package/dist/cjs/components/menu/MenuItem.js +102 -74
- package/dist/cjs/components/meter/Meter.js +35 -12
- package/dist/cjs/components/modal/Modal.js +152 -0
- package/dist/cjs/components/navigator/Navigator.js +81 -36
- package/dist/cjs/components/panel/Panel.js +115 -60
- package/dist/cjs/components/panel/PanelGroup.js +42 -16
- package/dist/cjs/components/panel/PanelStack.js +47 -16
- package/dist/cjs/components/pillbox/Pillbox.js +118 -0
- package/dist/cjs/components/progress/ProgressBar.js +30 -14
- package/dist/cjs/components/progress/ProgressCircle.js +27 -11
- package/dist/cjs/components/tabpanel/Tab.js +53 -37
- package/dist/cjs/components/tabpanel/TabPanel.js +74 -28
- package/dist/cjs/components/titlebar/Titlebar.js +52 -0
- package/dist/cjs/components/tooltip/Tooltip.js +180 -0
- package/dist/cjs/context/Global.js +159 -80
- package/dist/cjs/context/ModalManager.js +60 -0
- package/dist/cjs/context/context.js +43 -0
- package/dist/cjs/core/areaToggle/AreaToggle.js +41 -0
- package/dist/cjs/core/aside/Aside.js +178 -83
- package/dist/cjs/core/boundary/ErrorBoundary.js +37 -34
- package/dist/cjs/core/boundary/ErrorIcon.js +32 -19
- package/dist/cjs/core/content/Content.js +26 -37
- package/dist/cjs/core/headfoot/HeadFoot.js +133 -35
- package/dist/cjs/core/layout/Layout.js +28 -0
- package/dist/cjs/core/responsive/Responsive.js +62 -26
- package/dist/cjs/core/theme/ThemeProvider.js +35 -41
- package/dist/cjs/core/viewport/Viewport.js +26 -22
- package/dist/cjs/hooks/useClientService.js +39 -18
- package/dist/cjs/hooks/useContextMenu.js +103 -0
- package/dist/cjs/hooks/useControlledValue.js +13 -7
- package/dist/cjs/hooks/useDebounce.js +37 -21
- package/dist/cjs/hooks/useEffectDebugger.js +79 -60
- package/dist/cjs/hooks/useIsDark.js +34 -26
- package/dist/cjs/hooks/useIsRtl.js +13 -3
- package/dist/cjs/hooks/useNavigator.js +12 -9
- package/dist/cjs/hooks/useNotificationService.js +199 -0
- package/dist/cjs/hooks/useOverlayService.js +82 -41
- package/dist/cjs/hooks/usePropState.js +41 -0
- package/dist/cjs/hooks/usePropToggle.js +32 -26
- package/dist/cjs/hooks/useResize.js +47 -38
- package/dist/cjs/hooks/useResizeObserver.js +26 -7
- package/dist/cjs/hooks/useStorage.js +29 -16
- package/dist/cjs/i18n/index.js +25 -23
- package/dist/cjs/index.js +142 -94
- package/dist/cjs/typography/Abbr.js +43 -20
- package/dist/cjs/typography/Anchor.js +39 -0
- package/dist/cjs/typography/Copy.js +28 -28
- package/dist/cjs/typography/Kbd.js +43 -0
- package/dist/cjs/typography/Mark.js +34 -17
- package/dist/cjs/typography/Text.js +36 -54
- package/dist/cjs/typography/Title.js +17 -40
- package/dist/cjs/utils/calculateDimensions.js +38 -23
- package/dist/cjs/utils/cloneElement.js +64 -0
- package/dist/cjs/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
- package/dist/cjs/utils/getColor.js +42 -36
- package/dist/cjs/utils/getIconProps.js +63 -0
- package/dist/cjs/utils/getTooltipProps.js +66 -0
- package/dist/cjs/utils/nodeCheck.js +4 -4
- package/dist/esm/components/actionLabel/ActionLabel.js +25 -12
- package/dist/esm/{overlays → components}/alert/Alert.js +73 -50
- package/dist/esm/components/animations/Indicator.js +72 -0
- package/dist/esm/components/animations/Loader.js +77 -0
- package/dist/esm/components/animations/LoadingBars.js +37 -0
- package/dist/esm/components/animations/LoadingLine.js +59 -0
- package/dist/esm/components/animations/LoadingSpinner.js +37 -0
- package/dist/esm/components/animations/Skeleton.js +88 -0
- package/dist/esm/components/avatar/Avatar.js +42 -21
- package/dist/esm/components/avatar/AvatarGroup.js +37 -16
- package/dist/esm/components/badge/Badge.js +93 -70
- package/dist/esm/components/button/Button.js +199 -137
- package/dist/esm/components/button/ButtonGroup.js +87 -22
- package/dist/esm/components/button/ConfirmButton.js +58 -44
- package/dist/esm/components/button/ToggleButtonGroup.js +86 -34
- package/dist/esm/components/callout/Callout.js +56 -25
- package/dist/esm/components/card/Card.js +92 -44
- package/dist/esm/components/card/CardCover.js +38 -27
- package/dist/esm/components/card/FlipContent.js +47 -0
- package/dist/esm/components/chip/Chip.js +81 -38
- package/dist/esm/components/collapsable/Collapsable.js +63 -32
- package/dist/esm/components/divider/Divider.js +59 -25
- package/dist/esm/components/dropdown/Dropdown.js +95 -48
- package/dist/esm/components/dropdown/DropdownTool.js +6 -7
- package/dist/esm/components/effect/GlassEffect.js +259 -0
- package/dist/esm/components/effect/MatteEffect.js +127 -0
- package/dist/esm/components/effect/StyleEffect.js +43 -0
- package/dist/esm/components/empty/EmptyContent.js +38 -50
- package/dist/esm/components/flyout/Flyout.js +170 -0
- package/dist/esm/components/hotkey/HotKey.js +42 -0
- package/dist/esm/components/icon/Icon.js +83 -82
- package/dist/esm/components/media/Media.js +156 -79
- package/dist/esm/components/menu/ContextMenu.js +46 -21
- package/dist/esm/components/menu/Menu.js +101 -41
- package/dist/esm/components/menu/MenuItem.js +98 -70
- package/dist/esm/components/meter/Meter.js +36 -13
- package/dist/esm/components/modal/Modal.js +152 -0
- package/dist/esm/components/navigator/Navigator.js +81 -36
- package/dist/esm/components/panel/Panel.js +117 -62
- package/dist/esm/components/panel/PanelGroup.js +43 -17
- package/dist/esm/components/panel/PanelStack.js +48 -17
- package/dist/esm/components/pillbox/Pillbox.js +118 -0
- package/dist/esm/components/progress/ProgressBar.js +31 -15
- package/dist/esm/components/progress/ProgressCircle.js +28 -12
- package/dist/esm/components/tabpanel/Tab.js +54 -38
- package/dist/esm/components/tabpanel/TabPanel.js +75 -29
- package/dist/esm/components/titlebar/Titlebar.js +52 -0
- package/dist/esm/components/tooltip/Tooltip.js +180 -0
- package/dist/esm/context/Global.js +161 -78
- package/dist/esm/context/ModalManager.js +60 -0
- package/dist/esm/context/context.js +40 -0
- package/dist/esm/core/areaToggle/AreaToggle.js +41 -0
- package/dist/esm/core/aside/Aside.js +179 -84
- package/dist/esm/core/boundary/ErrorBoundary.js +38 -35
- package/dist/esm/core/boundary/ErrorIcon.js +32 -19
- package/dist/esm/core/content/Content.js +26 -37
- package/dist/esm/core/headfoot/HeadFoot.js +134 -36
- package/dist/esm/core/layout/Layout.js +28 -0
- package/dist/esm/core/responsive/Responsive.js +62 -26
- package/dist/esm/core/theme/ThemeProvider.js +36 -42
- package/dist/esm/core/viewport/Viewport.js +26 -22
- package/dist/esm/hooks/useClientService.js +39 -18
- package/dist/esm/hooks/useContextMenu.js +103 -0
- package/dist/esm/hooks/useControlledValue.js +14 -8
- package/dist/esm/hooks/useDebounce.js +37 -21
- package/dist/esm/hooks/useEffectDebugger.js +81 -62
- package/dist/esm/hooks/useIsDark.js +34 -26
- package/dist/esm/hooks/useIsRtl.js +13 -3
- package/dist/esm/hooks/useNavigator.js +13 -10
- package/dist/esm/hooks/useNotificationService.js +199 -0
- package/dist/esm/hooks/useOverlayService.js +83 -42
- package/dist/esm/hooks/usePropState.js +40 -0
- package/dist/esm/hooks/usePropToggle.js +33 -27
- package/dist/esm/hooks/useResize.js +48 -39
- package/dist/esm/hooks/useResizeObserver.js +27 -8
- package/dist/esm/hooks/useStorage.js +30 -17
- package/dist/esm/i18n/index.js +23 -21
- package/dist/esm/index.js +87 -44
- package/dist/esm/typography/Abbr.js +45 -22
- package/dist/esm/typography/Anchor.js +39 -0
- package/dist/esm/typography/Copy.js +28 -28
- package/dist/esm/typography/Kbd.js +43 -0
- package/dist/esm/typography/Mark.js +35 -18
- package/dist/esm/typography/Text.js +39 -57
- package/dist/esm/typography/Title.js +17 -40
- package/dist/esm/utils/calculateDimensions.js +38 -23
- package/dist/esm/utils/cloneElement.js +64 -0
- package/dist/esm/{core/section/Section.js → utils/getBadgeProps.js} +25 -21
- package/dist/esm/utils/getColor.js +43 -34
- package/dist/esm/utils/getIconProps.js +63 -0
- package/dist/esm/utils/getTooltipProps.js +66 -0
- package/dist/esm/utils/nodeCheck.js +4 -4
- package/dist/types/components/actionLabel/ActionLabel.d.ts +20 -7
- package/dist/types/components/alert/Alert.d.ts +74 -0
- package/dist/types/components/animations/Indicator.d.ts +57 -0
- package/dist/types/components/animations/Loader.d.ts +65 -0
- package/dist/types/components/animations/LoadingBars.d.ts +61 -0
- package/dist/types/components/animations/LoadingLine.d.ts +43 -0
- package/dist/types/components/animations/LoadingSpinner.d.ts +61 -0
- package/dist/types/components/animations/Skeleton.d.ts +61 -0
- package/dist/types/components/avatar/Avatar.d.ts +70 -19
- package/dist/types/components/avatar/AvatarGroup.d.ts +51 -14
- package/dist/types/components/badge/Badge.d.ts +64 -14
- package/dist/types/components/button/Button.d.ts +72 -55
- package/dist/types/components/button/ButtonGroup.d.ts +86 -24
- package/dist/types/components/button/ConfirmButton.d.ts +21 -7
- package/dist/types/components/button/ToggleButtonGroup.d.ts +88 -44
- package/dist/types/components/callout/Callout.d.ts +58 -7
- package/dist/types/components/card/Card.d.ts +66 -25
- package/dist/types/components/card/CardCover.d.ts +52 -7
- package/dist/types/components/card/FlipContent.d.ts +50 -0
- package/dist/types/components/chip/Chip.d.ts +72 -20
- package/dist/types/components/collapsable/Collapsable.d.ts +55 -15
- package/dist/types/components/divider/Divider.d.ts +25 -8
- package/dist/types/components/dropdown/Dropdown.d.ts +42 -9
- package/dist/types/components/dropdown/DropdownTool.d.ts +22 -4
- package/dist/types/components/effect/GlassEffect.d.ts +5 -0
- package/dist/types/components/effect/MatteEffect.d.ts +40 -0
- package/dist/types/components/effect/StyleEffect.d.ts +27 -0
- package/dist/types/components/empty/EmptyContent.d.ts +53 -9
- package/dist/types/components/flyout/Flyout.d.ts +60 -0
- package/dist/types/components/hotkey/HotKey.d.ts +41 -0
- package/dist/types/components/icon/Icon.d.ts +74 -24
- package/dist/types/components/media/Media.d.ts +72 -4
- package/dist/types/components/menu/ContextMenu.d.ts +22 -5
- package/dist/types/components/menu/Menu.d.ts +26 -2
- package/dist/types/components/menu/MenuItem.d.ts +19 -4
- package/dist/types/components/menu/types.d.ts +23 -14
- package/dist/types/components/meter/Meter.d.ts +23 -3
- package/dist/types/components/modal/Modal.d.ts +52 -0
- package/dist/types/components/navigator/Navigator.d.ts +30 -4
- package/dist/types/components/panel/Panel.d.ts +43 -23
- package/dist/types/components/panel/PanelGroup.d.ts +22 -3
- package/dist/types/components/panel/PanelStack.d.ts +28 -2
- package/dist/types/components/pillbox/Pillbox.d.ts +95 -0
- package/dist/types/components/progress/ProgressBar.d.ts +19 -4
- package/dist/types/components/progress/ProgressCircle.d.ts +18 -4
- package/dist/types/components/tabpanel/Tab.d.ts +42 -10
- package/dist/types/components/tabpanel/TabPanel.d.ts +47 -7
- package/dist/types/components/titlebar/Titlebar.d.ts +54 -0
- package/dist/types/components/tooltip/Tooltip.d.ts +76 -0
- package/dist/types/context/Global.d.ts +39 -69
- package/dist/types/context/ModalManager.d.ts +30 -0
- package/dist/types/context/context.d.ts +107 -0
- package/dist/types/core/areaToggle/AreaToggle.d.ts +33 -0
- package/dist/types/core/aside/Aside.d.ts +75 -20
- package/dist/types/core/boundary/ErrorBoundary.d.ts +43 -4
- package/dist/types/core/boundary/ErrorIcon.d.ts +38 -1
- package/dist/types/core/content/Content.d.ts +38 -6
- package/dist/types/core/headfoot/HeadFoot.d.ts +48 -14
- package/dist/types/core/layout/Layout.d.ts +38 -0
- package/dist/types/core/responsive/Responsive.d.ts +45 -15
- package/dist/types/core/theme/ThemeProvider.d.ts +35 -11
- package/dist/types/core/viewport/Viewport.d.ts +27 -3
- package/dist/types/hooks/useClientService.d.ts +43 -1
- package/dist/types/hooks/useContextMenu.d.ts +10 -0
- package/dist/types/hooks/useControlledValue.d.ts +28 -4
- package/dist/types/hooks/useDebounce.d.ts +38 -2
- package/dist/types/hooks/useEffectDebugger.d.ts +73 -4
- package/dist/types/hooks/useIsDark.d.ts +6 -0
- package/dist/types/hooks/useIsRtl.d.ts +35 -1
- package/dist/types/hooks/useNavigator.d.ts +37 -2
- package/dist/types/hooks/useNotificationService.d.ts +60 -0
- package/dist/types/hooks/useOverlayService.d.ts +28 -8
- package/dist/types/hooks/usePropState.d.ts +26 -0
- package/dist/types/hooks/usePropToggle.d.ts +41 -7
- package/dist/types/hooks/useResize.d.ts +46 -4
- package/dist/types/hooks/useResizeObserver.d.ts +45 -3
- package/dist/types/hooks/useStorage.d.ts +32 -2
- package/dist/types/i18n/index.d.ts +27 -3
- package/dist/types/index.d.ts +106 -18
- package/dist/types/types/colors.d.ts +29 -0
- package/dist/types/types/index.d.ts +216 -76
- package/dist/types/typography/Abbr.d.ts +51 -6
- package/dist/types/typography/Anchor.d.ts +41 -0
- package/dist/types/typography/Copy.d.ts +36 -2
- package/dist/types/typography/Kbd.d.ts +40 -0
- package/dist/types/typography/Mark.d.ts +44 -7
- package/dist/types/typography/Text.d.ts +40 -24
- package/dist/types/typography/Title.d.ts +37 -26
- package/dist/types/typography/types.d.ts +32 -0
- package/dist/types/utils/calculateDimensions.d.ts +50 -6
- package/dist/types/utils/cloneElement.d.ts +41 -0
- package/dist/types/utils/getBadgeProps.d.ts +16 -0
- package/dist/types/utils/getColor.d.ts +43 -4
- package/dist/types/utils/getIconProps.d.ts +45 -0
- package/dist/types/utils/getTooltipProps.d.ts +47 -0
- package/dist/types/utils/index.d.ts +28 -0
- package/dist/types/utils/nodeCheck.d.ts +1 -2
- package/package.json +29 -21
- package/src/components/actionLabel/ActionLabel.tsx +28 -39
- package/src/components/alert/Alert.tsx +261 -0
- package/src/components/animations/Indicator.tsx +76 -0
- package/src/components/animations/Loader.tsx +89 -0
- package/src/components/animations/LoadingBars.tsx +70 -0
- package/src/components/animations/LoadingLine.tsx +51 -0
- package/src/components/animations/LoadingSpinner.tsx +70 -0
- package/src/components/animations/Skeleton.tsx +100 -0
- package/src/components/avatar/Avatar.tsx +89 -70
- package/src/components/avatar/AvatarGroup.tsx +65 -74
- package/src/components/badge/Badge.tsx +141 -108
- package/src/components/button/Button.tsx +223 -238
- package/src/components/button/ButtonGroup.tsx +117 -77
- package/src/components/button/ConfirmButton.tsx +60 -90
- package/src/components/button/ToggleButtonGroup.tsx +134 -120
- package/src/components/callout/Callout.tsx +81 -59
- package/src/components/card/Card.tsx +131 -113
- package/src/components/card/CardCover.tsx +61 -61
- package/src/components/card/FlipContent.tsx +78 -0
- package/src/components/chip/Chip.tsx +139 -99
- package/src/components/collapsable/Collapsable.tsx +79 -77
- package/src/components/divider/Divider.tsx +74 -53
- package/src/components/dropdown/Dropdown.tsx +109 -106
- package/src/components/dropdown/DropdownTool.tsx +29 -12
- package/src/components/effect/GlassEffect.tsx +221 -0
- package/src/components/effect/MatteEffect.tsx +99 -0
- package/src/components/effect/StyleEffect.tsx +36 -0
- package/src/components/empty/EmptyContent.tsx +60 -99
- package/src/components/flyout/Flyout.tsx +257 -0
- package/src/components/hotkey/HotKey.tsx +57 -0
- package/src/components/icon/Icon.tsx +131 -130
- package/src/components/media/Media.tsx +184 -154
- package/src/components/menu/ContextMenu.tsx +56 -39
- package/src/components/menu/Menu.tsx +121 -84
- package/src/components/menu/MenuItem.tsx +87 -69
- package/src/components/menu/types.ts +23 -28
- package/src/components/meter/Meter.tsx +34 -17
- package/src/components/modal/Modal.tsx +226 -0
- package/src/components/navigator/Navigator.tsx +93 -38
- package/src/components/panel/Panel.tsx +123 -131
- package/src/components/panel/PanelGroup.tsx +49 -43
- package/src/components/panel/PanelStack.tsx +63 -62
- package/src/components/pillbox/Pillbox.tsx +208 -0
- package/src/components/progress/ProgressBar.tsx +33 -33
- package/src/components/progress/ProgressCircle.tsx +29 -37
- package/src/components/tabpanel/Tab.tsx +84 -73
- package/src/components/tabpanel/TabPanel.tsx +102 -51
- package/src/components/titlebar/Titlebar.tsx +115 -0
- package/src/components/tooltip/Tooltip.tsx +255 -0
- package/src/context/Global.tsx +148 -148
- package/src/context/ModalManager.tsx +68 -0
- package/src/context/context.ts +111 -0
- package/src/core/areaToggle/AreaToggle.tsx +45 -0
- package/src/core/aside/Aside.tsx +200 -155
- package/src/core/boundary/ErrorBoundary.tsx +50 -68
- package/src/core/boundary/ErrorIcon.tsx +34 -32
- package/src/core/content/Content.tsx +41 -50
- package/src/core/headfoot/HeadFoot.tsx +162 -81
- package/src/core/layout/Layout.tsx +54 -0
- package/src/core/responsive/Responsive.tsx +91 -98
- package/src/core/theme/ThemeProvider.tsx +45 -56
- package/src/core/viewport/Viewport.tsx +25 -27
- package/src/hooks/useClientService.ts +47 -0
- package/src/hooks/useContextMenu.tsx +131 -0
- package/src/hooks/useControlledValue.ts +47 -0
- package/src/hooks/useDebounce.ts +41 -24
- package/src/hooks/useEffectDebugger.ts +105 -94
- package/src/hooks/useIsDark.ts +10 -24
- package/src/hooks/useIsRtl.ts +32 -20
- package/src/hooks/useNavigator.tsx +41 -26
- package/src/hooks/useNotificationService.tsx +239 -0
- package/src/hooks/useOverlayService.tsx +67 -20
- package/src/hooks/usePropState.ts +52 -0
- package/src/hooks/usePropToggle.ts +54 -47
- package/src/hooks/useResize.ts +69 -45
- package/src/hooks/useResizeObserver.ts +59 -34
- package/src/hooks/useStorage.ts +40 -48
- package/src/i18n/index.ts +24 -25
- package/src/index.ts +115 -44
- package/src/types/colors.ts +49 -0
- package/src/types/global.d.ts +40 -17
- package/src/types/index.ts +243 -155
- package/src/typography/Abbr.tsx +62 -59
- package/src/typography/Anchor.tsx +63 -0
- package/src/typography/Copy.tsx +39 -29
- package/src/typography/Kbd.tsx +50 -0
- package/src/typography/Mark.tsx +56 -51
- package/src/typography/Text.tsx +57 -128
- package/src/typography/Title.tsx +36 -108
- package/src/typography/types.ts +27 -17
- package/src/utils/calculateDimensions.ts +50 -40
- package/src/utils/cloneElement.ts +61 -0
- package/src/{core/content/Content.module.css → utils/getBadgeProps.ts} +20 -15
- package/src/utils/getColor.ts +42 -36
- package/src/utils/getIconProps.ts +58 -0
- package/src/utils/getTooltipProps.ts +59 -0
- package/src/utils/index.ts +23 -17
- package/src/utils/nodeCheck.ts +4 -8
- package/css/flags.rect.css +0 -1607
- package/css/flags.wavy.css +0 -1606
- package/css/index.js +0 -250
- package/css/tailwind/colors.ts +0 -158
- package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/cjs/components/animations/Animations.js +0 -142
- package/dist/cjs/components/animations/Animations.module.css +0 -1
- package/dist/cjs/components/avatar/Avatar.module.css +0 -1
- package/dist/cjs/components/badge/Badge.module.css +0 -1
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +0 -71
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/cjs/components/button/Button.module.css +0 -1
- package/dist/cjs/components/card/Card.module.css +0 -1
- package/dist/cjs/components/chip/Chip.module.css +0 -1
- package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
- package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
- package/dist/cjs/components/icon/Icon.module.css +0 -1
- package/dist/cjs/components/media/Media.module.css +0 -1
- package/dist/cjs/components/menu/Menu.module.css +0 -1
- package/dist/cjs/components/meter/Meter.module.css +0 -1
- package/dist/cjs/components/panel/Panel.module.css +0 -1
- package/dist/cjs/components/progress/Progress.module.css +0 -1
- package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/cjs/context/NotificationCenter.js +0 -254
- package/dist/cjs/core/aside/Aside.module.css +0 -1
- package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/cjs/core/content/Content.module.css +0 -1
- package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/cjs/core/page/Page.js +0 -66
- package/dist/cjs/core/page/Page.module.css +0 -1
- package/dist/cjs/core/responsive/Responsive.module.css +0 -1
- package/dist/cjs/core/section/Section.module.css +0 -1
- package/dist/cjs/core/theme/Theme.module.css +0 -1
- package/dist/cjs/core/viewport/Viewport.module.css +0 -1
- package/dist/cjs/hotkeys/HotKey.js +0 -47
- package/dist/cjs/hotkeys/HotKeyLabel.js +0 -52
- package/dist/cjs/hotkeys/HotKeyWrapper.js +0 -98
- package/dist/cjs/hotkeys/commons.js +0 -56
- package/dist/cjs/overlays/alert/Alert.module.css +0 -1
- package/dist/cjs/overlays/flyout/Flyout.js +0 -152
- package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
- package/dist/cjs/overlays/message/Message.js +0 -84
- package/dist/cjs/overlays/message/Message.module.css +0 -1
- package/dist/cjs/overlays/modal/Modal.js +0 -132
- package/dist/cjs/overlays/modal/Modal.module.css +0 -1
- package/dist/cjs/overlays/toast/Toast.js +0 -166
- package/dist/cjs/overlays/toast/Toast.module.css +0 -1
- package/dist/cjs/overlays/tooltip/Tooltip.js +0 -133
- package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/cjs/types/icons.js +0 -200
- package/dist/cjs/typography/Link.js +0 -55
- package/dist/cjs/typography/Typography.module.css +0 -1
- package/dist/cjs/typography/types.js +0 -42
- package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/esm/components/animations/Animations.js +0 -138
- package/dist/esm/components/animations/Animations.module.css +0 -1
- package/dist/esm/components/avatar/Avatar.module.css +0 -1
- package/dist/esm/components/badge/Badge.module.css +0 -1
- package/dist/esm/components/breadcrumbs/Breadcrumbs.js +0 -71
- package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/esm/components/button/Button.module.css +0 -1
- package/dist/esm/components/card/Card.module.css +0 -1
- package/dist/esm/components/chip/Chip.module.css +0 -1
- package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
- package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
- package/dist/esm/components/icon/Icon.module.css +0 -1
- package/dist/esm/components/media/Media.module.css +0 -1
- package/dist/esm/components/menu/Menu.module.css +0 -1
- package/dist/esm/components/meter/Meter.module.css +0 -1
- package/dist/esm/components/panel/Panel.module.css +0 -1
- package/dist/esm/components/progress/Progress.module.css +0 -1
- package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/esm/context/NotificationCenter.js +0 -254
- package/dist/esm/core/aside/Aside.module.css +0 -1
- package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/esm/core/content/Content.module.css +0 -1
- package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/esm/core/page/Page.js +0 -66
- package/dist/esm/core/page/Page.module.css +0 -1
- package/dist/esm/core/responsive/Responsive.module.css +0 -1
- package/dist/esm/core/section/Section.module.css +0 -1
- package/dist/esm/core/theme/Theme.module.css +0 -1
- package/dist/esm/core/viewport/Viewport.module.css +0 -1
- package/dist/esm/hotkeys/HotKey.js +0 -47
- package/dist/esm/hotkeys/HotKeyLabel.js +0 -52
- package/dist/esm/hotkeys/HotKeyWrapper.js +0 -96
- package/dist/esm/hotkeys/commons.js +0 -56
- package/dist/esm/overlays/alert/Alert.module.css +0 -1
- package/dist/esm/overlays/flyout/Flyout.js +0 -152
- package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
- package/dist/esm/overlays/message/Message.js +0 -84
- package/dist/esm/overlays/message/Message.module.css +0 -1
- package/dist/esm/overlays/modal/Modal.js +0 -132
- package/dist/esm/overlays/modal/Modal.module.css +0 -1
- package/dist/esm/overlays/toast/Toast.js +0 -166
- package/dist/esm/overlays/toast/Toast.module.css +0 -1
- package/dist/esm/overlays/tooltip/Tooltip.js +0 -132
- package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/esm/types/icons.js +0 -202
- package/dist/esm/typography/Link.js +0 -55
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/esm/typography/types.js +0 -41
- package/dist/types/components/animations/Animations.d.ts +0 -23
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +0 -17
- package/dist/types/components/index.d.ts +0 -33
- package/dist/types/context/NotificationCenter.d.ts +0 -11
- package/dist/types/core/index.d.ts +0 -9
- package/dist/types/core/page/Page.d.ts +0 -23
- package/dist/types/core/section/Section.d.ts +0 -7
- package/dist/types/hotkeys/HotKey.d.ts +0 -2
- package/dist/types/hotkeys/HotKeyLabel.d.ts +0 -2
- package/dist/types/hotkeys/HotKeyWrapper.d.ts +0 -11
- package/dist/types/hotkeys/commons.d.ts +0 -28
- package/dist/types/overlays/alert/Alert.d.ts +0 -41
- package/dist/types/overlays/flyout/Flyout.d.ts +0 -57
- package/dist/types/overlays/index.d.ts +0 -6
- package/dist/types/overlays/message/Message.d.ts +0 -21
- package/dist/types/overlays/modal/Modal.d.ts +0 -53
- package/dist/types/overlays/toast/Toast.d.ts +0 -33
- package/dist/types/overlays/tooltip/Tooltip.d.ts +0 -18
- package/dist/types/types/icons.d.ts +0 -197
- package/dist/types/typography/Link.d.ts +0 -25
- package/dist/types/typography/index.d.ts +0 -6
- package/src/components/animations/Animations.module.css +0 -253
- package/src/components/animations/Animations.tsx +0 -196
- package/src/components/avatar/Avatar.module.css +0 -90
- package/src/components/badge/Badge.module.css +0 -165
- package/src/components/breadcrumbs/Breadcrumbs.module.css +0 -189
- package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -109
- package/src/components/button/Button.module.css +0 -375
- package/src/components/card/Card.module.css +0 -152
- package/src/components/chip/Chip.module.css +0 -118
- package/src/components/collapsable/Collapsable.module.css +0 -30
- package/src/components/icon/Icon.module.css +0 -71
- package/src/components/index.ts +0 -62
- package/src/components/media/Media.module.css +0 -112
- package/src/context/NotificationCenter.tsx +0 -223
- package/src/core/aside/Aside.module.css +0 -231
- package/src/core/boundary/ErrorBoundary.module.css +0 -65
- package/src/core/headfoot/HeadFoot.module.css +0 -38
- package/src/core/index.ts +0 -32
- package/src/core/page/Page.module.css +0 -46
- package/src/core/page/Page.tsx +0 -101
- package/src/core/responsive/Responsive.module.css +0 -85
- package/src/core/section/Section.module.css +0 -28
- package/src/core/section/Section.tsx +0 -54
- package/src/core/theme/Theme.module.css +0 -30
- package/src/core/viewport/Viewport.module.css +0 -32
- package/src/hooks/useControlledValue.tsx +0 -43
- package/src/hotkeys/HotKey.tsx +0 -39
- package/src/hotkeys/HotKeyLabel.tsx +0 -61
- package/src/hotkeys/HotKeyWrapper.tsx +0 -137
- package/src/hotkeys/commons.ts +0 -74
- package/src/overlays/alert/Alert.tsx +0 -252
- package/src/overlays/flyout/Flyout.tsx +0 -283
- package/src/overlays/index.ts +0 -29
- package/src/overlays/message/Message.tsx +0 -107
- package/src/overlays/modal/Modal.tsx +0 -244
- package/src/overlays/toast/Toast.module.css +0 -37
- package/src/overlays/toast/Toast.tsx +0 -216
- package/src/overlays/tooltip/Tooltip.module.css +0 -53
- package/src/overlays/tooltip/Tooltip.tsx +0 -200
- package/src/types/icons.ts +0 -426
- package/src/typography/Link.tsx +0 -113
- package/src/typography/Typography.module.css +0 -68
- package/src/typography/index.ts +0 -29
- /package/dist/cjs/i18n/{ar.json.js → ar/core.json.js} +0 -0
- /package/dist/cjs/i18n/{en.json.js → en/core.json.js} +0 -0
- /package/dist/esm/i18n/{ar.json.js → ar/core.json.js} +0 -0
- /package/dist/esm/i18n/{en.json.js → en/core.json.js} +0 -0
- /package/src/i18n/{ar.json → ar/core.json} +0 -0
- /package/src/i18n/{en.json → en/core.json} +0 -0
|
@@ -0,0 +1,257 @@
|
|
|
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 { Activity, use, useEffect, useId } from "react";
|
|
35
|
+
import { LoadingLine } from "../../components/animations/LoadingLine";
|
|
36
|
+
import { Icon } from "../../components/icon/Icon";
|
|
37
|
+
import { ModalContext } from "../../context/context";
|
|
38
|
+
import type { CallbackReturn, ChildrenProp, CssPropWithMap, TestProps } from "../../types";
|
|
39
|
+
import type { TitlebarProps } from "../titlebar/Titlebar";
|
|
40
|
+
import { Titlebar } from "../titlebar/Titlebar";
|
|
41
|
+
|
|
42
|
+
export interface FlyoutProps<T>
|
|
43
|
+
extends
|
|
44
|
+
TestProps,
|
|
45
|
+
ChildrenProp,
|
|
46
|
+
TitlebarProps,
|
|
47
|
+
CssPropWithMap<{ root: string; body?: string; titlebar?: string; title?: string; icon?: string }> {
|
|
48
|
+
/**
|
|
49
|
+
* flyout alignment
|
|
50
|
+
*/
|
|
51
|
+
align?: "start" | "end" | "top" | "bottom";
|
|
52
|
+
/**
|
|
53
|
+
* show loading indicator
|
|
54
|
+
*/
|
|
55
|
+
loading?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* modal size
|
|
58
|
+
*/
|
|
59
|
+
size?: "sm" | "md" | "lg" | "xl" | "screen";
|
|
60
|
+
/**
|
|
61
|
+
* width
|
|
62
|
+
*/
|
|
63
|
+
width?: string | number;
|
|
64
|
+
/**
|
|
65
|
+
* minimum width
|
|
66
|
+
*/
|
|
67
|
+
minWidth?: string | number;
|
|
68
|
+
/**
|
|
69
|
+
* height
|
|
70
|
+
*/
|
|
71
|
+
height?: string | number;
|
|
72
|
+
/**
|
|
73
|
+
* minimum height
|
|
74
|
+
*/
|
|
75
|
+
minHeight?: string | number;
|
|
76
|
+
/**
|
|
77
|
+
* portal root element
|
|
78
|
+
*/
|
|
79
|
+
root?: HTMLElement;
|
|
80
|
+
/**
|
|
81
|
+
* hide backdrop mask
|
|
82
|
+
*/
|
|
83
|
+
hideMask?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* close flyout on any click
|
|
86
|
+
*/
|
|
87
|
+
closeOnClick?: boolean;
|
|
88
|
+
closeOnEscape?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* close handler
|
|
91
|
+
*/
|
|
92
|
+
onClose?: (args: T | null) => void;
|
|
93
|
+
/**
|
|
94
|
+
* before close handler, return false to prevent close
|
|
95
|
+
*/
|
|
96
|
+
onBeforeClose?: (args: T | null) => CallbackReturn;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const AlignmentClasses = {
|
|
100
|
+
start: "inset-s-0 inset-y-0",
|
|
101
|
+
end: "inset-e-0 inset-y-0",
|
|
102
|
+
top: "top-0 inset-x-0",
|
|
103
|
+
bottom: "bottom-0 inset-x-0",
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export function Flyout<T extends AnyObject = AnyObject>({
|
|
107
|
+
icon,
|
|
108
|
+
className,
|
|
109
|
+
classNames,
|
|
110
|
+
closeOnEscape,
|
|
111
|
+
title,
|
|
112
|
+
actions,
|
|
113
|
+
closeOnClick,
|
|
114
|
+
onClose,
|
|
115
|
+
onBeforeClose,
|
|
116
|
+
children,
|
|
117
|
+
loading,
|
|
118
|
+
size,
|
|
119
|
+
width,
|
|
120
|
+
minWidth,
|
|
121
|
+
height,
|
|
122
|
+
minHeight,
|
|
123
|
+
root,
|
|
124
|
+
hideMask,
|
|
125
|
+
align = "start",
|
|
126
|
+
...props
|
|
127
|
+
}: FlyoutProps<T>) {
|
|
128
|
+
const id = useId();
|
|
129
|
+
const { activeModal, registerModal, removeModal } = use(ModalContext);
|
|
130
|
+
const { refs, context } = useFloating({
|
|
131
|
+
open: true,
|
|
132
|
+
onOpenChange: () => {
|
|
133
|
+
handleClose(null);
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
const dismiss = useDismiss(context, {
|
|
137
|
+
outsidePressEvent: "mousedown",
|
|
138
|
+
outsidePress: !hideMask,
|
|
139
|
+
escapeKey: closeOnEscape,
|
|
140
|
+
});
|
|
141
|
+
const role = useRole(context);
|
|
142
|
+
|
|
143
|
+
// Merge all the interactions into prop getters
|
|
144
|
+
const { getFloatingProps } = useInteractions([dismiss, role]);
|
|
145
|
+
|
|
146
|
+
const handleClose = (args: T | null) => {
|
|
147
|
+
void Promise.resolve(onBeforeClose?.(args)).then((ret) => {
|
|
148
|
+
if (ret !== false) {
|
|
149
|
+
if (refs.floating.current) refs.floating.current.dataset.show = "false";
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
onClose?.(args);
|
|
152
|
+
}, 250);
|
|
153
|
+
}
|
|
154
|
+
if (ret === false) setTimeout(() => refs.floating.current?.querySelector<HTMLElement>("[role='dialog']")?.focus(), 50);
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
useEffect(() => {
|
|
159
|
+
if (activeModal === id) {
|
|
160
|
+
const tmr = setTimeout(() => {
|
|
161
|
+
if (refs.floating.current) refs.floating.current.dataset.show = "true";
|
|
162
|
+
}, 50);
|
|
163
|
+
|
|
164
|
+
return () => {
|
|
165
|
+
clearTimeout(tmr);
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}, [activeModal, id, refs.floating]);
|
|
169
|
+
|
|
170
|
+
const tryClosing = (e: React.MouseEvent) => {
|
|
171
|
+
if (!!closeOnClick || (e.target as HTMLElement).closest("[data-flyout-dismiss='true']")) {
|
|
172
|
+
setTimeout(() => {
|
|
173
|
+
handleClose(null);
|
|
174
|
+
}, 100);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
useEffect(() => {
|
|
179
|
+
registerModal?.(id, () => onClose?.(null));
|
|
180
|
+
|
|
181
|
+
return () => {
|
|
182
|
+
removeModal?.(id);
|
|
183
|
+
};
|
|
184
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
185
|
+
}, [id]);
|
|
186
|
+
|
|
187
|
+
const isVertical = ["top", "bottom"].includes(align);
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
<Activity mode={id === activeModal ? "visible" : "hidden"}>
|
|
191
|
+
<FloatingPortal root={root}>
|
|
192
|
+
{!hideMask && (
|
|
193
|
+
<FloatingOverlay
|
|
194
|
+
lockScroll
|
|
195
|
+
style={{ zIndex: "var(--z-overlay-mask)", overflow: "hidden" }}
|
|
196
|
+
className="bg-tint-100/10 backdrop-blur-sm transition-all"
|
|
197
|
+
/>
|
|
198
|
+
)}
|
|
199
|
+
<FloatingFocusManager context={context} modal>
|
|
200
|
+
<div
|
|
201
|
+
data-align={align}
|
|
202
|
+
className={cn(
|
|
203
|
+
"fabric-flyout bg-default",
|
|
204
|
+
isVertical ? "h-32 max-h-[70vh]" : "w-lg max-w-[70vw]",
|
|
205
|
+
className,
|
|
206
|
+
classNames?.root,
|
|
207
|
+
"fixed overflow-hidden flex flex-col flex-nowrap pointer-events-auto shadow-xl",
|
|
208
|
+
AlignmentClasses[align],
|
|
209
|
+
size === "sm" && (isVertical ? "h-80" : "w-80"),
|
|
210
|
+
size === "md" && (isVertical ? "h-160" : "w-160"),
|
|
211
|
+
size === "lg" && (isVertical ? "h-[60vh]" : "w-[60vw]"),
|
|
212
|
+
size === "xl" && (isVertical ? "h-[80vh]" : "w-[80vw]"),
|
|
213
|
+
)}
|
|
214
|
+
style={
|
|
215
|
+
isVertical
|
|
216
|
+
? {
|
|
217
|
+
height,
|
|
218
|
+
minHeight,
|
|
219
|
+
}
|
|
220
|
+
: {
|
|
221
|
+
width,
|
|
222
|
+
minWidth,
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
onMouseUpCapture={tryClosing}
|
|
226
|
+
ref={(el) => refs.setFloating(el)}
|
|
227
|
+
{...getFloatingProps()}
|
|
228
|
+
{...props}
|
|
229
|
+
>
|
|
230
|
+
<Titlebar
|
|
231
|
+
title={title}
|
|
232
|
+
icon={icon}
|
|
233
|
+
actions={
|
|
234
|
+
<>
|
|
235
|
+
<div className="px-1 leading-none">{actions}</div>
|
|
236
|
+
<button className="size-fit cursor-pointer leading-none outline-none" onClick={() => handleClose(null)}>
|
|
237
|
+
<Icon
|
|
238
|
+
data-ref="panelClose"
|
|
239
|
+
className={cn("fabric-panelAction", "cursor-pointer p-1 text-xl self-center")}
|
|
240
|
+
icon="icon-[mdi--close]"
|
|
241
|
+
/>
|
|
242
|
+
</button>
|
|
243
|
+
</>
|
|
244
|
+
}
|
|
245
|
+
className={cn(classNames?.titlebar)}
|
|
246
|
+
classNames={classNames}
|
|
247
|
+
/>
|
|
248
|
+
{loading && <LoadingLine />}
|
|
249
|
+
<div role="dialog" className={cn("fabric-flyoutBody", classNames?.body, "flex-1 grid overflow-hidden")}>
|
|
250
|
+
{children}
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
</FloatingFocusManager>
|
|
254
|
+
</FloatingPortal>
|
|
255
|
+
</Activity>
|
|
256
|
+
);
|
|
257
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
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 { Hotkey } from "@tanstack/react-hotkeys";
|
|
27
|
+
import { useHotkeySequence } from "@tanstack/react-hotkeys";
|
|
28
|
+
|
|
29
|
+
export interface HotKeyProps {
|
|
30
|
+
/**
|
|
31
|
+
* Hot key combination
|
|
32
|
+
*
|
|
33
|
+
* ctrl, shift, alt, meta
|
|
34
|
+
* enter, space, escape, tab, backspace, delete
|
|
35
|
+
* left, right, up, down
|
|
36
|
+
*/
|
|
37
|
+
keys: Hotkey | Hotkey[];
|
|
38
|
+
disabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Callback handler
|
|
41
|
+
*/
|
|
42
|
+
handler?: () => void;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function HotKey({ keys, disabled, handler }: HotKeyProps) {
|
|
46
|
+
useHotkeySequence(
|
|
47
|
+
[keys].flat(),
|
|
48
|
+
() => {
|
|
49
|
+
void handler?.();
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
enabled: !disabled,
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
@@ -1,176 +1,177 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* React Fabric
|
|
3
|
-
* @version
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The MIT License (MIT)
|
|
7
|
-
* Copyright (c) 2024 Adarsh Pastakia
|
|
3
|
+
* @version 1.0.0
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2024 Adarsh Pastakia
|
|
8
6
|
*
|
|
9
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
10
|
-
* and associated documentation files (the "Software"), to deal
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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:
|
|
14
13
|
*
|
|
15
|
-
* The above copyright notice and this permission notice shall be included in all
|
|
16
|
-
* portions of the Software.
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
17
16
|
*
|
|
18
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
-
* TO THE WARRANTIES OF MERCHANTABILITY,
|
|
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 { isString, isSvgPath } from "@react-fabric/utilities";
|
|
25
|
-
import
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
type AriaProps,
|
|
29
|
-
type ColorType,
|
|
30
|
-
type CssProp,
|
|
31
|
-
type RefProp,
|
|
32
|
-
type SizeType,
|
|
33
|
-
type TestProps,
|
|
34
|
-
} from "../../types";
|
|
35
|
-
import { getBgClass, getColor, getColorClass } from "../../utils";
|
|
36
|
-
import classes from "./Icon.module.css";
|
|
26
|
+
import { cn, isString, isSvgPath } from "@react-fabric/utilities";
|
|
27
|
+
import { isValidElement, useMemo } from "react";
|
|
28
|
+
import type { CssProp, CSSSizeType, CustomColors, RefProp, TestProps } from "../../types";
|
|
29
|
+
import { getColor } from "../../utils";
|
|
37
30
|
|
|
38
|
-
export interface
|
|
31
|
+
export interface BaseIconProps extends CssProp, TestProps {
|
|
39
32
|
/**
|
|
40
|
-
*
|
|
33
|
+
* Icon can be a string or a React element. If it's a string, it can be either an SVG path or a CSS class name.
|
|
34
|
+
* If the string is a valid SVG path, it will be rendered as an inline SVG. If it's a CSS class name, it will be rendered as an <i> element with that class.
|
|
35
|
+
* If the string is 4 characters or less, it will be rendered as text inside an SVG, with font size adjusted based on the length of the string.
|
|
36
|
+
* If it's a React element, it will be rendered directly.
|
|
41
37
|
*/
|
|
42
|
-
icon: string;
|
|
38
|
+
icon: string | React.ReactElement;
|
|
43
39
|
/**
|
|
44
|
-
*
|
|
40
|
+
* Background color applied to the badge. Accepts Tailwind palette tokens or any CSS color.
|
|
45
41
|
*/
|
|
46
|
-
bg?:
|
|
42
|
+
bg?: CustomColors;
|
|
47
43
|
/**
|
|
48
|
-
*
|
|
44
|
+
* The color prop allows developers to specify the color of the icon.
|
|
45
|
+
* It can accept predefined color values from the design system, such as "primary-500" or "secondary-300", which correspond to specific colors in the palette.
|
|
46
|
+
* Additionally, it can also accept custom color values in standard CSS formats, such as hex codes (e.g., "#ff0000"), RGB (e.g., "rgb(255, 0, 0)"), or HSL (e.g., "hsl(0, 100%, 50%)"). This flexibility allows developers to easily integrate icons with their application's color scheme while also providing the option for custom styling when needed.
|
|
49
47
|
*/
|
|
50
|
-
color?:
|
|
48
|
+
color?: CustomColors;
|
|
51
49
|
/**
|
|
52
|
-
*
|
|
50
|
+
* The viewBox attribute defines the position and dimension, in user space, of an SVG viewport.
|
|
51
|
+
* It is required when the icon prop is an SVG path string to ensure the SVG scales correctly.
|
|
53
52
|
*/
|
|
54
|
-
|
|
53
|
+
viewBox?: string;
|
|
55
54
|
/**
|
|
56
|
-
* icon size
|
|
55
|
+
* The size property allows developers to specify the size of the icon, which can be defined using standard CSS size values such as pixels (e.g., "24px"), ems (e.g., "1.5em"), or percentages (e.g., "100%").
|
|
57
56
|
*/
|
|
58
|
-
size?:
|
|
57
|
+
size?: CSSSizeType;
|
|
59
58
|
/**
|
|
60
|
-
*
|
|
59
|
+
* When true, the icon will be flipped horizontally in right-to-left (RTL) contexts.
|
|
60
|
+
* This is useful for icons that indicate direction, such as arrows, to ensure they point in the correct direction in RTL layouts.
|
|
61
61
|
*/
|
|
62
|
-
|
|
62
|
+
rtlFlip?: boolean;
|
|
63
63
|
/**
|
|
64
|
-
* rounded
|
|
64
|
+
* When true, the icon will have rounded corners.
|
|
65
65
|
*/
|
|
66
66
|
rounded?: boolean;
|
|
67
67
|
/**
|
|
68
|
-
* apply animation
|
|
68
|
+
* The animate prop can be used to apply animation effects to the icon.
|
|
69
|
+
* It accepts predefined animation values such as "spin", "fade", "pulse", or "bounce".
|
|
69
70
|
*/
|
|
70
|
-
animate?: "spin" | "pulse" | "bounce";
|
|
71
|
-
/**
|
|
72
|
-
* click handler
|
|
73
|
-
*/
|
|
74
|
-
onClick?: React.MouseEventHandler;
|
|
71
|
+
animate?: "spin" | "fade" | "pulse" | "bounce";
|
|
75
72
|
}
|
|
76
|
-
|
|
77
73
|
const SvgTextSize = ["", ".875em", ".525em", ".35em", ".25em"];
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
74
|
+
|
|
75
|
+
export type IconProps = string | BaseIconProps | React.ReactElement;
|
|
76
|
+
|
|
77
|
+
const ANIMATIONS = {
|
|
78
|
+
spin: "animate-spin",
|
|
79
|
+
fade: "animate-fade",
|
|
80
|
+
pulse: "animate-pulse",
|
|
81
|
+
bounce: "animate-bounce",
|
|
84
82
|
};
|
|
85
83
|
|
|
86
84
|
/**
|
|
87
|
-
*
|
|
85
|
+
* A versatile icon component that supports multiple formats: SVG paths, CSS class names,
|
|
86
|
+
* and short text labels (rendered inside an SVG).
|
|
87
|
+
*
|
|
88
|
+
* Recommended to use iconify for CSS icons
|
|
89
|
+
*
|
|
90
|
+
* @see https://iconify.design/ for a comprehensive collection of icons that can be easily integrated using CSS class names, providing a wide range of options for developers to choose from when selecting icons for their applications.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```tsx
|
|
94
|
+
* import { Icon } from "@react-fabric/core";
|
|
95
|
+
*
|
|
96
|
+
* // Render as a raw SVG path
|
|
97
|
+
* <Icon icon="M10 20v-6h4v6h5V3h-5V13H9v6H5v-6h4z" size="24px" />
|
|
98
|
+
*
|
|
99
|
+
* // Render via CSS class
|
|
100
|
+
* <Icon icon="icon-[mdi--home]" />
|
|
101
|
+
*
|
|
102
|
+
* // Render as a short text label inside an SVG
|
|
103
|
+
* <Icon icon="+" size="1.5em" />
|
|
104
|
+
*
|
|
105
|
+
* // With additional features like animations and custom colors
|
|
106
|
+
* <Icon icon="M4 10h2v10H4zm8-2h2v10h-2zm6-7h2v10h-2zm-4 12h2v3h-2z" animate="spin" color="primary-500" />
|
|
107
|
+
* ```
|
|
88
108
|
*/
|
|
89
|
-
export
|
|
90
|
-
ref,
|
|
91
|
-
icon,
|
|
92
|
-
bg,
|
|
93
|
-
color,
|
|
94
|
-
size = "",
|
|
95
|
-
rtlFlip,
|
|
109
|
+
export function Icon({
|
|
96
110
|
animate,
|
|
111
|
+
className,
|
|
112
|
+
color,
|
|
113
|
+
bg,
|
|
114
|
+
icon,
|
|
115
|
+
ref,
|
|
97
116
|
rounded,
|
|
117
|
+
rtlFlip,
|
|
118
|
+
size,
|
|
98
119
|
viewBox = "0 0 24 24",
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
...rest
|
|
102
|
-
}: IconProps) => {
|
|
103
|
-
/** ***************** style map *******************/
|
|
104
|
-
const styles = useMemo(() => {
|
|
105
|
-
const s: KeyValue = {};
|
|
106
|
-
if (bg) {
|
|
107
|
-
s.backgroundColor = getColor(bg);
|
|
108
|
-
}
|
|
109
|
-
if (color) {
|
|
110
|
-
s.color = getColor(color);
|
|
111
|
-
}
|
|
112
|
-
if (size && !(size in SizeMap)) {
|
|
113
|
-
s.fontSize = size;
|
|
114
|
-
}
|
|
115
|
-
if (size && size in SizeMap) {
|
|
116
|
-
s.fontSize = SizeMap[size];
|
|
117
|
-
}
|
|
118
|
-
return s;
|
|
119
|
-
}, [bg, color, size]);
|
|
120
|
-
|
|
121
|
-
/** ***************** check if icon is svg path *******************/
|
|
122
|
-
const isSvg = useMemo(() => {
|
|
123
|
-
return isSvgPath(icon);
|
|
124
|
-
}, [icon]);
|
|
125
|
-
|
|
126
|
-
/** ***************** render icon *******************/
|
|
120
|
+
...props
|
|
121
|
+
}: BaseIconProps & RefProp) {
|
|
127
122
|
const iconEl = useMemo(() => {
|
|
128
|
-
if (
|
|
129
|
-
|
|
123
|
+
if (isValidElement(icon)) return icon;
|
|
124
|
+
if (isString(icon)) {
|
|
125
|
+
if (isSvgPath(icon)) {
|
|
126
|
+
return (
|
|
127
|
+
<svg viewBox={viewBox} className="size-[1em]">
|
|
128
|
+
<path fill="currentColor" d={icon.toString()} />
|
|
129
|
+
</svg>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return icon.length <= 4 ? (
|
|
134
|
+
<svg role="img" className="size-[1em]">
|
|
135
|
+
<text
|
|
136
|
+
x="50%"
|
|
137
|
+
y="50%"
|
|
138
|
+
dy=".1em"
|
|
139
|
+
dominantBaseline="middle"
|
|
140
|
+
textAnchor="middle"
|
|
141
|
+
style={{ fontSize: SvgTextSize[icon.length] }}
|
|
142
|
+
>
|
|
143
|
+
{icon}
|
|
144
|
+
</text>
|
|
145
|
+
</svg>
|
|
146
|
+
) : (
|
|
147
|
+
<i className={`size-[1em] ${icon}`} />
|
|
148
|
+
);
|
|
130
149
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
<path fill="currentColor" d={icon.toString()} />
|
|
134
|
-
</svg>
|
|
135
|
-
) : icon?.toString().length <= 4 ? (
|
|
136
|
-
<svg role="img">
|
|
137
|
-
<text
|
|
138
|
-
x="50%"
|
|
139
|
-
y="50%"
|
|
140
|
-
dy=".1em"
|
|
141
|
-
dominantBaseline="middle"
|
|
142
|
-
textAnchor="middle"
|
|
143
|
-
style={{ fontSize: SvgTextSize[icon.length] ?? "1em" }}
|
|
144
|
-
>
|
|
145
|
-
{icon}
|
|
146
|
-
</text>
|
|
147
|
-
</svg>
|
|
148
|
-
) : (
|
|
149
|
-
<i className={`${icon}`} />
|
|
150
|
-
);
|
|
151
|
-
}, [icon, isSvg, viewBox]);
|
|
150
|
+
throw Error("Invalid icon expected string");
|
|
151
|
+
}, [icon, viewBox]);
|
|
152
152
|
|
|
153
153
|
return (
|
|
154
154
|
<dfn
|
|
155
|
-
|
|
155
|
+
data-ref="icon"
|
|
156
|
+
{...props}
|
|
156
157
|
ref={ref}
|
|
157
158
|
role="presentation"
|
|
158
|
-
className={
|
|
159
|
-
|
|
159
|
+
className={cn(
|
|
160
|
+
"fabric-icon",
|
|
161
|
+
"inline-block",
|
|
160
162
|
className,
|
|
161
|
-
"select-none overflow-hidden
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
rounded && "rounded-full",
|
|
166
|
-
animate && `animate-${animate}`,
|
|
163
|
+
"select-none overflow-hidden box-content leading-0 not-italic text-center",
|
|
164
|
+
rounded ? "rounded-full" : "rounded",
|
|
165
|
+
animate && ANIMATIONS[animate],
|
|
166
|
+
rtlFlip && "rtl:-scale-x-100",
|
|
167
167
|
)}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
style={{
|
|
169
|
+
fontSize: size,
|
|
170
|
+
color: getColor(color),
|
|
171
|
+
backgroundColor: getColor(bg),
|
|
172
|
+
}}
|
|
172
173
|
>
|
|
173
174
|
{iconEl}
|
|
174
175
|
</dfn>
|
|
175
176
|
);
|
|
176
|
-
}
|
|
177
|
+
}
|