@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
package/src/core/aside/Aside.tsx
CHANGED
|
@@ -1,78 +1,65 @@
|
|
|
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
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
useEffect,
|
|
28
|
-
useMemo,
|
|
29
|
-
useRef,
|
|
30
|
-
useState,
|
|
31
|
-
type ReactNode,
|
|
32
|
-
} from "react";
|
|
33
|
-
import { Loading } from "../../components/animations/Animations";
|
|
26
|
+
import { cn } from "@react-fabric/utilities";
|
|
27
|
+
import { Activity, useEffect, useMemo, useRef, useState } from "react";
|
|
28
|
+
import { StyleEffect } from "../../components/effect/StyleEffect";
|
|
34
29
|
import { Icon } from "../../components/icon/Icon";
|
|
30
|
+
import type { TitlebarProps } from "../../components/titlebar/Titlebar";
|
|
31
|
+
import { Titlebar } from "../../components/titlebar/Titlebar";
|
|
32
|
+
import { useGlobals } from "../../context/context";
|
|
35
33
|
import { useLayoutEffectDebugger } from "../../hooks/useEffectDebugger";
|
|
34
|
+
import { usePropState } from "../../hooks/usePropState";
|
|
36
35
|
import { usePropToggle } from "../../hooks/usePropToggle";
|
|
37
36
|
import { useResize } from "../../hooks/useResize";
|
|
38
|
-
import {
|
|
39
|
-
|
|
40
|
-
type CollapseProps,
|
|
41
|
-
type CssProp,
|
|
42
|
-
type Elements,
|
|
43
|
-
type IconProps,
|
|
44
|
-
type TestProps,
|
|
45
|
-
} from "../../types";
|
|
46
|
-
import { CoreIcons } from "../../types/icons";
|
|
37
|
+
import type { ChildrenProp, CollapseProps, CssPropWithMap, TestProps } from "../../types";
|
|
38
|
+
import { getIconProps } from "../../utils";
|
|
47
39
|
import { ErrorBoundary } from "../boundary/ErrorBoundary";
|
|
48
|
-
import classes from "./Aside.module.css";
|
|
49
40
|
|
|
50
41
|
export interface AsideProps
|
|
51
|
-
extends
|
|
42
|
+
extends
|
|
52
43
|
ChildrenProp,
|
|
53
44
|
CollapseProps,
|
|
54
|
-
|
|
45
|
+
CssPropWithMap<{
|
|
46
|
+
root?: string;
|
|
47
|
+
titlebar?: string;
|
|
48
|
+
body?: string;
|
|
49
|
+
title?: string;
|
|
50
|
+
icon?: string;
|
|
51
|
+
actions?: string;
|
|
52
|
+
}>,
|
|
55
53
|
TestProps {
|
|
56
|
-
/**
|
|
57
|
-
* page title
|
|
58
|
-
*/
|
|
59
|
-
title?: ReactNode;
|
|
60
54
|
/**
|
|
61
55
|
* align inline-end
|
|
62
56
|
*/
|
|
63
57
|
align?: "start" | "end";
|
|
58
|
+
|
|
64
59
|
/**
|
|
65
|
-
*
|
|
66
|
-
*/
|
|
67
|
-
actions?: Elements<JSX.Element>;
|
|
68
|
-
/**
|
|
69
|
-
* header class
|
|
70
|
-
*/
|
|
71
|
-
headerClassName?: string;
|
|
72
|
-
/**
|
|
73
|
-
* header class
|
|
60
|
+
* margin (uses tailwind spacing calculation, ie. 2 = 0.5rem)
|
|
74
61
|
*/
|
|
75
|
-
|
|
62
|
+
margin?: number;
|
|
76
63
|
|
|
77
64
|
/**
|
|
78
65
|
* show loading indicator
|
|
@@ -85,12 +72,15 @@ export interface AsideProps
|
|
|
85
72
|
/**
|
|
86
73
|
* allow flyout with collapsed
|
|
87
74
|
*/
|
|
88
|
-
|
|
75
|
+
enableFlyout?: boolean;
|
|
89
76
|
/**
|
|
90
77
|
* event handler when shown
|
|
91
78
|
*/
|
|
92
79
|
onFlyout?: () => void;
|
|
93
80
|
|
|
81
|
+
id?: string;
|
|
82
|
+
hideCollapseHandle?: boolean;
|
|
83
|
+
|
|
94
84
|
/**
|
|
95
85
|
* fixed width
|
|
96
86
|
*/
|
|
@@ -103,25 +93,59 @@ export interface AsideProps
|
|
|
103
93
|
* min width
|
|
104
94
|
*/
|
|
105
95
|
minWidth?: number | string;
|
|
96
|
+
/**
|
|
97
|
+
* Resize event
|
|
98
|
+
*/
|
|
99
|
+
onResize?: (width: number) => void;
|
|
106
100
|
}
|
|
107
101
|
|
|
108
102
|
/**
|
|
109
|
-
*
|
|
103
|
+
* A sidebar component that can be collapsed, resized, and has a flyout feature.
|
|
104
|
+
* It supports a title, icon, actions, and loading state.
|
|
105
|
+
* It can be aligned to the start or end of the page.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```jsx
|
|
109
|
+
* <Aside
|
|
110
|
+
* title="Sidebar Title"
|
|
111
|
+
* icon=icon-[mdi--menu]
|
|
112
|
+
* rtlFlip={true}
|
|
113
|
+
* className="custom-aside"
|
|
114
|
+
* bodyClassName="custom-aside-body"
|
|
115
|
+
* headerClassName="custom-aside-header"
|
|
116
|
+
* resizeable={true}
|
|
117
|
+
* flyout={true}
|
|
118
|
+
* onFlyout={() => console.log("Flyout triggered")}
|
|
119
|
+
* collapsed={false}
|
|
120
|
+
* collapsable={true}
|
|
121
|
+
* onCollapse={() => console.log("Collapsed toggled")}
|
|
122
|
+
* actions={<button>Action</button>}
|
|
123
|
+
* loading={false}
|
|
124
|
+
* align="start"
|
|
125
|
+
* width="20rem"
|
|
126
|
+
* minWidth="2rem"
|
|
127
|
+
* maxWidth="30vw"
|
|
128
|
+
* data-testid="aside-test"
|
|
129
|
+
* data-test-value="aside-value"
|
|
130
|
+
* >
|
|
131
|
+
* <Content>This is the content of the aside.</Content>
|
|
132
|
+
* </Aside>
|
|
133
|
+
* ```
|
|
110
134
|
*/
|
|
111
|
-
export
|
|
135
|
+
export function Aside({
|
|
112
136
|
children,
|
|
113
137
|
title,
|
|
114
138
|
icon,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
id,
|
|
140
|
+
margin,
|
|
141
|
+
hideCollapseHandle,
|
|
118
142
|
className,
|
|
119
|
-
|
|
120
|
-
headerClassName,
|
|
143
|
+
classNames,
|
|
121
144
|
resizeable,
|
|
122
|
-
|
|
145
|
+
enableFlyout,
|
|
123
146
|
onFlyout,
|
|
124
|
-
|
|
147
|
+
onResize,
|
|
148
|
+
collapsed: _collapsed,
|
|
125
149
|
collapsable,
|
|
126
150
|
onCollapse,
|
|
127
151
|
actions,
|
|
@@ -132,47 +156,47 @@ export const Aside = ({
|
|
|
132
156
|
maxWidth = "30vw",
|
|
133
157
|
"data-testid": testId,
|
|
134
158
|
"data-test-value": testValue,
|
|
135
|
-
}: AsideProps)
|
|
159
|
+
}: AsideProps & TitlebarProps) {
|
|
136
160
|
const elementRef = useRef<HTMLDivElement>(null);
|
|
137
|
-
const [width, setWidth] =
|
|
161
|
+
const [width, setWidth] = usePropState(wd);
|
|
138
162
|
const [peek, setPeek] = useState(false);
|
|
163
|
+
const { registerArea, unregisterArea } = useGlobals();
|
|
139
164
|
|
|
140
|
-
const [
|
|
165
|
+
const [collapsed, onToggle] = usePropToggle(_collapsed, onCollapse);
|
|
141
166
|
|
|
142
|
-
|
|
143
|
-
setWidth(wd);
|
|
144
|
-
}, [wd]);
|
|
145
|
-
|
|
146
|
-
const handleResize = useRef(({ x }: { x: number }) => {
|
|
167
|
+
const handleResizeRef = useRef(({ x }: { x: number }) => {
|
|
147
168
|
if (elementRef.current != null) {
|
|
148
|
-
setWidth(elementRef.current.offsetWidth + x);
|
|
169
|
+
if (x !== 0) setWidth(elementRef.current.offsetWidth + x);
|
|
149
170
|
}
|
|
150
171
|
});
|
|
151
|
-
const
|
|
172
|
+
const { ref, isResizing, onMouseDown } = useResize(handleResizeRef.current, {
|
|
152
173
|
isReverse: align === "end",
|
|
174
|
+
onEnd() {
|
|
175
|
+
const width = (ref.current?.parentElement as HTMLElement)?.offsetWidth;
|
|
176
|
+
setWidth(width);
|
|
177
|
+
onResize?.(width ?? 0);
|
|
178
|
+
},
|
|
153
179
|
});
|
|
154
180
|
|
|
155
|
-
const tryPeek =
|
|
156
|
-
if (
|
|
157
|
-
if (
|
|
158
|
-
setPeek(!peek);
|
|
159
|
-
!peek
|
|
181
|
+
const tryPeek = (force?: boolean) => {
|
|
182
|
+
if (collapsed) {
|
|
183
|
+
if (enableFlyout) {
|
|
184
|
+
setPeek(force ?? !peek);
|
|
185
|
+
if (force ?? !peek) onFlyout?.();
|
|
160
186
|
} else {
|
|
161
|
-
void
|
|
187
|
+
void onToggle(force);
|
|
162
188
|
}
|
|
163
189
|
}
|
|
164
|
-
}
|
|
190
|
+
};
|
|
165
191
|
|
|
166
192
|
useLayoutEffectDebugger(
|
|
167
193
|
() => {
|
|
168
|
-
if (peek) {
|
|
194
|
+
if (!isResizing && peek) {
|
|
169
195
|
const handler = (e: MouseEvent) => {
|
|
170
196
|
if (
|
|
171
|
-
(e.target as HTMLElement).closest(`[data-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
`[data-ref="asidePlaceholder"]`,
|
|
175
|
-
) == null
|
|
197
|
+
(e.target as HTMLElement).closest(`[data-dismiss="true"]`) !== null ||
|
|
198
|
+
((e.target as HTMLElement).closest(`[data-ref="aside-container"]`) === null &&
|
|
199
|
+
(e.target as HTMLElement).closest(`[data-ref="aside-placeholder"]`) === null)
|
|
176
200
|
) {
|
|
177
201
|
setPeek(false);
|
|
178
202
|
}
|
|
@@ -182,10 +206,20 @@ export const Aside = ({
|
|
|
182
206
|
return () => document.removeEventListener("mouseup", handler);
|
|
183
207
|
}
|
|
184
208
|
},
|
|
185
|
-
[peek],
|
|
209
|
+
[peek, isResizing],
|
|
186
210
|
"Aside peek",
|
|
187
211
|
);
|
|
188
212
|
|
|
213
|
+
useEffect(() => {
|
|
214
|
+
if (id) {
|
|
215
|
+
registerArea(id, (open) => {
|
|
216
|
+
tryPeek(open);
|
|
217
|
+
});
|
|
218
|
+
return () => unregisterArea(id);
|
|
219
|
+
}
|
|
220
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
221
|
+
}, [id]);
|
|
222
|
+
|
|
189
223
|
const widthStyles = useMemo(
|
|
190
224
|
() => ({
|
|
191
225
|
width,
|
|
@@ -197,88 +231,99 @@ export const Aside = ({
|
|
|
197
231
|
|
|
198
232
|
return (
|
|
199
233
|
<aside
|
|
200
|
-
className={
|
|
234
|
+
className={cn("fabric-aside", className, "grid relative min-h-0 z-2", collapsed && (enableFlyout ? "w-fit" : "w-0"))}
|
|
201
235
|
data-align={align}
|
|
202
|
-
data-
|
|
236
|
+
data-peek={peek}
|
|
237
|
+
data-flyout={enableFlyout}
|
|
203
238
|
data-loading={loading}
|
|
204
|
-
data-collapsed={
|
|
205
|
-
style={isCollapsed ? undefined : widthStyles}
|
|
239
|
+
data-collapsed={collapsed}
|
|
206
240
|
data-testid={testId}
|
|
207
241
|
data-test-value={testValue}
|
|
242
|
+
data-ref="aside"
|
|
243
|
+
style={
|
|
244
|
+
{
|
|
245
|
+
"--aside-margin": `calc(var(--spacing) * ${margin ?? 0})`,
|
|
246
|
+
} as React.CSSProperties
|
|
247
|
+
}
|
|
208
248
|
>
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
"
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
249
|
+
{collapsed && enableFlyout && (
|
|
250
|
+
<div
|
|
251
|
+
role="none"
|
|
252
|
+
onClick={() => tryPeek()}
|
|
253
|
+
data-ref="aside-placeholder"
|
|
254
|
+
className={cn("fabric-asidePlaceholder", classNames?.root, classNames?.body, "overflow-hidden")}
|
|
255
|
+
>
|
|
256
|
+
<StyleEffect />
|
|
257
|
+
{icon && <Icon className={cn("fabric-asideIcon", classNames?.icon, "p-1 text-lg select-none pointer-events-none")} {...getIconProps(icon)} />}
|
|
258
|
+
<div data-ref="aside-title" className={cn("fabric-asideTitle", classNames?.title, "truncate py-0.5 px-1 select-none pointer-events-none")}>
|
|
259
|
+
{title}
|
|
260
|
+
</div>
|
|
218
261
|
<div
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
)}
|
|
262
|
+
role="none"
|
|
263
|
+
data-dismiss="true"
|
|
264
|
+
className="area-[pin] p-2 hover:bg-primary-500/10 cursor-pointer flex items-center justify-center"
|
|
265
|
+
onMouseDown={(e) => e.stopPropagation()}
|
|
266
|
+
onClick={() => onToggle()}
|
|
223
267
|
>
|
|
224
|
-
|
|
268
|
+
<Icon icon="icon-[mdi--pin-outline]" className="rotate-30" />
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
)}
|
|
272
|
+
<div data-ref="aside-container" className={cn("fabric-asideContainer", classNames?.root, "overflow-hidden grid")} ref={elementRef} style={widthStyles}>
|
|
273
|
+
<StyleEffect />
|
|
274
|
+
<Titlebar title={title} icon={icon} actions={actions} className={classNames?.titlebar} />
|
|
275
|
+
<Activity mode={peek || !collapsed ? "visible" : "hidden"}>
|
|
276
|
+
<ErrorBoundary>{children}</ErrorBoundary>
|
|
277
|
+
</Activity>
|
|
278
|
+
|
|
279
|
+
{enableFlyout && !hideCollapseHandle && (
|
|
280
|
+
<div
|
|
281
|
+
role="none"
|
|
282
|
+
data-dismiss="true"
|
|
283
|
+
className="area-[pin] p-2 hover:bg-primary-500/10 cursor-pointer flex items-center justify-center bg-tint-500/10"
|
|
284
|
+
onMouseDown={(e) => e.stopPropagation()}
|
|
285
|
+
onClick={() => onToggle()}
|
|
286
|
+
>
|
|
287
|
+
{!collapsed ? <Icon icon="icon-[mdi--pin]" /> : <Icon icon="icon-[mdi--pin-outline]" className="rotate-30" />}
|
|
225
288
|
</div>
|
|
226
289
|
)}
|
|
227
|
-
|
|
228
|
-
<Icon
|
|
229
|
-
aria-label={isCollapsed ? "expand" : "collapse"}
|
|
230
|
-
className={classNames(classes.asideCollapse, "p-2 select-none")}
|
|
231
|
-
icon={CoreIcons.chevronLeft}
|
|
232
|
-
rtlFlip
|
|
233
|
-
onClick={toggleCollapse}
|
|
234
|
-
data-ref="asideToggle"
|
|
235
|
-
/>
|
|
236
|
-
)}
|
|
237
|
-
{icon && (
|
|
238
|
-
<Icon
|
|
239
|
-
icon={icon}
|
|
240
|
-
bg={iconBg}
|
|
241
|
-
color={iconColor}
|
|
242
|
-
rtlFlip={rtlFlip}
|
|
243
|
-
className={classNames(
|
|
244
|
-
classes.asideIcon,
|
|
245
|
-
"p-1 text-lg select-none pointer-events-none",
|
|
246
|
-
)}
|
|
247
|
-
/>
|
|
248
|
-
)}
|
|
249
|
-
{actions && <div className={classes.asideActions}>{actions}</div>}
|
|
250
|
-
</header>
|
|
251
|
-
{loading && <Loading />}
|
|
252
|
-
{isCollapsed && (
|
|
290
|
+
|
|
253
291
|
<div
|
|
292
|
+
ref={ref}
|
|
254
293
|
role="none"
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
className={
|
|
294
|
+
data-ref="resize-handle"
|
|
295
|
+
onMouseDown={onMouseDown}
|
|
296
|
+
className={cn(
|
|
297
|
+
"fabric-asideResizer",
|
|
298
|
+
resizeable && "before:absolute before:top-1/2 before:-translate-y-1/2 before:content-['⋮'] before:leading-0",
|
|
299
|
+
"after:absolute after:transform-[height] after:border-solid after:border-s-2 after:h-0 after:m-auto after:inset-y-0 after:border-s-primary-500",
|
|
300
|
+
resizeable && "hover:after:duration-500 hover:after:h-full",
|
|
301
|
+
align === "start" ? "before:-inset-e-px" : "before:-inset-s-px",
|
|
302
|
+
isResizing && "after:h-full",
|
|
303
|
+
resizeable ? "w-1 cursor-col-resize bg-tint-50 border-x border-tint-300/50 -mx-px" : "w-0 border-0 pointer-events-none",
|
|
304
|
+
)}
|
|
258
305
|
/>
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
ref={elementRef}
|
|
262
|
-
data-ref="asideBody"
|
|
263
|
-
className={classNames(
|
|
264
|
-
classes.asideBody,
|
|
265
|
-
bodyClassName,
|
|
266
|
-
"overflow-hidden grid",
|
|
267
|
-
)}
|
|
268
|
-
style={isCollapsed ? widthStyles : undefined}
|
|
269
|
-
data-testid="aside-body"
|
|
270
|
-
>
|
|
271
|
-
<ErrorBoundary>{children}</ErrorBoundary>
|
|
272
|
-
</section>
|
|
273
|
-
{resizeable && (
|
|
306
|
+
</div>
|
|
307
|
+
{collapsable && !enableFlyout && !hideCollapseHandle && (
|
|
274
308
|
<div
|
|
275
|
-
|
|
276
|
-
className={
|
|
277
|
-
|
|
278
|
-
"
|
|
309
|
+
role="none"
|
|
310
|
+
className={cn(
|
|
311
|
+
"absolute z-1 h-16 w-2 py-6 leading-0 m-auto inset-y-0",
|
|
312
|
+
"bg-dimmed text-dimmed outline outline-tint-200/50 rounded-sm cursor-pointer pointer-events-auto",
|
|
313
|
+
align === "start" ? "rounded-s-none -inset-e-2" : "rounded-e-none -inset-s-2",
|
|
314
|
+
!collapsed && "opacity-70 hover:opacity-100 hover:bg-default hover:outline-default",
|
|
279
315
|
)}
|
|
280
|
-
|
|
316
|
+
onMouseDown={(e) => e.stopPropagation()}
|
|
317
|
+
onClick={() => onToggle()}
|
|
318
|
+
>
|
|
319
|
+
<i
|
|
320
|
+
className={
|
|
321
|
+
"-ms-1 inline-block rtl:-scale-100 " +
|
|
322
|
+
((collapsed && align === "start") || (!collapsed && align === "end") ? "icon-[mdi--chevron-right]" : "icon-[mdi--chevron-left]")
|
|
323
|
+
}
|
|
324
|
+
/>
|
|
325
|
+
</div>
|
|
281
326
|
)}
|
|
282
327
|
</aside>
|
|
283
328
|
);
|
|
284
|
-
}
|
|
329
|
+
}
|
|
@@ -1,37 +1,39 @@
|
|
|
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 {
|
|
25
|
-
import classNames from "classnames";
|
|
26
|
-
import { Component } from "react";
|
|
26
|
+
import { Component, useState } from "react";
|
|
27
27
|
import { useTranslation } from "react-i18next";
|
|
28
28
|
import { Fragment } from "react/jsx-runtime";
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import { type ChildrenProp } from "../../types";
|
|
32
|
-
import classes from "./ErrorBoundary.module.css";
|
|
29
|
+
import { useGlobals } from "../../context/context";
|
|
30
|
+
import type { ChildrenProp } from "../../types";
|
|
33
31
|
import { ErrorIcon } from "./ErrorIcon";
|
|
34
|
-
|
|
32
|
+
|
|
33
|
+
interface ErrorComponentProps {
|
|
34
|
+
error?: string;
|
|
35
|
+
errorElement?: React.ComponentType<{ error?: string }>;
|
|
36
|
+
}
|
|
35
37
|
|
|
36
38
|
const DefaultError = ({ error }: { error?: string }) => {
|
|
37
39
|
const { t } = useTranslation("core");
|
|
@@ -43,45 +45,31 @@ const DefaultError = ({ error }: { error?: string }) => {
|
|
|
43
45
|
);
|
|
44
46
|
};
|
|
45
47
|
|
|
46
|
-
const ErrorMessage = ({ error, errorElement }:
|
|
48
|
+
const ErrorMessage = ({ error, errorElement }: ErrorComponentProps) => {
|
|
47
49
|
const { errorElement: globalError } = useGlobals();
|
|
48
|
-
const EE =
|
|
49
|
-
() => errorElement ?? globalError ?? DefaultError,
|
|
50
|
-
[],
|
|
51
|
-
"ErrorBoundary element",
|
|
52
|
-
);
|
|
50
|
+
const EE = errorElement ?? globalError ?? DefaultError;
|
|
53
51
|
return (
|
|
54
52
|
<Fragment>
|
|
55
53
|
<ErrorIcon />
|
|
56
|
-
<div className=
|
|
54
|
+
<div className="fabric-boundaryMessage p-2">
|
|
57
55
|
<EE error={error} />
|
|
58
56
|
</div>
|
|
59
57
|
</Fragment>
|
|
60
58
|
);
|
|
61
59
|
};
|
|
62
60
|
|
|
63
|
-
const ErrorStack = ({ error, stack }:
|
|
64
|
-
const [show,
|
|
65
|
-
|
|
61
|
+
const ErrorStack = ({ error, stack }: { error?: string; stack: string }) => {
|
|
62
|
+
const [show, setShow] = useState(false);
|
|
63
|
+
console.error(error, {}, stack);
|
|
66
64
|
return (
|
|
67
|
-
<div className=
|
|
68
|
-
<div
|
|
69
|
-
className={
|
|
70
|
-
classes.boundaryLink,
|
|
71
|
-
"px-2 py-1 text-xs text-end",
|
|
72
|
-
)}
|
|
73
|
-
>
|
|
74
|
-
<span role="link" tabIndex={0} className="link" onClick={toggleShow}>
|
|
65
|
+
<div className="fabric-boundaryDetail overflow-hidden grid">
|
|
66
|
+
<div className="fabric-boundaryLink px-2 py-1 text-xs text-end">
|
|
67
|
+
<span role="link" tabIndex={0} className="link" onClick={() => setShow(!show)} onKeyDown={() => setShow(!show)}>
|
|
75
68
|
{show ? "Hide Detail" : "Show Detail"}
|
|
76
69
|
</span>
|
|
77
70
|
</div>
|
|
78
71
|
{show && (
|
|
79
|
-
<div
|
|
80
|
-
className={classNames(
|
|
81
|
-
classes.boundaryStack,
|
|
82
|
-
"overflow-auto p-2 text-xs border-t",
|
|
83
|
-
)}
|
|
84
|
-
>
|
|
72
|
+
<div className="fabric-boundaryStack overflow-auto p-2 text-xs border-t">
|
|
85
73
|
<pre className="whitespace-pre-wrap">{stack}</pre>
|
|
86
74
|
</div>
|
|
87
75
|
)}
|
|
@@ -90,7 +78,15 @@ const ErrorStack = ({ error, stack }: KeyValue) => {
|
|
|
90
78
|
};
|
|
91
79
|
|
|
92
80
|
/**
|
|
93
|
-
*
|
|
81
|
+
* Catches JavaScript errors in the child tree, logs them, and displays a fallback UI.
|
|
82
|
+
* It can be used to wrap any component tree to prevent the entire application from crashing due to errors in a specific part of the UI.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```tsx
|
|
86
|
+
* <ErrorBoundary errorElement={CustomErrorComponent}>
|
|
87
|
+
* <MyComponent />
|
|
88
|
+
* </ErrorBoundary>
|
|
89
|
+
* ```
|
|
94
90
|
*/
|
|
95
91
|
export class ErrorBoundary extends Component<
|
|
96
92
|
{
|
|
@@ -105,7 +101,7 @@ export class ErrorBoundary extends Component<
|
|
|
105
101
|
return { hasError: true, error: error.message, stack: error.stack };
|
|
106
102
|
}
|
|
107
103
|
|
|
108
|
-
constructor(props:
|
|
104
|
+
constructor(props: ErrorComponentProps & ChildrenProp) {
|
|
109
105
|
super(props);
|
|
110
106
|
this.state = { hasError: false };
|
|
111
107
|
}
|
|
@@ -120,23 +116,9 @@ export class ErrorBoundary extends Component<
|
|
|
120
116
|
const { errorElement: E } = this.props;
|
|
121
117
|
// You can render any custom fallback UI
|
|
122
118
|
return (
|
|
123
|
-
<div
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
"grid grid-rows-1 overflow-hidden p-0.5 rounded-capped",
|
|
127
|
-
)}
|
|
128
|
-
>
|
|
129
|
-
<div
|
|
130
|
-
className={classNames(
|
|
131
|
-
classes.boundaryContent,
|
|
132
|
-
"overflow-hidden grid rounded-capped",
|
|
133
|
-
)}
|
|
134
|
-
>
|
|
135
|
-
<ErrorMessage error={this.state.error} errorElement={E} />
|
|
136
|
-
{env === "development" && (
|
|
137
|
-
<ErrorStack error={this.state.error} stack={this.state.stack} />
|
|
138
|
-
)}
|
|
139
|
-
</div>
|
|
119
|
+
<div className="fabric-errorBoundary grid overflow-hidden rounded-capped">
|
|
120
|
+
<ErrorMessage error={this.state.error} errorElement={E} />
|
|
121
|
+
{env === "development" && <ErrorStack error={this.state.error} stack={this.state.stack as string} />}
|
|
140
122
|
</div>
|
|
141
123
|
);
|
|
142
124
|
}
|