@react-fabric/core 1.0.0-beta.6 → 1.0.0-beta.60
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/{src/components/animations/Animations.module.css → css/components/_animations.css} +9 -9
- package/{src/components/avatar/Avatar.module.css → css/components/_avatar.css} +11 -11
- package/{src/components/badge/Badge.module.css → css/components/_badge.css} +19 -17
- package/{src/components/breadcrumbs/Breadcrumbs.module.css → css/components/_breadcrumbs.css} +52 -47
- package/{src/components/button/Button.module.css → css/components/_button.css} +77 -83
- package/{src/components/card/Card.module.css → css/components/_card.css} +54 -28
- package/{src/components/chip/Chip.module.css → css/components/_chip.css} +14 -10
- package/{src/components/collapsable/Collapsable.module.css → css/components/_collapsable.css} +3 -3
- package/css/components/_divider.css +38 -0
- package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +2 -2
- package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +6 -6
- package/{src/components/icon/Icon.module.css → css/components/_icon.css} +11 -8
- package/{src/components/media/Media.module.css → css/components/_media.css} +17 -17
- package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
- package/{src/overlays/message/Message.module.css → css/components/_message.css} +2 -2
- package/{src/components/meter/Meter.module.css → css/components/_meter.css} +10 -10
- package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +8 -8
- package/{src/components/panel/Panel.module.css → css/components/_panel.css} +17 -17
- package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
- package/css/components/_stepper.css +86 -0
- package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +130 -85
- package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
- package/css/components/_tooltip.css +29 -0
- package/{src/core/content/Content.module.css → css/components/index.css} +26 -18
- package/{src/core/aside/Aside.module.css → css/core/_aside.css} +60 -48
- package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
- package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
- package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
- package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
- package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
- package/css/core/_section.css +28 -0
- package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
- package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
- package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
- package/css/core/index.css +33 -0
- package/css/reset/_gradients.css +8 -8
- package/css/reset/_reset.css +56 -224
- package/css/reset/_text.css +14 -29
- package/css/reset/_theme.css +331 -52
- package/css/reset/index.css +4 -4
- package/css/styles.css +7 -6
- package/css/theme/_colors.css +320 -0
- package/css/theme/_utilities.css +541 -0
- package/css/theme/index.css +45 -0
- package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
- package/dist/cjs/components/animations/Animations.js +110 -23
- package/dist/cjs/components/avatar/Avatar.js +46 -13
- package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
- package/dist/cjs/components/badge/Badge.js +36 -15
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +40 -9
- package/dist/cjs/components/button/Button.js +50 -28
- package/dist/cjs/components/button/ButtonGroup.js +30 -3
- package/dist/cjs/components/button/ConfirmButton.js +28 -2
- package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
- package/dist/cjs/components/callout/Callout.js +44 -4
- package/dist/cjs/components/card/Card.js +60 -18
- package/dist/cjs/components/card/CardCover.js +36 -5
- package/dist/cjs/components/card/FlipContent.js +56 -0
- package/dist/cjs/components/chip/Chip.js +40 -20
- package/dist/cjs/components/collapsable/Collapsable.js +30 -5
- package/dist/cjs/components/divider/Divider.js +30 -7
- package/dist/cjs/components/dropdown/Dropdown.js +48 -9
- package/dist/cjs/components/dropdown/DropdownTool.js +1 -1
- package/dist/cjs/components/empty/EmptyContent.js +37 -7
- package/dist/cjs/components/icon/Icon.js +76 -13
- package/dist/cjs/components/media/Media.js +172 -75
- package/dist/cjs/components/menu/ContextMenu.js +19 -0
- package/dist/cjs/components/menu/Menu.js +76 -21
- package/dist/cjs/components/menu/MenuItem.js +54 -26
- package/dist/cjs/components/meter/Meter.js +26 -3
- package/dist/cjs/components/navigator/Navigator.js +48 -15
- package/dist/cjs/components/panel/Panel.js +53 -22
- package/dist/cjs/components/panel/PanelGroup.js +25 -2
- package/dist/cjs/components/panel/PanelStack.js +31 -2
- package/dist/cjs/components/progress/ProgressBar.js +31 -9
- package/dist/cjs/components/progress/ProgressCircle.js +29 -7
- package/dist/cjs/components/tabpanel/Tab.js +39 -15
- package/dist/cjs/components/tabpanel/TabPanel.js +56 -16
- package/dist/cjs/context/Global.js +28 -1
- package/dist/cjs/context/NotificationCenter.js +3 -3
- package/dist/cjs/core/aside/Aside.js +48 -22
- package/dist/cjs/core/boundary/ErrorBoundary.js +25 -8
- package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
- package/dist/cjs/core/content/Content.js +7 -3
- package/dist/cjs/core/headfoot/HeadFoot.js +48 -22
- package/dist/cjs/core/page/Page.js +40 -39
- package/dist/cjs/core/responsive/Responsive.js +59 -6
- package/dist/cjs/core/section/Section.js +12 -29
- package/dist/cjs/core/theme/ThemeProvider.js +32 -10
- package/dist/cjs/core/viewport/Viewport.js +18 -2
- package/dist/cjs/hooks/useControlledValue.js +12 -0
- package/dist/cjs/hooks/useDebounce.js +14 -1
- package/dist/cjs/hooks/useEffectDebugger.js +54 -2
- package/dist/cjs/hooks/useIsDark.js +8 -0
- package/dist/cjs/hooks/useIsRtl.js +12 -0
- package/dist/cjs/hooks/useNavigator.js +6 -4
- package/dist/cjs/hooks/useOverlayService.js +24 -0
- package/dist/cjs/hooks/usePropToggle.js +16 -5
- package/dist/cjs/hooks/useResize.js +18 -0
- package/dist/cjs/hooks/useResizeObserver.js +20 -1
- package/dist/cjs/hooks/useStepper.js +75 -0
- package/dist/cjs/hooks/useStorage.js +39 -0
- package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
- package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/overlays/alert/Alert.js +23 -15
- package/dist/cjs/overlays/flyout/Flyout.js +48 -64
- package/dist/cjs/overlays/message/Message.js +8 -3
- package/dist/cjs/overlays/modal/Modal.js +17 -20
- package/dist/cjs/overlays/toast/Toast.js +20 -10
- package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
- package/dist/cjs/types/icons.js +17 -4
- package/dist/cjs/typography/Abbr.js +35 -7
- package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
- package/dist/cjs/typography/Mark.js +25 -5
- package/dist/cjs/typography/Text.js +30 -5
- package/dist/cjs/typography/Title.js +19 -4
- package/dist/cjs/utils/cloneElement.js +47 -0
- package/dist/cjs/utils/getColor.js +1 -18
- package/dist/esm/components/actionLabel/ActionLabel.js +26 -8
- package/dist/esm/components/animations/Animations.js +111 -24
- package/dist/esm/components/avatar/Avatar.js +46 -13
- package/dist/esm/components/avatar/AvatarGroup.js +22 -4
- package/dist/esm/components/badge/Badge.js +38 -17
- package/dist/esm/components/breadcrumbs/Breadcrumbs.js +40 -9
- package/dist/esm/components/button/Button.js +52 -30
- package/dist/esm/components/button/ButtonGroup.js +31 -4
- package/dist/esm/components/button/ConfirmButton.js +28 -2
- package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
- package/dist/esm/components/callout/Callout.js +44 -4
- package/dist/esm/components/card/Card.js +61 -19
- package/dist/esm/components/card/CardCover.js +36 -5
- package/dist/esm/components/card/FlipContent.js +56 -0
- package/dist/esm/components/chip/Chip.js +42 -22
- package/dist/esm/components/collapsable/Collapsable.js +30 -5
- package/dist/esm/components/divider/Divider.js +31 -8
- package/dist/esm/components/dropdown/Dropdown.js +48 -9
- package/dist/esm/components/dropdown/DropdownTool.js +1 -1
- package/dist/esm/components/empty/EmptyContent.js +37 -7
- package/dist/esm/components/icon/Icon.js +78 -16
- package/dist/esm/components/media/Media.js +173 -76
- package/dist/esm/components/menu/ContextMenu.js +19 -0
- package/dist/esm/components/menu/Menu.js +78 -23
- package/dist/esm/components/menu/MenuItem.js +49 -21
- package/dist/esm/components/meter/Meter.js +26 -3
- package/dist/esm/components/navigator/Navigator.js +48 -15
- package/dist/esm/components/panel/Panel.js +54 -23
- package/dist/esm/components/panel/PanelGroup.js +25 -2
- package/dist/esm/components/panel/PanelStack.js +31 -2
- package/dist/esm/components/progress/ProgressBar.js +31 -9
- package/dist/esm/components/progress/ProgressCircle.js +29 -7
- package/dist/esm/components/tabpanel/Tab.js +40 -16
- package/dist/esm/components/tabpanel/TabPanel.js +56 -16
- package/dist/esm/context/Global.js +28 -1
- package/dist/esm/context/NotificationCenter.js +3 -3
- package/dist/esm/core/aside/Aside.js +49 -23
- package/dist/esm/core/boundary/ErrorBoundary.js +25 -8
- package/dist/esm/core/boundary/ErrorIcon.js +1 -2
- package/dist/esm/core/content/Content.js +7 -3
- package/dist/esm/core/headfoot/HeadFoot.js +48 -22
- package/dist/esm/core/page/Page.js +41 -40
- package/dist/esm/core/responsive/Responsive.js +59 -6
- package/dist/esm/core/section/Section.js +12 -29
- package/dist/esm/core/theme/ThemeProvider.js +32 -10
- package/dist/esm/core/viewport/Viewport.js +18 -2
- package/dist/esm/hooks/useControlledValue.js +12 -0
- package/dist/esm/hooks/useDebounce.js +14 -1
- package/dist/esm/hooks/useEffectDebugger.js +54 -2
- package/dist/esm/hooks/useIsDark.js +8 -0
- package/dist/esm/hooks/useIsRtl.js +12 -0
- package/dist/esm/hooks/useNavigator.js +7 -5
- package/dist/esm/hooks/useOverlayService.js +24 -0
- package/dist/esm/hooks/usePropToggle.js +16 -5
- package/dist/esm/hooks/useResize.js +18 -0
- package/dist/esm/hooks/useResizeObserver.js +20 -1
- package/dist/esm/hooks/useStepper.js +75 -0
- package/dist/esm/hooks/useStorage.js +39 -0
- package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
- package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
- package/dist/esm/index.js +6 -2
- package/dist/esm/overlays/alert/Alert.js +24 -16
- package/dist/esm/overlays/flyout/Flyout.js +52 -68
- package/dist/esm/overlays/message/Message.js +9 -4
- package/dist/esm/overlays/modal/Modal.js +19 -22
- package/dist/esm/overlays/toast/Toast.js +21 -11
- package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
- package/dist/esm/types/icons.js +17 -4
- package/dist/esm/typography/Abbr.js +35 -7
- package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
- package/dist/esm/typography/Mark.js +25 -5
- package/dist/esm/typography/Text.js +31 -6
- package/dist/esm/typography/Title.js +20 -5
- package/dist/esm/utils/cloneElement.js +47 -0
- package/dist/esm/utils/getColor.js +2 -16
- package/dist/types/components/actionLabel/ActionLabel.d.ts +21 -2
- package/dist/types/components/animations/Animations.d.ts +84 -5
- package/dist/types/components/avatar/Avatar.d.ts +34 -6
- package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
- package/dist/types/components/badge/Badge.d.ts +37 -3
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
- package/dist/types/components/button/Button.d.ts +39 -7
- package/dist/types/components/button/ButtonGroup.d.ts +28 -3
- package/dist/types/components/button/ConfirmButton.d.ts +23 -3
- package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
- package/dist/types/components/callout/Callout.d.ts +29 -3
- package/dist/types/components/card/Card.d.ts +44 -4
- package/dist/types/components/card/CardCover.d.ts +25 -0
- package/dist/types/components/card/FlipContent.d.ts +28 -0
- package/dist/types/components/chip/Chip.d.ts +34 -5
- package/dist/types/components/collapsable/Collapsable.d.ts +28 -2
- package/dist/types/components/divider/Divider.d.ts +30 -7
- package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
- package/dist/types/components/dropdown/DropdownTool.d.ts +25 -0
- package/dist/types/components/empty/EmptyContent.d.ts +32 -3
- package/dist/types/components/icon/Icon.d.ts +40 -8
- package/dist/types/components/index.d.ts +3 -2
- package/dist/types/components/media/Media.d.ts +54 -0
- package/dist/types/components/menu/ContextMenu.d.ts +19 -1
- package/dist/types/components/menu/Menu.d.ts +29 -0
- package/dist/types/components/menu/MenuItem.d.ts +22 -2
- package/dist/types/components/menu/types.d.ts +9 -3
- package/dist/types/components/meter/Meter.d.ts +24 -0
- package/dist/types/components/navigator/Navigator.d.ts +29 -4
- package/dist/types/components/panel/Panel.d.ts +43 -4
- package/dist/types/components/panel/PanelGroup.d.ts +24 -0
- package/dist/types/components/panel/PanelStack.d.ts +31 -0
- package/dist/types/components/progress/ProgressBar.d.ts +23 -3
- package/dist/types/components/progress/ProgressCircle.d.ts +22 -3
- package/dist/types/components/tabpanel/Tab.d.ts +38 -4
- package/dist/types/components/tabpanel/TabPanel.d.ts +51 -2
- package/dist/types/context/Global.d.ts +24 -1
- package/dist/types/core/aside/Aside.d.ts +45 -6
- package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
- package/dist/types/core/content/Content.d.ts +6 -1
- package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
- package/dist/types/core/page/Page.d.ts +32 -4
- package/dist/types/core/responsive/Responsive.d.ts +58 -3
- package/dist/types/core/section/Section.d.ts +18 -3
- package/dist/types/core/theme/ThemeProvider.d.ts +25 -5
- package/dist/types/core/viewport/Viewport.d.ts +15 -1
- package/dist/types/hooks/useControlledValue.d.ts +13 -2
- package/dist/types/hooks/useDebounce.d.ts +12 -0
- package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
- package/dist/types/hooks/useIsDark.d.ts +8 -0
- package/dist/types/hooks/useIsRtl.d.ts +12 -0
- package/dist/types/hooks/useNavigator.d.ts +18 -1
- package/dist/types/hooks/useOverlayService.d.ts +28 -9
- package/dist/types/hooks/usePropToggle.d.ts +16 -5
- package/dist/types/hooks/useResize.d.ts +19 -1
- package/dist/types/hooks/useResizeObserver.d.ts +20 -1
- package/dist/types/hooks/useStepper.d.ts +14 -0
- package/dist/types/hooks/useStorage.d.ts +38 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/overlays/alert/Alert.d.ts +16 -5
- package/dist/types/overlays/flyout/Flyout.d.ts +9 -4
- package/dist/types/overlays/message/Message.d.ts +16 -5
- package/dist/types/overlays/modal/Modal.d.ts +13 -4
- package/dist/types/overlays/toast/Toast.d.ts +16 -5
- package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
- package/dist/types/types/icons.d.ts +17 -3
- package/dist/types/types/index.d.ts +20 -22
- package/dist/types/typography/Abbr.d.ts +34 -4
- package/dist/types/typography/Anchor.d.ts +42 -0
- package/dist/types/typography/Copy.d.ts +15 -0
- package/dist/types/typography/Mark.d.ts +22 -4
- package/dist/types/typography/Text.d.ts +27 -1
- package/dist/types/typography/Title.d.ts +16 -1
- package/dist/types/typography/index.d.ts +1 -1
- package/dist/types/utils/cloneElement.d.ts +1 -0
- package/dist/types/utils/getColor.d.ts +1 -4
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +14 -16
- package/src/components/actionLabel/ActionLabel.tsx +26 -8
- package/src/components/animations/Animations.tsx +115 -36
- package/src/components/avatar/Avatar.tsx +51 -15
- package/src/components/avatar/AvatarGroup.tsx +23 -5
- package/src/components/badge/Badge.tsx +50 -22
- package/src/components/breadcrumbs/Breadcrumbs.tsx +43 -10
- package/src/components/button/Button.tsx +74 -42
- package/src/components/button/ButtonGroup.tsx +33 -7
- package/src/components/button/ConfirmButton.tsx +31 -3
- package/src/components/button/ToggleButtonGroup.tsx +74 -47
- package/src/components/callout/Callout.tsx +55 -12
- package/src/components/card/Card.tsx +84 -25
- package/src/components/card/CardCover.tsx +36 -6
- package/src/components/card/FlipContent.tsx +90 -0
- package/src/components/chip/Chip.tsx +53 -25
- package/src/components/collapsable/Collapsable.tsx +33 -8
- package/src/components/divider/Divider.tsx +42 -16
- package/src/components/dropdown/Dropdown.tsx +47 -12
- package/src/components/dropdown/DropdownTool.tsx +27 -2
- package/src/components/empty/EmptyContent.tsx +49 -8
- package/src/components/icon/Icon.tsx +96 -18
- package/src/components/index.ts +3 -2
- package/src/components/media/Media.tsx +193 -104
- package/src/components/menu/ContextMenu.tsx +19 -0
- package/src/components/menu/Menu.tsx +87 -30
- package/src/components/menu/MenuItem.tsx +44 -19
- package/src/components/menu/types.ts +9 -8
- package/src/components/meter/Meter.tsx +27 -4
- package/src/components/navigator/Navigator.tsx +58 -9
- package/src/components/panel/Panel.tsx +53 -21
- package/src/components/panel/PanelGroup.tsx +25 -2
- package/src/components/panel/PanelStack.tsx +33 -2
- package/src/components/progress/ProgressBar.tsx +33 -14
- package/src/components/progress/ProgressCircle.tsx +29 -13
- package/src/components/tabpanel/Tab.tsx +47 -24
- package/src/components/tabpanel/TabPanel.tsx +79 -13
- package/src/context/Global.tsx +28 -1
- package/src/context/NotificationCenter.tsx +3 -3
- package/src/core/aside/Aside.tsx +56 -34
- package/src/core/boundary/ErrorBoundary.tsx +26 -8
- package/src/core/boundary/ErrorIcon.tsx +1 -2
- package/src/core/content/Content.tsx +7 -3
- package/src/core/headfoot/HeadFoot.tsx +44 -37
- package/src/core/page/Page.tsx +42 -20
- package/src/core/responsive/Responsive.tsx +66 -8
- package/src/core/section/Section.tsx +26 -4
- package/src/core/theme/ThemeProvider.tsx +35 -14
- package/src/core/viewport/Viewport.tsx +16 -3
- package/src/hooks/useControlledValue.tsx +12 -0
- package/src/hooks/useDebounce.ts +13 -1
- package/src/hooks/useEffectDebugger.ts +50 -2
- package/src/hooks/useIsDark.ts +8 -0
- package/src/hooks/useIsRtl.ts +12 -0
- package/src/hooks/useNavigator.tsx +28 -5
- package/src/hooks/useOverlayService.tsx +33 -8
- package/src/hooks/usePropToggle.ts +16 -5
- package/src/hooks/useResize.ts +19 -1
- package/src/hooks/useResizeObserver.ts +32 -9
- package/src/hooks/useStepper.tsx +68 -0
- package/src/hooks/useStorage.ts +38 -0
- package/src/hotkeys/HotKeyLabel.tsx +1 -1
- package/src/hotkeys/HotKeyWrapper.tsx +3 -1
- package/src/index.ts +5 -0
- package/src/overlays/alert/Alert.tsx +50 -34
- package/src/overlays/flyout/Flyout.tsx +73 -97
- package/src/overlays/message/Message.tsx +28 -9
- package/src/overlays/modal/Modal.tsx +36 -30
- package/src/overlays/toast/Toast.tsx +42 -30
- package/src/overlays/tooltip/Tooltip.tsx +43 -18
- package/src/types/global.d.ts +8 -0
- package/src/types/icons.ts +32 -6
- package/src/types/index.ts +261 -45
- package/src/typography/Abbr.tsx +45 -11
- package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
- package/src/typography/Copy.tsx +15 -0
- package/src/typography/Mark.tsx +25 -10
- package/src/typography/Text.tsx +31 -13
- package/src/typography/Title.tsx +18 -7
- package/src/typography/index.ts +1 -1
- package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
- package/src/utils/getColor.ts +1 -17
- package/src/utils/index.ts +1 -0
- 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.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.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/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.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/overlays/alert/Alert.module.css +0 -1
- package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
- package/dist/cjs/overlays/message/Message.module.css +0 -1
- package/dist/cjs/overlays/modal/Modal.module.css +0 -1
- package/dist/cjs/overlays/toast/Toast.module.css +0 -1
- package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/cjs/typography/Typography.module.css +0 -1
- package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
- 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.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/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.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/overlays/alert/Alert.module.css +0 -1
- package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
- package/dist/esm/overlays/message/Message.module.css +0 -1
- package/dist/esm/overlays/modal/Modal.module.css +0 -1
- package/dist/esm/overlays/toast/Toast.module.css +0 -1
- package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/types/typography/Link.d.ts +0 -25
|
@@ -48,7 +48,6 @@ import {
|
|
|
48
48
|
import { mergeRefs } from "@react-fabric/utilities";
|
|
49
49
|
import classNames from "classnames";
|
|
50
50
|
import {
|
|
51
|
-
Children,
|
|
52
51
|
cloneElement,
|
|
53
52
|
Fragment,
|
|
54
53
|
useCallback,
|
|
@@ -56,8 +55,9 @@ import {
|
|
|
56
55
|
useRef,
|
|
57
56
|
useState,
|
|
58
57
|
} from "react";
|
|
58
|
+
import { HotKeyWrapper } from "../../hotkeys/HotKeyWrapper";
|
|
59
59
|
import { CoreIcons } from "../../types/icons";
|
|
60
|
-
import { nodeCheck } from "../../utils";
|
|
60
|
+
import { cloneChildren, nodeCheck } from "../../utils";
|
|
61
61
|
import { MenuItem } from "./MenuItem";
|
|
62
62
|
import { type MenuProps } from "./types";
|
|
63
63
|
|
|
@@ -69,6 +69,8 @@ const MenuComponent = ({
|
|
|
69
69
|
menuClassName,
|
|
70
70
|
onClick,
|
|
71
71
|
// @ts-expect-error ignore
|
|
72
|
+
trigger = "hover",
|
|
73
|
+
// @ts-expect-error ignore
|
|
72
74
|
ref,
|
|
73
75
|
...rest
|
|
74
76
|
}: Partial<MenuProps>) => {
|
|
@@ -89,6 +91,8 @@ const MenuComponent = ({
|
|
|
89
91
|
open: !isNested || isOpen,
|
|
90
92
|
onOpenChange(open, event, reason) {
|
|
91
93
|
isNested && setIsOpen(open);
|
|
94
|
+
if (reason === "outside-press" && trigger === "click")
|
|
95
|
+
tree?.events.emit("close");
|
|
92
96
|
},
|
|
93
97
|
placement: isNested ? "right-start" : "bottom-start",
|
|
94
98
|
middleware: [
|
|
@@ -100,12 +104,14 @@ const MenuComponent = ({
|
|
|
100
104
|
});
|
|
101
105
|
|
|
102
106
|
const hover = useHover(context, {
|
|
107
|
+
enabled: trigger === "hover",
|
|
103
108
|
delay: { open: 75 },
|
|
104
109
|
handleClose: safePolygon({ blockPointerEvents: true }),
|
|
105
110
|
});
|
|
106
111
|
const click = useClick(context, {
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
event: "mousedown",
|
|
113
|
+
toggle: trigger === "click" || !isNested,
|
|
114
|
+
ignoreMouse: trigger === "hover" && !isNested,
|
|
109
115
|
});
|
|
110
116
|
const role = useRole(context, { role: "menu" });
|
|
111
117
|
const dismiss = useDismiss(context, { bubbles: true });
|
|
@@ -187,6 +193,16 @@ const MenuComponent = ({
|
|
|
187
193
|
);
|
|
188
194
|
}, [isOpen]);
|
|
189
195
|
|
|
196
|
+
useEffect(() => {
|
|
197
|
+
if ((!isNested || isOpen) && activeIndex) {
|
|
198
|
+
setTimeout(() => {
|
|
199
|
+
elementsRef.current[activeIndex]?.scrollIntoView({
|
|
200
|
+
block: "nearest",
|
|
201
|
+
});
|
|
202
|
+
}, 100);
|
|
203
|
+
}
|
|
204
|
+
}, [isOpen, activeIndex]);
|
|
205
|
+
|
|
190
206
|
return (
|
|
191
207
|
<FloatingNode id={nodeId}>
|
|
192
208
|
{isNested && (
|
|
@@ -210,29 +226,29 @@ const MenuComponent = ({
|
|
|
210
226
|
{(!isNested || isOpen) && (
|
|
211
227
|
<Wrapper {...wrapperProps}>
|
|
212
228
|
{isNested && <FloatingOverlay />}
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
<div
|
|
220
|
-
className={classNames(
|
|
221
|
-
menuClassName,
|
|
222
|
-
"flex flex-col bg-base p-1 menu-list",
|
|
223
|
-
isNested &&
|
|
224
|
-
"outline shadow-lg rounded-capped max-h-96 overflow-auto scroll-thin z-[var(--z-popover)]",
|
|
225
|
-
)}
|
|
226
|
-
autoFocus
|
|
227
|
-
ref={mergeRefs(isNested ? refs.setFloating : ref)}
|
|
228
|
-
{...getFloatingProps({
|
|
229
|
-
onClick: isNested ? undefined : handleClick,
|
|
230
|
-
})}
|
|
231
|
-
// @ts-expect-error ignore
|
|
232
|
-
{...{ style: !isNested ? rest.style : floatingStyles }}
|
|
229
|
+
<HotKeyWrapper>
|
|
230
|
+
<FloatingFocusManager
|
|
231
|
+
context={context}
|
|
232
|
+
modal={!isNested}
|
|
233
|
+
initialFocus={isNested ? -1 : 0}
|
|
234
|
+
returnFocus={!isNested}
|
|
233
235
|
>
|
|
234
|
-
|
|
235
|
-
|
|
236
|
+
<div
|
|
237
|
+
className={classNames(
|
|
238
|
+
menuClassName,
|
|
239
|
+
"flex flex-col bg-base p-1 menu-list",
|
|
240
|
+
isNested &&
|
|
241
|
+
"outline shadow-lg rounded-capped max-h-96 overflow-auto scroll-thin z-(--z-popover)",
|
|
242
|
+
)}
|
|
243
|
+
autoFocus
|
|
244
|
+
ref={mergeRefs(isNested ? refs.setFloating : ref)}
|
|
245
|
+
{...getFloatingProps({
|
|
246
|
+
onClick: isNested ? undefined : handleClick,
|
|
247
|
+
})}
|
|
248
|
+
// @ts-expect-error ignore
|
|
249
|
+
{...{ style: !isNested ? rest.style : floatingStyles }}
|
|
250
|
+
>
|
|
251
|
+
{cloneChildren(children, (child: AnyObject, index) => {
|
|
236
252
|
labelsRef.current[index] = child.props.label;
|
|
237
253
|
return cloneElement(
|
|
238
254
|
child,
|
|
@@ -249,10 +265,10 @@ const MenuComponent = ({
|
|
|
249
265
|
}
|
|
250
266
|
: {},
|
|
251
267
|
);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
</
|
|
255
|
-
</
|
|
268
|
+
})}
|
|
269
|
+
</div>
|
|
270
|
+
</FloatingFocusManager>
|
|
271
|
+
</HotKeyWrapper>
|
|
256
272
|
</Wrapper>
|
|
257
273
|
)}
|
|
258
274
|
</FloatingList>
|
|
@@ -260,14 +276,55 @@ const MenuComponent = ({
|
|
|
260
276
|
);
|
|
261
277
|
};
|
|
262
278
|
|
|
279
|
+
/**
|
|
280
|
+
* A component that displays a menu with items, supports nested menus and various interactions.
|
|
281
|
+
* It can be triggered by hover or click events, and allows for custom styling and behavior.
|
|
282
|
+
* This component is designed to be used within a Floating UI context, allowing for dynamic positioning and interaction handling.
|
|
283
|
+
* It can be nested within other menus to create complex menu structures.
|
|
284
|
+
*
|
|
285
|
+
* @param {MenuProps} props - The properties for the Menu component.
|
|
286
|
+
* @returns {JSX.Element} The rendered Menu component.
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* ```jsx
|
|
290
|
+
* <Menu
|
|
291
|
+
* className="my-menu"
|
|
292
|
+
* trigger="click"
|
|
293
|
+
* onClick={(id) => console.log(`Clicked item with id: ${id}`)}
|
|
294
|
+
* >
|
|
295
|
+
* <MenuItem id="item1" label="Item 1" />
|
|
296
|
+
* <MenuItem id="item2" label="Item 2" />
|
|
297
|
+
* <MenuItem id="item3" label="Item 3">
|
|
298
|
+
* <Menu>
|
|
299
|
+
* <MenuItem id="subitem1" label="Sub Item 1" />
|
|
300
|
+
* <MenuItem id="subitem2" label="Sub Item 2" />
|
|
301
|
+
* </Menu>
|
|
302
|
+
* </MenuItem>
|
|
303
|
+
* </Menu>
|
|
304
|
+
* ```
|
|
305
|
+
*
|
|
306
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for more details.
|
|
307
|
+
*/
|
|
263
308
|
export const Menu = (props: MenuProps) => {
|
|
264
309
|
const parentId = useFloatingParentNodeId();
|
|
310
|
+
const tree = useFloatingTree();
|
|
311
|
+
|
|
312
|
+
if (tree) {
|
|
313
|
+
return (
|
|
314
|
+
<MenuComponent
|
|
315
|
+
{...(props as AnyObject)}
|
|
316
|
+
className=""
|
|
317
|
+
menuClassName={props.className}
|
|
318
|
+
/>
|
|
319
|
+
);
|
|
320
|
+
}
|
|
265
321
|
|
|
266
322
|
if (parentId === null) {
|
|
267
323
|
return (
|
|
268
324
|
<FloatingTree>
|
|
269
325
|
<MenuComponent
|
|
270
326
|
{...(props as AnyObject)}
|
|
327
|
+
className=""
|
|
271
328
|
menuClassName={props.className}
|
|
272
329
|
/>
|
|
273
330
|
</FloatingTree>
|
|
@@ -22,27 +22,45 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { useFloatingTree } from "@floating-ui/react";
|
|
25
|
-
import { iconToken } from "@react-fabric/utilities";
|
|
25
|
+
import { iconToken, mergeRefs } from "@react-fabric/utilities";
|
|
26
26
|
import classNames from "classnames";
|
|
27
|
-
import { Fragment, useCallback, useMemo } from "react";
|
|
27
|
+
import { Fragment, useCallback, useEffect, useMemo, useRef } from "react";
|
|
28
|
+
import { HotKey } from "../../hotkeys/HotKey";
|
|
28
29
|
import { HotKeyLabel } from "../../hotkeys/HotKeyLabel";
|
|
29
30
|
import { Tooltip } from "../../overlays";
|
|
30
31
|
import { type PolymorphicProps } from "../../types";
|
|
31
32
|
import { Badge, getBadgeProps } from "../badge/Badge";
|
|
32
|
-
import { Icon } from "../icon/Icon";
|
|
33
|
-
import classes from "./Menu.module.css";
|
|
33
|
+
import { getIconProps, Icon } from "../icon/Icon";
|
|
34
34
|
import { type MenuItemProps } from "./types";
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* A menu item component that can be used in a dropdown or menu.
|
|
38
|
+
* It supports various features such as icons, badges, hotkeys, and more.
|
|
39
|
+
* It can be customized with different colors, icons, and behaviors.
|
|
40
|
+
*
|
|
41
|
+
* @param {MenuItemProps} props
|
|
42
|
+
* @returns A JSX element representing the menu item.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```jsx
|
|
46
|
+
* <MenuItem
|
|
47
|
+
* label="Settings"
|
|
48
|
+
* icon="settings"
|
|
49
|
+
* onClick={() => console.log("Settings clicked")}
|
|
50
|
+
* hotKey="Ctrl+S"
|
|
51
|
+
* badge={{ count: 3, color: "red" }}
|
|
52
|
+
* />
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for documentation.
|
|
56
|
+
*/
|
|
36
57
|
export const MenuItem = <Tag extends React.ElementType = "button">({
|
|
37
58
|
as,
|
|
38
59
|
label,
|
|
39
60
|
color = "primary",
|
|
40
61
|
className,
|
|
41
62
|
icon,
|
|
42
|
-
iconBg,
|
|
43
|
-
iconColor,
|
|
44
63
|
appendLabel,
|
|
45
|
-
rtlFlip,
|
|
46
64
|
altIcon,
|
|
47
65
|
id,
|
|
48
66
|
active,
|
|
@@ -50,6 +68,7 @@ export const MenuItem = <Tag extends React.ElementType = "button">({
|
|
|
50
68
|
onClick,
|
|
51
69
|
badge,
|
|
52
70
|
hotKey,
|
|
71
|
+
tabIndex = -1,
|
|
53
72
|
// @ts-expect-error ignore
|
|
54
73
|
minimal,
|
|
55
74
|
// @ts-expect-error ignore
|
|
@@ -58,11 +77,16 @@ export const MenuItem = <Tag extends React.ElementType = "button">({
|
|
|
58
77
|
ref,
|
|
59
78
|
...aria
|
|
60
79
|
}: MenuItemProps & PolymorphicProps<Tag>) => {
|
|
80
|
+
const elRef = useRef<HTMLElement>(null);
|
|
61
81
|
const tree = useFloatingTree();
|
|
62
82
|
const badgeProps = useMemo(() => {
|
|
63
83
|
return getBadgeProps(badge);
|
|
64
84
|
}, [badge]);
|
|
65
85
|
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
tabIndex === 0 && elRef.current?.focus();
|
|
88
|
+
}, [tabIndex]);
|
|
89
|
+
|
|
66
90
|
const iconEl = useMemo(() => {
|
|
67
91
|
let path = icon;
|
|
68
92
|
if (minimal && !path) {
|
|
@@ -70,14 +94,11 @@ export const MenuItem = <Tag extends React.ElementType = "button">({
|
|
|
70
94
|
}
|
|
71
95
|
return (
|
|
72
96
|
<Icon
|
|
73
|
-
className={classNames(
|
|
74
|
-
|
|
75
|
-
bg={iconBg}
|
|
76
|
-
color={iconColor}
|
|
77
|
-
rtlFlip={rtlFlip}
|
|
97
|
+
className={classNames("fabric-menuIcon", minimal && "minimal")}
|
|
98
|
+
{...getIconProps(path ?? "")}
|
|
78
99
|
/>
|
|
79
100
|
);
|
|
80
|
-
}, [icon,
|
|
101
|
+
}, [icon, minimal, label]);
|
|
81
102
|
|
|
82
103
|
const Wrapper = useCallback(
|
|
83
104
|
({ children, ...rest }: AnyObject) => {
|
|
@@ -135,26 +156,30 @@ export const MenuItem = <Tag extends React.ElementType = "button">({
|
|
|
135
156
|
return (
|
|
136
157
|
<Wrapper {...aria}>
|
|
137
158
|
<E
|
|
138
|
-
ref={ref}
|
|
159
|
+
ref={mergeRefs(ref, elRef)}
|
|
139
160
|
data-dropdown-dismiss
|
|
140
161
|
data-color={color}
|
|
141
162
|
className={classNames(
|
|
142
|
-
|
|
163
|
+
"fabric-menuItem cursor-pointer",
|
|
143
164
|
className,
|
|
144
|
-
active &&
|
|
145
|
-
minimal &&
|
|
146
|
-
disabled &&
|
|
147
|
-
"rounded
|
|
165
|
+
active && "active",
|
|
166
|
+
minimal && "minimal",
|
|
167
|
+
disabled && "disabled",
|
|
168
|
+
"rounded relative max-w-[50vw] my-0.5",
|
|
148
169
|
)}
|
|
149
170
|
data-active={active}
|
|
150
171
|
data-open={childOpen}
|
|
151
172
|
disabled={disabled}
|
|
152
173
|
data-id={id}
|
|
174
|
+
tabIndex={tabIndex}
|
|
153
175
|
onClick={(e) => {
|
|
154
176
|
onClick?.(e) !== false && tree?.events.emit("click");
|
|
155
177
|
}}
|
|
156
178
|
{...(minimal ? {} : aria)}
|
|
157
179
|
>
|
|
180
|
+
{hotKey && (
|
|
181
|
+
<HotKey keyCombo={hotKey} handler={() => elRef.current?.click?.()} />
|
|
182
|
+
)}
|
|
158
183
|
{menuLabel}
|
|
159
184
|
</E>
|
|
160
185
|
</Wrapper>
|
|
@@ -27,17 +27,13 @@ import {
|
|
|
27
27
|
type BadgeType,
|
|
28
28
|
type CallbackReturn,
|
|
29
29
|
type ChildrenProp,
|
|
30
|
-
type
|
|
30
|
+
type ColorState,
|
|
31
31
|
type CssProp,
|
|
32
|
-
type IconProps,
|
|
33
32
|
type TestProps,
|
|
34
33
|
} from "../../types";
|
|
34
|
+
import { type IconProps } from "../icon/Icon";
|
|
35
35
|
|
|
36
|
-
export interface MenuItemProps
|
|
37
|
-
extends CssProp,
|
|
38
|
-
AriaProps,
|
|
39
|
-
TestProps,
|
|
40
|
-
IconProps {
|
|
36
|
+
export interface MenuItemProps extends CssProp, AriaProps, TestProps {
|
|
41
37
|
/**
|
|
42
38
|
* menu id passed via menu.onClick
|
|
43
39
|
*/
|
|
@@ -53,7 +49,11 @@ export interface MenuItemProps
|
|
|
53
49
|
/**
|
|
54
50
|
* menu color
|
|
55
51
|
*/
|
|
56
|
-
color?:
|
|
52
|
+
color?: ColorState;
|
|
53
|
+
/**
|
|
54
|
+
* icon path or props
|
|
55
|
+
*/
|
|
56
|
+
icon?: IconProps;
|
|
57
57
|
/**
|
|
58
58
|
* item active
|
|
59
59
|
*/
|
|
@@ -90,6 +90,7 @@ export interface MenuRootProps extends CssProp {
|
|
|
90
90
|
export interface MenuInnerProps extends MenuItemProps {
|
|
91
91
|
label: string;
|
|
92
92
|
minimal?: never;
|
|
93
|
+
trigger?: "hover" | "click";
|
|
93
94
|
/**
|
|
94
95
|
* floating menu className
|
|
95
96
|
*/
|
|
@@ -25,7 +25,6 @@ import { Format } from "@react-fabric/utilities";
|
|
|
25
25
|
import classNames from "classnames";
|
|
26
26
|
import { useMemoDebugger } from "../../hooks/useEffectDebugger";
|
|
27
27
|
import { type AriaProps, type CssProp, type TestProps } from "../../types";
|
|
28
|
-
import classes from "./Meter.module.css";
|
|
29
28
|
|
|
30
29
|
export interface MeterProps extends CssProp, AriaProps, TestProps {
|
|
31
30
|
/**
|
|
@@ -38,6 +37,30 @@ export interface MeterProps extends CssProp, AriaProps, TestProps {
|
|
|
38
37
|
hideLabel?: boolean;
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
/**
|
|
41
|
+
* A component that displays a visual representation of a value as a series of dots.
|
|
42
|
+
* It is useful for showing progress or completion status in a compact form.
|
|
43
|
+
* The meter consists of 6 dots, each representing approximately 16.67% of the total value.
|
|
44
|
+
* The active dots are filled based on the value provided, and the remaining dots are empty.
|
|
45
|
+
* The component can also display a label showing the percentage value.
|
|
46
|
+
*
|
|
47
|
+
* @param {MeterProps} props - The properties for the Meter component.
|
|
48
|
+
* @returns {JSX.Element} The rendered Meter component.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```jsx
|
|
52
|
+
* <Meter value={75} />
|
|
53
|
+
* // Renders a meter with 4 active dots and a label showing "75%"
|
|
54
|
+
*
|
|
55
|
+
* <Meter value={50} hideLabel />
|
|
56
|
+
* // Renders a meter with 3 active dots and no label
|
|
57
|
+
*
|
|
58
|
+
* <Meter value={100} className="custom-meter" />
|
|
59
|
+
* // Renders a meter with all 6 active dots and a custom class name
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-meter--docs} for more details.
|
|
63
|
+
*/
|
|
41
64
|
export const Meter = ({ value, hideLabel, className, ...aria }: MeterProps) => {
|
|
42
65
|
/** ***************** calculate active meter dots *******************/
|
|
43
66
|
const activeCount = useMemoDebugger(
|
|
@@ -51,9 +74,9 @@ export const Meter = ({ value, hideLabel, className, ...aria }: MeterProps) => {
|
|
|
51
74
|
return (
|
|
52
75
|
<div
|
|
53
76
|
className={classNames(
|
|
54
|
-
|
|
77
|
+
"fabric-meter",
|
|
55
78
|
className,
|
|
56
|
-
"flex flex-nowrap items-center gap-
|
|
79
|
+
"flex flex-nowrap items-center gap-0.5",
|
|
57
80
|
)}
|
|
58
81
|
{...aria}
|
|
59
82
|
>
|
|
@@ -61,7 +84,7 @@ export const Meter = ({ value, hideLabel, className, ...aria }: MeterProps) => {
|
|
|
61
84
|
<div
|
|
62
85
|
key={step}
|
|
63
86
|
className={classNames(
|
|
64
|
-
|
|
87
|
+
"fabric-meterBar",
|
|
65
88
|
"first-of-type:rounded-s last-of-type:rounded-e bg-tint-100 relative outline -outline-offset-1 outline-muted overflow-hidden after:absolute after:inset-0",
|
|
66
89
|
)}
|
|
67
90
|
data-active={activeCount >= step}
|
|
@@ -22,57 +22,106 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import classNames from "classnames";
|
|
25
|
+
import { useCallback } from "react";
|
|
25
26
|
import { HotKey } from "../../hotkeys/HotKey";
|
|
26
27
|
import {
|
|
27
28
|
type AriaProps,
|
|
29
|
+
type ChildProp,
|
|
28
30
|
type ColorType,
|
|
29
31
|
type CssProp,
|
|
32
|
+
type PaletteType,
|
|
30
33
|
type TestProps,
|
|
31
34
|
} from "../../types";
|
|
32
35
|
import { CoreIcons } from "../../types/icons";
|
|
33
36
|
import { Icon } from "../icon/Icon";
|
|
37
|
+
import { isEmpty } from "@react-fabric/utilities";
|
|
34
38
|
|
|
35
|
-
export interface NavigatorProps
|
|
39
|
+
export interface NavigatorProps
|
|
40
|
+
extends CssProp,
|
|
41
|
+
AriaProps,
|
|
42
|
+
TestProps,
|
|
43
|
+
Partial<ChildProp> {
|
|
44
|
+
length?: number;
|
|
45
|
+
current?: number;
|
|
46
|
+
disableKeyHandlers?: boolean;
|
|
36
47
|
/**
|
|
37
48
|
* navigator button color
|
|
38
49
|
*/
|
|
39
|
-
color?: ColorType | string;
|
|
50
|
+
color?: ColorType | PaletteType | string;
|
|
40
51
|
/**
|
|
41
52
|
* navigation handler
|
|
42
53
|
*/
|
|
43
54
|
onNavigate: (dir: -1 | 1) => void;
|
|
44
55
|
}
|
|
45
56
|
|
|
57
|
+
/**
|
|
58
|
+
* A component that provides navigation controls for traversing through items.
|
|
59
|
+
* It includes previous and next buttons, and supports keyboard navigation.
|
|
60
|
+
*
|
|
61
|
+
* @param {NavigatorProps} props - The properties for the Navigator component.
|
|
62
|
+
* @returns {JSX.Element} The rendered Navigator component.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```jsx
|
|
66
|
+
* <Navigator
|
|
67
|
+
* className="my-navigator"
|
|
68
|
+
* onNavigate={(dir) => console.log(`Navigate ${dir === -1 ? 'previous' : 'next'}`)}
|
|
69
|
+
* color="blue"
|
|
70
|
+
* length={10}
|
|
71
|
+
* current={0}
|
|
72
|
+
* >
|
|
73
|
+
* <span>Current Item: 1</span>
|
|
74
|
+
* </Navigator>
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-navigator--docs} for more details.
|
|
78
|
+
*/
|
|
46
79
|
export const Navigator = ({
|
|
47
80
|
className,
|
|
48
81
|
onNavigate,
|
|
49
82
|
color,
|
|
83
|
+
children,
|
|
84
|
+
length,
|
|
85
|
+
current,
|
|
86
|
+
disableKeyHandlers,
|
|
50
87
|
...aria
|
|
51
88
|
}: NavigatorProps) => {
|
|
89
|
+
const navPrev = useCallback(
|
|
90
|
+
() => (isEmpty(current) || current !== 0) && onNavigate(-1),
|
|
91
|
+
[onNavigate, current],
|
|
92
|
+
);
|
|
93
|
+
const navNext = useCallback(
|
|
94
|
+
() => (isEmpty(current) || current + 1 < (length ?? 0)) && onNavigate(+1),
|
|
95
|
+
[onNavigate, current, length],
|
|
96
|
+
);
|
|
52
97
|
return (
|
|
53
98
|
<div
|
|
54
|
-
|
|
99
|
+
data-ref="navigator"
|
|
100
|
+
className={classNames(className, "inline-flex items-center leading-none")}
|
|
55
101
|
{...aria}
|
|
56
102
|
>
|
|
57
|
-
<HotKey keyCombo="left" handler={
|
|
58
|
-
<HotKey keyCombo="right" handler={
|
|
103
|
+
{!disableKeyHandlers && <HotKey keyCombo="left" handler={navPrev} />}
|
|
104
|
+
{!disableKeyHandlers && <HotKey keyCombo="right" handler={navNext} />}
|
|
59
105
|
<Icon
|
|
60
106
|
rtlFlip
|
|
61
107
|
color={color}
|
|
62
108
|
className="text-[1em] p-1"
|
|
63
109
|
aria-label="previous"
|
|
64
|
-
data-
|
|
110
|
+
data-ref="previous"
|
|
65
111
|
icon={CoreIcons.chevronLeft}
|
|
66
|
-
|
|
112
|
+
disabled={!isEmpty(current) && current === 0}
|
|
113
|
+
onClick={(e) => [e.stopPropagation(), navPrev()]}
|
|
67
114
|
/>
|
|
115
|
+
{children}
|
|
68
116
|
<Icon
|
|
69
117
|
rtlFlip
|
|
70
118
|
className="text-[1em] p-1"
|
|
71
119
|
color={color}
|
|
72
120
|
aria-label="next"
|
|
73
|
-
data-
|
|
121
|
+
data-ref="next"
|
|
74
122
|
icon={CoreIcons.chevronRight}
|
|
75
|
-
|
|
123
|
+
disabled={!isEmpty(current) && current + 1 === length}
|
|
124
|
+
onClick={(e) => [e.stopPropagation(), navNext()]}
|
|
76
125
|
/>
|
|
77
126
|
</div>
|
|
78
127
|
);
|