@dxos/react-ui 0.8.2-main.f081794 → 0.8.2-main.fbd8ed0

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 (112) hide show
  1. package/dist/lib/browser/index.mjs +1606 -1073
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +1941 -1406
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +1606 -1073
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +2 -2
  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 +0 -1
  13. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  14. package/dist/types/src/components/Buttons/Button.stories.d.ts +10 -44
  15. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +1 -1
  16. package/dist/types/src/components/Buttons/IconButton.d.ts +4 -5
  17. package/dist/types/src/components/Buttons/IconButton.d.ts.map +1 -1
  18. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +7 -6
  19. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +1 -1
  20. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +1 -4
  22. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  24. package/dist/types/src/components/Clipboard/CopyButton.d.ts +2 -1
  25. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  26. package/dist/types/src/components/Clipboard/index.d.ts +2 -2
  27. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  28. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +2 -2
  29. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Dialogs/Dialog.d.ts +2 -2
  31. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +1 -1
  32. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +2 -2
  33. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  35. package/dist/types/src/components/Input/Input.d.ts +1 -1
  36. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  37. package/dist/types/src/components/Input/Input.stories.d.ts +33 -159
  38. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +1 -1
  40. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +1 -1
  41. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +1 -1
  42. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +1 -1
  43. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  45. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  47. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  48. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/Popover/Popover.d.ts +15 -6
  50. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  51. package/dist/types/src/components/Popover/Popover.stories.d.ts +5 -1
  52. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  54. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  57. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -1
  58. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  59. package/dist/types/src/components/Toast/Toast.stories.d.ts +2 -2
  60. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/Tooltip/Tooltip.d.ts +94 -20
  63. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  64. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +41 -17
  65. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/index.d.ts +1 -1
  67. package/dist/types/src/components/index.d.ts.map +1 -1
  68. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  69. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  70. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  71. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  72. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  73. package/dist/types/src/playground/Controls.stories.d.ts +1 -1
  74. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  75. package/dist/types/src/playground/Custom.stories.d.ts +8 -0
  76. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -0
  77. package/dist/types/src/testing/decorators/withVariants.d.ts.map +1 -1
  78. package/dist/types/tsconfig.tsbuildinfo +1 -1
  79. package/package.json +14 -13
  80. package/src/components/Avatars/Avatar.stories.tsx +27 -27
  81. package/src/components/Avatars/Avatar.tsx +1 -1
  82. package/src/components/Avatars/AvatarGroup.stories.tsx +4 -5
  83. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +2 -2
  84. package/src/components/Buttons/Button.stories.tsx +19 -14
  85. package/src/components/Buttons/IconButton.stories.tsx +9 -10
  86. package/src/components/Buttons/IconButton.tsx +8 -33
  87. package/src/components/Buttons/Toggle.stories.tsx +2 -2
  88. package/src/components/Buttons/ToggleGroup.stories.tsx +3 -7
  89. package/src/components/Clipboard/CopyButton.tsx +22 -24
  90. package/src/components/Dialogs/AlertDialog.stories.tsx +4 -11
  91. package/src/components/Dialogs/Dialog.stories.tsx +3 -3
  92. package/src/components/Dialogs/Dialog.tsx +7 -4
  93. package/src/components/Input/Input.stories.tsx +67 -56
  94. package/src/components/Input/Input.tsx +1 -0
  95. package/src/components/Lists/Tree.stories.tsx +2 -2
  96. package/src/components/Lists/Treegrid.stories.tsx +12 -12
  97. package/src/components/Main/Main.stories.tsx +2 -2
  98. package/src/components/Menus/ContextMenu.stories.tsx +2 -2
  99. package/src/components/Menus/DropdownMenu.stories.tsx +2 -2
  100. package/src/components/Message/Message.stories.tsx +3 -3
  101. package/src/components/Popover/Popover.stories.tsx +2 -2
  102. package/src/components/Popover/Popover.tsx +8 -4
  103. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -2
  104. package/src/components/ScrollArea/ScrollArea.tsx +3 -0
  105. package/src/components/Toast/Toast.stories.tsx +15 -10
  106. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  107. package/src/components/Tooltip/Tooltip.stories.tsx +43 -18
  108. package/src/components/Tooltip/Tooltip.tsx +748 -58
  109. package/src/components/index.ts +1 -1
  110. package/src/playground/Controls.stories.tsx +2 -2
  111. package/src/playground/Custom.stories.tsx +137 -0
  112. package/src/playground/Typography.stories.tsx +2 -2
