@react-fabric/core 1.0.0-beta.5 → 1.0.0-beta.52
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} +49 -44
- package/{src/components/button/Button.module.css → css/components/_button.css} +69 -79
- package/{src/components/card/Card.module.css → css/components/_card.css} +50 -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} +8 -5
- package/{src/components/media/Media.module.css → css/components/_media.css} +17 -17
- package/{src/components/menu/Menu.module.css → css/components/_menu.css} +19 -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/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +73 -84
- 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} +25 -18
- package/{src/core/aside/Aside.module.css → css/core/_aside.css} +56 -42
- 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 +42 -224
- package/css/reset/_text.css +14 -29
- package/css/reset/_theme.css +331 -52
- package/css/reset/index.css +4 -4
- package/css/styles.css +7 -6
- package/css/theme/_colors.css +320 -0
- package/css/theme/_utilities.css +530 -0
- package/css/theme/index.css +45 -0
- package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
- package/dist/cjs/components/animations/Animations.js +118 -24
- package/dist/cjs/components/avatar/Avatar.js +43 -16
- package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
- package/dist/cjs/components/badge/Badge.js +35 -6
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +39 -8
- package/dist/cjs/components/button/Button.js +42 -15
- package/dist/cjs/components/button/ButtonGroup.js +30 -3
- package/dist/cjs/components/button/ConfirmButton.js +32 -4
- package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
- package/dist/cjs/components/callout/Callout.js +44 -4
- package/dist/cjs/components/card/Card.js +48 -10
- 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 +32 -7
- package/dist/cjs/components/collapsable/Collapsable.js +32 -6
- 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 +4 -3
- package/dist/cjs/components/empty/EmptyContent.js +35 -5
- package/dist/cjs/components/icon/Icon.js +44 -16
- package/dist/cjs/components/media/Media.js +172 -75
- package/dist/cjs/components/menu/ContextMenu.js +49 -10
- package/dist/cjs/components/menu/Menu.js +74 -21
- package/dist/cjs/components/menu/MenuItem.js +51 -16
- package/dist/cjs/components/meter/Meter.js +26 -3
- package/dist/cjs/components/navigator/Navigator.js +48 -13
- package/dist/cjs/components/panel/Panel.js +47 -9
- package/dist/cjs/components/panel/PanelGroup.js +25 -2
- package/dist/cjs/components/panel/PanelStack.js +31 -0
- 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 +89 -38
- package/dist/cjs/components/tabpanel/TabPanel.js +53 -16
- package/dist/cjs/context/Global.js +28 -1
- package/dist/cjs/context/NotificationCenter.js +3 -3
- package/dist/cjs/core/aside/Aside.js +49 -11
- package/dist/cjs/core/boundary/ErrorBoundary.js +23 -8
- package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
- package/dist/cjs/core/content/Content.js +15 -8
- package/dist/cjs/core/headfoot/HeadFoot.js +44 -20
- package/dist/cjs/core/page/Page.js +40 -29
- package/dist/cjs/core/responsive/Responsive.js +59 -6
- package/dist/cjs/core/section/Section.js +1 -2
- 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/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 +8 -2
- package/dist/cjs/overlays/alert/Alert.js +20 -14
- package/dist/cjs/overlays/flyout/Flyout.js +49 -60
- package/dist/cjs/overlays/message/Message.js +6 -3
- package/dist/cjs/overlays/modal/Modal.js +16 -12
- package/dist/cjs/overlays/toast/Toast.js +17 -9
- package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
- package/dist/cjs/types/icons.js +10 -1
- package/dist/cjs/typography/Abbr.js +32 -6
- package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
- package/dist/cjs/typography/Mark.js +22 -4
- 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 +119 -25
- package/dist/esm/components/avatar/Avatar.js +44 -17
- package/dist/esm/components/avatar/AvatarGroup.js +22 -4
- package/dist/esm/components/badge/Badge.js +36 -7
- package/dist/esm/components/breadcrumbs/Breadcrumbs.js +39 -8
- package/dist/esm/components/button/Button.js +42 -15
- package/dist/esm/components/button/ButtonGroup.js +31 -4
- package/dist/esm/components/button/ConfirmButton.js +32 -4
- package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
- package/dist/esm/components/callout/Callout.js +44 -4
- package/dist/esm/components/card/Card.js +49 -11
- 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 +33 -8
- package/dist/esm/components/collapsable/Collapsable.js +32 -6
- 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 +4 -3
- package/dist/esm/components/empty/EmptyContent.js +35 -5
- package/dist/esm/components/icon/Icon.js +44 -16
- package/dist/esm/components/media/Media.js +173 -76
- package/dist/esm/components/menu/ContextMenu.js +51 -12
- package/dist/esm/components/menu/Menu.js +76 -23
- package/dist/esm/components/menu/MenuItem.js +45 -10
- package/dist/esm/components/meter/Meter.js +26 -3
- package/dist/esm/components/navigator/Navigator.js +48 -13
- package/dist/esm/components/panel/Panel.js +47 -9
- package/dist/esm/components/panel/PanelGroup.js +25 -2
- package/dist/esm/components/panel/PanelStack.js +31 -0
- 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 +90 -39
- package/dist/esm/components/tabpanel/TabPanel.js +53 -16
- package/dist/esm/context/Global.js +28 -1
- package/dist/esm/context/NotificationCenter.js +3 -3
- package/dist/esm/core/aside/Aside.js +49 -11
- package/dist/esm/core/boundary/ErrorBoundary.js +23 -8
- package/dist/esm/core/boundary/ErrorIcon.js +1 -2
- package/dist/esm/core/content/Content.js +15 -8
- package/dist/esm/core/headfoot/HeadFoot.js +44 -20
- package/dist/esm/core/page/Page.js +40 -29
- package/dist/esm/core/responsive/Responsive.js +59 -6
- package/dist/esm/core/section/Section.js +1 -2
- 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/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 +4 -1
- package/dist/esm/overlays/alert/Alert.js +21 -15
- package/dist/esm/overlays/flyout/Flyout.js +52 -63
- package/dist/esm/overlays/message/Message.js +7 -4
- package/dist/esm/overlays/modal/Modal.js +17 -13
- package/dist/esm/overlays/toast/Toast.js +18 -10
- package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
- package/dist/esm/types/icons.js +10 -1
- package/dist/esm/typography/Abbr.js +32 -6
- package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
- package/dist/esm/typography/Mark.js +22 -4
- 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 +23 -4
- package/dist/types/components/animations/Animations.d.ts +84 -5
- package/dist/types/components/avatar/Avatar.d.ts +29 -5
- package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
- package/dist/types/components/badge/Badge.d.ts +30 -1
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
- package/dist/types/components/button/Button.d.ts +29 -6
- package/dist/types/components/button/ButtonGroup.d.ts +28 -3
- package/dist/types/components/button/ConfirmButton.d.ts +28 -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 +42 -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 +24 -4
- package/dist/types/components/collapsable/Collapsable.d.ts +33 -3
- 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 +27 -1
- package/dist/types/components/empty/EmptyContent.d.ts +32 -3
- package/dist/types/components/icon/Icon.d.ts +32 -6
- package/dist/types/components/index.d.ts +2 -1
- package/dist/types/components/media/Media.d.ts +56 -2
- package/dist/types/components/menu/ContextMenu.d.ts +21 -2
- 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 +3 -2
- 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 +37 -1
- 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 +36 -5
- package/dist/types/components/tabpanel/TabPanel.d.ts +43 -1
- package/dist/types/context/Global.d.ts +24 -1
- package/dist/types/core/aside/Aside.d.ts +38 -1
- package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
- package/dist/types/core/content/Content.d.ts +9 -3
- package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
- package/dist/types/core/page/Page.d.ts +29 -4
- package/dist/types/core/responsive/Responsive.d.ts +58 -3
- package/dist/types/core/section/Section.d.ts +16 -1
- 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/useStorage.d.ts +38 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/overlays/alert/Alert.d.ts +2 -3
- package/dist/types/overlays/flyout/Flyout.d.ts +3 -2
- package/dist/types/overlays/message/Message.d.ts +2 -3
- package/dist/types/overlays/modal/Modal.d.ts +12 -3
- package/dist/types/overlays/toast/Toast.d.ts +2 -3
- package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
- package/dist/types/types/icons.d.ts +10 -1
- package/dist/types/types/index.d.ts +26 -6
- 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 +2 -0
- package/dist/types/utils/getColor.d.ts +1 -4
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +11 -13
- package/src/components/actionLabel/ActionLabel.tsx +38 -11
- package/src/components/animations/Animations.tsx +118 -33
- package/src/components/avatar/Avatar.tsx +106 -91
- package/src/components/avatar/AvatarGroup.tsx +23 -5
- package/src/components/badge/Badge.tsx +41 -9
- package/src/components/breadcrumbs/Breadcrumbs.tsx +42 -9
- package/src/components/button/Button.tsx +50 -23
- package/src/components/button/ButtonGroup.tsx +33 -7
- package/src/components/button/ConfirmButton.tsx +41 -7
- package/src/components/button/ToggleButtonGroup.tsx +74 -47
- package/src/components/callout/Callout.tsx +55 -12
- package/src/components/card/Card.tsx +64 -15
- package/src/components/card/CardCover.tsx +36 -6
- package/src/components/card/FlipContent.tsx +90 -0
- package/src/components/chip/Chip.tsx +39 -13
- package/src/components/collapsable/Collapsable.tsx +38 -7
- package/src/components/divider/Divider.tsx +42 -16
- package/src/components/dropdown/Dropdown.tsx +46 -11
- package/src/components/dropdown/DropdownTool.tsx +30 -3
- package/src/components/empty/EmptyContent.tsx +47 -6
- package/src/components/icon/Icon.tsx +85 -68
- package/src/components/index.ts +2 -1
- package/src/components/media/Media.tsx +195 -106
- package/src/components/menu/ContextMenu.tsx +55 -11
- package/src/components/menu/Menu.tsx +85 -30
- package/src/components/menu/MenuItem.tsx +40 -9
- package/src/components/menu/types.ts +3 -2
- package/src/components/meter/Meter.tsx +26 -3
- package/src/components/navigator/Navigator.tsx +58 -7
- package/src/components/panel/Panel.tsx +47 -9
- package/src/components/panel/PanelGroup.tsx +25 -2
- package/src/components/panel/PanelStack.tsx +31 -0
- package/src/components/progress/ProgressBar.tsx +33 -14
- package/src/components/progress/ProgressCircle.tsx +29 -13
- package/src/components/tabpanel/Tab.tsx +112 -64
- package/src/components/tabpanel/TabPanel.tsx +67 -12
- package/src/context/Global.tsx +28 -1
- package/src/context/NotificationCenter.tsx +3 -3
- package/src/core/aside/Aside.tsx +50 -12
- package/src/core/boundary/ErrorBoundary.tsx +25 -8
- package/src/core/boundary/ErrorIcon.tsx +1 -2
- package/src/core/content/Content.tsx +23 -13
- package/src/core/headfoot/HeadFoot.tsx +42 -35
- package/src/core/page/Page.tsx +44 -6
- package/src/core/responsive/Responsive.tsx +66 -8
- package/src/core/section/Section.tsx +17 -3
- 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 +36 -6
- package/src/hooks/usePropToggle.ts +16 -5
- package/src/hooks/useResize.ts +19 -1
- package/src/hooks/useResizeObserver.ts +32 -9
- 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 +4 -0
- package/src/overlays/alert/Alert.tsx +28 -32
- package/src/overlays/flyout/Flyout.tsx +71 -84
- package/src/overlays/message/Message.tsx +10 -7
- package/src/overlays/modal/Modal.tsx +37 -15
- package/src/overlays/toast/Toast.tsx +18 -27
- package/src/overlays/tooltip/Tooltip.tsx +43 -18
- package/src/types/icons.ts +18 -3
- package/src/types/index.ts +268 -27
- package/src/typography/Abbr.tsx +44 -11
- package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
- package/src/typography/Copy.tsx +15 -0
- package/src/typography/Mark.tsx +24 -10
- package/src/typography/Text.tsx +31 -13
- package/src/typography/Title.tsx +18 -7
- package/src/typography/index.ts +1 -1
- package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
- package/src/utils/getColor.ts +1 -17
- package/src/utils/index.ts +1 -0
- package/css/index.js +0 -250
- package/css/tailwind/colors.ts +0 -158
- package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/cjs/components/animations/Animations.module.css +0 -1
- package/dist/cjs/components/avatar/Avatar.module.css +0 -1
- package/dist/cjs/components/badge/Badge.module.css +0 -1
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/cjs/components/button/Button.module.css +0 -1
- package/dist/cjs/components/card/Card.module.css +0 -1
- package/dist/cjs/components/chip/Chip.module.css +0 -1
- package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
- package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
- package/dist/cjs/components/icon/Icon.module.css +0 -1
- package/dist/cjs/components/media/Media.module.css +0 -1
- package/dist/cjs/components/menu/Menu.module.css +0 -1
- package/dist/cjs/components/meter/Meter.module.css +0 -1
- package/dist/cjs/components/panel/Panel.module.css +0 -1
- package/dist/cjs/components/progress/Progress.module.css +0 -1
- package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/cjs/core/aside/Aside.module.css +0 -1
- package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/cjs/core/content/Content.module.css +0 -1
- package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/cjs/core/page/Page.module.css +0 -1
- package/dist/cjs/core/responsive/Responsive.module.css +0 -1
- package/dist/cjs/core/section/Section.module.css +0 -1
- package/dist/cjs/core/theme/Theme.module.css +0 -1
- package/dist/cjs/core/viewport/Viewport.module.css +0 -1
- package/dist/cjs/overlays/alert/Alert.module.css +0 -1
- package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
- package/dist/cjs/overlays/message/Message.module.css +0 -1
- package/dist/cjs/overlays/modal/Modal.module.css +0 -1
- package/dist/cjs/overlays/toast/Toast.module.css +0 -1
- package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/cjs/typography/Typography.module.css +0 -1
- package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/esm/components/animations/Animations.module.css +0 -1
- package/dist/esm/components/avatar/Avatar.module.css +0 -1
- package/dist/esm/components/badge/Badge.module.css +0 -1
- package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/esm/components/button/Button.module.css +0 -1
- package/dist/esm/components/card/Card.module.css +0 -1
- package/dist/esm/components/chip/Chip.module.css +0 -1
- package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
- package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
- package/dist/esm/components/icon/Icon.module.css +0 -1
- package/dist/esm/components/media/Media.module.css +0 -1
- package/dist/esm/components/menu/Menu.module.css +0 -1
- package/dist/esm/components/meter/Meter.module.css +0 -1
- package/dist/esm/components/panel/Panel.module.css +0 -1
- package/dist/esm/components/progress/Progress.module.css +0 -1
- package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/esm/core/aside/Aside.module.css +0 -1
- package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/esm/core/content/Content.module.css +0 -1
- package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/esm/core/page/Page.module.css +0 -1
- package/dist/esm/core/responsive/Responsive.module.css +0 -1
- package/dist/esm/core/section/Section.module.css +0 -1
- package/dist/esm/core/theme/Theme.module.css +0 -1
- package/dist/esm/core/viewport/Viewport.module.css +0 -1
- package/dist/esm/overlays/alert/Alert.module.css +0 -1
- package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
- package/dist/esm/overlays/message/Message.module.css +0 -1
- package/dist/esm/overlays/modal/Modal.module.css +0 -1
- package/dist/esm/overlays/toast/Toast.module.css +0 -1
- package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/types/typography/Link.d.ts +0 -25
|
@@ -26,12 +26,12 @@ 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";
|
|
@@ -39,10 +39,10 @@ import { HotKey } from "../../hotkeys/HotKey";
|
|
|
39
39
|
import { HotKeyLabel } from "../../hotkeys/HotKeyLabel";
|
|
40
40
|
import { Tooltip } from "../../overlays/tooltip/Tooltip";
|
|
41
41
|
import {
|
|
42
|
+
type ColorState,
|
|
42
43
|
type AriaProps,
|
|
43
44
|
type BadgeType,
|
|
44
45
|
type CallbackReturn,
|
|
45
|
-
type ColorType,
|
|
46
46
|
type CssProp,
|
|
47
47
|
type IconProps,
|
|
48
48
|
type PolymorphicProps,
|
|
@@ -51,10 +51,10 @@ import {
|
|
|
51
51
|
type TestProps,
|
|
52
52
|
type TooltipType,
|
|
53
53
|
} from "../../types";
|
|
54
|
+
import { getColor } from "../../utils";
|
|
54
55
|
import { AnimationIndicator } from "../animations/Animations";
|
|
55
56
|
import { Badge, getBadgeProps } from "../badge/Badge";
|
|
56
57
|
import { Icon } from "../icon/Icon";
|
|
57
|
-
import classes from "./Button.module.css";
|
|
58
58
|
|
|
59
59
|
export interface BaseProps
|
|
60
60
|
extends CssProp,
|
|
@@ -77,7 +77,7 @@ export interface BaseProps
|
|
|
77
77
|
/**
|
|
78
78
|
* button color
|
|
79
79
|
*/
|
|
80
|
-
color?:
|
|
80
|
+
color?: ColorState;
|
|
81
81
|
/**
|
|
82
82
|
* button type
|
|
83
83
|
*/
|
|
@@ -85,7 +85,7 @@ export interface BaseProps
|
|
|
85
85
|
/**
|
|
86
86
|
* button styling
|
|
87
87
|
*/
|
|
88
|
-
variant?: "outline" | "solid" | "link";
|
|
88
|
+
variant?: "outline" | "soft" | "solid" | "link";
|
|
89
89
|
/**
|
|
90
90
|
* active state with click disabled
|
|
91
91
|
*/
|
|
@@ -147,12 +147,37 @@ export interface BaseProps
|
|
|
147
147
|
onWheel?: WheelEventHandler;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
type ButtonTypeProps =
|
|
151
151
|
| { children: string | React.ReactElement; "aria-label"?: string }
|
|
152
152
|
| { children?: never; "aria-label": string };
|
|
153
153
|
|
|
154
|
+
export type ButtonProps<Tag extends React.ElementType = "button"> = BaseProps &
|
|
155
|
+
ButtonTypeProps &
|
|
156
|
+
PolymorphicProps<Tag>;
|
|
157
|
+
|
|
154
158
|
/**
|
|
155
|
-
*
|
|
159
|
+
* A versatile button component that supports various styles, icons, and actions.
|
|
160
|
+
* It can be used as a primary action button, with options for loading states, action messages, and more.
|
|
161
|
+
* It supports polymorphic rendering, allowing it to be used as different HTML elements (e.g., button, a, div).
|
|
162
|
+
* It also includes features like after action tooltips, badges, and keyboard shortcuts.
|
|
163
|
+
*
|
|
164
|
+
* @param {ButtonProps} props - The properties for the Button component.
|
|
165
|
+
* @returns {JSX.Element} The rendered Button component.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```jsx
|
|
169
|
+
* <Button
|
|
170
|
+
* color="primary"
|
|
171
|
+
* size="md"
|
|
172
|
+
* variant="solid"
|
|
173
|
+
* icon="check"
|
|
174
|
+
* onClick={() => console.log("Button clicked!")}
|
|
175
|
+
* >
|
|
176
|
+
* Click Me
|
|
177
|
+
* </Button>
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
180
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-button--docs} for more details.
|
|
156
181
|
*/
|
|
157
182
|
export const Button = <Tag extends React.ElementType = "button">({
|
|
158
183
|
as,
|
|
@@ -186,11 +211,12 @@ 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);
|
|
@@ -230,7 +256,7 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
230
256
|
return {
|
|
231
257
|
content: actionMessage,
|
|
232
258
|
placement: "top",
|
|
233
|
-
color
|
|
259
|
+
color: `${color}-100`,
|
|
234
260
|
open: true,
|
|
235
261
|
} as TooltipType;
|
|
236
262
|
}
|
|
@@ -240,11 +266,15 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
240
266
|
return getBadgeProps(badge);
|
|
241
267
|
}, [badge]);
|
|
242
268
|
|
|
269
|
+
const hotKeyHandler = useRef(() => {
|
|
270
|
+
!disabled && refEl.current?.click();
|
|
271
|
+
});
|
|
272
|
+
|
|
243
273
|
const E = as ?? "button";
|
|
244
274
|
return (
|
|
245
275
|
<div
|
|
246
276
|
className={classNames(
|
|
247
|
-
|
|
277
|
+
"fabric-buttonWrapper",
|
|
248
278
|
className,
|
|
249
279
|
"relative align-text-top select-none focus-within:z-1",
|
|
250
280
|
fullWidth ? "block w-full" : "inline-block",
|
|
@@ -254,23 +284,18 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
254
284
|
data-loading={busy || loading}
|
|
255
285
|
data-disabled={disabled}
|
|
256
286
|
>
|
|
257
|
-
{hotKey &&
|
|
258
|
-
<HotKey
|
|
259
|
-
keyCombo={hotKey}
|
|
260
|
-
handler={() => !disabled && refEl.current?.click()}
|
|
261
|
-
/>
|
|
262
|
-
)}
|
|
287
|
+
{hotKey && <HotKey keyCombo={hotKey} handler={hotKeyHandler.current} />}
|
|
263
288
|
<TooltipWrapper {...tooltipProps}>
|
|
264
289
|
<E
|
|
265
290
|
ref={mergeRefs(ref, refEl)}
|
|
266
291
|
role="button"
|
|
267
292
|
className={classNames(
|
|
268
|
-
|
|
293
|
+
"fabric-button",
|
|
269
294
|
"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
295
|
`focus-visible:ring-2 focus-visible:ring-offset-2 buttonInner`,
|
|
271
296
|
fullWidth && "max-w-full w-full",
|
|
272
297
|
rounded && "rounded-full",
|
|
273
|
-
spinOnHover &&
|
|
298
|
+
spinOnHover && "fabric-spinOnHover",
|
|
274
299
|
)}
|
|
275
300
|
type={type}
|
|
276
301
|
disabled={disabled}
|
|
@@ -284,7 +309,7 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
284
309
|
>
|
|
285
310
|
{icon && (
|
|
286
311
|
<Icon
|
|
287
|
-
className={
|
|
312
|
+
className={"fabric-buttonIcon"}
|
|
288
313
|
icon={icon}
|
|
289
314
|
bg={iconBg}
|
|
290
315
|
color={iconColor}
|
|
@@ -293,11 +318,11 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
293
318
|
/>
|
|
294
319
|
)}
|
|
295
320
|
{isValidElement(children) && (
|
|
296
|
-
<div className={
|
|
321
|
+
<div className={"fabric-buttonChild"}>{children}</div>
|
|
297
322
|
)}
|
|
298
323
|
{isString(children) && (
|
|
299
324
|
<label
|
|
300
|
-
className={classNames(
|
|
325
|
+
className={classNames("fabric-buttonLabel", "truncate")}
|
|
301
326
|
data-colored-icon={!!iconBg}
|
|
302
327
|
>
|
|
303
328
|
{children}
|
|
@@ -306,7 +331,7 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
306
331
|
{!isNil(badge) && <Badge {...badgeProps} />}
|
|
307
332
|
{hotKey && <HotKeyLabel keyCombo={hotKey} />}
|
|
308
333
|
{altIcon && (
|
|
309
|
-
<Icon className={
|
|
334
|
+
<Icon className={"fabric-altIcon"} icon={altIcon} rtlFlip />
|
|
310
335
|
)}
|
|
311
336
|
</E>
|
|
312
337
|
</TooltipWrapper>
|
|
@@ -314,9 +339,11 @@ export const Button = <Tag extends React.ElementType = "button">({
|
|
|
314
339
|
<div
|
|
315
340
|
className={classNames(
|
|
316
341
|
"absolute inset-0 overflow-hidden flex justify-center items-center",
|
|
317
|
-
`bg-${color}-300`,
|
|
318
342
|
rounded ? "rounded-full" : "rounded",
|
|
319
343
|
)}
|
|
344
|
+
style={{
|
|
345
|
+
backgroundColor: getColor(`${color}-300`),
|
|
346
|
+
}}
|
|
320
347
|
>
|
|
321
348
|
<AnimationIndicator type="check" color={color} />
|
|
322
349
|
</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,
|
|
@@ -22,18 +22,19 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
|
-
FloatingArrow,
|
|
26
|
-
FloatingFocusManager,
|
|
27
|
-
FloatingPortal,
|
|
28
25
|
arrow,
|
|
29
26
|
autoUpdate,
|
|
30
27
|
flip,
|
|
28
|
+
FloatingArrow,
|
|
29
|
+
FloatingFocusManager,
|
|
30
|
+
FloatingPortal,
|
|
31
31
|
offset,
|
|
32
32
|
shift,
|
|
33
33
|
useClick,
|
|
34
34
|
useDismiss,
|
|
35
35
|
useFloating,
|
|
36
36
|
useInteractions,
|
|
37
|
+
type Placement,
|
|
37
38
|
} from "@floating-ui/react";
|
|
38
39
|
import { mergeRefs } from "@react-fabric/utilities";
|
|
39
40
|
import classNames from "classnames";
|
|
@@ -66,6 +67,10 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
|
|
|
66
67
|
* ok label
|
|
67
68
|
*/
|
|
68
69
|
cancelLabel?: string;
|
|
70
|
+
/**
|
|
71
|
+
* dropdown placement
|
|
72
|
+
*/
|
|
73
|
+
placement?: Placement;
|
|
69
74
|
/**
|
|
70
75
|
* click handler, return Promise to autoset loading state
|
|
71
76
|
*/
|
|
@@ -75,7 +80,28 @@ interface ExtendedProps extends Omit<BaseProps, "onClick">, RefProp {
|
|
|
75
80
|
export type ConfirmButtonProps = ExtendedProps & ButtonProps;
|
|
76
81
|
|
|
77
82
|
/**
|
|
78
|
-
*
|
|
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.
|
|
79
105
|
*/
|
|
80
106
|
export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
81
107
|
ref,
|
|
@@ -85,6 +111,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
85
111
|
cancelLabel,
|
|
86
112
|
onClick,
|
|
87
113
|
loading,
|
|
114
|
+
placement = "bottom",
|
|
88
115
|
actionMessage,
|
|
89
116
|
showActionDone,
|
|
90
117
|
showActionDoneEvent = "click",
|
|
@@ -127,7 +154,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
127
154
|
}
|
|
128
155
|
},
|
|
129
156
|
strategy: "fixed",
|
|
130
|
-
placement
|
|
157
|
+
placement,
|
|
131
158
|
whileElementsMounted: autoUpdate,
|
|
132
159
|
middleware: [
|
|
133
160
|
shift({ padding: 8 }),
|
|
@@ -181,15 +208,21 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
181
208
|
"select-none not-italic rounded-capped shadow-lg outline outline-muted bg-base",
|
|
182
209
|
)}
|
|
183
210
|
ref={refs.setFloating}
|
|
184
|
-
style={
|
|
211
|
+
style={{
|
|
212
|
+
zIndex: "var(--z-popover)",
|
|
213
|
+
...floatingStyles,
|
|
214
|
+
}}
|
|
185
215
|
{...getFloatingProps()}
|
|
186
216
|
>
|
|
187
217
|
<div className="font-medium ">
|
|
188
|
-
<p className="py-2 px-4">
|
|
218
|
+
<p className="py-2 px-4" data-ref="confirmMessage">
|
|
219
|
+
{message}
|
|
220
|
+
</p>
|
|
189
221
|
<div className="flex justify-end py-2 px-4 gap-2">
|
|
190
222
|
<Button
|
|
191
223
|
size="sm"
|
|
192
224
|
variant="link"
|
|
225
|
+
data-ref="confirmCancel"
|
|
193
226
|
color={color}
|
|
194
227
|
onClick={() => [clickHandler(false), setIsOpen(false)]}
|
|
195
228
|
>
|
|
@@ -200,6 +233,7 @@ export const ConfirmButton = <Tag extends React.ElementType = "button">({
|
|
|
200
233
|
variant="solid"
|
|
201
234
|
color={color}
|
|
202
235
|
autoFocus
|
|
236
|
+
data-ref="confirmOk"
|
|
203
237
|
onClick={() => [clickHandler(true), setIsOpen(false)]}
|
|
204
238
|
>
|
|
205
239
|
{okLabel ?? t("action.ok")}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
import { EMPTY_ARRAY, isArray } from "@react-fabric/utilities";
|
|
25
25
|
import classNames from "classnames";
|
|
26
|
-
import {
|
|
26
|
+
import { cloneElement, useCallback } from "react";
|
|
27
27
|
import { useControlledValue } from "../../hooks/useControlledValue";
|
|
28
28
|
import {
|
|
29
29
|
type AriaProps,
|
|
@@ -32,13 +32,10 @@ import {
|
|
|
32
32
|
type CssProp,
|
|
33
33
|
type SizeType,
|
|
34
34
|
} from "../../types";
|
|
35
|
+
import { cloneChildren } from "../../utils";
|
|
35
36
|
import { type ButtonProps } from "./Button";
|
|
36
|
-
import classes from "./Button.module.css";
|
|
37
37
|
|
|
38
|
-
interface BaseProps
|
|
39
|
-
extends CssProp,
|
|
40
|
-
AriaProps,
|
|
41
|
-
ChildrenProp<React.ReactElement<ButtonProps & { value: string }>> {
|
|
38
|
+
interface BaseProps extends CssProp, AriaProps {
|
|
42
39
|
/**
|
|
43
40
|
* vertical orientation
|
|
44
41
|
*/
|
|
@@ -69,31 +66,61 @@ interface BaseProps
|
|
|
69
66
|
fullWidth?: boolean;
|
|
70
67
|
}
|
|
71
68
|
|
|
72
|
-
export type
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
69
|
+
export type ToggleButtonGroupValueProps<T> =
|
|
70
|
+
| {
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
*/
|
|
74
|
+
value: T;
|
|
75
|
+
/**
|
|
76
|
+
* change handler
|
|
77
|
+
*/
|
|
78
|
+
onChange?: (value: T | null) => void;
|
|
79
|
+
}
|
|
80
|
+
| {
|
|
81
|
+
/**
|
|
82
|
+
*
|
|
83
|
+
*/
|
|
84
|
+
value: T[];
|
|
85
|
+
/**
|
|
86
|
+
* change handler
|
|
87
|
+
*/
|
|
88
|
+
onChange?: (value: T[] | null) => void;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export type ToggleButtonGroupProps<T> = BaseProps &
|
|
92
|
+
ChildrenProp<React.ReactElement<ButtonProps & { value: T }>> &
|
|
93
|
+
ToggleButtonGroupValueProps<T>;
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
/**
|
|
96
|
+
* A component that groups toggle buttons together, allowing for consistent styling and behavior across multiple toggle buttons.
|
|
97
|
+
* It supports vertical orientation, various button styles, and can handle properties like size, color, and disabled state.
|
|
98
|
+
* This component is useful for creating toggle button groups that maintain a uniform appearance and functionality,
|
|
99
|
+
* such as toggle switches, selection groups, or multi-select options.
|
|
100
|
+
*
|
|
101
|
+
* @param {ToggleButtonGroupProps} props - The properties for the ToggleButtonGroup component.
|
|
102
|
+
* @returns {JSX.Element} The rendered ToggleButtonGroup component.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```jsx
|
|
106
|
+
* <ToggleButtonGroup
|
|
107
|
+
* value={selectedValues}
|
|
108
|
+
* onChange={(newValues) => setSelectedValues(newValues)}
|
|
109
|
+
* variant="outline"
|
|
110
|
+
* color="primary"
|
|
111
|
+
* size="md"
|
|
112
|
+
* rounded
|
|
113
|
+
* fullWidth
|
|
114
|
+
* >
|
|
115
|
+
* <Button value="option1">Option 1</Button>
|
|
116
|
+
* <Button value="option2">Option 2</Button>
|
|
117
|
+
* <Button value="option3">Option 3</Button>
|
|
118
|
+
* </ToggleButtonGroup>
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-togglebuttongroup--docs} for more details.
|
|
122
|
+
*/
|
|
123
|
+
export const ToggleButtonGroup = <T extends AnyObject = string>({
|
|
97
124
|
vertical,
|
|
98
125
|
className,
|
|
99
126
|
children,
|
|
@@ -106,23 +133,24 @@ export const ToggleButtonGroup = ({
|
|
|
106
133
|
value,
|
|
107
134
|
onChange,
|
|
108
135
|
...aria
|
|
109
|
-
}: ToggleButtonGroupProps) => {
|
|
110
|
-
const
|
|
111
|
-
const { currentValue, updateValue } = useControlledValue<typeof value>(
|
|
136
|
+
}: ToggleButtonGroupProps<T>) => {
|
|
137
|
+
const { currentValue, updateValue } = useControlledValue(
|
|
112
138
|
value,
|
|
113
|
-
isArray(value) ? EMPTY_ARRAY :
|
|
139
|
+
isArray(value) ? EMPTY_ARRAY : null,
|
|
114
140
|
);
|
|
115
141
|
|
|
116
142
|
const clickHandler = useCallback(
|
|
117
|
-
(cb: AnyObject) => (e: React.MouseEvent<HTMLElement>) => {
|
|
118
|
-
let newValue
|
|
143
|
+
(cb: AnyObject, childValue: T) => (e: React.MouseEvent<HTMLElement>) => {
|
|
144
|
+
let newValue;
|
|
119
145
|
if (isArray(currentValue)) {
|
|
120
|
-
if (currentValue.includes(
|
|
121
|
-
newValue = currentValue.filter((v) => v !==
|
|
122
|
-
else newValue = [...currentValue,
|
|
146
|
+
if (currentValue.includes(childValue))
|
|
147
|
+
newValue = currentValue.filter((v) => v !== childValue);
|
|
148
|
+
else newValue = [...currentValue, childValue];
|
|
149
|
+
} else {
|
|
150
|
+
newValue = childValue;
|
|
123
151
|
}
|
|
124
152
|
updateValue(newValue);
|
|
125
|
-
onChange?.(newValue);
|
|
153
|
+
onChange?.(newValue as AnyObject);
|
|
126
154
|
cb?.(e);
|
|
127
155
|
},
|
|
128
156
|
[currentValue, onChange],
|
|
@@ -131,16 +159,16 @@ export const ToggleButtonGroup = ({
|
|
|
131
159
|
return (
|
|
132
160
|
<div
|
|
133
161
|
className={classNames(
|
|
134
|
-
|
|
162
|
+
"fabric-buttonGroup",
|
|
135
163
|
className,
|
|
136
164
|
fullWidth ? "flex" : "inline-flex",
|
|
137
165
|
"flex-nowrap align-middle",
|
|
138
|
-
vertical &&
|
|
166
|
+
vertical && "vertical",
|
|
139
167
|
vertical && "flex-col",
|
|
140
168
|
)}
|
|
141
169
|
{...aria}
|
|
142
170
|
>
|
|
143
|
-
{
|
|
171
|
+
{cloneChildren(children, (child: AnyObject) =>
|
|
144
172
|
cloneElement(child, {
|
|
145
173
|
color,
|
|
146
174
|
size,
|
|
@@ -149,10 +177,9 @@ export const ToggleButtonGroup = ({
|
|
|
149
177
|
rounded,
|
|
150
178
|
fullWidth,
|
|
151
179
|
...child.props,
|
|
152
|
-
onClick: clickHandler(child.props.onClick),
|
|
153
|
-
"data-
|
|
154
|
-
|
|
155
|
-
? currentValue.includes(child.props.value)
|
|
180
|
+
onClick: clickHandler(child.props.onClick, child.props.value),
|
|
181
|
+
"data-checked": isArray(currentValue)
|
|
182
|
+
? currentValue?.includes(child.props.value)
|
|
156
183
|
: currentValue === child.props.value,
|
|
157
184
|
}),
|
|
158
185
|
)}
|
|
@@ -25,13 +25,11 @@ import classNames from "classnames";
|
|
|
25
25
|
import {
|
|
26
26
|
type AriaProps,
|
|
27
27
|
type ChildrenProp,
|
|
28
|
-
type
|
|
28
|
+
type ColorState,
|
|
29
29
|
type CssProp,
|
|
30
|
-
type PaletteType,
|
|
31
30
|
type TestProps,
|
|
32
31
|
} from "../../types";
|
|
33
32
|
import { CoreIcons } from "../../types/icons";
|
|
34
|
-
import { getBgClass, getBorderClass, getColorClass } from "../../utils";
|
|
35
33
|
import { Icon } from "../icon/Icon";
|
|
36
34
|
|
|
37
35
|
export interface CalloutProps
|
|
@@ -42,11 +40,11 @@ export interface CalloutProps
|
|
|
42
40
|
/**
|
|
43
41
|
* callout color
|
|
44
42
|
*/
|
|
45
|
-
color?:
|
|
43
|
+
color?: ColorState | "none";
|
|
46
44
|
/**
|
|
47
45
|
* legend title
|
|
48
46
|
*/
|
|
49
|
-
legend?: string;
|
|
47
|
+
legend?: string | React.ReactElement;
|
|
50
48
|
/**
|
|
51
49
|
* callout icon
|
|
52
50
|
*/
|
|
@@ -65,6 +63,44 @@ export interface CalloutProps
|
|
|
65
63
|
onClose?: () => void;
|
|
66
64
|
}
|
|
67
65
|
|
|
66
|
+
// colors for different callout types
|
|
67
|
+
const colors = {
|
|
68
|
+
none: "bg-base text-tint-900 border-tint-100",
|
|
69
|
+
tint: "bg-tint-50/50 text-tint-800 border-tint-300",
|
|
70
|
+
primary: "bg-primary-50/50 text-primary-800 border-primary-300",
|
|
71
|
+
accent: "bg-accent-50/50 text-accent-800 border-accent-300",
|
|
72
|
+
info: "bg-info-50/50 text-info-800 border-info-300",
|
|
73
|
+
danger: "bg-danger-50/50 text-danger-800 border-danger-300",
|
|
74
|
+
success: "bg-success-50/50 text-success-800 border-success-300",
|
|
75
|
+
warning: "bg-warning-50/50 text-warning-800 border-warning-300",
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* A component that displays a callout box with an optional title, icon, and legend.
|
|
80
|
+
* It can be used to highlight important information, warnings, or notices.
|
|
81
|
+
* The callout can be styled with different colors and border styles, and it supports a close action.
|
|
82
|
+
* This component is useful for drawing attention to specific content within a page or application,
|
|
83
|
+
* such as alerts, notifications, or important messages.
|
|
84
|
+
*
|
|
85
|
+
* @param {CalloutProps} props - The properties for the Callout component.
|
|
86
|
+
* @returns {JSX.Element} The rendered Callout component.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```jsx
|
|
90
|
+
* <Callout
|
|
91
|
+
* color="primary"
|
|
92
|
+
* legend="Important Notice"
|
|
93
|
+
* title="Attention Required"
|
|
94
|
+
* icon="info"
|
|
95
|
+
* onClose={() => console.log("Callout closed")}
|
|
96
|
+
* >
|
|
97
|
+
* This is an important message that requires your attention.
|
|
98
|
+
* </Callout>
|
|
99
|
+
* // Renders a callout box with a primary color, an icon, a title, and a close button.
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/story/core-components-callout--docs} for more details.
|
|
103
|
+
*/
|
|
68
104
|
export const Callout = ({
|
|
69
105
|
children,
|
|
70
106
|
// @ts-expect-error ignore
|
|
@@ -80,27 +116,34 @@ export const Callout = ({
|
|
|
80
116
|
return (
|
|
81
117
|
<fieldset
|
|
82
118
|
className={classNames(
|
|
83
|
-
className,
|
|
84
119
|
"block rounded-capped border max-w-full relative overflow-hidden mb-4",
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
getBorderClass(color + "-300"),
|
|
120
|
+
colors[color],
|
|
121
|
+
className,
|
|
88
122
|
border === "dashed" && "border-dashed",
|
|
89
123
|
border === "dotted" && "border-dotted",
|
|
90
124
|
)}
|
|
91
125
|
{...aria}
|
|
92
126
|
>
|
|
93
|
-
{legend &&
|
|
127
|
+
{legend && (
|
|
128
|
+
<legend className="px-2 mx-4 font-medium" data-ref="calloutLegend">
|
|
129
|
+
{legend}
|
|
130
|
+
</legend>
|
|
131
|
+
)}
|
|
94
132
|
<div className={classNames("break-words whitespace-break-spaces p-2")}>
|
|
95
133
|
<div className="flex flex-nowrap items-center text-xl pe-4 gap-2 mb-4 empty:mb-0">
|
|
96
|
-
{icon && <Icon icon={icon} />}
|
|
97
|
-
{title &&
|
|
134
|
+
{icon && <Icon icon={icon} data-ref="calloutIcon" />}
|
|
135
|
+
{title && (
|
|
136
|
+
<p className="flex-1" data-ref="calloutTitle">
|
|
137
|
+
{title}
|
|
138
|
+
</p>
|
|
139
|
+
)}
|
|
98
140
|
</div>
|
|
99
141
|
<div className="pe-4">{children}</div>
|
|
100
142
|
</div>
|
|
101
143
|
{onClose && (
|
|
102
144
|
<Icon
|
|
103
145
|
size="md"
|
|
146
|
+
data-ref="calloutClose"
|
|
104
147
|
className={classNames("absolute end-2", legend ? "top-0" : "top-2")}
|
|
105
148
|
icon={CoreIcons.close}
|
|
106
149
|
onClick={onClose}
|