@dxos/react-ui 0.6.13 → 0.6.14-main.2b6a0f3
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/index.mjs +34 -29
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +2395 -0
- package/dist/lib/node/index.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -0
- package/dist/lib/node-esm/index.mjs +2396 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts +15 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +6 -1
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +9 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Buttons/Button.stories.d.ts +12 -17
- package/dist/types/src/components/Buttons/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts +2 -1
- package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +20 -1
- package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +12 -1
- package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +11 -1
- package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +16 -1
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Lists/List.stories.d.ts +2 -3
- package/dist/types/src/components/Lists/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/Lists/Tree.stories.d.ts +5 -1
- package/dist/types/src/components/Lists/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts +3 -2
- package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts +5 -1
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +29 -1
- package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +29 -1
- package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +6 -1
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts +15 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +20 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.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 +10 -11
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts +0 -3
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +4 -5
- package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +4 -4
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts +20 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -2
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +30 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +13 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/useThemeContext.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts +2 -6
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Surfaces.stories.d.ts +6 -2
- package/dist/types/src/playground/Surfaces.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts +1 -1
- package/dist/types/src/testing/decorators/index.d.ts +1 -0
- package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withVariants.d.ts +13 -0
- package/dist/types/src/testing/decorators/withVariants.d.ts.map +1 -0
- package/package.json +20 -14
- package/src/components/Avatars/Avatar.stories.tsx +3 -2
- package/src/components/Avatars/AvatarGroup.stories.tsx +3 -2
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -2
- package/src/components/Buttons/Button.stories.tsx +34 -63
- package/src/components/Buttons/Toggle.stories.tsx +3 -2
- package/src/components/Buttons/ToggleGroup.stories.tsx +3 -2
- package/src/components/DensityProvider/DensityProvider.tsx +1 -1
- package/src/components/Dialogs/AlertDialog.stories.tsx +3 -2
- package/src/components/Dialogs/Dialog.stories.tsx +3 -2
- package/src/components/Input/Input.stories.tsx +4 -3
- package/src/components/Link/Link.stories.tsx +1 -1
- package/src/components/Lists/List.stories.tsx +4 -4
- package/src/components/Lists/Tree.stories.tsx +3 -2
- package/src/components/Lists/Treegrid.stories.tsx +7 -5
- package/src/components/Main/Main.stories.tsx +3 -2
- package/src/components/Menus/ContextMenu.stories.tsx +3 -2
- package/src/components/Menus/DropdownMenu.stories.tsx +3 -2
- package/src/components/Message/Message.stories.tsx +3 -2
- package/src/components/Popover/Popover.stories.tsx +3 -2
- package/src/components/ScrollArea/ScrollArea.stories.tsx +3 -2
- package/src/components/Select/Select.stories.tsx +14 -31
- package/src/components/Select/Select.tsx +9 -10
- package/src/components/Status/Status.stories.tsx +1 -2
- package/src/components/Tag/Tag.stories.tsx +1 -1
- package/src/components/ThemeProvider/ThemeProvider.tsx +17 -18
- package/src/components/Toast/Toast.stories.tsx +3 -2
- package/src/components/Toast/Toast.tsx +1 -4
- package/src/components/Toolbar/Toolbar.stories.tsx +3 -2
- package/src/components/Toolbar/Toolbar.tsx +21 -1
- package/src/components/Tooltip/Tooltip.stories.tsx +3 -2
- package/src/hooks/useThemeContext.ts +3 -1
- package/src/playground/Controls.stories.tsx +7 -10
- package/src/playground/Surfaces.stories.tsx +4 -3
- package/src/playground/Typography.stories.tsx +2 -2
- package/src/testing/decorators/index.ts +1 -0
- package/src/testing/decorators/withVariants.tsx +45 -0
- package/dist/types/src/playground/helpers.d.ts +0 -6
- package/dist/types/src/playground/helpers.d.ts.map +0 -1
- package/src/playground/helpers.tsx +0 -32
|
@@ -44,8 +44,9 @@ const StorybookAvatarGroup = () => {
|
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
export default {
|
|
47
|
-
title: 'react-ui/
|
|
48
|
-
component:
|
|
47
|
+
title: 'ui/react-ui-core/AvatarGroup',
|
|
48
|
+
component: AvatarGroup,
|
|
49
|
+
render: StorybookAvatarGroup,
|
|
49
50
|
decorators: [withTheme],
|
|
50
51
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
51
52
|
};
|
|
@@ -39,8 +39,9 @@ const StorybookBreadcrumb = () => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export default {
|
|
42
|
-
title: 'react-ui/Breadcrumb',
|
|
43
|
-
component:
|
|
42
|
+
title: 'ui/react-ui-core/Breadcrumb',
|
|
43
|
+
component: Breadcrumb,
|
|
44
|
+
render: StorybookBreadcrumb,
|
|
44
45
|
decorators: [withTheme],
|
|
45
46
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
46
47
|
};
|
|
@@ -5,67 +5,17 @@
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
7
|
import { CaretLeft, CaretRight } from '@phosphor-icons/react';
|
|
8
|
-
import React
|
|
9
|
-
|
|
10
|
-
import { modalSurface, groupSurface, mx, surfaceElevation } from '@dxos/react-ui-theme';
|
|
8
|
+
import React from 'react';
|
|
11
9
|
|
|
12
10
|
import { Button, ButtonGroup, type ButtonProps } from './Button';
|
|
13
|
-
import { withTheme } from '../../testing';
|
|
14
|
-
import { DensityProvider } from '../DensityProvider';
|
|
15
|
-
import { ElevationProvider } from '../ElevationProvider';
|
|
11
|
+
import { withVariants, withTheme } from '../../testing';
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
decorators: [withTheme],
|
|
21
|
-
parameters: { chromatic: { disableSnapshot: false } },
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const Container = ({ children }: PropsWithChildren<{}>) => (
|
|
25
|
-
<>
|
|
26
|
-
<div role='group' className={mx('flex flex-col gap-4 mbe-4 p-4')}>
|
|
27
|
-
<ElevationProvider elevation='base'>
|
|
28
|
-
<div className='flex gap-4'>{children}</div>
|
|
29
|
-
<DensityProvider density='fine'>
|
|
30
|
-
<div className='flex gap-4'>{children}</div>
|
|
31
|
-
</DensityProvider>
|
|
32
|
-
</ElevationProvider>
|
|
33
|
-
</div>
|
|
34
|
-
<div
|
|
35
|
-
role='group'
|
|
36
|
-
className={mx('flex flex-col gap-4 mbe-4 p-4 rounded-lg', groupSurface, surfaceElevation({ elevation: 'group' }))}
|
|
37
|
-
>
|
|
38
|
-
<ElevationProvider elevation='group'>
|
|
39
|
-
<div className='flex gap-4'>{children}</div>
|
|
40
|
-
<DensityProvider density='fine'>
|
|
41
|
-
<div className='flex gap-4'>{children}</div>
|
|
42
|
-
</DensityProvider>
|
|
43
|
-
</ElevationProvider>
|
|
44
|
-
</div>
|
|
45
|
-
<div
|
|
46
|
-
role='group'
|
|
47
|
-
className={mx(
|
|
48
|
-
'flex flex-col gap-4 mbe-4 p-4 rounded-lg',
|
|
49
|
-
modalSurface,
|
|
50
|
-
surfaceElevation({ elevation: 'chrome' }),
|
|
51
|
-
)}
|
|
52
|
-
>
|
|
53
|
-
<ElevationProvider elevation='chrome'>
|
|
54
|
-
<div className='flex gap-4'>{children}</div>
|
|
55
|
-
<DensityProvider density='fine'>
|
|
56
|
-
<div className='flex gap-4'>{children}</div>
|
|
57
|
-
</DensityProvider>
|
|
58
|
-
</ElevationProvider>
|
|
59
|
-
</div>
|
|
60
|
-
</>
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
export const Default = {
|
|
64
|
-
render: ({ children, ...args }: Omit<ButtonProps, 'ref'>) => (
|
|
65
|
-
<Container>
|
|
13
|
+
const DefaultStory = ({ children, ...args }: Omit<ButtonProps, 'ref'>) => {
|
|
14
|
+
return (
|
|
15
|
+
<div>
|
|
66
16
|
<Button {...args}>{children}</Button>
|
|
67
17
|
<Button {...args} disabled>
|
|
68
|
-
|
|
18
|
+
{children}
|
|
69
19
|
</Button>
|
|
70
20
|
{(args.variant === 'default' || args.variant === 'primary') && (
|
|
71
21
|
<ButtonGroup>
|
|
@@ -77,15 +27,36 @@ export const Default = {
|
|
|
77
27
|
</Button>
|
|
78
28
|
</ButtonGroup>
|
|
79
29
|
)}
|
|
80
|
-
</
|
|
81
|
-
)
|
|
82
|
-
args: { children: 'Hello', disabled: false, variant: 'default' },
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
83
32
|
};
|
|
84
33
|
|
|
85
|
-
|
|
34
|
+
const defaults = { children: 'Test' };
|
|
86
35
|
|
|
87
|
-
export const
|
|
36
|
+
export const Default = {
|
|
37
|
+
args: { ...defaults, variant: 'default' },
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const Primary = {
|
|
41
|
+
args: { ...defaults, variant: 'primary' },
|
|
42
|
+
};
|
|
88
43
|
|
|
89
|
-
export const
|
|
44
|
+
export const Destructive = {
|
|
45
|
+
args: { ...defaults, variant: 'destructive' },
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const Outline = {
|
|
49
|
+
args: { ...defaults, variant: 'outline' },
|
|
50
|
+
};
|
|
90
51
|
|
|
91
|
-
export const Ghost = {
|
|
52
|
+
export const Ghost = {
|
|
53
|
+
args: { ...defaults, variant: 'ghost' },
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export default {
|
|
57
|
+
title: 'ui/react-ui-core/Button',
|
|
58
|
+
component: Button,
|
|
59
|
+
decorators: [withVariants(), withTheme],
|
|
60
|
+
render: DefaultStory,
|
|
61
|
+
parameters: { chromatic: { disableSnapshot: false } },
|
|
62
|
+
};
|
|
@@ -21,8 +21,9 @@ const StorybookToggle = (props: StorybookToggleProps) => {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
export default {
|
|
24
|
-
title: 'react-ui/Toggle
|
|
25
|
-
component:
|
|
24
|
+
title: 'ui/react-ui-core/Toggle',
|
|
25
|
+
component: Toggle,
|
|
26
|
+
render: StorybookToggle,
|
|
26
27
|
decorators: [withTheme],
|
|
27
28
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
28
29
|
};
|
|
@@ -29,8 +29,9 @@ const StorybookToggleGroup = (props: StorybookToggleGroupProps) => {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export default {
|
|
32
|
-
title: 'react-ui/
|
|
33
|
-
component:
|
|
32
|
+
title: 'ui/react-ui-core/ToggleGroup',
|
|
33
|
+
component: ToggleGroup,
|
|
34
|
+
render: StorybookToggleGroup,
|
|
34
35
|
decorators: [withTheme],
|
|
35
36
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
36
37
|
};
|
|
@@ -14,7 +14,7 @@ export type DensityProviderProps = PropsWithChildren<{
|
|
|
14
14
|
density?: Density;
|
|
15
15
|
}>;
|
|
16
16
|
|
|
17
|
-
export const DensityContext = createContext<DensityContextValue>({ density: '
|
|
17
|
+
export const DensityContext = createContext<DensityContextValue>({ density: 'fine' });
|
|
18
18
|
|
|
19
19
|
export const DensityProvider = ({ density, children }: DensityProviderProps) => (
|
|
20
20
|
<DensityContext.Provider value={{ density }}>{children}</DensityContext.Provider>
|
|
@@ -54,8 +54,9 @@ const StorybookAlertDialog = ({
|
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
export default {
|
|
57
|
-
title: 'react-ui/
|
|
58
|
-
component:
|
|
57
|
+
title: 'ui/react-ui-core/AlertDialog',
|
|
58
|
+
component: AlertDialog,
|
|
59
|
+
render: StorybookAlertDialog,
|
|
59
60
|
decorators: [withTheme],
|
|
60
61
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
61
62
|
};
|
|
@@ -40,8 +40,9 @@ const StorybookDialog = ({ title, openTrigger, description, body, closeTrigger,
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
export default {
|
|
43
|
-
title: 'react-ui/Dialog',
|
|
44
|
-
component:
|
|
43
|
+
title: 'ui/react-ui-core/Dialog',
|
|
44
|
+
component: Dialog,
|
|
45
|
+
render: StorybookDialog,
|
|
45
46
|
decorators: [withTheme],
|
|
46
47
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
47
48
|
};
|
|
@@ -72,9 +72,10 @@ const StoryInput = (props: StoryInputProps) => {
|
|
|
72
72
|
};
|
|
73
73
|
|
|
74
74
|
export default {
|
|
75
|
-
title: 'react-ui/Input',
|
|
76
|
-
component:
|
|
77
|
-
|
|
75
|
+
title: 'ui/react-ui-core/Input',
|
|
76
|
+
component: Input,
|
|
77
|
+
render: StoryInput,
|
|
78
|
+
// TODO(thure): Refactor.
|
|
78
79
|
argTypes: {
|
|
79
80
|
label: { control: 'text' },
|
|
80
81
|
description: { control: 'text' },
|
|
@@ -8,7 +8,7 @@ import { Link } from './Link';
|
|
|
8
8
|
import { withTheme } from '../../testing';
|
|
9
9
|
|
|
10
10
|
export default {
|
|
11
|
-
title: 'react-ui/Link',
|
|
11
|
+
title: 'ui/react-ui-core/Link',
|
|
12
12
|
component: Link,
|
|
13
13
|
decorators: [withTheme],
|
|
14
14
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
@@ -9,7 +9,7 @@ import { arrayMove, SortableContext, useSortable, verticalListSortingStrategy }
|
|
|
9
9
|
import { CSS } from '@dnd-kit/utilities';
|
|
10
10
|
import { useArrowNavigationGroup } from '@fluentui/react-tabster';
|
|
11
11
|
import { DotsSixVertical, PushPin } from '@phosphor-icons/react';
|
|
12
|
-
import React, { type
|
|
12
|
+
import React, { type ReactNode, useState } from 'react';
|
|
13
13
|
|
|
14
14
|
import {
|
|
15
15
|
getSize,
|
|
@@ -20,12 +20,12 @@ import {
|
|
|
20
20
|
surfaceElevation,
|
|
21
21
|
} from '@dxos/react-ui-theme';
|
|
22
22
|
|
|
23
|
-
import { List, ListItem, type
|
|
23
|
+
import { List, ListItem, type ListScopedProps } from './List';
|
|
24
24
|
import { withTheme } from '../../testing';
|
|
25
25
|
|
|
26
26
|
export default {
|
|
27
|
-
title: 'react-ui/List',
|
|
28
|
-
component: List
|
|
27
|
+
title: 'ui/react-ui-core/List',
|
|
28
|
+
component: List,
|
|
29
29
|
decorators: [withTheme],
|
|
30
30
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
31
31
|
};
|
|
@@ -56,8 +56,9 @@ const StorybookTree = ({ data }: StorybookTreeProps) => {
|
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
export default {
|
|
59
|
-
title: 'react-ui/Tree',
|
|
60
|
-
component:
|
|
59
|
+
title: 'ui/react-ui-core/Tree',
|
|
60
|
+
component: Tree,
|
|
61
|
+
render: StorybookTree,
|
|
61
62
|
decorators: [withTheme],
|
|
62
63
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
63
64
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
//
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
|
+
|
|
4
5
|
import React from 'react';
|
|
5
6
|
|
|
6
7
|
import { faker } from '@dxos/random';
|
|
@@ -119,7 +120,7 @@ function* visitor(node: StorybookNode, isOpen?: (node: StorybookNode) => boolean
|
|
|
119
120
|
|
|
120
121
|
const flattenedContent = Array.from(visitor(content, () => true));
|
|
121
122
|
|
|
122
|
-
const
|
|
123
|
+
const DefaultStory = () => {
|
|
123
124
|
return (
|
|
124
125
|
<Tg.Root gridTemplateColumns='1fr'>
|
|
125
126
|
{flattenedContent.map(({ node, parentOf, path }) => {
|
|
@@ -140,10 +141,11 @@ const StorybookTreegrid = () => {
|
|
|
140
141
|
);
|
|
141
142
|
};
|
|
142
143
|
|
|
144
|
+
export const Default = {};
|
|
145
|
+
|
|
143
146
|
export default {
|
|
144
|
-
title: 'react-ui/Treegrid',
|
|
145
|
-
component:
|
|
147
|
+
title: 'ui/react-ui-core/Treegrid',
|
|
148
|
+
component: Tg.Root,
|
|
149
|
+
render: DefaultStory,
|
|
146
150
|
decorators: [withTheme],
|
|
147
151
|
};
|
|
148
|
-
|
|
149
|
-
export const Treegrid = () => <StorybookTreegrid />;
|
|
@@ -46,8 +46,9 @@ const StoryMain = (_args: StoryMainArgs) => {
|
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
export default {
|
|
49
|
-
title: 'react-ui/Main',
|
|
50
|
-
component:
|
|
49
|
+
title: 'ui/react-ui-core/Main',
|
|
50
|
+
component: Main.Root,
|
|
51
|
+
render: StoryMain,
|
|
51
52
|
decorators: [withTheme],
|
|
52
53
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
53
54
|
};
|
|
@@ -92,8 +92,9 @@ const StorybookContextMenu = () => {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
export default {
|
|
95
|
-
title: 'react-ui/
|
|
96
|
-
component:
|
|
95
|
+
title: 'ui/react-ui-core/ContextMenu',
|
|
96
|
+
component: ContextMenu,
|
|
97
|
+
render: StorybookContextMenu,
|
|
97
98
|
decorators: [withTheme],
|
|
98
99
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
99
100
|
};
|
|
@@ -92,8 +92,9 @@ const StorybookDropdownMenu = () => {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
export default {
|
|
95
|
-
title: 'react-ui/
|
|
96
|
-
component:
|
|
95
|
+
title: 'ui/react-ui-core/DropdownMenu',
|
|
96
|
+
component: DropdownMenu,
|
|
97
|
+
render: StorybookDropdownMenu,
|
|
97
98
|
decorators: [withTheme],
|
|
98
99
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
99
100
|
};
|
|
@@ -28,8 +28,9 @@ const StoryMessage = ({ valence, title, body }: StoryMessageProps) => (
|
|
|
28
28
|
);
|
|
29
29
|
|
|
30
30
|
export default {
|
|
31
|
-
title: 'react-ui/Message',
|
|
32
|
-
component:
|
|
31
|
+
title: 'ui/react-ui-core/Message',
|
|
32
|
+
component: Message,
|
|
33
|
+
render: StoryMessage,
|
|
33
34
|
decorators: [withTheme],
|
|
34
35
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
35
36
|
};
|
|
@@ -29,8 +29,9 @@ const StorybookPopover = ({ openTrigger, children }: PropsWithChildren<{ openTri
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export default {
|
|
32
|
-
title: 'react-ui/Popover',
|
|
33
|
-
component:
|
|
32
|
+
title: 'ui/react-ui-core/Popover',
|
|
33
|
+
component: Popover,
|
|
34
|
+
render: StorybookPopover,
|
|
34
35
|
decorators: [withTheme],
|
|
35
36
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
36
37
|
};
|
|
@@ -34,8 +34,9 @@ const StorybookScrollArea = ({ children }: PropsWithChildren<{}>) => {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
export default {
|
|
37
|
-
title: 'react-ui/Scroll area',
|
|
38
|
-
component:
|
|
37
|
+
title: 'ui/react-ui-core/Scroll area',
|
|
38
|
+
component: ScrollArea,
|
|
39
|
+
render: StorybookScrollArea,
|
|
39
40
|
decorators: [withTheme],
|
|
40
41
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
41
42
|
};
|
|
@@ -4,38 +4,21 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import { type StoryObj } from '@storybook/react';
|
|
8
|
+
import React, { useState } from 'react';
|
|
8
9
|
|
|
9
10
|
import { faker } from '@dxos/random';
|
|
10
|
-
import { type Density } from '@dxos/react-ui-types';
|
|
11
11
|
|
|
12
12
|
import { Select } from './Select';
|
|
13
|
-
import { withTheme } from '../../testing';
|
|
14
|
-
import { DensityProvider } from '../DensityProvider';
|
|
13
|
+
import { withVariants, withTheme } from '../../testing';
|
|
15
14
|
|
|
16
15
|
faker.seed(1234);
|
|
17
16
|
|
|
18
|
-
// TODO(burdon): Factor out density test.
|
|
19
|
-
const createDensityTest =
|
|
20
|
-
(Component: FC<any>) =>
|
|
21
|
-
({ ...props }) => {
|
|
22
|
-
const densities: Density[] = ['coarse', 'fine'];
|
|
23
|
-
return (
|
|
24
|
-
<div className='grid grid-cols-2'>
|
|
25
|
-
{densities.map((density) => (
|
|
26
|
-
<div key={density}>
|
|
27
|
-
<DensityProvider density={density}>
|
|
28
|
-
<Component {...props} />
|
|
29
|
-
</DensityProvider>
|
|
30
|
-
</div>
|
|
31
|
-
))}
|
|
32
|
-
</div>
|
|
33
|
-
);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
17
|
type ItemProps = { id: string; text: string };
|
|
37
18
|
|
|
38
|
-
|
|
19
|
+
type StoryProps = { items: ItemProps[] };
|
|
20
|
+
|
|
21
|
+
const DefaultStory = ({ items = [] }: StoryProps) => {
|
|
39
22
|
const [value, setValue] = useState<string>();
|
|
40
23
|
return (
|
|
41
24
|
<Select.Root value={value} onValueChange={setValue}>
|
|
@@ -58,15 +41,15 @@ const StorybookSelect = ({ items = [] }: PropsWithChildren<{ items: ItemProps[]
|
|
|
58
41
|
);
|
|
59
42
|
};
|
|
60
43
|
|
|
61
|
-
export
|
|
62
|
-
title: 'react-ui/Select',
|
|
63
|
-
component: createDensityTest(StorybookSelect),
|
|
64
|
-
decorators: [withTheme],
|
|
65
|
-
parameters: { chromatic: { disableSnapshot: false } },
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export const Default = {
|
|
44
|
+
export const Default: StoryObj<StoryProps> = {
|
|
69
45
|
args: {
|
|
70
46
|
items: Array.from({ length: 16 }).map((_, i) => ({ id: `item-${i}`, text: faker.lorem.word() })),
|
|
71
47
|
},
|
|
72
48
|
};
|
|
49
|
+
|
|
50
|
+
export default {
|
|
51
|
+
title: 'ui/react-ui-core/Select',
|
|
52
|
+
render: DefaultStory,
|
|
53
|
+
decorators: [withVariants(), withTheme],
|
|
54
|
+
parameters: { chromatic: { disableSnapshot: false } },
|
|
55
|
+
};
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { CaretDown, CaretUp
|
|
5
|
+
import { CaretDown, CaretUp } from '@phosphor-icons/react';
|
|
6
6
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
7
7
|
import React, { forwardRef } from 'react';
|
|
8
8
|
|
|
9
9
|
import { useThemeContext } from '../../hooks';
|
|
10
10
|
import { type ThemedClassName } from '../../util';
|
|
11
11
|
import { Button, type ButtonProps } from '../Buttons';
|
|
12
|
+
import { Icon } from '../Icon';
|
|
12
13
|
|
|
13
14
|
type SelectRootProps = SelectPrimitive.SelectProps;
|
|
14
15
|
|
|
@@ -39,11 +40,9 @@ const SelectTriggerButton = forwardRef<HTMLButtonElement, SelectTriggerButtonPro
|
|
|
39
40
|
<SelectPrimitive.Trigger asChild ref={forwardedRef}>
|
|
40
41
|
<Button {...props}>
|
|
41
42
|
<SelectPrimitive.Value placeholder={placeholder}>{children}</SelectPrimitive.Value>
|
|
43
|
+
<span className='w-1 flex-1' />
|
|
42
44
|
<SelectPrimitive.Icon asChild>
|
|
43
|
-
|
|
44
|
-
<span className='w-1' />
|
|
45
|
-
<CaretDown className={tx('select.triggerIcon', 'select__trigger__icon', {})} weight='bold' />
|
|
46
|
-
</>
|
|
45
|
+
<CaretDown className={tx('select.triggerIcon', 'select__trigger__icon', {})} weight='bold' />
|
|
47
46
|
</SelectPrimitive.Icon>
|
|
48
47
|
</Button>
|
|
49
48
|
</SelectPrimitive.Trigger>
|
|
@@ -60,6 +59,7 @@ const SelectContent = forwardRef<HTMLDivElement, SelectContentProps>(
|
|
|
60
59
|
<SelectPrimitive.Content
|
|
61
60
|
{...props}
|
|
62
61
|
className={tx('select.content', 'select__content', {}, classNames)}
|
|
62
|
+
position='popper'
|
|
63
63
|
ref={forwardedRef}
|
|
64
64
|
>
|
|
65
65
|
{children}
|
|
@@ -138,13 +138,13 @@ type SelectOptionProps = SelectItemProps;
|
|
|
138
138
|
|
|
139
139
|
const SelectOption = forwardRef<HTMLDivElement, SelectItemProps>(({ children, classNames, ...props }, forwardedRef) => {
|
|
140
140
|
const { tx } = useThemeContext();
|
|
141
|
-
|
|
142
141
|
return (
|
|
143
142
|
<SelectPrimitive.Item {...props} className={tx('select.item', 'option', {}, classNames)} ref={forwardedRef}>
|
|
144
143
|
<SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
|
|
145
|
-
<
|
|
146
|
-
|
|
147
|
-
|
|
144
|
+
<span className='grow w-1' />
|
|
145
|
+
{/* <SelectPrimitive.ItemIndicator className={tx('select.itemIndicator', 'option__indicator', {})}> */}
|
|
146
|
+
<Icon icon='ph--check--regular' />
|
|
147
|
+
{/* </SelectPrimitive.ItemIndicator> */}
|
|
148
148
|
</SelectPrimitive.Item>
|
|
149
149
|
);
|
|
150
150
|
});
|
|
@@ -174,7 +174,6 @@ type SelectArrowProps = ThemedClassName<SelectPrimitive.SelectArrowProps>;
|
|
|
174
174
|
|
|
175
175
|
const SelectArrow = forwardRef<SVGSVGElement, SelectArrowProps>(({ classNames, ...props }, forwardedRef) => {
|
|
176
176
|
const { tx } = useThemeContext();
|
|
177
|
-
|
|
178
177
|
return (
|
|
179
178
|
<SelectPrimitive.Arrow
|
|
180
179
|
{...props}
|
|
@@ -10,9 +10,8 @@ import { Status } from './Status';
|
|
|
10
10
|
import { withTheme } from '../../testing';
|
|
11
11
|
|
|
12
12
|
export default {
|
|
13
|
-
title: 'react-ui/Status',
|
|
13
|
+
title: 'ui/react-ui-core/Status',
|
|
14
14
|
component: Status,
|
|
15
|
-
actions: { argTypesRegex: '^on.*' },
|
|
16
15
|
decorators: [withTheme],
|
|
17
16
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
18
17
|
};
|
|
@@ -14,33 +14,24 @@ import { ElevationProvider } from '../ElevationProvider';
|
|
|
14
14
|
|
|
15
15
|
export type ThemeMode = 'light' | 'dark';
|
|
16
16
|
|
|
17
|
-
export
|
|
17
|
+
export type ThemeContextValue = {
|
|
18
18
|
tx: ThemeFunction<any>;
|
|
19
19
|
themeMode: ThemeMode;
|
|
20
20
|
hasIosKeyboard: boolean;
|
|
21
|
-
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export const ThemeContext = createContext<ThemeContextValue | undefined>(undefined);
|
|
22
27
|
|
|
23
28
|
export type ThemeProviderProps = Omit<TranslationsProviderProps, 'children'> &
|
|
24
29
|
Partial<ThemeContextValue> &
|
|
25
30
|
PropsWithChildren<{
|
|
26
|
-
rootElevation?: Elevation;
|
|
27
31
|
rootDensity?: Density;
|
|
32
|
+
rootElevation?: Elevation;
|
|
28
33
|
}>;
|
|
29
34
|
|
|
30
|
-
export const ThemeContext = createContext<ThemeContextValue>({
|
|
31
|
-
tx: (_path, defaultClassName, _styleProps, ..._options) => defaultClassName,
|
|
32
|
-
themeMode: 'dark',
|
|
33
|
-
hasIosKeyboard: false,
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const handleInputModalityChange = (isUsingKeyboard: boolean) => {
|
|
37
|
-
if (isUsingKeyboard) {
|
|
38
|
-
document.body.setAttribute('data-is-keyboard', 'true');
|
|
39
|
-
} else {
|
|
40
|
-
document.body.removeAttribute('data-is-keyboard');
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
35
|
export const ThemeProvider = ({
|
|
45
36
|
children,
|
|
46
37
|
fallback = null,
|
|
@@ -48,8 +39,8 @@ export const ThemeProvider = ({
|
|
|
48
39
|
appNs,
|
|
49
40
|
tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName,
|
|
50
41
|
themeMode = 'dark',
|
|
42
|
+
rootDensity = 'fine',
|
|
51
43
|
rootElevation = 'base',
|
|
52
|
-
rootDensity = 'coarse',
|
|
53
44
|
}: ThemeProviderProps) => {
|
|
54
45
|
useEffect(() => {
|
|
55
46
|
if (document.defaultView) {
|
|
@@ -75,3 +66,11 @@ export const ThemeProvider = ({
|
|
|
75
66
|
</ThemeContext.Provider>
|
|
76
67
|
);
|
|
77
68
|
};
|
|
69
|
+
|
|
70
|
+
const handleInputModalityChange = (isUsingKeyboard: boolean) => {
|
|
71
|
+
if (isUsingKeyboard) {
|
|
72
|
+
document.body.setAttribute('data-is-keyboard', 'true');
|
|
73
|
+
} else {
|
|
74
|
+
document.body.removeAttribute('data-is-keyboard');
|
|
75
|
+
}
|
|
76
|
+
};
|
|
@@ -45,8 +45,9 @@ const StorybookToast = (props: StorybookToastProps) => {
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export default {
|
|
48
|
-
title: 'react-ui/Toast',
|
|
49
|
-
component:
|
|
48
|
+
title: 'ui/react-ui-core/Toast',
|
|
49
|
+
component: Toast,
|
|
50
|
+
render: StorybookToast,
|
|
50
51
|
decorators: [withTheme],
|
|
51
52
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
52
53
|
};
|
|
@@ -24,7 +24,6 @@ import React, { type ComponentPropsWithRef, forwardRef, type FunctionComponent }
|
|
|
24
24
|
|
|
25
25
|
import { useThemeContext } from '../../hooks';
|
|
26
26
|
import { type ThemedClassName } from '../../util';
|
|
27
|
-
import { DensityProvider } from '../DensityProvider';
|
|
28
27
|
import { ElevationProvider } from '../ElevationProvider';
|
|
29
28
|
|
|
30
29
|
type ToastProviderProps = ToastProviderPrimitiveProps;
|
|
@@ -46,9 +45,7 @@ const ToastRoot = forwardRef<HTMLLIElement, ToastRootProps>(({ classNames, child
|
|
|
46
45
|
const { tx } = useThemeContext();
|
|
47
46
|
return (
|
|
48
47
|
<ToastRootPrimitive {...props} className={tx('toast.root', 'toast', {}, classNames)} ref={forwardedRef}>
|
|
49
|
-
<ElevationProvider elevation='chrome'>
|
|
50
|
-
<DensityProvider density='fine'>{children}</DensityProvider>
|
|
51
|
-
</ElevationProvider>
|
|
48
|
+
<ElevationProvider elevation='chrome'>{children}</ElevationProvider>
|
|
52
49
|
</ToastRootPrimitive>
|
|
53
50
|
);
|
|
54
51
|
});
|
|
@@ -70,8 +70,9 @@ const StorybookToolbar = (props: StorybookToolbarProps) => {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
export default {
|
|
73
|
-
title: 'react-ui/Toolbar',
|
|
74
|
-
component:
|
|
73
|
+
title: 'ui/react-ui-core/Toolbar',
|
|
74
|
+
component: Toolbar,
|
|
75
|
+
render: StorybookToolbar,
|
|
75
76
|
decorators: [withTheme],
|
|
76
77
|
parameters: { chromatic: { disableSnapshot: false } },
|
|
77
78
|
};
|