@@ -6,7 +6,7 @@ import React from 'react';
6
6
 
7
7
  import { faker } from '@dxos/random';
8
8
 
9
- import { Treegrid as Tg } from './Treegrid';
9
+ import { Treegrid } from './Treegrid';
10
10
  import { withTheme } from '../../testing';
11
11
  import { Icon } from '../Icon';
12
12
 
@@ -122,30 +122,30 @@ const flattenedContent = Array.from(visitor(content, () => true));
122
122
 
123
123
  const DefaultStory = () => {
124
124
  return (
125
- <Tg.Root gridTemplateColumns='1fr'>
125
+ <Treegrid.Root gridTemplateColumns='1fr'>
126
126
  {flattenedContent.map(({ node, parentOf, path }) => {
127
127
  return (
128
- <Tg.Row
128
+ <Treegrid.Row
129
129
  key={node.id}
130
- id={path.join(Tg.PATH_SEPARATOR)}
131
- {...(parentOf && { parentOf: parentOf.join(Tg.PARENT_OF_SEPARATOR) })}
130
+ id={path.join(Treegrid.PATH_SEPARATOR)}
131
+ {...(parentOf && { parentOf: parentOf.join(Treegrid.PARENT_OF_SEPARATOR) })}
132
132
  >
133
- <Tg.Cell indent classNames='flex items-center'>
133
+ <Treegrid.Cell indent classNames='flex items-center'>
134
134
  {node.icon && <Icon icon={node.icon} classNames='is-[1em] bs-[1em] mlb-1' />}
135
135
  {node.title}
136
- </Tg.Cell>
137
- </Tg.Row>
136
+ </Treegrid.Cell>
137
+ </Treegrid.Row>
138
138
  );
139
139
  })}
140
- </Tg.Root>
140
+ </Treegrid.Root>
141
141
  );
142
142
  };
143
143
 
144
- export const Default = {};
145
-
146
144
  export default {
147
145
  title: 'ui/react-ui-core/Treegrid',
148
- component: Tg.Root,
146
+ component: Treegrid.Root,
149
147
  render: DefaultStory,
150
148
  decorators: [withTheme],
151
149
  };
150
+
151
+ export const Default = {};
@@ -22,7 +22,7 @@ const ComplementarySidebarToggle = () => {
22
22
  return <Button onClick={toggleComplementarySidebar}>Toggle complementary sidebar</Button>;
23
23
  };
24
24
 
