@dxos/react-ui 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0

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 (383) hide show
  1. package/dist/lib/browser/chunk-KRSEIVRM.mjs +776 -0
  2. package/dist/lib/browser/chunk-KRSEIVRM.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4157 -67
  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 +74 -63
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-ENYC4TYH.mjs +778 -0
  9. package/dist/lib/node-esm/chunk-ENYC4TYH.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +4157 -67
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +74 -63
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  18. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  20. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Button/Button.d.ts +3 -3
  22. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  23. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/IconButton.d.ts +2 -1
  25. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  26. package/dist/types/src/components/Button/IconButton.stories.d.ts +3 -0
  27. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  29. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  30. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Button/ToggleGroup.d.ts +10 -10
  32. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +4 -4
  34. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/Card/Card.d.ts +150 -0
  36. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  37. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  38. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Card/index.d.ts +2 -0
  40. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  42. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  43. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  44. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  45. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  46. package/dist/types/src/components/Dialog/AlertDialog.d.ts +41 -19
  47. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  48. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/Dialog/Dialog.d.ts +56 -21
  50. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  51. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +10 -10
  52. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  54. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  55. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  56. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  57. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  58. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  60. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  61. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  62. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  63. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  64. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  65. package/dist/types/src/components/Focus/Focus.d.ts +44 -0
  66. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  67. package/dist/types/src/components/Focus/Focus.stories.d.ts +9 -0
  68. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/Focus/index.d.ts +2 -0
  70. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  71. package/dist/types/src/components/Icon/Icon.d.ts +4 -1
  72. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  73. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  74. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/Image/Image.d.ts +14 -0
  76. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  77. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  78. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/Image/index.d.ts +2 -0
  80. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  81. package/dist/types/src/components/Input/Input.d.ts +7 -7
  82. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  83. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  84. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/List/List.d.ts +10 -4
  87. package/dist/types/src/components/List/List.d.ts.map +1 -1
  88. package/dist/types/src/components/List/List.stories.d.ts +8 -2
  89. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  91. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/List/Treegrid.d.ts +9 -9
  93. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  94. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Main/Main.d.ts +9 -10
  96. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  97. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  98. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  100. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  101. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  102. package/dist/types/src/components/Menu/DropdownMenu.d.ts +113 -0
  103. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  104. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +28 -0
  105. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  107. package/dist/types/src/components/Message/Message.d.ts +1 -1
  108. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  109. package/dist/types/src/components/Message/Message.stories.d.ts +5 -6
  110. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/Popover/Popover.d.ts +33 -24
  112. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  113. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +32 -24
  115. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  116. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +65 -8
  117. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  118. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +48 -13
  119. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  120. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +10 -5
  121. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/Select/Select.d.ts +9 -9
  123. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  124. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  125. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  127. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  128. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  129. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  130. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  131. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  132. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  133. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Splitter/Splitter.d.ts +42 -0
  135. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  136. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  137. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  138. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  139. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  140. package/dist/types/src/components/Status/Status.d.ts +3 -4
  141. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  142. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  143. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  145. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  146. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  147. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  149. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  150. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  151. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  152. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  153. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  154. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  155. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  156. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  157. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  158. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  159. package/dist/types/src/components/Toolbar/Toolbar.d.ts +43 -17
  160. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  161. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  162. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  163. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  164. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  165. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +10 -5
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/exemplars/generics.stories.d.ts +23 -0
  169. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  170. package/dist/types/src/exemplars/slot.stories.d.ts +15 -0
  171. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  172. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  173. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  174. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  175. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  176. package/dist/types/src/hooks/index.d.ts +1 -0
  177. package/dist/types/src/hooks/index.d.ts.map +1 -1
  178. package/dist/types/src/hooks/useDensityContext.d.ts +2 -2
  179. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  180. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  181. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  182. package/dist/types/src/index.d.ts +2 -1
  183. package/dist/types/src/index.d.ts.map +1 -1
  184. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  185. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  186. package/dist/types/src/primitives/Column/Column.d.ts +51 -0
  187. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  188. package/dist/types/src/primitives/Column/Column.stories.d.ts +25 -0
  189. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  190. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  191. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  192. package/dist/types/src/primitives/Container/Container.d.ts +11 -0
  193. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  194. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  195. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  196. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  197. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  198. package/dist/types/src/primitives/Flex/Flex.d.ts +15 -0
  199. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  200. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  201. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  202. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  203. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  204. package/dist/types/src/primitives/Grid/Grid.d.ts +14 -0
  205. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  206. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  207. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  208. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  209. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  210. package/dist/types/src/primitives/Panel/Panel.d.ts +51 -0
  211. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  212. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  213. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  214. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  215. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  216. package/dist/types/src/primitives/index.d.ts +6 -0
  217. package/dist/types/src/primitives/index.d.ts.map +1 -0
  218. package/dist/types/src/testing/Loading.d.ts +9 -0
  219. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  220. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  221. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  222. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +1 -1
  223. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  224. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  225. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  226. package/dist/types/src/testing/index.d.ts +1 -0
  227. package/dist/types/src/testing/index.d.ts.map +1 -1
  228. package/dist/types/src/translations.d.ts +11 -0
  229. package/dist/types/src/translations.d.ts.map +1 -0
  230. package/dist/types/src/util/index.d.ts +1 -2
  231. package/dist/types/src/util/index.d.ts.map +1 -1
  232. package/dist/types/src/util/usePx.d.ts.map +1 -1
  233. package/dist/types/tsconfig.tsbuildinfo +1 -1
  234. package/package.json +42 -32
  235. package/src/components/Avatars/Avatar.stories.tsx +7 -9
  236. package/src/components/Avatars/Avatar.tsx +7 -15
  237. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -3
  238. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -4
  239. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  240. package/src/components/Button/Button.stories.tsx +3 -4
  241. package/src/components/Button/Button.tsx +12 -26
  242. package/src/components/Button/IconButton.stories.tsx +8 -6
  243. package/src/components/Button/IconButton.tsx +9 -6
  244. package/src/components/Button/Toggle.stories.tsx +2 -3
  245. package/src/components/Button/Toggle.tsx +4 -4
  246. package/src/components/Button/ToggleGroup.stories.tsx +2 -3
  247. package/src/components/Button/ToggleGroup.tsx +12 -16
  248. package/src/components/Card/Card.stories.tsx +151 -0
  249. package/src/components/Card/Card.tsx +492 -0
  250. package/src/components/Card/index.ts +5 -0
  251. package/src/components/Clipboard/CopyButton.tsx +7 -8
  252. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  253. package/src/components/Dialog/AlertDialog.stories.tsx +16 -17
  254. package/src/components/Dialog/AlertDialog.tsx +123 -82
  255. package/src/components/Dialog/Dialog.stories.tsx +138 -28
  256. package/src/components/Dialog/Dialog.tsx +197 -71
  257. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  258. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +45 -0
  259. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  260. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  261. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  262. package/src/components/ErrorFallback/index.ts +9 -0
  263. package/src/components/Focus/AUDIT.md +43 -0
  264. package/src/components/Focus/Focus.stories.tsx +230 -0
  265. package/src/components/Focus/Focus.tsx +201 -0
  266. package/src/components/Focus/index.ts +5 -0
  267. package/src/components/Icon/Icon.stories.tsx +45 -15
  268. package/src/components/Icon/Icon.tsx +7 -3
  269. package/src/components/Image/Image.stories.tsx +86 -0
  270. package/src/components/Image/Image.tsx +223 -0
  271. package/src/components/Image/index.ts +5 -0
  272. package/src/components/Input/Input.stories.tsx +21 -41
  273. package/src/components/Input/Input.tsx +36 -72
  274. package/src/components/Link/Link.stories.tsx +2 -3
  275. package/src/components/Link/Link.tsx +2 -2
  276. package/src/components/List/List.stories.tsx +30 -34
  277. package/src/components/List/List.tsx +17 -21
  278. package/src/components/List/ListDropIndicator.tsx +7 -7
  279. package/src/components/List/Tree.stories.tsx +5 -6
  280. package/src/components/List/Tree.tsx +0 -1
  281. package/src/components/List/TreeDropIndicator.tsx +6 -6
  282. package/src/components/List/Treegrid.stories.tsx +29 -30
  283. package/src/components/List/Treegrid.tsx +23 -28
  284. package/src/components/Main/Main.stories.tsx +41 -24
  285. package/src/components/Main/Main.tsx +139 -83
  286. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -3
  287. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  288. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +2 -3
  289. package/src/components/{Menus → Menu}/DropdownMenu.tsx +119 -109
  290. package/src/components/Message/Message.stories.tsx +27 -13
  291. package/src/components/Message/Message.tsx +43 -34
  292. package/src/components/Popover/Popover.stories.tsx +7 -8
  293. package/src/components/Popover/Popover.tsx +97 -92
  294. package/src/components/ScrollArea/ScrollArea.stories.tsx +223 -34
  295. package/src/components/ScrollArea/ScrollArea.tsx +97 -79
  296. package/src/components/ScrollArea/index.ts +1 -1
  297. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +47 -25
  298. package/src/components/ScrollContainer/ScrollContainer.tsx +225 -109
  299. package/src/components/Select/Select.stories.tsx +7 -8
  300. package/src/components/Select/Select.tsx +11 -27
  301. package/src/components/Separator/Separator.tsx +5 -8
  302. package/src/components/Skeleton/Skeleton.stories.tsx +51 -0
  303. package/src/components/Skeleton/Skeleton.tsx +26 -0
  304. package/src/components/Skeleton/index.ts +5 -0
  305. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  306. package/src/components/Splitter/Splitter.tsx +127 -0
  307. package/src/components/Splitter/index.ts +5 -0
  308. package/src/components/Status/Status.stories.tsx +21 -18
  309. package/src/components/Status/Status.tsx +10 -7
  310. package/src/components/Tag/Tag.stories.tsx +6 -12
  311. package/src/components/Tag/Tag.tsx +3 -8
  312. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +31 -0
  313. package/src/components/ThemeProvider/ThemeProvider.tsx +10 -10
  314. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  315. package/src/components/ThemeProvider/index.ts +3 -3
  316. package/src/components/Toast/Toast.stories.tsx +2 -3
  317. package/src/components/Toast/Toast.tsx +22 -41
  318. package/src/components/Toolbar/Toolbar.stories.tsx +2 -3
  319. package/src/components/Toolbar/Toolbar.tsx +185 -23
  320. package/src/components/Tooltip/Tooltip.stories.tsx +20 -19
  321. package/src/components/Tooltip/Tooltip.tsx +40 -38
  322. package/src/components/index.ts +11 -6
  323. package/src/exemplars/generics.stories.tsx +41 -0
  324. package/src/exemplars/slot.stories.tsx +117 -0
  325. package/src/exemplars/tabster.stories.tsx +127 -0
  326. package/src/exemplars/virtualizer.stories.tsx +137 -0
  327. package/src/hooks/index.ts +1 -0
  328. package/src/hooks/useDensityContext.ts +3 -3
  329. package/src/hooks/useElevationContext.ts +1 -1
  330. package/src/index.ts +2 -1
  331. package/src/playground/Controls.stories.tsx +3 -10
  332. package/src/playground/Custom.stories.tsx +11 -21
  333. package/src/playground/Typography.stories.tsx +3 -3
  334. package/src/primitives/Column/AUDIT.md +354 -0
  335. package/src/primitives/Column/Column.stories.tsx +182 -0
  336. package/src/primitives/Column/Column.tsx +169 -0
  337. package/src/primitives/Column/index.ts +5 -0
  338. package/src/primitives/Container/Container.stories.tsx +29 -0
  339. package/src/primitives/Container/Container.tsx +19 -0
  340. package/src/primitives/Container/index.ts +5 -0
  341. package/src/primitives/Flex/Flex.stories.tsx +57 -0
  342. package/src/primitives/Flex/Flex.tsx +27 -0
  343. package/src/primitives/Flex/index.ts +5 -0
  344. package/src/primitives/Grid/Grid.stories.tsx +56 -0
  345. package/src/primitives/Grid/Grid.tsx +30 -0
  346. package/src/primitives/Grid/index.ts +5 -0
  347. package/src/primitives/Panel/Panel.stories.tsx +68 -0
  348. package/src/primitives/Panel/Panel.tsx +120 -0
  349. package/src/primitives/Panel/index.ts +5 -0
  350. package/src/primitives/index.ts +9 -0
  351. package/src/testing/Loading.tsx +27 -0
  352. package/src/testing/decorators/withLayout.tsx +39 -18
  353. package/src/testing/decorators/withLayoutVariants.tsx +20 -23
  354. package/src/testing/decorators/withTheme.tsx +26 -20
  355. package/src/testing/index.ts +2 -0
  356. package/src/translations.ts +19 -0
  357. package/src/util/index.ts +2 -2
  358. package/src/util/usePx.ts +1 -0
  359. package/dist/lib/browser/chunk-53MI2QCM.mjs +0 -4707
  360. package/dist/lib/browser/chunk-53MI2QCM.mjs.map +0 -7
  361. package/dist/lib/node-esm/chunk-ID67AFFF.mjs +0 -4709
  362. package/dist/lib/node-esm/chunk-ID67AFFF.mjs.map +0 -7
  363. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  364. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  365. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  366. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  367. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  368. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  369. package/dist/types/src/components/Menus/DropdownMenu.d.ts +0 -113
  370. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  371. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  372. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  373. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  374. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  375. package/dist/types/src/util/domino.d.ts +0 -18
  376. package/dist/types/src/util/domino.d.ts.map +0 -1
  377. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  378. package/src/components/AnchoredOverflow/index.ts +0 -5
  379. package/src/util/ThemedClassName.ts +0 -7
  380. package/src/util/domino.ts +0 -53
  381. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  382. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  383. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -4,13 +4,12 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { mx } from '@dxos/react-ui-theme';
