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

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 (534) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  4. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  6. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +2982 -1631
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +37 -28
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
  15. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
  17. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +2982 -1631
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +37 -28
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  29. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  30. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  35. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Button.d.ts +3 -3
  37. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  39. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  41. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  43. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts +4 -0
  45. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  47. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  48. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  49. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  52. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  54. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  56. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  58. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  60. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  62. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  63. package/dist/types/src/components/Card/Card.d.ts +92 -68
  64. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  65. package/dist/types/src/components/Card/Card.stories.d.ts +3 -2
  66. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  68. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/Carousel.d.ts +102 -0
  70. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  72. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  74. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  75. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  76. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  77. package/dist/types/src/components/Column/Column.d.ts +33 -0
  78. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  79. package/dist/types/src/components/Column/Column.stories.d.ts +25 -0
  80. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  82. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/index.d.ts +3 -0
  84. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  86. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  93. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  94. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  95. package/dist/types/src/components/Dialog/AlertDialog.d.ts +43 -32
  96. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.d.ts +51 -32
  99. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  101. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  103. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  104. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  105. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  107. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  109. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  110. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  111. package/dist/types/src/{primitives/Column/Column.stories.d.ts → components/Focus/Focus.stories.d.ts} +4 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Focus/index.d.ts +2 -0
  116. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  118. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  120. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  122. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  124. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  125. package/dist/types/src/components/Icon/index.d.ts +1 -0
  126. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.d.ts +2 -1
  128. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  129. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  130. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.d.ts +90 -15
  132. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.stories.d.ts +17 -6
  134. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  136. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  138. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/constants.d.ts +2 -0
  140. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  141. package/dist/types/src/components/Input/index.d.ts +2 -0
  142. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  144. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  146. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  147. package/dist/types/src/components/List/List.d.ts +5 -3
  148. package/dist/types/src/components/List/List.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  150. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  151. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  152. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  153. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.d.ts +2 -2
  155. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.d.ts +6 -10
  159. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  160. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  162. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  163. package/dist/types/src/components/Main/Main.d.ts +9 -5
  164. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  165. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  167. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/constants.d.ts +3 -0
  169. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  170. package/dist/types/src/components/Main/index.d.ts +1 -0
  171. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  172. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +43 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  176. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  177. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  178. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  179. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  180. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  182. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  183. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  184. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  186. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  187. package/dist/types/src/components/Message/Message.d.ts +3 -3
  188. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  189. package/dist/types/src/components/Message/Message.stories.d.ts +6 -2
  190. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  191. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  192. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.d.ts +35 -0
  194. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  196. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  197. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  198. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  200. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  201. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  202. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  203. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  204. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  205. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  206. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  207. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  209. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  210. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  211. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  212. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  213. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  214. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +41 -18
  215. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  216. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  217. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  218. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  219. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  220. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  222. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  224. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  225. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  226. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  229. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Splitter/Splitter.d.ts +18 -18
  231. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  232. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  233. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  234. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  235. package/dist/types/src/components/Status/Status.d.ts +3 -4
  236. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  237. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  239. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  240. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  241. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  242. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  243. package/dist/types/src/components/Toast/Toast.d.ts +23 -20
  244. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  245. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  246. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  247. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  248. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  249. package/dist/types/src/components/Toolbar/Toolbar.d.ts +30 -26
  250. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  251. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  253. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  255. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  257. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  258. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  259. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  260. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  261. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  262. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  263. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  264. package/dist/types/src/components/index.d.ts +8 -4
  265. package/dist/types/src/components/index.d.ts.map +1 -1
  266. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  267. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  268. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  269. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  270. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  271. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -0
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  275. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  277. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  279. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  280. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  281. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  282. package/dist/types/src/index.d.ts +1 -0
  283. package/dist/types/src/index.d.ts.map +1 -1
  284. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  285. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  286. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  287. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  289. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  293. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  294. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  295. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  296. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  297. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  298. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  299. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  300. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  301. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +1 -1
  302. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  303. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  304. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  305. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  306. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  307. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  308. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  309. package/dist/types/src/primitives/index.d.ts +3 -2
  310. package/dist/types/src/primitives/index.d.ts.map +1 -1
  311. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  312. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  313. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  314. package/dist/types/src/testing/decorators/withTheme.d.ts +6 -2
  315. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  316. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  317. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  318. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  319. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  320. package/dist/types/src/theme/index.d.ts +31 -0
  321. package/dist/types/src/theme/index.d.ts.map +1 -0
  322. package/dist/types/src/translations.d.ts +17 -3
  323. package/dist/types/src/translations.d.ts.map +1 -1
  324. package/dist/types/src/util/index.d.ts +2 -1
  325. package/dist/types/src/util/index.d.ts.map +1 -1
  326. package/dist/types/src/util/mobile.d.ts +5 -0
  327. package/dist/types/src/util/mobile.d.ts.map +1 -0
  328. package/dist/types/src/util/slots.d.ts +57 -0
  329. package/dist/types/src/util/slots.d.ts.map +1 -0
  330. package/dist/types/src/util/usePx.d.ts.map +1 -1
  331. package/dist/types/tsconfig.tsbuildinfo +1 -1
  332. package/package.json +31 -26
  333. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  334. package/src/components/Avatars/Avatar.theme.ts +93 -0
  335. package/src/components/Avatars/Avatar.tsx +1 -2
  336. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  337. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  338. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  339. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  340. package/src/components/Button/Button.stories.tsx +0 -1
  341. package/src/components/Button/Button.theme.ts +31 -0
  342. package/src/components/Button/Button.tsx +6 -14
  343. package/src/components/Button/IconButton.stories.tsx +56 -6
  344. package/src/components/Button/IconButton.theme.ts +21 -0
  345. package/src/components/Button/IconButton.tsx +3 -4
  346. package/src/components/Button/Toggle.stories.tsx +0 -1
  347. package/src/components/Button/Toggle.tsx +4 -4
  348. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  349. package/src/components/Button/ToggleGroup.tsx +12 -16
  350. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  351. package/src/components/Calendar/Calendar.theme.ts +74 -0
  352. package/src/components/Calendar/Calendar.tsx +196 -0
  353. package/src/components/Calendar/index.ts +5 -0
  354. package/src/components/Card/Card.stories.tsx +55 -34
  355. package/src/components/Card/Card.theme.ts +93 -0
  356. package/src/components/Card/Card.tsx +297 -156
  357. package/src/components/Carousel/Carousel.tsx +371 -0
  358. package/src/components/Carousel/index.ts +5 -0
  359. package/src/components/Clipboard/CopyButton.tsx +6 -7
  360. package/src/components/Column/AUDIT.md +148 -0
  361. package/src/components/Column/Column.stories.tsx +181 -0
  362. package/src/components/Column/Column.theme.ts +48 -0
  363. package/src/components/Column/Column.tsx +166 -0
  364. package/src/{primitives → components}/Column/index.ts +1 -0
  365. package/src/components/Column/withColumn.ts +27 -0
  366. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  367. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  368. package/src/components/DatePicker/DatePicker.tsx +279 -0
  369. package/src/components/DatePicker/index.ts +5 -0
  370. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  371. package/src/components/Dialog/AlertDialog.tsx +72 -132
  372. package/src/components/Dialog/Dialog.stories.tsx +65 -10
  373. package/src/components/Dialog/Dialog.theme.ts +61 -0
  374. package/src/components/Dialog/Dialog.tsx +124 -99
  375. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  376. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  377. package/src/components/ErrorFallback/ErrorStack.tsx +48 -8
  378. package/src/components/Focus/AUDIT.md +43 -0
  379. package/src/components/Focus/Focus.stories.tsx +230 -0
  380. package/src/components/Focus/Focus.theme.ts +32 -0
  381. package/src/components/Focus/Focus.tsx +201 -0
  382. package/src/components/Focus/index.ts +5 -0
  383. package/src/components/Icon/Icon.stories.tsx +43 -13
  384. package/src/components/Icon/Icon.theme.ts +45 -0
  385. package/src/components/Icon/Icon.tsx +14 -3
  386. package/src/components/Icon/IconBlock.tsx +38 -0
  387. package/src/components/Icon/index.ts +1 -0
  388. package/src/components/Image/Image.stories.tsx +4 -4
  389. package/src/components/Image/Image.tsx +31 -8
  390. package/src/components/Input/Input.stories.tsx +135 -33
  391. package/src/components/Input/Input.theme.ts +191 -0
  392. package/src/components/Input/Input.tsx +214 -9
  393. package/src/components/Input/SegmentedInput.tsx +454 -0
  394. package/src/components/Input/constants.ts +5 -0
  395. package/src/components/Input/index.ts +2 -0
  396. package/src/components/Link/Link.stories.tsx +0 -1
  397. package/src/components/Link/Link.theme.ts +16 -0
  398. package/src/components/Link/Link.tsx +10 -2
  399. package/src/components/List/List.stories.tsx +1 -2
  400. package/src/components/List/List.theme.ts +47 -0
  401. package/src/components/List/List.tsx +8 -7
  402. package/src/components/List/ListDropIndicator.tsx +1 -2
  403. package/src/components/List/Tree.stories.tsx +2 -3
  404. package/src/components/List/Tree.tsx +0 -1
  405. package/src/components/List/TreeDropIndicator.tsx +3 -3
  406. package/src/components/List/Treegrid.stories.tsx +26 -27
  407. package/src/components/List/Treegrid.theme.ts +35 -0
  408. package/src/components/List/Treegrid.tsx +15 -16
  409. package/src/components/Main/Main.stories.tsx +0 -1
  410. package/src/components/Main/Main.theme.ts +29 -0
  411. package/src/components/Main/Main.tsx +10 -9
  412. package/src/components/Main/constants.ts +6 -0
  413. package/src/components/Main/index.ts +1 -0
  414. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  415. package/src/components/MediaPlayer/MediaPlayer.tsx +178 -0
  416. package/src/components/MediaPlayer/index.ts +5 -0
  417. package/src/components/Menu/ContextMenu.stories.tsx +0 -4
  418. package/src/components/Menu/DropdownMenu.stories.tsx +0 -4
  419. package/src/components/Menu/DropdownMenu.tsx +63 -57
  420. package/src/components/Menu/Menu.theme.ts +48 -0
  421. package/src/components/Message/Message.stories.tsx +48 -11
  422. package/src/components/Message/Message.theme.ts +44 -0
  423. package/src/components/Message/Message.tsx +75 -19
  424. package/src/{primitives → components}/Panel/Panel.stories.tsx +9 -9
  425. package/src/components/Panel/Panel.theme.ts +42 -0
  426. package/src/components/Panel/Panel.tsx +121 -0
  427. package/src/components/Popover/Popover.stories.tsx +4 -5
  428. package/src/components/Popover/Popover.theme.ts +40 -0
  429. package/src/components/Popover/Popover.tsx +49 -49
  430. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  431. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  432. package/src/components/ScrollArea/ScrollArea.tsx +40 -23
  433. package/src/components/ScrollArea/index.ts +1 -0
  434. package/src/components/ScrollArea/scrollbar.ts +21 -0
  435. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +21 -19
  436. package/src/components/ScrollContainer/ScrollContainer.tsx +215 -106
  437. package/src/components/Select/Select.stories.tsx +5 -6
  438. package/src/components/Select/Select.theme.ts +55 -0
  439. package/src/components/Select/Select.tsx +26 -10
  440. package/src/components/Separator/Separator.theme.ts +23 -0
  441. package/src/components/Separator/Separator.tsx +4 -7
  442. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  443. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  444. package/src/components/Splitter/Splitter.stories.tsx +30 -30
  445. package/src/components/Splitter/Splitter.theme.ts +18 -0
  446. package/src/components/Splitter/Splitter.tsx +36 -40
  447. package/src/components/Status/Status.stories.tsx +0 -1
  448. package/src/components/Status/Status.theme.ts +31 -0
  449. package/src/components/Status/Status.tsx +7 -5
  450. package/src/components/Tag/Tag.stories.tsx +0 -1
  451. package/src/components/Tag/Tag.theme.ts +22 -0
  452. package/src/components/Toast/Toast.stories.tsx +41 -21
  453. package/src/components/Toast/Toast.theme.ts +56 -0
  454. package/src/components/Toast/Toast.tsx +105 -52
  455. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  456. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  457. package/src/components/Toolbar/Toolbar.tsx +83 -46
  458. package/src/components/Tooltip/Tooltip.stories.tsx +7 -17
  459. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  460. package/src/components/Tooltip/Tooltip.tsx +33 -33
  461. package/src/components/Tooltip/index.ts +1 -0
  462. package/src/components/Tooltip/tooltipContent.ts +16 -0
  463. package/src/components/index.ts +8 -5
  464. package/src/exemplars/generics.stories.tsx +7 -16
  465. package/src/exemplars/slot.stories.tsx +66 -57
  466. package/src/exemplars/tabster.stories.tsx +1 -1
  467. package/src/exemplars/virtualizer.stories.tsx +4 -5
  468. package/src/hooks/index.ts +1 -0
  469. package/src/hooks/useDensityContext.ts +3 -3
  470. package/src/hooks/useElevationContext.ts +1 -1
  471. package/src/hooks/useThemeContext.ts +1 -1
  472. package/src/hooks/useTranslationsContext.ts +1 -1
  473. package/src/index.ts +1 -0
  474. package/src/playground/Custom.stories.tsx +13 -36
  475. package/src/primitives/Container/Container.stories.tsx +0 -1
  476. package/src/primitives/Container/Container.tsx +7 -8
  477. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  478. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  479. package/src/primitives/Flex/Flex.tsx +12 -12
  480. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  481. package/src/primitives/Grid/Grid.tsx +6 -9
  482. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -2
  483. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +6 -5
  484. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  485. package/src/primitives/index.ts +4 -2
  486. package/src/testing/Loading.tsx +25 -4
  487. package/src/testing/decorators/withLayout.tsx +7 -17
  488. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  489. package/src/testing/decorators/withTheme.tsx +23 -12
  490. package/src/theme/bindTheme.ts +13 -0
  491. package/src/theme/defaultTheme.ts +83 -0
  492. package/src/theme/index.ts +37 -0
  493. package/src/translations.ts +17 -3
  494. package/src/util/index.ts +2 -1
  495. package/src/util/mobile.ts +11 -0
  496. package/src/util/slots.ts +129 -0
  497. package/src/util/usePx.ts +5 -1
  498. package/dist/lib/browser/chunk-2FKSMWNY.mjs +0 -774
  499. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  500. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +0 -776
  501. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
  502. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  503. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  504. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  505. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  506. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  507. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  508. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  509. package/dist/types/src/primitives/Column/Column.d.ts +0 -26
  510. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  511. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  512. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  513. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  514. package/dist/types/src/primitives/Panel/Panel.d.ts +0 -26
  515. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  516. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  517. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  518. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  519. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  520. package/src/primitives/Column/Column.stories.tsx +0 -78
  521. package/src/primitives/Column/Column.tsx +0 -134
  522. package/src/primitives/Panel/Panel.tsx +0 -119
  523. package/src/util/hasIosKeyboard.ts +0 -8
  524. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  525. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  526. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  527. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  528. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  529. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  530. /package/src/{primitives → components}/Panel/index.ts +0 -0
  531. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  532. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  533. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  534. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -5,15 +5,15 @@
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
12
  import { Input } from '../Input';
