@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
|
@@ -14,14 +14,15 @@ import React, {
|
|
|
14
14
|
} from 'react';
|
|
15
15
|
import { useTranslation } from 'react-i18next';
|
|
16
16
|
|
|
17
|
-
import {
|
|
17
|
+
import { osTranslations } from '@dxos/ui-theme';
|
|
18
18
|
import { type SlottableProps } from '@dxos/ui-types';
|
|
19
19
|
|
|
20
20
|
import { useThemeContext } from '../../hooks';
|
|
21
|
-
import {
|
|
22
|
-
import { type
|
|
21
|
+
import { ElevationProvider } from '../../primitives';
|
|
22
|
+
import { type DialogSize } from '../../theme';
|
|
23
|
+
import { type ThemedClassName, composableProps, slottable } from '../../util';
|
|
23
24
|
import { IconButton } from '../Button';
|
|
24
|
-
import {
|
|
25
|
+
import { Column } from '../Column';
|
|
25
26
|
|
|
26
27
|
//
|
|
27
28
|
// Root
|
|
@@ -40,13 +41,15 @@ const DialogRoot: FunctionComponent<DialogRootProps> = (props) => (
|
|
|
40
41
|
</ElevationProvider>
|
|
41
42
|
);
|
|
42
43
|
|
|
44
|
+
DialogRoot.displayName = 'Dialog.Root';
|
|
45
|
+
|
|
43
46
|
//
|
|
44
47
|
// Trigger
|
|
45
48
|
//
|
|
46
49
|
|
|
47
50
|
type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
|
|
48
51
|
|
|
49
|
-
const DialogTrigger
|
|
52
|
+
const DialogTrigger = DialogPrimitive.Trigger;
|
|
50
53
|
|
|
51
54
|
//
|
|
52
55
|
// Portal
|
|
@@ -54,13 +57,13 @@ const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Tri
|
|
|
54
57
|
|
|
55
58
|
type DialogPortalProps = DialogPrimitive.DialogPortalProps;
|
|
56
59
|
|
|
57
|
-
const DialogPortal
|
|
60
|
+
const DialogPortal = DialogPrimitive.Portal;
|
|
58
61
|
|
|
59
62
|
//
|
|
60
63
|
// Overlay
|
|
61
64
|
//
|
|
62
65
|
|
|
63
|
-
const DIALOG_OVERLAY_NAME = '
|
|
66
|
+
const DIALOG_OVERLAY_NAME = 'Dialog.Overlay';
|
|
64
67
|
|
|
65
68
|
type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
|
|
66
69
|
|
|
@@ -96,7 +99,7 @@ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
|
|
|
96
99
|
// Content
|
|
97
100
|
//
|
|
98
101
|
|
|
99
|
-
const DIALOG_CONTENT_NAME = '
|
|
102
|
+
const DIALOG_CONTENT_NAME = 'Dialog.Content';
|
|
100
103
|
|
|
101
104
|
type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogPrimitive.Content>> & {
|
|
102
105
|
size?: DialogSize;
|
|
@@ -151,20 +154,35 @@ const DialogHeader = slottable<HTMLDivElement>(({ children, asChild, ...props },
|
|
|
151
154
|
);
|
|
152
155
|
});
|
|
153
156
|
|
|
157
|
+
DialogHeader.displayName = 'Dialog.Header';
|
|
158
|
+
|
|
154
159
|
//
|
|
155
|
-
//
|
|
160
|
+
// ActionIconButton
|
|
156
161
|
//
|
|
157
162
|
|
|
158
|
-
type
|
|
163
|
+
type DialogActionIconButtonAction = 'close' | 'delete';
|
|
164
|
+
|
|
165
|
+
type DialogActionIconButtonProps = { action: DialogActionIconButtonAction; label?: string };
|
|
166
|
+
|
|
167
|
+
const DIALOG_ACTION_ICONS: Record<DialogActionIconButtonAction, string> = {
|
|
168
|
+
close: 'ph--x--regular',
|
|
169
|
+
delete: 'ph--trash--regular',
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
const DIALOG_ACTION_LABEL_KEYS: Record<DialogActionIconButtonAction, string> = {
|
|
173
|
+
// Preserves the legacy `close-dialog.label` translation key for backward compat.
|
|
174
|
+
close: 'close-dialog.label',
|
|
175
|
+
delete: 'toolbar-delete.label',
|
|
176
|
+
};
|
|
159
177
|
|
|
160
|
-
const
|
|
161
|
-
({ label, ...props }, forwardedRef) => {
|
|
178
|
+
const DialogActionIconButton = forwardRef<HTMLButtonElement, DialogActionIconButtonProps>(
|
|
179
|
+
({ action, label, ...props }, forwardedRef) => {
|
|
162
180
|
const { t } = useTranslation(osTranslations);
|
|
163
181
|
return (
|
|
164
182
|
<IconButton
|
|
165
183
|
{...props}
|
|
166
|
-
label={label ?? t(
|
|
167
|
-
icon=
|
|
184
|
+
label={label ?? t(DIALOG_ACTION_LABEL_KEYS[action])}
|
|
185
|
+
icon={DIALOG_ACTION_ICONS[action]}
|
|
168
186
|
iconOnly
|
|
169
187
|
size={4}
|
|
170
188
|
variant='ghost'
|
|
@@ -174,6 +192,8 @@ const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButto
|
|
|
174
192
|
},
|
|
175
193
|
);
|
|
176
194
|
|
|
195
|
+
DialogActionIconButton.displayName = 'Dialog.ActionIconButton';
|
|
196
|
+
|
|
177
197
|
//
|
|
178
198
|
// Body
|
|
179
199
|
//
|
|
@@ -191,6 +211,8 @@ const DialogBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, f
|
|
|
191
211
|
);
|
|
192
212
|
});
|
|
193
213
|
|
|
214
|
+
DialogBody.displayName = 'Dialog.Body';
|
|
215
|
+
|
|
194
216
|
//
|
|
195
217
|
// Title
|
|
196
218
|
//
|
|
@@ -206,6 +228,8 @@ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
|
|
|
206
228
|
},
|
|
207
229
|
);
|
|
208
230
|
|
|
231
|
+
DialogTitle.displayName = 'Dialog.Title';
|
|
232
|
+
|
|
209
233
|
//
|
|
210
234
|
// Description
|
|
211
235
|
//
|
|
@@ -225,6 +249,8 @@ const DialogDescription = forwardRef<HTMLParagraphElement, DialogDescriptionProp
|
|
|
225
249
|
},
|
|
226
250
|
);
|
|
227
251
|
|
|
252
|
+
DialogDescription.displayName = 'Dialog.Description';
|
|
253
|
+
|
|
228
254
|
//
|
|
229
255
|
// ActionBar
|
|
230
256
|
//
|
|
@@ -242,13 +268,15 @@ const DialogActionBar = slottable<HTMLDivElement>(({ children, asChild, ...props
|
|
|
242
268
|
);
|
|
243
269
|
});
|
|
244
270
|
|
|
271
|
+
DialogActionBar.displayName = 'Dialog.ActionBar';
|
|
272
|
+
|
|
245
273
|
//
|
|
246
274
|
// Close
|
|
247
275
|
//
|
|
248
276
|
|
|
249
277
|
type DialogCloseProps = DialogPrimitive.DialogCloseProps;
|
|
250
278
|
|
|
251
|
-
const DialogClose
|
|
279
|
+
const DialogClose = DialogPrimitive.Close;
|
|
252
280
|
|
|
253
281
|
//
|
|
254
282
|
// Dialog
|
|
@@ -266,7 +294,7 @@ export const Dialog = {
|
|
|
266
294
|
Description: DialogDescription,
|
|
267
295
|
ActionBar: DialogActionBar,
|
|
268
296
|
Close: DialogClose,
|
|
269
|
-
|
|
297
|
+
ActionIconButton: DialogActionIconButton,
|
|
270
298
|
};
|
|
271
299
|
|
|
272
300
|
export type {
|
|
@@ -281,5 +309,6 @@ export type {
|
|
|
281
309
|
DialogDescriptionProps,
|
|
282
310
|
DialogActionBarProps,
|
|
283
311
|
DialogCloseProps,
|
|
284
|
-
|
|
312
|
+
DialogActionIconButtonAction,
|
|
313
|
+
DialogActionIconButtonProps,
|
|
285
314
|
};
|
|
@@ -7,6 +7,10 @@ import { type FallbackProps } from 'react-error-boundary';
|
|
|
7
7
|
|
|
8
8
|
import { safeStringify } from '@dxos/util';
|
|
9
9
|
|
|
10
|
+
import { translationKey } from '#translations';
|
|
11
|
+
|
|
12
|
+
import { useTranslation } from '../../primitives';
|
|
13
|
+
import { IconButton } from '../Button';
|
|
10
14
|
import { ErrorStack } from './ErrorStack';
|
|
11
15
|
|
|
12
16
|
export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'> & { title?: string; data?: any }>;
|
|
@@ -15,6 +19,7 @@ export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'>
|
|
|
15
19
|
* Themed fallback component for `ErrorBoundary`.
|
|
16
20
|
*/
|
|
17
21
|
export const ErrorFallback = ({ children, error, title, data }: ErrorFallbackProps) => {
|
|
22
|
+
const { t } = useTranslation(translationKey);
|
|
18
23
|
const isDev = process.env.NODE_ENV === 'development';
|
|
19
24
|
const message = error instanceof Error ? error.message : String(error);
|
|
20
25
|
|
|
@@ -55,14 +60,15 @@ const Section = ({ children, title, onClick }: PropsWithChildren<{ title?: strin
|
|
|
55
60
|
return (
|
|
56
61
|
<div className='flex flex-col gap-1'>
|
|
57
62
|
{onClick && (
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
<div>
|
|
64
|
+
<IconButton
|
|
65
|
+
classNames='text-xs uppercase'
|
|
66
|
+
label={title ?? 'Copy'}
|
|
67
|
+
icon='ph--clipboard-text--regular'
|
|
68
|
+
size={5}
|
|
69
|
+
onClick={onClick}
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
66
72
|
)}
|
|
67
73
|
{children}
|
|
68
74
|
</div>
|
|
@@ -56,7 +56,7 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
|
|
|
56
56
|
const local = frame.fileName
|
|
57
57
|
? parseLocalFrame(frame.fileName, frame.lineNumber, frame.columnNumber)
|
|
58
58
|
: undefined;
|
|
59
|
-
const
|
|
59
|
+
const functionName = frame.functionName ?? '<anonymous>';
|
|
60
60
|
return (
|
|
61
61
|
<div
|
|
62
62
|
key={i}
|
|
@@ -75,14 +75,15 @@ export const ErrorStack = ({ error, frames: framesProp }: ErrorStackProps) => {
|
|
|
75
75
|
/>
|
|
76
76
|
<div className='absolute top-1/2 -translate-y-1/2 left-1/2 right-0 h-px bg-neutral-500' />
|
|
77
77
|
</div>
|
|
78
|
+
|
|
78
79
|
{local ? (
|
|
79
80
|
<a href={local.href} className='truncate self-center'>
|
|
80
|
-
{
|
|
81
|
+
{functionName}
|
|
81
82
|
</a>
|
|
82
83
|
) : (
|
|
83
|
-
<span className='text-subdued truncate self-center'>{
|
|
84
|
+
<span className='text-subdued truncate self-center'>{functionName}</span>
|
|
84
85
|
)}
|
|
85
|
-
<span className='text-xs text-subdued truncate self-center'>{local?.fileName ?? ''}</span>
|
|
86
|
+
<span className='text-xs text-subdued truncate self-center truncate'>{local?.fileName ?? ''}</span>
|
|
86
87
|
<span className='text-xs text-subdued text-right self-center'>
|
|
87
88
|
{local ? `${frame.lineNumber}:${frame.columnNumber}` : ''}
|
|
88
89
|
</span>
|
|
@@ -103,10 +104,15 @@ const parseLocalFrame = (fileUrl: string, line?: number, col?: number): LocalFra
|
|
|
103
104
|
if (!pathname.startsWith('/@fs/')) {
|
|
104
105
|
return undefined;
|
|
105
106
|
}
|
|
106
|
-
|
|
107
|
+
|
|
108
|
+
const FILE_PREFIX = '/@fs';
|
|
109
|
+
const localPath = pathname.slice(FILE_PREFIX.length); // /@fs/Users/... → /Users/...
|
|
110
|
+
const PKG_PREFIX = '/packages/';
|
|
111
|
+
const i = localPath.indexOf(PKG_PREFIX);
|
|
112
|
+
const path = i === -1 ? localPath : localPath.substring(i + PKG_PREFIX.length);
|
|
107
113
|
return {
|
|
108
114
|
href: `vscode://file/${localPath}:${line ?? 1}:${col ?? 1}`,
|
|
109
|
-
fileName:
|
|
115
|
+
fileName: path,
|
|
110
116
|
};
|
|
111
117
|
} catch {
|
|
112
118
|
return undefined;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { mx } from '@dxos/ui-theme';
|
|
6
|
+
import { type ComponentFunction, type Theme } from '@dxos/ui-types';
|
|
7
|
+
|
|
8
|
+
export type FocusStyleProps = {
|
|
9
|
+
border?: boolean;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Focus ring styles shared by Focus.Group and Focus.Item.
|
|
14
|
+
* Uses a `::after` pseudo-element overlay so the ring paints above child content
|
|
15
|
+
* (inset box-shadow alone is obscured by children with backgrounds).
|
|
16
|
+
* The pseudo-element is `pointer-events-none` and absolutely positioned over the element.
|
|
17
|
+
* When `border` is true, a subdued CSS border is always visible (e.g., for grid cell edges).
|
|
18
|
+
*/
|
|
19
|
+
const ring: ComponentFunction<FocusStyleProps> = ({ border }, ...etc) =>
|
|
20
|
+
mx(
|
|
21
|
+
'dx-ring-pseudo outline-hidden',
|
|
22
|
+
'focus:after:ring-focus-ring-subtle',
|
|
23
|
+
'data-[focus-state=active]:after:ring-focus-ring-subtle',
|
|
24
|
+
'data-[focus-state=error]:after:ring-rose-500',
|
|
25
|
+
border && 'border border-separator',
|
|
26
|
+
...etc,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
export const focusTheme: Theme<FocusStyleProps> = {
|
|
30
|
+
group: ring,
|
|
31
|
+
item: ring,
|
|
32
|
+
};
|
|
@@ -21,10 +21,10 @@ import React, {
|
|
|
21
21
|
useState,
|
|
22
22
|
} from 'react';
|
|
23
23
|
|
|
24
|
-
import { composableProps, slottable } from '@dxos/ui-theme';
|
|
25
24
|
import { type Axis } from '@dxos/ui-types';
|
|
26
25
|
|
|
27
26
|
import { useThemeContext } from '../../hooks';
|
|
27
|
+
import { composableProps, slottable } from '../../util';
|
|
28
28
|
|
|
29
29
|
//
|
|
30
30
|
// Context
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { getSize, mx } from '@dxos/ui-theme';
|
|
6
|
+
import { type ComponentFunction, type Size, type Theme } from '@dxos/ui-types';
|
|
7
|
+
|
|
8
|
+
export type IconStyleProps = {
|
|
9
|
+
size?: Size;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type IconBlockStyleProps = {
|
|
13
|
+
compact?: boolean;
|
|
14
|
+
/** Constrain to a square (1:1) slot rather than the default rail-item width. */
|
|
15
|
+
square?: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Size can be specified directly, or inherited from a container (e.g., toolbar).
|
|
20
|
+
*/
|
|
21
|
+
const root: ComponentFunction<IconStyleProps> = ({ size }, etc) => {
|
|
22
|
+
return mx(
|
|
23
|
+
'shrink-0 text-[var(--icons-color,currentColor)]',
|
|
24
|
+
size
|
|
25
|
+
? getSize(size)
|
|
26
|
+
: '[width:var(--icon-size,var(--dx-default-icons-size))] [height:var(--icon-size,var(--dx-default-icons-size))]',
|
|
27
|
+
etc,
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Static slot sized to `--dx-rail-item` so a wrapped `Icon` lines up with an `IconButton iconOnly`.
|
|
33
|
+
*/
|
|
34
|
+
const block: ComponentFunction<IconBlockStyleProps> = ({ compact, square }, ...etc) =>
|
|
35
|
+
mx(
|
|
36
|
+
'grid place-items-center',
|
|
37
|
+
square ? 'aspect-square' : 'w-[var(--dx-rail-item)]',
|
|
38
|
+
compact ? '' : 'h-[var(--dx-rail-item)]',
|
|
39
|
+
...etc,
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
export const iconTheme: Theme<IconStyleProps & IconBlockStyleProps> = {
|
|
43
|
+
root,
|
|
44
|
+
block,
|
|
45
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { type ComponentPropsWithRef, type PropsWithChildren, forwardRef } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useThemeContext } from '../../hooks';
|
|
8
|
+
import { type ThemedClassName } from '../../util';
|
|
9
|
+
import { IconBlockStyleProps } from './Icon.theme';
|
|
10
|
+
|
|
11
|
+
export type IconBlockProps = ThemedClassName<ComponentPropsWithRef<'div'> & PropsWithChildren<IconBlockStyleProps>>;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Static layout slot sized to `--dx-rail-item` (the same square that an `IconButton iconOnly`
|
|
15
|
+
* occupies). Use whenever a decorative `<Icon>` needs to share a row, column, or grid track with
|
|
16
|
+
* interactive `IconButton`s without drifting by a pixel.
|
|
17
|
+
*
|
|
18
|
+
* Defaults `aria-hidden='true'` — the slot wraps decorative chrome by default. Pass
|
|
19
|
+
* `aria-hidden={false}` when the slot's contents convey meaning that isn't already labelled
|
|
20
|
+
* elsewhere in the row.
|
|
21
|
+
*/
|
|
22
|
+
export const IconBlock = forwardRef<HTMLDivElement, IconBlockProps>(
|
|
23
|
+
({ classNames, children, compact, square, ...props }, forwardedRef) => {
|
|
24
|
+
const { tx } = useThemeContext();
|
|
25
|
+
return (
|
|
26
|
+
<div
|
|
27
|
+
aria-hidden='true'
|
|
28
|
+
{...props}
|
|
29
|
+
className={tx('icon.block', { compact, square }, classNames)}
|
|
30
|
+
ref={forwardedRef}
|
|
31
|
+
>
|
|
32
|
+
{children}
|
|
33
|
+
</div>
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
IconBlock.displayName = 'IconBlock';
|
|
@@ -15,7 +15,7 @@ const seed = Math.random();
|
|
|
15
15
|
random.seed(seed);
|
|
16
16
|
|
|
17
17
|
const meta = {
|
|
18
|
-
title: 'ui/react-ui-
|
|
18
|
+
title: 'ui/react-ui-core/components/Image',
|
|
19
19
|
component: Image,
|
|
20
20
|
render: (args) => (
|
|
21
21
|
<div className='absolute inset-0 flex justify-center items-center'>
|
|
@@ -10,17 +10,23 @@ import { type MessageValence } from '@dxos/ui-types';
|
|
|
10
10
|
import { withLayoutVariants, withTheme } from '../../testing';
|
|
11
11
|
import {
|
|
12
12
|
type CheckboxProps,
|
|
13
|
+
type DateInputProps,
|
|
14
|
+
type DateTimeInputProps,
|
|
13
15
|
Input,
|
|
14
16
|
type PinInputProps,
|
|
15
17
|
type SwitchProps,
|
|
16
18
|
type TextAreaProps,
|
|
17
19
|
type TextInputProps,
|
|
20
|
+
type TimeProps,
|
|
18
21
|
} from './Input';
|
|
19
22
|
|
|
20
23
|
type VariantMap = {
|
|
21
24
|
text: TextInputProps;
|
|
22
25
|
pin: PinInputProps;
|
|
23
26
|
textarea: TextAreaProps;
|
|
27
|
+
time: TimeProps;
|
|
28
|
+
date: DateInputProps;
|
|
29
|
+
datetime: DateTimeInputProps;
|
|
24
30
|
checkbox: CheckboxProps;
|
|
25
31
|
switch: SwitchProps;
|
|
26
32
|
};
|
|
@@ -54,6 +60,9 @@ const DefaultStory = ({
|
|
|
54
60
|
{kind === 'text' && <Input.TextInput {...props} />}
|
|
55
61
|
{kind === 'pin' && <Input.PinInput {...props} />}
|
|
56
62
|
{kind === 'textarea' && <Input.TextArea {...props} />}
|
|
63
|
+
{kind === 'time' && <Input.Time {...props} />}
|
|
64
|
+
{kind === 'date' && <Input.Date {...props} />}
|
|
65
|
+
{kind === 'datetime' && <Input.DateTime {...props} />}
|
|
57
66
|
{kind === 'checkbox' && <Input.Checkbox {...props} />}
|
|
58
67
|
{kind === 'switch' && <Input.Switch {...props} />}
|
|
59
68
|
|
|
@@ -76,34 +85,17 @@ export default meta;
|
|
|
76
85
|
|
|
77
86
|
type Story = StoryObj<DefaultStoryProps & Variant>;
|
|
78
87
|
|
|
79
|
-
export const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
density: 'coarse',
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
export const DensityFine: Story = {
|
|
95
|
-
args: {
|
|
96
|
-
kind: 'text',
|
|
97
|
-
label: 'Input value',
|
|
98
|
-
placeholder: 'This is a density:fine input',
|
|
99
|
-
disabled: false,
|
|
100
|
-
description: undefined,
|
|
101
|
-
labelVisuallyHidden: false,
|
|
102
|
-
descriptionVisuallyHidden: false,
|
|
103
|
-
validationMessage: '',
|
|
104
|
-
validationValence: undefined,
|
|
105
|
-
density: 'fine',
|
|
106
|
-
},
|
|
88
|
+
export const Density: Story = {
|
|
89
|
+
render: () => (
|
|
90
|
+
<div className='flex flex-col gap-4'>
|
|
91
|
+
{(['lg', 'md', 'sm', 'xs'] as const).map((density) => (
|
|
92
|
+
<Input.Root key={density}>
|
|
93
|
+
<Input.Label>{`density="${density}"`}</Input.Label>
|
|
94
|
+
<Input.TextInput density={density} placeholder={`This is a density:${density} input`} />
|
|
95
|
+
</Input.Root>
|
|
96
|
+
))}
|
|
97
|
+
</div>
|
|
98
|
+
),
|
|
107
99
|
};
|
|
108
100
|
|
|
109
101
|
export const Subdued: Story = {
|
|
@@ -186,10 +178,86 @@ export const PinInput: Story = {
|
|
|
186
178
|
length: 6,
|
|
187
179
|
description: 'Type in secret you received',
|
|
188
180
|
pattern: '\\d*',
|
|
189
|
-
density: '
|
|
181
|
+
density: 'lg',
|
|
190
182
|
},
|
|
191
183
|
};
|
|
192
184
|
|
|
185
|
+
export const Time: Story = {
|
|
186
|
+
args: {
|
|
187
|
+
kind: 'time',
|
|
188
|
+
label: 'Time',
|
|
189
|
+
defaultValue: '09:30',
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
export const TimeUncontrolled: Story = {
|
|
194
|
+
args: {
|
|
195
|
+
kind: 'time',
|
|
196
|
+
label: 'Time (uncontrolled)',
|
|
197
|
+
defaultValue: '14:00',
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
export const TimeAmPm: Story = {
|
|
202
|
+
args: {
|
|
203
|
+
kind: 'time',
|
|
204
|
+
label: 'Time (12-hour, AM/PM)',
|
|
205
|
+
defaultValue: '14:00',
|
|
206
|
+
hourCycle: 12,
|
|
207
|
+
} as any,
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export const TimeDisabled: Story = {
|
|
211
|
+
args: {
|
|
212
|
+
kind: 'time',
|
|
213
|
+
label: 'Time (disabled)',
|
|
214
|
+
defaultValue: '12:00',
|
|
215
|
+
disabled: true,
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
export const Date: Story = {
|
|
220
|
+
args: {
|
|
221
|
+
kind: 'date',
|
|
222
|
+
label: 'Date',
|
|
223
|
+
defaultValue: '1990-05-12',
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
export const DateTime: Story = {
|
|
228
|
+
args: {
|
|
229
|
+
kind: 'datetime',
|
|
230
|
+
label: 'Date & time',
|
|
231
|
+
defaultValue: '2026-06-01T15:30',
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
export const DateWithPicker: Story = {
|
|
236
|
+
render: () => (
|
|
237
|
+
<Input.Root>
|
|
238
|
+
<Input.Label>Date (with picker)</Input.Label>
|
|
239
|
+
<div className='flex items-center gap-1'>
|
|
240
|
+
<Input.Date defaultValue='2026-06-01' />
|
|
241
|
+
<Input.TriggerIcon />
|
|
242
|
+
</div>
|
|
243
|
+
<Input.Description>Click the calendar icon to open the date picker.</Input.Description>
|
|
244
|
+
</Input.Root>
|
|
245
|
+
),
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export const DateTimeWithPicker: Story = {
|
|
249
|
+
render: () => (
|
|
250
|
+
<Input.Root>
|
|
251
|
+
<Input.Label>Date & time (with picker)</Input.Label>
|
|
252
|
+
<div className='flex items-center gap-1'>
|
|
253
|
+
<Input.DateTime defaultValue='2026-06-01T15:30' />
|
|
254
|
+
<Input.TriggerIcon />
|
|
255
|
+
</div>
|
|
256
|
+
<Input.Description>Click the calendar icon to open the date picker.</Input.Description>
|
|
257
|
+
</Input.Root>
|
|
258
|
+
),
|
|
259
|
+
};
|
|
260
|
+
|
|
193
261
|
export const Checkbox: Story = {
|
|
194
262
|
args: {
|
|
195
263
|
kind: 'checkbox',
|
|
@@ -206,3 +274,38 @@ export const Switch: Story = {
|
|
|
206
274
|
description: 'On or off',
|
|
207
275
|
},
|
|
208
276
|
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Native HTML input types. `Input.TextInput` accepts every standard
|
|
280
|
+
* `<input type="…">` value via its `type` prop; this story exercises the most
|
|
281
|
+
* commonly used ones so the rendering across themes/browsers can be
|
|
282
|
+
* inspected at a glance.
|
|
283
|
+
*/
|
|
284
|
+
const TEXT_INPUT_TYPES: { type: string; placeholder: string }[] = [
|
|
285
|
+
{ type: 'text', placeholder: 'Plain text' },
|
|
286
|
+
{ type: 'email', placeholder: 'name@example.com' },
|
|
287
|
+
{ type: 'password', placeholder: '••••••••' },
|
|
288
|
+
{ type: 'search', placeholder: 'Search…' },
|
|
289
|
+
{ type: 'tel', placeholder: '+1 (555) 555-5555' },
|
|
290
|
+
{ type: 'url', placeholder: 'https://example.com' },
|
|
291
|
+
{ type: 'number', placeholder: '42' },
|
|
292
|
+
{ type: 'date', placeholder: '' },
|
|
293
|
+
{ type: 'time', placeholder: '' },
|
|
294
|
+
{ type: 'datetime-local', placeholder: '' },
|
|
295
|
+
{ type: 'month', placeholder: '' },
|
|
296
|
+
{ type: 'week', placeholder: '' },
|
|
297
|
+
{ type: 'color', placeholder: '' },
|
|
298
|
+
];
|
|
299
|
+
|
|
300
|
+
export const TextInputTypes: Story = {
|
|
301
|
+
render: () => (
|
|
302
|
+
<div className='flex flex-col gap-3 min-w-[24rem]'>
|
|
303
|
+
{TEXT_INPUT_TYPES.map(({ type, placeholder }) => (
|
|
304
|
+
<Input.Root key={type}>
|
|
305
|
+
<Input.Label>{`type="${type}"`}</Input.Label>
|
|
306
|
+
<Input.TextInput type={type} placeholder={placeholder} />
|
|
307
|
+
</Input.Root>
|
|
308
|
+
))}
|
|
309
|
+
</div>
|
|
310
|
+
),
|
|
311
|
+
};
|