@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/context/Global.tsx
CHANGED
|
@@ -1,158 +1,97 @@
|
|
|
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
26
|
import i18next from "i18next";
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
} from "react";
|
|
35
|
-
import { HotKeyWrapper } from "../hotkeys/HotKeyWrapper";
|
|
36
|
-
import {
|
|
37
|
-
NotificationManager,
|
|
38
|
-
type NotificationManagerRef,
|
|
39
|
-
} from "./NotificationCenter";
|
|
40
|
-
|
|
41
|
-
interface State {
|
|
42
|
-
locale: string;
|
|
43
|
-
colorScheme: "light" | "dark";
|
|
44
|
-
calendar: "gregorian" | "hijri";
|
|
45
|
-
}
|
|
27
|
+
import type { PropsWithChildren } from "react";
|
|
28
|
+
import { useCallback, useEffect, useEffectEvent, useLayoutEffect, useMemo, useState } from "react";
|
|
29
|
+
import { flushSync } from "react-dom";
|
|
30
|
+
import { Toaster } from "sonner";
|
|
31
|
+
import { AnimationIndicator } from "../components/animations/Indicator";
|
|
32
|
+
import { Icon } from "../components/icon/Icon";
|
|
33
|
+
import type { State } from "./context";
|
|
34
|
+
import { GlobalContext } from "./context";
|
|
35
|
+
import { ModalManagerProvider } from "./ModalManager";
|
|
46
36
|
|
|
47
37
|
export interface GlobalProps extends PropsWithChildren {
|
|
48
38
|
/**
|
|
49
39
|
* application default error display
|
|
50
40
|
*/
|
|
51
|
-
errorElement?: ComponentType<{ error?: string }>;
|
|
41
|
+
errorElement?: React.ComponentType<{ error?: string }>;
|
|
42
|
+
|
|
43
|
+
// Overlay effect
|
|
44
|
+
styleEffect?: "glass" | "matte";
|
|
52
45
|
|
|
53
46
|
defaultLocale?: string;
|
|
54
47
|
defaultCalendar?: State["calendar"];
|
|
55
48
|
defaultColorScheme?: State["colorScheme"];
|
|
56
49
|
}
|
|
57
50
|
|
|
58
|
-
interface GlobalContextType {
|
|
59
|
-
/**
|
|
60
|
-
* change language locale
|
|
61
|
-
* @param locale
|
|
62
|
-
*/
|
|
63
|
-
changeLocale: (locale: string) => string;
|
|
64
|
-
/**
|
|
65
|
-
* change date calendat
|
|
66
|
-
* @param locale
|
|
67
|
-
*/
|
|
68
|
-
changeCalendar: (calendar: State["calendar"]) => State["calendar"];
|
|
69
|
-
/**
|
|
70
|
-
* toggle theme between light and dark
|
|
71
|
-
* or force to theme provided
|
|
72
|
-
* @param theme
|
|
73
|
-
*/
|
|
74
|
-
toggleColorScheme: (
|
|
75
|
-
colorScheme?: State["colorScheme"],
|
|
76
|
-
) => State["colorScheme"];
|
|
77
|
-
/**
|
|
78
|
-
* application default error display
|
|
79
|
-
*/
|
|
80
|
-
errorElement: GlobalProps["errorElement"];
|
|
81
|
-
|
|
82
|
-
currentLocale: string;
|
|
83
|
-
currentCalendar: State["calendar"];
|
|
84
|
-
currentColorScheme: State["colorScheme"];
|
|
85
|
-
|
|
86
|
-
notificationManager: NotificationManagerRef;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
51
|
const KEY_LOCALE = "ruf:locale";
|
|
90
52
|
const KEY_CALENDAR = "ruf:calendar";
|
|
91
53
|
const KEY_COLOR_SCHEME = "ruf:colorScheme";
|
|
92
54
|
const systemLocale = () => {
|
|
93
|
-
return (
|
|
94
|
-
(typeof window !== "undefined"
|
|
95
|
-
? localStorage.getItem(KEY_LOCALE)
|
|
96
|
-
: undefined) ?? "en"
|
|
97
|
-
);
|
|
55
|
+
return (typeof window !== "undefined" ? localStorage.getItem(KEY_LOCALE) : undefined) ?? "en";
|
|
98
56
|
};
|
|
99
57
|
const systemCalendar = () => {
|
|
100
|
-
return (
|
|
101
|
-
(typeof window !== "undefined"
|
|
102
|
-
? (localStorage.getItem(KEY_CALENDAR) as AnyObject)
|
|
103
|
-
: undefined) ?? "gregorian"
|
|
104
|
-
);
|
|
58
|
+
return (typeof window !== "undefined" ? (localStorage.getItem(KEY_CALENDAR) as State["calendar"]) : undefined) ?? "gregorian";
|
|
105
59
|
};
|
|
106
60
|
const systemColorScheme = () => {
|
|
107
61
|
const theme: AnyObject =
|
|
108
62
|
typeof window !== "undefined"
|
|
109
|
-
? localStorage.getItem(KEY_COLOR_SCHEME) ??
|
|
110
|
-
(window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
111
|
-
? "dark"
|
|
112
|
-
: "light")
|
|
63
|
+
? ((localStorage.getItem(KEY_COLOR_SCHEME) as State["colorScheme"]) ?? (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"))
|
|
113
64
|
: "light";
|
|
114
|
-
return theme;
|
|
65
|
+
return theme as "light" | "dark";
|
|
115
66
|
};
|
|
116
67
|
|
|
117
|
-
export const GlobalContext = createContext<GlobalContextType>(
|
|
118
|
-
{} as GlobalContextType,
|
|
119
|
-
);
|
|
120
|
-
|
|
121
68
|
/**
|
|
122
|
-
*
|
|
69
|
+
* Root context provider for the application.
|
|
70
|
+
* Wraps the app with global state management for locale, calendar system, and color scheme,
|
|
71
|
+
* and provides context to all descendant components via `GlobalContext`.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <ApplicationProvider defaultLocale="en" defaultColorScheme="dark">
|
|
76
|
+
* <App />
|
|
77
|
+
* </ApplicationProvider>
|
|
78
|
+
* ```
|
|
123
79
|
*/
|
|
124
|
-
export
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
defaultLocale
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}) => {
|
|
131
|
-
const [refNotifications, setNotificationRef] =
|
|
132
|
-
useState<NotificationManagerRef>({
|
|
133
|
-
closeAll: () => undefined,
|
|
134
|
-
showAlert: () => undefined as AnyObject,
|
|
135
|
-
showError: () => undefined as AnyObject,
|
|
136
|
-
showMessage: () => undefined as AnyObject,
|
|
137
|
-
showToast: () => undefined as AnyObject,
|
|
138
|
-
});
|
|
139
|
-
const [colorScheme, setColorScheme] = useState<State["colorScheme"]>(
|
|
140
|
-
defaultColorScheme ?? systemColorScheme(),
|
|
141
|
-
);
|
|
142
|
-
const [calendar, setCalendar] = useState<State["calendar"]>(
|
|
143
|
-
defaultCalendar ?? systemCalendar(),
|
|
144
|
-
);
|
|
145
|
-
const [locale, setLocale] = useState<State["locale"]>(
|
|
146
|
-
defaultLocale ?? systemLocale(),
|
|
147
|
-
);
|
|
80
|
+
export function ApplicationProvider({ children, errorElement, defaultLocale, defaultCalendar, defaultColorScheme, styleEffect }: GlobalProps) {
|
|
81
|
+
const [colorScheme, setColorScheme] = useState<State["colorScheme"]>(() => defaultColorScheme ?? systemColorScheme());
|
|
82
|
+
const [calendar, setCalendar] = useState<State["calendar"]>(() => defaultCalendar ?? systemCalendar());
|
|
83
|
+
const [locale, setLocale] = useState<State["locale"]>(() => defaultLocale ?? systemLocale());
|
|
84
|
+
|
|
85
|
+
const [areas, setAreas] = useState<Record<string, (open?: boolean) => void>>({});
|
|
148
86
|
|
|
149
87
|
/** ***************** set initial theme and locale dir *******************/
|
|
150
|
-
|
|
88
|
+
const init = useEffectEvent(() => {
|
|
151
89
|
document.documentElement.lang = locale;
|
|
152
90
|
if (!document.documentElement.dataset.colorScheme) {
|
|
153
91
|
document.documentElement.dataset.colorScheme = colorScheme;
|
|
154
92
|
} else {
|
|
155
|
-
|
|
93
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect
|
|
94
|
+
setColorScheme(document.documentElement.dataset.colorScheme as "light" | "dark");
|
|
156
95
|
}
|
|
157
96
|
if (typeof window !== "undefined") {
|
|
158
97
|
try {
|
|
@@ -163,19 +102,31 @@ export const ApplicationProvider: FC<GlobalProps> = ({
|
|
|
163
102
|
//
|
|
164
103
|
}
|
|
165
104
|
}
|
|
166
|
-
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
108
|
+
useEffect(init, []);
|
|
167
109
|
|
|
168
110
|
/** ***************** theme toggle *******************/
|
|
169
111
|
const toggleColorScheme = useCallback(
|
|
170
112
|
(forceTheme?: State["colorScheme"]) => {
|
|
171
|
-
const newTheme =
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
113
|
+
const newTheme = forceTheme ?? (colorScheme === "dark" ? "light" : "dark");
|
|
114
|
+
if (!document.activeViewTransition)
|
|
115
|
+
document.startViewTransition(() => {
|
|
116
|
+
// eslint-disable-next-line @eslint-react/dom-no-flush-sync
|
|
117
|
+
flushSync(() => {
|
|
118
|
+
setColorScheme(newTheme);
|
|
119
|
+
localStorage.setItem(KEY_COLOR_SCHEME, newTheme);
|
|
120
|
+
document.documentElement.dataset.colorScheme = newTheme;
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
else {
|
|
124
|
+
setColorScheme(newTheme);
|
|
125
|
+
localStorage.setItem(KEY_COLOR_SCHEME, newTheme);
|
|
126
|
+
document.documentElement.dataset.colorScheme = newTheme;
|
|
127
|
+
}
|
|
176
128
|
return newTheme;
|
|
177
129
|
},
|
|
178
|
-
|
|
179
130
|
[colorScheme],
|
|
180
131
|
);
|
|
181
132
|
|
|
@@ -190,6 +141,7 @@ export const ApplicationProvider: FC<GlobalProps> = ({
|
|
|
190
141
|
} catch {
|
|
191
142
|
//
|
|
192
143
|
}
|
|
144
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect
|
|
193
145
|
setLocale(locale);
|
|
194
146
|
return locale;
|
|
195
147
|
}, []);
|
|
@@ -201,41 +153,89 @@ export const ApplicationProvider: FC<GlobalProps> = ({
|
|
|
201
153
|
return calendar;
|
|
202
154
|
}, []);
|
|
203
155
|
|
|
156
|
+
useLayoutEffect(() => {
|
|
157
|
+
if (defaultLocale) changeLocale(defaultLocale);
|
|
158
|
+
// eslint-disable-next-line @eslint-react/exhaustive-deps
|
|
159
|
+
}, [defaultLocale]);
|
|
160
|
+
|
|
161
|
+
const registerArea = useCallback((area: string, callback: (open?: boolean) => void) => {
|
|
162
|
+
setAreas((prev) => ({ ...prev, [area]: callback }));
|
|
163
|
+
}, []);
|
|
164
|
+
|
|
165
|
+
const unregisterArea = useCallback((area: string) => {
|
|
166
|
+
setAreas((prev) => {
|
|
167
|
+
const newAreas = { ...prev };
|
|
168
|
+
delete newAreas[area];
|
|
169
|
+
return newAreas;
|
|
170
|
+
});
|
|
171
|
+
}, []);
|
|
172
|
+
|
|
173
|
+
const toggleArea = useCallback(
|
|
174
|
+
(area: string, open?: boolean) => {
|
|
175
|
+
if (areas[area]) areas[area](open);
|
|
176
|
+
},
|
|
177
|
+
[areas],
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
const [alert, setAlert] = useState<React.ReactElement>();
|
|
181
|
+
const showAlert = useCallback((alert?: React.ReactElement) => {
|
|
182
|
+
setAlert(alert);
|
|
183
|
+
}, []);
|
|
184
|
+
|
|
185
|
+
const isDark = useMemo(() => colorScheme === "dark", [colorScheme]);
|
|
186
|
+
|
|
204
187
|
/** ***************** context provider *******************/
|
|
205
188
|
return (
|
|
206
|
-
<GlobalContext
|
|
189
|
+
<GlobalContext
|
|
207
190
|
value={{
|
|
208
191
|
errorElement,
|
|
192
|
+
styleEffect,
|
|
193
|
+
showAlert,
|
|
194
|
+
registerArea,
|
|
195
|
+
unregisterArea,
|
|
196
|
+
toggleArea,
|
|
209
197
|
changeLocale,
|
|
210
198
|
changeCalendar,
|
|
211
199
|
toggleColorScheme,
|
|
200
|
+
isDark,
|
|
212
201
|
currentLocale: locale,
|
|
213
202
|
currentCalendar: calendar,
|
|
214
203
|
currentColorScheme: colorScheme,
|
|
215
|
-
notificationManager: refNotifications as AnyObject,
|
|
216
204
|
}}
|
|
217
205
|
>
|
|
218
|
-
<
|
|
219
|
-
|
|
220
|
-
|
|
206
|
+
<Toaster
|
|
207
|
+
id="toasting"
|
|
208
|
+
theme={colorScheme}
|
|
209
|
+
visibleToasts={18}
|
|
210
|
+
toastOptions={{
|
|
211
|
+
className: "fabric-toast",
|
|
212
|
+
unstyled: true,
|
|
213
|
+
}}
|
|
214
|
+
icons={{
|
|
215
|
+
error: <AnimationIndicator className="text-lg text-danger-700" type="cross" />,
|
|
216
|
+
info: <AnimationIndicator className="text-lg text-info-700" type="info" />,
|
|
217
|
+
success: <AnimationIndicator className="text-lg text-success-700" type="check" />,
|
|
218
|
+
warning: <AnimationIndicator className="text-lg text-warning-700" type="exclaim" />,
|
|
219
|
+
loading: <Icon icon="icon-[svg-spinners--clock]" className="text-xl" />,
|
|
220
|
+
}}
|
|
221
|
+
/>
|
|
222
|
+
<Toaster
|
|
223
|
+
id="messaging"
|
|
224
|
+
theme={colorScheme}
|
|
225
|
+
visibleToasts={9}
|
|
226
|
+
toastOptions={{
|
|
227
|
+
className: "fabric-message",
|
|
228
|
+
unstyled: true,
|
|
229
|
+
}}
|
|
230
|
+
icons={{
|
|
231
|
+
error: <AnimationIndicator className="text-lg text-danger-300" type="cross" />,
|
|
232
|
+
info: <AnimationIndicator className="text-lg text-info-300" type="info" />,
|
|
233
|
+
success: <AnimationIndicator className="text-lg text-success-300" type="check" />,
|
|
234
|
+
warning: <AnimationIndicator className="text-lg text-warning-300" type="exclaim" />,
|
|
235
|
+
}}
|
|
236
|
+
/>
|
|
237
|
+
{alert}
|
|
238
|
+
<ModalManagerProvider>{children}</ModalManagerProvider>
|
|
239
|
+
</GlobalContext>
|
|
221
240
|
);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* internal usage only
|
|
226
|
-
* @internal
|
|
227
|
-
*/
|
|
228
|
-
export const useGlobals = () => useContext(GlobalContext);
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* global application context
|
|
232
|
-
*/
|
|
233
|
-
export const useApplicationContext = () => {
|
|
234
|
-
const { errorElement, ...rest } = useContext(GlobalContext);
|
|
235
|
-
return rest;
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
export const useNotificationService = () => {
|
|
239
|
-
const { notificationManager } = useContext(GlobalContext);
|
|
240
|
-
return notificationManager ?? {};
|
|
241
|
-
};
|
|
241
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 { PropsWithChildren } from "react";
|
|
27
|
+
import { use, useCallback, useState } from "react";
|
|
28
|
+
import { ModalContext } from "./context";
|
|
29
|
+
|
|
30
|
+
export function ModalManagerProvider({ children }: PropsWithChildren) {
|
|
31
|
+
const [modalHistory, setModalHistory] = useState<string[]>([]);
|
|
32
|
+
const [modalCallbacks, setModalCallbacks] = useState<KeyValue<() => void>>({});
|
|
33
|
+
|
|
34
|
+
const registerModal = useCallback((id: string, callback: () => void) => {
|
|
35
|
+
setModalHistory((prev) => [...prev, id]);
|
|
36
|
+
setModalCallbacks((prev) => ({ ...prev, [id]: callback }));
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
const removeModal = useCallback((id: string) => {
|
|
40
|
+
setModalHistory((prev) => prev.slice(0, prev.indexOf(id)));
|
|
41
|
+
setModalCallbacks((prev) => {
|
|
42
|
+
delete prev[id];
|
|
43
|
+
return prev;
|
|
44
|
+
});
|
|
45
|
+
}, []);
|
|
46
|
+
|
|
47
|
+
const closeModal = (id: string) => {
|
|
48
|
+
modalCallbacks[id]?.();
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const closeAllModal = () => {
|
|
52
|
+
Object.values(modalCallbacks).map((cb) => cb());
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<ModalContext
|
|
57
|
+
value={{ registerModal, removeModal, closeModal, closeAllModal, activeModal: modalHistory[modalHistory.length - 1] }}
|
|
58
|
+
>
|
|
59
|
+
{children}
|
|
60
|
+
</ModalContext>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const useModalManager = () => {
|
|
65
|
+
const { closeModal, closeAllModal } = use(ModalContext);
|
|
66
|
+
|
|
67
|
+
return { closeModal, closeAllModal };
|
|
68
|
+
};
|
|
@@ -0,0 +1,111 @@
|
|
|
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 { createContext, use } from "react";
|
|
27
|
+
import type { GlobalProps } from "./Global";
|
|
28
|
+
|
|
29
|
+
export interface State {
|
|
30
|
+
locale: string;
|
|
31
|
+
colorScheme: "light" | "dark";
|
|
32
|
+
calendar: "gregorian" | "hijri";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface GlobalContextType {
|
|
36
|
+
/**
|
|
37
|
+
* change language locale
|
|
38
|
+
*/
|
|
39
|
+
changeLocale: (locale: string) => string;
|
|
40
|
+
/**
|
|
41
|
+
* change date calendar
|
|
42
|
+
*/
|
|
43
|
+
changeCalendar: (calendar: State["calendar"]) => State["calendar"];
|
|
44
|
+
/**
|
|
45
|
+
* toggle theme between light and dark
|
|
46
|
+
* or force to theme provided
|
|
47
|
+
*/
|
|
48
|
+
toggleColorScheme: (colorScheme?: State["colorScheme"]) => State["colorScheme"];
|
|
49
|
+
/**
|
|
50
|
+
* application default error display
|
|
51
|
+
*/
|
|
52
|
+
errorElement: GlobalProps["errorElement"];
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* collapsable layout sections
|
|
56
|
+
*/
|
|
57
|
+
registerArea: (area: string, callback: (open?: boolean) => void) => void;
|
|
58
|
+
unregisterArea: (area: string) => void;
|
|
59
|
+
toggleArea: (area: string, open?: boolean) => void;
|
|
60
|
+
|
|
61
|
+
showAlert: (alert?: React.ReactElement) => void;
|
|
62
|
+
|
|
63
|
+
styleEffect?: "glass" | "matte";
|
|
64
|
+
|
|
65
|
+
isDark: boolean;
|
|
66
|
+
currentLocale: string;
|
|
67
|
+
currentCalendar: State["calendar"];
|
|
68
|
+
currentColorScheme: State["colorScheme"];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export const GlobalContext = createContext<GlobalContextType>({} as GlobalContextType);
|
|
72
|
+
|
|
73
|
+
interface ModalContextType {
|
|
74
|
+
activeModal?: string;
|
|
75
|
+
registerModal: (id: string, callback: () => void) => void;
|
|
76
|
+
removeModal: (id: string) => void;
|
|
77
|
+
|
|
78
|
+
closeModal: (id: string) => void;
|
|
79
|
+
closeAllModal: () => void;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export const ModalContext = createContext<ModalContextType>({} as ModalContextType);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* internal usage only
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
export const useGlobals = () => use(GlobalContext);
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Hook to access the global application context.
|
|
92
|
+
* This hook provides access to the global context values, including the current locale, calendar, and color scheme.
|
|
93
|
+
*
|
|
94
|
+
* @returns {GlobalContextType} The global context values excluding the error element.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```jsx
|
|
98
|
+
* const { changeLocale, currentLocale, toggleColorScheme } = useApplicationContext();
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export const useApplicationContext = () => {
|
|
102
|
+
const {
|
|
103
|
+
errorElement: _,
|
|
104
|
+
registerArea: __,
|
|
105
|
+
unregisterArea: ___,
|
|
106
|
+
toggleArea: ____,
|
|
107
|
+
styleEffect: _____,
|
|
108
|
+
...rest
|
|
109
|
+
} = use(GlobalContext);
|
|
110
|
+
return rest;
|
|
111
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
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 { cloneElement } from "react";
|
|
27
|
+
import { useGlobals } from "../../context/context";
|
|
28
|
+
import type { CallbackReturn } from "../../types";
|
|
29
|
+
|
|
30
|
+
export function AreaToggle({
|
|
31
|
+
children,
|
|
32
|
+
id,
|
|
33
|
+
}: {
|
|
34
|
+
id: string;
|
|
35
|
+
children: React.ReactElement<{ onClick?: (e: React.MouseEvent) => CallbackReturn }>;
|
|
36
|
+
}) {
|
|
37
|
+
const { toggleArea } = useGlobals();
|
|
38
|
+
return cloneElement(children, {
|
|
39
|
+
onClick: async (e: React.MouseEvent) => {
|
|
40
|
+
e.stopPropagation();
|
|
41
|
+
const res = await Promise.resolve(children.props.onClick?.(e));
|
|
42
|
+
toggleArea(id, !!res);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|