@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.
Files changed (114) hide show
  1. package/dist/lib/browser/index.mjs +34 -29
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +2395 -0
  5. package/dist/lib/node/index.cjs.map +7 -0
  6. package/dist/lib/node/meta.json +1 -0
  7. package/dist/lib/node-esm/index.mjs +2396 -0
  8. package/dist/lib/node-esm/index.mjs.map +7 -0
  9. package/dist/lib/node-esm/meta.json +1 -0
  10. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +15 -1
  11. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  12. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +6 -1
  13. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  14. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +9 -1
  15. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/Buttons/Button.stories.d.ts +12 -17
  17. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +2 -1
  19. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +1 -1
  20. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +20 -1
  21. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  23. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +12 -1
  24. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +11 -1
  26. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  28. package/dist/types/src/components/Input/Input.stories.d.ts +16 -1
  29. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Lists/List.stories.d.ts +2 -3
  31. package/dist/types/src/components/Lists/List.stories.d.ts.map +1 -1
  32. package/dist/types/src/components/Lists/Tree.stories.d.ts +5 -1
  33. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +3 -2
  35. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Main/Main.stories.d.ts +5 -1
  37. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  38. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +29 -1
  39. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +29 -1
  41. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +1 -1
  42. package/dist/types/src/components/Message/Message.stories.d.ts +6 -1
  43. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/Popover/Popover.stories.d.ts +15 -1
  45. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +20 -1
  47. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  48. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  49. package/dist/types/src/components/Select/Select.stories.d.ts +10 -11
  50. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Status/Status.stories.d.ts +0 -3
  52. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +4 -5
  54. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  55. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +4 -4
  56. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  57. package/dist/types/src/components/Toast/Toast.stories.d.ts +20 -1
  58. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -2
  60. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  61. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +30 -1
  62. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +13 -1
  64. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  65. package/dist/types/src/hooks/useThemeContext.d.ts.map +1 -1
  66. package/dist/types/src/playground/Controls.stories.d.ts +2 -6
  67. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  68. package/dist/types/src/playground/Surfaces.stories.d.ts +6 -2
  69. package/dist/types/src/playground/Surfaces.stories.d.ts.map +1 -1
  70. package/dist/types/src/playground/Typography.stories.d.ts +1 -1
  71. package/dist/types/src/testing/decorators/index.d.ts +1 -0
  72. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  73. package/dist/types/src/testing/decorators/withVariants.d.ts +13 -0
  74. package/dist/types/src/testing/decorators/withVariants.d.ts.map +1 -0
  75. package/package.json +20 -14
  76. package/src/components/Avatars/Avatar.stories.tsx +3 -2
  77. package/src/components/Avatars/AvatarGroup.stories.tsx +3 -2
  78. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -2
  79. package/src/components/Buttons/Button.stories.tsx +34 -63
  80. package/src/components/Buttons/Toggle.stories.tsx +3 -2
  81. package/src/components/Buttons/ToggleGroup.stories.tsx +3 -2
  82. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  83. package/src/components/Dialogs/AlertDialog.stories.tsx +3 -2
  84. package/src/components/Dialogs/Dialog.stories.tsx +3 -2
  85. package/src/components/Input/Input.stories.tsx +4 -3
  86. package/src/components/Link/Link.stories.tsx +1 -1
  87. package/src/components/Lists/List.stories.tsx +4 -4
  88. package/src/components/Lists/Tree.stories.tsx +3 -2
  89. package/src/components/Lists/Treegrid.stories.tsx +7 -5
  90. package/src/components/Main/Main.stories.tsx +3 -2
  91. package/src/components/Menus/ContextMenu.stories.tsx +3 -2
  92. package/src/components/Menus/DropdownMenu.stories.tsx +3 -2
  93. package/src/components/Message/Message.stories.tsx +3 -2
  94. package/src/components/Popover/Popover.stories.tsx +3 -2
  95. package/src/components/ScrollArea/ScrollArea.stories.tsx +3 -2
  96. package/src/components/Select/Select.stories.tsx +14 -31
  97. package/src/components/Select/Select.tsx +9 -10
  98. package/src/components/Status/Status.stories.tsx +1 -2
  99. package/src/components/Tag/Tag.stories.tsx +1 -1
  100. package/src/components/ThemeProvider/ThemeProvider.tsx +17 -18
  101. package/src/components/Toast/Toast.stories.tsx +3 -2
  102. package/src/components/Toast/Toast.tsx +1 -4
  103. package/src/components/Toolbar/Toolbar.stories.tsx +3 -2
  104. package/src/components/Toolbar/Toolbar.tsx +21 -1
  105. package/src/components/Tooltip/Tooltip.stories.tsx +3 -2
  106. package/src/hooks/useThemeContext.ts +3 -1
  107. package/src/playground/Controls.stories.tsx +7 -10
  108. package/src/playground/Surfaces.stories.tsx +4 -3
  109. package/src/playground/Typography.stories.tsx +2 -2
  110. package/src/testing/decorators/index.ts +1 -0
  111. package/src/testing/decorators/withVariants.tsx +45 -0
  112. package/dist/types/src/playground/helpers.d.ts +0 -6
  113. package/dist/types/src/playground/helpers.d.ts.map +0 -1
  114. 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/Avatar Group',
