@react-fabric/core 1.0.0-beta.6 → 1.0.0-beta.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{src/components/actionLabel/ActionLabel.module.css → css/components/_actionLabel.css} +4 -4
- package/{src/overlays/alert/Alert.module.css → css/components/_alert.css} +3 -3
- package/{src/components/animations/Animations.module.css → css/components/_animations.css} +9 -9
- package/{src/components/avatar/Avatar.module.css → css/components/_avatar.css} +11 -11
- package/{src/components/badge/Badge.module.css → css/components/_badge.css} +19 -17
- package/{src/components/breadcrumbs/Breadcrumbs.module.css → css/components/_breadcrumbs.css} +52 -47
- package/{src/components/button/Button.module.css → css/components/_button.css} +77 -83
- package/{src/components/card/Card.module.css → css/components/_card.css} +54 -28
- package/{src/components/chip/Chip.module.css → css/components/_chip.css} +14 -10
- package/{src/components/collapsable/Collapsable.module.css → css/components/_collapsable.css} +3 -3
- package/css/components/_divider.css +38 -0
- package/{src/components/dropdown/Dropdown.module.css → css/components/_dropdown.css} +2 -2
- package/{src/overlays/flyout/Flyout.module.css → css/components/_flyout.css} +6 -6
- package/{src/components/icon/Icon.module.css → css/components/_icon.css} +11 -8
- package/{src/components/media/Media.module.css → css/components/_media.css} +17 -17
- package/{src/components/menu/Menu.module.css → css/components/_menu.css} +21 -20
- package/{src/overlays/message/Message.module.css → css/components/_message.css} +2 -2
- package/{src/components/meter/Meter.module.css → css/components/_meter.css} +10 -10
- package/{src/overlays/modal/Modal.module.css → css/components/_modal.css} +8 -8
- package/{src/components/panel/Panel.module.css → css/components/_panel.css} +17 -17
- package/{src/components/progress/Progress.module.css → css/components/_progress.css} +7 -10
- package/css/components/_stepper.css +86 -0
- package/{src/components/tabpanel/TabPanel.module.css → css/components/_tabPanel.css} +130 -85
- package/{src/overlays/toast/Toast.module.css → css/components/_toast.css} +2 -2
- package/css/components/_tooltip.css +29 -0
- package/{src/core/content/Content.module.css → css/components/index.css} +26 -18
- package/{src/core/aside/Aside.module.css → css/core/_aside.css} +60 -48
- package/{src/core/section/Section.module.css → css/core/_content.css} +5 -3
- package/{src/core/boundary/ErrorBoundary.module.css → css/core/_errorboundary.css} +9 -9
- package/{src/core/headfoot/HeadFoot.module.css → css/core/_headfoot.css} +4 -10
- package/{src/core/page/Page.module.css → css/core/_page.css} +10 -14
- package/{src/core/responsive/Responsive.module.css → css/core/_responsive.css} +10 -10
- package/css/core/_section.css +28 -0
- package/{src/core/theme/Theme.module.css → css/core/_theme.css} +3 -3
- package/{src/typography/Typography.module.css → css/core/_typography.css} +14 -12
- package/{src/core/viewport/Viewport.module.css → css/core/_viewport.css} +7 -3
- package/css/core/index.css +33 -0
- package/css/reset/_gradients.css +8 -8
- package/css/reset/_reset.css +56 -224
- package/css/reset/_text.css +14 -29
- package/css/reset/_theme.css +331 -52
- package/css/reset/index.css +4 -4
- package/css/styles.css +7 -6
- package/css/theme/_colors.css +320 -0
- package/css/theme/_utilities.css +541 -0
- package/css/theme/index.css +45 -0
- package/dist/cjs/components/actionLabel/ActionLabel.js +26 -8
- package/dist/cjs/components/animations/Animations.js +110 -23
- package/dist/cjs/components/avatar/Avatar.js +46 -13
- package/dist/cjs/components/avatar/AvatarGroup.js +22 -4
- package/dist/cjs/components/badge/Badge.js +36 -15
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.js +40 -9
- package/dist/cjs/components/button/Button.js +50 -28
- package/dist/cjs/components/button/ButtonGroup.js +30 -3
- package/dist/cjs/components/button/ConfirmButton.js +28 -2
- package/dist/cjs/components/button/ToggleButtonGroup.js +41 -15
- package/dist/cjs/components/callout/Callout.js +44 -4
- package/dist/cjs/components/card/Card.js +60 -18
- package/dist/cjs/components/card/CardCover.js +36 -5
- package/dist/cjs/components/card/FlipContent.js +56 -0
- package/dist/cjs/components/chip/Chip.js +40 -20
- package/dist/cjs/components/collapsable/Collapsable.js +30 -5
- package/dist/cjs/components/divider/Divider.js +30 -7
- package/dist/cjs/components/dropdown/Dropdown.js +48 -9
- package/dist/cjs/components/dropdown/DropdownTool.js +1 -1
- package/dist/cjs/components/empty/EmptyContent.js +37 -7
- package/dist/cjs/components/icon/Icon.js +76 -13
- package/dist/cjs/components/media/Media.js +172 -75
- package/dist/cjs/components/menu/ContextMenu.js +19 -0
- package/dist/cjs/components/menu/Menu.js +76 -21
- package/dist/cjs/components/menu/MenuItem.js +54 -26
- package/dist/cjs/components/meter/Meter.js +26 -3
- package/dist/cjs/components/navigator/Navigator.js +48 -15
- package/dist/cjs/components/panel/Panel.js +53 -22
- package/dist/cjs/components/panel/PanelGroup.js +25 -2
- package/dist/cjs/components/panel/PanelStack.js +31 -2
- package/dist/cjs/components/progress/ProgressBar.js +31 -9
- package/dist/cjs/components/progress/ProgressCircle.js +29 -7
- package/dist/cjs/components/tabpanel/Tab.js +39 -15
- package/dist/cjs/components/tabpanel/TabPanel.js +56 -16
- package/dist/cjs/context/Global.js +28 -1
- package/dist/cjs/context/NotificationCenter.js +3 -3
- package/dist/cjs/core/aside/Aside.js +48 -22
- package/dist/cjs/core/boundary/ErrorBoundary.js +25 -8
- package/dist/cjs/core/boundary/ErrorIcon.js +1 -2
- package/dist/cjs/core/content/Content.js +7 -3
- package/dist/cjs/core/headfoot/HeadFoot.js +48 -22
- package/dist/cjs/core/page/Page.js +40 -39
- package/dist/cjs/core/responsive/Responsive.js +59 -6
- package/dist/cjs/core/section/Section.js +12 -29
- package/dist/cjs/core/theme/ThemeProvider.js +32 -10
- package/dist/cjs/core/viewport/Viewport.js +18 -2
- package/dist/cjs/hooks/useControlledValue.js +12 -0
- package/dist/cjs/hooks/useDebounce.js +14 -1
- package/dist/cjs/hooks/useEffectDebugger.js +54 -2
- package/dist/cjs/hooks/useIsDark.js +8 -0
- package/dist/cjs/hooks/useIsRtl.js +12 -0
- package/dist/cjs/hooks/useNavigator.js +6 -4
- package/dist/cjs/hooks/useOverlayService.js +24 -0
- package/dist/cjs/hooks/usePropToggle.js +16 -5
- package/dist/cjs/hooks/useResize.js +18 -0
- package/dist/cjs/hooks/useResizeObserver.js +20 -1
- package/dist/cjs/hooks/useStepper.js +75 -0
- package/dist/cjs/hooks/useStorage.js +39 -0
- package/dist/cjs/hotkeys/HotKeyLabel.js +1 -1
- package/dist/cjs/hotkeys/HotKeyWrapper.js +3 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/overlays/alert/Alert.js +23 -15
- package/dist/cjs/overlays/flyout/Flyout.js +48 -64
- package/dist/cjs/overlays/message/Message.js +8 -3
- package/dist/cjs/overlays/modal/Modal.js +17 -20
- package/dist/cjs/overlays/toast/Toast.js +20 -10
- package/dist/cjs/overlays/tooltip/Tooltip.js +24 -11
- package/dist/cjs/types/icons.js +17 -4
- package/dist/cjs/typography/Abbr.js +35 -7
- package/dist/cjs/typography/{Link.js → Anchor.js} +23 -5
- package/dist/cjs/typography/Mark.js +25 -5
- package/dist/cjs/typography/Text.js +30 -5
- package/dist/cjs/typography/Title.js +19 -4
- package/dist/cjs/utils/cloneElement.js +47 -0
- package/dist/cjs/utils/getColor.js +1 -18
- package/dist/esm/components/actionLabel/ActionLabel.js +26 -8
- package/dist/esm/components/animations/Animations.js +111 -24
- package/dist/esm/components/avatar/Avatar.js +46 -13
- package/dist/esm/components/avatar/AvatarGroup.js +22 -4
- package/dist/esm/components/badge/Badge.js +38 -17
- package/dist/esm/components/breadcrumbs/Breadcrumbs.js +40 -9
- package/dist/esm/components/button/Button.js +52 -30
- package/dist/esm/components/button/ButtonGroup.js +31 -4
- package/dist/esm/components/button/ConfirmButton.js +28 -2
- package/dist/esm/components/button/ToggleButtonGroup.js +42 -16
- package/dist/esm/components/callout/Callout.js +44 -4
- package/dist/esm/components/card/Card.js +61 -19
- package/dist/esm/components/card/CardCover.js +36 -5
- package/dist/esm/components/card/FlipContent.js +56 -0
- package/dist/esm/components/chip/Chip.js +42 -22
- package/dist/esm/components/collapsable/Collapsable.js +30 -5
- package/dist/esm/components/divider/Divider.js +31 -8
- package/dist/esm/components/dropdown/Dropdown.js +48 -9
- package/dist/esm/components/dropdown/DropdownTool.js +1 -1
- package/dist/esm/components/empty/EmptyContent.js +37 -7
- package/dist/esm/components/icon/Icon.js +78 -16
- package/dist/esm/components/media/Media.js +173 -76
- package/dist/esm/components/menu/ContextMenu.js +19 -0
- package/dist/esm/components/menu/Menu.js +78 -23
- package/dist/esm/components/menu/MenuItem.js +49 -21
- package/dist/esm/components/meter/Meter.js +26 -3
- package/dist/esm/components/navigator/Navigator.js +48 -15
- package/dist/esm/components/panel/Panel.js +54 -23
- package/dist/esm/components/panel/PanelGroup.js +25 -2
- package/dist/esm/components/panel/PanelStack.js +31 -2
- package/dist/esm/components/progress/ProgressBar.js +31 -9
- package/dist/esm/components/progress/ProgressCircle.js +29 -7
- package/dist/esm/components/tabpanel/Tab.js +40 -16
- package/dist/esm/components/tabpanel/TabPanel.js +56 -16
- package/dist/esm/context/Global.js +28 -1
- package/dist/esm/context/NotificationCenter.js +3 -3
- package/dist/esm/core/aside/Aside.js +49 -23
- package/dist/esm/core/boundary/ErrorBoundary.js +25 -8
- package/dist/esm/core/boundary/ErrorIcon.js +1 -2
- package/dist/esm/core/content/Content.js +7 -3
- package/dist/esm/core/headfoot/HeadFoot.js +48 -22
- package/dist/esm/core/page/Page.js +41 -40
- package/dist/esm/core/responsive/Responsive.js +59 -6
- package/dist/esm/core/section/Section.js +12 -29
- package/dist/esm/core/theme/ThemeProvider.js +32 -10
- package/dist/esm/core/viewport/Viewport.js +18 -2
- package/dist/esm/hooks/useControlledValue.js +12 -0
- package/dist/esm/hooks/useDebounce.js +14 -1
- package/dist/esm/hooks/useEffectDebugger.js +54 -2
- package/dist/esm/hooks/useIsDark.js +8 -0
- package/dist/esm/hooks/useIsRtl.js +12 -0
- package/dist/esm/hooks/useNavigator.js +7 -5
- package/dist/esm/hooks/useOverlayService.js +24 -0
- package/dist/esm/hooks/usePropToggle.js +16 -5
- package/dist/esm/hooks/useResize.js +18 -0
- package/dist/esm/hooks/useResizeObserver.js +20 -1
- package/dist/esm/hooks/useStepper.js +75 -0
- package/dist/esm/hooks/useStorage.js +39 -0
- package/dist/esm/hotkeys/HotKeyLabel.js +1 -1
- package/dist/esm/hotkeys/HotKeyWrapper.js +3 -1
- package/dist/esm/index.js +6 -2
- package/dist/esm/overlays/alert/Alert.js +24 -16
- package/dist/esm/overlays/flyout/Flyout.js +52 -68
- package/dist/esm/overlays/message/Message.js +9 -4
- package/dist/esm/overlays/modal/Modal.js +19 -22
- package/dist/esm/overlays/toast/Toast.js +21 -11
- package/dist/esm/overlays/tooltip/Tooltip.js +24 -11
- package/dist/esm/types/icons.js +17 -4
- package/dist/esm/typography/Abbr.js +35 -7
- package/dist/esm/typography/{Link.js → Anchor.js} +24 -6
- package/dist/esm/typography/Mark.js +25 -5
- package/dist/esm/typography/Text.js +31 -6
- package/dist/esm/typography/Title.js +20 -5
- package/dist/esm/utils/cloneElement.js +47 -0
- package/dist/esm/utils/getColor.js +2 -16
- package/dist/types/components/actionLabel/ActionLabel.d.ts +21 -2
- package/dist/types/components/animations/Animations.d.ts +84 -5
- package/dist/types/components/avatar/Avatar.d.ts +34 -6
- package/dist/types/components/avatar/AvatarGroup.d.ts +19 -1
- package/dist/types/components/badge/Badge.d.ts +37 -3
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +31 -2
- package/dist/types/components/button/Button.d.ts +39 -7
- package/dist/types/components/button/ButtonGroup.d.ts +28 -3
- package/dist/types/components/button/ConfirmButton.d.ts +23 -3
- package/dist/types/components/button/ToggleButtonGroup.d.ts +39 -11
- package/dist/types/components/callout/Callout.d.ts +29 -3
- package/dist/types/components/card/Card.d.ts +44 -4
- package/dist/types/components/card/CardCover.d.ts +25 -0
- package/dist/types/components/card/FlipContent.d.ts +28 -0
- package/dist/types/components/chip/Chip.d.ts +34 -5
- package/dist/types/components/collapsable/Collapsable.d.ts +28 -2
- package/dist/types/components/divider/Divider.d.ts +30 -7
- package/dist/types/components/dropdown/Dropdown.d.ts +40 -1
- package/dist/types/components/dropdown/DropdownTool.d.ts +25 -0
- package/dist/types/components/empty/EmptyContent.d.ts +32 -3
- package/dist/types/components/icon/Icon.d.ts +40 -8
- package/dist/types/components/index.d.ts +3 -2
- package/dist/types/components/media/Media.d.ts +54 -0
- package/dist/types/components/menu/ContextMenu.d.ts +19 -1
- package/dist/types/components/menu/Menu.d.ts +29 -0
- package/dist/types/components/menu/MenuItem.d.ts +22 -2
- package/dist/types/components/menu/types.d.ts +9 -3
- package/dist/types/components/meter/Meter.d.ts +24 -0
- package/dist/types/components/navigator/Navigator.d.ts +29 -4
- package/dist/types/components/panel/Panel.d.ts +43 -4
- package/dist/types/components/panel/PanelGroup.d.ts +24 -0
- package/dist/types/components/panel/PanelStack.d.ts +31 -0
- package/dist/types/components/progress/ProgressBar.d.ts +23 -3
- package/dist/types/components/progress/ProgressCircle.d.ts +22 -3
- package/dist/types/components/tabpanel/Tab.d.ts +38 -4
- package/dist/types/components/tabpanel/TabPanel.d.ts +51 -2
- package/dist/types/context/Global.d.ts +24 -1
- package/dist/types/core/aside/Aside.d.ts +45 -6
- package/dist/types/core/boundary/ErrorBoundary.d.ts +18 -2
- package/dist/types/core/content/Content.d.ts +6 -1
- package/dist/types/core/headfoot/HeadFoot.d.ts +41 -9
- package/dist/types/core/page/Page.d.ts +32 -4
- package/dist/types/core/responsive/Responsive.d.ts +58 -3
- package/dist/types/core/section/Section.d.ts +18 -3
- package/dist/types/core/theme/ThemeProvider.d.ts +25 -5
- package/dist/types/core/viewport/Viewport.d.ts +15 -1
- package/dist/types/hooks/useControlledValue.d.ts +13 -2
- package/dist/types/hooks/useDebounce.d.ts +12 -0
- package/dist/types/hooks/useEffectDebugger.d.ts +49 -0
- package/dist/types/hooks/useIsDark.d.ts +8 -0
- package/dist/types/hooks/useIsRtl.d.ts +12 -0
- package/dist/types/hooks/useNavigator.d.ts +18 -1
- package/dist/types/hooks/useOverlayService.d.ts +28 -9
- package/dist/types/hooks/usePropToggle.d.ts +16 -5
- package/dist/types/hooks/useResize.d.ts +19 -1
- package/dist/types/hooks/useResizeObserver.d.ts +20 -1
- package/dist/types/hooks/useStepper.d.ts +14 -0
- package/dist/types/hooks/useStorage.d.ts +38 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/overlays/alert/Alert.d.ts +16 -5
- package/dist/types/overlays/flyout/Flyout.d.ts +9 -4
- package/dist/types/overlays/message/Message.d.ts +16 -5
- package/dist/types/overlays/modal/Modal.d.ts +13 -4
- package/dist/types/overlays/toast/Toast.d.ts +16 -5
- package/dist/types/overlays/tooltip/Tooltip.d.ts +2 -2
- package/dist/types/types/icons.d.ts +17 -3
- package/dist/types/types/index.d.ts +20 -22
- package/dist/types/typography/Abbr.d.ts +34 -4
- package/dist/types/typography/Anchor.d.ts +42 -0
- package/dist/types/typography/Copy.d.ts +15 -0
- package/dist/types/typography/Mark.d.ts +22 -4
- package/dist/types/typography/Text.d.ts +27 -1
- package/dist/types/typography/Title.d.ts +16 -1
- package/dist/types/typography/index.d.ts +1 -1
- package/dist/types/utils/cloneElement.d.ts +1 -0
- package/dist/types/utils/getColor.d.ts +1 -4
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +14 -16
- package/src/components/actionLabel/ActionLabel.tsx +26 -8
- package/src/components/animations/Animations.tsx +115 -36
- package/src/components/avatar/Avatar.tsx +51 -15
- package/src/components/avatar/AvatarGroup.tsx +23 -5
- package/src/components/badge/Badge.tsx +50 -22
- package/src/components/breadcrumbs/Breadcrumbs.tsx +43 -10
- package/src/components/button/Button.tsx +74 -42
- package/src/components/button/ButtonGroup.tsx +33 -7
- package/src/components/button/ConfirmButton.tsx +31 -3
- package/src/components/button/ToggleButtonGroup.tsx +74 -47
- package/src/components/callout/Callout.tsx +55 -12
- package/src/components/card/Card.tsx +84 -25
- package/src/components/card/CardCover.tsx +36 -6
- package/src/components/card/FlipContent.tsx +90 -0
- package/src/components/chip/Chip.tsx +53 -25
- package/src/components/collapsable/Collapsable.tsx +33 -8
- package/src/components/divider/Divider.tsx +42 -16
- package/src/components/dropdown/Dropdown.tsx +47 -12
- package/src/components/dropdown/DropdownTool.tsx +27 -2
- package/src/components/empty/EmptyContent.tsx +49 -8
- package/src/components/icon/Icon.tsx +96 -18
- package/src/components/index.ts +3 -2
- package/src/components/media/Media.tsx +193 -104
- package/src/components/menu/ContextMenu.tsx +19 -0
- package/src/components/menu/Menu.tsx +87 -30
- package/src/components/menu/MenuItem.tsx +44 -19
- package/src/components/menu/types.ts +9 -8
- package/src/components/meter/Meter.tsx +27 -4
- package/src/components/navigator/Navigator.tsx +58 -9
- package/src/components/panel/Panel.tsx +53 -21
- package/src/components/panel/PanelGroup.tsx +25 -2
- package/src/components/panel/PanelStack.tsx +33 -2
- package/src/components/progress/ProgressBar.tsx +33 -14
- package/src/components/progress/ProgressCircle.tsx +29 -13
- package/src/components/tabpanel/Tab.tsx +47 -24
- package/src/components/tabpanel/TabPanel.tsx +79 -13
- package/src/context/Global.tsx +28 -1
- package/src/context/NotificationCenter.tsx +3 -3
- package/src/core/aside/Aside.tsx +56 -34
- package/src/core/boundary/ErrorBoundary.tsx +26 -8
- package/src/core/boundary/ErrorIcon.tsx +1 -2
- package/src/core/content/Content.tsx +7 -3
- package/src/core/headfoot/HeadFoot.tsx +44 -37
- package/src/core/page/Page.tsx +42 -20
- package/src/core/responsive/Responsive.tsx +66 -8
- package/src/core/section/Section.tsx +26 -4
- package/src/core/theme/ThemeProvider.tsx +35 -14
- package/src/core/viewport/Viewport.tsx +16 -3
- package/src/hooks/useControlledValue.tsx +12 -0
- package/src/hooks/useDebounce.ts +13 -1
- package/src/hooks/useEffectDebugger.ts +50 -2
- package/src/hooks/useIsDark.ts +8 -0
- package/src/hooks/useIsRtl.ts +12 -0
- package/src/hooks/useNavigator.tsx +28 -5
- package/src/hooks/useOverlayService.tsx +33 -8
- package/src/hooks/usePropToggle.ts +16 -5
- package/src/hooks/useResize.ts +19 -1
- package/src/hooks/useResizeObserver.ts +32 -9
- package/src/hooks/useStepper.tsx +68 -0
- package/src/hooks/useStorage.ts +38 -0
- package/src/hotkeys/HotKeyLabel.tsx +1 -1
- package/src/hotkeys/HotKeyWrapper.tsx +3 -1
- package/src/index.ts +5 -0
- package/src/overlays/alert/Alert.tsx +50 -34
- package/src/overlays/flyout/Flyout.tsx +73 -97
- package/src/overlays/message/Message.tsx +28 -9
- package/src/overlays/modal/Modal.tsx +36 -30
- package/src/overlays/toast/Toast.tsx +42 -30
- package/src/overlays/tooltip/Tooltip.tsx +43 -18
- package/src/types/global.d.ts +8 -0
- package/src/types/icons.ts +32 -6
- package/src/types/index.ts +261 -45
- package/src/typography/Abbr.tsx +45 -11
- package/src/typography/{Link.tsx → Anchor.tsx} +26 -14
- package/src/typography/Copy.tsx +15 -0
- package/src/typography/Mark.tsx +25 -10
- package/src/typography/Text.tsx +31 -13
- package/src/typography/Title.tsx +18 -7
- package/src/typography/index.ts +1 -1
- package/src/{overlays/tooltip/Tooltip.module.css → utils/cloneElement.ts} +21 -27
- package/src/utils/getColor.ts +1 -17
- package/src/utils/index.ts +1 -0
- package/css/index.js +0 -250
- package/css/tailwind/colors.ts +0 -158
- package/dist/cjs/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/cjs/components/animations/Animations.module.css +0 -1
- package/dist/cjs/components/avatar/Avatar.module.css +0 -1
- package/dist/cjs/components/badge/Badge.module.css +0 -1
- package/dist/cjs/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/cjs/components/button/Button.module.css +0 -1
- package/dist/cjs/components/card/Card.module.css +0 -1
- package/dist/cjs/components/chip/Chip.module.css +0 -1
- package/dist/cjs/components/collapsable/Collapsable.module.css +0 -1
- package/dist/cjs/components/dropdown/Dropdown.module.css +0 -1
- package/dist/cjs/components/icon/Icon.module.css +0 -1
- package/dist/cjs/components/media/Media.module.css +0 -1
- package/dist/cjs/components/menu/Menu.module.css +0 -1
- package/dist/cjs/components/meter/Meter.module.css +0 -1
- package/dist/cjs/components/panel/Panel.module.css +0 -1
- package/dist/cjs/components/progress/Progress.module.css +0 -1
- package/dist/cjs/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/cjs/core/aside/Aside.module.css +0 -1
- package/dist/cjs/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/cjs/core/content/Content.module.css +0 -1
- package/dist/cjs/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/cjs/core/page/Page.module.css +0 -1
- package/dist/cjs/core/responsive/Responsive.module.css +0 -1
- package/dist/cjs/core/section/Section.module.css +0 -1
- package/dist/cjs/core/theme/Theme.module.css +0 -1
- package/dist/cjs/core/viewport/Viewport.module.css +0 -1
- package/dist/cjs/overlays/alert/Alert.module.css +0 -1
- package/dist/cjs/overlays/flyout/Flyout.module.css +0 -1
- package/dist/cjs/overlays/message/Message.module.css +0 -1
- package/dist/cjs/overlays/modal/Modal.module.css +0 -1
- package/dist/cjs/overlays/toast/Toast.module.css +0 -1
- package/dist/cjs/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/cjs/typography/Typography.module.css +0 -1
- package/dist/esm/components/actionLabel/ActionLabel.module.css +0 -1
- package/dist/esm/components/animations/Animations.module.css +0 -1
- package/dist/esm/components/avatar/Avatar.module.css +0 -1
- package/dist/esm/components/badge/Badge.module.css +0 -1
- package/dist/esm/components/breadcrumbs/Breadcrumbs.module.css +0 -1
- package/dist/esm/components/button/Button.module.css +0 -1
- package/dist/esm/components/card/Card.module.css +0 -1
- package/dist/esm/components/chip/Chip.module.css +0 -1
- package/dist/esm/components/collapsable/Collapsable.module.css +0 -1
- package/dist/esm/components/dropdown/Dropdown.module.css +0 -1
- package/dist/esm/components/icon/Icon.module.css +0 -1
- package/dist/esm/components/media/Media.module.css +0 -1
- package/dist/esm/components/menu/Menu.module.css +0 -1
- package/dist/esm/components/meter/Meter.module.css +0 -1
- package/dist/esm/components/panel/Panel.module.css +0 -1
- package/dist/esm/components/progress/Progress.module.css +0 -1
- package/dist/esm/components/tabpanel/TabPanel.module.css +0 -1
- package/dist/esm/core/aside/Aside.module.css +0 -1
- package/dist/esm/core/boundary/ErrorBoundary.module.css +0 -1
- package/dist/esm/core/content/Content.module.css +0 -1
- package/dist/esm/core/headfoot/HeadFoot.module.css +0 -1
- package/dist/esm/core/page/Page.module.css +0 -1
- package/dist/esm/core/responsive/Responsive.module.css +0 -1
- package/dist/esm/core/section/Section.module.css +0 -1
- package/dist/esm/core/theme/Theme.module.css +0 -1
- package/dist/esm/core/viewport/Viewport.module.css +0 -1
- package/dist/esm/overlays/alert/Alert.module.css +0 -1
- package/dist/esm/overlays/flyout/Flyout.module.css +0 -1
- package/dist/esm/overlays/message/Message.module.css +0 -1
- package/dist/esm/overlays/modal/Modal.module.css +0 -1
- package/dist/esm/overlays/toast/Toast.module.css +0 -1
- package/dist/esm/overlays/tooltip/Tooltip.module.css +0 -1
- package/dist/esm/typography/Typography.module.css +0 -1
- package/dist/types/typography/Link.d.ts +0 -25
|
@@ -23,31 +23,35 @@
|
|
|
23
23
|
|
|
24
24
|
import { isString, isSvgPath } from "@react-fabric/utilities";
|
|
25
25
|
import classNames from "classnames";
|
|
26
|
-
import { useMemo } from "react";
|
|
26
|
+
import { isValidElement, useEffect, useMemo, useState } from "react";
|
|
27
27
|
import {
|
|
28
28
|
type AriaProps,
|
|
29
29
|
type ColorType,
|
|
30
30
|
type CssProp,
|
|
31
|
+
type PaletteType,
|
|
31
32
|
type RefProp,
|
|
32
33
|
type SizeType,
|
|
33
34
|
type TestProps,
|
|
34
35
|
} from "../../types";
|
|
35
|
-
import {
|
|
36
|
-
import classes from "./Icon.module.css";
|
|
36
|
+
import { getColor } from "../../utils";
|
|
37
37
|
|
|
38
|
-
export interface
|
|
38
|
+
export interface Props extends CssProp, AriaProps, RefProp, TestProps {
|
|
39
39
|
/**
|
|
40
40
|
* svg path / webfont className / 1-4 letter text
|
|
41
41
|
*/
|
|
42
|
-
icon: string;
|
|
42
|
+
icon: string | JSX.Element;
|
|
43
|
+
/**
|
|
44
|
+
* icon image source URL, if failed to load then shows icon
|
|
45
|
+
*/
|
|
46
|
+
iconSrc?: string;
|
|
43
47
|
/**
|
|
44
48
|
* background color (CSS color / tailwind color)
|
|
45
49
|
*/
|
|
46
|
-
bg?: ColorType | string;
|
|
50
|
+
bg?: ColorType | PaletteType | string;
|
|
47
51
|
/**
|
|
48
52
|
* icon color (CSS color / tailwind color)
|
|
49
53
|
*/
|
|
50
|
-
color?: ColorType | string;
|
|
54
|
+
color?: ColorType | PaletteType | string;
|
|
51
55
|
/**
|
|
52
56
|
* flip icon in rtl
|
|
53
57
|
*/
|
|
@@ -68,12 +72,39 @@ export interface IconProps extends CssProp, AriaProps, RefProp, TestProps {
|
|
|
68
72
|
* apply animation
|
|
69
73
|
*/
|
|
70
74
|
animate?: "spin" | "pulse" | "bounce";
|
|
75
|
+
disabled?: boolean;
|
|
71
76
|
/**
|
|
72
77
|
* click handler
|
|
73
78
|
*/
|
|
74
79
|
onClick?: React.MouseEventHandler;
|
|
75
80
|
}
|
|
76
81
|
|
|
82
|
+
export type IconProps =
|
|
83
|
+
| string
|
|
84
|
+
| JSX.Element
|
|
85
|
+
| Pick<
|
|
86
|
+
Props,
|
|
87
|
+
| "icon"
|
|
88
|
+
| "iconSrc"
|
|
89
|
+
| "bg"
|
|
90
|
+
| "color"
|
|
91
|
+
| "size"
|
|
92
|
+
| "rtlFlip"
|
|
93
|
+
| "viewBox"
|
|
94
|
+
| "rounded"
|
|
95
|
+
| "animate"
|
|
96
|
+
>;
|
|
97
|
+
|
|
98
|
+
export const getIconProps = (props: IconProps): Props => {
|
|
99
|
+
if (typeof props === "string") {
|
|
100
|
+
return { icon: props };
|
|
101
|
+
}
|
|
102
|
+
if (isValidElement(props)) {
|
|
103
|
+
return { icon: props };
|
|
104
|
+
}
|
|
105
|
+
return props as unknown as Props;
|
|
106
|
+
};
|
|
107
|
+
|
|
77
108
|
const SvgTextSize = ["", ".875em", ".525em", ".35em", ".25em"];
|
|
78
109
|
const SizeMap: KeyValue<string> = {
|
|
79
110
|
xs: "0.625rem",
|
|
@@ -84,22 +115,56 @@ const SizeMap: KeyValue<string> = {
|
|
|
84
115
|
};
|
|
85
116
|
|
|
86
117
|
/**
|
|
87
|
-
*
|
|
118
|
+
* A versatile icon component that supports SVG paths, webfont icons, and text icons.
|
|
119
|
+
* It can be styled with background color, icon color, size, and animations.
|
|
120
|
+
* It also supports RTL flipping and rounded corners.
|
|
121
|
+
* The component can be used as a standalone icon or as part of other components.
|
|
122
|
+
* It accepts various properties to customize its appearance and behavior.
|
|
123
|
+
* These include `bg`, `color`, `size`, `rtlFlip`, `animate`, and `rounded`.
|
|
124
|
+
*
|
|
125
|
+
* @param {IconProps} props - The properties for the Icon component.
|
|
126
|
+
* @returns {JSX.Element} The rendered Icon component.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```jsx
|
|
130
|
+
* <Icon
|
|
131
|
+
* icon="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"
|
|
132
|
+
* bg="bg-blue-500"
|
|
133
|
+
* color="text-white"
|
|
134
|
+
* size="lg"
|
|
135
|
+
* rtlFlip={true}
|
|
136
|
+
* animate="spin"
|
|
137
|
+
* rounded={true}
|
|
138
|
+
* onClick={() => console.log("Icon clicked")}
|
|
139
|
+
* />
|
|
140
|
+
* // Renders an icon with a SVG path, blue background, white text color,
|
|
141
|
+
* // large size, RTL flip, spin animation, rounded corners, and a click handler.
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-icon--docs} for more details.
|
|
88
145
|
*/
|
|
89
146
|
export const Icon = ({
|
|
90
147
|
ref,
|
|
91
148
|
icon,
|
|
149
|
+
iconSrc,
|
|
92
150
|
bg,
|
|
93
151
|
color,
|
|
94
152
|
size = "",
|
|
95
153
|
rtlFlip,
|
|
96
154
|
animate,
|
|
97
155
|
rounded,
|
|
156
|
+
disabled,
|
|
98
157
|
viewBox = "0 0 24 24",
|
|
99
158
|
className,
|
|
100
159
|
onClick,
|
|
101
160
|
...rest
|
|
102
|
-
}:
|
|
161
|
+
}: Props) => {
|
|
162
|
+
const [imageFailed, setImageFailed] = useState(false);
|
|
163
|
+
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
setImageFailed(false);
|
|
166
|
+
}, [iconSrc]);
|
|
167
|
+
|
|
103
168
|
/** ***************** style map *******************/
|
|
104
169
|
const styles = useMemo(() => {
|
|
105
170
|
const s: KeyValue = {};
|
|
@@ -125,6 +190,7 @@ export const Icon = ({
|
|
|
125
190
|
|
|
126
191
|
/** ***************** render icon *******************/
|
|
127
192
|
const iconEl = useMemo(() => {
|
|
193
|
+
if (isValidElement(icon)) return icon;
|
|
128
194
|
if (!isString(icon)) {
|
|
129
195
|
throw Error("Invalid icon expected string");
|
|
130
196
|
}
|
|
@@ -140,7 +206,7 @@ export const Icon = ({
|
|
|
140
206
|
dy=".1em"
|
|
141
207
|
dominantBaseline="middle"
|
|
142
208
|
textAnchor="middle"
|
|
143
|
-
style={{ fontSize: SvgTextSize[icon.length]
|
|
209
|
+
style={{ fontSize: SvgTextSize[icon.length] }}
|
|
144
210
|
>
|
|
145
211
|
{icon}
|
|
146
212
|
</text>
|
|
@@ -152,25 +218,37 @@ export const Icon = ({
|
|
|
152
218
|
|
|
153
219
|
return (
|
|
154
220
|
<dfn
|
|
155
|
-
|
|
221
|
+
data-ref="icon"
|
|
156
222
|
ref={ref}
|
|
223
|
+
{...rest}
|
|
157
224
|
role="presentation"
|
|
158
225
|
className={classNames(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
"select-none overflow-hidden inline-block box-content leading-none not-italic text-center",
|
|
162
|
-
bg && getBgClass(bg),
|
|
163
|
-
color && getColorClass(color),
|
|
226
|
+
"fabric-icon",
|
|
227
|
+
"select-none overflow-hidden box-content leading-none not-italic text-center",
|
|
164
228
|
!rounded && "rounded",
|
|
165
229
|
rounded && "rounded-full",
|
|
166
230
|
animate && `animate-${animate}`,
|
|
231
|
+
!!onClick && disabled && "opacity-30 pointer-events-none",
|
|
232
|
+
className,
|
|
167
233
|
)}
|
|
168
|
-
onClick={
|
|
234
|
+
onClick={(e) => {
|
|
235
|
+
onClick && e.stopPropagation();
|
|
236
|
+
onClick && e.preventDefault();
|
|
237
|
+
onClick?.(e);
|
|
238
|
+
}}
|
|
169
239
|
data-flip={rtlFlip}
|
|
170
240
|
style={styles}
|
|
171
241
|
data-clickable={!!onClick}
|
|
242
|
+
data-inner-clickable={!!onClick}
|
|
172
243
|
>
|
|
173
|
-
{
|
|
244
|
+
{iconSrc && !imageFailed && (
|
|
245
|
+
<img
|
|
246
|
+
src={iconSrc}
|
|
247
|
+
alt="fallback icon"
|
|
248
|
+
onError={() => setImageFailed(true)}
|
|
249
|
+
/>
|
|
250
|
+
)}
|
|
251
|
+
{(!iconSrc || imageFailed) && iconEl}
|
|
174
252
|
</dfn>
|
|
175
253
|
);
|
|
176
254
|
};
|
package/src/components/index.ts
CHANGED
|
@@ -26,8 +26,8 @@ export {
|
|
|
26
26
|
AnimationBars,
|
|
27
27
|
AnimationIndicator,
|
|
28
28
|
AnimationSpinner,
|
|
29
|
-
Skeleton,
|
|
30
29
|
Loading,
|
|
30
|
+
Skeleton,
|
|
31
31
|
} from "./animations/Animations";
|
|
32
32
|
export { Avatar } from "./avatar/Avatar";
|
|
33
33
|
export { AvatarGroup } from "./avatar/AvatarGroup";
|
|
@@ -40,13 +40,14 @@ export { ToggleButtonGroup } from "./button/ToggleButtonGroup";
|
|
|
40
40
|
export { Callout } from "./callout/Callout";
|
|
41
41
|
export { Card } from "./card/Card";
|
|
42
42
|
export { CardCover } from "./card/CardCover";
|
|
43
|
+
export { FlipContent, type FlipContentRef } from "./card/FlipContent";
|
|
43
44
|
export { Chip } from "./chip/Chip";
|
|
44
45
|
export { Collapsable } from "./collapsable/Collapsable";
|
|
45
46
|
export { Divider } from "./divider/Divider";
|
|
46
47
|
export { Dropdown, DropdownDismiss } from "./dropdown/Dropdown";
|
|
47
48
|
export { DropdownTool } from "./dropdown/DropdownTool";
|
|
48
49
|
export { EmptyContent } from "./empty/EmptyContent";
|
|
49
|
-
export { Icon } from "./icon/Icon";
|
|
50
|
+
export { Icon, getIconProps } from "./icon/Icon";
|
|
50
51
|
export { Image, Video } from "./media/Media";
|
|
51
52
|
export { ContextMenu } from "./menu/ContextMenu";
|
|
52
53
|
export { Menu } from "./menu/Menu";
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
|
|
24
24
|
import { getImageColorset } from "@react-fabric/utilities";
|
|
25
25
|
import classNames from "classnames";
|
|
26
|
-
import {
|
|
26
|
+
import { Fragment, useEffect, useRef, useState } from "react";
|
|
27
27
|
import { type AriaProps, type CssProp, type TestProps } from "../../types";
|
|
28
28
|
import { CoreIcons } from "../../types/icons";
|
|
29
29
|
import { Button } from "../button/Button";
|
|
30
|
-
import
|
|
30
|
+
import { Icon } from "../icon/Icon";
|
|
31
31
|
|
|
32
32
|
export interface BaseProps extends CssProp, TestProps, AriaProps {
|
|
33
33
|
/**
|
|
@@ -44,6 +44,12 @@ export interface BaseProps extends CssProp, TestProps, AriaProps {
|
|
|
44
44
|
fit?: "cover" | "contain" | "fill";
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
const cover = {
|
|
48
|
+
fill: "object-fill",
|
|
49
|
+
cover: "object-cover",
|
|
50
|
+
contain: "object-contain",
|
|
51
|
+
};
|
|
52
|
+
|
|
47
53
|
export interface ImageProps extends BaseProps {
|
|
48
54
|
/**
|
|
49
55
|
* image alt text
|
|
@@ -65,6 +71,41 @@ export interface VideoProps extends BaseProps {
|
|
|
65
71
|
playOnHover?: boolean;
|
|
66
72
|
}
|
|
67
73
|
|
|
74
|
+
const loadIndicator = (
|
|
75
|
+
<div
|
|
76
|
+
className={classNames(
|
|
77
|
+
"fabric-mediaPlaceholder",
|
|
78
|
+
"absolute z-1 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 text-4xl text-gray animate-pulse",
|
|
79
|
+
)}
|
|
80
|
+
>
|
|
81
|
+
●●●
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Component for displaying images with optional reel decoration.
|
|
87
|
+
* A versatile media component that supports images and videos with various display options.
|
|
88
|
+
* It can display images with a reel decoration, handle loading states, and show error icons if the media fails to load.
|
|
89
|
+
* This component is useful for displaying images in a visually appealing way, with support for lazy loading and error handling.
|
|
90
|
+
* It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
|
|
91
|
+
*
|
|
92
|
+
* @param {ImageProps | VideoProps} props - The properties for the Media component.
|
|
93
|
+
* @returns {JSX.Element} The rendered Media component.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```jsx
|
|
97
|
+
* <Image
|
|
98
|
+
* src="image.jpg"
|
|
99
|
+
* alt="Example Image"
|
|
100
|
+
* reel={true}
|
|
101
|
+
* fit="cover"
|
|
102
|
+
* className="custom-class"
|
|
103
|
+
* />
|
|
104
|
+
* // Renders an image with reel decoration, cover fit, and a custom class name.
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-media--docs} for more details.
|
|
108
|
+
*/
|
|
68
109
|
export const Image = ({
|
|
69
110
|
src,
|
|
70
111
|
alt,
|
|
@@ -74,51 +115,84 @@ export const Image = ({
|
|
|
74
115
|
...aria
|
|
75
116
|
}: ImageProps) => {
|
|
76
117
|
const [colorSet, setColorSet] = useState("light");
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
)}
|
|
84
|
-
>
|
|
85
|
-
●●●
|
|
86
|
-
</div>
|
|
87
|
-
),
|
|
88
|
-
[src],
|
|
89
|
-
);
|
|
118
|
+
const [loaded, setLoaded] = useState(false);
|
|
119
|
+
const [errored, setErrored] = useState(false);
|
|
120
|
+
useEffect(() => {
|
|
121
|
+
setLoaded(false);
|
|
122
|
+
setErrored(false);
|
|
123
|
+
}, [src]);
|
|
90
124
|
return (
|
|
91
125
|
<div
|
|
92
126
|
data-ref="image"
|
|
93
127
|
className={classNames(
|
|
94
|
-
|
|
95
|
-
"relative overflow-hidden
|
|
96
|
-
reel &&
|
|
128
|
+
"fabric-mediaContainer",
|
|
129
|
+
"relative overflow-hidden inline-block",
|
|
130
|
+
reel && "fabric-mediaReel",
|
|
97
131
|
className,
|
|
98
132
|
)}
|
|
99
133
|
data-colorset={colorSet}
|
|
100
134
|
{...aria}
|
|
101
135
|
>
|
|
102
|
-
{loadIndicator}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
e
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
136
|
+
{!loaded && !errored && loadIndicator}
|
|
137
|
+
{!errored && (
|
|
138
|
+
<img
|
|
139
|
+
alt={alt ?? src}
|
|
140
|
+
src={src}
|
|
141
|
+
loading="lazy"
|
|
142
|
+
crossOrigin="anonymous"
|
|
143
|
+
className={classNames(
|
|
144
|
+
"fabric-media",
|
|
145
|
+
"pointer-events-none w-full h-full",
|
|
146
|
+
cover[fit],
|
|
147
|
+
)}
|
|
148
|
+
onLoad={(e) => {
|
|
149
|
+
setLoaded(true);
|
|
150
|
+
setColorSet(getImageColorset(e.currentTarget));
|
|
151
|
+
}}
|
|
152
|
+
onError={() => setErrored(true)}
|
|
153
|
+
/>
|
|
154
|
+
)}
|
|
155
|
+
{errored && (
|
|
156
|
+
<Icon
|
|
157
|
+
size="2rem"
|
|
158
|
+
className="absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
|
|
159
|
+
icon={CoreIcons.mediaImageBroken}
|
|
160
|
+
/>
|
|
161
|
+
)}
|
|
118
162
|
</div>
|
|
119
163
|
);
|
|
120
164
|
};
|
|
121
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Component for displaying videos with optional controls and reel decoration.
|
|
168
|
+
* A versatile video component that supports autoplay, hover play, and various display options.
|
|
169
|
+
* It can display videos with a reel decoration, handle loading states, and show error icons if the video fails to load.
|
|
170
|
+
* This component is useful for displaying videos in a visually appealing way, with support for controls, autoplay, and error handling.
|
|
171
|
+
* It automatically adjusts the display based on the provided fit property, allowing for different styles such as cover, contain, or fill.
|
|
172
|
+
* It also includes controls for play/pause and volume, enhancing user interaction with the video content.
|
|
173
|
+
* This component is ideal for media-rich applications where video content needs to be displayed with user-friendly controls and visual effects.
|
|
174
|
+
* It supports features like autoplay, play on hover, and custom fit options for the video display.
|
|
175
|
+
* It also includes a reel decoration for a more engaging visual presentation.
|
|
176
|
+
*
|
|
177
|
+
* @param {VideoProps} props - The properties for the Video component.
|
|
178
|
+
* @returns {JSX.Element} The rendered Video component.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```jsx
|
|
182
|
+
* <Video
|
|
183
|
+
* src="video.mp4"
|
|
184
|
+
* poster="poster.jpg"
|
|
185
|
+
* reel={true}
|
|
186
|
+
* autoPlay={true}
|
|
187
|
+
* playOnHover={true}
|
|
188
|
+
* fit="cover"
|
|
189
|
+
* className="custom-class"
|
|
190
|
+
* />
|
|
191
|
+
* // Renders a video with reel decoration, autoplay, play on hover, cover fit, and a custom class name.
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-video--docs} for more details.
|
|
195
|
+
*/
|
|
122
196
|
export const Video = ({
|
|
123
197
|
src,
|
|
124
198
|
poster,
|
|
@@ -130,17 +204,27 @@ export const Video = ({
|
|
|
130
204
|
...aria
|
|
131
205
|
}: VideoProps) => {
|
|
132
206
|
const videoRef = useRef<HTMLVideoElement>(null);
|
|
207
|
+
const [loaded, setLoaded] = useState(false);
|
|
208
|
+
const [errored, setErrored] = useState(false);
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
setLoaded(false);
|
|
211
|
+
setErrored(false);
|
|
212
|
+
}, [src]);
|
|
133
213
|
|
|
134
214
|
const [state, setState] = useState(true);
|
|
135
215
|
const [volume, setVolume] = useState(false);
|
|
136
216
|
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
setErrored(false);
|
|
219
|
+
}, [src]);
|
|
220
|
+
|
|
137
221
|
return (
|
|
138
222
|
<div
|
|
139
223
|
data-ref="video"
|
|
140
224
|
className={classNames(
|
|
141
|
-
|
|
142
|
-
"relative overflow-hidden
|
|
143
|
-
reel &&
|
|
225
|
+
"fabric-mediaContainer",
|
|
226
|
+
"relative overflow-hidden inline-block",
|
|
227
|
+
reel && "fabric-mediaReel",
|
|
144
228
|
className,
|
|
145
229
|
)}
|
|
146
230
|
onMouseEnter={() => {
|
|
@@ -151,74 +235,79 @@ export const Video = ({
|
|
|
151
235
|
}}
|
|
152
236
|
{...aria}
|
|
153
237
|
>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
238
|
+
{!loaded && !errored && loadIndicator}
|
|
239
|
+
{!errored && (
|
|
240
|
+
<Fragment>
|
|
241
|
+
<video
|
|
242
|
+
loop
|
|
243
|
+
ref={videoRef}
|
|
244
|
+
controls={false}
|
|
245
|
+
poster={poster}
|
|
246
|
+
autoPlay={autoPlay}
|
|
247
|
+
className={classNames(
|
|
248
|
+
"fabric-media",
|
|
249
|
+
"pointer-events-none w-full h-full",
|
|
250
|
+
fit && `object-${fit}`,
|
|
251
|
+
)}
|
|
252
|
+
onPlay={() => setState(true)}
|
|
253
|
+
onPause={() => setState(false)}
|
|
254
|
+
onVolumeChange={(e) => setVolume(!!e.currentTarget.volume)}
|
|
255
|
+
onLoadedData={(e) => {
|
|
256
|
+
e.currentTarget.volume = 0;
|
|
257
|
+
setLoaded(true);
|
|
258
|
+
}}
|
|
259
|
+
onError={() => setErrored(true)}
|
|
260
|
+
>
|
|
261
|
+
<source src={src} />
|
|
262
|
+
<track kind="captions" />
|
|
263
|
+
</video>
|
|
264
|
+
<div
|
|
265
|
+
data-inner-clickable
|
|
266
|
+
className={classNames(
|
|
267
|
+
"fabric-mediaControls",
|
|
268
|
+
"absolute bottom-6 end-6 rounded-full flex flex-col",
|
|
269
|
+
)}
|
|
270
|
+
>
|
|
271
|
+
<Button
|
|
272
|
+
rounded
|
|
273
|
+
variant="link"
|
|
274
|
+
className={"fabric-mediaControlPlaceholder"}
|
|
275
|
+
icon={CoreIcons.ellipsis}
|
|
276
|
+
aria-label="controls"
|
|
277
|
+
/>
|
|
278
|
+
<Button
|
|
279
|
+
rounded
|
|
280
|
+
variant="link"
|
|
281
|
+
aria-label="controls"
|
|
282
|
+
className={"fabric-mediaControlAction"}
|
|
283
|
+
onClick={() => {
|
|
284
|
+
videoRef.current &&
|
|
285
|
+
(videoRef.current.volume = videoRef.current.volume ? 0 : 1);
|
|
286
|
+
}}
|
|
287
|
+
icon={volume ? CoreIcons.volumeOn : CoreIcons.volumeOff}
|
|
288
|
+
/>
|
|
289
|
+
<Button
|
|
290
|
+
rounded
|
|
291
|
+
variant="link"
|
|
292
|
+
aria-label="controls"
|
|
293
|
+
className={"fabric-mediaControlAction"}
|
|
294
|
+
onClick={() => {
|
|
295
|
+
videoRef.current?.paused
|
|
296
|
+
? videoRef.current?.play()
|
|
297
|
+
: videoRef.current?.pause();
|
|
298
|
+
}}
|
|
299
|
+
icon={state ? CoreIcons.pause : CoreIcons.play}
|
|
300
|
+
/>
|
|
301
|
+
</div>
|
|
302
|
+
</Fragment>
|
|
303
|
+
)}
|
|
304
|
+
{errored && (
|
|
305
|
+
<Icon
|
|
306
|
+
size="2rem"
|
|
307
|
+
className="absolute text-tint-300 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2"
|
|
308
|
+
icon={CoreIcons.mediaVideoBroken}
|
|
220
309
|
/>
|
|
221
|
-
|
|
310
|
+
)}
|
|
222
311
|
</div>
|
|
223
312
|
);
|
|
224
313
|
};
|
|
@@ -42,6 +42,25 @@ export interface ContextMenuProps extends ChildrenProp {
|
|
|
42
42
|
disabled?: boolean;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* A component that provides a context menu that appears on right-click.
|
|
47
|
+
* It uses the Floating UI library to manage the positioning and interactions of the menu.
|
|
48
|
+
* This component is useful for creating custom context menus that can be triggered by right-clicking on elements.
|
|
49
|
+
*
|
|
50
|
+
* @param {ContextMenuProps} props - The properties for the ContextMenu component.
|
|
51
|
+
* @returns {JSX.Element} The rendered ContextMenu component.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```jsx
|
|
55
|
+
* <ContextMenu
|
|
56
|
+
* menu={<Menu items={[{ label: "Option 1" }, { label: "Option 2" }]} />}
|
|
57
|
+
* >
|
|
58
|
+
* <div className="context-menu-target">Right-click me!</div>
|
|
59
|
+
* </ContextMenu>
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @see {@link https://adarshpastakia.github.io/react-fabric/?path=/docs/core-components-menu--docs}
|
|
63
|
+
*/
|
|
45
64
|
export const ContextMenu = ({ children, menu, disabled }: ContextMenuProps) => {
|
|
46
65
|
const [isOpen, setIsOpen] = useState(false);
|
|
47
66
|
const nodeId = useFloatingNodeId();
|