@dxos/react-ui 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7
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-2FKSMWNY.mjs} +117 -117
- package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +2804 -1957
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +56 -32
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/{chunk-2NHEX4AD.mjs → chunk-ZNBLTSHI.mjs} +117 -117
- package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +2804 -1957
- 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 +56 -32
- 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.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +107 -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/Dialog/AlertDialog.d.ts +12 -3
- 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 +11 -4
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -6
- 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/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 +2 -5
- 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.map +1 -1
- 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 +9 -10
- 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/Menu/ContextMenu.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 +2 -3
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +1 -0
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +21 -26
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +41 -9
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +6 -1
- 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/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 +32 -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 +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 -0
- 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.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +33 -7
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +8 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +18 -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/exemplars/virtualizer.stories.d.ts +11 -0
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
- 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/primitives/Column/Column.d.ts +26 -0
- package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -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 +8 -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 +13 -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 +15 -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 +26 -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/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -21
- package/src/components/Avatars/Avatar.stories.tsx +5 -6
- 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 +6 -12
- package/src/components/Button/IconButton.stories.tsx +4 -4
- package/src/components/Button/IconButton.tsx +1 -1
- package/src/components/Button/Toggle.stories.tsx +2 -2
- package/src/components/Button/ToggleGroup.stories.tsx +2 -2
- package/src/components/Card/Card.stories.tsx +151 -0
- package/src/components/Card/Card.tsx +347 -0
- package/src/components/Card/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/components/Dialog/AlertDialog.stories.tsx +15 -15
- package/src/components/Dialog/AlertDialog.tsx +116 -16
- package/src/components/Dialog/Dialog.stories.tsx +40 -15
- package/src/components/Dialog/Dialog.tsx +75 -45
- 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/Icon/Icon.stories.tsx +2 -2
- package/src/components/Icon/Icon.tsx +1 -1
- 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 +20 -65
- 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 +11 -16
- package/src/components/List/ListDropIndicator.tsx +7 -7
- package/src/components/List/Tree.stories.tsx +4 -4
- 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 +41 -23
- package/src/components/Main/Main.tsx +138 -81
- 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 +10 -10
- package/src/components/Message/Message.stories.tsx +25 -10
- package/src/components/Message/Message.tsx +17 -29
- package/src/components/Popover/Popover.stories.tsx +4 -4
- package/src/components/Popover/Popover.tsx +23 -20
- package/src/components/ScrollArea/ScrollArea.stories.tsx +152 -76
- package/src/components/ScrollArea/ScrollArea.tsx +72 -116
- package/src/components/ScrollArea/index.ts +1 -1
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +41 -22
- package/src/components/ScrollContainer/ScrollContainer.tsx +18 -13
- package/src/components/Select/Select.stories.tsx +2 -2
- package/src/components/Select/Select.tsx +11 -27
- 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 +83 -0
- package/src/components/Splitter/Splitter.tsx +126 -0
- package/src/components/Splitter/index.ts +5 -0
- package/src/components/Status/Status.stories.tsx +21 -17
- package/src/components/Status/Status.tsx +2 -2
- 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 +4 -3
- package/src/components/Toast/Toast.stories.tsx +2 -2
- package/src/components/Toast/Toast.tsx +10 -14
- package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
- package/src/components/Toolbar/Toolbar.tsx +174 -12
- package/src/components/Tooltip/Tooltip.stories.tsx +15 -13
- package/src/components/Tooltip/Tooltip.tsx +3 -2
- package/src/components/index.ts +9 -5
- package/src/exemplars/generics.stories.tsx +49 -0
- package/src/exemplars/slot.stories.tsx +107 -0
- package/src/exemplars/tabster.stories.tsx +127 -0
- package/src/exemplars/virtualizer.stories.tsx +137 -0
- package/src/index.ts +1 -0
- package/src/playground/Controls.stories.tsx +3 -10
- package/src/playground/Custom.stories.tsx +10 -10
- package/src/playground/Typography.stories.tsx +3 -3
- package/src/primitives/Column/Column.stories.tsx +78 -0
- package/src/primitives/Column/Column.tsx +134 -0
- package/src/primitives/Column/index.ts +5 -0
- package/src/primitives/Container/Container.stories.tsx +30 -0
- package/src/primitives/Container/Container.tsx +22 -0
- package/src/primitives/Container/index.ts +5 -0
- package/src/primitives/Flex/Flex.stories.tsx +58 -0
- package/src/primitives/Flex/Flex.tsx +29 -0
- package/src/primitives/Flex/index.ts +5 -0
- package/src/primitives/Grid/Grid.stories.tsx +57 -0
- package/src/primitives/Grid/Grid.tsx +35 -0
- package/src/primitives/Grid/index.ts +5 -0
- package/src/primitives/Panel/Panel.stories.tsx +67 -0
- package/src/primitives/Panel/Panel.tsx +119 -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 +19 -17
- package/src/testing/index.ts +2 -0
- package/src/translations.ts +19 -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
|
@@ -214,11 +214,11 @@ type DropdownMenuViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Pr
|
|
|
214
214
|
const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProps>(
|
|
215
215
|
({ classNames, asChild, children, ...props }, forwardedRef) => {
|
|
216
216
|
const { tx } = useThemeContext();
|
|
217
|
-
const
|
|
217
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
218
218
|
return (
|
|
219
|
-
<
|
|
219
|
+
<Comp {...props} className={tx('menu.viewport', {}, classNames)} ref={forwardedRef}>
|
|
220
220
|
{children}
|
|
221
|
-
</
|
|
221
|
+
</Comp>
|
|
222
222
|
);
|
|
223
223
|
},
|
|
224
224
|
);
|
|
@@ -283,7 +283,7 @@ const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuC
|
|
|
283
283
|
}
|
|
284
284
|
})}
|
|
285
285
|
data-arrow-keys='up down'
|
|
286
|
-
className={tx('menu.content',
|
|
286
|
+
className={tx('menu.content', { elevation }, classNames)}
|
|
287
287
|
style={{
|
|
288
288
|
...props.style,
|
|
289
289
|
// re-namespace exposed content custom properties
|
|
@@ -341,7 +341,7 @@ const DropdownMenuGroupLabel = forwardRef<DropdownMenuLabelElement, DropdownMenu
|
|
|
341
341
|
<MenuPrimitive.Label
|
|
342
342
|
{...menuScope}
|
|
343
343
|
{...labelProps}
|
|
344
|
-
className={tx('menu.groupLabel',
|
|
344
|
+
className={tx('menu.groupLabel', {}, classNames)}
|
|
345
345
|
ref={forwardedRef}
|
|
346
346
|
/>
|
|
347
347
|
);
|
|
@@ -369,7 +369,7 @@ const DropdownMenuItem = forwardRef<DropdownMenuItemElement, DropdownMenuItemPro
|
|
|
369
369
|
<MenuPrimitive.Item
|
|
370
370
|
{...menuScope}
|
|
371
371
|
{...itemProps}
|
|
372
|
-
className={tx('menu.item',
|
|
372
|
+
className={tx('menu.item', {}, classNames)}
|
|
373
373
|
ref={forwardedRef}
|
|
374
374
|
/>
|
|
375
375
|
);
|
|
@@ -397,7 +397,7 @@ const DropdownMenuCheckboxItem = forwardRef<DropdownMenuCheckboxItemElement, Dro
|
|
|
397
397
|
<MenuPrimitive.CheckboxItem
|
|
398
398
|
{...menuScope}
|
|
399
399
|
{...checkboxItemProps}
|
|
400
|
-
className={tx('menu.item',
|
|
400
|
+
className={tx('menu.item', {}, classNames)}
|
|
401
401
|
ref={forwardedRef}
|
|
402
402
|
/>
|
|
403
403
|
);
|
|
@@ -445,7 +445,7 @@ const DropdownMenuRadioItem = forwardRef<DropdownMenuRadioItemElement, DropdownM
|
|
|
445
445
|
<MenuPrimitive.Item
|
|
446
446
|
{...menuScope}
|
|
447
447
|
{...itemProps}
|
|
448
|
-
className={tx('menu.item',
|
|
448
|
+
className={tx('menu.item', {}, classNames)}
|
|
449
449
|
ref={forwardedRef}
|
|
450
450
|
/>
|
|
451
451
|
);
|
|
@@ -493,7 +493,7 @@ const DropdownMenuSeparator = forwardRef<DropdownMenuSeparatorElement, DropdownM
|
|
|
493
493
|
<MenuPrimitive.Separator
|
|
494
494
|
{...menuScope}
|
|
495
495
|
{...separatorProps}
|
|
496
|
-
className={tx('menu.separator',
|
|
496
|
+
className={tx('menu.separator', {}, classNames)}
|
|
497
497
|
ref={forwardedRef}
|
|
498
498
|
/>
|
|
499
499
|
);
|
|
@@ -521,7 +521,7 @@ const DropdownMenuArrow = forwardRef<DropdownMenuArrowElement, DropdownMenuArrow
|
|
|
521
521
|
<MenuPrimitive.Arrow
|
|
522
522
|
{...menuScope}
|
|
523
523
|
{...arrowProps}
|
|
524
|
-
className={tx('menu.arrow',
|
|
524
|
+
className={tx('menu.arrow', {}, classNames)}
|
|
525
525
|
ref={forwardedRef}
|
|
526
526
|
/>
|
|
527
527
|
);
|
|
@@ -5,11 +5,14 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
+
import { faker } from '@dxos/random';
|
|
8
9
|
import { type MessageValence } from '@dxos/ui-types';
|
|
9
10
|
|
|
10
11
|
import { withTheme } from '../../testing';
|
|
11
12
|
|
|
12
|
-
import {
|
|
13
|
+
import { Message } from './Message';
|
|
14
|
+
|
|
15
|
+
faker.seed(123);
|
|
13
16
|
|
|
14
17
|
type StoryProps = {
|
|
15
18
|
valence: MessageValence;
|
|
@@ -18,18 +21,22 @@ type StoryProps = {
|
|
|
18
21
|
};
|
|
19
22
|
|
|
20
23
|
const DefaultStory = ({ valence, title, body }: StoryProps) => (
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
<div className='w-[30rem]'>
|
|
25
|
+
<Message.Root valence={valence}>
|
|
26
|
+
{title && <Message.Title>{title}</Message.Title>}
|
|
27
|
+
{body && <Message.Content>{body}</Message.Content>}
|
|
28
|
+
</Message.Root>
|
|
29
|
+
</div>
|
|
25
30
|
);
|
|
26
31
|
|
|
27
32
|
const meta = {
|
|
28
|
-
title: 'ui/react-ui-core/
|
|
29
|
-
component:
|
|
33
|
+
title: 'ui/react-ui-core/components/Message',
|
|
34
|
+
component: Message.Root as any,
|
|
30
35
|
render: DefaultStory,
|
|
31
|
-
decorators: [withTheme],
|
|
32
|
-
parameters: {
|
|
36
|
+
decorators: [withTheme()],
|
|
37
|
+
parameters: {
|
|
38
|
+
layout: 'centered',
|
|
39
|
+
},
|
|
33
40
|
argTypes: {
|
|
34
41
|
valence: {
|
|
35
42
|
control: 'select',
|
|
@@ -46,6 +53,14 @@ export const Default: Story = {
|
|
|
46
53
|
args: {
|
|
47
54
|
valence: 'neutral',
|
|
48
55
|
title: 'Alert title',
|
|
49
|
-
body:
|
|
56
|
+
body: faker.lorem.paragraphs(1),
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const Error: Story = {
|
|
61
|
+
args: {
|
|
62
|
+
valence: 'error',
|
|
63
|
+
title: 'Error title',
|
|
64
|
+
body: faker.lorem.paragraphs(1),
|
|
50
65
|
},
|
|
51
66
|
};
|
|
@@ -58,20 +58,20 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
58
58
|
const titleId = useId('message__title', propsTitleId);
|
|
59
59
|
const descriptionId = useId('message__description', propsDescriptionId);
|
|
60
60
|
const elevation = useElevationContext(propsElevation);
|
|
61
|
-
const
|
|
61
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
62
62
|
|
|
63
63
|
return (
|
|
64
64
|
<MessageProvider {...{ titleId, descriptionId, valence }}>
|
|
65
|
-
<
|
|
65
|
+
<Comp
|
|
66
66
|
role={valence === 'neutral' ? 'paragraph' : 'alert'}
|
|
67
67
|
{...props}
|
|
68
|
-
className={tx('message.root',
|
|
68
|
+
className={tx('message.root', { valence, elevation }, classNames)}
|
|
69
69
|
aria-labelledby={titleId}
|
|
70
70
|
aria-describedby={descriptionId}
|
|
71
71
|
ref={forwardedRef}
|
|
72
72
|
>
|
|
73
73
|
{children}
|
|
74
|
-
</
|
|
74
|
+
</Comp>
|
|
75
75
|
</MessageProvider>
|
|
76
76
|
);
|
|
77
77
|
},
|
|
@@ -91,27 +91,20 @@ type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primi
|
|
|
91
91
|
const MESSAGE_TITLE_NAME = 'MessageTitle';
|
|
92
92
|
|
|
93
93
|
const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
|
|
94
|
-
({ asChild, classNames, children, icon, ...props }, forwardedRef) => {
|
|
94
|
+
({ asChild, classNames, children, icon: iconProp, ...props }, forwardedRef) => {
|
|
95
95
|
const { tx } = useThemeContext();
|
|
96
96
|
const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
|
|
97
|
-
const
|
|
98
|
-
|
|
97
|
+
const Comp = asChild ? Slot : Primitive.h2;
|
|
98
|
+
const icon = iconProp ?? messageIcons[valence];
|
|
99
99
|
return (
|
|
100
|
-
<
|
|
101
|
-
{
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
>
|
|
106
|
-
{!icon && valence === 'neutral' ? null : (
|
|
107
|
-
<Icon
|
|
108
|
-
size={5}
|
|
109
|
-
icon={icon ?? messageIcons[valence]}
|
|
110
|
-
classNames={tx('message.icon', 'message__icon', { valence })}
|
|
111
|
-
/>
|
|
100
|
+
<Comp {...props} className={tx('message.header', {}, classNames)} id={titleId} ref={forwardedRef}>
|
|
101
|
+
{!icon && valence === 'neutral' ? (
|
|
102
|
+
<div />
|
|
103
|
+
) : (
|
|
104
|
+
<Icon size={5} icon={icon} classNames={tx('message.icon', { valence })} />
|
|
112
105
|
)}
|
|
113
|
-
<span>{children}</span>
|
|
114
|
-
</
|
|
106
|
+
<span className={tx('message.title', {}, classNames)}>{children}</span>
|
|
107
|
+
</Comp>
|
|
115
108
|
);
|
|
116
109
|
},
|
|
117
110
|
);
|
|
@@ -132,16 +125,11 @@ const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
|
|
|
132
125
|
({ asChild, classNames, children, ...props }, forwardedRef) => {
|
|
133
126
|
const { tx } = useThemeContext();
|
|
134
127
|
const { descriptionId } = useMessageContext(MESSAGE_CONTENT_NAME);
|
|
135
|
-
const
|
|
128
|
+
const Comp = asChild ? Slot : Primitive.p;
|
|
136
129
|
return (
|
|
137
|
-
<
|
|
138
|
-
{...props}
|
|
139
|
-
className={tx('message.content', 'message__content', {}, classNames)}
|
|
140
|
-
id={descriptionId}
|
|
141
|
-
ref={forwardedRef}
|
|
142
|
-
>
|
|
130
|
+
<Comp {...props} className={tx('message.content', {}, classNames)} id={descriptionId} ref={forwardedRef}>
|
|
143
131
|
{children}
|
|
144
|
-
</
|
|
132
|
+
</Comp>
|
|
145
133
|
);
|
|
146
134
|
},
|
|
147
135
|
);
|
|
@@ -20,7 +20,7 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
|
|
|
20
20
|
<Popover.Trigger asChild>{openTrigger}</Popover.Trigger>
|
|
21
21
|
<Popover.Content>
|
|
22
22
|
<Popover.Viewport>
|
|
23
|
-
<p className='
|
|
23
|
+
<p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{children}</p>
|
|
24
24
|
</Popover.Viewport>
|
|
25
25
|
<Popover.Arrow />
|
|
26
26
|
</Popover.Content>
|
|
@@ -29,10 +29,10 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
const meta = {
|
|
32
|
-
title: 'ui/react-ui-core/Popover',
|
|
32
|
+
title: 'ui/react-ui-core/components/Popover',
|
|
33
33
|
component: Popover.Root,
|
|
34
34
|
render: DefaultStory,
|
|
35
|
-
decorators: [withTheme],
|
|
35
|
+
decorators: [withTheme()],
|
|
36
36
|
} satisfies Meta<typeof DefaultStory>;
|
|
37
37
|
|
|
38
38
|
export default meta;
|
|
@@ -59,7 +59,7 @@ export const VirtualTrigger = {
|
|
|
59
59
|
<Popover.VirtualTrigger virtualRef={buttonRef} />
|
|
60
60
|
<Popover.Content>
|
|
61
61
|
<Popover.Viewport>
|
|
62
|
-
<p className='
|
|
62
|
+
<p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{faker.lorem.paragraphs(3)}</p>
|
|
63
63
|
</Popover.Viewport>
|
|
64
64
|
<Popover.Arrow />
|
|
65
65
|
</Popover.Content>
|
|
@@ -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,9 @@ import { hideOthers } from 'aria-hidden';
|
|
|
23
23
|
import React, {
|
|
24
24
|
type ComponentPropsWithRef,
|
|
25
25
|
type ComponentPropsWithoutRef,
|
|
26
|
+
type ComponentRef,
|
|
26
27
|
type ElementRef,
|
|
27
28
|
type FC,
|
|
28
|
-
type MutableRefObject,
|
|
29
29
|
type ReactNode,
|
|
30
30
|
type RefObject,
|
|
31
31
|
forwardRef,
|
|
@@ -52,7 +52,7 @@ const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NA
|
|
|
52
52
|
const usePopperScope = createPopperScope();
|
|
53
53
|
|
|
54
54
|
type PopoverContextValue = {
|
|
55
|
-
triggerRef:
|
|
55
|
+
triggerRef: RefObject<HTMLButtonElement>;
|
|
56
56
|
contentId: string;
|
|
57
57
|
open: boolean;
|
|
58
58
|
onOpenChange(open: boolean): void;
|
|
@@ -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,7 +116,7 @@ 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
|
interface PopoverAnchorProps extends PopperAnchorProps {}
|
|
122
122
|
|
|
@@ -146,17 +146,20 @@ const TRIGGER_NAME = 'PopoverTrigger';
|
|
|
146
146
|
|
|
147
147
|
type PopoverTriggerElement = ElementRef<typeof Primitive.button>;
|
|
148
148
|
type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
149
|
-
interface PopoverTriggerProps extends PrimitiveButtonProps {
|
|
149
|
+
interface PopoverTriggerProps extends 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}
|
|
@@ -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) => {
|
|
@@ -399,8 +403,7 @@ type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
|
|
|
399
403
|
type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
|
|
400
404
|
|
|
401
405
|
interface PopoverContentImplProps
|
|
402
|
-
extends Omit<PopperContentProps, 'onPlaced'>,
|
|
403
|
-
Omit<DismissableLayerProps, 'onDismiss'> {
|
|
406
|
+
extends Omit<PopperContentProps, 'onPlaced'>, Omit<DismissableLayerProps, 'onDismiss'> {
|
|
404
407
|
/**
|
|
405
408
|
* Whether focus should be trapped within the `Popover`
|
|
406
409
|
* (default: false)
|
|
@@ -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,
|
|
@@ -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,177 @@
|
|
|
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, { 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';
|
|
14
13
|
|
|
15
|
-
faker.seed(
|
|
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
|
-
};
|
|
14
|
+
faker.seed(123);
|
|
35
15
|
|
|
36
|
-
|
|
37
|
-
title: 'ui/react-ui-core/ScrollArea',
|
|
38
|
-
component: ScrollArea
|
|
39
|
-
|
|
40
|
-
decorators: [withTheme, withLayout({ layout: 'fullscreen' })],
|
|
16
|
+
export default {
|
|
17
|
+
title: 'ui/react-ui-core/components/ScrollArea',
|
|
18
|
+
component: ScrollArea,
|
|
19
|
+
decorators: [withTheme()],
|
|
41
20
|
parameters: {
|
|
42
|
-
layout: '
|
|
21
|
+
layout: 'centered',
|
|
43
22
|
},
|
|
44
|
-
}
|
|
23
|
+
};
|
|
45
24
|
|
|
46
|
-
|
|
25
|
+
const Column = () => (
|
|
26
|
+
<div>
|
|
27
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
28
|
+
<div key={index} className='px-1 text-sm cursor-pointer hover:bg-hover-surface'>
|
|
29
|
+
Item {index + 1}
|
|
30
|
+
</div>
|
|
31
|
+
))}
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
47
34
|
|
|
48
|
-
|
|
35
|
+
const Row = () => (
|
|
36
|
+
<div className='flex gap-2 w-max'>
|
|
37
|
+
{Array.from({ length: 50 }).map((_, index) => (
|
|
38
|
+
<div
|
|
39
|
+
key={index}
|
|
40
|
+
className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center text-sm hover:bg-hover-surface'
|
|
41
|
+
>
|
|
42
|
+
{index + 1}
|
|
43
|
+
</div>
|
|
44
|
+
))}
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
49
47
|
|
|
50
|
-
export const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
export const Vertical = {
|
|
49
|
+
render: () => (
|
|
50
|
+
<div className='h-72 w-48 p-2 border border-separator rounded-md'>
|
|
51
|
+
<ScrollArea.Root orientation='vertical' padding>
|
|
52
|
+
<ScrollArea.Viewport>
|
|
53
|
+
<Column />
|
|
54
|
+
</ScrollArea.Viewport>
|
|
55
|
+
</ScrollArea.Root>
|
|
56
|
+
</div>
|
|
57
|
+
),
|
|
54
58
|
};
|
|
55
59
|
|
|
56
|
-
export const
|
|
57
|
-
render: () =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
export const VerticalThin = {
|
|
61
|
+
render: () => (
|
|
62
|
+
<div className='h-72 w-48 p-2 border border-separator rounded-md'>
|
|
63
|
+
<ScrollArea.Root orientation='vertical' padding thin>
|
|
64
|
+
<ScrollArea.Viewport>
|
|
65
|
+
<Column />
|
|
66
|
+
</ScrollArea.Viewport>
|
|
67
|
+
</ScrollArea.Root>
|
|
68
|
+
</div>
|
|
69
|
+
),
|
|
70
|
+
};
|
|
62
71
|
|
|
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
|
-
|
|
72
|
+
export const Horizontal = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<div className='w-96 p-2 border border-separator rounded-md'>
|
|
75
|
+
<ScrollArea.Root orientation='horizontal' padding>
|
|
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='w-96 p-2 border border-separator rounded-md'>
|
|
87
|
+
<ScrollArea.Root orientation='horizontal' padding thin>
|
|
88
|
+
<ScrollArea.Viewport>
|
|
89
|
+
<Row />
|
|
90
|
+
</ScrollArea.Viewport>
|
|
91
|
+
</ScrollArea.Root>
|
|
92
|
+
</div>
|
|
93
|
+
),
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const Both = {
|
|
97
|
+
render: () => (
|
|
98
|
+
<div className='h-96 w-96 p-2 border border-separator rounded-md'>
|
|
99
|
+
<ScrollArea.Root orientation='all' padding>
|
|
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 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
|
|
108
|
+
>
|
|
109
|
+
[{colIndex}:{rowIndex}]
|
|
89
110
|
</div>
|
|
90
111
|
))}
|
|
91
112
|
</div>
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
|
|
140
|
+
>
|
|
141
|
+
<header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
|
|
142
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
143
|
+
<ScrollArea.Viewport classNames='py-2 px-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-xs`}>
|
|
146
|
+
Item {i + 1}
|
|
147
|
+
</div>
|
|
148
|
+
))}
|
|
149
|
+
</ScrollArea.Viewport>
|
|
150
|
+
</ScrollArea.Root>
|
|
151
|
+
<footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
|
|
152
|
+
</section>
|
|
153
|
+
))}
|
|
154
|
+
</ScrollArea.Viewport>
|
|
155
|
+
</ScrollArea.Root>
|
|
99
156
|
);
|
|
100
157
|
},
|
|
101
158
|
};
|
|
159
|
+
|
|
160
|
+
export const NativeScroll = {
|
|
161
|
+
render: () => (
|
|
162
|
+
<div className='group h-48 w-48 border border-separator'>
|
|
163
|
+
<div
|
|
164
|
+
className={mx(
|
|
165
|
+
'group h-full w-full overflow-y-scroll',
|
|
166
|
+
'[&::-webkit-scrollbar]:w-3',
|
|
167
|
+
'[&::-webkit-scrollbar-thumb]:rounded-none',
|
|
168
|
+
'[&::-webkit-scrollbar-track]:bg-scrollbar-track',
|
|
169
|
+
'[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
|
|
170
|
+
'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
|
|
171
|
+
)}
|
|
172
|
+
>
|
|
173
|
+
<Column />
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
),
|
|
177
|
+
};
|