48
- component: StorybookAvatarGroup,
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: StorybookBreadcrumb,
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, { type PropsWithChildren } from '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
- export default {
18
- title: 'react-ui/Button',
19
- component: Button,
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
- Disabled
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
- </Container>
81
- ),
82
- args: { children: 'Hello', disabled: false, variant: 'default' },
30
+ </div>
31
+ );
83
32
  };
84
33
 
85
- export const Primary = { ...Default, args: { variant: 'primary', children: 'Hello' } };
34
+ const defaults = { children: 'Test' };
86
35
 
87
- export const Destructive = { ...Default, args: { variant: 'destructive', children: 'Delete' } };
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 Outline = { ...Default, args: { variant: 'outline', children: 'Hello' } };
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 = { ...Default, args: { variant: 'ghost', children: 'Hello' } };
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 button',
25
- component: StorybookToggle,
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/Toggle button group',
33
- component: StorybookToggleGroup,
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: 'coarse' });
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/Dialog (alert)',
58
- component: StorybookAlertDialog,
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: StorybookDialog,
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: StoryInput,
77
- // TODO(thure): Refactor
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 FC, type ReactNode, useState } from 'react';
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 ListProps, type ListScopedProps } from './List';
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 as FC<ListProps>,
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: StorybookTree,
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 StorybookTreegrid = () => {
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: StorybookTreegrid,
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: StoryMain,
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/Context menu',
96
- component: StorybookContextMenu,
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/Dropdown menu',
96
- component: StorybookDropdownMenu,
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: StoryMessage,
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: StorybookPopover,
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: StorybookScrollArea,
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 React, { type FC, type PropsWithChildren, useState } from 'react';
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
- const StorybookSelect = ({ items = [] }: PropsWithChildren<{ items: ItemProps[] }>) => {
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 default {
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, Check } from '@phosphor-icons/react';
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
- <SelectPrimitive.ItemIndicator className={tx('select.itemIndicator', 'option__indicator', {})}>
146
- <Check weight='bold' />
147
- </SelectPrimitive.ItemIndicator>
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
  };
@@ -8,7 +8,7 @@ import { Tag } from './Tag';
8
8
  import { withTheme } from '../../testing';
9
9
 
10
10
  export default {
11
- title: 'react-ui/Tag',
11
+ title: 'ui/react-ui-core/Tag',
12
12
  component: Tag,
13
13
  decorators: [withTheme],
14
14
  parameters: { chromatic: { disableSnapshot: false } },
@@ -14,33 +14,24 @@ import { ElevationProvider } from '../ElevationProvider';
14
14
 
15
15
  export type ThemeMode = 'light' | 'dark';
16
16
 
17
- export interface ThemeContextValue {
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: StorybookToast,
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: StorybookToolbar,
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
  };