@dxos/react-ui 0.8.3 → 0.8.4-main.1068cf700f
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-6DTBPJE4.mjs +774 -0
- package/dist/lib/browser/chunk-6DTBPJE4.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3203 -61
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +66 -50
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/chunk-JKHQSGNU.mjs +776 -0
- package/dist/lib/node-esm/chunk-JKHQSGNU.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3203 -61
- 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 +66 -50
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +7 -0
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +1 -1
- 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 +5 -31
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
- package/dist/types/src/components/Button/Button.d.ts.map +1 -0
- package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
- package/dist/types/src/components/Button/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 +5 -6
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +2 -3
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/Dialog.d.ts +46 -0
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.d.ts +2 -2
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
- package/dist/types/src/components/Input/Input.d.ts +6 -5
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +12 -13
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -0
- package/dist/types/src/components/List/List.stories.d.ts +14 -0
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
- package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
- package/dist/types/src/components/List/Tree.d.ts.map +1 -0
- package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
- package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
- package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
- package/dist/types/src/components/List/index.d.ts.map +1 -0
- package/dist/types/src/components/Main/Main.d.ts +17 -27
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
- package/dist/types/src/components/Menu/index.d.ts.map +1 -0
- 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 +8 -17
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +4 -4
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +37 -25
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
- package/dist/types/src/components/Select/Select.d.ts +10 -10
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts +5 -10
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
- package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/index.d.ts +2 -0
- package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/index.d.ts +2 -0
- package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
- package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts +1 -1
- package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +5 -5
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +20 -19
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +7 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
- 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 +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts +5 -9
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +12 -4
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts +5 -11
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +23 -0
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
- package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
- package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/index.d.ts +3 -0
- package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/index.d.ts +2 -0
- package/dist/types/src/primitives/Flex/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 -0
- package/dist/types/src/testing/decorators/index.d.ts +2 -1
- package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
- 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/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/usePx.d.ts +8 -0
- package/dist/types/src/util/usePx.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +39 -31
- package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +10 -12
- package/src/components/Avatars/Avatar.stories.tsx +23 -14
- package/src/components/Avatars/Avatar.tsx +6 -13
- package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -14
- package/src/components/Breadcrumb/Breadcrumb.tsx +8 -34
- package/src/components/{Buttons → Button}/Button.stories.tsx +11 -12
- package/src/components/{Buttons → Button}/Button.tsx +3 -8
- package/src/components/{Buttons → Button}/IconButton.stories.tsx +13 -10
- package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
- package/src/components/Button/Toggle.stories.tsx +37 -0
- package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +15 -12
- package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
- package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
- package/src/components/Clipboard/CopyButton.tsx +17 -18
- package/src/components/DensityProvider/DensityProvider.tsx +2 -2
- package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +17 -14
- package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +16 -21
- package/src/components/Dialog/Dialog.stories.tsx +101 -0
- package/src/components/{Dialogs → Dialog}/Dialog.tsx +182 -57
- package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
- package/src/components/Icon/Icon.stories.tsx +113 -0
- package/src/components/Icon/Icon.tsx +3 -3
- package/src/components/Input/Input.stories.tsx +22 -23
- package/src/components/Input/Input.tsx +38 -44
- package/src/components/Link/Link.stories.tsx +12 -8
- package/src/components/Link/Link.tsx +1 -1
- package/src/components/{Lists → List}/List.stories.tsx +40 -34
- package/src/components/{Lists → List}/List.tsx +22 -29
- package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
- package/src/components/{Lists → List}/Tree.stories.tsx +13 -10
- package/src/components/{Lists → List}/Tree.tsx +4 -3
- package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
- package/src/components/{Lists → List}/Treegrid.stories.tsx +14 -8
- package/src/components/{Lists → List}/Treegrid.tsx +61 -25
- package/src/components/Main/Main.stories.tsx +56 -27
- package/src/components/Main/Main.tsx +166 -94
- package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
- package/src/components/{Menus → Menu}/ContextMenu.tsx +8 -31
- package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
- package/src/components/{Menus → Menu}/DropdownMenu.tsx +109 -78
- package/src/components/Message/Message.stories.tsx +14 -10
- package/src/components/Message/Message.tsx +34 -23
- package/src/components/Popover/Popover.stories.tsx +14 -11
- package/src/components/Popover/Popover.tsx +68 -49
- package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
- package/src/components/ScrollArea/ScrollArea.tsx +80 -82
- package/src/components/ScrollArea/index.ts +1 -1
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
- package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
- package/src/components/ScrollContainer/index.ts +5 -0
- package/src/components/Select/Select.stories.tsx +15 -12
- package/src/components/Select/Select.tsx +18 -34
- package/src/components/Separator/Separator.tsx +1 -1
- package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
- package/src/components/Skeleton/Skeleton.tsx +26 -0
- package/src/components/Skeleton/index.ts +5 -0
- package/src/components/Splitter/Splitter.stories.tsx +73 -0
- package/src/components/Splitter/Splitter.tsx +123 -0
- package/src/components/Splitter/index.ts +5 -0
- package/src/components/Status/Status.stories.tsx +11 -8
- package/src/components/Status/Status.tsx +2 -2
- package/src/components/Tag/Tag.stories.tsx +21 -12
- package/src/components/Tag/Tag.tsx +2 -7
- package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
- package/src/components/ThemeProvider/TranslationsProvider.tsx +4 -19
- package/src/components/ThemeProvider/index.ts +3 -1
- package/src/components/Toast/Toast.stories.tsx +14 -11
- package/src/components/Toast/Toast.tsx +15 -19
- package/src/components/Toolbar/Toolbar.stories.tsx +23 -21
- package/src/components/Toolbar/Toolbar.tsx +41 -10
- package/src/components/Tooltip/Tooltip.stories.tsx +18 -14
- package/src/components/Tooltip/Tooltip.tsx +29 -26
- package/src/components/index.ts +7 -4
- package/src/exemplars/generics.stories.tsx +44 -0
- package/src/exemplars/slot.stories.tsx +108 -0
- package/src/exemplars/tabster.stories.tsx +127 -0
- package/src/hooks/useDensityContext.ts +1 -1
- package/src/hooks/useElevationContext.ts +1 -1
- package/src/hooks/useSafeArea.ts +3 -2
- package/src/hooks/useSafeCollisionPadding.ts +1 -1
- package/src/hooks/useVisualViewport.ts +4 -4
- package/src/index.ts +3 -2
- package/src/playground/Controls.stories.tsx +20 -18
- package/src/playground/Custom.stories.tsx +15 -26
- package/src/playground/Typography.stories.tsx +10 -8
- package/src/primitives/Container/Container.stories.tsx +67 -0
- package/src/primitives/Container/Container.tsx +79 -0
- package/src/primitives/Container/Layout.stories.tsx +57 -0
- package/src/primitives/Container/Layout.tsx +61 -0
- package/src/primitives/Container/index.ts +6 -0
- package/src/primitives/Flex/Flex.tsx +26 -0
- package/src/primitives/Flex/index.ts +5 -0
- package/src/primitives/index.ts +6 -0
- package/src/testing/decorators/index.ts +2 -1
- package/src/testing/decorators/withLayout.tsx +63 -0
- package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +4 -4
- package/src/testing/decorators/withTheme.tsx +34 -0
- package/src/util/index.ts +3 -1
- package/src/util/usePx.ts +61 -0
- package/README.yml +0 -1
- package/dist/lib/browser/chunk-WXW6KSRL.mjs +0 -4376
- package/dist/lib/browser/chunk-WXW6KSRL.mjs.map +0 -7
- package/dist/lib/node/chunk-3E3QKWX4.cjs +0 -4363
- package/dist/lib/node/chunk-3E3QKWX4.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -175
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/testing/index.cjs +0 -114
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-EQ7EG74H.mjs +0 -4378
- package/dist/lib/node-esm/chunk-EQ7EG74H.mjs.map +0 -7
- package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
- package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
- package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
- package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
- package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
- package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
- package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
- package/dist/types/src/components/Lists/List.d.ts.map +0 -1
- package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
- package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
- package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
- package/dist/types/src/components/Lists/index.d.ts.map +0 -1
- package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
- package/dist/types/src/components/Menus/index.d.ts.map +0 -1
- package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
- package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
- package/dist/types/src/util/ThemedClassName.d.ts +0 -5
- package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
- package/src/components/Buttons/Toggle.stories.tsx +0 -33
- package/src/components/Dialogs/Dialog.stories.tsx +0 -65
- package/src/testing/decorators/withTheme.ts +0 -22
- package/src/util/ThemedClassName.ts +0 -7
- /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
- /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
- /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
- /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
- /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
- /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
- /package/src/components/{Buttons → Button}/index.ts +0 -0
- /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
- /package/src/components/{Lists → List}/index.ts +0 -0
- /package/src/components/{Menus → Menu}/index.ts +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { composeEventHandlers } from '@radix-ui/primitive';
|
|
8
8
|
import { useComposedRefs } from '@radix-ui/react-compose-refs';
|
|
9
9
|
import { createContextScope } from '@radix-ui/react-context';
|
|
10
|
-
import type
|
|
10
|
+
import { type Scope } from '@radix-ui/react-context';
|
|
11
11
|
import { DismissableLayer } from '@radix-ui/react-dismissable-layer';
|
|
12
12
|
import { useFocusGuards } from '@radix-ui/react-focus-guards';
|
|
13
13
|
import { FocusScope } from '@radix-ui/react-focus-scope';
|
|
@@ -22,17 +22,18 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
|
22
22
|
import { hideOthers } from 'aria-hidden';
|
|
23
23
|
import React, {
|
|
24
24
|
type ComponentPropsWithRef,
|
|
25
|
-
|
|
25
|
+
type ComponentPropsWithoutRef,
|
|
26
26
|
type ElementRef,
|
|
27
|
-
type
|
|
27
|
+
type FC,
|
|
28
|
+
type MutableRefObject,
|
|
28
29
|
type ReactNode,
|
|
29
|
-
|
|
30
|
+
type RefObject,
|
|
31
|
+
forwardRef,
|
|
30
32
|
useCallback,
|
|
31
|
-
type ComponentPropsWithoutRef,
|
|
32
|
-
type FC,
|
|
33
|
-
useState,
|
|
34
33
|
useEffect,
|
|
35
|
-
|
|
34
|
+
useMemo,
|
|
35
|
+
useRef,
|
|
36
|
+
useState,
|
|
36
37
|
} from 'react';
|
|
37
38
|
import { RemoveScroll } from 'react-remove-scroll';
|
|
38
39
|
|
|
@@ -40,9 +41,9 @@ import { useElevationContext, useThemeContext } from '../../hooks';
|
|
|
40
41
|
import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
|
|
41
42
|
import { type ThemedClassName } from '../../util';
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
//
|
|
45
|
+
// Context
|
|
46
|
+
//
|
|
46
47
|
|
|
47
48
|
const POPOVER_NAME = 'Popover';
|
|
48
49
|
|
|
@@ -64,6 +65,10 @@ type PopoverContextValue = {
|
|
|
64
65
|
|
|
65
66
|
const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
|
|
66
67
|
|
|
68
|
+
//
|
|
69
|
+
// PopoverRoot
|
|
70
|
+
//
|
|
71
|
+
|
|
67
72
|
interface PopoverRootProps {
|
|
68
73
|
children?: ReactNode;
|
|
69
74
|
open?: boolean;
|
|
@@ -105,9 +110,9 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
|
|
|
105
110
|
|
|
106
111
|
PopoverRoot.displayName = POPOVER_NAME;
|
|
107
112
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
113
|
+
//
|
|
114
|
+
// PopoverAnchor
|
|
115
|
+
//
|
|
111
116
|
|
|
112
117
|
const ANCHOR_NAME = 'PopoverAnchor';
|
|
113
118
|
|
|
@@ -133,9 +138,9 @@ const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
|
|
|
133
138
|
|
|
134
139
|
PopoverAnchor.displayName = ANCHOR_NAME;
|
|
135
140
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
//
|
|
142
|
+
// PopoverTrigger
|
|
143
|
+
//
|
|
139
144
|
|
|
140
145
|
const TRIGGER_NAME = 'PopoverTrigger';
|
|
141
146
|
|
|
@@ -175,14 +180,14 @@ const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
|
|
|
175
180
|
|
|
176
181
|
PopoverTrigger.displayName = TRIGGER_NAME;
|
|
177
182
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
183
|
+
//
|
|
184
|
+
// PopoverVirtualTrigger
|
|
185
|
+
//
|
|
181
186
|
|
|
182
187
|
const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
|
|
183
188
|
|
|
184
189
|
interface PopoverVirtualTriggerProps {
|
|
185
|
-
virtualRef: RefObject<PopoverTriggerElement>;
|
|
190
|
+
virtualRef: RefObject<PopoverTriggerElement | null>;
|
|
186
191
|
}
|
|
187
192
|
|
|
188
193
|
const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
|
|
@@ -194,14 +199,14 @@ const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) =
|
|
|
194
199
|
context.triggerRef.current = virtualRef.current;
|
|
195
200
|
}
|
|
196
201
|
});
|
|
197
|
-
return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef} />;
|
|
202
|
+
return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef as RefObject<PopoverTriggerElement>} />;
|
|
198
203
|
};
|
|
199
204
|
|
|
200
205
|
PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
|
|
201
206
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
207
|
+
//
|
|
208
|
+
// PopoverPortal
|
|
209
|
+
//
|
|
205
210
|
|
|
206
211
|
const PORTAL_NAME = 'PopoverPortal';
|
|
207
212
|
|
|
@@ -240,9 +245,9 @@ const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalP
|
|
|
240
245
|
|
|
241
246
|
PopoverPortal.displayName = PORTAL_NAME;
|
|
242
247
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
248
|
+
//
|
|
249
|
+
// PopoverContent
|
|
250
|
+
//
|
|
246
251
|
|
|
247
252
|
const CONTENT_NAME = 'PopoverContent';
|
|
248
253
|
|
|
@@ -274,8 +279,6 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
|
|
|
274
279
|
|
|
275
280
|
PopoverContent.displayName = CONTENT_NAME;
|
|
276
281
|
|
|
277
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
278
|
-
|
|
279
282
|
type PopoverContentTypeElement = PopoverContentImplElement;
|
|
280
283
|
export interface PopoverContentTypeProps
|
|
281
284
|
extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
|
|
@@ -390,12 +393,11 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
|
|
|
390
393
|
},
|
|
391
394
|
);
|
|
392
395
|
|
|
393
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
394
|
-
|
|
395
396
|
type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
|
|
396
397
|
type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
|
|
397
398
|
type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
|
|
398
399
|
type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
|
|
400
|
+
|
|
399
401
|
interface PopoverContentImplProps
|
|
400
402
|
extends Omit<PopperContentProps, 'onPlaced'>,
|
|
401
403
|
Omit<DismissableLayerProps, 'onDismiss'> {
|
|
@@ -431,6 +433,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
431
433
|
onFocusOutside,
|
|
432
434
|
onInteractOutside,
|
|
433
435
|
collisionPadding = 8,
|
|
436
|
+
collisionBoundary,
|
|
434
437
|
classNames,
|
|
435
438
|
...contentProps
|
|
436
439
|
} = props;
|
|
@@ -440,10 +443,23 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
440
443
|
const elevation = useElevationContext();
|
|
441
444
|
const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
|
|
442
445
|
|
|
443
|
-
// Make sure the whole tree has focus guards as our `Popover` may be
|
|
444
|
-
// the last element in the DOM (because of the `Portal`)
|
|
446
|
+
// Make sure the whole tree has focus guards as our `Popover` may be the last element in the DOM (because of the `Portal`)
|
|
445
447
|
useFocusGuards();
|
|
446
448
|
|
|
449
|
+
// Check for the closest annotated collision boundary in the DOM tree.
|
|
450
|
+
const computedCollisionBoundary = useMemo(() => {
|
|
451
|
+
const closestBoundary = context.triggerRef.current?.closest(
|
|
452
|
+
'[data-popover-collision-boundary]',
|
|
453
|
+
) as HTMLElement | null;
|
|
454
|
+
return closestBoundary
|
|
455
|
+
? Array.isArray(collisionBoundary)
|
|
456
|
+
? [closestBoundary, ...collisionBoundary]
|
|
457
|
+
: collisionBoundary
|
|
458
|
+
? [closestBoundary, collisionBoundary]
|
|
459
|
+
: [closestBoundary]
|
|
460
|
+
: collisionBoundary;
|
|
461
|
+
}, [context.open, collisionBoundary, context.triggerRef.current]);
|
|
462
|
+
|
|
447
463
|
return (
|
|
448
464
|
<FocusScope
|
|
449
465
|
asChild
|
|
@@ -468,11 +484,12 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
468
484
|
{...popperScope}
|
|
469
485
|
{...contentProps}
|
|
470
486
|
collisionPadding={safeCollisionPadding}
|
|
471
|
-
|
|
487
|
+
collisionBoundary={computedCollisionBoundary}
|
|
488
|
+
className={tx('popover.content', { elevation }, classNames)}
|
|
472
489
|
ref={forwardedRef}
|
|
473
490
|
style={{
|
|
474
491
|
...contentProps.style,
|
|
475
|
-
//
|
|
492
|
+
// Re-namespace exposed content custom properties.
|
|
476
493
|
...{
|
|
477
494
|
'--radix-popover-content-transform-origin': 'var(--radix-popper-transform-origin)',
|
|
478
495
|
'--radix-popover-content-available-width': 'var(--radix-popper-available-width)',
|
|
@@ -488,9 +505,9 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
|
|
|
488
505
|
},
|
|
489
506
|
);
|
|
490
507
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
508
|
+
//
|
|
509
|
+
// PopoverClose
|
|
510
|
+
//
|
|
494
511
|
|
|
495
512
|
const CLOSE_NAME = 'PopoverClose';
|
|
496
513
|
|
|
@@ -514,9 +531,9 @@ const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
|
|
|
514
531
|
|
|
515
532
|
PopoverClose.displayName = CLOSE_NAME;
|
|
516
533
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
534
|
+
//
|
|
535
|
+
// PopoverArrow
|
|
536
|
+
//
|
|
520
537
|
|
|
521
538
|
const ARROW_NAME = 'PopoverArrow';
|
|
522
539
|
|
|
@@ -533,7 +550,7 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
|
533
550
|
<PopperPrimitive.Arrow
|
|
534
551
|
{...popperScope}
|
|
535
552
|
{...arrowProps}
|
|
536
|
-
className={tx('popover.arrow',
|
|
553
|
+
className={tx('popover.arrow', {}, classNames)}
|
|
537
554
|
ref={forwardedRef}
|
|
538
555
|
/>
|
|
539
556
|
);
|
|
@@ -542,9 +559,9 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
|
542
559
|
|
|
543
560
|
PopoverArrow.displayName = ARROW_NAME;
|
|
544
561
|
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
562
|
+
//
|
|
563
|
+
// PopoverViewport
|
|
564
|
+
//
|
|
548
565
|
|
|
549
566
|
type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
550
567
|
asChild?: boolean;
|
|
@@ -559,7 +576,7 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
|
|
|
559
576
|
return (
|
|
560
577
|
<Root
|
|
561
578
|
{...props}
|
|
562
|
-
className={tx('popover.viewport',
|
|
579
|
+
className={tx('popover.viewport', { constrainInline, constrainBlock }, classNames)}
|
|
563
580
|
ref={forwardedRef}
|
|
564
581
|
>
|
|
565
582
|
{children}
|
|
@@ -568,12 +585,14 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
|
|
|
568
585
|
},
|
|
569
586
|
);
|
|
570
587
|
|
|
571
|
-
/* ----------------------------------------------------------------------------------------------- */
|
|
572
|
-
|
|
573
588
|
const getState = (open: boolean) => (open ? 'open' : 'closed');
|
|
574
589
|
|
|
575
590
|
type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
|
|
576
591
|
|
|
592
|
+
//
|
|
593
|
+
// Popver
|
|
594
|
+
//
|
|
595
|
+
|
|
577
596
|
export const Popover = {
|
|
578
597
|
Root: PopoverRoot,
|
|
579
598
|
Anchor: PopoverAnchor,
|
|
@@ -1,48 +1,177 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '
|
|
6
|
-
|
|
7
|
-
import React, { type PropsWithChildren } from 'react';
|
|
5
|
+
import React, { useMemo } from 'react';
|
|
8
6
|
|
|
9
7
|
import { faker } from '@dxos/random';
|
|
10
|
-
import {
|
|
8
|
+
import { mx } from '@dxos/ui-theme';
|
|
9
|
+
|
|
10
|
+
import { withLayout, withTheme } from '../../testing';
|
|
11
11
|
|
|
12
12
|
import { ScrollArea } from './ScrollArea';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
faker.seed(1234);
|
|
16
|
-
|
|
17
|
-
const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
|
|
18
|
-
return (
|
|
19
|
-
<ScrollArea.Root
|
|
20
|
-
classNames={['is-[300px] bs-[400px] rounded', activeSurface, surfaceShadow({ elevation: 'positioned' })]}
|
|
21
|
-
>
|
|
22
|
-
<ScrollArea.Viewport classNames='rounded p-4'>
|
|
23
|
-
<p>{children}</p>
|
|
24
|
-
</ScrollArea.Viewport>
|
|
25
|
-
<ScrollArea.Scrollbar orientation='horizontal'>
|
|
26
|
-
<ScrollArea.Thumb />
|
|
27
|
-
</ScrollArea.Scrollbar>
|
|
28
|
-
<ScrollArea.Scrollbar orientation='vertical'>
|
|
29
|
-
<ScrollArea.Thumb />
|
|
30
|
-
</ScrollArea.Scrollbar>
|
|
31
|
-
<ScrollArea.Corner />
|
|
32
|
-
</ScrollArea.Root>
|
|
33
|
-
);
|
|
34
|
-
};
|
|
13
|
+
|
|
14
|
+
faker.seed(123);
|
|
35
15
|
|
|
36
16
|
export default {
|
|
37
|
-
title: 'ui/react-ui-core/
|
|
17
|
+
title: 'ui/react-ui-core/components/ScrollArea',
|
|
38
18
|
component: ScrollArea,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
19
|
+
decorators: [withTheme()],
|
|
20
|
+
parameters: {
|
|
21
|
+
layout: 'centered',
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const Column = () => (
|
|
26
|
+
<div>
|
|
27
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
28
|
+
<div key={index} className='text-sm'>
|
|
29
|
+
Item {index + 1}
|
|
30
|
+
</div>
|
|
31
|
+
))}
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
const Row = () => (
|
|
36
|
+
<div className='flex gap-2 is-max'>
|
|
37
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
38
|
+
<div
|
|
39
|
+
key={index}
|
|
40
|
+
className='shrink-0 bs-20 is-20 border border-separator rounded-md flex items-center justify-center text-sm'
|
|
41
|
+
>
|
|
42
|
+
{index + 1}
|
|
43
|
+
</div>
|
|
44
|
+
))}
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
export const Vertical = {
|
|
49
|
+
render: () => (
|
|
50
|
+
<div className='bs-72 is-48 p-2 border border-separator rounded-md'>
|
|
51
|
+
<ScrollArea.Root orientation='vertical'>
|
|
52
|
+
<ScrollArea.Viewport>
|
|
53
|
+
<Column />
|
|
54
|
+
</ScrollArea.Viewport>
|
|
55
|
+
</ScrollArea.Root>
|
|
56
|
+
</div>
|
|
57
|
+
),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const VerticalThin = {
|
|
61
|
+
render: () => (
|
|
62
|
+
<div className='bs-72 is-48 p-2 border border-separator rounded-md'>
|
|
63
|
+
<ScrollArea.Root orientation='vertical' thin>
|
|
64
|
+
<ScrollArea.Viewport>
|
|
65
|
+
<Column />
|
|
66
|
+
</ScrollArea.Viewport>
|
|
67
|
+
</ScrollArea.Root>
|
|
68
|
+
</div>
|
|
69
|
+
),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const Horizontal = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<div className='is-96 p-2 border border-separator rounded-md'>
|
|
75
|
+
<ScrollArea.Root orientation='horizontal'>
|
|
76
|
+
<ScrollArea.Viewport>
|
|
77
|
+
<Row />
|
|
78
|
+
</ScrollArea.Viewport>
|
|
79
|
+
</ScrollArea.Root>
|
|
80
|
+
</div>
|
|
81
|
+
),
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const HorizontalThin = {
|
|
85
|
+
render: () => (
|
|
86
|
+
<div className='is-96 p-2 border border-separator rounded-md'>
|
|
87
|
+
<ScrollArea.Root orientation='horizontal' thin>
|
|
88
|
+
<ScrollArea.Viewport>
|
|
89
|
+
<Row />
|
|
90
|
+
</ScrollArea.Viewport>
|
|
91
|
+
</ScrollArea.Root>
|
|
92
|
+
</div>
|
|
93
|
+
),
|
|
42
94
|
};
|
|
43
95
|
|
|
44
|
-
export const
|
|
45
|
-
|
|
46
|
-
|
|
96
|
+
export const Both = {
|
|
97
|
+
render: () => (
|
|
98
|
+
<div className='bs-72 is-96 p-2 border border-separator rounded-md'>
|
|
99
|
+
<ScrollArea.Root thin orientation='all'>
|
|
100
|
+
<ScrollArea.Viewport>
|
|
101
|
+
<div className='flex flex-col gap-2'>
|
|
102
|
+
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
103
|
+
<div key={rowIndex} className='flex gap-2'>
|
|
104
|
+
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
105
|
+
<div
|
|
106
|
+
key={colIndex}
|
|
107
|
+
className='shrink-0 bs-20 is-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
108
|
+
>
|
|
109
|
+
[{colIndex}:{rowIndex}]
|
|
110
|
+
</div>
|
|
111
|
+
))}
|
|
112
|
+
</div>
|
|
113
|
+
))}
|
|
114
|
+
</div>
|
|
115
|
+
</ScrollArea.Viewport>
|
|
116
|
+
</ScrollArea.Root>
|
|
117
|
+
</div>
|
|
118
|
+
),
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export const NestedScrollAreas = {
|
|
122
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
123
|
+
render: () => {
|
|
124
|
+
const columns = useMemo(
|
|
125
|
+
() =>
|
|
126
|
+
Array.from({ length: 8 }).map((_, index) => ({
|
|
127
|
+
id: String(index),
|
|
128
|
+
count: faker.number.int({ min: 5, max: 20 }),
|
|
129
|
+
})),
|
|
130
|
+
[],
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<ScrollArea.Root thin orientation='horizontal'>
|
|
135
|
+
<ScrollArea.Viewport classNames='gap-4'>
|
|
136
|
+
{columns.map((column) => (
|
|
137
|
+
<section
|
|
138
|
+
key={column.id}
|
|
139
|
+
className='shrink-0 bs-full is-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
|
|
140
|
+
>
|
|
141
|
+
<header className='flex shrink-0 p-2 border-be border-separator'>Column {column.id}</header>
|
|
142
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
143
|
+
<ScrollArea.Viewport classNames='plb-2 pli-2 gap-2'>
|
|
144
|
+
{Array.from({ length: column.count }, (_, i) => (
|
|
145
|
+
<div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-sm`}>
|
|
146
|
+
Item {i + 1}
|
|
147
|
+
</div>
|
|
148
|
+
))}
|
|
149
|
+
</ScrollArea.Viewport>
|
|
150
|
+
</ScrollArea.Root>
|
|
151
|
+
<footer className={`p-2 text-subdued border-bs border-separator`}>{column.count}</footer>
|
|
152
|
+
</section>
|
|
153
|
+
))}
|
|
154
|
+
</ScrollArea.Viewport>
|
|
155
|
+
</ScrollArea.Root>
|
|
156
|
+
);
|
|
47
157
|
},
|
|
48
158
|
};
|
|
159
|
+
|
|
160
|
+
export const NativeScroll = {
|
|
161
|
+
render: () => (
|
|
162
|
+
<div className='group bs-48 is-48 border border-separator'>
|
|
163
|
+
<div
|
|
164
|
+
className={mx(
|
|
165
|
+
'group bs-full is-full overflow-y-scroll',
|
|
166
|
+
'[&::-webkit-scrollbar]:is-3',
|
|
167
|
+
'[&::-webkit-scrollbar-thumb]:rounded-none',
|
|
168
|
+
'[&::-webkit-scrollbar-track]:bg-scrollbarTrack',
|
|
169
|
+
'[&::-webkit-scrollbar-thumb]:bg-scrollbarThumbSubdued',
|
|
170
|
+
'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbarThumb',
|
|
171
|
+
)}
|
|
172
|
+
>
|
|
173
|
+
<Column />
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
),
|
|
177
|
+
};
|
|
@@ -1,111 +1,109 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
|
|
10
|
-
Scrollbar as ScrollAreaPrimitiveScrollbar,
|
|
11
|
-
type ScrollAreaScrollbarProps as ScrollAreaPrimitiveScrollbarProps,
|
|
12
|
-
Thumb as ScrollAreaPrimitiveThumb,
|
|
13
|
-
type ScrollAreaThumbProps as ScrollAreaPrimitiveThumbProps,
|
|
14
|
-
Corner as ScrollAreaPrimitiveCorner,
|
|
15
|
-
type ScrollAreaCornerProps as ScrollAreaPrimitiveCornerProps,
|
|
16
|
-
} from '@radix-ui/react-scroll-area';
|
|
17
|
-
import React, { forwardRef } from 'react';
|
|
5
|
+
import { createContext } from '@radix-ui/react-context';
|
|
6
|
+
import React, { type HTMLAttributes, forwardRef } from 'react';
|
|
7
|
+
|
|
8
|
+
import { type AllowedAxis, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
|
|
18
9
|
|
|
19
10
|
import { useThemeContext } from '../../hooks';
|
|
20
|
-
import { type ThemedClassName } from '../../util';
|
|
21
11
|
|
|
22
|
-
|
|
12
|
+
//
|
|
13
|
+
// Context
|
|
14
|
+
//
|
|
23
15
|
|
|
24
|
-
|
|
16
|
+
const SCROLLAREA_NAME = 'ScrollArea';
|
|
17
|
+
|
|
18
|
+
type ScrollAreaContextType = {
|
|
19
|
+
/** Orientation of scrollbars. */
|
|
20
|
+
orientation: AllowedAxis;
|
|
21
|
+
/** Hide scrollbars when not scrolling. */
|
|
22
|
+
autoHide: boolean;
|
|
23
|
+
/** Apply padding to opposite side of scrollbar. */
|
|
24
|
+
margin?: boolean;
|
|
25
|
+
/** Apply padding. */
|
|
26
|
+
padding: boolean;
|
|
27
|
+
/** Use thin scrollbars. */
|
|
28
|
+
thin: boolean;
|
|
29
|
+
/** Enable snap scrolling. */
|
|
30
|
+
snap: boolean;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaContextType>(SCROLLAREA_NAME);
|
|
34
|
+
|
|
35
|
+
//
|
|
36
|
+
// Root
|
|
37
|
+
//
|
|
38
|
+
|
|
39
|
+
const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
|
|
40
|
+
|
|
41
|
+
type ScrollAreaRootProps = SlottableProps<HTMLDivElement> & Partial<ScrollAreaContextType>;
|
|
25
42
|
|
|
26
43
|
/**
|
|
27
|
-
*
|
|
44
|
+
* ScrollArea provides native scrollbars with custom styling.
|
|
28
45
|
*/
|
|
29
|
-
const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
|
|
47
|
+
(
|
|
48
|
+
{
|
|
49
|
+
className,
|
|
50
|
+
classNames,
|
|
51
|
+
children,
|
|
52
|
+
orientation = 'vertical',
|
|
53
|
+
autoHide = true,
|
|
54
|
+
margin = false,
|
|
55
|
+
padding = false,
|
|
56
|
+
thin = false,
|
|
57
|
+
snap = false,
|
|
58
|
+
...props
|
|
59
|
+
},
|
|
60
|
+
forwardedRef,
|
|
61
|
+
) => {
|
|
44
62
|
const { tx } = useThemeContext();
|
|
63
|
+
const options = { orientation, autoHide, margin, padding, thin, snap };
|
|
64
|
+
|
|
45
65
|
return (
|
|
46
|
-
<
|
|
47
|
-
{...props}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
66
|
+
<ScrollAreaProvider {...options}>
|
|
67
|
+
<div {...props} className={tx('scrollArea.root', options, [className, classNames])} ref={forwardedRef}>
|
|
68
|
+
{children}
|
|
69
|
+
</div>
|
|
70
|
+
</ScrollAreaProvider>
|
|
51
71
|
);
|
|
52
72
|
},
|
|
53
73
|
);
|
|
54
74
|
|
|
55
|
-
|
|
75
|
+
ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
|
|
76
|
+
|
|
77
|
+
//
|
|
78
|
+
// Viewport
|
|
79
|
+
//
|
|
80
|
+
|
|
81
|
+
const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
|
|
82
|
+
|
|
83
|
+
type ScrollAreaViewportProps = ThemedClassName<HTMLAttributes<HTMLDivElement>>;
|
|
56
84
|
|
|
57
|
-
const
|
|
58
|
-
({ classNames,
|
|
85
|
+
const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
|
|
86
|
+
({ classNames, children, ...props }, forwardedRef) => {
|
|
59
87
|
const { tx } = useThemeContext();
|
|
88
|
+
const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
|
|
89
|
+
|
|
60
90
|
return (
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
className={tx('scrollArea.scrollbar', 'scroll-area__scrollbar', {}, classNames)}
|
|
65
|
-
ref={forwardedRef}
|
|
66
|
-
/>
|
|
91
|
+
<div {...props} className={tx('scrollArea.viewport', options, classNames)} ref={forwardedRef}>
|
|
92
|
+
{children}
|
|
93
|
+
</div>
|
|
67
94
|
);
|
|
68
95
|
},
|
|
69
96
|
);
|
|
70
97
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
<ScrollAreaPrimitiveThumb
|
|
77
|
-
{...props}
|
|
78
|
-
className={tx('scrollArea.thumb', 'scroll-area__thumb', {}, classNames)}
|
|
79
|
-
ref={forwardedRef}
|
|
80
|
-
/>
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
type ScrollAreaCornerProps = ThemedClassName<ScrollAreaPrimitiveCornerProps>;
|
|
85
|
-
|
|
86
|
-
const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ classNames, ...props }, forwardedRef) => {
|
|
87
|
-
const { tx } = useThemeContext();
|
|
88
|
-
return (
|
|
89
|
-
<ScrollAreaPrimitiveCorner
|
|
90
|
-
{...props}
|
|
91
|
-
className={tx('scrollArea.corner', 'scroll-area__corner', {}, classNames)}
|
|
92
|
-
ref={forwardedRef}
|
|
93
|
-
/>
|
|
94
|
-
);
|
|
95
|
-
});
|
|
98
|
+
ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
|
|
99
|
+
|
|
100
|
+
//
|
|
101
|
+
// ScrollArea
|
|
102
|
+
//
|
|
96
103
|
|
|
97
104
|
export const ScrollArea = {
|
|
98
105
|
Root: ScrollAreaRoot,
|
|
99
106
|
Viewport: ScrollAreaViewport,
|
|
100
|
-
Scrollbar: ScrollAreaScrollbar,
|
|
101
|
-
Thumb: ScrollAreaThumb,
|
|
102
|
-
Corner: ScrollAreaCorner,
|
|
103
107
|
};
|
|
104
108
|
|
|
105
|
-
export type {
|
|
106
|
-
ScrollAreaRootProps,
|
|
107
|
-
ScrollAreaViewportProps,
|
|
108
|
-
ScrollAreaScrollbarProps,
|
|
109
|
-
ScrollAreaThumbProps,
|
|
110
|
-
ScrollAreaCornerProps,
|
|
111
|
-
};
|
|
109
|
+
export type { ScrollAreaRootProps, ScrollAreaViewportProps };
|