@react-fabric/core 1.0.0-beta.6 → 1.0.0-beta.61
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} +86 -84
- 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} +12 -9
- 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 +9 -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 +137 -45
- 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 +51 -29
- 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 +47 -7
- 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 +32 -8
- 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 +2 -3
- 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 +174 -76
- package/dist/cjs/components/menu/ContextMenu.js +19 -0
- package/dist/cjs/components/menu/Menu.js +77 -23
- package/dist/cjs/components/menu/MenuItem.js +54 -27
- package/dist/cjs/components/meter/Meter.js +26 -3
- package/dist/cjs/components/navigator/Navigator.js +50 -18
- package/dist/cjs/components/panel/Panel.js +59 -28
- 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 -16
- 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 +50 -25
- 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 +41 -40
- 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 +74 -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 +14 -10
- package/dist/cjs/overlays/alert/Alert.js +24 -17
- package/dist/cjs/overlays/flyout/Flyout.js +48 -65
- package/dist/cjs/overlays/message/Message.js +8 -3
- package/dist/cjs/overlays/modal/Modal.js +19 -23
- package/dist/cjs/overlays/toast/Toast.js +22 -13
- package/dist/cjs/overlays/tooltip/Tooltip.js +25 -13
- package/dist/cjs/typography/Abbr.js +35 -7
- package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
- package/dist/cjs/typography/Copy.js +1 -2
- 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 +135 -44
- 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 +53 -31
- 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 +47 -7
- 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 +32 -8
- 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 +2 -3
- 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 +175 -77
- package/dist/esm/components/menu/ContextMenu.js +19 -0
- package/dist/esm/components/menu/Menu.js +79 -25
- package/dist/esm/components/menu/MenuItem.js +49 -22
- package/dist/esm/components/meter/Meter.js +26 -3
- package/dist/esm/components/navigator/Navigator.js +50 -18
- package/dist/esm/components/panel/Panel.js +61 -30
- 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 -17
- 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 +52 -27
- 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 +43 -42
- 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 +74 -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 +7 -4
- package/dist/esm/overlays/alert/Alert.js +25 -18
- package/dist/esm/overlays/flyout/Flyout.js +53 -70
- package/dist/esm/overlays/message/Message.js +9 -4
- package/dist/esm/overlays/modal/Modal.js +22 -26
- package/dist/esm/overlays/toast/Toast.js +23 -14
- package/dist/esm/overlays/tooltip/Tooltip.js +25 -13
- package/dist/esm/typography/Abbr.js +35 -7
- package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
- package/dist/esm/typography/Copy.js +1 -2
- 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 +105 -7
- 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 -1
- 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/index.d.ts +28 -24
- 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 +17 -16
- package/src/components/actionLabel/ActionLabel.tsx +26 -8
- package/src/components/animations/Animations.tsx +139 -52
- 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 +75 -43
- 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 +58 -16
- 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 +35 -11
- package/src/components/divider/Divider.tsx +42 -16
- package/src/components/dropdown/Dropdown.tsx +47 -12
- package/src/components/dropdown/DropdownTool.tsx +28 -4
- package/src/components/empty/EmptyContent.tsx +49 -8
- package/src/components/icon/Icon.tsx +96 -18
- package/src/components/index.ts +5 -4
- package/src/components/media/Media.tsx +193 -105
- package/src/components/menu/ContextMenu.tsx +19 -0
- package/src/components/menu/Menu.tsx +88 -32
- 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 +60 -12
- package/src/components/panel/Panel.tsx +66 -28
- 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 +59 -38
- 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 +44 -22
- 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 -1
- package/src/overlays/alert/Alert.tsx +51 -36
- package/src/overlays/flyout/Flyout.tsx +74 -99
- package/src/overlays/message/Message.tsx +28 -9
- package/src/overlays/modal/Modal.tsx +39 -34
- package/src/overlays/toast/Toast.tsx +44 -33
- package/src/overlays/tooltip/Tooltip.tsx +44 -20
- package/src/types/global.d.ts +8 -0
- package/src/types/index.ts +293 -47
- package/src/typography/Abbr.tsx +45 -11
- package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
- package/src/typography/Copy.tsx +16 -2
- 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/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.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/types/icons.js +0 -199
- 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/types/icons.js +0 -201
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/types/types/icons.d.ts +0 -196
- package/dist/types/typography/Link.d.ts +0 -25
- package/src/types/icons.ts +0 -425
|
@@ -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,8 @@ import {
|
|
|
56
55
|
useRef,
|
|
57
56
|
useState,
|
|
58
57
|
} from "react";
|
|
59
|
-
import {
|
|
60
|
-
import { nodeCheck } from "../../utils";
|
|
58
|
+
import { HotKeyWrapper } from "../../hotkeys/HotKeyWrapper";
|
|
59
|
+
import { cloneChildren, nodeCheck } from "../../utils";
|
|
61
60
|
import { MenuItem } from "./MenuItem";
|
|
62
61
|
import { type MenuProps } from "./types";
|
|
63
62
|
|
|
@@ -69,6 +68,8 @@ const MenuComponent = ({
|
|
|
69
68
|
menuClassName,
|
|
70
69
|
onClick,
|
|
71
70
|
// @ts-expect-error ignore
|
|
71
|
+
trigger = "hover",
|
|
72
|
+
// @ts-expect-error ignore
|
|
72
73
|
ref,
|
|
73
74
|
...rest
|
|
74
75
|
}: Partial<MenuProps>) => {
|
|
@@ -89,6 +90,8 @@ const MenuComponent = ({
|
|
|
89
90
|
open: !isNested || isOpen,
|
|
90
91
|
onOpenChange(open, event, reason) {
|
|
91
92
|
isNested && setIsOpen(open);
|
|
93
|
+
if (reason === "outside-press" && trigger === "click")
|
|
94
|
+
tree?.events.emit("close");
|
|
92
95
|
},
|
|
93
96
|
placement: isNested ? "right-start" : "bottom-start",
|
|
94
97
|
middleware: [
|
|
@@ -100,12 +103,14 @@ const MenuComponent = ({
|
|
|
100
103
|
});
|
|
101
104
|
|
|
102
105
|
const hover = useHover(context, {
|
|
106
|
+
enabled: trigger === "hover",
|
|
103
107
|
delay: { open: 75 },
|
|
104
108
|
handleClose: safePolygon({ blockPointerEvents: true }),
|
|
105
109
|
});
|
|
106
110
|
const click = useClick(context, {
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
event: "mousedown",
|
|
112
|
+
toggle: trigger === "click" || !isNested,
|
|
113
|
+
ignoreMouse: trigger === "hover" && !isNested,
|
|
109
114
|
});
|
|
110
115
|
const role = useRole(context, { role: "menu" });
|
|
111
116
|
const dismiss = useDismiss(context, { bubbles: true });
|
|
@@ -187,6 +192,16 @@ const MenuComponent = ({
|
|
|
187
192
|
);
|
|
188
193
|
}, [isOpen]);
|
|
189
194
|
|
|
195
|
+
useEffect(() => {
|
|
196
|
+
if ((!isNested || isOpen) && activeIndex) {
|
|
197
|
+
setTimeout(() => {
|
|
198
|
+
elementsRef.current[activeIndex]?.scrollIntoView({
|
|
199
|
+
block: "nearest",
|
|
200
|
+
});
|
|
201
|
+
}, 100);
|
|
202
|
+
}
|
|
203
|
+
}, [isOpen, activeIndex]);
|
|
204
|
+
|
|
190
205
|
return (
|
|
191
206
|
<FloatingNode id={nodeId}>
|
|
192
207
|
{isNested && (
|
|
@@ -202,7 +217,7 @@ const MenuComponent = ({
|
|
|
202
217
|
} as AnyObject) as AnyObject)}
|
|
203
218
|
data-open={isOpen}
|
|
204
219
|
minimal={minimal}
|
|
205
|
-
altIcon=
|
|
220
|
+
altIcon="icon-[mdi--menu-right]"
|
|
206
221
|
ref={mergeRefs(refs.setReference, ref)}
|
|
207
222
|
/>
|
|
208
223
|
)}
|
|
@@ -210,29 +225,29 @@ const MenuComponent = ({
|
|
|
210
225
|
{(!isNested || isOpen) && (
|
|
211
226
|
<Wrapper {...wrapperProps}>
|
|
212
227
|
{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 }}
|
|
228
|
+
<HotKeyWrapper>
|
|
229
|
+
<FloatingFocusManager
|
|
230
|
+
context={context}
|
|
231
|
+
modal={!isNested}
|
|
232
|
+
initialFocus={isNested ? -1 : 0}
|
|
233
|
+
returnFocus={!isNested}
|
|
233
234
|
>
|
|
234
|
-
|
|
235
|
-
|
|
235
|
+
<div
|
|
236
|
+
className={classNames(
|
|
237
|
+
menuClassName,
|
|
238
|
+
"flex flex-col bg-base p-1 menu-list",
|
|
239
|
+
isNested &&
|
|
240
|
+
"outline shadow-lg rounded-capped max-h-96 overflow-auto scroll-thin z-(--z-popover)",
|
|
241
|
+
)}
|
|
242
|
+
autoFocus
|
|
243
|
+
ref={mergeRefs(isNested ? refs.setFloating : ref)}
|
|
244
|
+
{...getFloatingProps({
|
|
245
|
+
onClick: isNested ? undefined : handleClick,
|
|
246
|
+
})}
|
|
247
|
+
// @ts-expect-error ignore
|
|
248
|
+
{...{ style: !isNested ? rest.style : floatingStyles }}
|
|
249
|
+
>
|
|
250
|
+
{cloneChildren(children, (child: AnyObject, index) => {
|
|
236
251
|
labelsRef.current[index] = child.props.label;
|
|
237
252
|
return cloneElement(
|
|
238
253
|
child,
|
|
@@ -249,10 +264,10 @@ const MenuComponent = ({
|
|
|
249
264
|
}
|
|
250
265
|
: {},
|
|
251
266
|
);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
</
|
|
255
|
-
</
|
|
267
|
+
})}
|
|
268
|
+
</div>
|
|
269
|
+
</FloatingFocusManager>
|
|
270
|
+
</HotKeyWrapper>
|
|
256
271
|
</Wrapper>
|
|
257
272
|
)}
|
|
258
273
|
</FloatingList>
|
|
@@ -260,14 +275,55 @@ const MenuComponent = ({
|
|
|
260
275
|
);
|
|
261
276
|
};
|
|
262
277
|
|
|
278
|
+
/**
|
|
279
|
+
* A component that displays a menu with items, supports nested menus and various interactions.
|
|
280
|
+
* It can be triggered by hover or click events, and allows for custom styling and behavior.
|
|
281
|
+
* This component is designed to be used within a Floating UI context, allowing for dynamic positioning and interaction handling.
|
|
282
|
+
* It can be nested within other menus to create complex menu structures.
|
|
283
|
+
*
|
|
284
|
+
* @param {MenuProps} props - The properties for the Menu component.
|
|
285
|
+
* @returns {JSX.Element} The rendered Menu component.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```jsx
|
|
289
|
+
* <Menu
|
|
290
|
+
* className="my-menu"
|
|
291
|
+
* trigger="click"
|
|
292
|
+
* onClick={(id) => console.log(`Clicked item with id: ${id}`)}
|
|
293
|
+
* >
|
|
294
|
+
* <MenuItem id="item1" label="Item 1" />
|
|
295
|
+
* <MenuItem id="item2" label="Item 2" />
|
|
296
|
+
* <MenuItem id="item3" label="Item 3">
|
|
297
|
+
* <Menu>
|
|
298
|
+
* <MenuItem id="subitem1" label="Sub Item 1" />
|
|
299
|
+
* <MenuItem id="subitem2" label="Sub Item 2" />
|
|
300
|
+
* </Menu>
|
|
301
|
+
* </MenuItem>
|
|
302
|
+
* </Menu>
|
|
303
|
+
* ```
|
|
304
|
+
*
|
|
305
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs} for more details.
|
|
306
|
+
*/
|
|
263
307
|
export const Menu = (props: MenuProps) => {
|
|
264
308
|
const parentId = useFloatingParentNodeId();
|
|
309
|
+
const tree = useFloatingTree();
|
|
310
|
+
|
|
311
|
+
if (tree) {
|
|
312
|
+
return (
|
|
313
|
+
<MenuComponent
|
|
314
|
+
{...(props as AnyObject)}
|
|
315
|
+
className=""
|
|
316
|
+
menuClassName={props.className}
|
|
317
|
+
/>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
265
320
|
|
|
266
321
|
if (parentId === null) {
|
|
267
322
|
return (
|
|
268
323
|
<FloatingTree>
|
|
269
324
|
<MenuComponent
|
|
270
325
|
{...(props as AnyObject)}
|
|
326
|
+
className=""
|
|
271
327
|
menuClassName={props.className}
|
|
272
328
|
/>
|
|
273
329
|
</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,105 @@
|
|
|
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
|
-
import { CoreIcons } from "../../types/icons";
|
|
33
35
|
import { Icon } from "../icon/Icon";
|
|
36
|
+
import { isEmpty } from "@react-fabric/utilities";
|
|
34
37
|
|
|
35
|
-
export interface NavigatorProps
|
|
38
|
+
export interface NavigatorProps
|
|
39
|
+
extends CssProp,
|
|
40
|
+
AriaProps,
|
|
41
|
+
TestProps,
|
|
42
|
+
Partial<ChildProp> {
|
|
43
|
+
length?: number;
|
|
44
|
+
current?: number;
|
|
45
|
+
disableKeyHandlers?: boolean;
|
|
36
46
|
/**
|
|
37
47
|
* navigator button color
|
|
38
48
|
*/
|
|
39
|
-
color?: ColorType | string;
|
|
49
|
+
color?: ColorType | PaletteType | string;
|
|
40
50
|
/**
|
|
41
51
|
* navigation handler
|
|
42
52
|
*/
|
|
43
53
|
onNavigate: (dir: -1 | 1) => void;
|
|
44
54
|
}
|
|
45
55
|
|
|
56
|
+
/**
|
|
57
|
+
* A component that provides navigation controls for traversing through items.
|
|
58
|
+
* It includes previous and next buttons, and supports keyboard navigation.
|
|
59
|
+
*
|
|
60
|
+
* @param {NavigatorProps} props - The properties for the Navigator component.
|
|
61
|
+
* @returns {JSX.Element} The rendered Navigator component.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```jsx
|
|
65
|
+
* <Navigator
|
|
66
|
+
* className="my-navigator"
|
|
67
|
+
* onNavigate={(dir) => console.log(`Navigate ${dir === -1 ? 'previous' : 'next'}`)}
|
|
68
|
+
* color="blue"
|
|
69
|
+
* length={10}
|
|
70
|
+
* current={0}
|
|
71
|
+
* >
|
|
72
|
+
* <span>Current Item: 1</span>
|
|
73
|
+
* </Navigator>
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-navigator--docs} for more details.
|
|
77
|
+
*/
|
|
46
78
|
export const Navigator = ({
|
|
47
79
|
className,
|
|
48
80
|
onNavigate,
|
|
49
81
|
color,
|
|
82
|
+
children,
|
|
83
|
+
length,
|
|
84
|
+
current,
|
|
85
|
+
disableKeyHandlers,
|
|
50
86
|
...aria
|
|
51
87
|
}: NavigatorProps) => {
|
|
88
|
+
const navPrev = useCallback(
|
|
89
|
+
() => (isEmpty(current) || current !== 0) && onNavigate(-1),
|
|
90
|
+
[onNavigate, current],
|
|
91
|
+
);
|
|
92
|
+
const navNext = useCallback(
|
|
93
|
+
() => (isEmpty(current) || current + 1 < (length ?? 0)) && onNavigate(+1),
|
|
94
|
+
[onNavigate, current, length],
|
|
95
|
+
);
|
|
52
96
|
return (
|
|
53
97
|
<div
|
|
54
|
-
|
|
98
|
+
data-ref="navigator"
|
|
99
|
+
className={classNames(className, "inline-flex items-center leading-none")}
|
|
55
100
|
{...aria}
|
|
56
101
|
>
|
|
57
|
-
<HotKey keyCombo="left" handler={
|
|
58
|
-
<HotKey keyCombo="right" handler={
|
|
102
|
+
{!disableKeyHandlers && <HotKey keyCombo="left" handler={navPrev} />}
|
|
103
|
+
{!disableKeyHandlers && <HotKey keyCombo="right" handler={navNext} />}
|
|
59
104
|
<Icon
|
|
60
105
|
rtlFlip
|
|
61
106
|
color={color}
|
|
62
107
|
className="text-[1em] p-1"
|
|
63
108
|
aria-label="previous"
|
|
64
|
-
data-
|
|
65
|
-
icon=
|
|
66
|
-
|
|
109
|
+
data-ref="previous"
|
|
110
|
+
icon="icon-[mdi--chevron-left]"
|
|
111
|
+
disabled={!isEmpty(current) && current === 0}
|
|
112
|
+
onClick={(e) => [e.stopPropagation(), navPrev()]}
|
|
67
113
|
/>
|
|
114
|
+
{children}
|
|
68
115
|
<Icon
|
|
69
116
|
rtlFlip
|
|
70
117
|
className="text-[1em] p-1"
|
|
71
118
|
color={color}
|
|
72
119
|
aria-label="next"
|
|
73
|
-
data-
|
|
74
|
-
icon=
|
|
75
|
-
|
|
120
|
+
data-ref="next"
|
|
121
|
+
icon="icon-[mdi--chevron-right]"
|
|
122
|
+
disabled={!isEmpty(current) && current + 1 === length}
|
|
123
|
+
onClick={(e) => [e.stopPropagation(), navNext()]}
|
|
76
124
|
/>
|
|
77
125
|
</div>
|
|
78
126
|
);
|