@dxos/react-ui 0.8.4-main.ef1bc66f44 → 0.8.4-main.f466a3d56e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/chunk-A5QCIG5R.mjs +24 -0
- package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EJYV4HAH.mjs → chunk-LY5XDQR5.mjs} +189 -117
- package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3257 -2048
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +70 -41
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/browser/translations.mjs +9 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YTLZCZ2M.mjs → chunk-NGKLIKP3.mjs} +189 -117
- package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XCFLA74M.mjs +26 -0
- package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3257 -2048
- 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 +70 -41
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/translations.mjs +10 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.d.ts +2 -2
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.d.ts +2 -2
- package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +124 -0
- package/dist/types/src/components/Card/Card.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
- package/dist/types/src/components/Card/index.d.ts +2 -0
- package/dist/types/src/components/Card/index.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts +90 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/index.d.ts +2 -0
- package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +10 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +43 -23
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +48 -30
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +6 -8
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +19 -0
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
- package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.d.ts +36 -0
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
- package/dist/types/src/components/Focus/index.d.ts +2 -0
- package/dist/types/src/components/Focus/index.d.ts.map +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts +4 -0
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.d.ts +15 -0
- package/dist/types/src/components/Image/Image.d.ts.map +1 -0
- package/dist/types/src/components/Image/Image.stories.d.ts +34 -0
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
- package/dist/types/src/components/Image/index.d.ts +2 -0
- package/dist/types/src/components/Image/index.d.ts.map +1 -0
- package/dist/types/src/components/Input/Input.d.ts +16 -22
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +6 -6
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +5 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +3 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.d.ts +2 -2
- package/dist/types/src/components/List/Tree.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +5 -9
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +11 -7
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +46 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.d.ts +1 -1
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +4 -5
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +39 -22
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -11
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +21 -10
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +9 -5
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +3 -3
- package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.d.ts +23 -15
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.d.ts +3 -4
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +16 -16
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +32 -15
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +9 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +8 -6
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.d.ts +33 -0
- package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Column/index.d.ts +2 -0
- package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.d.ts +6 -22
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.stories.d.ts +2 -7
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/index.d.ts +0 -1
- package/dist/types/src/primitives/Container/index.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.d.ts +8 -5
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/Grid.d.ts +10 -0
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/index.d.ts +2 -0
- package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/Panel.d.ts +35 -0
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Panel/index.d.ts +2 -0
- package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +3 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -1
- package/dist/types/src/testing/Loading.d.ts +9 -0
- package/dist/types/src/testing/Loading.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +16 -0
- package/dist/types/src/translations.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 +34 -27
- package/src/components/Avatars/Avatar.stories.tsx +5 -7
- package/src/components/Avatars/Avatar.tsx +6 -14
- package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
- package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
- package/src/components/Button/Button.stories.tsx +1 -2
- package/src/components/Button/Button.tsx +11 -25
- package/src/components/Button/IconButton.stories.tsx +6 -4
- package/src/components/Button/IconButton.tsx +3 -4
- package/src/components/Button/Toggle.stories.tsx +0 -1
- package/src/components/Button/Toggle.tsx +4 -4
- package/src/components/Button/ToggleGroup.stories.tsx +0 -1
- package/src/components/Button/ToggleGroup.tsx +12 -16
- package/src/components/Card/Card.stories.tsx +151 -0
- package/src/components/Card/Card.tsx +514 -0
- package/src/components/Card/index.ts +5 -0
- package/src/components/Carousel/Carousel.tsx +337 -0
- package/src/components/Carousel/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +6 -7
- package/src/components/Dialog/AlertDialog.stories.tsx +14 -15
- package/src/components/Dialog/AlertDialog.tsx +123 -82
- package/src/components/Dialog/Dialog.stories.tsx +90 -14
- package/src/components/Dialog/Dialog.tsx +98 -113
- package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
- package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
- package/src/components/ErrorFallback/ErrorStack.tsx +114 -0
- package/src/components/ErrorFallback/ThrowError.tsx +37 -0
- package/src/components/ErrorFallback/index.ts +9 -0
- package/src/components/Focus/AUDIT.md +43 -0
- package/src/components/Focus/Focus.stories.tsx +230 -0
- package/src/components/Focus/Focus.tsx +201 -0
- package/src/components/Focus/index.ts +5 -0
- package/src/components/Icon/Icon.stories.tsx +43 -13
- package/src/components/Icon/Icon.tsx +14 -3
- package/src/components/Image/Image.stories.tsx +86 -0
- package/src/components/Image/Image.tsx +246 -0
- package/src/components/Image/index.ts +5 -0
- package/src/components/Input/Input.stories.tsx +17 -38
- package/src/components/Input/Input.tsx +27 -71
- package/src/components/Link/Link.stories.tsx +0 -1
- package/src/components/Link/Link.tsx +2 -2
- package/src/components/List/List.stories.tsx +14 -22
- package/src/components/List/List.tsx +16 -20
- package/src/components/List/ListDropIndicator.tsx +7 -8
- package/src/components/List/Tree.stories.tsx +4 -5
- package/src/components/List/Tree.tsx +0 -1
- package/src/components/List/TreeDropIndicator.tsx +6 -6
- package/src/components/List/Treegrid.stories.tsx +27 -28
- package/src/components/List/Treegrid.tsx +22 -27
- package/src/components/Main/Main.stories.tsx +3 -7
- package/src/components/Main/Main.tsx +57 -48
- package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
- package/src/components/MediaPlayer/MediaPlayer.tsx +153 -0
- package/src/components/MediaPlayer/index.ts +5 -0
- package/src/components/Menu/ContextMenu.stories.tsx +0 -1
- package/src/components/Menu/ContextMenu.tsx +9 -33
- package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
- package/src/components/Menu/DropdownMenu.tsx +58 -52
- package/src/components/Message/Message.stories.tsx +25 -11
- package/src/components/Message/Message.tsx +30 -29
- package/src/components/Popover/Popover.stories.tsx +5 -6
- package/src/components/Popover/Popover.tsx +62 -59
- package/src/components/ScrollArea/ScrollArea.stories.tsx +98 -39
- package/src/components/ScrollArea/ScrollArea.tsx +45 -33
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +46 -25
- package/src/components/ScrollContainer/ScrollContainer.tsx +199 -92
- package/src/components/Select/Select.stories.tsx +5 -6
- package/src/components/Select/Select.tsx +11 -27
- package/src/components/Separator/Separator.tsx +5 -8
- package/src/components/Skeleton/Skeleton.stories.tsx +12 -13
- package/src/components/Skeleton/Skeleton.tsx +1 -1
- package/src/components/Splitter/Splitter.stories.tsx +47 -37
- package/src/components/Splitter/Splitter.tsx +44 -40
- package/src/components/Status/Status.stories.tsx +19 -16
- package/src/components/Status/Status.tsx +10 -7
- package/src/components/Tag/Tag.stories.tsx +3 -9
- package/src/components/Tag/Tag.tsx +2 -7
- package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
- package/src/components/ThemeProvider/ThemeProvider.tsx +8 -7
- package/src/components/ThemeProvider/index.ts +1 -1
- package/src/components/Toast/Toast.stories.tsx +0 -1
- package/src/components/Toast/Toast.tsx +22 -41
- package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
- package/src/components/Toolbar/Toolbar.tsx +175 -30
- package/src/components/Tooltip/Tooltip.stories.tsx +18 -17
- package/src/components/Tooltip/Tooltip.tsx +32 -31
- package/src/components/index.ts +10 -5
- package/src/exemplars/generics.stories.tsx +12 -15
- package/src/exemplars/slot.stories.tsx +68 -61
- package/src/exemplars/tabster.stories.tsx +5 -5
- package/src/exemplars/virtualizer.stories.tsx +136 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDensityContext.ts +2 -2
- package/src/playground/Controls.stories.tsx +0 -6
- package/src/playground/Custom.stories.tsx +13 -16
- package/src/playground/Typography.stories.tsx +1 -1
- package/src/primitives/Column/AUDIT.md +148 -0
- package/src/primitives/Column/Column.stories.tsx +181 -0
- package/src/primitives/Column/Column.tsx +165 -0
- package/src/primitives/Column/index.ts +5 -0
- package/src/primitives/Container/Container.stories.tsx +13 -51
- package/src/primitives/Container/Container.tsx +14 -77
- package/src/primitives/Container/index.ts +0 -1
- package/src/primitives/Flex/Flex.stories.tsx +57 -0
- package/src/primitives/Flex/Flex.tsx +20 -19
- package/src/primitives/Grid/Grid.stories.tsx +56 -0
- package/src/primitives/Grid/Grid.tsx +30 -0
- package/src/primitives/Grid/index.ts +5 -0
- package/src/primitives/Panel/Panel.stories.tsx +68 -0
- package/src/primitives/Panel/Panel.tsx +120 -0
- package/src/primitives/Panel/index.ts +5 -0
- package/src/primitives/index.ts +3 -0
- package/src/testing/Loading.tsx +47 -0
- package/src/testing/decorators/withLayout.tsx +15 -11
- package/src/testing/decorators/withLayoutVariants.tsx +18 -21
- package/src/testing/decorators/withTheme.tsx +10 -7
- package/src/testing/index.ts +2 -0
- package/src/translations.ts +24 -0
- package/src/util/usePx.ts +1 -0
- package/dist/lib/browser/chunk-EJYV4HAH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YTLZCZ2M.mjs.map +0 -7
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -22
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
- package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
- package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
- package/dist/types/src/primitives/Container/Layout.d.ts +0 -18
- package/dist/types/src/primitives/Container/Layout.d.ts.map +0 -1
- package/dist/types/src/primitives/Container/Layout.stories.d.ts +0 -10
- package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +0 -1
- package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -67
- package/src/components/AnchoredOverflow/index.ts +0 -5
- package/src/primitives/Container/Layout.stories.tsx +0 -57
- package/src/primitives/Container/Layout.tsx +0 -61
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
// This is based upon `@radix-ui/react-popover` fetched 25
|
|
5
|
+
// This is based upon `@radix-ui/react-popover` fetched Oct 25, 2024 at https://github.com/radix-ui/primitives at commit 374c7d7.
|
|
6
6
|
|
|
7
7
|
import { composeEventHandlers } from '@radix-ui/primitive';
|
|
8
8
|
import { useComposedRefs } from '@radix-ui/react-compose-refs';
|
|
@@ -23,9 +23,8 @@ import { hideOthers } from 'aria-hidden';
|
|
|
23
23
|
import React, {
|
|
24
24
|
type ComponentPropsWithRef,
|
|
25
25
|
type ComponentPropsWithoutRef,
|
|
26
|
-
type
|
|
26
|
+
type ComponentRef,
|
|
27
27
|
type FC,
|
|
28
|
-
type MutableRefObject,
|
|
29
28
|
type ReactNode,
|
|
30
29
|
type RefObject,
|
|
31
30
|
forwardRef,
|
|
@@ -37,30 +36,31 @@ import React, {
|
|
|
37
36
|
} from 'react';
|
|
38
37
|
import { RemoveScroll } from 'react-remove-scroll';
|
|
39
38
|
|
|
40
|
-
import { useElevationContext, useThemeContext } from '../../hooks';
|
|
41
|
-
import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
|
|
39
|
+
import { useSafeCollisionPadding, useElevationContext, useThemeContext } from '../../hooks';
|
|
42
40
|
import { type ThemedClassName } from '../../util';
|
|
43
41
|
|
|
44
42
|
//
|
|
45
43
|
// Context
|
|
46
44
|
//
|
|
47
45
|
|
|
46
|
+
type ScopedProps<P> = P & { __scopePopover?: Scope };
|
|
47
|
+
|
|
48
48
|
const POPOVER_NAME = 'Popover';
|
|
49
49
|
|
|
50
|
-
type ScopedProps<P> = P & { __scopePopover?: Scope };
|
|
51
50
|
const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [createPopperScope]);
|
|
51
|
+
|
|
52
52
|
const usePopperScope = createPopperScope();
|
|
53
53
|
|
|
54
54
|
type PopoverContextValue = {
|
|
55
|
-
triggerRef:
|
|
55
|
+
triggerRef: RefObject<HTMLButtonElement>;
|
|
56
56
|
contentId: string;
|
|
57
|
+
hasCustomAnchor: boolean;
|
|
58
|
+
modal: boolean;
|
|
57
59
|
open: boolean;
|
|
58
60
|
onOpenChange(open: boolean): void;
|
|
59
61
|
onOpenToggle(): void;
|
|
60
|
-
hasCustomAnchor: boolean;
|
|
61
62
|
onCustomAnchorAdd(): void;
|
|
62
63
|
onCustomAnchorRemove(): void;
|
|
63
|
-
modal: boolean;
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
|
|
@@ -69,13 +69,13 @@ const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContext
|
|
|
69
69
|
// PopoverRoot
|
|
70
70
|
//
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
type PopoverRootProps = {
|
|
73
73
|
children?: ReactNode;
|
|
74
74
|
open?: boolean;
|
|
75
75
|
defaultOpen?: boolean;
|
|
76
76
|
onOpenChange?: (open: boolean) => void;
|
|
77
77
|
modal?: boolean;
|
|
78
|
-
}
|
|
78
|
+
};
|
|
79
79
|
|
|
80
80
|
const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>) => {
|
|
81
81
|
const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
|
|
@@ -93,7 +93,7 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
|
|
|
93
93
|
<PopoverProvider
|
|
94
94
|
scope={__scopePopover}
|
|
95
95
|
contentId={useId()}
|
|
96
|
-
triggerRef={triggerRef as
|
|
96
|
+
triggerRef={triggerRef as RefObject<HTMLButtonElement>}
|
|
97
97
|
open={open}
|
|
98
98
|
onOpenChange={setOpen}
|
|
99
99
|
onOpenToggle={useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}
|
|
@@ -116,9 +116,9 @@ PopoverRoot.displayName = POPOVER_NAME;
|
|
|
116
116
|
|
|
117
117
|
const ANCHOR_NAME = 'PopoverAnchor';
|
|
118
118
|
|
|
119
|
-
type PopoverAnchorElement =
|
|
119
|
+
type PopoverAnchorElement = ComponentRef<typeof PopperPrimitive.Anchor>;
|
|
120
120
|
type PopperAnchorProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;
|
|
121
|
-
|
|
121
|
+
type PopoverAnchorProps = PopperAnchorProps;
|
|
122
122
|
|
|
123
123
|
const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
|
|
124
124
|
(props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {
|
|
@@ -144,19 +144,22 @@ PopoverAnchor.displayName = ANCHOR_NAME;
|
|
|
144
144
|
|
|
145
145
|
const TRIGGER_NAME = 'PopoverTrigger';
|
|
146
146
|
|
|
147
|
-
type PopoverTriggerElement =
|
|
147
|
+
type PopoverTriggerElement = ComponentRef<typeof Primitive.button>;
|
|
148
148
|
type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
149
|
-
|
|
149
|
+
type PopoverTriggerProps = PrimitiveButtonProps & {
|
|
150
|
+
asChild?: boolean;
|
|
151
|
+
};
|
|
150
152
|
|
|
151
153
|
const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
|
|
152
154
|
(props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {
|
|
153
|
-
const { __scopePopover, ...triggerProps } = props;
|
|
155
|
+
const { __scopePopover, asChild, ...triggerProps } = props;
|
|
154
156
|
const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
|
|
155
157
|
const popperScope = usePopperScope(__scopePopover);
|
|
156
158
|
const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
|
|
159
|
+
const Comp = asChild ? Slot : Primitive.button;
|
|
157
160
|
|
|
158
161
|
const trigger = (
|
|
159
|
-
<
|
|
162
|
+
<Comp
|
|
160
163
|
type='button'
|
|
161
164
|
aria-haspopup='dialog'
|
|
162
165
|
aria-expanded={context.open}
|
|
@@ -186,9 +189,9 @@ PopoverTrigger.displayName = TRIGGER_NAME;
|
|
|
186
189
|
|
|
187
190
|
const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
|
|
188
191
|
|
|
189
|
-
|
|
192
|
+
type PopoverVirtualTriggerProps = {
|
|
190
193
|
virtualRef: RefObject<PopoverTriggerElement | null>;
|
|
191
|
-
}
|
|
194
|
+
};
|
|
192
195
|
|
|
193
196
|
const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
|
|
194
197
|
const { __scopePopover, virtualRef } = props;
|
|
@@ -216,7 +219,7 @@ const [PortalProvider, usePortalContext] = createPopoverContext<PortalContextVal
|
|
|
216
219
|
});
|
|
217
220
|
|
|
218
221
|
type PortalProps = ComponentPropsWithoutRef<typeof PortalPrimitive>;
|
|
219
|
-
|
|
222
|
+
type PopoverPortalProps = {
|
|
220
223
|
children?: ReactNode;
|
|
221
224
|
/**
|
|
222
225
|
* Specify a container element to portal the content into.
|
|
@@ -227,9 +230,9 @@ interface PopoverPortalProps {
|
|
|
227
230
|
* controlling animation with React animation libraries.
|
|
228
231
|
*/
|
|
229
232
|
forceMount?: true;
|
|
230
|
-
}
|
|
233
|
+
};
|
|
231
234
|
|
|
232
|
-
const PopoverPortal
|
|
235
|
+
const PopoverPortal = (props: ScopedProps<PopoverPortalProps>) => {
|
|
233
236
|
const { __scopePopover, forceMount, children, container } = props;
|
|
234
237
|
const context = usePopoverContext(PORTAL_NAME, __scopePopover);
|
|
235
238
|
return (
|
|
@@ -280,8 +283,10 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
|
|
|
280
283
|
PopoverContent.displayName = CONTENT_NAME;
|
|
281
284
|
|
|
282
285
|
type PopoverContentTypeElement = PopoverContentImplElement;
|
|
283
|
-
export interface PopoverContentTypeProps
|
|
284
|
-
|
|
286
|
+
export interface PopoverContentTypeProps extends Omit<
|
|
287
|
+
PopoverContentImplProps,
|
|
288
|
+
'trapFocus' | 'disableOutsidePointerEvents'
|
|
289
|
+
> {}
|
|
285
290
|
|
|
286
291
|
const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
|
|
287
292
|
(props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {
|
|
@@ -303,8 +308,7 @@ const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContent
|
|
|
303
308
|
<PopoverContentImpl
|
|
304
309
|
{...props}
|
|
305
310
|
ref={composedRefs}
|
|
306
|
-
//
|
|
307
|
-
// (closed !== unmounted when animating out)
|
|
311
|
+
// Make sure we're not trapping once it's been closed (closed !== unmounted when animating out).
|
|
308
312
|
trapFocus={context.open}
|
|
309
313
|
disableOutsidePointerEvents
|
|
310
314
|
onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
|
|
@@ -393,32 +397,31 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
|
|
|
393
397
|
},
|
|
394
398
|
);
|
|
395
399
|
|
|
396
|
-
type PopoverContentImplElement =
|
|
400
|
+
type PopoverContentImplElement = ComponentRef<typeof PopperPrimitive.Content>;
|
|
397
401
|
type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
|
|
398
402
|
type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
|
|
399
403
|
type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
|
|
400
404
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
}
|
|
405
|
+
type PopoverContentImplProps = Omit<PopperContentProps, 'onPlaced'> &
|
|
406
|
+
Omit<DismissableLayerProps, 'onDismiss'> & {
|
|
407
|
+
/**
|
|
408
|
+
* Whether focus should be trapped within the `Popover`
|
|
409
|
+
* (default: false)
|
|
410
|
+
*/
|
|
411
|
+
trapFocus?: FocusScopeProps['trapped'];
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Event handler called when auto-focusing on open.
|
|
415
|
+
* Can be prevented.
|
|
416
|
+
*/
|
|
417
|
+
onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Event handler called when auto-focusing on close.
|
|
421
|
+
* Can be prevented.
|
|
422
|
+
*/
|
|
423
|
+
onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];
|
|
424
|
+
};
|
|
422
425
|
|
|
423
426
|
const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentImplProps>(
|
|
424
427
|
(props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {
|
|
@@ -485,7 +488,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
485
488
|
{...contentProps}
|
|
486
489
|
collisionPadding={safeCollisionPadding}
|
|
487
490
|
collisionBoundary={computedCollisionBoundary}
|
|
488
|
-
className={tx('popover.content',
|
|
491
|
+
className={tx('popover.content', { elevation }, classNames)}
|
|
489
492
|
ref={forwardedRef}
|
|
490
493
|
style={{
|
|
491
494
|
...contentProps.style,
|
|
@@ -511,8 +514,8 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
511
514
|
|
|
512
515
|
const CLOSE_NAME = 'PopoverClose';
|
|
513
516
|
|
|
514
|
-
type PopoverCloseElement =
|
|
515
|
-
|
|
517
|
+
type PopoverCloseElement = ComponentRef<typeof Primitive.button>;
|
|
518
|
+
type PopoverCloseProps = PrimitiveButtonProps;
|
|
516
519
|
|
|
517
520
|
const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
|
|
518
521
|
(props: ScopedProps<PopoverCloseProps>, forwardedRef) => {
|
|
@@ -537,9 +540,9 @@ PopoverClose.displayName = CLOSE_NAME;
|
|
|
537
540
|
|
|
538
541
|
const ARROW_NAME = 'PopoverArrow';
|
|
539
542
|
|
|
540
|
-
type PopoverArrowElement =
|
|
543
|
+
type PopoverArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
|
|
541
544
|
type PopperArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>>;
|
|
542
|
-
|
|
545
|
+
type PopoverArrowProps = PopperArrowProps;
|
|
543
546
|
|
|
544
547
|
const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
545
548
|
(props: ScopedProps<PopoverArrowProps>, forwardedRef) => {
|
|
@@ -550,7 +553,7 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
|
550
553
|
<PopperPrimitive.Arrow
|
|
551
554
|
{...popperScope}
|
|
552
555
|
{...arrowProps}
|
|
553
|
-
className={tx('popover.arrow',
|
|
556
|
+
className={tx('popover.arrow', {}, classNames)}
|
|
554
557
|
ref={forwardedRef}
|
|
555
558
|
/>
|
|
556
559
|
);
|
|
@@ -572,15 +575,15 @@ type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primiti
|
|
|
572
575
|
const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
|
|
573
576
|
({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
|
|
574
577
|
const { tx } = useThemeContext();
|
|
575
|
-
const
|
|
578
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
576
579
|
return (
|
|
577
|
-
<
|
|
580
|
+
<Comp
|
|
578
581
|
{...props}
|
|
579
|
-
className={tx('popover.viewport',
|
|
582
|
+
className={tx('popover.viewport', { constrainInline, constrainBlock }, classNames)}
|
|
580
583
|
ref={forwardedRef}
|
|
581
584
|
>
|
|
582
585
|
{children}
|
|
583
|
-
</
|
|
586
|
+
</Comp>
|
|
584
587
|
);
|
|
585
588
|
},
|
|
586
589
|
);
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, { useMemo } from 'react';
|
|
5
|
+
import React, { PropsWithChildren, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { random } from '@dxos/random';
|
|
8
8
|
import { mx } from '@dxos/ui-theme';
|
|
9
|
+
import { ThemedClassName } from '@dxos/ui-types';
|
|
9
10
|
|
|
11
|
+
import { Column } from '../../primitives';
|
|
10
12
|
import { withLayout, withTheme } from '../../testing';
|
|
11
|
-
|
|
13
|
+
import { Input } from '../Input';
|
|
12
14
|
import { ScrollArea } from './ScrollArea';
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
random.seed(123);
|
|
15
17
|
|
|
16
18
|
export default {
|
|
17
19
|
title: 'ui/react-ui-core/components/ScrollArea',
|
|
@@ -22,22 +24,22 @@ export default {
|
|
|
22
24
|
},
|
|
23
25
|
};
|
|
24
26
|
|
|
25
|
-
const
|
|
27
|
+
const List = ({ items = 50 }: { items?: number }) => (
|
|
26
28
|
<div>
|
|
27
|
-
{Array.from({ length:
|
|
28
|
-
<div key={index} className='
|
|
29
|
+
{Array.from({ length: items }).map((_, index) => (
|
|
30
|
+
<div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
|
|
29
31
|
Item {index + 1}
|
|
30
32
|
</div>
|
|
31
33
|
))}
|
|
32
34
|
</div>
|
|
33
35
|
);
|
|
34
36
|
|
|
35
|
-
const Row = () => (
|
|
36
|
-
<div className='flex gap-2
|
|
37
|
-
{Array.from({ length:
|
|
37
|
+
const Row = ({ items = 50 }: { items?: number }) => (
|
|
38
|
+
<div className='flex gap-2 w-max'>
|
|
39
|
+
{Array.from({ length: items }).map((_, index) => (
|
|
38
40
|
<div
|
|
39
41
|
key={index}
|
|
40
|
-
className='shrink-0
|
|
42
|
+
className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
|
|
41
43
|
>
|
|
42
44
|
{index + 1}
|
|
43
45
|
</div>
|
|
@@ -45,58 +47,91 @@ const Row = () => (
|
|
|
45
47
|
</div>
|
|
46
48
|
);
|
|
47
49
|
|
|
50
|
+
const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
|
|
51
|
+
return <div className={mx('border border-separator rounded-md overflow-hidden', classNames)}>{children}</div>;
|
|
52
|
+
};
|
|
53
|
+
|
|
48
54
|
export const Vertical = {
|
|
49
55
|
render: () => (
|
|
50
|
-
<
|
|
56
|
+
<Container classNames='h-72 w-48'>
|
|
51
57
|
<ScrollArea.Root orientation='vertical'>
|
|
52
58
|
<ScrollArea.Viewport>
|
|
53
|
-
<
|
|
59
|
+
<List />
|
|
54
60
|
</ScrollArea.Viewport>
|
|
55
61
|
</ScrollArea.Root>
|
|
56
|
-
</
|
|
62
|
+
</Container>
|
|
57
63
|
),
|
|
58
64
|
};
|
|
59
65
|
|
|
60
66
|
export const VerticalThin = {
|
|
61
67
|
render: () => (
|
|
62
|
-
<
|
|
68
|
+
<Container classNames='h-72 w-48'>
|
|
63
69
|
<ScrollArea.Root orientation='vertical' thin>
|
|
64
70
|
<ScrollArea.Viewport>
|
|
65
|
-
<
|
|
71
|
+
<List />
|
|
66
72
|
</ScrollArea.Viewport>
|
|
67
73
|
</ScrollArea.Root>
|
|
68
|
-
</
|
|
74
|
+
</Container>
|
|
75
|
+
),
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const VerticalPadded = {
|
|
79
|
+
render: () => (
|
|
80
|
+
<Container classNames='h-72 w-48'>
|
|
81
|
+
<ScrollArea.Root orientation='vertical' centered padding thin>
|
|
82
|
+
<ScrollArea.Viewport>
|
|
83
|
+
<List />
|
|
84
|
+
</ScrollArea.Viewport>
|
|
85
|
+
</ScrollArea.Root>
|
|
86
|
+
</Container>
|
|
87
|
+
),
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const VerticalColumn = {
|
|
91
|
+
render: () => (
|
|
92
|
+
<Container classNames='h-72 w-48'>
|
|
93
|
+
<Column.Root gutter='sm' classNames='h-full overflow-hidden'>
|
|
94
|
+
<ScrollArea.Root orientation='vertical' padding thin>
|
|
95
|
+
<ScrollArea.Viewport classNames='py-2'>
|
|
96
|
+
<Input.Root>
|
|
97
|
+
<Input.TextInput classNames='p-1' />
|
|
98
|
+
</Input.Root>
|
|
99
|
+
<List />
|
|
100
|
+
</ScrollArea.Viewport>
|
|
101
|
+
</ScrollArea.Root>
|
|
102
|
+
</Column.Root>
|
|
103
|
+
</Container>
|
|
69
104
|
),
|
|
70
105
|
};
|
|
71
106
|
|
|
72
107
|
export const Horizontal = {
|
|
73
108
|
render: () => (
|
|
74
|
-
<
|
|
109
|
+
<Container classNames='w-96'>
|
|
75
110
|
<ScrollArea.Root orientation='horizontal'>
|
|
76
111
|
<ScrollArea.Viewport>
|
|
77
112
|
<Row />
|
|
78
113
|
</ScrollArea.Viewport>
|
|
79
114
|
</ScrollArea.Root>
|
|
80
|
-
</
|
|
115
|
+
</Container>
|
|
81
116
|
),
|
|
82
117
|
};
|
|
83
118
|
|
|
84
119
|
export const HorizontalThin = {
|
|
85
120
|
render: () => (
|
|
86
|
-
<
|
|
121
|
+
<Container classNames='w-96'>
|
|
87
122
|
<ScrollArea.Root orientation='horizontal' thin>
|
|
88
123
|
<ScrollArea.Viewport>
|
|
89
124
|
<Row />
|
|
90
125
|
</ScrollArea.Viewport>
|
|
91
126
|
</ScrollArea.Root>
|
|
92
|
-
</
|
|
127
|
+
</Container>
|
|
93
128
|
),
|
|
94
129
|
};
|
|
95
130
|
|
|
96
131
|
export const Both = {
|
|
97
132
|
render: () => (
|
|
98
|
-
<
|
|
99
|
-
<ScrollArea.Root
|
|
133
|
+
<Container classNames='w-96 h-96'>
|
|
134
|
+
<ScrollArea.Root orientation='all'>
|
|
100
135
|
<ScrollArea.Viewport>
|
|
101
136
|
<div className='flex flex-col gap-2'>
|
|
102
137
|
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
@@ -104,7 +139,7 @@ export const Both = {
|
|
|
104
139
|
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
105
140
|
<div
|
|
106
141
|
key={colIndex}
|
|
107
|
-
className='shrink-0
|
|
142
|
+
className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
108
143
|
>
|
|
109
144
|
[{colIndex}:{rowIndex}]
|
|
110
145
|
</div>
|
|
@@ -114,7 +149,31 @@ export const Both = {
|
|
|
114
149
|
</div>
|
|
115
150
|
</ScrollArea.Viewport>
|
|
116
151
|
</ScrollArea.Root>
|
|
117
|
-
</
|
|
152
|
+
</Container>
|
|
153
|
+
),
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export const Fullscreen = {
|
|
157
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
158
|
+
render: () => (
|
|
159
|
+
<ScrollArea.Root orientation='all' thin>
|
|
160
|
+
<ScrollArea.Viewport>
|
|
161
|
+
<div className='flex flex-col gap-2'>
|
|
162
|
+
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
163
|
+
<div key={rowIndex} className='flex gap-2'>
|
|
164
|
+
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
165
|
+
<div
|
|
166
|
+
key={colIndex}
|
|
167
|
+
className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
168
|
+
>
|
|
169
|
+
[{colIndex}:{rowIndex}]
|
|
170
|
+
</div>
|
|
171
|
+
))}
|
|
172
|
+
</div>
|
|
173
|
+
))}
|
|
174
|
+
</div>
|
|
175
|
+
</ScrollArea.Viewport>
|
|
176
|
+
</ScrollArea.Root>
|
|
118
177
|
),
|
|
119
178
|
};
|
|
120
179
|
|
|
@@ -125,30 +184,30 @@ export const NestedScrollAreas = {
|
|
|
125
184
|
() =>
|
|
126
185
|
Array.from({ length: 8 }).map((_, index) => ({
|
|
127
186
|
id: String(index),
|
|
128
|
-
count:
|
|
187
|
+
count: random.number.int({ min: 5, max: 20 }),
|
|
129
188
|
})),
|
|
130
189
|
[],
|
|
131
190
|
);
|
|
132
191
|
|
|
133
192
|
return (
|
|
134
|
-
<ScrollArea.Root
|
|
193
|
+
<ScrollArea.Root orientation='horizontal' thin padding>
|
|
135
194
|
<ScrollArea.Viewport classNames='gap-4'>
|
|
136
195
|
{columns.map((column) => (
|
|
137
196
|
<section
|
|
138
197
|
key={column.id}
|
|
139
|
-
className='shrink-0
|
|
198
|
+
className='shrink-0 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
|
|
140
199
|
>
|
|
141
|
-
<header className='flex shrink-0 p-2 border-
|
|
200
|
+
<header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
|
|
142
201
|
<ScrollArea.Root thin orientation='vertical'>
|
|
143
|
-
<ScrollArea.Viewport classNames='
|
|
202
|
+
<ScrollArea.Viewport classNames='py-2 px-2 gap-2'>
|
|
144
203
|
{Array.from({ length: column.count }, (_, i) => (
|
|
145
|
-
<div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-
|
|
204
|
+
<div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-xs`}>
|
|
146
205
|
Item {i + 1}
|
|
147
206
|
</div>
|
|
148
207
|
))}
|
|
149
208
|
</ScrollArea.Viewport>
|
|
150
209
|
</ScrollArea.Root>
|
|
151
|
-
<footer className={`p-2 text-subdued border-
|
|
210
|
+
<footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
|
|
152
211
|
</section>
|
|
153
212
|
))}
|
|
154
213
|
</ScrollArea.Viewport>
|
|
@@ -159,18 +218,18 @@ export const NestedScrollAreas = {
|
|
|
159
218
|
|
|
160
219
|
export const NativeScroll = {
|
|
161
220
|
render: () => (
|
|
162
|
-
<div className='group
|
|
221
|
+
<div className='group h-48 w-48 border border-separator'>
|
|
163
222
|
<div
|
|
164
223
|
className={mx(
|
|
165
|
-
'group
|
|
166
|
-
'[&::-webkit-scrollbar]:
|
|
224
|
+
'group h-full w-full overflow-y-scroll',
|
|
225
|
+
'[&::-webkit-scrollbar]:w-3',
|
|
167
226
|
'[&::-webkit-scrollbar-thumb]:rounded-none',
|
|
168
|
-
'[&::-webkit-scrollbar-track]:bg-
|
|
169
|
-
'[&::-webkit-scrollbar-thumb]:bg-
|
|
170
|
-
'group-hover:[&::-webkit-scrollbar-thumb]:bg-
|
|
227
|
+
'[&::-webkit-scrollbar-track]:bg-scrollbar-track',
|
|
228
|
+
'[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
|
|
229
|
+
'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
|
|
171
230
|
)}
|
|
172
231
|
>
|
|
173
|
-
<
|
|
232
|
+
<List />
|
|
174
233
|
</div>
|
|
175
234
|
</div>
|
|
176
235
|
),
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { createContext } from '@radix-ui/react-context';
|
|
6
|
-
import
|
|
6
|
+
import { Primitive } from '@radix-ui/react-primitive';
|
|
7
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
8
|
+
import React, { CSSProperties, useMemo } from 'react';
|
|
7
9
|
|
|
8
|
-
import {
|
|
10
|
+
import { composableProps, scrollbar, slottable } from '@dxos/ui-theme';
|
|
11
|
+
import { type AllowedAxis, type SlottableProps } from '@dxos/ui-types';
|
|
9
12
|
|
|
10
13
|
import { useThemeContext } from '../../hooks';
|
|
11
14
|
|
|
@@ -21,7 +24,7 @@ type ScrollAreaContextType = {
|
|
|
21
24
|
/** Hide scrollbars when not scrolling. */
|
|
22
25
|
autoHide: boolean;
|
|
23
26
|
/** Apply padding to opposite side of scrollbar. */
|
|
24
|
-
|
|
27
|
+
centered?: boolean;
|
|
25
28
|
/** Apply padding. */
|
|
26
29
|
padding: boolean;
|
|
27
30
|
/** Use thin scrollbars. */
|
|
@@ -38,20 +41,19 @@ const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaConte
|
|
|
38
41
|
|
|
39
42
|
const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
|
|
40
43
|
|
|
41
|
-
type ScrollAreaRootProps =
|
|
44
|
+
type ScrollAreaRootProps = Partial<ScrollAreaContextType>;
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* ScrollArea provides native scrollbars with custom styling.
|
|
45
48
|
*/
|
|
46
|
-
const ScrollAreaRoot =
|
|
49
|
+
const ScrollAreaRoot = slottable<HTMLDivElement, ScrollAreaRootProps>(
|
|
47
50
|
(
|
|
48
51
|
{
|
|
49
|
-
className,
|
|
50
|
-
classNames,
|
|
51
52
|
children,
|
|
53
|
+
asChild,
|
|
52
54
|
orientation = 'vertical',
|
|
53
55
|
autoHide = true,
|
|
54
|
-
|
|
56
|
+
centered = false,
|
|
55
57
|
padding = false,
|
|
56
58
|
thin = false,
|
|
57
59
|
snap = false,
|
|
@@ -60,17 +62,18 @@ const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
|
|
|
60
62
|
forwardedRef,
|
|
61
63
|
) => {
|
|
62
64
|
const { tx } = useThemeContext();
|
|
63
|
-
const
|
|
65
|
+
const { className, ...rest } = composableProps(props);
|
|
66
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
67
|
+
const options = useMemo(
|
|
68
|
+
() => ({ orientation, autoHide, centered, padding, thin, snap }),
|
|
69
|
+
[orientation, autoHide, centered, padding, thin, snap],
|
|
70
|
+
);
|
|
64
71
|
|
|
65
72
|
return (
|
|
66
73
|
<ScrollAreaProvider {...options}>
|
|
67
|
-
<
|
|
68
|
-
{...props}
|
|
69
|
-
className={tx('scrollArea.root', 'scroll-area', options, [className, classNames])}
|
|
70
|
-
ref={forwardedRef}
|
|
71
|
-
>
|
|
74
|
+
<Comp {...rest} className={tx('scrollArea.root', options, className)} ref={forwardedRef}>
|
|
72
75
|
{children}
|
|
73
|
-
</
|
|
76
|
+
</Comp>
|
|
74
77
|
</ScrollAreaProvider>
|
|
75
78
|
);
|
|
76
79
|
},
|
|
@@ -84,24 +87,33 @@ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
|
|
|
84
87
|
|
|
85
88
|
const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
|
|
86
89
|
|
|
87
|
-
type ScrollAreaViewportProps =
|
|
88
|
-
|
|
89
|
-
const ScrollAreaViewport =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
90
|
+
type ScrollAreaViewportProps = SlottableProps;
|
|
91
|
+
|
|
92
|
+
const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
93
|
+
const { tx } = useThemeContext();
|
|
94
|
+
const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
|
|
95
|
+
const density = options.thin ? scrollbar.thin : scrollbar.coarse;
|
|
96
|
+
const { className, ...rest } = composableProps(props);
|
|
97
|
+
const { style, ...restWithoutStyle } = rest as { style?: CSSProperties; [key: string]: any };
|
|
98
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
<Comp
|
|
102
|
+
{...restWithoutStyle}
|
|
103
|
+
style={
|
|
104
|
+
{
|
|
105
|
+
'--scroll-width': `${density.size}px`,
|
|
106
|
+
'--scroll-padding': `${density.padding}px`,
|
|
107
|
+
...style,
|
|
108
|
+
} as CSSProperties
|
|
109
|
+
}
|
|
110
|
+
className={tx('scrollArea.viewport', options, className)}
|
|
111
|
+
ref={forwardedRef}
|
|
112
|
+
>
|
|
113
|
+
{children}
|
|
114
|
+
</Comp>
|
|
115
|
+
);
|
|
116
|
+
});
|
|
105
117
|
|
|
106
118
|
ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
|
|
107
119
|
|