@dxos/react-ui 0.8.4-main.d05673bc65 → 0.8.4-main.e00bdcdb52

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 (288) hide show
  1. package/dist/lib/browser/{chunk-2FKSMWNY.mjs → chunk-BDBC6H6V.mjs} +79 -5
  2. package/dist/lib/browser/chunk-BDBC6H6V.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +921 -736
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +30 -18
  7. package/dist/lib/browser/testing/index.mjs.map +3 -3
  8. package/dist/lib/browser/translations.mjs +18 -0
  9. package/dist/lib/browser/translations.mjs.map +7 -0
  10. package/dist/lib/node-esm/{chunk-ZNBLTSHI.mjs → chunk-3JSJK2ZY.mjs} +79 -5
  11. package/dist/lib/node-esm/chunk-3JSJK2ZY.mjs.map +7 -0
  12. package/dist/lib/node-esm/index.mjs +921 -736
  13. package/dist/lib/node-esm/index.mjs.map +4 -4
  14. package/dist/lib/node-esm/meta.json +1 -1
  15. package/dist/lib/node-esm/testing/index.mjs +30 -18
  16. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  17. package/dist/lib/node-esm/translations.mjs +20 -0
  18. package/dist/lib/node-esm/translations.mjs.map +7 -0
  19. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  20. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/Button/Button.d.ts +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  27. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  34. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Card/Card.d.ts +70 -50
  41. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  42. package/dist/types/src/components/Card/Card.stories.d.ts +2 -2
  43. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  47. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  48. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  49. package/dist/types/src/components/Dialog/AlertDialog.d.ts +42 -31
  50. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  51. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -30
  53. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  54. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  55. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  57. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  58. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  59. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  60. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  61. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  62. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  63. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  64. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  65. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/Focus/index.d.ts +2 -0
  67. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  68. package/dist/types/src/components/Icon/Icon.d.ts +3 -0
  69. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  70. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  71. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/Image/Image.d.ts +2 -1
  73. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  74. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  75. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/Input/Input.d.ts +14 -17
  77. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  78. package/dist/types/src/components/Input/Input.stories.d.ts +3 -3
  79. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/List/List.d.ts +5 -3
  82. package/dist/types/src/components/List/List.d.ts.map +1 -1
  83. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  84. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  86. package/dist/types/src/components/List/Tree.d.ts +2 -2
  87. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  88. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  90. package/dist/types/src/components/List/Treegrid.d.ts +5 -9
  91. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  92. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/Main/Main.d.ts +7 -3
  94. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  95. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  97. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  98. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  100. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  101. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  102. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  104. package/dist/types/src/components/Message/Message.stories.d.ts +2 -2
  105. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  107. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  108. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  110. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  111. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  112. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +42 -13
  114. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  115. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  116. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  118. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  119. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  121. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  122. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Splitter/Splitter.d.ts +19 -17
  124. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  125. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Status/Status.d.ts +3 -4
  127. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  128. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +1 -1
  131. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  132. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  133. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +54 -55
  135. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  136. package/dist/types/src/components/ThemeProvider/index.d.ts +1 -1
  137. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  138. package/dist/types/src/components/Toast/Toast.d.ts +16 -16
  139. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  140. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/Toolbar/Toolbar.d.ts +11 -19
  142. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  143. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/Tooltip/Tooltip.d.ts +10 -10
  145. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  146. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  147. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/index.d.ts +1 -0
  149. package/dist/types/src/components/index.d.ts.map +1 -1
  150. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  151. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  152. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  153. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  154. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  155. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  156. package/dist/types/src/hooks/index.d.ts +1 -0
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  159. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  165. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  166. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  167. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  168. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  169. package/dist/types/src/primitives/Column/Column.d.ts +21 -14
  170. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -1
  171. package/dist/types/src/primitives/Column/Column.stories.d.ts +19 -0
  172. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -1
  173. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  174. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  175. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  176. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  177. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  178. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  179. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  180. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  181. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  182. package/dist/types/src/primitives/Panel/Panel.d.ts +24 -15
  183. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -1
  184. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -1
  185. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  186. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  187. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  188. package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
  189. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  190. package/dist/types/src/translations.d.ts +3 -3
  191. package/dist/types/src/translations.d.ts.map +1 -1
  192. package/dist/types/src/util/usePx.d.ts.map +1 -1
  193. package/dist/types/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +28 -25
  195. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  196. package/src/components/Avatars/Avatar.tsx +1 -2
  197. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  198. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  199. package/src/components/Button/Button.stories.tsx +0 -1
  200. package/src/components/Button/Button.tsx +5 -13
  201. package/src/components/Button/IconButton.stories.tsx +6 -4
  202. package/src/components/Button/IconButton.tsx +3 -4
  203. package/src/components/Button/Toggle.stories.tsx +0 -1
  204. package/src/components/Button/Toggle.tsx +4 -4
  205. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  206. package/src/components/Button/ToggleGroup.tsx +12 -16
  207. package/src/components/Card/Card.stories.tsx +12 -12
  208. package/src/components/Card/Card.tsx +266 -108
  209. package/src/components/Clipboard/CopyButton.tsx +3 -4
  210. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  211. package/src/components/Dialog/AlertDialog.tsx +67 -126
  212. package/src/components/Dialog/Dialog.stories.tsx +64 -9
  213. package/src/components/Dialog/Dialog.tsx +84 -88
  214. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  215. package/src/components/ErrorFallback/ErrorStack.tsx +36 -2
  216. package/src/components/Focus/AUDIT.md +43 -0
  217. package/src/components/Focus/Focus.stories.tsx +230 -0
  218. package/src/components/Focus/Focus.tsx +201 -0
  219. package/src/components/Focus/index.ts +5 -0
  220. package/src/components/Icon/Icon.stories.tsx +43 -13
  221. package/src/components/Icon/Icon.tsx +5 -1
  222. package/src/components/Image/Image.stories.tsx +3 -3
  223. package/src/components/Image/Image.tsx +31 -8
  224. package/src/components/Input/Input.stories.tsx +3 -4
  225. package/src/components/Input/Input.tsx +7 -7
  226. package/src/components/Link/Link.stories.tsx +0 -1
  227. package/src/components/List/List.stories.tsx +0 -1
  228. package/src/components/List/List.tsx +6 -5
  229. package/src/components/List/Tree.stories.tsx +1 -2
  230. package/src/components/List/Tree.tsx +0 -1
  231. package/src/components/List/Treegrid.stories.tsx +26 -27
  232. package/src/components/List/Treegrid.tsx +14 -14
  233. package/src/components/Main/Main.stories.tsx +0 -1
  234. package/src/components/Main/Main.tsx +1 -2
  235. package/src/components/Menu/ContextMenu.stories.tsx +0 -1
  236. package/src/components/Menu/DropdownMenu.stories.tsx +0 -1
  237. package/src/components/Menu/DropdownMenu.tsx +48 -42
  238. package/src/components/Message/Message.stories.tsx +6 -7
  239. package/src/components/Message/Message.tsx +1 -5
  240. package/src/components/Popover/Popover.stories.tsx +4 -5
  241. package/src/components/Popover/Popover.tsx +42 -42
  242. package/src/components/ScrollArea/ScrollArea.stories.tsx +93 -30
  243. package/src/components/ScrollArea/ScrollArea.tsx +39 -23
  244. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +20 -18
  245. package/src/components/ScrollContainer/ScrollContainer.tsx +200 -91
  246. package/src/components/Select/Select.stories.tsx +5 -6
  247. package/src/components/Separator/Separator.tsx +4 -7
  248. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  249. package/src/components/Splitter/Splitter.stories.tsx +29 -29
  250. package/src/components/Splitter/Splitter.tsx +35 -34
  251. package/src/components/Status/Status.stories.tsx +0 -1
  252. package/src/components/Status/Status.tsx +8 -5
  253. package/src/components/Tag/Tag.stories.tsx +0 -1
  254. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +0 -1
  255. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -4
  256. package/src/components/ThemeProvider/index.ts +1 -1
  257. package/src/components/Toast/Toast.stories.tsx +0 -1
  258. package/src/components/Toast/Toast.tsx +16 -31
  259. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  260. package/src/components/Toolbar/Toolbar.tsx +21 -35
  261. package/src/components/Tooltip/Tooltip.stories.tsx +6 -7
  262. package/src/components/Tooltip/Tooltip.tsx +15 -16
  263. package/src/components/index.ts +1 -0
  264. package/src/exemplars/generics.stories.tsx +7 -15
  265. package/src/exemplars/slot.stories.tsx +67 -57
  266. package/src/exemplars/tabster.stories.tsx +1 -1
  267. package/src/exemplars/virtualizer.stories.tsx +4 -4
  268. package/src/hooks/index.ts +1 -0
  269. package/src/hooks/useDensityContext.ts +2 -2
  270. package/src/playground/Custom.stories.tsx +6 -9
  271. package/src/primitives/Column/AUDIT.md +148 -0
  272. package/src/primitives/Column/Column.stories.tsx +122 -19
  273. package/src/primitives/Column/Column.tsx +73 -42
  274. package/src/primitives/Container/Container.stories.tsx +0 -1
  275. package/src/primitives/Container/Container.tsx +5 -8
  276. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  277. package/src/primitives/Flex/Flex.tsx +10 -12
  278. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  279. package/src/primitives/Grid/Grid.tsx +4 -9
  280. package/src/primitives/Panel/Panel.stories.tsx +9 -8
  281. package/src/primitives/Panel/Panel.tsx +64 -63
  282. package/src/testing/Loading.tsx +25 -4
  283. package/src/testing/decorators/withLayout.tsx +6 -6
  284. package/src/testing/decorators/withTheme.tsx +10 -7
  285. package/src/translations.ts +3 -3
  286. package/src/util/usePx.ts +1 -0
  287. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
