@dxos/react-ui 0.8.4-main.bc674ce → 0.8.4-main.bd9b33e6c8
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-CEKVHJ27.mjs → chunk-LUPEFGHJ.mjs} +119 -117
- package/dist/lib/browser/chunk-LUPEFGHJ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3021 -2087
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +59 -36
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-EQOBFLZC.mjs} +119 -117
- package/dist/lib/node-esm/chunk-EQOBFLZC.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3021 -2087
- 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 +59 -36
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- 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/Breadcrumb/Breadcrumb.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/IconButton.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/ToggleGroup.d.ts +6 -6
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +145 -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/Clipboard/index.d.ts +10 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +41 -19
- 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 -22
- 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/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 +8 -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 +44 -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 +3 -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 +14 -0
- package/dist/types/src/components/Image/Image.d.ts.map +1 -0
- package/dist/types/src/components/Image/Image.stories.d.ts +33 -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 +4 -7
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +7 -7
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +9 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +8 -2
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +6 -32
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +1 -5
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +51 -50
- 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.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 +32 -23
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +31 -25
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +62 -9
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +23 -7
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +6 -2
- 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.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 +37 -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.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 +2 -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/Toast/Toast.d.ts +15 -15
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +37 -11
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
- 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 +23 -0
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts +15 -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/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/index.d.ts +1 -0
- package/dist/types/src/index.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.map +1 -1
- package/dist/types/src/primitives/Column/Column.d.ts +51 -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 +11 -0
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/Container/index.d.ts +2 -0
- package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
- 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/Flex/index.d.ts +2 -0
- package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Grid/Grid.d.ts +14 -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 +46 -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 +6 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -0
- 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 +3 -2
- 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 +11 -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 +25 -21
- package/src/components/Avatars/Avatar.stories.tsx +7 -8
- package/src/components/Avatars/Avatar.tsx +5 -12
- package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
- package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
- package/src/components/Button/Button.stories.tsx +3 -3
- package/src/components/Button/Button.tsx +11 -25
- package/src/components/Button/IconButton.stories.tsx +4 -4
- package/src/components/Button/IconButton.tsx +2 -3
- package/src/components/Button/Toggle.stories.tsx +2 -2
- package/src/components/Button/Toggle.tsx +4 -4
- package/src/components/Button/ToggleGroup.stories.tsx +2 -2
- package/src/components/Button/ToggleGroup.tsx +12 -16
- package/src/components/Card/Card.stories.tsx +151 -0
- package/src/components/Card/Card.tsx +394 -0
- package/src/components/Card/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/components/Dialog/AlertDialog.stories.tsx +16 -16
- package/src/components/Dialog/AlertDialog.tsx +121 -82
- package/src/components/Dialog/Dialog.stories.tsx +98 -17
- package/src/components/Dialog/Dialog.tsx +108 -87
- package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
- package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
- package/src/components/ErrorFallback/ErrorStack.tsx +80 -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 +45 -14
- package/src/components/Icon/Icon.tsx +6 -2
- package/src/components/Image/Image.stories.tsx +86 -0
- package/src/components/Image/Image.tsx +223 -0
- package/src/components/Image/index.ts +5 -0
- package/src/components/Input/Input.stories.tsx +20 -39
- package/src/components/Input/Input.tsx +24 -69
- package/src/components/Link/Link.stories.tsx +2 -2
- package/src/components/Link/Link.tsx +2 -2
- package/src/components/List/List.stories.tsx +15 -22
- package/src/components/List/List.tsx +15 -18
- package/src/components/List/ListDropIndicator.tsx +7 -7
- package/src/components/List/Tree.stories.tsx +5 -5
- package/src/components/List/TreeDropIndicator.tsx +6 -6
- package/src/components/List/Treegrid.stories.tsx +3 -3
- package/src/components/List/Treegrid.tsx +10 -15
- package/src/components/Main/Main.stories.tsx +6 -95
- package/src/components/Main/Main.tsx +61 -211
- package/src/components/Menu/ContextMenu.stories.tsx +2 -2
- package/src/components/Menu/ContextMenu.tsx +9 -33
- package/src/components/Menu/DropdownMenu.stories.tsx +2 -2
- package/src/components/Menu/DropdownMenu.tsx +58 -52
- package/src/components/Message/Message.stories.tsx +27 -12
- package/src/components/Message/Message.tsx +14 -30
- package/src/components/Popover/Popover.stories.tsx +4 -4
- package/src/components/Popover/Popover.tsx +62 -59
- package/src/components/ScrollArea/ScrollArea.stories.tsx +213 -73
- package/src/components/ScrollArea/ScrollArea.tsx +85 -113
- package/src/components/ScrollArea/index.ts +1 -1
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +43 -23
- package/src/components/ScrollContainer/ScrollContainer.tsx +174 -87
- package/src/components/Select/Select.stories.tsx +4 -4
- package/src/components/Select/Select.tsx +11 -27
- package/src/components/Separator/Separator.tsx +5 -8
- 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 +83 -0
- package/src/components/Splitter/Splitter.tsx +140 -0
- package/src/components/Splitter/index.ts +5 -0
- package/src/components/Status/Status.stories.tsx +21 -17
- package/src/components/Status/Status.tsx +10 -7
- package/src/components/Tag/Tag.stories.tsx +4 -9
- package/src/components/Tag/Tag.tsx +2 -7
- package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
- package/src/components/ThemeProvider/ThemeProvider.tsx +9 -6
- package/src/components/Toast/Toast.stories.tsx +2 -2
- package/src/components/Toast/Toast.tsx +22 -41
- package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
- package/src/components/Toolbar/Toolbar.tsx +171 -25
- package/src/components/Tooltip/Tooltip.stories.tsx +16 -14
- package/src/components/Tooltip/Tooltip.tsx +18 -18
- package/src/components/index.ts +10 -5
- package/src/exemplars/generics.stories.tsx +41 -0
- package/src/exemplars/slot.stories.tsx +117 -0
- package/src/exemplars/tabster.stories.tsx +127 -0
- package/src/exemplars/virtualizer.stories.tsx +137 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDensityContext.ts +2 -2
- package/src/index.ts +1 -0
- package/src/playground/Controls.stories.tsx +3 -10
- package/src/playground/Custom.stories.tsx +11 -21
- package/src/playground/Typography.stories.tsx +3 -3
- package/src/primitives/Column/AUDIT.md +354 -0
- package/src/primitives/Column/Column.stories.tsx +183 -0
- package/src/primitives/Column/Column.tsx +169 -0
- package/src/primitives/Column/index.ts +5 -0
- package/src/primitives/Container/Container.stories.tsx +30 -0
- package/src/primitives/Container/Container.tsx +19 -0
- package/src/primitives/Container/index.ts +5 -0
- package/src/primitives/Flex/Flex.stories.tsx +58 -0
- package/src/primitives/Flex/Flex.tsx +24 -0
- package/src/primitives/Flex/index.ts +5 -0
- package/src/primitives/Grid/Grid.stories.tsx +57 -0
- package/src/primitives/Grid/Grid.tsx +30 -0
- package/src/primitives/Grid/index.ts +5 -0
- package/src/primitives/Panel/Panel.stories.tsx +67 -0
- package/src/primitives/Panel/Panel.tsx +114 -0
- package/src/primitives/Panel/index.ts +5 -0
- package/src/primitives/index.ts +9 -0
- package/src/testing/Loading.tsx +26 -0
- package/src/testing/decorators/withLayout.tsx +21 -7
- package/src/testing/decorators/withLayoutVariants.tsx +18 -21
- package/src/testing/decorators/withTheme.tsx +24 -19
- package/src/testing/index.ts +2 -0
- package/src/translations.ts +19 -0
- package/src/util/usePx.ts +1 -0
- package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +0 -7
- package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
- 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/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
- package/src/components/AnchoredOverflow/index.ts +0 -5
|
@@ -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
|
);
|
|
@@ -1,101 +1,241 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import React, { type PropsWithChildren } from 'react';
|
|
5
|
+
import React, { PropsWithChildren, useMemo } from 'react';
|
|
7
6
|
|
|
8
7
|
import { faker } from '@dxos/random';
|
|
9
|
-
import {
|
|
8
|
+
import { mx } from '@dxos/ui-theme';
|
|
10
9
|
|
|
11
10
|
import { withLayout, withTheme } from '../../testing';
|
|
12
11
|
|
|
13
12
|
import { ScrollArea } from './ScrollArea';
|
|
13
|
+
import { Column } from '../../primitives';
|
|
14
|
+
import { Input } from '../Input';
|
|
15
|
+
import { ThemedClassName } from '@dxos/ui-types';
|
|
14
16
|
|
|
15
|
-
faker.seed(
|
|
17
|
+
faker.seed(123);
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
export default {
|
|
20
|
+
title: 'ui/react-ui-core/components/ScrollArea',
|
|
21
|
+
component: ScrollArea,
|
|
22
|
+
decorators: [withTheme()],
|
|
23
|
+
parameters: {
|
|
24
|
+
layout: 'centered',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const List = ({ items = 50 }: { items?: number }) => (
|
|
29
|
+
<div>
|
|
30
|
+
{Array.from({ length: items }).map((_, index) => (
|
|
31
|
+
<div key={index} className='px-1 cursor-pointer hover:bg-hover-surface'>
|
|
32
|
+
Item {index + 1}
|
|
33
|
+
</div>
|
|
34
|
+
))}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
const Row = ({ items = 50 }: { items?: number }) => (
|
|
39
|
+
<div className='flex gap-2 w-max'>
|
|
40
|
+
{Array.from({ length: items }).map((_, index) => (
|
|
41
|
+
<div
|
|
42
|
+
key={index}
|
|
43
|
+
className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center hover:bg-hover-surface'
|
|
44
|
+
>
|
|
45
|
+
{index + 1}
|
|
46
|
+
</div>
|
|
47
|
+
))}
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
|
|
18
52
|
return (
|
|
19
|
-
<
|
|
20
|
-
|
|
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>
|
|
53
|
+
<div role='none' className={mx('border border-separator rounded-md overflow-hidden', classNames)}>
|
|
54
|
+
{children}
|
|
55
|
+
</div>
|
|
33
56
|
);
|
|
34
57
|
};
|
|
35
58
|
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
59
|
+
export const Vertical = {
|
|
60
|
+
render: () => (
|
|
61
|
+
<Container classNames='h-72 w-48'>
|
|
62
|
+
<ScrollArea.Root orientation='vertical'>
|
|
63
|
+
<ScrollArea.Viewport>
|
|
64
|
+
<List />
|
|
65
|
+
</ScrollArea.Viewport>
|
|
66
|
+
</ScrollArea.Root>
|
|
67
|
+
</Container>
|
|
68
|
+
),
|
|
69
|
+
};
|
|
45
70
|
|
|
46
|
-
export
|
|
71
|
+
export const VerticalThin = {
|
|
72
|
+
render: () => (
|
|
73
|
+
<Container classNames='h-72 w-48'>
|
|
74
|
+
<ScrollArea.Root orientation='vertical' thin>
|
|
75
|
+
<ScrollArea.Viewport>
|
|
76
|
+
<List />
|
|
77
|
+
</ScrollArea.Viewport>
|
|
78
|
+
</ScrollArea.Root>
|
|
79
|
+
</Container>
|
|
80
|
+
),
|
|
81
|
+
};
|
|
47
82
|
|
|
48
|
-
|
|
83
|
+
export const VerticalPadded = {
|
|
84
|
+
render: () => (
|
|
85
|
+
<Container classNames='h-72 w-48'>
|
|
86
|
+
<ScrollArea.Root orientation='vertical' centered padding thin>
|
|
87
|
+
<ScrollArea.Viewport>
|
|
88
|
+
<List />
|
|
89
|
+
</ScrollArea.Viewport>
|
|
90
|
+
</ScrollArea.Root>
|
|
91
|
+
</Container>
|
|
92
|
+
),
|
|
93
|
+
};
|
|
49
94
|
|
|
50
|
-
export const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
95
|
+
export const VerticalColumn = {
|
|
96
|
+
render: () => (
|
|
97
|
+
<Container classNames='h-72 w-48'>
|
|
98
|
+
<Column.Root gutter='sm' classNames='h-full overflow-hidden'>
|
|
99
|
+
<ScrollArea.Root orientation='vertical' padding thin>
|
|
100
|
+
<ScrollArea.Viewport classNames='py-2'>
|
|
101
|
+
<Input.Root>
|
|
102
|
+
<Input.TextInput classNames='p-1' />
|
|
103
|
+
</Input.Root>
|
|
104
|
+
<List />
|
|
105
|
+
</ScrollArea.Viewport>
|
|
106
|
+
</ScrollArea.Root>
|
|
107
|
+
</Column.Root>
|
|
108
|
+
</Container>
|
|
109
|
+
),
|
|
54
110
|
};
|
|
55
111
|
|
|
56
|
-
export const
|
|
57
|
-
render: () =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
112
|
+
export const Horizontal = {
|
|
113
|
+
render: () => (
|
|
114
|
+
<Container classNames='w-96'>
|
|
115
|
+
<ScrollArea.Root orientation='horizontal'>
|
|
116
|
+
<ScrollArea.Viewport>
|
|
117
|
+
<Row />
|
|
118
|
+
</ScrollArea.Viewport>
|
|
119
|
+
</ScrollArea.Root>
|
|
120
|
+
</Container>
|
|
121
|
+
),
|
|
122
|
+
};
|
|
62
123
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
124
|
+
export const HorizontalThin = {
|
|
125
|
+
render: () => (
|
|
126
|
+
<Container classNames='w-96'>
|
|
127
|
+
<ScrollArea.Root orientation='horizontal' thin>
|
|
128
|
+
<ScrollArea.Viewport>
|
|
129
|
+
<Row />
|
|
130
|
+
</ScrollArea.Viewport>
|
|
131
|
+
</ScrollArea.Root>
|
|
132
|
+
</Container>
|
|
133
|
+
),
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const Both = {
|
|
137
|
+
render: () => (
|
|
138
|
+
<Container classNames='w-96 h-96'>
|
|
139
|
+
<ScrollArea.Root orientation='all'>
|
|
140
|
+
<ScrollArea.Viewport>
|
|
141
|
+
<div className='flex flex-col gap-2'>
|
|
142
|
+
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
143
|
+
<div key={rowIndex} className='flex gap-2'>
|
|
144
|
+
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
145
|
+
<div
|
|
146
|
+
key={colIndex}
|
|
147
|
+
className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
148
|
+
>
|
|
149
|
+
[{colIndex}:{rowIndex}]
|
|
89
150
|
</div>
|
|
90
151
|
))}
|
|
91
152
|
</div>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
153
|
+
))}
|
|
154
|
+
</div>
|
|
155
|
+
</ScrollArea.Viewport>
|
|
156
|
+
</ScrollArea.Root>
|
|
157
|
+
</Container>
|
|
158
|
+
),
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
export const Fullscreen = {
|
|
162
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
163
|
+
render: () => (
|
|
164
|
+
<ScrollArea.Root orientation='all' thin>
|
|
165
|
+
<ScrollArea.Viewport>
|
|
166
|
+
<div className='flex flex-col gap-2'>
|
|
167
|
+
{Array.from({ length: 50 }).map((_, rowIndex) => (
|
|
168
|
+
<div key={rowIndex} className='flex gap-2'>
|
|
169
|
+
{Array.from({ length: 50 }).map((_, colIndex) => (
|
|
170
|
+
<div
|
|
171
|
+
key={colIndex}
|
|
172
|
+
className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
173
|
+
>
|
|
174
|
+
[{colIndex}:{rowIndex}]
|
|
175
|
+
</div>
|
|
176
|
+
))}
|
|
177
|
+
</div>
|
|
178
|
+
))}
|
|
97
179
|
</div>
|
|
98
|
-
</
|
|
180
|
+
</ScrollArea.Viewport>
|
|
181
|
+
</ScrollArea.Root>
|
|
182
|
+
),
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export const NestedScrollAreas = {
|
|
186
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
187
|
+
render: () => {
|
|
188
|
+
const columns = useMemo(
|
|
189
|
+
() =>
|
|
190
|
+
Array.from({ length: 8 }).map((_, index) => ({
|
|
191
|
+
id: String(index),
|
|
192
|
+
count: faker.number.int({ min: 5, max: 20 }),
|
|
193
|
+
})),
|
|
194
|
+
[],
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
return (
|
|
198
|
+
<ScrollArea.Root orientation='horizontal' thin padding>
|
|
199
|
+
<ScrollArea.Viewport classNames='gap-4'>
|
|
200
|
+
{columns.map((column) => (
|
|
201
|
+
<section
|
|
202
|
+
key={column.id}
|
|
203
|
+
className='shrink-0 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
|
|
204
|
+
>
|
|
205
|
+
<header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
|
|
206
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
207
|
+
<ScrollArea.Viewport classNames='py-2 px-2 gap-2'>
|
|
208
|
+
{Array.from({ length: column.count }, (_, i) => (
|
|
209
|
+
<div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-xs`}>
|
|
210
|
+
Item {i + 1}
|
|
211
|
+
</div>
|
|
212
|
+
))}
|
|
213
|
+
</ScrollArea.Viewport>
|
|
214
|
+
</ScrollArea.Root>
|
|
215
|
+
<footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
|
|
216
|
+
</section>
|
|
217
|
+
))}
|
|
218
|
+
</ScrollArea.Viewport>
|
|
219
|
+
</ScrollArea.Root>
|
|
99
220
|
);
|
|
100
221
|
},
|
|
101
222
|
};
|
|
223
|
+
|
|
224
|
+
export const NativeScroll = {
|
|
225
|
+
render: () => (
|
|
226
|
+
<div className='group h-48 w-48 border border-separator'>
|
|
227
|
+
<div
|
|
228
|
+
className={mx(
|
|
229
|
+
'group h-full w-full overflow-y-scroll',
|
|
230
|
+
'[&::-webkit-scrollbar]:w-3',
|
|
231
|
+
'[&::-webkit-scrollbar-thumb]:rounded-none',
|
|
232
|
+
'[&::-webkit-scrollbar-track]:bg-scrollbar-track',
|
|
233
|
+
'[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
|
|
234
|
+
'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
|
|
235
|
+
)}
|
|
236
|
+
>
|
|
237
|
+
<List />
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
),
|
|
241
|
+
};
|