@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
|
@@ -23,30 +23,32 @@
|
|
|
23
23
|
|
|
24
24
|
import { isNil, isNumber, isObject, mergeRefs } from "@react-fabric/utilities";
|
|
25
25
|
import classNames from "classnames";
|
|
26
|
-
import { cloneElement, useMemo } from "react";
|
|
26
|
+
import { cloneElement, isValidElement, useMemo } from "react";
|
|
27
27
|
import {
|
|
28
28
|
type BadgeType,
|
|
29
29
|
type ChildProp,
|
|
30
30
|
type CssProp,
|
|
31
|
-
type IconProps,
|
|
32
31
|
type RefProp,
|
|
33
32
|
} from "../../types";
|
|
34
|
-
import { Icon } from "../icon/Icon";
|
|
35
|
-
import classes from "./Badge.module.css";
|
|
33
|
+
import { getIconProps, Icon, type IconProps } from "../icon/Icon";
|
|
36
34
|
|
|
37
|
-
export interface BadgeProps
|
|
38
|
-
extends CssProp,
|
|
39
|
-
RefProp,
|
|
40
|
-
IconProps,
|
|
41
|
-
Partial<ChildProp> {
|
|
35
|
+
export interface BadgeProps extends CssProp, RefProp, Partial<ChildProp> {
|
|
42
36
|
/**
|
|
43
37
|
* make wrapper a block element
|
|
44
38
|
*/
|
|
45
39
|
block?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* inline badge
|
|
42
|
+
*/
|
|
43
|
+
inline?: boolean;
|
|
46
44
|
/**
|
|
47
45
|
* badge value
|
|
48
46
|
*/
|
|
49
47
|
value?: number | string;
|
|
48
|
+
/**
|
|
49
|
+
* icon path or props
|
|
50
|
+
*/
|
|
51
|
+
icon?: IconProps;
|
|
50
52
|
/**
|
|
51
53
|
* max value for number display
|
|
52
54
|
*/
|
|
@@ -69,10 +71,17 @@ export interface BadgeProps
|
|
|
69
71
|
| "end";
|
|
70
72
|
}
|
|
71
73
|
|
|
74
|
+
/**
|
|
75
|
+
* Utility function to get badge properties from a badge value or object.
|
|
76
|
+
* It checks if the badge is an object and returns its properties,
|
|
77
|
+
*
|
|
78
|
+
* @param {string | number | BadgeType} badge - The badge value or object.
|
|
79
|
+
* @returns {AnyObject} An object containing badge properties.
|
|
80
|
+
*/
|
|
72
81
|
export const getBadgeProps = (
|
|
73
82
|
badge?: string | number | BadgeType,
|
|
74
83
|
): AnyObject => {
|
|
75
|
-
if (isObject(badge)) {
|
|
84
|
+
if (isObject(badge) && !isValidElement(badge)) {
|
|
76
85
|
return Object.assign({ forButton: true, placement: "" }, badge);
|
|
77
86
|
} else {
|
|
78
87
|
return {
|
|
@@ -83,6 +92,24 @@ export const getBadgeProps = (
|
|
|
83
92
|
}
|
|
84
93
|
};
|
|
85
94
|
|
|
95
|
+
/**
|
|
96
|
+
* A component that displays a badge with a value, icon, and optional ping animation.
|
|
97
|
+
* It can be used to indicate notifications, messages, or other important information.
|
|
98
|
+
* It supports various placements, inline or block display, and custom styling.
|
|
99
|
+
* It can also wrap children elements, allowing for flexible usage in buttons or other components.
|
|
100
|
+
*
|
|
101
|
+
* @param {BadgeProps} props - The properties for the Badge component.
|
|
102
|
+
* @returns {JSX.Element} The rendered Badge component.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```jsx
|
|
106
|
+
* <Badge value={5} max={10} ping>
|
|
107
|
+
* <button>Notifications</button>
|
|
108
|
+
* </Badge>
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-badge--docs} for more details.
|
|
112
|
+
*/
|
|
86
113
|
export const Badge = ({
|
|
87
114
|
ref,
|
|
88
115
|
className,
|
|
@@ -90,17 +117,18 @@ export const Badge = ({
|
|
|
90
117
|
max,
|
|
91
118
|
ping,
|
|
92
119
|
block,
|
|
120
|
+
inline,
|
|
93
121
|
placement = "top-end",
|
|
94
122
|
children,
|
|
95
123
|
// @ts-expect-error ignore
|
|
96
124
|
forButton = false,
|
|
97
125
|
icon,
|
|
98
|
-
iconBg,
|
|
99
|
-
iconColor,
|
|
100
|
-
rtlFlip,
|
|
101
126
|
...rest
|
|
102
127
|
}: BadgeProps) => {
|
|
103
128
|
const label = useMemo(() => {
|
|
129
|
+
if (isValidElement(value)) {
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
104
132
|
if (!isNil(value)) {
|
|
105
133
|
if (isNumber(value) && max && value > max) {
|
|
106
134
|
return `${max}+`;
|
|
@@ -120,8 +148,8 @@ export const Badge = ({
|
|
|
120
148
|
return (
|
|
121
149
|
<div
|
|
122
150
|
className={classNames(
|
|
123
|
-
forButton ? "contents" : "
|
|
124
|
-
|
|
151
|
+
forButton || inline ? "contents" : block ? "block" : "inline-block",
|
|
152
|
+
forButton || inline ? "" : "relative",
|
|
125
153
|
)}
|
|
126
154
|
>
|
|
127
155
|
{children &&
|
|
@@ -129,22 +157,22 @@ export const Badge = ({
|
|
|
129
157
|
...rest,
|
|
130
158
|
ref: innerRef,
|
|
131
159
|
})}
|
|
132
|
-
{(!!ping || label) && (
|
|
160
|
+
{(!!ping || (label ?? icon)) && (
|
|
133
161
|
<div
|
|
134
162
|
data-ref="badge"
|
|
135
163
|
data-ping={ping}
|
|
136
164
|
data-placement={placement}
|
|
137
165
|
className={classNames(
|
|
138
|
-
|
|
166
|
+
"fabric-badge",
|
|
139
167
|
className,
|
|
140
|
-
"inline-block p-px min-w-2 min-h-2 text-center select-none rounded-full leading-none z-
|
|
141
|
-
forButton && !placement
|
|
168
|
+
"inline-block p-px min-w-2 min-h-2 text-center select-none rounded-full leading-none z-2 pointer-events-none",
|
|
169
|
+
(forButton && !placement) || inline
|
|
170
|
+
? "relative flex-content"
|
|
171
|
+
: "absolute",
|
|
142
172
|
)}
|
|
143
173
|
>
|
|
144
174
|
{label && <span className="p-1">{label}</span>}
|
|
145
|
-
{icon && (
|
|
146
|
-
<Icon icon={icon} bg={iconBg} color={iconColor} rtlFlip={rtlFlip} />
|
|
147
|
-
)}
|
|
175
|
+
{icon && <Icon {...getIconProps(icon)} />}
|
|
148
176
|
</div>
|
|
149
177
|
)}
|
|
150
178
|
</div>
|
|
@@ -24,14 +24,13 @@
|
|
|
24
24
|
import classNames from "classnames";
|
|
25
25
|
import { Children, useMemo } from "react";
|
|
26
26
|
import { type AriaProps, type ChildrenProp, type CssProp } from "../../types";
|
|
27
|
-
import {
|
|
27
|
+
import { Anchor } from "../../typography/Anchor";
|
|
28
28
|
import { Dropdown } from "../dropdown/Dropdown";
|
|
29
|
-
import classes from "./Breadcrumbs.module.css";
|
|
30
29
|
|
|
31
30
|
export interface BreadcrumbProps
|
|
32
31
|
extends CssProp,
|
|
33
32
|
AriaProps,
|
|
34
|
-
ChildrenProp<typeof
|
|
33
|
+
ChildrenProp<typeof Anchor> {
|
|
35
34
|
/**
|
|
36
35
|
* breadcrumb styling
|
|
37
36
|
*/
|
|
@@ -46,6 +45,35 @@ export interface BreadcrumbProps
|
|
|
46
45
|
color?: "primary" | "accent";
|
|
47
46
|
}
|
|
48
47
|
|
|
48
|
+
/**
|
|
49
|
+
* A navigation component that displays the current page's location within a hierarchy and allows users to navigate back to previous pages.
|
|
50
|
+
* It supports different styles, separators, and colors, and can handle a variable number of breadcrumb links.
|
|
51
|
+
* This component is useful for enhancing user navigation experience in applications with multiple levels of content hierarchy.
|
|
52
|
+
* It automatically manages the display of overflow items when there are too many links to fit in the available space, providing a dropdown for additional links.
|
|
53
|
+
*
|
|
54
|
+
* @param {BreadcrumbProps} props - The properties for the Breadcrumbs component.
|
|
55
|
+
* @returns {JSX.Element} The rendered Breadcrumbs component.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```jsx
|
|
59
|
+
* <Breadcrumbs
|
|
60
|
+
* variant="classic"
|
|
61
|
+
* separator=">"
|
|
62
|
+
* color="primary"
|
|
63
|
+
* className="my-custom-class"
|
|
64
|
+
* aria-label="Breadcrumbs"
|
|
65
|
+
* >
|
|
66
|
+
* <Anchor href="/">Home</Anchor>
|
|
67
|
+
* <Anchor href="/products">Products</Anchor>
|
|
68
|
+
* <Anchor href="/products/shoes">Shoes</Anchor>
|
|
69
|
+
* <Anchor href="/products/shoes/sneakers">Sneakers</Anchor>
|
|
70
|
+
* <Anchor href="/products/shoes/sneakers/nike">Nike</Anchor>
|
|
71
|
+
* <Anchor href="/products/shoes/sneakers/nike/airmax">Air Max</Anchor>
|
|
72
|
+
* </Breadcrumbs>
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-breadcrumbs--docs} for more details.
|
|
76
|
+
*/
|
|
49
77
|
export const Breadcrumbs = ({
|
|
50
78
|
variant = "classic",
|
|
51
79
|
className,
|
|
@@ -55,7 +83,7 @@ export const Breadcrumbs = ({
|
|
|
55
83
|
...aria
|
|
56
84
|
}: BreadcrumbProps) => {
|
|
57
85
|
const [start, overflow, end] = useMemo(() => {
|
|
58
|
-
const nodeList = Children.toArray(children as AnyObject);
|
|
86
|
+
const nodeList = Children.toArray(children as AnyObject).filter(Boolean);
|
|
59
87
|
if (nodeList.length > 7) {
|
|
60
88
|
return [nodeList.slice(0, 3), nodeList.slice(3, -3), nodeList.slice(-3)];
|
|
61
89
|
}
|
|
@@ -64,10 +92,11 @@ export const Breadcrumbs = ({
|
|
|
64
92
|
|
|
65
93
|
return (
|
|
66
94
|
<nav
|
|
95
|
+
data-ref="breadcrumbs"
|
|
67
96
|
data-color={color}
|
|
68
97
|
data-variant={variant}
|
|
69
98
|
className={classNames(
|
|
70
|
-
|
|
99
|
+
"fabric-breadcrumbs",
|
|
71
100
|
className,
|
|
72
101
|
"flex flex-nowrap items-center",
|
|
73
102
|
)}
|
|
@@ -76,7 +105,7 @@ export const Breadcrumbs = ({
|
|
|
76
105
|
{start.map((link, idx) => (
|
|
77
106
|
<li
|
|
78
107
|
key={idx}
|
|
79
|
-
className={
|
|
108
|
+
className={"fabric-breadcrumbLink"}
|
|
80
109
|
data-separator={separator}
|
|
81
110
|
>
|
|
82
111
|
{link}
|
|
@@ -84,12 +113,16 @@ export const Breadcrumbs = ({
|
|
|
84
113
|
))}
|
|
85
114
|
{overflow && (
|
|
86
115
|
<Dropdown closeOnClick showArrow>
|
|
87
|
-
<li
|
|
88
|
-
|
|
116
|
+
<li
|
|
117
|
+
className={"fabric-breadcrumbLink"}
|
|
118
|
+
data-separator={separator}
|
|
119
|
+
data-ref="breadcrumbOverflow"
|
|
120
|
+
>
|
|
121
|
+
<Anchor data->...</Anchor>
|
|
89
122
|
</li>
|
|
90
123
|
<div
|
|
91
124
|
data-color={color}
|
|
92
|
-
className={classNames(
|
|
125
|
+
className={classNames("fabric-breadcrumbOverflow", "flex flex-col")}
|
|
93
126
|
>
|
|
94
127
|
{overflow}
|
|
95
128
|
</div>
|
|
@@ -98,7 +131,7 @@ export const Breadcrumbs = ({
|
|
|
98
131
|
{end?.map((link, idx) => (
|
|
99
132
|
<li
|
|
100
133
|
key={idx}
|
|
101
|
-
className={
|
|
134
|
+
className={"fabric-breadcrumbLink"}
|
|
102
135
|
data-separator={separator}
|
|
103
136
|
>
|
|
104
137
|
{link}
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
-
import { isNil, isString, mergeRefs } from "@react-fabric/utilities";
|
|
24
|
+
import { isNil, isObject, isString, mergeRefs } from "@react-fabric/utilities";
|
|
25
25
|
import classNames from "classnames";
|
|
26
26
|
import {
|
|
27
27
|
Fragment,
|
|
28
28
|
isValidElement,
|
|
29
|
-
type MouseEventHandler,
|
|
30
29
|
useCallback,
|
|
31
30
|
useEffect,
|
|
32
31
|
useMemo,
|
|
33
32
|
useRef,
|
|
34
33
|
useState,
|
|
34
|
+
type MouseEventHandler,
|
|
35
35
|
type WheelEventHandler,
|
|
36
36
|
} from "react";
|
|
37
37
|
import { useEffectDebugger } from "../../hooks/useEffectDebugger";
|
|
@@ -42,26 +42,20 @@ import {
|
|
|
42
42
|
type AriaProps,
|
|
43
43
|
type BadgeType,
|
|
44
44
|
type CallbackReturn,
|
|
45
|
-
type
|
|
45
|
+
type ColorState,
|
|
46
46
|
type CssProp,
|
|
47
|
-
type IconProps,
|
|
48
47
|
type PolymorphicProps,
|
|
49
48
|
type RefProp,
|
|
50
49
|
type SizeType,
|
|
51
50
|
type TestProps,
|
|
52
51
|
type TooltipType,
|
|
53
52
|
} from "../../types";
|
|
53
|
+
import { getColor } from "../../utils";
|
|
54
54
|
import { AnimationIndicator } from "../animations/Animations";
|
|
55
55
|
import { Badge, getBadgeProps } from "../badge/Badge";
|
|
56
|
-
import { Icon } from "../icon/Icon";
|
|
57
|
-
import classes from "./Button.module.css";
|
|
56
|
+
import { getIconProps, Icon, type IconProps } from "../icon/Icon";
|
|
58
57
|
|
|
59
|
-
export interface BaseProps
|
|
60
|
-
extends CssProp,
|
|
61
|
-
AriaProps,
|
|
62
|
-
IconProps,
|
|
63
|
-
RefProp,
|
|
64
|
-
TestProps {
|
|
58
|
+
export interface BaseProps extends CssProp, AriaProps, RefProp, TestProps {
|
|
65
59
|
/**
|
|
66
60
|
* primary icon alignment
|
|
67
61
|
*/
|
|
@@ -77,7 +71,11 @@ export interface BaseProps
|
|
|
77
71
|
/**
|
|
78
72
|
* button color
|
|
79
73
|
*/
|
|
80
|
-
color?:
|
|
74
|
+
color?: ColorState;
|
|
75
|
+
/**
|
|
76
|
+
* icon path or props
|
|
77
|
+
*/
|
|
78
|
+
icon?: IconProps;
|
|
81
79
|
/**
|
|
82
80
|
* button type
|
|
83
81
|
*/
|
|
@@ -85,7 +83,7 @@ export interface BaseProps
|
|
|
85
83
|
/**
|
|
86
84
|
* button styling
|
|
87
85
|
*/
|
|
88
|
-
variant?: "outline" | "solid" | "link";
|
|
86
|
+
variant?: "outline" | "soft" | "solid" | "link";
|
|
89
87
|
/**
|
|
90
88
|
* active state with click disabled
|
|
91
89
|
*/
|
|
@@ -136,6 +134,10 @@ export interface BaseProps
|
|
|
136
134
|
*/
|
|
137
135
|
hotKey?: string;
|
|
138
136
|
|
|
137
|
+
/**
|
|
138
|
+
* prevent click default, useful when button is within a `a` link
|
|
139
|
+
*/
|
|
140
|
+
preventDefault?: boolean;
|
|
139
141
|
stopPropagation?: boolean;
|
|
140
142
|
|
|
141
143
|
onMouseOut?: MouseEventHandler;
|
|
@@ -147,12 +149,37 @@ export interface BaseProps
|
|
|
147
149
|
onWheel?: WheelEventHandler;
|
|
148
150
|
}
|
|
149
151
|
|
|
150
|
-
|
|
152
|
+
type ButtonTypeProps =
|
|
151
153
|
| { children: string | React.ReactElement; "aria-label"?: string }
|
|
152
154
|
| { children?: never; "aria-label": string };
|
|
153
155
|
|
|
156
|
+
export type ButtonProps<Tag extends React.ElementType = "button"> = BaseProps &
|
|
157
|
+
ButtonTypeProps &
|
|
158
|
+
PolymorphicProps<Tag>;
|
|
159
|
+
|
|
154
160
|
/**
|
|
155
|
-
*
|
|
161
|
+
* A versatile button component that supports various styles, icons, and actions.
|
|
162
|
+
* It can be used as a primary action button, with options for loading states, action messages, and more.
|
|
163
|
+
* It supports polymorphic rendering, allowing it to be used as different HTML elements (e.g., button, a, div).
|
|
164
|
+
* It also includes features like after action tooltips, badges, and keyboard shortcuts.
|
|
165
|
+
*
|
|
166
|
+
* @param {ButtonProps} props - The properties for the Button component.
|
|
167
|
+
* @returns {JSX.Element} The rendered Button component.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```jsx
|
|
171
|
+
* <Button
|
|
172
|
+
* color="primary"
|
|
173
|
+
* size="md"
|
|
174
|
+
* variant="solid"
|
|
175
|
+
* icon="check"
|
|
176
|
+
* onClick={() => console.log("Button clicked!")}
|
|
177
|
+
* >
|
|
178
|
+
* Click Me
|
|
179
|
+
* </Button>
|
|
180
|
+
* ```
|
|
181
|
+
*
|
|
182
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-button--docs} for more details.
|
|
156
183
|
*/
|
|
157
184
|
export const Button = <Tag extends React.ElementType = "button">({
|
|
158
185
|
as,
|
|
@@ -160,13 +187,10 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
160
187
|
children,
|
|
161
188
|
className,
|
|
162
189
|
active,
|
|
163
|
-
color = "
|
|
190
|
+
color = "default",
|
|
164
191
|
icon,
|
|
165
|
-
iconBg,
|
|
166
|
-
iconColor,
|
|
167
192
|
iconAlign = "start",
|
|
168
193
|
altIcon,
|
|
169
|
-
rtlFlip,
|
|
170
194
|
rounded,
|
|
171
195
|
size,
|
|
172
196
|
disabled,
|
|
@@ -177,6 +201,7 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
177
201
|
spinOnHover,
|
|
178
202
|
onClick,
|
|
179
203
|
actionMessage,
|
|
204
|
+
preventDefault,
|
|
180
205
|
stopPropagation,
|
|
181
206
|
type = "button",
|
|
182
207
|
hotKey,
|
|
@@ -186,14 +211,16 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
186
211
|
// @ts-expect-error ignore
|
|
187
212
|
"data-ref": dataRef,
|
|
188
213
|
...aria
|
|
189
|
-
}:
|
|
214
|
+
}: ButtonProps<Tag>) => {
|
|
190
215
|
const refEl = useRef<AnyObject>(null);
|
|
191
216
|
const [busy, setBusy] = useState(false);
|
|
192
217
|
const [actionDone, setActionDone] = useState(false);
|
|
193
218
|
|
|
219
|
+
// Handle click events
|
|
194
220
|
const clickHandler = useCallback(
|
|
195
221
|
(e: React.MouseEvent) => {
|
|
196
222
|
setBusy(true);
|
|
223
|
+
preventDefault && e.preventDefault();
|
|
197
224
|
stopPropagation && e.stopPropagation();
|
|
198
225
|
const ret = onClick?.(e);
|
|
199
226
|
void Promise.resolve(ret).then((b) => {
|
|
@@ -203,7 +230,14 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
203
230
|
}
|
|
204
231
|
});
|
|
205
232
|
},
|
|
206
|
-
[
|
|
233
|
+
[
|
|
234
|
+
onClick,
|
|
235
|
+
disabled,
|
|
236
|
+
preventDefault,
|
|
237
|
+
actionMessage,
|
|
238
|
+
showActionDoneEvent,
|
|
239
|
+
stopPropagation,
|
|
240
|
+
],
|
|
207
241
|
);
|
|
208
242
|
|
|
209
243
|
/** ***************** reset done state on timeout *******************/
|
|
@@ -230,7 +264,7 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
230
264
|
return {
|
|
231
265
|
content: actionMessage,
|
|
232
266
|
placement: "top",
|
|
233
|
-
color
|
|
267
|
+
color: `${color}-100`,
|
|
234
268
|
open: true,
|
|
235
269
|
} as TooltipType;
|
|
236
270
|
}
|
|
@@ -240,11 +274,15 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
240
274
|
return getBadgeProps(badge);
|
|
241
275
|
}, [badge]);
|
|
242
276
|
|
|
277
|
+
const hotKeyHandler = useRef(() => {
|
|
278
|
+
!disabled && refEl.current?.click();
|
|
279
|
+
});
|
|
280
|
+
|
|
243
281
|
const E = as ?? "button";
|
|
244
282
|
return (
|
|
245
283
|
<div
|
|
246
284
|
className={classNames(
|
|
247
|
-
|
|
285
|
+
"fabric-buttonWrapper",
|
|
248
286
|
className,
|
|
249
287
|
"relative align-text-top select-none focus-within:z-1",
|
|
250
288
|
fullWidth ? "block w-full" : "inline-block",
|
|
@@ -254,23 +292,18 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
254
292
|
data-loading={busy || loading}
|
|
255
293
|
data-disabled={disabled}
|
|
256
294
|
>
|
|
257
|
-
{hotKey &&
|
|
258
|
-
<HotKey
|
|
259
|
-
keyCombo={hotKey}
|
|
260
|
-
handler={() => !disabled && refEl.current?.click()}
|
|
261
|
-
/>
|
|
262
|
-
)}
|
|
295
|
+
{hotKey && <HotKey keyCombo={hotKey} handler={hotKeyHandler.current} />}
|
|
263
296
|
<TooltipWrapper {...tooltipProps}>
|
|
264
297
|
<E
|
|
265
298
|
ref={mergeRefs(ref, refEl)}
|
|
266
299
|
role="button"
|
|
267
300
|
className={classNames(
|
|
268
|
-
|
|
301
|
+
"fabric-button",
|
|
269
302
|
"pointer-events-auto cursor-pointer select-none flex flex-nowrap w-full h-full items-center border-0 -outline-offset-1 justify-center max-w-72 p-0 font-sans font-medium appearance-none",
|
|
270
303
|
`focus-visible:ring-2 focus-visible:ring-offset-2 buttonInner`,
|
|
271
304
|
fullWidth && "max-w-full w-full",
|
|
272
305
|
rounded && "rounded-full",
|
|
273
|
-
spinOnHover &&
|
|
306
|
+
spinOnHover && "fabric-spinOnHover",
|
|
274
307
|
)}
|
|
275
308
|
type={type}
|
|
276
309
|
disabled={disabled}
|
|
@@ -284,29 +317,26 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
284
317
|
>
|
|
285
318
|
{icon && (
|
|
286
319
|
<Icon
|
|
287
|
-
className={
|
|
288
|
-
icon={icon}
|
|
289
|
-
bg={iconBg}
|
|
290
|
-
color={iconColor}
|
|
291
|
-
rtlFlip={rtlFlip}
|
|
320
|
+
className={"fabric-buttonIcon"}
|
|
292
321
|
data-align={iconAlign}
|
|
322
|
+
{...getIconProps(icon)}
|
|
293
323
|
/>
|
|
294
324
|
)}
|
|
295
325
|
{isValidElement(children) && (
|
|
296
|
-
<div className={
|
|
326
|
+
<div className={"fabric-buttonChild"}>{children}</div>
|
|
297
327
|
)}
|
|
298
328
|
{isString(children) && (
|
|
299
329
|
<label
|
|
300
|
-
className={classNames(
|
|
301
|
-
data-colored-icon={
|
|
330
|
+
className={classNames("fabric-buttonLabel", "truncate")}
|
|
331
|
+
data-colored-icon={isObject(icon) && "bg" in icon}
|
|
302
332
|
>
|
|
303
333
|
{children}
|
|
304
334
|
</label>
|
|
305
335
|
)}
|
|
306
336
|
{!isNil(badge) && <Badge {...badgeProps} />}
|
|
307
|
-
{hotKey && <HotKeyLabel keyCombo={hotKey} />}
|
|
337
|
+
{hotKey && children && <HotKeyLabel keyCombo={hotKey} />}
|
|
308
338
|
{altIcon && (
|
|
309
|
-
<Icon className={
|
|
339
|
+
<Icon className={"fabric-altIcon"} icon={altIcon} rtlFlip />
|
|
310
340
|
)}
|
|
311
341
|
</E>
|
|
312
342
|
</TooltipWrapper>
|
|
@@ -314,9 +344,11 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
314
344
|
<div
|
|
315
345
|
className={classNames(
|
|
316
346
|
"absolute inset-0 overflow-hidden flex justify-center items-center",
|
|
317
|
-
`bg-${color}-300`,
|
|
318
347
|
rounded ? "rounded-full" : "rounded",
|
|
319
348
|
)}
|
|
349
|
+
style={{
|
|
350
|
+
backgroundColor: getColor(`${color}-300`),
|
|
351
|
+
}}
|
|
320
352
|
>
|
|
321
353
|
<AnimationIndicator type="check" color={color} />
|
|
322
354
|
</div>
|
|
@@ -22,18 +22,18 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import classNames from "classnames";
|
|
25
|
-
import {
|
|
25
|
+
import { cloneElement } from "react";
|
|
26
26
|
import {
|
|
27
27
|
type AriaProps,
|
|
28
28
|
type ChildrenProp,
|
|
29
|
-
type
|
|
29
|
+
type ColorState,
|
|
30
30
|
type CssProp,
|
|
31
31
|
type RefProp,
|
|
32
32
|
type SizeType,
|
|
33
33
|
type TestProps,
|
|
34
34
|
} from "../../types";
|
|
35
|
+
import { cloneChildren } from "../../utils";
|
|
35
36
|
import { type Button } from "./Button";
|
|
36
|
-
import classes from "./Button.module.css";
|
|
37
37
|
|
|
38
38
|
export interface ButtonGroupProps
|
|
39
39
|
extends CssProp,
|
|
@@ -56,7 +56,7 @@ export interface ButtonGroupProps
|
|
|
56
56
|
/**
|
|
57
57
|
* button color
|
|
58
58
|
*/
|
|
59
|
-
color?:
|
|
59
|
+
color?: ColorState;
|
|
60
60
|
/**
|
|
61
61
|
* full rounded edges
|
|
62
62
|
*/
|
|
@@ -71,6 +71,32 @@ export interface ButtonGroupProps
|
|
|
71
71
|
fullWidth?: boolean;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
/**
|
|
75
|
+
* A component that groups buttons together, allowing for consistent styling and behavior across multiple buttons.
|
|
76
|
+
* It supports vertical orientation, various button styles, and can handle properties like size, color, and disabled state.
|
|
77
|
+
* This component is useful for creating button groups that maintain a uniform appearance and functionality,
|
|
78
|
+
* such as toolbars, action groups, or navigation buttons.
|
|
79
|
+
*
|
|
80
|
+
* @param {ButtonGroupProps} props - The properties for the ButtonGroup component.
|
|
81
|
+
* @returns {JSX.Element} The rendered ButtonGroup component.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```jsx
|
|
85
|
+
* <ButtonGroup
|
|
86
|
+
* variant="solid"
|
|
87
|
+
* color="primary"
|
|
88
|
+
* className="my-custom-class"
|
|
89
|
+
* aria-label="Button Group"
|
|
90
|
+
* vertical
|
|
91
|
+
* >
|
|
92
|
+
* <Button>Button 1</Button>
|
|
93
|
+
* <Button>Button 2</Button>
|
|
94
|
+
* <Button>Button 3</Button>
|
|
95
|
+
* </ButtonGroup>
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-buttongroup--docs} for more details.
|
|
99
|
+
*/
|
|
74
100
|
export const ButtonGroup = ({
|
|
75
101
|
vertical,
|
|
76
102
|
className,
|
|
@@ -87,16 +113,16 @@ export const ButtonGroup = ({
|
|
|
87
113
|
<div
|
|
88
114
|
data-ref="buttonGroup"
|
|
89
115
|
className={classNames(
|
|
90
|
-
|
|
116
|
+
"fabric-buttonGroup",
|
|
91
117
|
className,
|
|
92
118
|
fullWidth ? "flex" : "inline-flex",
|
|
93
119
|
"flex-nowrap align-middle rounded",
|
|
94
|
-
vertical &&
|
|
120
|
+
vertical && "vertical",
|
|
95
121
|
vertical && "flex-col items-stretch",
|
|
96
122
|
)}
|
|
97
123
|
{...aria}
|
|
98
124
|
>
|
|
99
|
-
{
|
|
125
|
+
{cloneChildren(children, (child: AnyObject) =>
|
|
100
126
|
cloneElement(child, {
|
|
101
127
|
color,
|
|
102
128
|
size,
|
|
@@ -80,7 +80,28 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
|
|
|
80
80
|
export type ConfirmButtonProps = ExtendedProps & ButtonProps;
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
83
|
+
* A button that shows a confirmation dialog when clicked, allowing the user to confirm or cancel an action.
|
|
84
|
+
* It supports custom messages, labels, and loading states.
|
|
85
|
+
* This component is useful for actions that require user confirmation, such as deleting items or submitting forms.
|
|
86
|
+
* It uses the Floating UI library to manage the positioning of the confirmation dialog, ensuring it appears correctly relative to the button.
|
|
87
|
+
* It also supports custom placement of the dialog, and can display an action message when the action is completed.
|
|
88
|
+
*
|
|
89
|
+
* @param {ConfirmButtonProps} props - The properties for the ConfirmButton component.
|
|
90
|
+
* @returns {JSX.Element} The rendered ConfirmButton component.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```jsx
|
|
94
|
+
* <ConfirmButton
|
|
95
|
+
* message="Are you sure you want to delete this item?"
|
|
96
|
+
* onClick={(confirmed) => {
|
|
97
|
+
* if (confirmed) {
|
|
98
|
+
* // Perform action
|
|
99
|
+
* }
|
|
100
|
+
* }}
|
|
101
|
+
* />
|
|
102
|
+
* ```
|
|
103
|
+
*
|
|
104
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-confirmbutton--docs} for more details.
|
|
84
105
|
*/
|
|
85
106
|
export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
86
107
|
ref,
|
|
@@ -187,15 +208,21 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
187
208
|
"select-none not-italic rounded-capped shadow-lg outline outline-muted bg-base",
|
|
188
209
|
)}
|
|
189
210
|
ref={refs.setFloating}
|
|
190
|
-
style={
|
|
211
|
+
style={{
|
|
212
|
+
zIndex: "var(--z-popover)",
|
|
213
|
+
...floatingStyles,
|
|
214
|
+
}}
|
|
191
215
|
{...getFloatingProps()}
|
|
192
216
|
>
|
|
193
217
|
<div className="font-medium ">
|
|
194
|
-
<p className="py-2 px-4">
|
|
218
|
+
<p className="py-2 px-4" data-ref="confirmMessage">
|
|
219
|
+
{message}
|
|
220
|
+
</p>
|
|
195
221
|
<div className="flex justify-end py-2 px-4 gap-2">
|
|
196
222
|
<Button
|
|
197
223
|
size="sm"
|
|
198
224
|
variant="link"
|
|
225
|
+
data-ref="confirmCancel"
|
|
199
226
|
color={color}
|
|
200
227
|
onClick={() => [clickHandler(false), setIsOpen(false)]}
|
|
201
228
|
>
|
|
@@ -206,6 +233,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
206
233
|
variant="solid"
|
|
207
234
|
color={color}
|
|
208
235
|
autoFocus
|
|
236
|
+
data-ref="confirmOk"
|
|
209
237
|
onClick={() => [clickHandler(true), setIsOpen(false)]}
|
|
210
238
|
>
|
|
211
239
|
{okLabel ?? t("action.ok")}
|