@@ -4,10 +4,19 @@
4
4
 
5
5
  import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
- import React, { type HTMLAttributes, type PropsWithChildren, createContext, forwardRef, useContext } from 'react';
8
-
9
- import { composableProps, mx } from '@dxos/ui-theme';
10
- import { type Density, type SlottableProps } from '@dxos/ui-types';
7
+ import DOMPurify from 'dompurify';
8
+ import React, {
9
+ CSSProperties,
10
+ MouseEventHandler,
11
+ type PropsWithChildren,
12
+ createContext,
13
+ forwardRef,
14
+ useContext,
15
+ useMemo,
16
+ } from 'react';
17
+
18
+ import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
19
+ import { type Density } from '@dxos/ui-types';
11
20
 
12
21
  import { useThemeContext } from '../../hooks';
13
22
  import { Column } from '../../primitives';
@@ -15,12 +24,21 @@ import { type ThemedClassName } from '../../util';
15
24
  import { Button } from '../Button';
16
25
  import { Icon, type IconProps } from '../Icon';
17
26
  import { Image } from '../Image';
18
- import { Toolbar, type ToolbarMenuItem, type ToolbarMenuProps, type ToolbarRootProps } from '../Toolbar';
27
+ import {
28
+ Toolbar,
29
+ ToolbarCloseIconButtonProps,
30
+ ToolbarDragHandleProps,
31
+ type ToolbarMenuItem,
32
+ type ToolbarMenuProps,
33
+ type ToolbarRootProps,
34
+ } from '../Toolbar';
19
35
 
