@dxos/react-ui 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963
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-2FKSMWNY.mjs → chunk-BDBC6H6V.mjs} +79 -5
- package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1203 -1020
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +44 -14
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/browser/translations.mjs +18 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-3JSJK2ZY.mjs} +79 -5
- package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1203 -1020
- 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 +44 -14
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/translations.mjs +20 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.d.ts +2 -2
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.d.ts +2 -2
- package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
- package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.d.ts +70 -64
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +10 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
- 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 +47 -30
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +36 -0
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
- package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
- package/dist/types/src/components/Focus/index.d.ts +2 -0
- package/dist/types/src/components/Focus/index.d.ts.map +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts +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 +2 -1
- package/dist/types/src/components/Image/Image.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +14 -17
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.d.ts +5 -3
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +3 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.d.ts +2 -2
- package/dist/types/src/components/List/Tree.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +5 -9
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +7 -3
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.d.ts +1 -1
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +38 -22
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -11
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +21 -10
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Separator/Separator.d.ts +3 -3
- package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.d.ts +19 -21
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.d.ts +3 -4
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.d.ts +16 -16
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +10 -20
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
- 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 +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.d.ts +20 -19
- package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
- package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +7 -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 +8 -5
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts +6 -5
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Panel/Panel.d.ts +23 -22
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/index.d.ts +1 -0
- package/dist/types/src/primitives/index.d.ts.map +1 -1
- package/dist/types/src/testing/Loading.d.ts +9 -0
- package/dist/types/src/testing/Loading.d.ts.map +1 -0
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/usePx.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -25
- package/src/components/Avatars/Avatar.stories.tsx +2 -3
- package/src/components/Avatars/Avatar.tsx +1 -2
- package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
- package/src/components/Button/Button.stories.tsx +0 -1
- package/src/components/Button/Button.tsx +5 -13
- package/src/components/Button/IconButton.stories.tsx +6 -4
- package/src/components/Button/IconButton.tsx +3 -4
- package/src/components/Button/Toggle.stories.tsx +0 -1
- package/src/components/Button/Toggle.tsx +4 -4
- package/src/components/Button/ToggleGroup.stories.tsx +0 -1
- package/src/components/Button/ToggleGroup.tsx +12 -16
- package/src/components/Card/Card.stories.tsx +12 -12
- package/src/components/Card/Card.tsx +283 -128
- package/src/components/Clipboard/CopyButton.tsx +3 -4
- package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
- package/src/components/Dialog/AlertDialog.tsx +67 -126
- package/src/components/Dialog/Dialog.stories.tsx +64 -9
- package/src/components/Dialog/Dialog.tsx +84 -88
- package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
- package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
- package/src/components/Focus/AUDIT.md +43 -0
- package/src/components/Focus/Focus.stories.tsx +230 -0
- package/src/components/Focus/Focus.tsx +201 -0
- package/src/components/Focus/index.ts +5 -0
- package/src/components/Icon/Icon.stories.tsx +43 -13
- package/src/components/Icon/Icon.tsx +5 -1
- package/src/components/Image/Image.stories.tsx +3 -3
- package/src/components/Image/Image.tsx +31 -8
- package/src/components/Input/Input.stories.tsx +3 -4
- package/src/components/Input/Input.tsx +7 -7
- package/src/components/Link/Link.stories.tsx +0 -1
- package/src/components/List/List.stories.tsx +2 -3
- package/src/components/List/List.tsx +6 -5
- package/src/components/List/Tree.stories.tsx +1 -2
- package/src/components/List/Tree.tsx +0 -1
- package/src/components/List/TreeDropIndicator.tsx +1 -1
- package/src/components/List/Treegrid.stories.tsx +26 -27
- package/src/components/List/Treegrid.tsx +14 -14
- package/src/components/Main/Main.stories.tsx +0 -1
- package/src/components/Main/Main.tsx +1 -2
- package/src/components/Menu/ContextMenu.stories.tsx +0 -1
- package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
- package/src/components/Menu/DropdownMenu.tsx +48 -42
- package/src/components/Message/Message.stories.tsx +7 -8
- package/src/components/Message/Message.tsx +23 -10
- package/src/components/Popover/Popover.stories.tsx +4 -5
- package/src/components/Popover/Popover.tsx +42 -42
- package/src/components/ScrollArea/ScrollArea.stories.tsx +93 -30
- package/src/components/ScrollArea/ScrollArea.tsx +41 -25
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
- package/src/components/ScrollContainer/ScrollContainer.tsx +200 -91
- package/src/components/Select/Select.stories.tsx +5 -6
- package/src/components/Separator/Separator.tsx +4 -7
- package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
- package/src/components/Splitter/Splitter.stories.tsx +29 -29
- package/src/components/Splitter/Splitter.tsx +35 -46
- package/src/components/Status/Status.stories.tsx +0 -1
- package/src/components/Status/Status.tsx +8 -5
- package/src/components/Tag/Tag.stories.tsx +0 -1
- package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
- package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
- package/src/components/ThemeProvider/index.ts +1 -1
- package/src/components/Toast/Toast.stories.tsx +0 -1
- package/src/components/Toast/Toast.tsx +16 -31
- package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
- package/src/components/Toolbar/Toolbar.tsx +34 -47
- package/src/components/Tooltip/Tooltip.stories.tsx +6 -7
- package/src/components/Tooltip/Tooltip.tsx +15 -16
- package/src/components/index.ts +1 -0
- package/src/exemplars/generics.stories.tsx +7 -15
- package/src/exemplars/slot.stories.tsx +66 -68
- package/src/exemplars/tabster.stories.tsx +1 -1
- package/src/exemplars/virtualizer.stories.tsx +4 -4
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useDensityContext.ts +2 -2
- package/src/playground/Custom.stories.tsx +6 -9
- package/src/primitives/Column/AUDIT.md +148 -0
- package/src/primitives/Column/Column.stories.tsx +128 -19
- package/src/primitives/Column/Column.tsx +89 -80
- package/src/primitives/Container/Container.stories.tsx +29 -0
- package/src/primitives/Container/Container.tsx +19 -0
- package/src/primitives/Container/index.ts +5 -0
- package/src/primitives/Flex/Flex.stories.tsx +0 -1
- package/src/primitives/Flex/Flex.tsx +20 -20
- package/src/primitives/Grid/Grid.stories.tsx +0 -1
- package/src/primitives/Grid/Grid.tsx +23 -36
- package/src/primitives/Panel/Panel.stories.tsx +9 -8
- package/src/primitives/Panel/Panel.tsx +43 -60
- package/src/primitives/index.ts +1 -0
- package/src/testing/Loading.tsx +47 -0
- package/src/testing/decorators/withLayout.tsx +6 -6
- package/src/testing/decorators/withTheme.tsx +10 -7
- package/src/testing/index.ts +2 -0
- package/src/translations.ts +3 -3
- package/src/util/usePx.ts +1 -0
- package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { random } from '@dxos/random';
|
|
9
9
|
|
|
10
10
|
import { withTheme } from '../../testing';
|
|
11
11
|
import { Icon } from '../Icon';
|
|
12
|
+
import { Treegrid, TREEGRID_PARENT_OF_SEPARATOR, TREEGRID_PATH_SEPARATOR } from './Treegrid';
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
faker.seed(1234);
|
|
14
|
+
random.seed(1234);
|
|
16
15
|
|
|
17
16
|
type StorybookNode = {
|
|
18
17
|
id: string;
|
|
@@ -32,33 +31,33 @@ const content = {
|
|
|
32
31
|
title: 'Root',
|
|
33
32
|
nodes: [
|
|
34
33
|
{
|
|
35
|
-
id:
|
|
34
|
+
id: random.string.uuid(),
|
|
36
35
|
title: 'Personal Space',
|
|
37
36
|
icon: 'ph--house--regular',
|
|
38
37
|
nodes: [
|
|
39
38
|
{
|
|
40
|
-
id:
|
|
41
|
-
title:
|
|
39
|
+
id: random.string.uuid(),
|
|
40
|
+
title: random.commerce.productName(),
|
|
42
41
|
},
|
|
43
42
|
{
|
|
44
|
-
id:
|
|
45
|
-
title:
|
|
43
|
+
id: random.string.uuid(),
|
|
44
|
+
title: random.commerce.productName(),
|
|
46
45
|
},
|
|
47
46
|
{
|
|
48
|
-
id:
|
|
49
|
-
title:
|
|
47
|
+
id: random.string.uuid(),
|
|
48
|
+
title: random.commerce.productName(),
|
|
50
49
|
nodes: [
|
|
51
50
|
{
|
|
52
|
-
id:
|
|
53
|
-
title:
|
|
51
|
+
id: random.string.uuid(),
|
|
52
|
+
title: random.commerce.productName(),
|
|
54
53
|
nodes: [
|
|
55
54
|
{
|
|
56
|
-
id:
|
|
57
|
-
title:
|
|
55
|
+
id: random.string.uuid(),
|
|
56
|
+
title: random.commerce.productName(),
|
|
58
57
|
},
|
|
59
58
|
{
|
|
60
|
-
id:
|
|
61
|
-
title:
|
|
59
|
+
id: random.string.uuid(),
|
|
60
|
+
title: random.commerce.productName(),
|
|
62
61
|
},
|
|
63
62
|
],
|
|
64
63
|
},
|
|
@@ -67,24 +66,24 @@ const content = {
|
|
|
67
66
|
],
|
|
68
67
|
},
|
|
69
68
|
{
|
|
70
|
-
id:
|
|
71
|
-
title:
|
|
69
|
+
id: random.string.uuid(),
|
|
70
|
+
title: random.commerce.productName(),
|
|
72
71
|
icon: 'ph--planet--regular',
|
|
73
72
|
nodes: [
|
|
74
73
|
{
|
|
75
|
-
id:
|
|
76
|
-
title:
|
|
74
|
+
id: random.string.uuid(),
|
|
75
|
+
title: random.commerce.productName(),
|
|
77
76
|
},
|
|
78
77
|
],
|
|
79
78
|
},
|
|
80
79
|
{
|
|
81
|
-
id:
|
|
82
|
-
title:
|
|
80
|
+
id: random.string.uuid(),
|
|
81
|
+
title: random.commerce.productName(),
|
|
83
82
|
icon: 'ph--sailboat--regular',
|
|
84
83
|
},
|
|
85
84
|
{
|
|
86
|
-
id:
|
|
87
|
-
title:
|
|
85
|
+
id: random.string.uuid(),
|
|
86
|
+
title: random.commerce.productName(),
|
|
88
87
|
icon: 'ph--planet--regular',
|
|
89
88
|
},
|
|
90
89
|
],
|
|
@@ -129,8 +128,8 @@ const DefaultStory = () => {
|
|
|
129
128
|
return (
|
|
130
129
|
<Treegrid.Row
|
|
131
130
|
key={node.id}
|
|
132
|
-
id={path.join(
|
|
133
|
-
{...(parentOf && { parentOf: parentOf.join(
|
|
131
|
+
id={path.join(TREEGRID_PATH_SEPARATOR)}
|
|
132
|
+
{...(parentOf && { parentOf: parentOf.join(TREEGRID_PARENT_OF_SEPARATOR) })}
|
|
134
133
|
>
|
|
135
134
|
<Treegrid.Cell indent classNames='flex items-center'>
|
|
136
135
|
{node.icon && <Icon icon={node.icon} classNames='w-[1em] h-[1em] my-1' />}
|
|
@@ -15,10 +15,12 @@ import React, {
|
|
|
15
15
|
useCallback,
|
|
16
16
|
} from 'react';
|
|
17
17
|
|
|
18
|
+
import { composable, composableProps } from '@dxos/ui-theme';
|
|
19
|
+
|
|
18
20
|
import { useThemeContext } from '../../hooks';
|
|
19
21
|
import { type ThemedClassName } from '../../util';
|
|
20
22
|
|
|
21
|
-
// TODO(thure):
|
|
23
|
+
// TODO(thure): https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/treegrid_role
|
|
22
24
|
|
|
23
25
|
const TREEGRID_ROW_NAME = 'TreegridRow';
|
|
24
26
|
|
|
@@ -34,17 +36,19 @@ type TreegridRowContextValue = {
|
|
|
34
36
|
const [TreegridRowProvider, useTreegridRowContext] =
|
|
35
37
|
createTreegridRowContext<TreegridRowContextValue>(TREEGRID_ROW_NAME);
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
+
// TODO(burdon): Replace with functions.
|
|
40
|
+
export const TREEGRID_PATH_SEPARATOR = '~';
|
|
41
|
+
export const TREEGRID_PARENT_OF_SEPARATOR = ' ';
|
|
39
42
|
|
|
40
43
|
type TreegridRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
41
44
|
gridTemplateColumns: CSSProperties['gridTemplateColumns'];
|
|
42
45
|
asChild?: boolean;
|
|
43
46
|
};
|
|
44
47
|
|
|
45
|
-
const TreegridRoot =
|
|
46
|
-
({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
|
|
48
|
+
const TreegridRoot = composable<HTMLDivElement, TreegridRootProps>(
|
|
49
|
+
({ asChild, classNames, children, style, gridTemplateColumns, onKeyDown: onKeyDownProp, ...props }, forwardedRef) => {
|
|
47
50
|
const { tx } = useThemeContext();
|
|
51
|
+
const { className, role: _role, ...rest } = composableProps<HTMLDivElement>(props, { classNames });
|
|
48
52
|
const Comp = asChild ? Slot : Primitive.div;
|
|
49
53
|
const { findFirstFocusable } = useFocusFinders();
|
|
50
54
|
|
|
@@ -89,16 +93,16 @@ const TreegridRoot = forwardRef<HTMLDivElement, TreegridRootProps>(
|
|
|
89
93
|
break;
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
|
-
|
|
96
|
+
onKeyDownProp?.(event);
|
|
93
97
|
},
|
|
94
|
-
[findFirstFocusable],
|
|
98
|
+
[findFirstFocusable, onKeyDownProp],
|
|
95
99
|
);
|
|
96
100
|
|
|
97
101
|
return (
|
|
98
102
|
<Comp
|
|
99
103
|
role='treegrid'
|
|
100
|
-
{...
|
|
101
|
-
className={tx('treegrid.root', {},
|
|
104
|
+
{...rest}
|
|
105
|
+
className={tx('treegrid.root', {}, className)}
|
|
102
106
|
style={{ ...style, gridTemplateColumns }}
|
|
103
107
|
onKeyDown={handleKeyDown}
|
|
104
108
|
ref={forwardedRef}
|
|
@@ -136,7 +140,7 @@ const TreegridRow = forwardRef<HTMLDivElement, TreegridRowScopedProps<TreegridRo
|
|
|
136
140
|
) => {
|
|
137
141
|
const { tx } = useThemeContext();
|
|
138
142
|
const Comp = asChild ? Slot : Primitive.div;
|
|
139
|
-
const pathParts = id.split(
|
|
143
|
+
const pathParts = id.split(TREEGRID_PATH_SEPARATOR);
|
|
140
144
|
const level = pathParts.length - 1;
|
|
141
145
|
const [open, onOpenChange] = useControllableState({
|
|
142
146
|
prop: propsOpen,
|
|
@@ -181,8 +185,4 @@ export const Treegrid = {
|
|
|
181
185
|
Root: TreegridRoot,
|
|
182
186
|
Row: TreegridRow,
|
|
183
187
|
Cell: TreegridCell,
|
|
184
|
-
PARENT_OF_SEPARATOR,
|
|
185
|
-
PATH_SEPARATOR,
|
|
186
|
-
createTreegridRowScope,
|
|
187
|
-
useTreegridRowContext,
|
|
188
188
|
};
|
|
@@ -30,7 +30,6 @@ import { type MainStyleProps, osTranslations } from '@dxos/ui-theme';
|
|
|
30
30
|
import { useThemeContext } from '../../hooks';
|
|
31
31
|
import { type ThemedClassName } from '../../util';
|
|
32
32
|
import { type Label, toLocalizedString, useTranslation } from '../ThemeProvider';
|
|
33
|
-
|
|
34
33
|
import { useSwipeToDismiss } from './useSwipeToDismiss';
|
|
35
34
|
|
|
36
35
|
const MAIN_NAME = 'Main';
|
|
@@ -398,9 +397,9 @@ const MainContent = forwardRef<HTMLDivElement, MainContentProps>(
|
|
|
398
397
|
|
|
399
398
|
return (
|
|
400
399
|
<Comp
|
|
401
|
-
role={role}
|
|
402
400
|
{...(handlesFocus && { ...mover })}
|
|
403
401
|
{...props}
|
|
402
|
+
role={role}
|
|
404
403
|
data-sidebar-left-state={navigationSidebarState}
|
|
405
404
|
data-sidebar-right-state={complementarySidebarState}
|
|
406
405
|
data-handles-focus={handlesFocus}
|
|
@@ -17,9 +17,9 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
|
17
17
|
import React, {
|
|
18
18
|
type ComponentPropsWithRef,
|
|
19
19
|
type ComponentPropsWithoutRef,
|
|
20
|
-
type
|
|
20
|
+
type ComponentRef,
|
|
21
21
|
type FC,
|
|
22
|
-
|
|
22
|
+
PropsWithChildren,
|
|
23
23
|
type ReactNode,
|
|
24
24
|
type RefObject,
|
|
25
25
|
forwardRef,
|
|
@@ -47,7 +47,7 @@ const useMenuScope: (scope?: Scope) => any = createMenuScope();
|
|
|
47
47
|
|
|
48
48
|
type DropdownMenuContextValue = {
|
|
49
49
|
triggerId: string;
|
|
50
|
-
triggerRef:
|
|
50
|
+
triggerRef: RefObject<HTMLButtonElement | null>;
|
|
51
51
|
contentId: string;
|
|
52
52
|
open: boolean;
|
|
53
53
|
onOpenChange(open: boolean): void;
|
|
@@ -58,17 +58,23 @@ type DropdownMenuContextValue = {
|
|
|
58
58
|
const [DropdownMenuProvider, useDropdownMenuContext] =
|
|
59
59
|
createDropdownMenuContext<DropdownMenuContextValue>(DROPDOWN_MENU_NAME);
|
|
60
60
|
|
|
61
|
-
|
|
62
|
-
children?: ReactNode;
|
|
61
|
+
type DropdownMenuRootProps = PropsWithChildren<{
|
|
63
62
|
dir?: Direction;
|
|
63
|
+
modal?: boolean;
|
|
64
64
|
open?: boolean;
|
|
65
65
|
defaultOpen?: boolean;
|
|
66
66
|
onOpenChange?(open: boolean): void;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
}>;
|
|
68
|
+
|
|
69
|
+
const DropdownMenuRoot = ({
|
|
70
|
+
__scopeDropdownMenu,
|
|
71
|
+
children,
|
|
72
|
+
dir,
|
|
73
|
+
modal = true,
|
|
74
|
+
open: openProp,
|
|
75
|
+
defaultOpen,
|
|
76
|
+
onOpenChange,
|
|
77
|
+
}: ScopedProps<DropdownMenuRootProps>) => {
|
|
72
78
|
const menuScope = useMenuScope(__scopeDropdownMenu);
|
|
73
79
|
const triggerRef = useRef<HTMLButtonElement | null>(null);
|
|
74
80
|
const [open = false, setOpen] = useControllableState({
|
|
@@ -81,14 +87,14 @@ const DropdownMenuRoot: FC<DropdownMenuRootProps> = (props: ScopedProps<Dropdown
|
|
|
81
87
|
<DropdownMenuProvider
|
|
82
88
|
scope={__scopeDropdownMenu}
|
|
83
89
|
triggerId={useId()}
|
|
84
|
-
triggerRef={triggerRef
|
|
90
|
+
triggerRef={triggerRef}
|
|
85
91
|
contentId={useId()}
|
|
86
92
|
open={open}
|
|
87
93
|
onOpenChange={setOpen}
|
|
88
94
|
onOpenToggle={useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}
|
|
89
95
|
modal={modal}
|
|
90
96
|
>
|
|
91
|
-
<MenuPrimitive.Root {...menuScope}
|
|
97
|
+
<MenuPrimitive.Root {...menuScope} dir={dir} modal={modal} open={open} onOpenChange={setOpen}>
|
|
92
98
|
{children}
|
|
93
99
|
</MenuPrimitive.Root>
|
|
94
100
|
</DropdownMenuProvider>
|
|
@@ -103,9 +109,9 @@ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
|
|
|
103
109
|
|
|
104
110
|
const TRIGGER_NAME = 'DropdownMenuTrigger';
|
|
105
111
|
|
|
106
|
-
type DropdownMenuTriggerElement =
|
|
112
|
+
type DropdownMenuTriggerElement = ComponentRef<typeof Primitive.button>;
|
|
107
113
|
type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
|
|
108
|
-
|
|
114
|
+
type DropdownMenuTriggerProps = PrimitiveButtonProps;
|
|
109
115
|
|
|
110
116
|
const DropdownMenuTrigger = forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(
|
|
111
117
|
(props: ScopedProps<DropdownMenuTriggerProps>, forwardedRef) => {
|
|
@@ -168,9 +174,9 @@ DropdownMenuTrigger.displayName = TRIGGER_NAME;
|
|
|
168
174
|
|
|
169
175
|
const VIRTUAL_TRIGGER_NAME = 'DropdownMenuVirtualTrigger';
|
|
170
176
|
|
|
171
|
-
|
|
177
|
+
type DropdownMenuVirtualTriggerProps = {
|
|
172
178
|
virtualRef: RefObject<DropdownMenuTriggerElement | null>;
|
|
173
|
-
}
|
|
179
|
+
};
|
|
174
180
|
|
|
175
181
|
const DropdownMenuVirtualTrigger = (props: ScopedProps<DropdownMenuVirtualTriggerProps>) => {
|
|
176
182
|
const { __scopeDropdownMenu, virtualRef } = props;
|
|
@@ -193,7 +199,7 @@ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
|
|
|
193
199
|
const PORTAL_NAME = 'DropdownMenuPortal';
|
|
194
200
|
|
|
195
201
|
type MenuPortalProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;
|
|
196
|
-
|
|
202
|
+
type DropdownMenuPortalProps = MenuPortalProps;
|
|
197
203
|
|
|
198
204
|
const DropdownMenuPortal: FC<DropdownMenuPortalProps> = (props: ScopedProps<DropdownMenuPortalProps>) => {
|
|
199
205
|
const { __scopeDropdownMenu, ...portalProps } = props;
|
|
@@ -229,9 +235,9 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
|
|
|
229
235
|
|
|
230
236
|
const CONTENT_NAME = 'DropdownMenuContent';
|
|
231
237
|
|
|
232
|
-
type DropdownMenuContentElement =
|
|
238
|
+
type DropdownMenuContentElement = ComponentRef<typeof MenuPrimitive.Content>;
|
|
233
239
|
type MenuContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Content>>;
|
|
234
|
-
|
|
240
|
+
type DropdownMenuContentProps = Omit<MenuContentProps, 'onEntryFocus'>;
|
|
235
241
|
|
|
236
242
|
const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
|
|
237
243
|
(props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {
|
|
@@ -308,9 +314,9 @@ DropdownMenuContent.displayName = CONTENT_NAME;
|
|
|
308
314
|
|
|
309
315
|
const GROUP_NAME = 'DropdownMenuGroup';
|
|
310
316
|
|
|
311
|
-
type DropdownMenuGroupElement =
|
|
317
|
+
type DropdownMenuGroupElement = ComponentRef<typeof MenuPrimitive.Group>;
|
|
312
318
|
type MenuGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;
|
|
313
|
-
|
|
319
|
+
type DropdownMenuGroupProps = MenuGroupProps;
|
|
314
320
|
|
|
315
321
|
const DropdownMenuGroup = forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(
|
|
316
322
|
(props: ScopedProps<DropdownMenuGroupProps>, forwardedRef) => {
|
|
@@ -328,9 +334,9 @@ DropdownMenuGroup.displayName = GROUP_NAME;
|
|
|
328
334
|
|
|
329
335
|
const LABEL_NAME = 'DropdownMenuLabel';
|
|
330
336
|
|
|
331
|
-
type DropdownMenuLabelElement =
|
|
337
|
+
type DropdownMenuLabelElement = ComponentRef<typeof MenuPrimitive.Label>;
|
|
332
338
|
type MenuLabelProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Label>>;
|
|
333
|
-
|
|
339
|
+
type DropdownMenuLabelProps = MenuLabelProps;
|
|
334
340
|
|
|
335
341
|
const DropdownMenuGroupLabel = forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(
|
|
336
342
|
(props: ScopedProps<DropdownMenuLabelProps>, forwardedRef) => {
|
|
@@ -356,9 +362,9 @@ DropdownMenuGroupLabel.displayName = LABEL_NAME;
|
|
|
356
362
|
|
|
357
363
|
const ITEM_NAME = 'DropdownMenuItem';
|
|
358
364
|
|
|
359
|
-
type DropdownMenuItemElement =
|
|
365
|
+
type DropdownMenuItemElement = ComponentRef<typeof MenuPrimitive.Item>;
|
|
360
366
|
type MenuItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Item>>;
|
|
361
|
-
|
|
367
|
+
type DropdownMenuItemProps = MenuItemProps;
|
|
362
368
|
|
|
363
369
|
const DropdownMenuItem = forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(
|
|
364
370
|
(props: ScopedProps<DropdownMenuItemProps>, forwardedRef) => {
|
|
@@ -384,9 +390,9 @@ DropdownMenuItem.displayName = ITEM_NAME;
|
|
|
384
390
|
|
|
385
391
|
const CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';
|
|
386
392
|
|
|
387
|
-
type DropdownMenuCheckboxItemElement =
|
|
393
|
+
type DropdownMenuCheckboxItemElement = ComponentRef<typeof MenuPrimitive.CheckboxItem>;
|
|
388
394
|
type MenuCheckboxItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>>;
|
|
389
|
-
|
|
395
|
+
type DropdownMenuCheckboxItemProps = MenuCheckboxItemProps;
|
|
390
396
|
|
|
391
397
|
const DropdownMenuCheckboxItem = forwardRef<DropdownMenuCheckboxItemElement, DropdownMenuCheckboxItemProps>(
|
|
392
398
|
(props: ScopedProps<DropdownMenuCheckboxItemProps>, forwardedRef) => {
|
|
@@ -412,9 +418,9 @@ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
|
|
|
412
418
|
|
|
413
419
|
const RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';
|
|
414
420
|
|
|
415
|
-
type DropdownMenuRadioGroupElement =
|
|
421
|
+
type DropdownMenuRadioGroupElement = ComponentRef<typeof MenuPrimitive.RadioGroup>;
|
|
416
422
|
type MenuRadioGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;
|
|
417
|
-
|
|
423
|
+
type DropdownMenuRadioGroupProps = MenuRadioGroupProps;
|
|
418
424
|
|
|
419
425
|
const DropdownMenuRadioGroup = forwardRef<DropdownMenuRadioGroupElement, DropdownMenuRadioGroupProps>(
|
|
420
426
|
(props: ScopedProps<DropdownMenuRadioGroupProps>, forwardedRef) => {
|
|
@@ -432,7 +438,7 @@ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
|
|
|
432
438
|
|
|
433
439
|
const RADIO_ITEM_NAME = 'DropdownMenuRadioItem';
|
|
434
440
|
|
|
435
|
-
type DropdownMenuRadioItemElement =
|
|
441
|
+
type DropdownMenuRadioItemElement = ComponentRef<typeof MenuPrimitive.RadioItem>;
|
|
436
442
|
type MenuRadioItemProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;
|
|
437
443
|
type DropdownMenuRadioItemProps = ThemedClassName<MenuRadioItemProps>;
|
|
438
444
|
|
|
@@ -460,9 +466,9 @@ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
|
|
|
460
466
|
|
|
461
467
|
const INDICATOR_NAME = 'DropdownMenuItemIndicator';
|
|
462
468
|
|
|
463
|
-
type DropdownMenuItemIndicatorElement =
|
|
469
|
+
type DropdownMenuItemIndicatorElement = ComponentRef<typeof MenuPrimitive.ItemIndicator>;
|
|
464
470
|
type MenuItemIndicatorProps = ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;
|
|
465
|
-
|
|
471
|
+
type DropdownMenuItemIndicatorProps = MenuItemIndicatorProps;
|
|
466
472
|
|
|
467
473
|
const DropdownMenuItemIndicator = forwardRef<DropdownMenuItemIndicatorElement, DropdownMenuItemIndicatorProps>(
|
|
468
474
|
(props: ScopedProps<DropdownMenuItemIndicatorProps>, forwardedRef) => {
|
|
@@ -480,9 +486,9 @@ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
|
|
|
480
486
|
|
|
481
487
|
const SEPARATOR_NAME = 'DropdownMenuSeparator';
|
|
482
488
|
|
|
483
|
-
type DropdownMenuSeparatorElement =
|
|
489
|
+
type DropdownMenuSeparatorElement = ComponentRef<typeof MenuPrimitive.Separator>;
|
|
484
490
|
type MenuSeparatorProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>>;
|
|
485
|
-
|
|
491
|
+
type DropdownMenuSeparatorProps = MenuSeparatorProps;
|
|
486
492
|
|
|
487
493
|
const DropdownMenuSeparator = forwardRef<DropdownMenuSeparatorElement, DropdownMenuSeparatorProps>(
|
|
488
494
|
(props: ScopedProps<DropdownMenuSeparatorProps>, forwardedRef) => {
|
|
@@ -508,9 +514,9 @@ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
|
|
|
508
514
|
|
|
509
515
|
const ARROW_NAME = 'DropdownMenuArrow';
|
|
510
516
|
|
|
511
|
-
type DropdownMenuArrowElement =
|
|
517
|
+
type DropdownMenuArrowElement = ComponentRef<typeof MenuPrimitive.Arrow>;
|
|
512
518
|
type MenuArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>>;
|
|
513
|
-
|
|
519
|
+
type DropdownMenuArrowProps = MenuArrowProps;
|
|
514
520
|
|
|
515
521
|
const DropdownMenuArrow = forwardRef<DropdownMenuArrowElement, DropdownMenuArrowProps>(
|
|
516
522
|
(props: ScopedProps<DropdownMenuArrowProps>, forwardedRef) => {
|
|
@@ -534,12 +540,12 @@ DropdownMenuArrow.displayName = ARROW_NAME;
|
|
|
534
540
|
// DropdownMenuSub
|
|
535
541
|
//
|
|
536
542
|
|
|
537
|
-
|
|
543
|
+
type DropdownMenuSubProps = {
|
|
538
544
|
children?: ReactNode;
|
|
539
545
|
open?: boolean;
|
|
540
546
|
defaultOpen?: boolean;
|
|
541
547
|
onOpenChange?(open: boolean): void;
|
|
542
|
-
}
|
|
548
|
+
};
|
|
543
549
|
|
|
544
550
|
const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMenuSubProps>) => {
|
|
545
551
|
const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
|
|
@@ -563,9 +569,9 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
|
|
|
563
569
|
|
|
564
570
|
const SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';
|
|
565
571
|
|
|
566
|
-
type DropdownMenuSubTriggerElement =
|
|
572
|
+
type DropdownMenuSubTriggerElement = ComponentRef<typeof MenuPrimitive.SubTrigger>;
|
|
567
573
|
type MenuSubTriggerProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;
|
|
568
|
-
|
|
574
|
+
type DropdownMenuSubTriggerProps = MenuSubTriggerProps;
|
|
569
575
|
|
|
570
576
|
const DropdownMenuSubTrigger = forwardRef<DropdownMenuSubTriggerElement, DropdownMenuSubTriggerProps>(
|
|
571
577
|
(props: ScopedProps<DropdownMenuSubTriggerProps>, forwardedRef) => {
|
|
@@ -583,9 +589,9 @@ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
|
|
|
583
589
|
|
|
584
590
|
const SUB_CONTENT_NAME = 'DropdownMenuSubContent';
|
|
585
591
|
|
|
586
|
-
type DropdownMenuSubContentElement =
|
|
592
|
+
type DropdownMenuSubContentElement = ComponentRef<typeof MenuPrimitive.Content>;
|
|
587
593
|
type MenuSubContentProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;
|
|
588
|
-
|
|
594
|
+
type DropdownMenuSubContentProps = MenuSubContentProps;
|
|
589
595
|
|
|
590
596
|
const DropdownMenuSubContent = forwardRef<DropdownMenuSubContentElement, DropdownMenuSubContentProps>(
|
|
591
597
|
(props: ScopedProps<DropdownMenuSubContentProps>, forwardedRef) => {
|
|
@@ -5,25 +5,24 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { random } from '@dxos/random';
|
|
9
9
|
import { type MessageValence } from '@dxos/ui-types';
|
|
10
10
|
|
|
11
11
|
import { withTheme } from '../../testing';
|
|
12
|
-
|
|
13
12
|
import { Message } from './Message';
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
random.seed(123);
|
|
16
15
|
|
|
17
|
-
type
|
|
16
|
+
type DefaultStoryProps = {
|
|
18
17
|
valence: MessageValence;
|
|
19
18
|
title: string;
|
|
20
19
|
body: string;
|
|
21
20
|
};
|
|
22
21
|
|
|
23
|
-
const DefaultStory = ({ valence, title, body }:
|
|
22
|
+
const DefaultStory = ({ valence, title, body }: DefaultStoryProps) => (
|
|
24
23
|
<div className='w-[30rem]'>
|
|
25
24
|
<Message.Root valence={valence}>
|
|
26
|
-
{title && <Message.Title>{title}</Message.Title>}
|
|
25
|
+
{title && <Message.Title onClose={() => console.log('close')}>{title}</Message.Title>}
|
|
27
26
|
{body && <Message.Content>{body}</Message.Content>}
|
|
28
27
|
</Message.Root>
|
|
29
28
|
</div>
|
|
@@ -53,7 +52,7 @@ export const Default: Story = {
|
|
|
53
52
|
args: {
|
|
54
53
|
valence: 'neutral',
|
|
55
54
|
title: 'Alert title',
|
|
56
|
-
body:
|
|
55
|
+
body: random.lorem.paragraphs(1),
|
|
57
56
|
},
|
|
58
57
|
};
|
|
59
58
|
|
|
@@ -61,6 +60,6 @@ export const Error: Story = {
|
|
|
61
60
|
args: {
|
|
62
61
|
valence: 'error',
|
|
63
62
|
title: 'Error title',
|
|
64
|
-
body:
|
|
63
|
+
body: random.lorem.paragraphs(1),
|
|
65
64
|
},
|
|
66
65
|
};
|
|
@@ -6,12 +6,16 @@ import { createContext } from '@radix-ui/react-context';
|
|
|
6
6
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
7
7
|
import { Slot } from '@radix-ui/react-slot';
|
|
8
8
|
import React, { type ComponentPropsWithRef, forwardRef } from 'react';
|
|
9
|
+
import { useTranslation } from 'react-i18next';
|
|
9
10
|
|
|
10
11
|
import { useId } from '@dxos/react-hooks';
|
|
11
12
|
import { type Elevation, type MessageValence } from '@dxos/ui-types';
|
|
12
13
|
|
|
14
|
+
import { translationKey } from '#translations';
|
|
15
|
+
|
|
13
16
|
import { useElevationContext, useThemeContext } from '../../hooks';
|
|
14
17
|
import { type ThemedClassName } from '../../util';
|
|
18
|
+
import { IconButton } from '../Button';
|
|
15
19
|
import { Icon } from '../Icon';
|
|
16
20
|
|
|
17
21
|
const messageIcons: Record<MessageValence, string> = {
|
|
@@ -84,27 +88,36 @@ MessageRoot.displayName = MESSAGE_NAME;
|
|
|
84
88
|
//
|
|
85
89
|
|
|
86
90
|
type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
|
|
87
|
-
asChild?: boolean;
|
|
88
91
|
icon?: string;
|
|
92
|
+
onClose?: () => void;
|
|
89
93
|
};
|
|
90
94
|
|
|
91
95
|
const MESSAGE_TITLE_NAME = 'MessageTitle';
|
|
92
96
|
|
|
93
97
|
const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
|
|
94
|
-
({
|
|
98
|
+
({ classNames, children, icon: iconProp, onClose }, forwardedRef) => {
|
|
99
|
+
const { t } = useTranslation(translationKey);
|
|
95
100
|
const { tx } = useThemeContext();
|
|
96
101
|
const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
|
|
97
|
-
const Comp = asChild ? Slot : Primitive.h2;
|
|
98
102
|
const icon = iconProp ?? messageIcons[valence];
|
|
99
103
|
return (
|
|
100
|
-
<
|
|
101
|
-
{
|
|
102
|
-
<div
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
<div role='none' className={tx('message.header', {}, classNames)} id={titleId} ref={forwardedRef}>
|
|
105
|
+
{icon && (
|
|
106
|
+
<div role='none' className={tx('message.icon', { valence })}>
|
|
107
|
+
<Icon icon={icon} />
|
|
108
|
+
</div>
|
|
105
109
|
)}
|
|
106
|
-
<
|
|
107
|
-
|
|
110
|
+
<h2 className={tx('message.title', {}, classNames)}>{children}</h2>
|
|
111
|
+
{onClose && (
|
|
112
|
+
<IconButton
|
|
113
|
+
variant='ghost'
|
|
114
|
+
icon='ph--x--regular'
|
|
115
|
+
iconOnly
|
|
116
|
+
label={t('toolbar-close.label')}
|
|
117
|
+
onClick={onClose}
|
|
118
|
+
/>
|
|
119
|
+
)}
|
|
120
|
+
</div>
|
|
108
121
|
);
|
|
109
122
|
},
|
|
110
123
|
);
|
|
@@ -5,14 +5,13 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React, { type PropsWithChildren, type ReactNode, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { random } from '@dxos/random';
|
|
9
9
|
|
|
10
10
|
import { withTheme } from '../../testing';
|
|
11
11
|
import { Button } from '../Button';
|
|
12
|
-
|
|
13
12
|
import { Popover } from './Popover';
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
random.seed(1234);
|
|
16
15
|
|
|
17
16
|
const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger: ReactNode }>) => {
|
|
18
17
|
return (
|
|
@@ -42,7 +41,7 @@ type Story = StoryObj<typeof meta>;
|
|
|
42
41
|
export const Default: Story = {
|
|
43
42
|
args: {
|
|
44
43
|
openTrigger: <Button>Open popover</Button>,
|
|
45
|
-
children:
|
|
44
|
+
children: random.lorem.paragraphs(3),
|
|
46
45
|
},
|
|
47
46
|
};
|
|
48
47
|
|
|
@@ -59,7 +58,7 @@ export const VirtualTrigger = {
|
|
|
59
58
|
<Popover.VirtualTrigger virtualRef={buttonRef} />
|
|
60
59
|
<Popover.Content>
|
|
61
60
|
<Popover.Viewport>
|
|
62
|
-
<p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{
|
|
61
|
+
<p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{random.lorem.paragraphs(3)}</p>
|
|
63
62
|
</Popover.Viewport>
|
|
64
63
|
<Popover.Arrow />
|
|
65
64
|
</Popover.Content>
|