13
-
13
+ import { ScrollArea } from '../ScrollArea';
14
14
  import { Dialog, type DialogContentProps } from './Dialog';
15
15
 
16
- type StoryProps = Pick<DialogContentProps, 'size'> &
16
+ type DefaultStoryProps = Pick<DialogContentProps, 'size'> &
17
17
  Partial<{
18
18
  title: string;
19
19
  description: string;
@@ -22,7 +22,11 @@ type StoryProps = Pick<DialogContentProps, 'size'> &
22
22
  blockAlign: 'start' | 'center';
23
23
  }>;
24
24
 
25
- const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blockAlign }: StoryProps) => {
25
+ /**
26
+ * Standard Dialog with non-scrolling content in Dialog.Body.
27
+ * Dialog.Body propagates the Column grid via subgrid. Children auto-center via --dx-col.
28
+ */
29
+ const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blockAlign }: DefaultStoryProps) => {
26
30
  return (
27
31
  <Dialog.Root defaultOpen modal>
28
32
  <Dialog.Trigger asChild>
@@ -34,7 +38,7 @@ const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blo
34
38
  <Dialog.Title>{title}</Dialog.Title>
35
39
  {closeTrigger && (
36
40
  <Dialog.Close asChild>
37
- <Dialog.CloseIconButton />
41
+ <Dialog.ActionIconButton action='close' />
38
42
  </Dialog.Close>
39
43
  )}
40
44
  </Dialog.Header>
@@ -56,6 +60,45 @@ const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blo
56
60
  );
57
61
  };