20
36
  //
21
37
  // Context
22
38
  //
23
39
 
40
+ const CARD_NAME = 'Card';
41
+
24
42
  type CardContextValue = {
25
43
  menuItems?: CardMenuItem<any>[];
26
44
  };
@@ -32,17 +50,24 @@ const CardContext = createContext<CardContextValue>({});
32
50
  // Root
33
51
  //
34
52
 
35
- type CardRootProps = SlottableProps<
36
- HTMLDivElement,
37
- {
38
- id?: string;
39
- border?: boolean;
40
- fullWidth?: boolean;
41
- }
42
- >;
53
+ const CARD_ROOT_NAME = 'Card.Root';
43
54
 
44
- const CardRoot = forwardRef<HTMLDivElement, CardRootProps>(
45
- ({ children, id, asChild, role, border = true, fullWidth, ...props }, forwardedRef) => {
55
+ type CardRootOwnProps = {
56
+ id?: string;
57
+ border?: boolean;
58
+ fullWidth?: boolean;
59
+ density?: Density;
60
+ style?: CSSProperties;
61
+ tabIndex?: number;
62
+ onClick?: MouseEventHandler<HTMLDivElement>;
63
+ 'data-selected'?: boolean;
64
+ 'data-testid'?: string;
65
+ };
66
+
67
+ type CardRootProps = CardRootOwnProps;
68
+
69
+ const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
70
+ ({ children, id, asChild, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
46
71
  const { className, ...rest } = composableProps(props);
47
72
  const Comp = asChild ? Slot : Primitive.div;
48
73
  const { tx } = useThemeContext();
@@ -55,131 +80,226 @@ const CardRoot = forwardRef<HTMLDivElement, CardRootProps>(
55
80
  className={tx('card.root', { border, fullWidth }, className)}
56
81
  ref={forwardedRef}
57
82
  >
58
- <Column.Root gutter='rail'>{children}</Column.Root>
83
+ <Column.Root gutter={density === 'coarse' ? 'lg' : 'md'}>{children}</Column.Root>
59
84
  </Comp>
60
85
  );
61
86
  },
62
87
  );
63
88
 
89
+ CardRoot.displayName = CARD_ROOT_NAME;
90
+
64
91
  //
65
92
  // Toolbar
66
93
  //
67
94
 
68
- type CardToolbarProps = ToolbarRootProps & {
69
- density?: Density;
70
- };
95
+ const CARD_TOOLBAR_NAME = 'Card.Toolbar';
71
96
 
72
- // TODO(burdon): Roncile name with DialogHeader.
73
- const CardToolbar = forwardRef<HTMLDivElement, CardToolbarProps>(
74
- ({ children, classNames, density = 'fine', ...props }, forwardedRef) => {
75
- const { tx } = useThemeContext();
97
+ type CardToolbarProps = ToolbarRootProps;
76
98
 
77
- return (
78
- <Toolbar.Root
79
- {...props}
80
- classNames={[tx('card.toolbar', { coarse: density !== 'fine' }), classNames]}
81
- ref={forwardedRef}
82
- >
83
- {children}
84
- </Toolbar.Root>
85
- );
86
- },
87
- );
99
+ const CardToolbar = composable<HTMLDivElement, CardToolbarProps>(({ children, classNames, ...props }, forwardedRef) => {
100
+ const { tx } = useThemeContext();
101
+
102
+ return (
103
+ <Toolbar.Root {...props} style={iconSize(5)} classNames={[tx('card.toolbar', {}), classNames]} ref={forwardedRef}>
104
+ {children}
105
+ </Toolbar.Root>
106
+ );
107
+ });
108
+
109
+ CardToolbar.displayName = CARD_TOOLBAR_NAME;
110
+
111
+ //
112
+ // DragHandle
113
+ //
114
+
115
+ const CARD_DRAG_HANDLE_NAME = 'Card.DragHandle';
116
+
117
+ type CardDragHandleProps = ToolbarDragHandleProps;
118
+
119
+ const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>((props, forwardedRef) => {
120
+ return (
121
+ <CardIconBlock padding>
122
+ <Toolbar.DragHandle {...props} ref={forwardedRef} />
123
+ </CardIconBlock>
124
+ );
125
+ });
126
+
127
+ CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
128
+
129
+ //
130
+ // CloseIconButton
131
+ //
132
+
133
+ const CARD_CLOSE_ICON_BUTTON_NAME = 'Card.CloseIconButton';
134
+
135
+ type CloseIconButtonProps = ToolbarCloseIconButtonProps;
136
+
137
+ const CloseIconButton = forwardRef<HTMLButtonElement, CloseIconButtonProps>((props, forwardedRef) => {
138
+ return (
139
+ <CardIconBlock padding>
140
+ <Toolbar.CloseIconButton {...props} ref={forwardedRef} />
141
+ </CardIconBlock>
142
+ );
143
+ });
144
+
145
+ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
88
146
 
89
147
  //
90
- // Menu (delegated to Toolbar.Menu)
148
+ // Menu
91
149
  //
92
150
 
151
+ const CARD_MENU_NAME = 'Card.Menu';
152
+
93
153
  type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
154
+
94
155
  type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
95
156
 
96
- const CardMenu = <T extends any | void = void>({ context, items }: CardMenuProps<T>) => {
157
+ const CardMenu = <T extends any | void = void>({ context, items, ...props }: CardMenuProps<T>) => {
97
158
  const { menuItems } = useContext(CardContext) ?? {};
98
159
  const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
99
160
 
100
- return <Toolbar.Menu context={context} items={combinedItems} />;
161
+ return (
162
+ <CardIconBlock padding>
163
+ <Toolbar.Menu {...props} context={context} items={combinedItems} />
164
+ </CardIconBlock>
165
+ );
101
166
  };
102
167
 
168
+ (CardMenu as any).displayName = CARD_MENU_NAME;
169
+
170
+ //
171
+ // Icon
172
+ //
173
+
174
+ const CARD_ICON_NAME = 'Card.Icon';
175
+
176
+ const CardIcon = (props: IconProps) => {
177
+ return (
178
+ <CardIconBlock>
179
+ <Icon {...props} />
180
+ </CardIconBlock>
181
+ );
182
+ };
183
+
184
+ (CardIcon as any).displayName = CARD_ICON_NAME;
185
+
186
+ //
187
+ // IconBlock
188
+ //
189
+
190
+ const CARD_ICON_BLOCK_NAME = 'Card.IconBlock';
191
+
192
+ const CardIconBlock = forwardRef<HTMLDivElement, ThemedClassName<PropsWithChildren<{ padding?: boolean }>>>(
193
+ ({ classNames, children, padding, ...props }, forwardedRef) => {
194
+ const { tx } = useThemeContext();
195
+
196
+ return (
197
+ <div {...props} role='none' className={tx('card.icon-block', { padding }, classNames)} ref={forwardedRef}>
198
+ {children}
199
+ </div>
200
+ );
201
+ },
202
+ );
203
+
204
+ CardIconBlock.displayName = CARD_ICON_BLOCK_NAME;
205
+
103
206
  //
104
207
  // Title
105
208
  //
106
209
 
107
- type CardTitleProps = SlottableProps<HTMLDivElement>;
210
+ const CARD_TITLE_NAME = 'Card.Title';
108
211
 
109
- const CardTitle = forwardRef<HTMLDivElement, CardTitleProps>(({ children, asChild, role, ...props }, forwardedRef) => {
110
- const { className, ...rest } = composableProps(props);
111
- const Comp = asChild ? Slot : Primitive.div;
212
+ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
112
213
  const { tx } = useThemeContext();
214
+ const { className, ...rest } = composableProps(props, { role: 'heading' });
215
+ const Comp = asChild ? Slot : Primitive.div;
113
216
 
114
217
  return (
115
- <Comp {...rest} role={role ?? 'heading'} className={tx('card.title', {}, className)} ref={forwardedRef}>
218
+ <Comp {...rest} className={tx('card.title', {}, className)} ref={forwardedRef}>
116
219
  {children}
117
220
  </Comp>
118
221
  );
119
222
  });
120
223
 
224
+ CardTitle.displayName = CARD_TITLE_NAME;
225
+
121
226
  //
122
227
  // Content
123
228
  //
124
229
 
125
- type CardContentProps = SlottableProps<HTMLDivElement>;
230
+ const CARD_CONTENT_NAME = 'Card.Content';
126
231
 
127
- const CardContent = forwardRef<HTMLDivElement, CardContentProps>(({ children, role, ...props }, forwardedRef) => {
232
+ const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
233
+ const { className, ...rest } = composableProps(props);
234
+ const Comp = asChild ? Slot : Primitive.div;
128
235
  const { tx } = useThemeContext();
129
236
 
130
237
  return (
131
- <div {...props} role={role ?? 'none'} className={tx('card.content', {})} ref={forwardedRef}>
238
+ <Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
132
239
  {children}
133
- </div>
240
+ </Comp>
134
241
  );
135
242
  });
136
243
 
244
+ CardContent.displayName = CARD_CONTENT_NAME;
245
+
137
246
  //
138
247
  // Row
139
248
  //
140
249
 
141
- type CardRowProps = SlottableProps<HTMLDivElement, { icon?: string }>;
250
+ const CARD_ROW_NAME = 'Card.Row';
251
+
252
+ type CardRowProps = { icon?: string; fullWidth?: boolean };
142
253
 
143
- const CardRow = forwardRef<HTMLDivElement, CardRowProps>(({ children, role, icon, ...props }, forwardedRef) => {
254
+ const CardRow = slottable<HTMLDivElement, CardRowProps>(({ children, asChild, icon, ...props }, forwardedRef) => {
144
255
  const { className, ...rest } = composableProps(props);
256
+ const Comp = asChild ? Slot : Primitive.div;
257
+ const { tx } = useThemeContext();
258
+
145
259
  return (
146
- <Column.Row {...rest} role={role ?? 'none'} classNames={className} ref={forwardedRef}>
147
- {(icon && <CardIcon classNames='text-subdued' icon={icon} />) || <div />}
260
+ <Comp {...rest} className={tx('card.row', {}, className)} ref={forwardedRef}>
261
+ {(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
148
262
  {children}
149
- <div />
150
- </Column.Row>
263
+ </Comp>
151
264
  );
152
265
  });
153
266
 
267
+ CardRow.displayName = CARD_ROW_NAME;
268
+
154
269
  //
155
270
  // Section
156
271
  //
157
272
 
158
- type CardSectionProps = SlottableProps<HTMLDivElement>;
273
+ const CARD_SECTION_NAME = 'Card.Section';
159
274
 
160
- const CardSection = forwardRef<HTMLDivElement, CardSectionProps>(
161
- ({ children, asChild, role, ...props }, forwardedRef) => {
162
- const { className, ...rest } = composableProps(props);
163
- const Comp = asChild ? Slot : Primitive.div;
275
+ /**
276
+ * @deprecated Merge with Card.Row fullWidth
277
+ */
278
+ const CardSection = slottable<HTMLDivElement>(({ children, asChild, role, ...props }, forwardedRef) => {
279
+ const { className, ...rest } = composableProps(props);
280
+ const Comp = asChild ? Slot : Primitive.div;
164
281
 
165
- return (
166
- <Comp {...rest} role={role ?? 'none'} className={mx('col-span-full', className)} ref={forwardedRef}>
167
- {children}
168
- </Comp>
169
- );
170
- },
171
- );
282
+ return (
283
+ <Comp {...rest} role={role ?? 'none'} className={mx('col-span-full', className)} ref={forwardedRef}>
284
+ {children}
285
+ </Comp>
286
+ );
287
+ });
288
+
289
+ CardSection.displayName = CARD_SECTION_NAME;
172
290
 
173
291
  //
174
292
  // Heading
175
293
  //
176
294
 
177
- type CardHeadingProps = SlottableProps<HTMLDivElement, { variant?: 'default' | 'subtitle' }>;
295
+ const CARD_HEADING_NAME = 'Card.Heading';
296
+
297
+ type CardHeadingProps = { variant?: 'default' | 'subtitle' };
178
298
 
179
299
  /**
180
300
  * @deprecated Use typography.
181
301
  */
182
- const CardHeading = forwardRef<HTMLDivElement, CardHeadingProps>(
302
+ const CardHeading = slottable<HTMLDivElement, CardHeadingProps>(
183
303
  ({ children, asChild, role, variant = 'default', ...props }, forwardedRef) => {
184
304
  const { className, ...rest } = composableProps(props);
185
305
  const Comp = asChild ? Slot : Primitive.div;
@@ -198,13 +318,17 @@ const CardHeading = forwardRef<HTMLDivElement, CardHeadingProps>(
198
318
  },
199
319
  );
200
320
 
321
+ CardHeading.displayName = CARD_HEADING_NAME;
322
+
201
323
  //
202
324
  // Text
203
325
  //
204
326
 
205
- type CardTextProps = SlottableProps<HTMLDivElement, { truncate?: boolean; variant?: 'default' | 'description' }>;
327
+ const CARD_TEXT_NAME = 'Card.Text';
206
328
 
207
- const CardText = forwardRef<HTMLDivElement, CardTextProps>(
329
+ type CardTextProps = { truncate?: boolean; variant?: 'default' | 'description' };
330
+
331
+ const CardText = slottable<HTMLDivElement, CardTextProps>(
208
332
  ({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
209
333
  const { className, ...rest } = composableProps(props);
210
334
  const Comp = asChild ? Slot : Primitive.div;
@@ -218,24 +342,70 @@ const CardText = forwardRef<HTMLDivElement, CardTextProps>(
218
342
  },
219
343
  );
220
344
 
345
+ CardText.displayName = CARD_TEXT_NAME;
346
+
347
+ //
348
+ // Html
349
+ //
350
+
351
+ const CARD_HTML_NAME = 'Card.Html';
352
+
353
+ type CardHtmlProps = { html: string; variant?: 'default' | 'description' };
354
+
355
+ /**
356
+ * Renders sanitized HTML content inside a card text slot.
357
+ * Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
358
+ */
359
+ const CardHtml = ({ html, variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) => {
360
+ const { tx } = useThemeContext();
361
+ const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
362
+
363
+ return (
364
+ <div
365
+ {...props}
366
+ role='none'
367
+ className={tx('card.text', { variant })}
368
+ // eslint-disable-next-line react/no-danger
369
+ dangerouslySetInnerHTML={{ __html: sanitized }}
370
+ />
371
+ );
372
+ };
373
+
374
+ (CardHtml as any).displayName = CARD_HTML_NAME;
375
+
221
376
  //
222
377
  // Poster
223
378
  //
224
379
 
380
+ const CARD_POSTER_NAME = 'Card.Poster';
381
+
225
382
  type CardPosterProps = ThemedClassName<
226
383
  {
227
384
  alt: string;
228
385
  aspect?: 'video' | 'auto';
386
+ /**
387
+ * How the image fills the poster box. `'contain'` (default) preserves
388
+ * aspect ratio and may letterbox; `'cover'` fills the box edge-to-edge,
389
+ * cropping as needed. Forwarded to the underlying `Image`'s
390
+ * `object-fit`.
391
+ */
392
+ fit?: 'contain' | 'cover';
229
393
  } & Partial<{ image: string; icon: string }>
230
394
  >;
231
395
 
232
396
  const CardPoster = (props: CardPosterProps) => {
233
397
  const { tx } = useThemeContext();
234
398
  const aspect = props.aspect === 'auto' ? 'aspect-auto' : 'aspect-video';
399
+
235
400
  if (props.image) {
236
401
  return (
237
- <div role='none' className='col-span-full mb-1'>
238
- <Image classNames={[tx('card.poster', {}), aspect, props.classNames]} src={props.image} alt={props.alt} />
402
+ <div role='none' className='col-span-full'>
403
+ <Image
404
+ classNames={[tx('card.poster', {}), aspect, props.classNames]}
405
+ src={props.image}
406
+ alt={props.alt}
407
+ fit={props.fit}
408
+ />
239
409
  </div>
240
410
  );
241
411
  }
@@ -249,27 +419,35 @@ const CardPoster = (props: CardPosterProps) => {
249
419
  }
250
420
  };
251
421
 
422
+ (CardPoster as any).displayName = CARD_POSTER_NAME;
423
+
252
424
  //
253
425
  // Action
254
426
  //
255
427
 
428
+ const CARD_ACTION_NAME = 'Card.Action';
429
+
256
430
  type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
257
431
 
258
432
  const CardAction = ({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) => {
259
433
  const { tx } = useThemeContext();
260
434
  return (
261
435
  <Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
262
- {icon ? <CardIcon classNames='text-subdued' icon={icon} /> : <div />}
436
+ {icon ? <CardIcon classNames='text-subdued' icon={icon} size={4} /> : <div />}
263
437
  <span className={tx('card.action-label', {}, !actionIcon ? 'col-span-2' : undefined)}>{label}</span>
264
- {actionIcon && <CardIcon icon={actionIcon} />}
438
+ {actionIcon && <CardIcon icon={actionIcon} size={4} />}
265
439
  </Button>
266
440
  );
267
441
  };
268
442
 
443
+ (CardAction as any).displayName = CARD_ACTION_NAME;
444
+
269
445
  //
270
446
  // Link
271
447
  //
272
448
 
449
+ const CARD_LINK_NAME = 'Card.Link';
450
+
273
451
  type CardLinkProps = { label: string; href: string };
274
452
 
275
453
  const CardLink = ({ label, href }: CardLinkProps) => {
@@ -283,35 +461,7 @@ const CardLink = ({ label, href }: CardLinkProps) => {
283
461
  );
284
462
  };
285
463
 
286
- //
287
- // Icon
288
- //
289
-
290
- const CardIcon = ({ toolbar, ...props }: IconProps & { toolbar?: boolean }) => {
291
- return (
292
- <CardIconBlock>
293
- <Icon {...props} size={toolbar ? 5 : 4} />
294
- </CardIconBlock>
295
- );
296
- };
297
-
298
- //
299
- // IconBlock
300
- //
301
-
302
- const CardIconBlock = ({
303
- classNames,
304
- children,
305
- role,
306
- ...props
307
- }: ThemedClassName<PropsWithChildren<HTMLAttributes<HTMLDivElement>>>) => {
308
- const { tx } = useThemeContext();
309
- return (
310
- <div {...props} role={role ?? 'none'} className={tx('card.icon-block', {}, classNames)}>
311
- {children}
312
- </div>
313
- );
314
- };
464
+ (CardLink as any).displayName = CARD_LINK_NAME;
315
465
 
316
466
  //
317
467
  // Card
@@ -324,14 +474,14 @@ export const Card = {
324
474
  Toolbar: CardToolbar,
325
475
  ToolbarIconButton: Toolbar.IconButton,
326
476
  ToolbarSeparator: Toolbar.Separator,
327
- DragHandle: forwardRef<HTMLButtonElement, Parameters<typeof Toolbar.DragHandle>[0]>((props, ref) => (
328
- <Toolbar.DragHandle testId='card-drag-handle' {...props} ref={ref} />
329
- )),
330
- CloseIconButton: Toolbar.CloseIconButton,
331
- Title: CardTitle,
477
+
478
+ // Toolbar blocks
479
+ IconBlock: CardIconBlock,
480
+ DragHandle: CardDragHandle,
481
+ CloseIconButton: CloseIconButton,
332
482
  Menu: CardMenu,
333
483
  Icon: CardIcon,
334
- IconBlock: CardIconBlock,
484
+ Title: CardTitle,
335
485
 
336
486
  // Content
337
487
  Content: CardContent,
@@ -339,9 +489,17 @@ export const Card = {
339
489
  Section: CardSection,
340
490
  Heading: CardHeading,
341
491
  Text: CardText,
492
+ Html: CardHtml,
342
493
  Poster: CardPoster,
343
494
  Action: CardAction,
344
495
  Link: CardLink,
345
496
  };
346
497
 
347
- export type { CardContextValue, CardRootProps, CardToolbarProps, CardMenuProps };
498
+ export type {
499
+ CardContextValue,
500
+ CardRootProps,
501
+ CardToolbarProps,
502
+ CardDragHandleProps,
503
+ CloseIconButtonProps,
504
+ CardMenuProps,
505
+ };
@@ -10,7 +10,6 @@ import { Button, type ButtonProps, IconButton } from '../Button';
10
10
  import { Icon, type IconProps } from '../Icon';
11
11
  import { useTranslation } from '../ThemeProvider';
12
12
  import { type TooltipScopedProps, useTooltipContext } from '../Tooltip';
13
-
14
13
  import { useClipboard } from './ClipboardProvider';
15
14
 
16
15
  export type CopyButtonProps = ButtonProps &
@@ -32,11 +31,11 @@ export const CopyButton = ({ classNames, value, size = 5, ...props }: CopyButton
32
31
  data-testid='copy-invitation'
33
32
  >
34
33
  <div role='none' className={mx('flex gap-1 items-center', isCopied && inactiveLabelStyles)}>
35
- <span className='px-1'>{t('copy label')}</span>
34
+ <span className='px-1'>{t('copy.label')}</span>
36
35
  <Icon icon='ph--copy--regular' size={size} />
37
36
  </div>
38
37
  <div role='none' className={mx('flex gap-1 items-center', !isCopied && inactiveLabelStyles)}>
39
- <span className='px-1'>{t('copy success label')}</span>
38
+ <span className='px-1'>{t('copy-success.label')}</span>
40
39
  <Icon icon='ph--check--regular' size={size} />
41
40
  </div>
42
41
  </Button>
@@ -58,7 +57,7 @@ export const CopyButtonIconOnly = ({
58
57
  const { t } = useTranslation(osTranslations);
59
58
  const { textValue, setTextValue } = useClipboard();
60
59
  const isCopied = textValue === value;
61
- const label = isCopied ? t('copy success label') : (props.label ?? t('copy label'));
60
+ const label = isCopied ? t('copy-success.label') : (props.label ?? t('copy.label'));
62
61
  const { onOpen } = useTooltipContext('CopyButton', __scopeTooltip);
63
62
  return (
64
63
  <IconButton
@@ -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 { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
11
  import { Button } from '../Button';
12
-
13
12
  import { AlertDialog } from './AlertDialog';
14
13
 
15
- type StoryProps = Partial<{
14
+ type DefaultStoryProps = Partial<{
16
15
  title: string;
17
16
  description: string;
18
17
  openTrigger: string;
@@ -20,7 +19,7 @@ type StoryProps = Partial<{
20
19
  actionTrigger: string;
21
20
  }>;
22
21
 
23
- const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }: StoryProps) => {
22
+ const DefaultStory = ({ title, description, openTrigger, cancelTrigger, actionTrigger }: DefaultStoryProps) => {
24
23
  return (
25
24
  <AlertDialog.Root defaultOpen>
26
25
  <AlertDialog.Trigger asChild>
@@ -60,8 +59,8 @@ type Story = StoryObj<typeof meta>;
60
59
 
61
60
  export const Default: Story = {
62
61
  args: {
63
- title: faker.lorem.sentence(3),
64
- description: faker.lorem.paragraph(1),
62
+ title: random.lorem.sentence(3),
63
+ description: random.lorem.paragraph(1),
65
64
  openTrigger: 'Open AlertDialog',
66
65
  cancelTrigger: 'Cancel',
67
66
  actionTrigger: 'Action',