@dxos/react-ui 0.8.4-main.d05539e30a → 0.8.4-main.d9fc60f731
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/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
- package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
- package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
- package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +2403 -1562
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +9 -6
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/translations.mjs +1 -1
- package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
- package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XCFLA74M.mjs → chunk-FPVTVXND.mjs} +11 -2
- package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +2403 -1562
- 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 +9 -6
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/translations.mjs +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/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.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.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.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/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 +51 -44
- 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 +2 -6
- package/dist/types/src/components/Carousel/Carousel.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/{primitives → components}/Column/Column.d.ts.map +1 -1
- package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts.map +1 -1
- 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 +8 -8
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +9 -7
- package/dist/types/src/components/Dialog/Dialog.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/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.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.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/Input/Input.d.ts +81 -3
- 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.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.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/Treegrid.d.ts +1 -1
- package/dist/types/src/components/List/Treegrid.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 +2 -2
- package/dist/types/src/components/Main/Main.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/MediaPlayer/MediaPlayer.d.ts +9 -12
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.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 +2 -2
- 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 +1 -1
- package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
- package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts.map +1 -1
- 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.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.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 +13 -19
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.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.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 +3 -5
- package/dist/types/src/components/Splitter/Splitter.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.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.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 +13 -10
- 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 +19 -7
- package/dist/types/src/components/Toolbar/Toolbar.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.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 +5 -4
- package/dist/types/src/components/index.d.ts.map +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/hooks/useTranslationsContext.d.ts +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/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.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.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/index.d.ts +1 -1
- 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/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 +9 -0
- 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 +19 -17
- 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 +1 -1
- package/src/components/Button/IconButton.stories.tsx +50 -2
- package/src/components/Button/IconButton.theme.ts +21 -0
- 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 +40 -19
- package/src/components/Card/Card.theme.ts +93 -0
- package/src/components/Card/Card.tsx +121 -147
- package/src/components/Carousel/Carousel.tsx +2 -10
- package/src/components/Clipboard/CopyButton.tsx +1 -1
- 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 -13
- 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/IconBlock.tsx +38 -0
- package/src/components/Icon/index.ts +1 -0
- package/src/components/Image/Image.stories.tsx +1 -1
- package/src/components/Input/Input.stories.tsx +132 -29
- package/src/components/Input/Input.theme.ts +191 -0
- package/src/components/Input/Input.tsx +207 -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/List/List.theme.ts +47 -0
- package/src/components/List/List.tsx +2 -2
- package/src/components/List/ListDropIndicator.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.tsx +61 -36
- 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 +42 -4
- package/src/components/Message/Message.theme.ts +44 -0
- package/src/components/Message/Message.tsx +63 -20
- package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
- package/src/components/Panel/Panel.theme.ts +42 -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 +1 -1
- 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 +57 -55
- 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 +63 -13
- package/src/components/Tooltip/Tooltip.stories.tsx +0 -9
- package/src/components/Tooltip/Tooltip.theme.ts +19 -0
- package/src/components/Tooltip/Tooltip.tsx +4 -4
- package/src/components/Tooltip/index.ts +1 -0
- package/src/components/Tooltip/tooltipContent.ts +16 -0
- package/src/components/index.ts +5 -5
- package/src/exemplars/generics.stories.tsx +1 -2
- package/src/exemplars/slot.stories.tsx +2 -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 +1 -1
- package/src/primitives/index.ts +4 -2
- 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 +9 -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-A5QCIG5R.mjs +0 -24
- package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +0 -7
- package/dist/lib/browser/chunk-LY5XDQR5.mjs +0 -846
- package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NGKLIKP3.mjs +0 -848
- package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XCFLA74M.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/index.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/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.d.ts +0 -0
- /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/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.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,47 +5,26 @@
|
|
|
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 {
|
|
17
|
+
import { Column } from '../Column';
|
|
18
|
+
import { Icon, IconBlock, type IconBlockProps, type IconProps } from '../Icon';
|
|
26
19
|
import { Image } 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
|
//
|
|
@@ -83,7 +62,7 @@ const CardRoot = composable<HTMLDivElement, CardRootProps>(
|
|
|
83
62
|
return (
|
|
84
63
|
<Column.Root
|
|
85
64
|
asChild
|
|
86
|
-
gutter={density === '
|
|
65
|
+
gutter={density === 'lg' ? 'lg' : density === 'sm' || density === 'xs' ? 'sm' : 'md'}
|
|
87
66
|
classNames={tx('card.root', { border, fullWidth }, className)}
|
|
88
67
|
role={role ?? 'group'}
|
|
89
68
|
>
|
|
@@ -98,24 +77,29 @@ const CardRoot = composable<HTMLDivElement, CardRootProps>(
|
|
|
98
77
|
CardRoot.displayName = CARD_ROOT_NAME;
|
|
99
78
|
|
|
100
79
|
//
|
|
101
|
-
//
|
|
80
|
+
// Header
|
|
102
81
|
//
|
|
103
82
|
|
|
104
|
-
const
|
|
83
|
+
const CARD_HEADER_NAME = 'Card.Header';
|
|
105
84
|
|
|
106
|
-
type
|
|
85
|
+
type CardHeaderProps = ToolbarRootProps;
|
|
107
86
|
|
|
108
|
-
|
|
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) => {
|
|
109
93
|
const { tx } = useThemeContext();
|
|
110
94
|
|
|
111
95
|
return (
|
|
112
|
-
<Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.
|
|
96
|
+
<Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.header', {}), classNames]} ref={forwardedRef}>
|
|
113
97
|
{children}
|
|
114
98
|
</Toolbar.Root>
|
|
115
99
|
);
|
|
116
100
|
});
|
|
117
101
|
|
|
118
|
-
|
|
102
|
+
CardHeader.displayName = CARD_HEADER_NAME;
|
|
119
103
|
|
|
120
104
|
//
|
|
121
105
|
// DragHandle
|
|
@@ -127,7 +111,7 @@ type CardDragHandleProps = ToolbarDragHandleProps;
|
|
|
127
111
|
|
|
128
112
|
const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
|
|
129
113
|
return (
|
|
130
|
-
<CardIconBlock
|
|
114
|
+
<CardIconBlock>
|
|
131
115
|
<Toolbar.DragHandle {...props} ref={forwardedRef} />
|
|
132
116
|
</CardIconBlock>
|
|
133
117
|
);
|
|
@@ -136,22 +120,22 @@ const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props
|
|
|
136
120
|
CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
|
|
137
121
|
|
|
138
122
|
//
|
|
139
|
-
//
|
|
123
|
+
// ActionIconButton
|
|
140
124
|
//
|
|
141
125
|
|
|
142
|
-
const
|
|
126
|
+
const CARD_ACTION_ICON_BUTTON_NAME = 'Card.ActionIconButton';
|
|
143
127
|
|
|
144
|
-
type
|
|
128
|
+
type CardActionIconButtonProps = ToolbarActionIconButtonProps;
|
|
145
129
|
|
|
146
|
-
const
|
|
130
|
+
const CardActionIconButton = forwardRef<HTMLButtonElement, CardActionIconButtonProps>((props, forwardedRef) => {
|
|
147
131
|
return (
|
|
148
|
-
<CardIconBlock
|
|
149
|
-
<Toolbar.
|
|
132
|
+
<CardIconBlock>
|
|
133
|
+
<Toolbar.ActionIconButton {...props} ref={forwardedRef} />
|
|
150
134
|
</CardIconBlock>
|
|
151
135
|
);
|
|
152
136
|
});
|
|
153
137
|
|
|
154
|
-
|
|
138
|
+
CardActionIconButton.displayName = CARD_ACTION_ICON_BUTTON_NAME;
|
|
155
139
|
|
|
156
140
|
//
|
|
157
141
|
// Menu
|
|
@@ -159,22 +143,17 @@ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
|
|
|
159
143
|
|
|
160
144
|
const CARD_MENU_NAME = 'Card.Menu';
|
|
161
145
|
|
|
162
|
-
type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
|
|
163
|
-
|
|
164
146
|
type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
|
|
165
147
|
|
|
166
|
-
|
|
167
|
-
const { menuItems } = useContext(CardContext) ?? {};
|
|
168
|
-
const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
|
|
169
|
-
|
|
148
|
+
function CardMenu<T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) {
|
|
170
149
|
return (
|
|
171
|
-
<CardIconBlock
|
|
172
|
-
<Toolbar.Menu {...props} context={context} items={
|
|
150
|
+
<CardIconBlock>
|
|
151
|
+
<Toolbar.Menu {...props} context={context} items={items ?? []} />
|
|
173
152
|
</CardIconBlock>
|
|
174
153
|
);
|
|
175
|
-
}
|
|
154
|
+
}
|
|
176
155
|
|
|
177
|
-
|
|
156
|
+
CardMenu.displayName = CARD_MENU_NAME;
|
|
178
157
|
|
|
179
158
|
//
|
|
180
159
|
// Icon
|
|
@@ -182,15 +161,15 @@ const CardMenu = <T extends any | void = void>({ context, items, ...props }: Car
|
|
|
182
161
|
|
|
183
162
|
const CARD_ICON_NAME = 'Card.Icon';
|
|
184
163
|
|
|
185
|
-
|
|
164
|
+
function CardIcon(props: IconProps) {
|
|
186
165
|
return (
|
|
187
166
|
<CardIconBlock>
|
|
188
167
|
<Icon {...props} />
|
|
189
168
|
</CardIconBlock>
|
|
190
169
|
);
|
|
191
|
-
}
|
|
170
|
+
}
|
|
192
171
|
|
|
193
|
-
|
|
172
|
+
CardIcon.displayName = CARD_ICON_NAME;
|
|
194
173
|
|
|
195
174
|
//
|
|
196
175
|
// IconBlock
|
|
@@ -198,17 +177,9 @@ const CardIcon = (props: IconProps) => {
|
|
|
198
177
|
|
|
199
178
|
const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
|
|
200
179
|
|
|
201
|
-
const CardIconBlock = forwardRef<HTMLDivElement,
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return (
|
|
206
|
-
<div {...props} className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
|
|
207
|
-
{children}
|
|
208
|
-
</div>
|
|
209
|
-
);
|
|
210
|
-
},
|
|
211
|
-
);
|
|
180
|
+
const CardIconBlock = forwardRef<HTMLDivElement, IconBlockProps>((props, forwardedRef) => {
|
|
181
|
+
return <IconBlock {...props} ref={forwardedRef} />;
|
|
182
|
+
});
|
|
212
183
|
|
|
213
184
|
CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
|
|
214
185
|
|
|
@@ -233,48 +204,24 @@ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, fo
|
|
|
233
204
|
CardTitle.displayName = CARD_TITLE_NAME;
|
|
234
205
|
|
|
235
206
|
//
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
|
|
239
|
-
const CARD_CONTENT_NAME = 'Card.Content';
|
|
240
|
-
|
|
241
|
-
const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
242
|
-
const { className, ...rest } = composableProps(props);
|
|
243
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
244
|
-
const { tx } = useThemeContext();
|
|
245
|
-
|
|
246
|
-
return (
|
|
247
|
-
<Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
|
|
248
|
-
{children}
|
|
249
|
-
</Comp>
|
|
250
|
-
);
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
CardContent.displayName = CARD_CONTENT_NAME;
|
|
254
|
-
|
|
255
|
-
//
|
|
256
|
-
// Row
|
|
207
|
+
// Body
|
|
257
208
|
//
|
|
258
209
|
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
type CardRowProps = { icon?: string; fullWidth?: boolean };
|
|
210
|
+
const CARD_BODY_NAME = 'Card.Body';
|
|
262
211
|
|
|
263
|
-
|
|
264
|
-
const CardRow = slottable<HTMLDivElement, CardRowProps>(({ children, asChild, icon, ...props }, forwardedRef) => {
|
|
212
|
+
const CardBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
265
213
|
const { className, ...rest } = composableProps(props);
|
|
266
214
|
const Comp = asChild ? Slot : Primitive.div;
|
|
267
215
|
const { tx } = useThemeContext();
|
|
268
216
|
|
|
269
217
|
return (
|
|
270
|
-
<Comp {...rest} className={tx('card.
|
|
271
|
-
{(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
|
|
218
|
+
<Comp {...rest} className={tx('card.body', {}, className)} ref={forwardedRef}>
|
|
272
219
|
{children}
|
|
273
220
|
</Comp>
|
|
274
221
|
);
|
|
275
222
|
});
|
|
276
223
|
|
|
277
|
-
|
|
224
|
+
CardBody.displayName = CARD_BODY_NAME;
|
|
278
225
|
|
|
279
226
|
//
|
|
280
227
|
// Section
|
|
@@ -282,53 +229,81 @@ CardRow.displayName = CARD_ROW_NAME;
|
|
|
282
229
|
|
|
283
230
|
const CARD_SECTION_NAME = 'Card.Section';
|
|
284
231
|
|
|
232
|
+
type CardSectionProps = { title?: ReactNode };
|
|
233
|
+
|
|
285
234
|
/**
|
|
286
|
-
*
|
|
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.
|
|
287
239
|
*/
|
|
288
|
-
const CardSection = slottable<HTMLDivElement>(
|
|
289
|
-
|
|
290
|
-
|
|
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();
|
|
291
246
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
})
|
|
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
|
+
);
|
|
298
265
|
|
|
299
266
|
CardSection.displayName = CARD_SECTION_NAME;
|
|
300
267
|
|
|
301
268
|
//
|
|
302
|
-
//
|
|
269
|
+
// Row
|
|
303
270
|
//
|
|
304
271
|
|
|
305
|
-
const
|
|
272
|
+
const CARD_ROW_NAME = 'Card.Row';
|
|
306
273
|
|
|
307
|
-
type
|
|
274
|
+
type CardRowProps = { icon?: string | JSX.Element; fullWidth?: boolean };
|
|
308
275
|
|
|
309
276
|
/**
|
|
310
|
-
*
|
|
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.
|
|
311
282
|
*/
|
|
312
|
-
const
|
|
313
|
-
({ children, asChild,
|
|
283
|
+
const CardRow = slottable<HTMLDivElement, CardRowProps>(
|
|
284
|
+
({ children, asChild, icon: iconProp, fullWidth, ...props }, forwardedRef) => {
|
|
285
|
+
const { tx } = useThemeContext();
|
|
314
286
|
const { className, ...rest } = composableProps(props);
|
|
315
287
|
const Comp = asChild ? Slot : Primitive.div;
|
|
316
|
-
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
|
+
);
|
|
317
296
|
|
|
318
297
|
return (
|
|
319
|
-
<Comp
|
|
320
|
-
{
|
|
321
|
-
role={role ?? 'heading'}
|
|
322
|
-
className={tx('card.heading', { variant }, className)}
|
|
323
|
-
ref={forwardedRef}
|
|
324
|
-
>
|
|
298
|
+
<Comp {...rest} className={tx('card.row', { fullWidth }, className)} ref={forwardedRef}>
|
|
299
|
+
{!fullWidth && icon}
|
|
325
300
|
{children}
|
|
326
301
|
</Comp>
|
|
327
302
|
);
|
|
328
303
|
},
|
|
329
304
|
);
|
|
330
305
|
|
|
331
|
-
|
|
306
|
+
CardRow.displayName = CARD_ROW_NAME;
|
|
332
307
|
|
|
333
308
|
//
|
|
334
309
|
// Text
|
|
@@ -340,9 +315,9 @@ type CardTextProps = { truncate?: boolean; variant?: 'default' | 'description' }
|
|
|
340
315
|
|
|
341
316
|
const CardText = slottable<HTMLDivElement, CardTextProps>(
|
|
342
317
|
({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
|
|
318
|
+
const { tx } = useThemeContext();
|
|
343
319
|
const { className, ...rest } = composableProps(props);
|
|
344
320
|
const Comp = asChild ? Slot : Primitive.div;
|
|
345
|
-
const { tx } = useThemeContext();
|
|
346
321
|
|
|
347
322
|
return (
|
|
348
323
|
<Comp {...rest} role={role ?? 'none'} className={tx('card.text', { variant }, className)} ref={forwardedRef}>
|
|
@@ -360,13 +335,13 @@ CardText.displayName = CARD_TEXT_NAME;
|
|
|
360
335
|
|
|
361
336
|
const CARD_HTML_NAME = 'Card.Html';
|
|
362
337
|
|
|
363
|
-
type CardHtmlProps = { html
|
|
338
|
+
type CardHtmlProps = { html?: string; variant?: 'default' | 'description' };
|
|
364
339
|
|
|
365
340
|
/**
|
|
366
341
|
* Renders sanitized HTML content inside a card text slot.
|
|
367
342
|
* Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
|
|
368
343
|
*/
|
|
369
|
-
|
|
344
|
+
function CardHtml({ html = '', variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) {
|
|
370
345
|
const { tx } = useThemeContext();
|
|
371
346
|
const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
|
|
372
347
|
|
|
@@ -378,9 +353,9 @@ const CardHtml = ({ html, variant = 'default', ...props }: CardHtmlProps & Theme
|
|
|
378
353
|
dangerouslySetInnerHTML={{ __html: sanitized }}
|
|
379
354
|
/>
|
|
380
355
|
);
|
|
381
|
-
}
|
|
356
|
+
}
|
|
382
357
|
|
|
383
|
-
|
|
358
|
+
CardHtml.displayName = CARD_HTML_NAME;
|
|
384
359
|
|
|
385
360
|
//
|
|
386
361
|
// Poster
|
|
@@ -402,7 +377,7 @@ type CardPosterProps = ThemedClassName<
|
|
|
402
377
|
} & Partial<{ image: string; icon: string }>
|
|
403
378
|
>;
|
|
404
379
|
|
|
405
|
-
|
|
380
|
+
function CardPoster(props: CardPosterProps) {
|
|
406
381
|
const { tx } = useThemeContext();
|
|
407
382
|
const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';
|
|
408
383
|
|
|
@@ -426,9 +401,9 @@ const CardPoster = (props: CardPosterProps) => {
|
|
|
426
401
|
</div>
|
|
427
402
|
);
|
|
428
403
|
}
|
|
429
|
-
}
|
|
404
|
+
}
|
|
430
405
|
|
|
431
|
-
|
|
406
|
+
CardPoster.displayName = CARD_POSTER_NAME;
|
|
432
407
|
|
|
433
408
|
//
|
|
434
409
|
// Action
|
|
@@ -438,7 +413,7 @@ const CARD_ACTION_NAME = 'Card.Action';
|
|
|
438
413
|
|
|
439
414
|
type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
|
|
440
415
|
|
|
441
|
-
|
|
416
|
+
function CardAction({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) {
|
|
442
417
|
const { tx } = useThemeContext();
|
|
443
418
|
return (
|
|
444
419
|
<Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
|
|
@@ -447,9 +422,9 @@ const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onCl
|
|
|
447
422
|
{actionIcon && <CardIcon icon={actionIcon} size={4} />}
|
|
448
423
|
</Button>
|
|
449
424
|
);
|
|
450
|
-
}
|
|
425
|
+
}
|
|
451
426
|
|
|
452
|
-
|
|
427
|
+
CardAction.displayName = CARD_ACTION_NAME;
|
|
453
428
|
|
|
454
429
|
//
|
|
455
430
|
// Link
|
|
@@ -459,7 +434,7 @@ const CARD_LINK_NAME = 'Card.Link';
|
|
|
459
434
|
|
|
460
435
|
type CardLinkProps = { label: string; href: string };
|
|
461
436
|
|
|
462
|
-
|
|
437
|
+
function CardLink({ label, href }: CardLinkProps) {
|
|
463
438
|
const { tx } = useThemeContext();
|
|
464
439
|
return (
|
|
465
440
|
<a className={tx('card.link', {})} data-variant='ghost' href={href} target='_blank' rel='noreferrer'>
|
|
@@ -468,9 +443,9 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
468
443
|
<CardIcon classNames='invisible group-hover:visible' icon='ph--arrow-square-out--regular' />
|
|
469
444
|
</a>
|
|
470
445
|
);
|
|
471
|
-
}
|
|
446
|
+
}
|
|
472
447
|
|
|
473
|
-
|
|
448
|
+
CardLink.displayName = CARD_LINK_NAME;
|
|
474
449
|
|
|
475
450
|
//
|
|
476
451
|
// Card
|
|
@@ -479,24 +454,23 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
479
454
|
export const Card = {
|
|
480
455
|
Root: CardRoot,
|
|
481
456
|
|
|
482
|
-
//
|
|
483
|
-
|
|
484
|
-
ToolbarIconButton: Toolbar.IconButton,
|
|
485
|
-
ToolbarSeparator: Toolbar.Separator,
|
|
457
|
+
// Header
|
|
458
|
+
Header: CardHeader,
|
|
486
459
|
|
|
487
|
-
//
|
|
460
|
+
// Header parts
|
|
488
461
|
IconBlock: CardIconBlock,
|
|
489
462
|
DragHandle: CardDragHandle,
|
|
490
|
-
|
|
463
|
+
ActionIconButton: CardActionIconButton,
|
|
491
464
|
Menu: CardMenu,
|
|
492
465
|
Icon: CardIcon,
|
|
493
466
|
Title: CardTitle,
|
|
494
467
|
|
|
495
|
-
//
|
|
496
|
-
|
|
497
|
-
Row: CardRow,
|
|
468
|
+
// Body
|
|
469
|
+
Body: CardBody,
|
|
498
470
|
Section: CardSection,
|
|
499
|
-
|
|
471
|
+
Row: CardRow,
|
|
472
|
+
|
|
473
|
+
// Body parts
|
|
500
474
|
Text: CardText,
|
|
501
475
|
Html: CardHtml,
|
|
502
476
|
Poster: CardPoster,
|
|
@@ -505,10 +479,10 @@ export const Card = {
|
|
|
505
479
|
};
|
|
506
480
|
|
|
507
481
|
export type {
|
|
508
|
-
CardContextValue,
|
|
509
482
|
CardRootProps,
|
|
510
|
-
|
|
483
|
+
CardHeaderProps,
|
|
511
484
|
CardDragHandleProps,
|
|
512
|
-
|
|
485
|
+
CardActionIconButtonProps,
|
|
513
486
|
CardMenuProps,
|
|
487
|
+
CardSectionProps,
|
|
514
488
|
};
|
|
@@ -17,11 +17,11 @@ import React, {
|
|
|
17
17
|
|
|
18
18
|
import { mx } from '@dxos/ui-theme';
|
|
19
19
|
|
|
20
|
+
import { useTranslation } from '../../primitives';
|
|
20
21
|
import { translationKey } from '../../translations';
|
|
21
22
|
import { type ThemedClassName } from '../../util';
|
|
22
23
|
import { IconButton } from '../Button';
|
|
23
24
|
import { MediaPlayer, type MediaKind } from '../MediaPlayer';
|
|
24
|
-
import { useTranslation } from '../ThemeProvider';
|
|
25
25
|
|
|
26
26
|
// TODO(burdon): Move per-element class strings to `@dxos/ui-theme` (theme tokens)
|
|
27
27
|
// so callers can re-theme via the same mechanism the rest of `react-ui` uses.
|
|
@@ -119,7 +119,7 @@ const CarouselRoot = ({
|
|
|
119
119
|
* its content height. With no parent height constraint, the `1fr` row simply tracks
|
|
120
120
|
* row-1 content — preserving the existing aspect-video behaviour for unbounded use.
|
|
121
121
|
*/}
|
|
122
|
-
{/* TODO(burdon): Move to
|
|
122
|
+
{/* TODO(burdon): Move to Carousel.theme.ts */}
|
|
123
123
|
<div
|
|
124
124
|
className={mx(
|
|
125
125
|
'w-full grid grid-cols-[min-content_1fr_min-content] grid-rows-[minmax(0,1fr)_auto] gap-4 items-center',
|
|
@@ -192,10 +192,6 @@ export type CarouselSlideProps = ThemedClassName<{
|
|
|
192
192
|
kind?: MediaKind;
|
|
193
193
|
/** Accessible label / `<img alt>` fallback. */
|
|
194
194
|
alt?: string;
|
|
195
|
-
/** Class names forwarded to the inner `<img>` when MediaPlayer resolves to an image. */
|
|
196
|
-
imgClassNames?: string;
|
|
197
|
-
/** Class names forwarded to the inner `<video>` / `<audio>` / `<iframe>`. */
|
|
198
|
-
mediaClassNames?: string;
|
|
199
195
|
controls?: boolean;
|
|
200
196
|
autoPlay?: boolean;
|
|
201
197
|
loop?: boolean;
|
|
@@ -209,8 +205,6 @@ const CarouselSlide = ({
|
|
|
209
205
|
src,
|
|
210
206
|
kind,
|
|
211
207
|
alt,
|
|
212
|
-
imgClassNames,
|
|
213
|
-
mediaClassNames,
|
|
214
208
|
controls,
|
|
215
209
|
autoPlay,
|
|
216
210
|
loop,
|
|
@@ -229,8 +223,6 @@ const CarouselSlide = ({
|
|
|
229
223
|
kind={kind}
|
|
230
224
|
alt={alt}
|
|
231
225
|
classNames='w-full h-full'
|
|
232
|
-
imgClassNames={mx('object-cover', imgClassNames)}
|
|
233
|
-
mediaClassNames={mediaClassNames}
|
|
234
226
|
controls={controls}
|
|
235
227
|
autoPlay={autoPlay}
|
|
236
228
|
loop={loop}
|
|
@@ -6,9 +6,9 @@ import React from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { mx, osTranslations } from '@dxos/ui-theme';
|
|
8
8
|
|
|
9
|
+
import { useTranslation } from '../../primitives';
|
|
9
10
|
import { Button, type ButtonProps, IconButton } from '../Button';
|
|
10
11
|
import { Icon, type IconProps } from '../Icon';
|
|
11
|
-
import { useTranslation } from '../ThemeProvider';
|
|
12
12
|
import { type TooltipScopedProps, useTooltipContext } from '../Tooltip';
|
|
13
13
|
import { useClipboard } from './ClipboardProvider';
|
|
14
14
|
|
|
@@ -71,7 +71,7 @@ const DefaultStory = () => {
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
const meta: Meta = {
|
|
74
|
-
title: 'ui/react-ui-core/
|
|
74
|
+
title: 'ui/react-ui-core/components/Column',
|
|
75
75
|
render: DefaultStory,
|
|
76
76
|
decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-[25rem]' })],
|
|
77
77
|
parameters: {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { mx } from '@dxos/ui-theme';
|
|
6
|
+
import { type ComponentFunction } from '@dxos/ui-types';
|
|
7
|
+
|
|
8
|
+
import { withColumn } from './withColumn';
|
|
9
|
+
|
|
10
|
+
export type ColumnStyleProps = {};
|
|
11
|
+
|
|
12
|
+
const root: ComponentFunction<ColumnStyleProps> = (_, ...etc) => {
|
|
13
|
+
return mx('dx-column-root grid', ...etc);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Three-column icon-slot row: spans all 3 columns of the parent Column.Root grid.
|
|
18
|
+
* Uses CSS subgrid to inherit column sizing from the parent Column.
|
|
19
|
+
* Children map to: [col-1: icon/slot] [col-2: content] [col-3: icon/action].
|
|
20
|
+
* NOTE: Must not use overflow-hidden here since it will clip input focus rings.
|
|
21
|
+
*/
|
|
22
|
+
const row: ComponentFunction<ColumnStyleProps> = (_, ...etc) => {
|
|
23
|
+
return mx('col-span-3 grid grid-cols-subgrid', ...etc);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Bleed placement: spans all 3 columns of the parent Column.Root grid (gutter-to-gutter).
|
|
28
|
+
* Use for `ScrollArea`, full-width dividers, tables, or any content that should ignore gutters.
|
|
29
|
+
*/
|
|
30
|
+
const bleed: ComponentFunction<ColumnStyleProps> = (_, ...etc) => {
|
|
31
|
+
return mx('col-span-full grid grid-cols-subgrid min-h-0', ...etc);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Center placement: places the element in column 2 (the central track between gutters) of the
|
|
36
|
+
* parent Column.Root grid. Does NOT use subgrid — placement is explicit on this element only.
|
|
37
|
+
* Safe to nest arbitrary compound components (including those that render `display: contents`).
|
|
38
|
+
*/
|
|
39
|
+
const center: ComponentFunction<ColumnStyleProps> = (_, ...etc) => {
|
|
40
|
+
return mx(withColumn.center(), 'min-h-0', ...etc);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const columnTheme = {
|
|
44
|
+
root,
|
|
45
|
+
row,
|
|
46
|
+
bleed,
|
|
47
|
+
center,
|
|
48
|
+
};
|
|
@@ -6,10 +6,10 @@ import { Primitive } from '@radix-ui/react-primitive';
|
|
|
6
6
|
import { Slot } from '@radix-ui/react-slot';
|
|
7
7
|
import React, { type CSSProperties } from 'react';
|
|
8
8
|
|
|
9
|
-
import { composableProps, slottable } from '@dxos/ui-theme';
|
|
10
9
|
import { type SlottableProps } from '@dxos/ui-types';
|
|
11
10
|
|
|
12
11
|
import { useThemeContext } from '../../hooks';
|
|
12
|
+
import { composableProps, slottable } from '../../util';
|
|
13
13
|
|
|
14
14
|
//
|
|
15
15
|
// Root
|
|
@@ -57,6 +57,7 @@ const ColumnRoot = slottable<HTMLDivElement, ColumnRootProps>(
|
|
|
57
57
|
role={role ?? 'none'}
|
|
58
58
|
style={
|
|
59
59
|
{
|
|
60
|
+
...rest.style,
|
|
60
61
|
'--gutter': gutterSize,
|
|
61
62
|
'--dx-col': '2 / span 1',
|
|
62
63
|
gridTemplateColumns: [gutterSize, 'minmax(0,1fr)', gutterSize].join(' '),
|