58
62
 
63
+ /**
64
+ * Dialog with a ScrollArea child inside Dialog.Body.
65
+ * The ScrollArea breaks out of Body's gutter padding via `--gutter`
66
+ * and applies its own asymmetric padding (accounting for scrollbar width).
67
+ */
68
+ const ScrollingStory = ({ size, title, description, openTrigger, closeTrigger, blockAlign }: DefaultStoryProps) => {
69
+ return (
70
+ <Dialog.Root defaultOpen modal>
71
+ <Dialog.Trigger asChild>
72
+ <Button>{openTrigger}</Button>
73
+ </Dialog.Trigger>
74
+ <Dialog.Overlay blockAlign={blockAlign}>
75
+ <Dialog.Content size={size}>
76
+ <Dialog.Header>
77
+ <Dialog.Title>{title}</Dialog.Title>
78
+ {closeTrigger && (
79
+ <Dialog.Close asChild>
80
+ <Dialog.ActionIconButton action='close' />
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>
96
+ </Dialog.Content>
97
+ </Dialog.Overlay>
98
+ </Dialog.Root>
99
+ );
100
+ };
101
+
59
102
  const meta = {
60
103
  title: 'ui/react-ui-core/components/Dialog',
61
104
  component: Dialog as any,
@@ -70,7 +113,7 @@ type Story = StoryObj<typeof meta>;
70
113
  export const Default: Story = {
71
114
  args: {
72
115
  title: 'Dialog title',
73
- description: faker.lorem.paragraph(1),
116
+ description: random.lorem.paragraph(1),
74
117
  openTrigger: 'Open',
75
118
  closeTrigger: 'Close',
76
119
  blockAlign: 'start',
@@ -80,7 +123,7 @@ export const Default: Story = {
80
123
  export const Small: Story = {
81
124
  args: {
82
125
  title: 'Dialog title',
83
- description: faker.lorem.paragraph(1),
126
+ description: random.lorem.paragraph(1),
84
127
  openTrigger: 'Open',
85
128
  closeTrigger: 'Close',
86
129
  blockAlign: 'center',
@@ -91,7 +134,7 @@ export const Small: Story = {
91
134
  export const Medium: Story = {
92
135
  args: {
93
136
  title: 'Dialog title',
94
- description: faker.lorem.paragraph(1),
137
+ description: random.lorem.paragraph(1),
95
138
  openTrigger: 'Open',
96
139
  closeTrigger: 'Close',
97
140
  blockAlign: 'center',
@@ -102,7 +145,7 @@ export const Medium: Story = {
102
145
  export const Large: Story = {
103
146
  args: {
104
147
  title: 'Dialog title',
105
- description: faker.lorem.paragraph(2),
148
+ description: random.lorem.paragraph(2),
106
149
  openTrigger: 'Open Dialog',
107
150
  closeTrigger: 'Close',
108
151
  blockAlign: 'center',
@@ -113,10 +156,22 @@ export const Large: Story = {
113
156
  export const ExtraLarge: Story = {
114
157
  args: {
115
158
  title: 'Dialog title',
116
- description: faker.lorem.paragraph(2),
159
+ description: random.lorem.paragraph(2),
117
160
  openTrigger: 'Open Dialog',
118
161
  closeTrigger: 'Close',
119
162
  blockAlign: 'center',
120
163
  size: 'xl',
121
164
  },
122
165
  };
166
+
167
+ export const Scrolling: Story = {
168
+ render: ScrollingStory,
169
+ args: {
170
+ title: 'Dialog title',
171
+ description: random.lorem.paragraph(20),
172
+ openTrigger: 'Open Dialog',
173
+ closeTrigger: 'Close',
174
+ blockAlign: 'center',
175
+ size: 'md',
176
+ },
177
+ };
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
7
+
8
+ import { withColumn } from '../Column/withColumn';
9
+
10
+ export type DialogSize = 'sm' | 'md' | 'lg' | 'xl';
11
+
12
+ const sizeMap: Record<DialogSize, string> = {
13
+ sm: 'md:max-w-[24rem]',
14
+ md: 'md:max-w-[32rem]!',
15
+ lg: 'md:max-w-[40rem]!',
16
+ xl: 'md:max-w-[60rem]!',
17
+ };
18
+
19
+ export type DialogStyleProps = {
20
+ srOnly?: boolean;
21
+ inOverlayLayout?: boolean;
22
+ elevation?: Elevation;
23
+ size?: DialogSize;
24
+ };
25
+
26
+ const overlay: ComponentFunction<DialogStyleProps> = (_props, ...etc) => mx('dx-dialog__overlay', ...etc);
27
+
28
+ const content: ComponentFunction<DialogStyleProps> = ({ inOverlayLayout, size = 'md' }, ...etc) => {
29
+ return mx(
30
+ '@container',
31
+ 'dx-dialog__content dx-focus-ring dx-modal-surface py-4',
32
+ !inOverlayLayout && 'fixed z-50 top-[50%] left-[50%] -translate-x-[50%] -translate-y-[50%]',
33
+ sizeMap[size],
34
+ ...etc,
35
+ );
36
+ };
37
+
38
+ const header: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
39
+ mx('dx-dialog__header flex pb-4 items-center justify-between', withColumn.center(), ...etc);
40
+
41
+ const body: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
42
+ mx('dx-dialog__body dx-expander', withColumn.propagate(), ...etc);
43
+
44
+ const actionBar: ComponentFunction<DialogStyleProps> = (_props, ...etc) =>
45
+ mx('dx-dialog__actionbar flex items-center pt-4 gap-2', withColumn.center(), ...etc);
46
+
47
+ const title: ComponentFunction<DialogStyleProps> = ({ srOnly }, ...etc) =>
48
+ mx('dx-dialog__title', srOnly && 'sr-only', ...etc);
49
+
50
+ const description: ComponentFunction<DialogStyleProps> = ({ srOnly }, ...etc) =>
51
+ mx('dx-dialog__description', 'text-description', srOnly && 'sr-only', ...etc);
52
+
53
+ export const dialogTheme: Theme<DialogStyleProps> = {
54
+ overlay,
55
+ content,
56
+ header,
57
+ body,
58
+ actionbar: actionBar,
59
+ title,
60
+ description,
61
+ };
@@ -3,73 +3,67 @@
3
3
  //
4
4
 
5
5
  import { createContext } from '@radix-ui/react-context';
6
- import {
7
- DialogClose as DialogClosePrimitive,
8
- type DialogCloseProps as DialogClosePrimitiveProps,
9
- DialogContent as DialogContentPrimitive,
10
- DialogDescription as DialogDescriptionPrimitive,
11
- type DialogDescriptionProps as DialogDescriptionPrimitiveProps,
12
- DialogOverlay as DialogOverlayPrimitive,
13
- type DialogOverlayProps as DialogOverlayPrimitiveProps,
14
- DialogPortal as DialogPortalPrimitive,
15
- type DialogPortalProps as DialogPortalPrimitiveProps,
16
- Root as DialogRootPrimitive,
17
- type DialogProps as DialogRootPrimitiveProps,
18
- DialogTitle as DialogTitlePrimitive,
19
- type DialogTitleProps as DialogTitlePrimitiveProps,
20
- DialogTrigger as DialogTriggerPrimitive,
21
- type DialogTriggerProps as DialogTriggerPrimitiveProps,
22
- } from '@radix-ui/react-dialog';
6
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
7
+ import { Primitive } from '@radix-ui/react-primitive';
8
+ import { Slot } from '@radix-ui/react-slot';
23
9
  import React, {
24
10
  type ComponentPropsWithRef,
25
11
  type ForwardRefExoticComponent,
26
12
  type FunctionComponent,
27
- type PropsWithChildren,
28
13
  forwardRef,
29
14
  } from 'react';
30
15
  import { useTranslation } from 'react-i18next';
31
16
 
32
- import { type DialogSize, osTranslations } from '@dxos/ui-theme';
17
+ import { osTranslations } from '@dxos/ui-theme';
18
+ import { type SlottableProps } from '@dxos/ui-types';
33
19
 
34
20
  import { useThemeContext } from '../../hooks';
35
- import { Column } from '../../primitives';
36
- import { type ThemedClassName } from '../../util';
21
+ import { ElevationProvider } from '../../primitives';
22
+ import { type DialogSize } from '../../theme';
23
+ import { type ThemedClassName, composableProps, slottable } from '../../util';
37
24
  import { IconButton } from '../Button';
38
- import { ElevationProvider } from '../ElevationProvider';
25
+ import { Column } from '../Column';
39
26
 
40
27
  //
41
28
  // Root
42
29
  //
43
30
 
44
- type DialogRootProps = DialogRootPrimitiveProps;
31
+ type DialogRootProps = DialogPrimitive.DialogProps;
45
32
 
46
33
  const DialogRoot: FunctionComponent<DialogRootProps> = (props) => (
47
34
  <ElevationProvider elevation='dialog'>
48
- <DialogRootPrimitive {...props} />
35
+ <DialogPrimitive.Root
36
+ // NOTE: Radix warning unless set to undefined.
37
+ // https://www.radix-ui.com/primitives/docs/components/dialog#description
38
+ aria-describedby={undefined}
39
+ {...props}
40
+ />
49
41
  </ElevationProvider>
50
42
  );
51
43
 
44
+ DialogRoot.displayName = 'Dialog.Root';
45
+
52
46
  //
53
47
  // Trigger
54
48
  //
55
49
 
56
- type DialogTriggerProps = DialogTriggerPrimitiveProps;
50
+ type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
57
51
 
58
- const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogTriggerPrimitive;
52
+ const DialogTrigger = DialogPrimitive.Trigger;
59
53
 
60
54
  //
61
55
  // Portal
62
56
  //
63
57
 
64
- type DialogPortalProps = DialogPortalPrimitiveProps;
58
+ type DialogPortalProps = DialogPrimitive.DialogPortalProps;
65
59
 
66
- const DialogPortal: FunctionComponent<DialogPortalProps> = DialogPortalPrimitive;
60
+ const DialogPortal = DialogPrimitive.Portal;
67
61
 
68
62
  //
69
63
  // Overlay
70
64
  //
71
65
 
72
- const DIALOG_OVERLAY_NAME = 'DialogOverlay';
66
+ const DIALOG_OVERLAY_NAME = 'Dialog.Overlay';
73
67
 
74
68
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
75
69
 
@@ -78,21 +72,23 @@ const [OverlayLayoutProvider, useOverlayLayoutContext] = createContext<OverlayLa
78
72
  {},
79
73
  );
80
74
 
81
- type DialogOverlayProps = ThemedClassName<DialogOverlayPrimitiveProps & { blockAlign?: 'center' | 'start' | 'end' }>;
75
+ type DialogOverlayProps = ThemedClassName<
76
+ DialogPrimitive.DialogOverlayProps & { blockAlign?: 'center' | 'start' | 'end' }
77
+ >;
82
78
 
83
79
  const DialogOverlay: ForwardRefExoticComponent<DialogOverlayProps> = forwardRef<HTMLDivElement, DialogOverlayProps>(
84
80
  ({ classNames, children, blockAlign, ...props }, forwardedRef) => {
85
81
  const { tx } = useThemeContext();
86
82
 
87
83
  return (
88
- <DialogOverlayPrimitive
84
+ <DialogPrimitive.Overlay
89
85
  {...props}
90
86
  data-block-align={blockAlign}
91
87
  className={tx('dialog.overlay', {}, classNames)}
92
88
  ref={forwardedRef}
93
89
  >
94
90
  <OverlayLayoutProvider inOverlayLayout>{children}</OverlayLayoutProvider>
95
- </DialogOverlayPrimitive>
91
+ </DialogPrimitive.Overlay>
96
92
  );
97
93
  },
98
94
  );
@@ -103,9 +99,9 @@ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
103
99
  // Content
104
100
  //
105
101
 
106
- const DIALOG_CONTENT_NAME = 'DialogContent';
102
+ const DIALOG_CONTENT_NAME = 'Dialog.Content';
107
103
 
108
- type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogContentPrimitive>> & {
104
+ type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogPrimitive.Content>> & {
109
105
  size?: DialogSize;
110
106
  inOverlayLayout?: boolean;
111
107
  };
@@ -116,16 +112,25 @@ const DialogContent: ForwardRefExoticComponent<DialogContentProps> = forwardRef<
116
112
  const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
117
113
 
118
114
  return (
119
- <DialogContentPrimitive
115
+ <DialogPrimitive.Content
120
116
  {...props}
121
117
  // NOTE: Radix warning unless set to undefined.
122
118
  // https://www.radix-ui.com/primitives/docs/components/dialog#description
123
119
  aria-describedby={undefined}
124
- className={tx('dialog.content', { inOverlayLayout: propsInOverlayLayout || inOverlayLayout, size }, classNames)}
120
+ className={tx(
121
+ 'dialog.content',
122
+ {
123
+ size,
124
+ inOverlayLayout: propsInOverlayLayout || inOverlayLayout,
125
+ },
126
+ classNames,
127
+ )}
125
128
  ref={forwardedRef}
126
129
  >
127
- <Column.Root>{children}</Column.Root>
128
- </DialogContentPrimitive>
130
+ <Column.Root classNames='dx-expander' gutter='sm'>
131
+ {children}
132
+ </Column.Root>
133
+ </DialogPrimitive.Content>
129
134
  );
130
135
  },
131
136
  );
@@ -136,36 +141,50 @@ DialogContent.displayName = DIALOG_CONTENT_NAME;
136
141
  // Header
137
142
  //
138
143
 
139
- type DialogHeaderProps = ThemedClassName<PropsWithChildren> & { srOnly?: boolean };
144
+ type DialogHeaderProps = SlottableProps;
140
145
 
141
- const DialogHeader: ForwardRefExoticComponent<DialogTitleProps> = forwardRef<HTMLHeadingElement, DialogTitleProps>(
142
- ({ classNames, srOnly, ...props }, forwardedRef) => {
143
- const { tx } = useThemeContext();
144
- return (
145
- <Column.Segment asChild>
146
- <div role='heading' {...props} className={tx('dialog.header', { srOnly }, [classNames])} ref={forwardedRef} />
147
- </Column.Segment>
148
- );
149
- },
150
- );
146
+ const DialogHeader = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
147
+ const { className, ...rest } = composableProps(props);
148
+ const Comp = asChild ? Slot : Primitive.div;
149
+ const { tx } = useThemeContext();
150
+ return (
151
+ <Comp {...rest} className={tx('dialog.header', {}, className)} ref={forwardedRef}>
152
+ {children}
153
+ </Comp>
154
+ );
155
+ });
156
+
157
+ DialogHeader.displayName = 'Dialog.Header';
151
158
 
152
159
  //
153
- // CloseIconButton
160
+ // ActionIconButton
154
161
  //
155
162
 
156
- type DialogCloseIconButtonProps = { label?: string };
163
+ type DialogActionIconButtonAction = 'close' | 'delete';
164
+
165
+ type DialogActionIconButtonProps = { action: DialogActionIconButtonAction; label?: string };
166
+
167
+ const DIALOG_ACTION_ICONS: Record<DialogActionIconButtonAction, string> = {
168
+ close: 'ph--x--regular',
169
+ delete: 'ph--trash--regular',
170
+ };
171
+
172
+ const DIALOG_ACTION_LABEL_KEYS: Record<DialogActionIconButtonAction, string> = {
173
+ // Preserves the legacy `close-dialog.label` translation key for backward compat.
174
+ close: 'close-dialog.label',
175
+ delete: 'toolbar-delete.label',
176
+ };
157
177
 
158
- const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButtonProps>(
159
- ({ label, ...props }, forwardedRef) => {
178
+ const DialogActionIconButton = forwardRef<HTMLButtonElement, DialogActionIconButtonProps>(
179
+ ({ action, label, ...props }, forwardedRef) => {
160
180
  const { t } = useTranslation(osTranslations);
161
181
  return (
162
182
  <IconButton
163
183
  {...props}
164
- label={label ?? t('close dialog label')}
165
- icon='ph--x--regular'
184
+ label={label ?? t(DIALOG_ACTION_LABEL_KEYS[action])}
185
+ icon={DIALOG_ACTION_ICONS[action]}
166
186
  iconOnly
167
187
  size={4}
168
- density='fine'
169
188
  variant='ghost'
170
189
  ref={forwardedRef}
171
190
  />
@@ -173,87 +192,91 @@ const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButto
173
192
  },
174
193
  );
175
194
 
195
+ DialogActionIconButton.displayName = 'Dialog.ActionIconButton';
196
+
176
197
  //
177
198
  // Body
178
199
  //
179
200
 
180
- type DialogBodyProps = PropsWithChildren;
201
+ type DialogBodyProps = SlottableProps;
181
202
 
182
- const DialogBody: ForwardRefExoticComponent<DialogBodyProps> = forwardRef<HTMLDivElement, DialogBodyProps>(
183
- ({ children, ...props }, forwardedRef) => {
184
- const { tx } = useThemeContext();
185
- return (
186
- <Column.Segment asChild>
187
- <div role='none' {...props} className={tx('dialog.body')} ref={forwardedRef}>
188
- {children}
189
- </div>
190
- </Column.Segment>
191
- );
192
- },
193
- );
203
+ const DialogBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
204
+ const { className, ...rest } = composableProps(props);
205
+ const Comp = asChild ? Slot : Primitive.div;
206
+ const { tx } = useThemeContext();
207
+ return (
208
+ <Comp {...rest} className={tx('dialog.body', {}, className)} ref={forwardedRef}>
209
+ {children}
210
+ </Comp>
211
+ );
212
+ });
213
+
214
+ DialogBody.displayName = 'Dialog.Body';
194
215
 
195
216
  //
196
217
  // Title
197
218
  //
198
219
 
199
- type DialogTitleProps = ThemedClassName<DialogTitlePrimitiveProps> & { srOnly?: boolean };
220
+ type DialogTitleProps = ThemedClassName<DialogPrimitive.DialogTitleProps> & { srOnly?: boolean };
200
221
 
201
- const DialogTitle: ForwardRefExoticComponent<DialogTitleProps> = forwardRef<HTMLHeadingElement, DialogTitleProps>(
222
+ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
202
223
  ({ classNames, srOnly, ...props }, forwardedRef) => {
203
224
  const { tx } = useThemeContext();
204
225
  return (
205
- <DialogTitlePrimitive {...props} className={tx('dialog.title', { srOnly }, classNames)} ref={forwardedRef} />
226
+ <DialogPrimitive.Title {...props} className={tx('dialog.title', { srOnly }, classNames)} ref={forwardedRef} />
206
227
  );
207
228
  },
208
229
  );
209
230
 
231
+ DialogTitle.displayName = 'Dialog.Title';
232
+
210
233
  //
211
234
  // Description
212
235
  //
213
236
 
214
- type DialogDescriptionProps = ThemedClassName<DialogDescriptionPrimitiveProps> & { srOnly?: boolean };
237
+ type DialogDescriptionProps = ThemedClassName<DialogPrimitive.DialogDescriptionProps> & { srOnly?: boolean };
215
238
 
216
- const DialogDescription: ForwardRefExoticComponent<DialogTitleProps> = forwardRef<
217
- HTMLParagraphElement,
218
- DialogDescriptionProps
219
- >(({ classNames, srOnly, ...props }, forwardedRef) => {
220
- const { tx } = useThemeContext();
221
- return (
222
- <DialogDescriptionPrimitive
223
- {...props}
224
- className={tx('dialog.description', { srOnly }, classNames)}
225
- ref={forwardedRef}
226
- />
227
- );
228
- });
239
+ const DialogDescription = forwardRef<HTMLParagraphElement, DialogDescriptionProps>(
240
+ ({ classNames, srOnly, ...props }, forwardedRef) => {
241
+ const { tx } = useThemeContext();
242
+ return (
243
+ <DialogPrimitive.Description
244
+ {...props}
245
+ className={tx('dialog.description', { srOnly }, classNames)}
246
+ ref={forwardedRef}
247
+ />
248
+ );
249
+ },
250
+ );
251
+
252
+ DialogDescription.displayName = 'Dialog.Description';
229
253
 
230
254
  //
231
255
  // ActionBar
232
256
  //
233
257
 
234
- type DialogActionBarProps = ThemedClassName<PropsWithChildren>;
258
+ type DialogActionBarProps = SlottableProps;
235
259
 
236
- const DialogActionBar: ForwardRefExoticComponent<DialogActionBarProps> = forwardRef<
237
- HTMLDivElement,
238
- DialogActionBarProps
239
- >(({ children, classNames, ...props }, forwardedRef) => {
260
+ const DialogActionBar = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
261
+ const { className: classNames, ...rest } = composableProps(props);
262
+ const Comp = asChild ? Slot : Primitive.div;
240
263
  const { tx } = useThemeContext();
241
264
  return (
242
- <Column.Segment asChild>
243
- <div {...props} className={tx('dialog.actionbar', {}, classNames)} ref={forwardedRef}>
244
- {children}
245
- </div>
246
- </Column.Segment>
265
+ <Comp {...rest} className={tx('dialog.actionbar', {}, classNames)} ref={forwardedRef}>
266
+ {children}
267
+ </Comp>
247
268
  );
248
269
  });
249
270
 
271
+ DialogActionBar.displayName = 'Dialog.ActionBar';
272
+
250
273
  //
251
274
  // Close
252
275
  //
253
276
 
254
- type DialogCloseProps = DialogClosePrimitiveProps;
277
+ type DialogCloseProps = DialogPrimitive.DialogCloseProps;
255
278
 
256
- const DialogClose: FunctionComponent<DialogCloseProps> = DialogClosePrimitive;
279
+ const DialogClose = DialogPrimitive.Close;
257
280
 
258
281
  //
259
282
  // Dialog
@@ -271,7 +294,7 @@ export const Dialog = {
271
294
  Description: DialogDescription,
272
295
  ActionBar: DialogActionBar,
273
296
  Close: DialogClose,
274
- CloseIconButton: DialogCloseIconButton,
297
+ ActionIconButton: DialogActionIconButton,
275
298
  };
276
299
 
277
300
  export type {
@@ -286,4 +309,6 @@ export type {
286
309
  DialogDescriptionProps,
287
310
  DialogActionBarProps,
288
311
  DialogCloseProps,
312
+ DialogActionIconButtonAction,
313
+ DialogActionIconButtonProps,
289
314
  };
@@ -8,11 +8,10 @@ import React from 'react';
8
8
  import { ErrorBoundary } from '@dxos/react-error-boundary';
9
9
 
10
10
  import { withLayout, withTheme } from '../../testing';
11
-
12
11
  import { ErrorFallback } from './ErrorFallback';
13
12
  import { ThrowError } from './ThrowError';
14
13
 
15
- const BasicStory = () => {
14
+ const DefaultStory = () => {
16
15
  return (
17
16
  <ErrorBoundary name='story' FallbackComponent={ErrorFallback}>
18
17
  <ThrowError />
@@ -20,10 +19,6 @@ const BasicStory = () => {
20
19
  );
21
20
  };
22
21
 
23
- const StringErrorStory = () => {
24
- return <ErrorFallback error='This is a string error message' data={{ context: 'story' }} />;
25
- };
26
-
27
22
  const meta: Meta = {
28
23
  title: 'ui/react-ui-core/components/ErrorFallback',
29
24
  component: ErrorFallback,
@@ -38,7 +33,7 @@ export default meta;
38
33
  type Story = StoryObj<typeof meta>;
39
34
 
40
35
  export const Default: Story = {
41
- render: BasicStory,
36
+ render: DefaultStory,
42
37
  play: async () => {
43
38
  // This story intentionally renders an ErrorBoundary fallback; clear the smoke-test error flag.
44
39
  (window as any).__ERROR_BOUNDARY_ERRORS__ = [];
@@ -46,5 +41,5 @@ export const Default: Story = {
46
41
  };
47
42
 
48
43
  export const StringError: Story = {
49
- render: StringErrorStory,
44
+ render: () => <ErrorFallback error='This is a string error message' data={{ context: 'story' }} />,
50
45
  };
@@ -7,6 +7,10 @@ import { type FallbackProps } from 'react-error-boundary';
7
7
 
8
8
  import { safeStringify } from '@dxos/util';
9
9
 
10
+ import { translationKey } from '#translations';
11
+
12
+ import { useTranslation } from '../../primitives';
13
+ import { IconButton } from '../Button';
10
14
  import { ErrorStack } from './ErrorStack';
11
15
 
12
16
  export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'> & { title?: string; data?: any }>;
@@ -15,6 +19,7 @@ export type ErrorFallbackProps = PropsWithChildren<Pick<FallbackProps, 'error'>
15
19
  * Themed fallback component for `ErrorBoundary`.
16
20
  */
17
21
  export const ErrorFallback = ({ children, error, title, data }: ErrorFallbackProps) => {
22
+ const { t } = useTranslation(translationKey);
18
23
  const isDev = process.env.NODE_ENV === 'development';
19
24
  const message = error instanceof Error ? error.message : String(error);
20
25
 
@@ -55,14 +60,15 @@ const Section = ({ children, title, onClick }: PropsWithChildren<{ title?: strin
55
60
  return (
56
61
  <div className='flex flex-col gap-1'>
57
62
  {onClick && (
58
- <button
59
- type='button'
60
- onClick={onClick}
61
- className='flex items-center gap-1 text-xs text-subdued hover:text-primary-500 transition-colors'
62
- title={`Copy ${title}`}
63
- >
64
- <h2 className='text-xs uppercase text-subdued'>{title}</h2>
65
- </button>
63
+ <div>
64
+ <IconButton
65
+ classNames='text-xs uppercase'
66
+ label={title ?? 'Copy'}
67
+ icon='ph--clipboard-text--regular'
68
+ size={5}
69
+ onClick={onClick}
70
+ />
71
+ </div>
66
72
  )}
67
73
  {children}
68
74
  </div>