@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
|
@@ -25,18 +25,20 @@ import React, {
|
|
|
25
25
|
import { addEventListener } from '@dxos/async';
|
|
26
26
|
import { log } from '@dxos/log';
|
|
27
27
|
import { useForwardedRef, useMediaQuery } from '@dxos/react-hooks';
|
|
28
|
-
import {
|
|
28
|
+
import { osTranslations } from '@dxos/ui-theme';
|
|
29
29
|
|
|
30
30
|
import { useThemeContext } from '../../hooks';
|
|
31
|
+
import { type Label, toLocalizedString, useTranslation } from '../../primitives';
|
|
32
|
+
import { type MainStyleProps } from '../../theme';
|
|
31
33
|
import { type ThemedClassName } from '../../util';
|
|
32
|
-
import { type Label, toLocalizedString, useTranslation } from '../ThemeProvider';
|
|
33
34
|
import { useSwipeToDismiss } from './useSwipeToDismiss';
|
|
34
35
|
|
|
35
36
|
const MAIN_NAME = 'Main';
|
|
36
|
-
const MAIN_ROOT_NAME = '
|
|
37
|
-
const MAIN_OVERLAY_NAME = '
|
|
38
|
-
const
|
|
39
|
-
const
|
|
37
|
+
const MAIN_ROOT_NAME = 'Main.Root';
|
|
38
|
+
const MAIN_OVERLAY_NAME = 'Main.Overlay';
|
|
39
|
+
const MAIN_CONTENT_NAME = 'Main.Content';
|
|
40
|
+
const NAVIGATION_SIDEBAR_NAME = 'Main.NavigationSidebar';
|
|
41
|
+
const COMPLEMENTARY_SIDEBAR_NAME = 'Main.ComplementarySidebar';
|
|
40
42
|
|
|
41
43
|
const handleOpenAutoFocus = (event: Event) => {
|
|
42
44
|
!document.body.hasAttribute('data-w-keyboard') && event.preventDefault();
|
|
@@ -412,7 +414,7 @@ const MainContent = forwardRef<HTMLDivElement, MainContentProps>(
|
|
|
412
414
|
},
|
|
413
415
|
);
|
|
414
416
|
|
|
415
|
-
MainContent.displayName =
|
|
417
|
+
MainContent.displayName = MAIN_CONTENT_NAME;
|
|
416
418
|
|
|
417
419
|
//
|
|
418
420
|
// Main
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React from 'react';
|
|
5
|
+
import React, { useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { mx } from '@dxos/ui-theme';
|
|
8
8
|
|
|
@@ -10,6 +10,17 @@ import { type ThemedClassName } from '../../util';
|
|
|
10
10
|
|
|
11
11
|
export type MediaKind = 'video' | 'audio';
|
|
12
12
|
|
|
13
|
+
export type MediaFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
|
|
14
|
+
|
|
15
|
+
/** Static map to keep Tailwind's class scanner happy (no dynamic `object-${fit}`). */
|
|
16
|
+
const FIT_CLASS: Record<MediaFit, string> = {
|
|
17
|
+
cover: 'object-cover',
|
|
18
|
+
contain: 'object-contain',
|
|
19
|
+
fill: 'object-fill',
|
|
20
|
+
none: 'object-none',
|
|
21
|
+
'scale-down': 'object-scale-down',
|
|
22
|
+
};
|
|
23
|
+
|
|
13
24
|
const VIDEO_EXTENSIONS = ['.mp4', '.webm', '.ogv', '.mov', '.m4v'];
|
|
14
25
|
const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.m4a', '.aac', '.flac'];
|
|
15
26
|
|
|
@@ -40,43 +51,40 @@ export const detectMediaKind = (src: string): MediaKind | undefined => {
|
|
|
40
51
|
* Heuristic match for URLs that should render as native `<video>` / `<audio>`
|
|
41
52
|
* (i.e. URLs ending in a recognised media extension).
|
|
42
53
|
*
|
|
43
|
-
* NB:
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* via `<iframe>` instead.
|
|
54
|
+
* NB: Cloudflare Stream embed URLs serve an HTML player page, **not** a media
|
|
55
|
+
* stream, so they cannot be loaded via `<video>`. Those are detected by
|
|
56
|
+
* {@link isCloudflareStreamEmbed} and rendered via `<iframe>` instead.
|
|
47
57
|
*/
|
|
48
58
|
export const isEmbedUrl = (src: string): boolean => detectMediaKind(src) !== undefined;
|
|
49
59
|
|
|
50
|
-
/**
|
|
51
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Match Cloudflare Stream `/iframe` embed URLs of the form
|
|
62
|
+
* `https://customer-<code>.cloudflarestream.com/<32-hex-uid>/iframe[?…]`.
|
|
63
|
+
*/
|
|
64
|
+
const CLOUDFLARE_STREAM_IFRAME_PATTERN =
|
|
65
|
+
/^https:\/\/[a-z0-9-]+\.cloudflarestream\.com\/[a-f0-9]{32}\/iframe(?:[/?#]|$)/i;
|
|
52
66
|
|
|
53
|
-
const
|
|
54
|
-
const pathAndQuery = src.split('#', 1)[0]!;
|
|
55
|
-
return LEGACY_IFRAME_PATH_PATTERN.test(pathAndQuery);
|
|
56
|
-
};
|
|
67
|
+
const isCloudflareStreamEmbed = (src: string): boolean => CLOUDFLARE_STREAM_IFRAME_PATTERN.test(src);
|
|
57
68
|
|
|
58
69
|
export type MediaPlayerProps = ThemedClassName<{
|
|
59
70
|
src: string;
|
|
71
|
+
alt?: string;
|
|
60
72
|
/** Override auto-detection. When omitted, `detectMediaKind(src)` is used and falls back to 'video'. */
|
|
61
73
|
kind?: MediaKind;
|
|
62
74
|
controls?: boolean;
|
|
63
75
|
autoPlay?: boolean;
|
|
64
76
|
loop?: boolean;
|
|
65
77
|
muted?: boolean;
|
|
66
|
-
/** Accessible label for the `<video>` / `<audio>` element. */
|
|
67
|
-
alt?: string;
|
|
68
78
|
/** Defaults to 'anonymous' for cross-origin sources (e.g. signed S3 URLs). */
|
|
69
79
|
crossOrigin?: 'anonymous' | 'use-credentials' | '';
|
|
70
|
-
/**
|
|
71
|
-
|
|
72
|
-
/** Additional classes applied only when rendering native media or `<iframe>`. */
|
|
73
|
-
mediaClassNames?: string;
|
|
80
|
+
/** CSS `object-fit` for `<img>` and `<video>`. Ignored for `<iframe>`/`<audio>`. Defaults to 'cover'. */
|
|
81
|
+
fit?: MediaFit;
|
|
74
82
|
}>;
|
|
75
83
|
|
|
76
84
|
/**
|
|
77
85
|
* Renders a media URL using the appropriate element:
|
|
78
86
|
* - Direct media URLs (mp4, mp3, …) → native `<video>` / `<audio>`.
|
|
79
|
-
* -
|
|
87
|
+
* - Cloudflare Stream `/iframe` embed URLs → `<iframe>`.
|
|
80
88
|
* - Everything else → `<img>` that hides itself on load failure (broken images
|
|
81
89
|
* are common in feeds and the placeholder is uglier than nothing).
|
|
82
90
|
*/
|
|
@@ -90,15 +98,15 @@ export const MediaPlayer = ({
|
|
|
90
98
|
muted = false,
|
|
91
99
|
alt,
|
|
92
100
|
crossOrigin = 'anonymous',
|
|
93
|
-
|
|
94
|
-
mediaClassNames,
|
|
101
|
+
fit = 'cover',
|
|
95
102
|
}: MediaPlayerProps) => {
|
|
103
|
+
const fitClass = FIT_CLASS[fit];
|
|
96
104
|
if (isEmbedUrl(src)) {
|
|
97
105
|
const resolved = kind ?? detectMediaKind(src) ?? 'video';
|
|
98
106
|
if (resolved === 'audio') {
|
|
99
107
|
return (
|
|
100
108
|
<audio
|
|
101
|
-
className={mx('w-full', classNames
|
|
109
|
+
className={mx('w-full', classNames)}
|
|
102
110
|
src={src}
|
|
103
111
|
controls={controls}
|
|
104
112
|
autoPlay={autoPlay}
|
|
@@ -112,7 +120,7 @@ export const MediaPlayer = ({
|
|
|
112
120
|
|
|
113
121
|
return (
|
|
114
122
|
<video
|
|
115
|
-
className={mx('
|
|
123
|
+
className={mx('max-w-full max-h-full aspect-video', fitClass, classNames)}
|
|
116
124
|
src={src}
|
|
117
125
|
controls={controls}
|
|
118
126
|
autoPlay={autoPlay}
|
|
@@ -124,30 +132,47 @@ export const MediaPlayer = ({
|
|
|
124
132
|
);
|
|
125
133
|
}
|
|
126
134
|
|
|
127
|
-
if (
|
|
128
|
-
return
|
|
129
|
-
<iframe
|
|
130
|
-
src={src}
|
|
131
|
-
title={alt ?? 'Embedded media'}
|
|
132
|
-
loading='lazy'
|
|
133
|
-
className={mx('border-none', classNames, mediaClassNames)}
|
|
134
|
-
sandbox={DEFAULT_IFRAME_SANDBOX}
|
|
135
|
-
referrerPolicy='no-referrer'
|
|
136
|
-
allow='accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;'
|
|
137
|
-
allowFullScreen
|
|
138
|
-
/>
|
|
139
|
-
);
|
|
135
|
+
if (isCloudflareStreamEmbed(src)) {
|
|
136
|
+
return <IframePlayer key={src} classNames={classNames} src={src} alt={alt} />;
|
|
140
137
|
}
|
|
141
138
|
|
|
142
139
|
return (
|
|
143
140
|
<img
|
|
141
|
+
className={mx(fitClass, classNames)}
|
|
144
142
|
src={src}
|
|
145
143
|
alt={alt ?? ''}
|
|
146
144
|
loading='lazy'
|
|
147
|
-
className={mx(classNames, imgClassNames)}
|
|
148
145
|
onError={(event) => {
|
|
149
146
|
event.currentTarget.style.display = 'none';
|
|
150
147
|
}}
|
|
151
148
|
/>
|
|
152
149
|
);
|
|
153
150
|
};
|
|
151
|
+
|
|
152
|
+
type IframePlayerProps = ThemedClassName<{
|
|
153
|
+
src: string;
|
|
154
|
+
alt?: string;
|
|
155
|
+
}>;
|
|
156
|
+
|
|
157
|
+
const IframePlayer = ({ src, alt, classNames }: IframePlayerProps) => {
|
|
158
|
+
const [loaded, setLoaded] = useState(false);
|
|
159
|
+
return (
|
|
160
|
+
<div className={mx('relative bg-baseSurface', classNames)}>
|
|
161
|
+
<iframe
|
|
162
|
+
src={src}
|
|
163
|
+
title={alt ?? 'Embedded media'}
|
|
164
|
+
loading='lazy'
|
|
165
|
+
className={mx(
|
|
166
|
+
'border-none w-full h-full transition-opacity duration-150',
|
|
167
|
+
loaded ? 'opacity-100' : 'opacity-0',
|
|
168
|
+
)}
|
|
169
|
+
style={{ colorScheme: 'dark' }}
|
|
170
|
+
sandbox={DEFAULT_IFRAME_SANDBOX}
|
|
171
|
+
referrerPolicy='no-referrer'
|
|
172
|
+
allow='accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;'
|
|
173
|
+
allowFullScreen
|
|
174
|
+
onLoad={() => setLoaded(true)}
|
|
175
|
+
/>
|
|
176
|
+
</div>
|
|
177
|
+
);
|
|
178
|
+
};
|
|
@@ -107,7 +107,7 @@ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
|
|
|
107
107
|
// DropdownMenuTrigger
|
|
108
108
|
//
|
|
109
109
|
|
|
110
|
-
const TRIGGER_NAME = '
|
|
110
|
+
const TRIGGER_NAME = 'DropdownMenu.Trigger';
|
|
111
111
|
|
|
112
112
|
type DropdownMenuTriggerElement = ComponentRef<typeof Primitive.button>;
|
|
113
113
|
type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
@@ -172,7 +172,7 @@ DropdownMenuTrigger.displayName = TRIGGER_NAME;
|
|
|
172
172
|
// DropdownMenuVirtualTrigger
|
|
173
173
|
//
|
|
174
174
|
|
|
175
|
-
const VIRTUAL_TRIGGER_NAME = '
|
|
175
|
+
const VIRTUAL_TRIGGER_NAME = 'DropdownMenu.VirtualTrigger';
|
|
176
176
|
|
|
177
177
|
type DropdownMenuVirtualTriggerProps = {
|
|
178
178
|
virtualRef: RefObject<DropdownMenuTriggerElement | null>;
|
|
@@ -196,7 +196,7 @@ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
|
|
|
196
196
|
// DropdownMenuPortal
|
|
197
197
|
//
|
|
198
198
|
|
|
199
|
-
const PORTAL_NAME = '
|
|
199
|
+
const PORTAL_NAME = 'DropdownMenu.Portal';
|
|
200
200
|
|
|
201
201
|
type MenuPortalProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;
|
|
202
202
|
type DropdownMenuPortalProps = MenuPortalProps;
|
|
@@ -233,7 +233,7 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
|
|
|
233
233
|
// DropdownMenuContent
|
|
234
234
|
//
|
|
235
235
|
|
|
236
|
-
const CONTENT_NAME = '
|
|
236
|
+
const CONTENT_NAME = 'DropdownMenu.Content';
|
|
237
237
|
|
|
238
238
|
type DropdownMenuContentElement = ComponentRef<typeof MenuPrimitive.Content>;
|
|
239
239
|
type MenuContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Content>>;
|
|
@@ -312,7 +312,7 @@ DropdownMenuContent.displayName = CONTENT_NAME;
|
|
|
312
312
|
// DropdownMenuGroup
|
|
313
313
|
//
|
|
314
314
|
|
|
315
|
-
const GROUP_NAME = '
|
|
315
|
+
const GROUP_NAME = 'DropdownMenu.Group';
|
|
316
316
|
|
|
317
317
|
type DropdownMenuGroupElement = ComponentRef<typeof MenuPrimitive.Group>;
|
|
318
318
|
type MenuGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;
|
|
@@ -332,7 +332,7 @@ DropdownMenuGroup.displayName = GROUP_NAME;
|
|
|
332
332
|
// DropdownMenuLabel
|
|
333
333
|
//
|
|
334
334
|
|
|
335
|
-
const LABEL_NAME = '
|
|
335
|
+
const LABEL_NAME = 'DropdownMenu.Label';
|
|
336
336
|
|
|
337
337
|
type DropdownMenuLabelElement = ComponentRef<typeof MenuPrimitive.Label>;
|
|
338
338
|
type MenuLabelProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Label>>;
|
|
@@ -360,7 +360,7 @@ DropdownMenuGroupLabel.displayName = LABEL_NAME;
|
|
|
360
360
|
// DropdownMenuItem
|
|
361
361
|
//
|
|
362
362
|
|
|
363
|
-
const ITEM_NAME = '
|
|
363
|
+
const ITEM_NAME = 'DropdownMenu.Item';
|
|
364
364
|
|
|
365
365
|
type DropdownMenuItemElement = ComponentRef<typeof MenuPrimitive.Item>;
|
|
366
366
|
type MenuItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Item>>;
|
|
@@ -388,7 +388,7 @@ DropdownMenuItem.displayName = ITEM_NAME;
|
|
|
388
388
|
// DropdownMenuCheckboxItem
|
|
389
389
|
//
|
|
390
390
|
|
|
391
|
-
const CHECKBOX_ITEM_NAME = '
|
|
391
|
+
const CHECKBOX_ITEM_NAME = 'DropdownMenu.CheckboxItem';
|
|
392
392
|
|
|
393
393
|
type DropdownMenuCheckboxItemElement = ComponentRef<typeof MenuPrimitive.CheckboxItem>;
|
|
394
394
|
type MenuCheckboxItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>>;
|
|
@@ -416,7 +416,7 @@ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
|
|
|
416
416
|
// DropdownMenuRadioGroup
|
|
417
417
|
//
|
|
418
418
|
|
|
419
|
-
const RADIO_GROUP_NAME = '
|
|
419
|
+
const RADIO_GROUP_NAME = 'DropdownMenu.RadioGroup';
|
|
420
420
|
|
|
421
421
|
type DropdownMenuRadioGroupElement = ComponentRef<typeof MenuPrimitive.RadioGroup>;
|
|
422
422
|
type MenuRadioGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;
|
|
@@ -436,7 +436,7 @@ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
|
|
|
436
436
|
// DropdownMenuRadioItem
|
|
437
437
|
//
|
|
438
438
|
|
|
439
|
-
const RADIO_ITEM_NAME = '
|
|
439
|
+
const RADIO_ITEM_NAME = 'DropdownMenu.RadioItem';
|
|
440
440
|
|
|
441
441
|
type DropdownMenuRadioItemElement = ComponentRef<typeof MenuPrimitive.RadioItem>;
|
|
442
442
|
type MenuRadioItemProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;
|
|
@@ -464,7 +464,7 @@ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
|
|
|
464
464
|
// DropdownMenuItemIndicator
|
|
465
465
|
//
|
|
466
466
|
|
|
467
|
-
const INDICATOR_NAME = '
|
|
467
|
+
const INDICATOR_NAME = 'DropdownMenu.ItemIndicator';
|
|
468
468
|
|
|
469
469
|
type DropdownMenuItemIndicatorElement = ComponentRef<typeof MenuPrimitive.ItemIndicator>;
|
|
470
470
|
type MenuItemIndicatorProps = ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;
|
|
@@ -484,7 +484,7 @@ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
|
|
|
484
484
|
// DropdownMenuSeparator
|
|
485
485
|
//
|
|
486
486
|
|
|
487
|
-
const SEPARATOR_NAME = '
|
|
487
|
+
const SEPARATOR_NAME = 'DropdownMenu.Separator';
|
|
488
488
|
|
|
489
489
|
type DropdownMenuSeparatorElement = ComponentRef<typeof MenuPrimitive.Separator>;
|
|
490
490
|
type MenuSeparatorProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>>;
|
|
@@ -512,7 +512,7 @@ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
|
|
|
512
512
|
// DropdownMenuArrow
|
|
513
513
|
//
|
|
514
514
|
|
|
515
|
-
const ARROW_NAME = '
|
|
515
|
+
const ARROW_NAME = 'DropdownMenu.Arrow';
|
|
516
516
|
|
|
517
517
|
type DropdownMenuArrowElement = ComponentRef<typeof MenuPrimitive.Arrow>;
|
|
518
518
|
type MenuArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>>;
|
|
@@ -567,7 +567,7 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
|
|
|
567
567
|
// DropdownMenuSubTrigger
|
|
568
568
|
//
|
|
569
569
|
|
|
570
|
-
const SUB_TRIGGER_NAME = '
|
|
570
|
+
const SUB_TRIGGER_NAME = 'DropdownMenu.SubTrigger';
|
|
571
571
|
|
|
572
572
|
type DropdownMenuSubTriggerElement = ComponentRef<typeof MenuPrimitive.SubTrigger>;
|
|
573
573
|
type MenuSubTriggerProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;
|
|
@@ -587,7 +587,7 @@ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
|
|
|
587
587
|
// DropdownMenuSubContent
|
|
588
588
|
//
|
|
589
589
|
|
|
590
|
-
const SUB_CONTENT_NAME = '
|
|
590
|
+
const SUB_CONTENT_NAME = 'DropdownMenu.SubContent';
|
|
591
591
|
|
|
592
592
|
type DropdownMenuSubContentElement = ComponentRef<typeof MenuPrimitive.Content>;
|
|
593
593
|
type MenuSubContentProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { dataDisabled } from '@dxos/ui-theme';
|
|
6
|
+
import { mx, surfaceShadow, surfaceZIndex } from '@dxos/ui-theme';
|
|
7
|
+
import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
|
|
8
|
+
|
|
9
|
+
export type MenuStyleProps = Partial<{
|
|
10
|
+
constrainBlockSize: boolean;
|
|
11
|
+
elevation: Elevation;
|
|
12
|
+
}>;
|
|
13
|
+
|
|
14
|
+
const content: ComponentFunction<MenuStyleProps> = ({ elevation }, ...etc) =>
|
|
15
|
+
mx(
|
|
16
|
+
'dx-popover-surface w-48 rounded-sm md:w-56 border border-separator',
|
|
17
|
+
surfaceZIndex({ elevation, level: 'menu' }),
|
|
18
|
+
surfaceShadow({ elevation: 'positioned' }),
|
|
19
|
+
...etc,
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const viewport: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
|
|
23
|
+
mx('rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto', ...etc);
|
|
24
|
+
|
|
25
|
+
const item: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
|
|
26
|
+
mx(
|
|
27
|
+
'flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm',
|
|
28
|
+
'hover:bg-hover-surface data-[highlighted]:bg-hover-surface',
|
|
29
|
+
'dx-focus-subdued',
|
|
30
|
+
dataDisabled,
|
|
31
|
+
...etc,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
const separator: ComponentFunction<MenuStyleProps> = (_props, ...etc) => mx('my-1 mx-2 h-px bg-separator', ...etc);
|
|
35
|
+
|
|
36
|
+
const groupLabel: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
|
|
37
|
+
mx('text-description', 'select-none px-2 py-2', ...etc);
|
|
38
|
+
|
|
39
|
+
const arrow: ComponentFunction<MenuStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
|
|
40
|
+
|
|
41
|
+
export const menuTheme: Theme<MenuStyleProps> = {
|
|
42
|
+
content,
|
|
43
|
+
viewport,
|
|
44
|
+
item,
|
|
45
|
+
separator,
|
|
46
|
+
groupLabel,
|
|
47
|
+
arrow,
|
|
48
|
+
};
|
|
@@ -9,6 +9,7 @@ import { random } from '@dxos/random';
|
|
|
9
9
|
import { type MessageValence } from '@dxos/ui-types';
|
|
10
10
|
|
|
11
11
|
import { withTheme } from '../../testing';
|
|
12
|
+
import { Button } from '../Button';
|
|
12
13
|
import { Message } from './Message';
|
|
13
14
|
|
|
14
15
|
random.seed(123);
|
|
@@ -17,13 +18,21 @@ type DefaultStoryProps = {
|
|
|
17
18
|
valence: MessageValence;
|
|
18
19
|
title: string;
|
|
19
20
|
body: string;
|
|
21
|
+
button?: boolean;
|
|
20
22
|
};
|
|
21
23
|
|
|
22
|
-
const DefaultStory = ({ valence, title, body }: DefaultStoryProps) => (
|
|
24
|
+
const DefaultStory = ({ valence, title, body, button }: DefaultStoryProps) => (
|
|
23
25
|
<div className='w-[30rem]'>
|
|
24
26
|
<Message.Root valence={valence}>
|
|
25
27
|
{title && <Message.Title onClose={() => console.log('close')}>{title}</Message.Title>}
|
|
26
|
-
{body &&
|
|
28
|
+
{body && (
|
|
29
|
+
<Message.Content asChild classNames='gap-2'>
|
|
30
|
+
<div>
|
|
31
|
+
<p>{body}</p>
|
|
32
|
+
{button && <Button>Test</Button>}
|
|
33
|
+
</div>
|
|
34
|
+
</Message.Content>
|
|
35
|
+
)}
|
|
27
36
|
</Message.Root>
|
|
28
37
|
</div>
|
|
29
38
|
);
|
|
@@ -51,15 +60,44 @@ type Story = StoryObj<typeof meta>;
|
|
|
51
60
|
export const Default: Story = {
|
|
52
61
|
args: {
|
|
53
62
|
valence: 'neutral',
|
|
54
|
-
title: '
|
|
63
|
+
title: 'Default',
|
|
55
64
|
body: random.lorem.paragraphs(1),
|
|
65
|
+
button: true,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const Success: Story = {
|
|
70
|
+
args: {
|
|
71
|
+
valence: 'success',
|
|
72
|
+
title: 'Success',
|
|
73
|
+
body: random.lorem.paragraphs(1),
|
|
74
|
+
button: true,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const Info: Story = {
|
|
79
|
+
args: {
|
|
80
|
+
valence: 'info',
|
|
81
|
+
title: 'Info',
|
|
82
|
+
body: random.lorem.paragraphs(1),
|
|
83
|
+
button: true,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const Warning: Story = {
|
|
88
|
+
args: {
|
|
89
|
+
valence: 'warning',
|
|
90
|
+
title: 'Warning',
|
|
91
|
+
body: random.lorem.paragraphs(1),
|
|
92
|
+
button: true,
|
|
56
93
|
},
|
|
57
94
|
};
|
|
58
95
|
|
|
59
96
|
export const Error: Story = {
|
|
60
97
|
args: {
|
|
61
98
|
valence: 'error',
|
|
62
|
-
title: 'Error
|
|
99
|
+
title: 'Error',
|
|
63
100
|
body: random.lorem.paragraphs(1),
|
|
101
|
+
button: true,
|
|
64
102
|
},
|
|
65
103
|
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { mx, messageValence } from '@dxos/ui-theme';
|
|
6
|
+
import { type ComponentFunction, type Elevation, type MessageValence, type Theme } from '@dxos/ui-types';
|
|
7
|
+
|
|
8
|
+
export type MessageStyleProps = {
|
|
9
|
+
valence?: MessageValence;
|
|
10
|
+
elevation?: Elevation;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const root: ComponentFunction<MessageStyleProps> = ({ valence }, etc) => {
|
|
14
|
+
return mx('p-1 rounded-sm', messageValence(valence), etc);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const header: ComponentFunction<MessageStyleProps> = (_, etc) => {
|
|
18
|
+
return mx('items-center', etc);
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const title: ComponentFunction<MessageStyleProps> = (_, etc) => {
|
|
22
|
+
return mx('col-start-2 overflow-hidden truncate', etc);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const icon: ComponentFunction<MessageStyleProps> = (_, etc) => {
|
|
26
|
+
return mx('col-start-1 grid place-items-center', etc);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const close: ComponentFunction<MessageStyleProps> = (_, etc) => {
|
|
30
|
+
return mx('col-start-3', etc);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const content: ComponentFunction<MessageStyleProps> = (_, etc) => {
|
|
34
|
+
return mx('col-start-2 flex flex-col first:font-medium pb-1.5', etc);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export const messageTheme: Theme<MessageStyleProps> = {
|
|
38
|
+
root,
|
|
39
|
+
header,
|
|
40
|
+
icon,
|
|
41
|
+
title,
|
|
42
|
+
close,
|
|
43
|
+
content,
|
|
44
|
+
};
|