25
- const StoryMain = (_args: StoryMainArgs) => {
25
+ const DefaultStory = (_args: StoryMainArgs) => {
26
26
  return (
27
27
  <Main.Root>
28
28
  <Main.Overlay />
@@ -48,7 +48,7 @@ const StoryMain = (_args: StoryMainArgs) => {
48
48
  export default {
49
49
  title: 'ui/react-ui-core/Main',
50
50
  component: Main.Root,
51
- render: StoryMain,
51
+ render: DefaultStory,
52
52
  decorators: [withTheme],
53
53
  parameters: { chromatic: { disableSnapshot: false } },
54
54
  };
@@ -9,7 +9,7 @@ import React from 'react';
9
9
  import { ContextMenu } from './ContextMenu';
10
10
  import { withTheme } from '../../testing';
11
11
 
12
- const StorybookContextMenu = () => {
12
+ const DefaultStory = () => {
13
13
  // NOTE(thure): Since long-tap will select text in some OSs, apply `select-none` to `ContextMenu.Trigger` where possible.
14
14
  return (
15
15
  <ContextMenu.Root>
@@ -94,7 +94,7 @@ const StorybookContextMenu = () => {
94
94
  export default {
95
95
  title: 'ui/react-ui-core/ContextMenu',
96
96
  component: ContextMenu,
97
- render: StorybookContextMenu,
97
+ render: DefaultStory,
98
98
  decorators: [withTheme],
99
99
  parameters: { chromatic: { disableSnapshot: false } },
100
100
  };
@@ -10,7 +10,7 @@ import { DropdownMenu } from './DropdownMenu';
10
10
  import { withTheme } from '../../testing';
11
11
  import { Button } from '../Buttons';
12
12
 
13
- const StorybookDropdownMenu = () => {
13
+ const DefaultStory = () => {
14
14
  return (
15
15
  <DropdownMenu.Root defaultOpen>
16
16
  <DropdownMenu.Trigger asChild>
@@ -94,7 +94,7 @@ const StorybookDropdownMenu = () => {
94
94
  export default {
95
95
  title: 'ui/react-ui-core/DropdownMenu',
96
96
  component: DropdownMenu,
97
- render: StorybookDropdownMenu,
97
+ render: DefaultStory,
98
98
  decorators: [withTheme],
99
99
  parameters: { chromatic: { disableSnapshot: false } },
100
100
  };
@@ -12,13 +12,13 @@ import { type MessageValence } from '@dxos/react-ui-types';
12
12
  import { Message } from './Message';
13
13
  import { withTheme } from '../../testing';
14
14
 
15
- type StoryMessageProps = {
15
+ type StoryProps = {
16
16
  valence: MessageValence;
17
17
  title: string;
18
18
  body: string;
19
19
  };
20
20
 
21
- const StoryMessage = ({ valence, title, body }: StoryMessageProps) => (
21
+ const DefaultStory = ({ valence, title, body }: StoryProps) => (
22
22
  <Message.Root valence={valence}>
23
23
  <Message.Title>
24
24
  <Info className='inline w-5 h-5 mb-1' weight='duotone' /> {title}
@@ -30,7 +30,7 @@ const StoryMessage = ({ valence, title, body }: StoryMessageProps) => (
30
30
  export default {
31
31
  title: 'ui/react-ui-core/Message',
32
32
  component: Message,
33
- render: StoryMessage,
33
+ render: DefaultStory,
34
34
  decorators: [withTheme],
35
35
  parameters: { chromatic: { disableSnapshot: false } },
36
36
  };
@@ -14,7 +14,7 @@ import { Button } from '../Buttons';
14
14
 
15
15
  faker.seed(1234);
16
16
 
17
- const StorybookPopover = ({ openTrigger, children }: PropsWithChildren<{ openTrigger: ReactNode }>) => {
17
+ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger: ReactNode }>) => {
18
18
  return (
19
19
  <Popover.Root defaultOpen>
20
20
  <Popover.Trigger asChild>{openTrigger}</Popover.Trigger>
@@ -31,7 +31,7 @@ const StorybookPopover = ({ openTrigger, children }: PropsWithChildren<{ openTri
31
31
  export default {
32
32
  title: 'ui/react-ui-core/Popover',
33
33
  component: Popover,
34
- render: StorybookPopover,
34
+ render: DefaultStory,
35
35
  decorators: [withTheme],
36
36
  parameters: { chromatic: { disableSnapshot: false } },
37
37
  };
@@ -246,13 +246,13 @@ PopoverPortal.displayName = PORTAL_NAME;
246
246
 
247
247
  const CONTENT_NAME = 'PopoverContent';
248
248
 
249
- interface PopoverContentProps extends PopoverContentTypeProps {
249
+ type PopoverContentProps = ThemedClassName<PopoverContentTypeProps> & {
250
250
  /**
251
251
  * Used to force mounting when more control is needed. Useful when
252
252
  * controlling animation with React animation libraries.
253
253
  */
254
- forceMount?: true;
255
- }
254
+ forceMount?: boolean;
255
+ };
256
256
 
257
257
  const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps>(
258
258
  (props: ScopedProps<PopoverContentProps>, forwardedRef) => {
@@ -277,7 +277,8 @@ PopoverContent.displayName = CONTENT_NAME;
277
277
  /* ----------------------------------------------------------------------------------------------- */
278
278
 
279
279
  type PopoverContentTypeElement = PopoverContentImplElement;
280
- interface PopoverContentTypeProps extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
280
+ export interface PopoverContentTypeProps
281
+ extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
281
282
 
282
283
  const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
283
284
  (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {
@@ -571,6 +572,8 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
571
572
 
572
573
  const getState = (open: boolean) => (open ? 'open' : 'closed');
573
574
 
575
+ type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
576
+
574
577
  export const Popover = {
575
578
  Root: PopoverRoot,
576
579
  Anchor: PopoverAnchor,
@@ -595,4 +598,5 @@ export type {
595
598
  PopoverCloseProps,
596
599
  PopoverArrowProps,
597
600
  PopoverViewportProps,
601
+ PopoverContentInteractOutsideEvent,
598
602
  };
@@ -14,7 +14,7 @@ import { withTheme } from '../../testing';
14
14
 
15
15
  faker.seed(1234);
16
16
 
17
- const StorybookScrollArea = ({ children }: PropsWithChildren<{}>) => {
17
+ const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
18
18
  return (
19
19
  <ScrollArea.Root
20
20
  classNames={['is-[300px] bs-[400px] rounded', groupSurface, surfaceShadow({ elevation: 'positioned' })]}
@@ -36,7 +36,7 @@ const StorybookScrollArea = ({ children }: PropsWithChildren<{}>) => {
36
36
  export default {
37
37
  title: 'ui/react-ui-core/Scroll area',
38
38
  component: ScrollArea,
39
- render: StorybookScrollArea,
39
+ render: DefaultStory,
40
40
  decorators: [withTheme],
41
41
  parameters: { chromatic: { disableSnapshot: false } },
42
42
  };
@@ -23,6 +23,9 @@ type ScrollAreaVariant = 'coarse' | 'fine';
23
23
 
24
24
  type ScrollAreaRootProps = ThemedClassName<ScrollAreaPrimitiveRootProps>;
25
25
 
26
+ /**
27
+ * @deprecated
28
+ */
26
29
  const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(({ classNames, ...props }, forwardedRef) => {
27
30
  const { tx } = useThemeContext();
28
31
  return (
@@ -13,27 +13,27 @@ import { Button } from '../Buttons';
13
13
  type ActionTriggerProps = { altText: string; trigger: ReactNode };
14
14
 
15
15
  type StorybookToastProps = Partial<{
16
- openTrigger: string;
17
16
  title: string;
18
17
  description: string;
19
18
  actionTriggers: ActionTriggerProps[];
19
+ openTrigger: string;
20
20
  closeTrigger: ReactNode;
21
21
  }>;
22
22
 
23
- const StorybookToast = (props: StorybookToastProps) => {
23
+ const DefaultStory = ({ title, description, actionTriggers, openTrigger, closeTrigger }: StorybookToastProps) => {
24
24
  const [open, setOpen] = useState(true);
25
25
  return (
26
26
  <Toast.Provider>
27
- <Button onClick={() => setOpen(true)}>{props.openTrigger}</Button>
27
+ <Button onClick={() => setOpen(true)}>{openTrigger}</Button>
28
28
  <Toast.Viewport />
29
29
  <Toast.Root open={open} onOpenChange={setOpen}>
30
30
  <Toast.Body>
31
- <Toast.Title>{props.title}</Toast.Title>
32
- <Toast.Description>{props.description}</Toast.Description>
31
+ <Toast.Title>{title}</Toast.Title>
32
+ <Toast.Description>{description}</Toast.Description>
33
33
  </Toast.Body>
34
34
  <Toast.Actions>
35
- <Toast.Close asChild={typeof props.closeTrigger !== 'string'}>{props.closeTrigger}</Toast.Close>
36
- {(props.actionTriggers || []).map(({ altText, trigger }: ActionTriggerProps, index: number) => (
35
+ <Toast.Close asChild={typeof closeTrigger !== 'string'}>{closeTrigger}</Toast.Close>
36
+ {(actionTriggers || []).map(({ altText, trigger }: ActionTriggerProps, index: number) => (
37
37
  <Toast.Action key={index} altText={altText} asChild={typeof trigger !== 'string'}>
38
38
  {trigger}
39
39
  </Toast.Action>
@@ -47,7 +47,7 @@ const StorybookToast = (props: StorybookToastProps) => {
47
47
  export default {
48
48
  title: 'ui/react-ui-core/Toast',
49
49
  component: Toast,
50
- render: StorybookToast,
50
+ render: DefaultStory,
51
51
  decorators: [withTheme],
52
52
  parameters: { chromatic: { disableSnapshot: false } },
53
53
  };
@@ -55,9 +55,14 @@ export default {
55
55
  export const Default = {
56
56
  args: {
57
57
  openTrigger: 'Open toast',
58
- title: 'Hi, this is a toast',
58
+ title: 'This is a toast',
59
59
  description: 'This goes away on its own with a timer.',
60
- actionTriggers: [{ altText: 'Press F5 to reload the page', trigger: <Button variant='primary'>Reload</Button> }],
60
+ actionTriggers: [
61
+ {
62
+ altText: 'Press F5 to reload the page',
63
+ trigger: <Button variant='primary'>Reload</Button>,
64
+ },
65
+ ],
61
66
  closeTrigger: <Button>Close</Button>,
62
67
  },
63
68
  parameters: {
@@ -14,7 +14,7 @@ import { Select } from '../Select';
14
14
 
15
15
  type StorybookToolbarProps = {};
16
16
 
17
- const StorybookToolbar = (props: StorybookToolbarProps) => {
17
+ const DefaultStory = (props: StorybookToolbarProps) => {
18
18
  return (
19
19
  <Toolbar.Root>
20
20
  {/* TODO(burdon): Should be fixed width (regardless of selection). */}
@@ -72,7 +72,7 @@ const StorybookToolbar = (props: StorybookToolbarProps) => {
72
72
  export default {
73
73
  title: 'ui/react-ui-core/Toolbar',
74
74
  component: Toolbar,
75
- render: StorybookToolbar,
75
+ render: DefaultStory,
76
76
  decorators: [withTheme],
77
77
  parameters: { chromatic: { disableSnapshot: false } },
78
78
  };
@@ -3,55 +3,80 @@
3
3
  //
4
4
 
5
5
  import '@dxos-theme';
6
-
7
6
  import React from 'react';
8
7
 
8
+ import { faker } from '@dxos/random';
9
+
9
10
  import { Tooltip } from './Tooltip';
10
11
  import { withTheme } from '../../testing';
11
12
  import { Button } from '../Buttons';
12
13
 
13
- type StoryTooltipProps = {
14
- content: string;
14
+ type StoryProps = {
15
+ tooltips: { label: string; content: string }[];
15
16
  defaultOpen?: boolean;
16
17
  };
17
18
 
18
- const StoryTooltip = ({ content, defaultOpen }: StoryTooltipProps) => (
19
- <Tooltip.Provider>
20
- <Tooltip.Root defaultOpen={defaultOpen}>
21
- <Tooltip.Trigger asChild>
22
- <Button>Trigger tooltip</Button>
23
- </Tooltip.Trigger>
24
- <Tooltip.Content side='right'>
25
- <Tooltip.Arrow />
26
- {content}
27
- </Tooltip.Content>
28
- </Tooltip.Root>
19
+ const DefaultStory = ({ tooltips, defaultOpen }: StoryProps) => (
20
+ <Tooltip.Provider defaultOpen={defaultOpen}>
21
+ <div role='none' className='is-32'>
22
+ {tooltips.map(({ label, content }, i) => (
23
+ <Tooltip.Trigger asChild key={i} content={content} side='right'>
24
+ <Button classNames='block is-full'>{label}</Button>
25
+ </Tooltip.Trigger>
26
+ ))}
27
+ </div>
29
28
  </Tooltip.Provider>
30
29
  );
31
30
 
32
31
  export default {
33
32
  title: 'ui/react-ui-core/Tooltip',
34
33
  component: Tooltip,
35
- render: StoryTooltip,
34
+ render: DefaultStory,
36
35
  decorators: [withTheme],
37
36
  parameters: { chromatic: { disableSnapshot: false } },
38
37
  };
39
38
 
40
39
  export const Default = {
41
40
  args: {
42
- content: 'This is the tooltip content',
41
+ tooltips: [
42
+ {
43
+ label: 'Tooltip trigger',
44
+ content: 'This is the tooltip content',
45
+ },
46
+ ],
43
47
  },
44
48
  parameters: {
45
49
  chromatic: { delay: 500 },
46
50
  },
47
51
  };
48
52
 
49
- export const Testing = {
53
+ export const DefaultOpen = {
50
54
  args: {
51
55
  defaultOption: true,
52
- content: 'This is the tooltip content',
56
+ tooltips: [
57
+ {
58
+ label: 'Tooltip trigger',
59
+ content: 'This is the tooltip content',
60
+ },
61
+ ],
53
62
  },
54
63
  parameters: {
55
64
  chromatic: { delay: 500 },
56
65
  },
57
66
  };
67
+
68
+ export const StressTest = {
69
+ args: {
70
+ defaultOption: true,
71
+ tooltips: faker.helpers.multiple(
72
+ () => ({
73
+ label: faker.lorem.words(2),
74
+ content: faker.lorem.words(5),
75
+ }),
76
+ { count: 32 },
77
+ ),
78
+ },
79
+ parameters: {
80
+ chromatic: { disableSnapshot: true },
81
+ },
82
+ };