7
+ import { mx, osTranslations } from '@dxos/ui-theme';
8
8
 
9
9
  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 &
@@ -18,10 +17,10 @@ export type CopyButtonProps = ButtonProps &
18
17
  value: string;
19
18
  };
20
19
 
21
- const inactiveLabelStyles = 'invisible bs-px -mbe-px overflow-hidden';
20
+ const inactiveLabelStyles = 'invisible h-px -mb-px overflow-hidden';
22
21
 
23
22
  export const CopyButton = ({ classNames, value, size = 5, ...props }: CopyButtonProps) => {
24
- const { t } = useTranslation('os');
23
+ const { t } = useTranslation(osTranslations);
25
24
  const { textValue, setTextValue } = useClipboard();
26
25
  const isCopied = textValue === value;
27
26
  return (
@@ -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='pli-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='pli-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>
@@ -55,10 +54,10 @@ export const CopyButtonIconOnly = ({
55
54
  variant,
56
55
  ...props
57
56
  }: TooltipScopedProps<CopyButtonIconOnlyProps>) => {
58
- const { t } = useTranslation('os');
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
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { type PropsWithChildren, createContext } from 'react';
6
6
 
7
- import { type Density } from '@dxos/react-ui-types';
7
+ import { type Density } from '@dxos/ui-types';
8
8
 
9
9
  export interface DensityContextValue {
10
10
  density?: Density;
@@ -5,22 +5,21 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
+ import { random } from '@dxos/random';
9
+
8
10
  import { withTheme } from '../../testing';
9
11
  import { Button } from '../Button';
10
- import { Toolbar } from '../Toolbar';
11
-
12
12
  import { AlertDialog } from './AlertDialog';
13
13
 
14
- type StoryProps = Partial<{
14
+ type DefaultStoryProps = Partial<{
15
15
  title: string;
16
16
  description: string;
17
- body: string;
18
17
  openTrigger: string;
19
18
  cancelTrigger: string;
20
19
  actionTrigger: string;
21
20
  }>;
22
21
 
23
- const DefaultStory = ({ title, description, body, 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>
@@ -28,18 +27,19 @@ const DefaultStory = ({ title, description, body, openTrigger, cancelTrigger, ac
28
27
  </AlertDialog.Trigger>
29
28
  <AlertDialog.Overlay>
30
29
  <AlertDialog.Content>
31
- <AlertDialog.Title>{title}</AlertDialog.Title>
32
- <AlertDialog.Description>{description}</AlertDialog.Description>
33
- <p className='mbs-2 mbe-8'>{body}</p>
34
- <Toolbar.Root>
30
+ <AlertDialog.Body>
31
+ <AlertDialog.Title>{title}</AlertDialog.Title>
32
+ <AlertDialog.Description>{description}</AlertDialog.Description>
33
+ </AlertDialog.Body>
34
+ <AlertDialog.ActionBar>
35
35
  <div className='grow' />
36
36
  <AlertDialog.Cancel asChild>
37
- <Toolbar.Button>{cancelTrigger}</Toolbar.Button>
37
+ <Button>{cancelTrigger}</Button>
38
38
  </AlertDialog.Cancel>
39
39
  <AlertDialog.Action asChild>
40
- <Toolbar.Button variant='primary'>{actionTrigger}</Toolbar.Button>
40
+ <Button variant='primary'>{actionTrigger}</Button>
41
41
  </AlertDialog.Action>
42
- </Toolbar.Root>
42
+ </AlertDialog.ActionBar>
43
43
  </AlertDialog.Content>
44
44
  </AlertDialog.Overlay>
45
45
  </AlertDialog.Root>
@@ -47,10 +47,10 @@ const DefaultStory = ({ title, description, body, openTrigger, cancelTrigger, ac
47
47
  };
48
48
 
49
49
  const meta = {
50
- title: 'ui/react-ui-core/AlertDialog',
50
+ title: 'ui/react-ui-core/components/AlertDialog',
51
51
  component: AlertDialog.Root as any,
52
52
  render: DefaultStory as any,
53
- decorators: [withTheme],
53
+ decorators: [withTheme()],
54
54
  } satisfies Meta<typeof DefaultStory>;
55
55
 
56
56
  export default meta;
@@ -59,10 +59,9 @@ type Story = StoryObj<typeof meta>;
59
59
 
60
60
  export const Default: Story = {
61
61
  args: {
62
- title: 'AlertDialog title',
62
+ title: random.lorem.sentence(3),
63
+ description: random.lorem.paragraph(1),
63
64
  openTrigger: 'Open AlertDialog',
64
- description: 'AlertDialog description',
65
- body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
66
65
  cancelTrigger: 'Cancel',
67
66
  actionTrigger: 'Action',
68
67
  },
@@ -2,102 +2,89 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- AlertDialogAction as AlertDialogActionPrimitive,
7
- type AlertDialogActionProps as AlertDialogActionPrimitiveProps,
8
- AlertDialogCancel as AlertDialogCancelPrimitive,
9
- type AlertDialogCancelProps as AlertDialogCancelPrimitiveProps,
10
- AlertDialogContent as AlertDialogContentPrimitive,
11
- type AlertDialogContentProps as AlertDialogContentPrimitiveProps,
12
- AlertDialogDescription as AlertDialogDescriptionPrimitive,
13
- type AlertDialogDescriptionProps as AlertDialogDescriptionPrimitiveProps,
14
- AlertDialogOverlay as AlertDialogOverlayPrimitive,
15
- type AlertDialogOverlayProps as AlertDialogOverlayPrimitiveProps,
16
- AlertDialogPortal as AlertDialogPortalPrimitive,
17
- type AlertDialogPortalProps as AlertDialogPortalPrimitiveProps,
18
- Root as AlertDialogRootPrimitive,
19
- type AlertDialogProps as AlertDialogRootPrimitiveProps,
20
- AlertDialogTitle as AlertDialogTitlePrimitive,
21
- type AlertDialogTitleProps as AlertDialogTitlePrimitiveProps,
22
- AlertDialogTrigger as AlertDialogTriggerPrimitive,
23
- type AlertDialogTriggerProps as AlertDialogTriggerPrimitiveProps,
24
- } from '@radix-ui/react-alert-dialog';
5
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
25
6
  import { createContext } from '@radix-ui/react-context';
26
7
  import React, { type ForwardRefExoticComponent, type FunctionComponent, forwardRef } from 'react';
27
8
 
9
+ import { type DialogSize } from '@dxos/ui-theme';
10
+
28
11
  import { useThemeContext } from '../../hooks';
12
+ import { Column } from '../../primitives';
29
13
  import { type ThemedClassName } from '../../util';
30
14
  import { ElevationProvider } from '../ElevationProvider';
15
+ import {
16
+ Dialog,
17
+ type DialogHeaderProps,
18
+ type DialogBodyProps,
19
+ type DialogActionBarProps,
20
+ type DialogCloseIconButtonProps,
21
+ } from './Dialog';
22
+
23
+ //
24
+ // Root
25
+ //
31
26
 
32
- type AlertDialogRootProps = AlertDialogRootPrimitiveProps;
27
+ type AlertDialogRootProps = AlertDialogPrimitive.AlertDialogProps;
33
28
 
34
29
  const AlertDialogRoot: FunctionComponent<AlertDialogRootProps> = (props) => (
35
30
  <ElevationProvider elevation='dialog'>
36
- <AlertDialogRootPrimitive {...props} />
31
+ <AlertDialogPrimitive.Root {...props} />
37
32
  </ElevationProvider>
38
33
  );
39
34
 
40
- type AlertDialogTriggerProps = AlertDialogTriggerPrimitiveProps;
35
+ //
36
+ // Trigger
37
+ //
41
38
 
42
- const AlertDialogTrigger: FunctionComponent<AlertDialogTriggerProps> = AlertDialogTriggerPrimitive;
39
+ type AlertDialogTriggerProps = AlertDialogPrimitive.AlertDialogTriggerProps;
43
40
 
44
- type AlertDialogPortalProps = AlertDialogPortalPrimitiveProps;
41
+ const AlertDialogTrigger: FunctionComponent<AlertDialogTriggerProps> = AlertDialogPrimitive.Trigger;
45
42
 
46
- const AlertDialogPortal: FunctionComponent<AlertDialogPortalProps> = AlertDialogPortalPrimitive;
43
+ //
44
+ // Portal
45
+ //
47
46
 
48
- type AlertDialogCancelProps = AlertDialogCancelPrimitiveProps;
47
+ type AlertDialogPortalProps = AlertDialogPrimitive.AlertDialogPortalProps;
49
48
 
50
- const AlertDialogCancel: FunctionComponent<AlertDialogCancelProps> = AlertDialogCancelPrimitive;
49
+ const AlertDialogPortal: FunctionComponent<AlertDialogPortalProps> = AlertDialogPrimitive.Portal;
51
50
 
52
- type AlertDialogActionProps = AlertDialogActionPrimitiveProps;
51
+ //
52
+ // Cancel
53
+ //
53
54
 
54
- const AlertDialogAction: FunctionComponent<AlertDialogActionProps> = AlertDialogActionPrimitive;
55
+ type AlertDialogCancelProps = AlertDialogPrimitive.AlertDialogCancelProps;
55
56
 
56
- type AlertDialogTitleProps = ThemedClassName<AlertDialogTitlePrimitiveProps> & { srOnly?: boolean };
57
+ const AlertDialogCancel: FunctionComponent<AlertDialogCancelProps> = AlertDialogPrimitive.Cancel;
57
58
 
58
- const AlertDialogTitle: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
59
- HTMLHeadingElement,
60
- AlertDialogTitleProps
61
- >(({ classNames, srOnly, ...props }, forwardedRef) => {
62
- const { tx } = useThemeContext();
63
- return (
64
- <AlertDialogTitlePrimitive
65
- {...props}
66
- className={tx('dialog.title', 'dialog--alert__title', { srOnly }, classNames)}
67
- ref={forwardedRef}
68
- />
69
- );
70
- });
59
+ //
60
+ // Action
61
+ //
71
62
 
72
- type AlertDialogDescriptionProps = ThemedClassName<AlertDialogDescriptionPrimitiveProps> & { srOnly?: boolean };
63
+ type AlertDialogActionProps = AlertDialogPrimitive.AlertDialogActionProps;
73
64
 
74
- const AlertDialogDescription: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
75
- HTMLParagraphElement,
76
- AlertDialogDescriptionProps
77
- >(({ classNames, srOnly, ...props }, forwardedRef) => {
78
- const { tx } = useThemeContext();
79
- return (
80
- <AlertDialogDescriptionPrimitive
81
- {...props}
82
- className={tx('dialog.description', 'dialog--alert__description', { srOnly }, classNames)}
83
- ref={forwardedRef}
84
- />
85
- );
86
- });
65
+ const AlertDialogAction: FunctionComponent<AlertDialogActionProps> = AlertDialogPrimitive.Action;
66
+
67
+ //
68
+ // Context
69
+ //
87
70
 
88
71
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
72
+
89
73
  const ALERT_DIALOG_OVERLAY_NAME = 'AlertDialogOverlay';
90
74
  const ALERT_DIALOG_CONTENT_NAME = 'AlertDialogContent';
75
+
91
76
  const [OverlayLayoutProvider, useOverlayLayoutContext] = createContext<OverlayLayoutContextValue>(
92
77
  ALERT_DIALOG_OVERLAY_NAME,
93
- {
94
- inOverlayLayout: false,
95
- },
78
+ { inOverlayLayout: false },
96
79
  );
97
80
 
98
- type AlertDialogOverlayProps = ThemedClassName<AlertDialogOverlayPrimitiveProps> & {
99
- blockAlign?: 'center' | 'start' | 'end';
100
- };
81
+ //
82
+ // Overlay
83
+ //
84
+
85
+ type AlertDialogOverlayProps = ThemedClassName<
86
+ AlertDialogPrimitive.AlertDialogOverlayProps & { blockAlign?: 'center' | 'start' | 'end' }
87
+ >;
101
88
 
102
89
  const AlertDialogOverlay: ForwardRefExoticComponent<AlertDialogOverlayProps> = forwardRef<
103
90
  HTMLDivElement,
@@ -105,56 +92,105 @@ const AlertDialogOverlay: ForwardRefExoticComponent<AlertDialogOverlayProps> = f
105
92
  >(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
106
93
  const { tx } = useThemeContext();
107
94
  return (
108
- <AlertDialogOverlayPrimitive
95
+ <AlertDialogPrimitive.Overlay
109
96
  {...props}
110
- className={tx(
111
- 'dialog.overlay',
112
- 'dialog--alert__overlay',
113
- {},
114
- classNames,
115
- 'data-[block-align=start]:justify-center',
116
- 'data-[block-align=start]:items-start',
117
- 'data-[block-align=center]:place-content-center',
118
- )}
119
- ref={forwardedRef}
120
97
  data-block-align={blockAlign}
98
+ className={tx('dialog.overlay', {}, classNames)}
99
+ ref={forwardedRef}
121
100
  >
122
101
  <OverlayLayoutProvider inOverlayLayout>{children}</OverlayLayoutProvider>
123
- </AlertDialogOverlayPrimitive>
102
+ </AlertDialogPrimitive.Overlay>
124
103
  );
125
104
  });
126
105
 
127
106
  AlertDialogOverlay.displayName = ALERT_DIALOG_OVERLAY_NAME;
128
107
 
129
- type AlertDialogContentProps = ThemedClassName<AlertDialogContentPrimitiveProps>;
108
+ //
109
+ // Content
110
+ //
111
+
112
+ type AlertDialogContentProps = ThemedClassName<AlertDialogPrimitive.AlertDialogContentProps> & { size?: DialogSize };
130
113
 
131
114
  const AlertDialogContent: ForwardRefExoticComponent<AlertDialogContentProps> = forwardRef<
132
115
  HTMLDivElement,
133
116
  AlertDialogContentProps
134
- >(({ classNames, children, ...props }, forwardedRef) => {
117
+ >(({ classNames, children, size = 'md', ...props }, forwardedRef) => {
135
118
  const { tx } = useThemeContext();
136
119
  const { inOverlayLayout } = useOverlayLayoutContext(ALERT_DIALOG_CONTENT_NAME);
137
120
  return (
138
- <AlertDialogContentPrimitive
121
+ <AlertDialogPrimitive.Content
139
122
  {...props}
140
- className={tx('dialog.content', 'dialog--alert', { inOverlayLayout }, classNames)}
123
+ className={tx('dialog.content', { inOverlayLayout, size }, classNames)}
124
+ // NOTE: Radix warning unless set to undefined.
125
+ // https://www.radix-ui.com/primitives/docs/components/dialog#description
126
+ aria-describedby={undefined}
141
127
  ref={forwardedRef}
142
128
  >
143
- {children}
144
- </AlertDialogContentPrimitive>
129
+ <Column.Root classNames='dx-expander' gutter='sm'>
130
+ {children}
131
+ </Column.Root>
132
+ </AlertDialogPrimitive.Content>
145
133
  );
146
134
  });
147
135
 
148
136
  AlertDialogContent.displayName = ALERT_DIALOG_CONTENT_NAME;
149
137
 
138
+ //
139
+ // Title
140
+ //
141
+
142
+ type AlertDialogTitleProps = ThemedClassName<AlertDialogPrimitive.AlertDialogTitleProps> & { srOnly?: boolean };
143
+
144
+ const AlertDialogTitle: ForwardRefExoticComponent<AlertDialogTitleProps> = forwardRef<
145
+ HTMLHeadingElement,
146
+ AlertDialogTitleProps
147
+ >(({ classNames, srOnly, ...props }, forwardedRef) => {
148
+ const { tx } = useThemeContext();
149
+ return (
150
+ <AlertDialogPrimitive.Title {...props} className={tx('dialog.title', { srOnly }, classNames)} ref={forwardedRef} />
151
+ );
152
+ });
153
+
154
+ //
155
+ // Description
156
+ //
157
+
158
+ type AlertDialogDescriptionProps = ThemedClassName<AlertDialogPrimitive.AlertDialogDescriptionProps> & {
159
+ srOnly?: boolean;
160
+ };
161
+
162
+ const AlertDialogDescription: ForwardRefExoticComponent<AlertDialogDescriptionProps> = forwardRef<
163
+ HTMLParagraphElement,
164
+ AlertDialogDescriptionProps
165
+ >(({ classNames, srOnly, ...props }, forwardedRef) => {
166
+ const { tx } = useThemeContext();
167
+ return (
168
+ <AlertDialogPrimitive.Description
169
+ {...props}
170
+ className={tx('dialog.description', { srOnly }, classNames)}
171
+ ref={forwardedRef}
172
+ />
173
+ );
174
+ });
175
+
176
+ //
177
+ // AlertDialog
178
+ //
179
+
150
180
  export const AlertDialog = {
151
181
  Root: AlertDialogRoot,
152
182
  Trigger: AlertDialogTrigger,
153
183
  Portal: AlertDialogPortal,
154
184
  Overlay: AlertDialogOverlay,
155
185
  Content: AlertDialogContent,
186
+ // Shared with Dialog.
187
+ Header: Dialog.Header,
188
+ Body: Dialog.Body,
156
189
  Title: AlertDialogTitle,
157
190
  Description: AlertDialogDescription,
191
+ ActionBar: Dialog.ActionBar,
192
+ CloseIconButton: Dialog.CloseIconButton,
193
+ // AlertDialog-specific dismissal.
158
194
  Cancel: AlertDialogCancel,
159
195
  Action: AlertDialogAction,
160
196
  };
@@ -169,4 +205,9 @@ export type {
169
205
  AlertDialogDescriptionProps,
170
206
  AlertDialogCancelProps,
171
207
  AlertDialogActionProps,
208
+ // Re-export shared types.
209
+ DialogHeaderProps as AlertDialogHeaderProps,
210
+ DialogBodyProps as AlertDialogBodyProps,
211
+ DialogActionBarProps as AlertDialogActionBarProps,
212
+ DialogCloseIconButtonProps as AlertDialogCloseIconButtonProps,
172
213
  };
@@ -5,34 +5,94 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
+ import { random } from '@dxos/random';
9
+
8
10
  import { withTheme } from '../../testing';
9
11
  import { Button } from '../Button';
12
+ import { Input } from '../Input';
13
+ import { ScrollArea } from '../ScrollArea';
14
+ import { Dialog, type DialogContentProps } from './Dialog';
10
15
 
11
- import { Dialog } from './Dialog';
16
+ type DefaultStoryProps = Pick<DialogContentProps, 'size'> &
17
+ Partial<{
18
+ title: string;
19
+ description: string;
20
+ openTrigger: string;
21
+ closeTrigger: string;
22
+ blockAlign: 'start' | 'center';
23
+ }>;
12
24
 
13
- type StoryProps = Partial<{
14
- title: string;
15
- description: string;
16
- body: string;
17
- closeTrigger: string;
18
- openTrigger: string;
19
- blockAlign: 'center' | 'start';
20
- }>;
25
+ /**
26
+ * Standard Dialog with non-scrolling content in Dialog.Body.
27
+ * Dialog.Body delegates to Column.Content, which applies gutter padding via `px-[var(--gutter)]`.
28
+ */
29
+ const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blockAlign }: DefaultStoryProps) => {
30
+ return (
31
+ <Dialog.Root defaultOpen modal>
32
+ <Dialog.Trigger asChild>
33
+ <Button>{openTrigger}</Button>
34
+ </Dialog.Trigger>
35
+ <Dialog.Overlay blockAlign={blockAlign}>
36
+ <Dialog.Content size={size}>
37
+ <Dialog.Header>
38
+ <Dialog.Title>{title}</Dialog.Title>
39
+ {closeTrigger && (
40
+ <Dialog.Close asChild>
41
+ <Dialog.CloseIconButton />
42
+ </Dialog.Close>
43
+ )}
44
+ </Dialog.Header>
45
+ <Dialog.Body>
46
+ <Dialog.Description>{description}</Dialog.Description>
47
+ <Input.Root>
48
+ <Input.Label>Value</Input.Label>
49
+ <Input.TextInput placeholder='Enter value' />
50
+ </Input.Root>
51
+ </Dialog.Body>
52
+ <Dialog.ActionBar>
53
+ <Dialog.Close asChild>
54
+ <Button variant='primary'>{closeTrigger}</Button>
55
+ </Dialog.Close>
56
+ </Dialog.ActionBar>
57
+ </Dialog.Content>
58
+ </Dialog.Overlay>
59
+ </Dialog.Root>
60
+ );
61
+ };
21
62
 
22
- const DefaultStory = ({ title, openTrigger, description, body, closeTrigger, blockAlign }: StoryProps) => {
63
+ /**
64
+ * Dialog with a ScrollArea child inside Dialog.Body.
65
+ * The ScrollArea breaks out of Body's gutter padding via `--gutter-offset`
66
+ * and applies its own asymmetric padding (accounting for scrollbar width).
67
+ */
68
+ const ScrollingStory = ({ size, title, description, openTrigger, closeTrigger, blockAlign }: DefaultStoryProps) => {
23
69
  return (
24
- <Dialog.Root defaultOpen>
70
+ <Dialog.Root defaultOpen modal>
25
71
  <Dialog.Trigger asChild>
26
72
  <Button>{openTrigger}</Button>
27
73
  </Dialog.Trigger>
28
74
  <Dialog.Overlay blockAlign={blockAlign}>
29
- <Dialog.Content>
30
- <Dialog.Title>{title}</Dialog.Title>
31
- <Dialog.Description>{description}</Dialog.Description>
32
- <p className='mbs-2 mbe-4'>{body}</p>
33
- <Dialog.Close asChild>
34
- <Button variant='primary'>{closeTrigger}</Button>
35
- </Dialog.Close>
75
+ <Dialog.Content size={size}>
76
+ <Dialog.Header>
77
+ <Dialog.Title>{title}</Dialog.Title>
78
+ {closeTrigger && (
79
+ <Dialog.Close asChild>
80
+ <Dialog.CloseIconButton />
81
+ </Dialog.Close>
82
+ )}
83
+ </Dialog.Header>
84
+ <Dialog.Body>
85
+ <ScrollArea.Root orientation='vertical' padding thin>
86
+ <ScrollArea.Viewport>
87
+ <Dialog.Description>{description}</Dialog.Description>
88
+ </ScrollArea.Viewport>
89
+ </ScrollArea.Root>
90
+ </Dialog.Body>
91
+ <Dialog.ActionBar>
92
+ <Dialog.Close asChild>
93
+ <Button variant='primary'>{closeTrigger}</Button>
94
+ </Dialog.Close>
95
+ </Dialog.ActionBar>
36
96
  </Dialog.Content>
37
97
  </Dialog.Overlay>
38
98
  </Dialog.Root>
@@ -40,15 +100,10 @@ const DefaultStory = ({ title, openTrigger, description, body, closeTrigger, blo
40
100
  };
41
101
 
42
102
  const meta = {
43
- title: 'ui/react-ui-core/Dialog',
103
+ title: 'ui/react-ui-core/components/Dialog',
44
104
  component: Dialog as any,
45
105
  render: DefaultStory,
46
- decorators: [withTheme],
47
- parameters: {
48
- chromatic: {
49
- disableSnapshot: false,
50
- },
51
- },
106
+ decorators: [withTheme()],
52
107
  } satisfies Meta<typeof DefaultStory>;
53
108
 
54
109
  export default meta;
@@ -58,10 +113,65 @@ type Story = StoryObj<typeof meta>;
58
113
  export const Default: Story = {
59
114
  args: {
60
115
  title: 'Dialog title',
116
+ description: random.lorem.paragraph(1),
117
+ openTrigger: 'Open',
118
+ closeTrigger: 'Close',
119
+ blockAlign: 'start',
120
+ },
121
+ };
122
+
123
+ export const Small: Story = {
124
+ args: {
125
+ title: 'Dialog title',
126
+ description: random.lorem.paragraph(1),
127
+ openTrigger: 'Open',
128
+ closeTrigger: 'Close',
129
+ blockAlign: 'center',
130
+ size: 'sm',
131
+ },
132
+ };
133
+
134
+ export const Medium: Story = {
135
+ args: {
136
+ title: 'Dialog title',
137
+ description: random.lorem.paragraph(1),
138
+ openTrigger: 'Open',
139
+ closeTrigger: 'Close',
140
+ blockAlign: 'center',
141
+ size: 'md',
142
+ },
143
+ };
144
+
145
+ export const Large: Story = {
146
+ args: {
147
+ title: 'Dialog title',
148
+ description: random.lorem.paragraph(2),
149
+ openTrigger: 'Open Dialog',
150
+ closeTrigger: 'Close',
151
+ blockAlign: 'center',
152
+ size: 'lg',
153
+ },
154
+ };
155
+
156
+ export const ExtraLarge: Story = {
157
+ args: {
158
+ title: 'Dialog title',
159
+ description: random.lorem.paragraph(2),
160
+ openTrigger: 'Open Dialog',
161
+ closeTrigger: 'Close',
162
+ blockAlign: 'center',
163
+ size: 'xl',
164
+ },
165
+ };
166
+
167
+ export const Scrolling: Story = {
168
+ render: ScrollingStory,
169
+ args: {
170
+ title: 'Dialog title',
171
+ description: random.lorem.paragraph(20),
61
172
  openTrigger: 'Open Dialog',
62
- description: 'Dialog description',
63
- body: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
64
- closeTrigger: 'Close trigger',
173
+ closeTrigger: 'Close',
65
174
  blockAlign: 'center',
175
+ size: 'md',
66
176
  },
67
177
  };