@dxos/react-ui 0.8.4-staging.ac66bdf99f → 0.9.0
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
- package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
- package/dist/lib/browser/chunk-7JFD5ZHZ.mjs +1612 -0
- package/dist/lib/browser/chunk-7JFD5ZHZ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3039 -1891
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +10 -13
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/translations.mjs +9 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
- package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-TTEL2FP2.mjs +1614 -0
- package/dist/lib/node-esm/chunk-TTEL2FP2.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3039 -1891
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +10 -13
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/translations.mjs +10 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
- package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
- package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/Button.d.ts +1 -1
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
- package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
- package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
- package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
- package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
- package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/index.d.ts +2 -0
- package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.d.ts +63 -57
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
- package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
- package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/index.d.ts +2 -0
- package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/{primitives → components}/Column/Column.d.ts +4 -4
- package/dist/types/src/components/Column/Column.d.ts.map +1 -0
- package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
- package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
- package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
- package/dist/types/src/components/Column/index.d.ts +3 -0
- package/dist/types/src/components/Column/index.d.ts.map +1 -0
- package/dist/types/src/components/Column/withColumn.d.ts +21 -0
- package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
- package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
- package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
- package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/index.d.ts +2 -0
- package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
- package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +2 -2
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
- package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
- package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
- package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
- package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
- package/dist/types/src/components/Icon/index.d.ts +1 -0
- package/dist/types/src/components/Icon/index.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.d.ts +8 -1
- package/dist/types/src/components/Image/Image.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +88 -13
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
- package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
- package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
- package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
- package/dist/types/src/components/Input/constants.d.ts +2 -0
- package/dist/types/src/components/Input/constants.d.ts.map +1 -0
- package/dist/types/src/components/Input/index.d.ts +2 -0
- package/dist/types/src/components/Input/index.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
- package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
- package/dist/types/src/components/List/List.d.ts +2 -2
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +1 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.theme.d.ts +7 -0
- package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.d.ts +2 -2
- package/dist/types/src/components/List/Tree.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +2 -2
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
- package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
- package/dist/types/src/components/Main/Main.d.ts +9 -5
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
- package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
- package/dist/types/src/components/Main/constants.d.ts +3 -0
- package/dist/types/src/components/Main/constants.d.ts.map +1 -0
- package/dist/types/src/components/Main/index.d.ts +1 -0
- package/dist/types/src/components/Main/index.d.ts.map +1 -1
- package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
- package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
- package/dist/types/src/components/Message/Message.d.ts +3 -3
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
- package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
- package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
- package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
- package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
- package/dist/types/src/components/Panel/index.d.ts.map +1 -0
- package/dist/types/src/components/Popover/Popover.d.ts +10 -2
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
- package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
- package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
- package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
- package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
- package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
- package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
- package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
- package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
- package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
- package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
- package/dist/types/src/components/Status/Status.d.ts +1 -1
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
- package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
- package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
- package/dist/types/src/components/Toast/Toast.d.ts +12 -9
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
- package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
- package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
- package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/index.d.ts +1 -0
- package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
- package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +7 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
- package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
- package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
- package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +3 -2
- package/dist/types/src/primitives/index.d.ts.map +1 -1
- package/dist/types/src/testing/Loading.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/theme/bindTheme.d.ts +3 -0
- package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
- package/dist/types/src/theme/defaultTheme.d.ts +4 -0
- package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
- package/dist/types/src/theme/index.d.ts +31 -0
- package/dist/types/src/theme/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +17 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/mobile.d.ts +5 -0
- package/dist/types/src/util/mobile.d.ts.map +1 -0
- package/dist/types/src/util/slots.d.ts +57 -0
- package/dist/types/src/util/slots.d.ts.map +1 -0
- package/dist/types/src/util/usePx.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +29 -25
- package/src/components/Avatars/Avatar.theme.ts +93 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
- package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
- package/src/components/Button/Button.theme.ts +31 -0
- package/src/components/Button/Button.tsx +2 -2
- package/src/components/Button/IconButton.stories.tsx +51 -3
- package/src/components/Button/IconButton.theme.ts +21 -0
- package/src/components/Button/IconButton.tsx +3 -2
- package/src/components/Calendar/Calendar.stories.tsx +43 -0
- package/src/components/Calendar/Calendar.theme.ts +74 -0
- package/src/components/Calendar/Calendar.tsx +196 -0
- package/src/components/Calendar/index.ts +5 -0
- package/src/components/Card/Card.stories.tsx +43 -22
- package/src/components/Card/Card.theme.ts +93 -0
- package/src/components/Card/Card.tsx +161 -169
- package/src/components/Carousel/Carousel.stories.tsx +47 -0
- package/src/components/Carousel/Carousel.tsx +373 -0
- package/src/components/Carousel/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
- package/src/components/Column/Column.theme.ts +48 -0
- package/src/{primitives → components}/Column/Column.tsx +2 -1
- package/src/{primitives → components}/Column/index.ts +1 -0
- package/src/components/Column/withColumn.ts +27 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
- package/src/components/DatePicker/DatePicker.theme.ts +35 -0
- package/src/components/DatePicker/DatePicker.tsx +279 -0
- package/src/components/DatePicker/index.ts +5 -0
- package/src/components/Dialog/AlertDialog.tsx +12 -16
- package/src/components/Dialog/Dialog.stories.tsx +2 -2
- package/src/components/Dialog/Dialog.theme.ts +61 -0
- package/src/components/Dialog/Dialog.tsx +46 -17
- package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
- package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
- package/src/components/Focus/Focus.theme.ts +32 -0
- package/src/components/Focus/Focus.tsx +1 -1
- package/src/components/Icon/Icon.theme.ts +45 -0
- package/src/components/Icon/Icon.tsx +10 -3
- package/src/components/Icon/IconBlock.tsx +38 -0
- package/src/components/Icon/index.ts +1 -0
- package/src/components/Image/Image.stories.tsx +1 -1
- package/src/components/Image/Image.tsx +38 -9
- package/src/components/Input/Input.stories.tsx +132 -29
- package/src/components/Input/Input.theme.ts +191 -0
- package/src/components/Input/Input.tsx +208 -2
- package/src/components/Input/SegmentedInput.tsx +454 -0
- package/src/components/Input/constants.ts +5 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/Link/Link.theme.ts +16 -0
- package/src/components/Link/Link.tsx +10 -2
- package/src/components/List/List.stories.tsx +1 -1
- package/src/components/List/List.theme.ts +47 -0
- package/src/components/List/List.tsx +3 -3
- package/src/components/List/ListDropIndicator.tsx +1 -2
- package/src/components/List/Tree.stories.tsx +1 -1
- package/src/components/List/TreeDropIndicator.tsx +3 -3
- package/src/components/List/Treegrid.theme.ts +35 -0
- package/src/components/List/Treegrid.tsx +3 -4
- package/src/components/Main/Main.theme.ts +29 -0
- package/src/components/Main/Main.tsx +9 -7
- package/src/components/Main/constants.ts +6 -0
- package/src/components/Main/index.ts +1 -0
- package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
- package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
- package/src/components/MediaPlayer/index.ts +5 -0
- package/src/components/Menu/ContextMenu.stories.tsx +0 -3
- package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
- package/src/components/Menu/DropdownMenu.tsx +15 -15
- package/src/components/Menu/Menu.theme.ts +48 -0
- package/src/components/Message/Message.stories.tsx +43 -5
- package/src/components/Message/Message.theme.ts +44 -0
- package/src/components/Message/Message.tsx +76 -16
- package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
- package/src/components/Panel/Panel.theme.ts +41 -0
- package/src/{primitives → components}/Panel/Panel.tsx +2 -1
- package/src/components/Popover/Popover.theme.ts +40 -0
- package/src/components/Popover/Popover.tsx +7 -7
- package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
- package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
- package/src/components/ScrollArea/ScrollArea.tsx +3 -2
- package/src/components/ScrollArea/index.ts +1 -0
- package/src/components/ScrollArea/scrollbar.ts +21 -0
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
- package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
- package/src/components/Select/Select.theme.ts +55 -0
- package/src/components/Select/Select.tsx +26 -10
- package/src/components/Separator/Separator.theme.ts +23 -0
- package/src/components/Skeleton/Skeleton.theme.ts +22 -0
- package/src/components/Splitter/Splitter.stories.tsx +1 -1
- package/src/components/Splitter/Splitter.theme.ts +18 -0
- package/src/components/Splitter/Splitter.tsx +10 -15
- package/src/components/Status/Status.theme.ts +31 -0
- package/src/components/Status/Status.tsx +1 -2
- package/src/components/Tag/Tag.theme.ts +22 -0
- package/src/components/Toast/Toast.stories.tsx +41 -20
- package/src/components/Toast/Toast.theme.ts +56 -0
- package/src/components/Toast/Toast.tsx +95 -27
- package/src/components/Toolbar/Toolbar.theme.ts +36 -0
- package/src/components/Toolbar/Toolbar.tsx +67 -15
- package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
- package/src/components/Tooltip/Tooltip.theme.ts +19 -0
- package/src/components/Tooltip/Tooltip.tsx +18 -17
- package/src/components/Tooltip/index.ts +1 -0
- package/src/components/Tooltip/tooltipContent.ts +16 -0
- package/src/components/index.ts +7 -5
- package/src/exemplars/generics.stories.tsx +1 -2
- package/src/exemplars/slot.stories.tsx +5 -6
- package/src/exemplars/virtualizer.stories.tsx +0 -1
- package/src/hooks/useDensityContext.ts +1 -1
- package/src/hooks/useElevationContext.ts +1 -1
- package/src/hooks/useThemeContext.ts +1 -1
- package/src/hooks/useTranslationsContext.ts +1 -1
- package/src/index.ts +1 -0
- package/src/playground/Custom.stories.tsx +12 -32
- package/src/primitives/Container/Container.tsx +3 -1
- package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
- package/src/primitives/Flex/Flex.tsx +3 -1
- package/src/primitives/Grid/Grid.tsx +3 -1
- package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
- package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
- package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
- package/src/primitives/index.ts +4 -2
- package/src/testing/decorators/withLayout.tsx +7 -17
- package/src/testing/decorators/withLayoutVariants.tsx +1 -1
- package/src/testing/decorators/withTheme.tsx +21 -13
- package/src/theme/bindTheme.ts +13 -0
- package/src/theme/defaultTheme.ts +83 -0
- package/src/theme/index.ts +37 -0
- package/src/translations.ts +14 -0
- package/src/util/index.ts +2 -1
- package/src/util/mobile.ts +11 -0
- package/src/util/slots.ts +129 -0
- package/src/util/usePx.ts +4 -1
- package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
- package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
- package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
- package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
- package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/index.d.ts +0 -2
- package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
- package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
- package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
- package/src/util/hasIosKeyboard.ts +0 -8
- /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
- /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
- /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
- /package/src/{primitives → components}/Column/AUDIT.md +0 -0
- /package/src/{primitives → components}/Panel/index.ts +0 -0
- /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
- /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
- /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
- /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
|
@@ -5,54 +5,33 @@
|
|
|
5
5
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
6
6
|
import { Slot } from '@radix-ui/react-slot';
|
|
7
7
|
import DOMPurify from 'dompurify';
|
|
8
|
-
import React, {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
type PropsWithChildren,
|
|
12
|
-
createContext,
|
|
13
|
-
forwardRef,
|
|
14
|
-
useContext,
|
|
15
|
-
useMemo,
|
|
16
|
-
} from 'react';
|
|
17
|
-
|
|
18
|
-
import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
|
|
8
|
+
import React, { CSSProperties, JSX, MouseEventHandler, type ReactNode, forwardRef, useId, useMemo } from 'react';
|
|
9
|
+
|
|
10
|
+
import { iconSize } from '@dxos/ui-theme';
|
|
19
11
|
import { type Density } from '@dxos/ui-types';
|
|
20
12
|
|
|
21
13
|
import { useThemeContext } from '../../hooks';
|
|
22
|
-
import {
|
|
14
|
+
import { composable, composableProps, slottable } from '../../util';
|
|
23
15
|
import { type ThemedClassName } from '../../util';
|
|
24
16
|
import { Button } from '../Button';
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
17
|
+
import { Column } from '../Column';
|
|
18
|
+
import { Icon, IconBlock, type IconBlockProps, type IconProps } from '../Icon';
|
|
19
|
+
import { Image, type ImageProps } from '../Image';
|
|
27
20
|
import {
|
|
28
21
|
Toolbar,
|
|
29
|
-
|
|
22
|
+
type ToolbarActionIconButtonProps,
|
|
30
23
|
ToolbarDragHandleProps,
|
|
31
|
-
type ToolbarMenuItem,
|
|
32
24
|
type ToolbarMenuProps,
|
|
33
25
|
type ToolbarRootProps,
|
|
34
26
|
} from '../Toolbar';
|
|
35
27
|
|
|
36
|
-
//
|
|
37
|
-
// Context
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
const CARD_NAME = 'Card';
|
|
41
|
-
|
|
42
|
-
type CardContextValue = {
|
|
43
|
-
menuItems?: CardMenuItem<any>[];
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/** @deprecated Use context for menus. */
|
|
47
|
-
const CardContext = createContext<CardContextValue>({});
|
|
48
|
-
|
|
49
28
|
//
|
|
50
29
|
// Root
|
|
51
30
|
//
|
|
52
31
|
|
|
53
32
|
const CARD_ROOT_NAME = 'Card.Root';
|
|
54
33
|
|
|
55
|
-
type
|
|
34
|
+
type CardRootProps = {
|
|
56
35
|
id?: string;
|
|
57
36
|
border?: boolean;
|
|
58
37
|
fullWidth?: boolean;
|
|
@@ -64,24 +43,33 @@ type CardRootOwnProps = {
|
|
|
64
43
|
'data-testid'?: string;
|
|
65
44
|
};
|
|
66
45
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
46
|
+
/**
|
|
47
|
+
* `Card.Root` does not support `asChild`. The Column grid is the root element
|
|
48
|
+
* (one `<div>` carrying both the `dx-card` and `dx-column-root` classes
|
|
49
|
+
* instead of the previous outer-card + inner-column pair), so caller-provided
|
|
50
|
+
* HTML attributes — `onClick`, `tabIndex`, `style`, `data-*`, `grid-template-rows`
|
|
51
|
+
* overrides via `classNames` — land directly on the grid container.
|
|
52
|
+
* Slot-parents (`Focus.Item asChild`, `Mosaic.Tile asChild`, etc.) continue to
|
|
53
|
+
* work because `composable()` preserves the COMPOSABLE marker that slottable parents
|
|
54
|
+
* check before warning, and Radix `Slot` merges the parent's props onto the inner
|
|
55
|
+
* `<div>` exactly the way `slottable`'s `Slot`/`Primitive.div` branch did.
|
|
56
|
+
*/
|
|
57
|
+
const CardRoot = composable<HTMLDivElement, CardRootProps>(
|
|
58
|
+
({ children, id, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
|
|
71
59
|
const { className, ...rest } = composableProps(props);
|
|
72
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
73
60
|
const { tx } = useThemeContext();
|
|
74
61
|
|
|
75
62
|
return (
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
{
|
|
63
|
+
<Column.Root
|
|
64
|
+
asChild
|
|
65
|
+
gutter={density === 'lg' ? 'lg' : density === 'sm' || density === 'xs' ? 'sm' : 'md'}
|
|
66
|
+
classNames={tx('card.root', { border, fullWidth }, className)}
|
|
79
67
|
role={role ?? 'group'}
|
|
80
|
-
className={tx('card.root', { border, fullWidth }, className)}
|
|
81
|
-
ref={forwardedRef}
|
|
82
68
|
>
|
|
83
|
-
<
|
|
84
|
-
|
|
69
|
+
<div {...rest} {...(id && { 'data-object-id': id })} ref={forwardedRef}>
|
|
70
|
+
{children}
|
|
71
|
+
</div>
|
|
72
|
+
</Column.Root>
|
|
85
73
|
);
|
|
86
74
|
},
|
|
87
75
|
);
|
|
@@ -89,24 +77,29 @@ const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
|
|
|
89
77
|
CardRoot.displayName = CARD_ROOT_NAME;
|
|
90
78
|
|
|
91
79
|
//
|
|
92
|
-
//
|
|
80
|
+
// Header
|
|
93
81
|
//
|
|
94
82
|
|
|
95
|
-
const
|
|
83
|
+
const CARD_HEADER_NAME = 'Card.Header';
|
|
96
84
|
|
|
97
|
-
type
|
|
85
|
+
type CardHeaderProps = ToolbarRootProps;
|
|
98
86
|
|
|
99
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Top "header" slot of a Card. Despite the name, this renders as an ARIA
|
|
89
|
+
* toolbar (`role="toolbar"`) so its action children get keyboard navigation
|
|
90
|
+
* for free — `<header>` is allowed to contain a toolbar.
|
|
91
|
+
*/
|
|
92
|
+
const CardHeader = composable<HTMLDivElement, CardHeaderProps>(({ children, classNames, ...props }, forwardedRef) => {
|
|
100
93
|
const { tx } = useThemeContext();
|
|
101
94
|
|
|
102
95
|
return (
|
|
103
|
-
<Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.
|
|
96
|
+
<Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.header', {}), classNames]} ref={forwardedRef}>
|
|
104
97
|
{children}
|
|
105
98
|
</Toolbar.Root>
|
|
106
99
|
);
|
|
107
100
|
});
|
|
108
101
|
|
|
109
|
-
|
|
102
|
+
CardHeader.displayName = CARD_HEADER_NAME;
|
|
110
103
|
|
|
111
104
|
//
|
|
112
105
|
// DragHandle
|
|
@@ -118,7 +111,7 @@ type CardDragHandleProps = ToolbarDragHandleProps;
|
|
|
118
111
|
|
|
119
112
|
const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
|
|
120
113
|
return (
|
|
121
|
-
<CardIconBlock
|
|
114
|
+
<CardIconBlock>
|
|
122
115
|
<Toolbar.DragHandle {...props} ref={forwardedRef} />
|
|
123
116
|
</CardIconBlock>
|
|
124
117
|
);
|
|
@@ -127,22 +120,22 @@ const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props
|
|
|
127
120
|
CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
|
|
128
121
|
|
|
129
122
|
//
|
|
130
|
-
//
|
|
123
|
+
// ActionIconButton
|
|
131
124
|
//
|
|
132
125
|
|
|
133
|
-
const
|
|
126
|
+
const CARD_ACTION_ICON_BUTTON_NAME = 'Card.ActionIconButton';
|
|
134
127
|
|
|
135
|
-
type
|
|
128
|
+
type CardActionIconButtonProps = ToolbarActionIconButtonProps;
|
|
136
129
|
|
|
137
|
-
const
|
|
130
|
+
const CardActionIconButton = forwardRef<HTMLButtonElement, CardActionIconButtonProps>((props, forwardedRef) => {
|
|
138
131
|
return (
|
|
139
|
-
<CardIconBlock
|
|
140
|
-
<Toolbar.
|
|
132
|
+
<CardIconBlock>
|
|
133
|
+
<Toolbar.ActionIconButton {...props} ref={forwardedRef} />
|
|
141
134
|
</CardIconBlock>
|
|
142
135
|
);
|
|
143
136
|
});
|
|
144
137
|
|
|
145
|
-
|
|
138
|
+
CardActionIconButton.displayName = CARD_ACTION_ICON_BUTTON_NAME;
|
|
146
139
|
|
|
147
140
|
//
|
|
148
141
|
// Menu
|
|
@@ -150,22 +143,17 @@ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
|
|
|
150
143
|
|
|
151
144
|
const CARD_MENU_NAME = 'Card.Menu';
|
|
152
145
|
|
|
153
|
-
type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
|
|
154
|
-
|
|
155
146
|
type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
|
|
156
147
|
|
|
157
|
-
|
|
158
|
-
const { menuItems } = useContext(CardContext) ?? {};
|
|
159
|
-
const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
|
|
160
|
-
|
|
148
|
+
function CardMenu<T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) {
|
|
161
149
|
return (
|
|
162
|
-
<CardIconBlock
|
|
163
|
-
<Toolbar.Menu {...props} context={context} items={
|
|
150
|
+
<CardIconBlock>
|
|
151
|
+
<Toolbar.Menu {...props} context={context} items={items ?? []} />
|
|
164
152
|
</CardIconBlock>
|
|
165
153
|
);
|
|
166
|
-
}
|
|
154
|
+
}
|
|
167
155
|
|
|
168
|
-
|
|
156
|
+
CardMenu.displayName = CARD_MENU_NAME;
|
|
169
157
|
|
|
170
158
|
//
|
|
171
159
|
// Icon
|
|
@@ -173,15 +161,15 @@ const CardMenu = <T extends any | void = void>({ context, items, ...props }: Car
|
|
|
173
161
|
|
|
174
162
|
const CARD_ICON_NAME = 'Card.Icon';
|
|
175
163
|
|
|
176
|
-
|
|
164
|
+
function CardIcon(props: IconProps) {
|
|
177
165
|
return (
|
|
178
166
|
<CardIconBlock>
|
|
179
167
|
<Icon {...props} />
|
|
180
168
|
</CardIconBlock>
|
|
181
169
|
);
|
|
182
|
-
}
|
|
170
|
+
}
|
|
183
171
|
|
|
184
|
-
|
|
172
|
+
CardIcon.displayName = CARD_ICON_NAME;
|
|
185
173
|
|
|
186
174
|
//
|
|
187
175
|
// IconBlock
|
|
@@ -189,17 +177,9 @@ const CardIcon = (props: IconProps) => {
|
|
|
189
177
|
|
|
190
178
|
const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
|
|
191
179
|
|
|
192
|
-
const CardIconBlock = forwardRef<HTMLDivElement,
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
return (
|
|
197
|
-
<div {...props} role='none' className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
|
|
198
|
-
{children}
|
|
199
|
-
</div>
|
|
200
|
-
);
|
|
201
|
-
},
|
|
202
|
-
);
|
|
180
|
+
const CardIconBlock = forwardRef<HTMLDivElement, IconBlockProps>((props, forwardedRef) => {
|
|
181
|
+
return <IconBlock {...props} ref={forwardedRef} />;
|
|
182
|
+
});
|
|
203
183
|
|
|
204
184
|
CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
|
|
205
185
|
|
|
@@ -224,47 +204,24 @@ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, fo
|
|
|
224
204
|
CardTitle.displayName = CARD_TITLE_NAME;
|
|
225
205
|
|
|
226
206
|
//
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
const CARD_CONTENT_NAME = 'Card.Content';
|
|
231
|
-
|
|
232
|
-
const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
233
|
-
const { className, ...rest } = composableProps(props);
|
|
234
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
235
|
-
const { tx } = useThemeContext();
|
|
236
|
-
|
|
237
|
-
return (
|
|
238
|
-
<Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
|
|
239
|
-
{children}
|
|
240
|
-
</Comp>
|
|
241
|
-
);
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
CardContent.displayName = CARD_CONTENT_NAME;
|
|
245
|
-
|
|
246
|
-
//
|
|
247
|
-
// Row
|
|
207
|
+
// Body
|
|
248
208
|
//
|
|
249
209
|
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
type CardRowProps = { icon?: string; fullWidth?: boolean };
|
|
210
|
+
const CARD_BODY_NAME = 'Card.Body';
|
|
253
211
|
|
|
254
|
-
const
|
|
212
|
+
const CardBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
255
213
|
const { className, ...rest } = composableProps(props);
|
|
256
214
|
const Comp = asChild ? Slot : Primitive.div;
|
|
257
215
|
const { tx } = useThemeContext();
|
|
258
216
|
|
|
259
217
|
return (
|
|
260
|
-
<Comp {...rest} className={tx('card.
|
|
261
|
-
{(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
|
|
218
|
+
<Comp {...rest} className={tx('card.body', {}, className)} ref={forwardedRef}>
|
|
262
219
|
{children}
|
|
263
220
|
</Comp>
|
|
264
221
|
);
|
|
265
222
|
});
|
|
266
223
|
|
|
267
|
-
|
|
224
|
+
CardBody.displayName = CARD_BODY_NAME;
|
|
268
225
|
|
|
269
226
|
//
|
|
270
227
|
// Section
|
|
@@ -272,53 +229,81 @@ CardRow.displayName = CARD_ROW_NAME;
|
|
|
272
229
|
|
|
273
230
|
const CARD_SECTION_NAME = 'Card.Section';
|
|
274
231
|
|
|
232
|
+
type CardSectionProps = { title?: ReactNode };
|
|
233
|
+
|
|
275
234
|
/**
|
|
276
|
-
*
|
|
235
|
+
* A labeled grouping of card content. `display: contents` keeps children aligned
|
|
236
|
+
* to the Card's column grid (like `Card.Body`); when `title` is provided,
|
|
237
|
+
* renders a subheading row at the top and exposes the group with
|
|
238
|
+
* `role='group' aria-labelledby=…` for screen readers.
|
|
277
239
|
*/
|
|
278
|
-
const CardSection = slottable<HTMLDivElement>(
|
|
279
|
-
|
|
280
|
-
|
|
240
|
+
const CardSection = slottable<HTMLDivElement, CardSectionProps>(
|
|
241
|
+
({ children, asChild, title, role, ...props }, forwardedRef) => {
|
|
242
|
+
const { className, ...rest } = composableProps(props);
|
|
243
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
244
|
+
const { tx } = useThemeContext();
|
|
245
|
+
const titleId = useId();
|
|
281
246
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
})
|
|
247
|
+
return (
|
|
248
|
+
<Comp
|
|
249
|
+
{...rest}
|
|
250
|
+
role={role ?? (title ? 'group' : 'none')}
|
|
251
|
+
aria-labelledby={title ? titleId : undefined}
|
|
252
|
+
className={tx('card.section', {}, className)}
|
|
253
|
+
ref={forwardedRef}
|
|
254
|
+
>
|
|
255
|
+
{title && (
|
|
256
|
+
<div id={titleId} className={tx('card.section-title', {})}>
|
|
257
|
+
{title}
|
|
258
|
+
</div>
|
|
259
|
+
)}
|
|
260
|
+
{children}
|
|
261
|
+
</Comp>
|
|
262
|
+
);
|
|
263
|
+
},
|
|
264
|
+
);
|
|
288
265
|
|
|
289
266
|
CardSection.displayName = CARD_SECTION_NAME;
|
|
290
267
|
|
|
291
268
|
//
|
|
292
|
-
//
|
|
269
|
+
// Row
|
|
293
270
|
//
|
|
294
271
|
|
|
295
|
-
const
|
|
272
|
+
const CARD_ROW_NAME = 'Card.Row';
|
|
296
273
|
|
|
297
|
-
type
|
|
274
|
+
type CardRowProps = { icon?: string | JSX.Element; fullWidth?: boolean };
|
|
298
275
|
|
|
299
276
|
/**
|
|
300
|
-
*
|
|
277
|
+
* A row inside a Card.
|
|
278
|
+
* - Default: spans all 3 columns and establishes a subgrid so children align to the Card's columns.
|
|
279
|
+
* An optional `icon` lands in the first column; when omitted, the first column is left empty.
|
|
280
|
+
* - `fullWidth`: spans all columns without a subgrid — children do their own internal layout.
|
|
281
|
+
* The `icon` prop is ignored in this mode.
|
|
301
282
|
*/
|
|
302
|
-
const
|
|
303
|
-
({ children, asChild,
|
|
283
|
+
const CardRow = slottable<HTMLDivElement, CardRowProps>(
|
|
284
|
+
({ children, asChild, icon: iconProp, fullWidth, ...props }, forwardedRef) => {
|
|
285
|
+
const { tx } = useThemeContext();
|
|
304
286
|
const { className, ...rest } = composableProps(props);
|
|
305
287
|
const Comp = asChild ? Slot : Primitive.div;
|
|
306
|
-
const
|
|
288
|
+
const icon =
|
|
289
|
+
typeof iconProp === 'string' ? (
|
|
290
|
+
<CardIcon classNames='text-subdued' icon={iconProp as string} size={4} />
|
|
291
|
+
) : iconProp ? (
|
|
292
|
+
iconProp
|
|
293
|
+
) : (
|
|
294
|
+
<div />
|
|
295
|
+
);
|
|
307
296
|
|
|
308
297
|
return (
|
|
309
|
-
<Comp
|
|
310
|
-
{
|
|
311
|
-
role={role ?? 'heading'}
|
|
312
|
-
className={tx('card.heading', { variant }, className)}
|
|
313
|
-
ref={forwardedRef}
|
|
314
|
-
>
|
|
298
|
+
<Comp {...rest} className={tx('card.row', { fullWidth }, className)} ref={forwardedRef}>
|
|
299
|
+
{!fullWidth && icon}
|
|
315
300
|
{children}
|
|
316
301
|
</Comp>
|
|
317
302
|
);
|
|
318
303
|
},
|
|
319
304
|
);
|
|
320
305
|
|
|
321
|
-
|
|
306
|
+
CardRow.displayName = CARD_ROW_NAME;
|
|
322
307
|
|
|
323
308
|
//
|
|
324
309
|
// Text
|
|
@@ -326,13 +311,19 @@ CardHeading.displayName = CARD_HEADING_NAME;
|
|
|
326
311
|
|
|
327
312
|
const CARD_TEXT_NAME = 'Card.Text';
|
|
328
313
|
|
|
329
|
-
|
|
314
|
+
// `onClick` is opted in explicitly: `ComposableProps` deliberately excludes event handlers, but the
|
|
315
|
+
// part spreads rest props onto its element, so the handler is forwarded at runtime.
|
|
316
|
+
type CardTextProps = {
|
|
317
|
+
truncate?: boolean;
|
|
318
|
+
variant?: 'default' | 'description';
|
|
319
|
+
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
320
|
+
};
|
|
330
321
|
|
|
331
322
|
const CardText = slottable<HTMLDivElement, CardTextProps>(
|
|
332
323
|
({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
|
|
324
|
+
const { tx } = useThemeContext();
|
|
333
325
|
const { className, ...rest } = composableProps(props);
|
|
334
326
|
const Comp = asChild ? Slot : Primitive.div;
|
|
335
|
-
const { tx } = useThemeContext();
|
|
336
327
|
|
|
337
328
|
return (
|
|
338
329
|
<Comp {...rest} role={role ?? 'none'} className={tx('card.text', { variant }, className)} ref={forwardedRef}>
|
|
@@ -350,28 +341,27 @@ CardText.displayName = CARD_TEXT_NAME;
|
|
|
350
341
|
|
|
351
342
|
const CARD_HTML_NAME = 'Card.Html';
|
|
352
343
|
|
|
353
|
-
type CardHtmlProps = { html
|
|
344
|
+
type CardHtmlProps = { html?: string; variant?: 'default' | 'description' };
|
|
354
345
|
|
|
355
346
|
/**
|
|
356
347
|
* Renders sanitized HTML content inside a card text slot.
|
|
357
348
|
* Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
|
|
358
349
|
*/
|
|
359
|
-
|
|
350
|
+
function CardHtml({ html = '', variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) {
|
|
360
351
|
const { tx } = useThemeContext();
|
|
361
352
|
const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
|
|
362
353
|
|
|
363
354
|
return (
|
|
364
355
|
<div
|
|
365
356
|
{...props}
|
|
366
|
-
role='none'
|
|
367
357
|
className={tx('card.text', { variant })}
|
|
368
358
|
// eslint-disable-next-line react/no-danger
|
|
369
359
|
dangerouslySetInnerHTML={{ __html: sanitized }}
|
|
370
360
|
/>
|
|
371
361
|
);
|
|
372
|
-
}
|
|
362
|
+
}
|
|
373
363
|
|
|
374
|
-
|
|
364
|
+
CardHtml.displayName = CARD_HTML_NAME;
|
|
375
365
|
|
|
376
366
|
//
|
|
377
367
|
// Poster
|
|
@@ -383,31 +373,34 @@ type CardPosterProps = ThemedClassName<
|
|
|
383
373
|
{
|
|
384
374
|
alt: string;
|
|
385
375
|
aspect?: 'video' | 'auto';
|
|
386
|
-
} & Partial<{ image: string; icon: string }>
|
|
376
|
+
} & Partial<{ image: string; icon: string }> &
|
|
377
|
+
// The image-rendering props (`fit`, `crossOrigin`, color-extraction options) are forwarded to
|
|
378
|
+
// the underlying `Image`. `src`/`alt`/`classNames` are owned by the poster.
|
|
379
|
+
Omit<ImageProps, 'src' | 'alt' | 'classNames'>
|
|
387
380
|
>;
|
|
388
381
|
|
|
389
|
-
|
|
382
|
+
function CardPoster({ classNames, alt, aspect: aspectProp, image, icon, ...imageProps }: CardPosterProps) {
|
|
390
383
|
const { tx } = useThemeContext();
|
|
391
|
-
const aspect =
|
|
384
|
+
const aspect = aspectProp === 'auto' ? 'aspect-auto' : 'aspect-video';
|
|
392
385
|
|
|
393
|
-
if (
|
|
386
|
+
if (image) {
|
|
394
387
|
return (
|
|
395
|
-
<div
|
|
396
|
-
<Image classNames={[tx('card.poster', {}), aspect,
|
|
388
|
+
<div className='col-span-full'>
|
|
389
|
+
<Image classNames={[tx('card.poster', {}), aspect, classNames]} src={image} alt={alt} {...imageProps} />
|
|
397
390
|
</div>
|
|
398
391
|
);
|
|
399
392
|
}
|
|
400
393
|
|
|
401
|
-
if (
|
|
394
|
+
if (icon) {
|
|
402
395
|
return (
|
|
403
|
-
<div role='image' className={tx('card.poster-icon', {}, [aspect,
|
|
404
|
-
<Icon icon={
|
|
396
|
+
<div role='image' className={tx('card.poster-icon', {}, [aspect, classNames])} aria-label={alt}>
|
|
397
|
+
<Icon icon={icon} size={10} />
|
|
405
398
|
</div>
|
|
406
399
|
);
|
|
407
400
|
}
|
|
408
|
-
}
|
|
401
|
+
}
|
|
409
402
|
|
|
410
|
-
|
|
403
|
+
CardPoster.displayName = CARD_POSTER_NAME;
|
|
411
404
|
|
|
412
405
|
//
|
|
413
406
|
// Action
|
|
@@ -417,7 +410,7 @@ const CARD_ACTION_NAME = 'Card.Action';
|
|
|
417
410
|
|
|
418
411
|
type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
|
|
419
412
|
|
|
420
|
-
|
|
413
|
+
function CardAction({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) {
|
|
421
414
|
const { tx } = useThemeContext();
|
|
422
415
|
return (
|
|
423
416
|
<Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
|
|
@@ -426,9 +419,9 @@ const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onCl
|
|
|
426
419
|
{actionIcon && <CardIcon icon={actionIcon} size={4} />}
|
|
427
420
|
</Button>
|
|
428
421
|
);
|
|
429
|
-
}
|
|
422
|
+
}
|
|
430
423
|
|
|
431
|
-
|
|
424
|
+
CardAction.displayName = CARD_ACTION_NAME;
|
|
432
425
|
|
|
433
426
|
//
|
|
434
427
|
// Link
|
|
@@ -438,7 +431,7 @@ const CARD_LINK_NAME = 'Card.Link';
|
|
|
438
431
|
|
|
439
432
|
type CardLinkProps = { label: string; href: string };
|
|
440
433
|
|
|
441
|
-
|
|
434
|
+
function CardLink({ label, href }: CardLinkProps) {
|
|
442
435
|
const { tx } = useThemeContext();
|
|
443
436
|
return (
|
|
444
437
|
<a className={tx('card.link', {})} data-variant='ghost' href={href} target='_blank' rel='noreferrer'>
|
|
@@ -447,9 +440,9 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
447
440
|
<CardIcon classNames='invisible group-hover:visible' icon='ph--arrow-square-out--regular' />
|
|
448
441
|
</a>
|
|
449
442
|
);
|
|
450
|
-
}
|
|
443
|
+
}
|
|
451
444
|
|
|
452
|
-
|
|
445
|
+
CardLink.displayName = CARD_LINK_NAME;
|
|
453
446
|
|
|
454
447
|
//
|
|
455
448
|
// Card
|
|
@@ -458,24 +451,23 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
458
451
|
export const Card = {
|
|
459
452
|
Root: CardRoot,
|
|
460
453
|
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
ToolbarIconButton: Toolbar.IconButton,
|
|
464
|
-
ToolbarSeparator: Toolbar.Separator,
|
|
454
|
+
// Header
|
|
455
|
+
Header: CardHeader,
|
|
465
456
|
|
|
466
|
-
//
|
|
457
|
+
// Header parts
|
|
467
458
|
IconBlock: CardIconBlock,
|
|
468
459
|
DragHandle: CardDragHandle,
|
|
469
|
-
|
|
460
|
+
ActionIconButton: CardActionIconButton,
|
|
470
461
|
Menu: CardMenu,
|
|
471
462
|
Icon: CardIcon,
|
|
472
463
|
Title: CardTitle,
|
|
473
464
|
|
|
474
|
-
//
|
|
475
|
-
|
|
476
|
-
Row: CardRow,
|
|
465
|
+
// Body
|
|
466
|
+
Body: CardBody,
|
|
477
467
|
Section: CardSection,
|
|
478
|
-
|
|
468
|
+
Row: CardRow,
|
|
469
|
+
|
|
470
|
+
// Body parts
|
|
479
471
|
Text: CardText,
|
|
480
472
|
Html: CardHtml,
|
|
481
473
|
Poster: CardPoster,
|
|
@@ -484,10 +476,10 @@ export const Card = {
|
|
|
484
476
|
};
|
|
485
477
|
|
|
486
478
|
export type {
|
|
487
|
-
CardContextValue,
|
|
488
479
|
CardRootProps,
|
|
489
|
-
|
|
480
|
+
CardHeaderProps,
|
|
490
481
|
CardDragHandleProps,
|
|
491
|
-
|
|
482
|
+
CardActionIconButtonProps,
|
|
492
483
|
CardMenuProps,
|
|
484
|
+
CardSectionProps,
|
|
493
485
|
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
|
|
8
|
+
import { withTheme } from '../../testing';
|
|
9
|
+
import { Carousel } from './Carousel';
|
|
10
|
+
|
|
11
|
+
// Stable placeholder images so the story renders without network fixtures.
|
|
12
|
+
const IMAGES = Array.from({ length: 5 }).map((_, index) => `https://placehold.co/640x360?text=Slide+${index + 1}`);
|
|
13
|
+
|
|
14
|
+
type DefaultStoryProps = { count?: number };
|
|
15
|
+
|
|
16
|
+
const DefaultStory = ({ count = IMAGES.length }: DefaultStoryProps) => {
|
|
17
|
+
const images = IMAGES.slice(0, count);
|
|
18
|
+
return (
|
|
19
|
+
<Carousel.Root count={images.length}>
|
|
20
|
+
<Carousel.Content classNames='max-w-[40rem]'>
|
|
21
|
+
<Carousel.Previous />
|
|
22
|
+
<Carousel.Viewport>
|
|
23
|
+
{images.map((src, index) => (
|
|
24
|
+
<Carousel.Slide key={src} index={index} src={src} alt={`Slide ${index + 1}`} />
|
|
25
|
+
))}
|
|
26
|
+
</Carousel.Viewport>
|
|
27
|
+
<Carousel.Next />
|
|
28
|
+
<Carousel.Indicators />
|
|
29
|
+
<Carousel.Caption>{(index) => `Slide ${index + 1} of ${images.length}`}</Carousel.Caption>
|
|
30
|
+
</Carousel.Content>
|
|
31
|
+
</Carousel.Root>
|
|
32
|
+
);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const meta = {
|
|
36
|
+
title: 'ui/react-ui-core/components/Carousel',
|
|
37
|
+
render: DefaultStory,
|
|
38
|
+
decorators: [withTheme()],
|
|
39
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
40
|
+
|
|
41
|
+
export default meta;
|
|
42
|
+
|
|
43
|
+
type Story = StoryObj<typeof meta>;
|
|
44
|
+
|
|
45
|
+
export const Default: Story = {
|
|
46
|
+
args: { count: 5 },
|
|
47
|
+
};
|