@dxos/react-ui 0.8.4-staging.ac66bdf99f → 0.9.0

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 (482) 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-7JFD5ZHZ.mjs +1612 -0
  6. package/dist/lib/browser/chunk-7JFD5ZHZ.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +3039 -1891
  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 +10 -13
  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-FPVTVXND.mjs +35 -0
  15. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs +1614 -0
  17. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +3039 -1891
  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 +10 -13
  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.map +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  29. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Button.d.ts +1 -1
  36. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  37. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  40. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  43. package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -0
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  48. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  49. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  50. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  52. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  53. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  54. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  56. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  58. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Card/Card.d.ts +63 -57
  60. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  61. package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
  62. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  64. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  65. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  66. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  67. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
  68. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  70. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  71. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  72. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  73. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  74. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  75. package/dist/types/src/{primitives → components}/Column/Column.d.ts +4 -4
  76. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  77. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  79. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  80. package/dist/types/src/components/Column/index.d.ts +3 -0
  81. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  82. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  83. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  84. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  85. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  86. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  90. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  91. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  92. package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
  93. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  94. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
  96. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  99. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  100. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  101. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  103. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  104. package/dist/types/src/components/Focus/Focus.d.ts +2 -2
  105. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  106. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  108. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  109. package/dist/types/src/components/Icon/Icon.d.ts +1 -0
  110. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  111. package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
  112. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  114. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  116. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/index.d.ts +1 -0
  118. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  119. package/dist/types/src/components/Image/Image.d.ts +8 -1
  120. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  121. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  122. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Input/Input.d.ts +88 -13
  124. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  125. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  126. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  128. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  129. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  130. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  131. package/dist/types/src/components/Input/constants.d.ts +2 -0
  132. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  133. package/dist/types/src/components/Input/index.d.ts +2 -0
  134. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  135. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  136. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  138. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  139. package/dist/types/src/components/List/List.d.ts +2 -2
  140. package/dist/types/src/components/List/List.d.ts.map +1 -1
  141. package/dist/types/src/components/List/List.stories.d.ts +1 -1
  142. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  144. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  145. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  146. package/dist/types/src/components/List/Tree.d.ts +2 -2
  147. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  148. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  150. package/dist/types/src/components/List/Treegrid.d.ts +2 -2
  151. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  152. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  154. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  155. package/dist/types/src/components/Main/Main.d.ts +9 -5
  156. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  157. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  159. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  160. package/dist/types/src/components/Main/constants.d.ts +3 -0
  161. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  162. package/dist/types/src/components/Main/index.d.ts +1 -0
  163. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  164. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  165. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
  166. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  167. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  168. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  169. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  170. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  171. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  172. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
  174. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  175. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  177. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  178. package/dist/types/src/components/Message/Message.d.ts +3 -3
  179. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  180. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  181. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  183. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  184. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
  185. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  186. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  187. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  188. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  189. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  190. package/dist/types/src/components/Popover/Popover.d.ts +10 -2
  191. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  192. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  193. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  194. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  195. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  196. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  197. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  198. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  200. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  201. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  202. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  203. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  204. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  205. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
  206. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  207. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  209. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  210. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  211. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  212. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  213. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  214. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  215. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  216. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  217. package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
  218. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  219. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  220. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  221. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  222. package/dist/types/src/components/Status/Status.d.ts +1 -1
  223. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  224. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  225. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  226. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  229. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Toast/Toast.d.ts +12 -9
  231. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  232. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  233. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  234. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  235. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  236. package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
  237. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  238. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  239. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  240. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  241. package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
  242. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  243. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  244. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  245. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  246. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  247. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  248. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  249. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  250. package/dist/types/src/components/index.d.ts +7 -4
  251. package/dist/types/src/components/index.d.ts.map +1 -1
  252. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  253. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  254. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  255. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  256. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  257. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  258. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  259. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  260. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  261. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  262. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  263. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  264. package/dist/types/src/index.d.ts +1 -0
  265. package/dist/types/src/index.d.ts.map +1 -1
  266. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  267. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  268. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  269. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  270. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  271. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  272. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  273. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  274. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  275. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  276. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  277. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  278. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  279. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  281. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  282. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  283. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  284. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  285. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  286. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  287. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  288. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  289. package/dist/types/src/primitives/index.d.ts +3 -2
  290. package/dist/types/src/primitives/index.d.ts.map +1 -1
  291. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  292. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  293. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  294. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  295. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  296. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  297. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  298. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  299. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  300. package/dist/types/src/theme/index.d.ts +31 -0
  301. package/dist/types/src/theme/index.d.ts.map +1 -0
  302. package/dist/types/src/translations.d.ts +17 -3
  303. package/dist/types/src/translations.d.ts.map +1 -1
  304. package/dist/types/src/util/index.d.ts +2 -1
  305. package/dist/types/src/util/index.d.ts.map +1 -1
  306. package/dist/types/src/util/mobile.d.ts +5 -0
  307. package/dist/types/src/util/mobile.d.ts.map +1 -0
  308. package/dist/types/src/util/slots.d.ts +57 -0
  309. package/dist/types/src/util/slots.d.ts.map +1 -0
  310. package/dist/types/src/util/usePx.d.ts.map +1 -1
  311. package/dist/types/tsconfig.tsbuildinfo +1 -1
  312. package/package.json +29 -25
  313. package/src/components/Avatars/Avatar.theme.ts +93 -0
  314. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  315. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  316. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  317. package/src/components/Button/Button.theme.ts +31 -0
  318. package/src/components/Button/Button.tsx +2 -2
  319. package/src/components/Button/IconButton.stories.tsx +51 -3
  320. package/src/components/Button/IconButton.theme.ts +21 -0
  321. package/src/components/Button/IconButton.tsx +3 -2
  322. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  323. package/src/components/Calendar/Calendar.theme.ts +74 -0
  324. package/src/components/Calendar/Calendar.tsx +196 -0
  325. package/src/components/Calendar/index.ts +5 -0
  326. package/src/components/Card/Card.stories.tsx +43 -22
  327. package/src/components/Card/Card.theme.ts +93 -0
  328. package/src/components/Card/Card.tsx +161 -169
  329. package/src/components/Carousel/Carousel.stories.tsx +47 -0
  330. package/src/components/Carousel/Carousel.tsx +373 -0
  331. package/src/components/Carousel/index.ts +5 -0
  332. package/src/components/Clipboard/CopyButton.tsx +3 -3
  333. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  334. package/src/components/Column/Column.theme.ts +48 -0
  335. package/src/{primitives → components}/Column/Column.tsx +2 -1
  336. package/src/{primitives → components}/Column/index.ts +1 -0
  337. package/src/components/Column/withColumn.ts +27 -0
  338. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  339. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  340. package/src/components/DatePicker/DatePicker.tsx +279 -0
  341. package/src/components/DatePicker/index.ts +5 -0
  342. package/src/components/Dialog/AlertDialog.tsx +12 -16
  343. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  344. package/src/components/Dialog/Dialog.theme.ts +61 -0
  345. package/src/components/Dialog/Dialog.tsx +46 -17
  346. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  347. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  348. package/src/components/Focus/Focus.theme.ts +32 -0
  349. package/src/components/Focus/Focus.tsx +1 -1
  350. package/src/components/Icon/Icon.theme.ts +45 -0
  351. package/src/components/Icon/Icon.tsx +10 -3
  352. package/src/components/Icon/IconBlock.tsx +38 -0
  353. package/src/components/Icon/index.ts +1 -0
  354. package/src/components/Image/Image.stories.tsx +1 -1
  355. package/src/components/Image/Image.tsx +38 -9
  356. package/src/components/Input/Input.stories.tsx +132 -29
  357. package/src/components/Input/Input.theme.ts +191 -0
  358. package/src/components/Input/Input.tsx +208 -2
  359. package/src/components/Input/SegmentedInput.tsx +454 -0
  360. package/src/components/Input/constants.ts +5 -0
  361. package/src/components/Input/index.ts +2 -0
  362. package/src/components/Link/Link.theme.ts +16 -0
  363. package/src/components/Link/Link.tsx +10 -2
  364. package/src/components/List/List.stories.tsx +1 -1
  365. package/src/components/List/List.theme.ts +47 -0
  366. package/src/components/List/List.tsx +3 -3
  367. package/src/components/List/ListDropIndicator.tsx +1 -2
  368. package/src/components/List/Tree.stories.tsx +1 -1
  369. package/src/components/List/TreeDropIndicator.tsx +3 -3
  370. package/src/components/List/Treegrid.theme.ts +35 -0
  371. package/src/components/List/Treegrid.tsx +3 -4
  372. package/src/components/Main/Main.theme.ts +29 -0
  373. package/src/components/Main/Main.tsx +9 -7
  374. package/src/components/Main/constants.ts +6 -0
  375. package/src/components/Main/index.ts +1 -0
  376. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  377. package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
  378. package/src/components/MediaPlayer/index.ts +5 -0
  379. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  380. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  381. package/src/components/Menu/DropdownMenu.tsx +15 -15
  382. package/src/components/Menu/Menu.theme.ts +48 -0
  383. package/src/components/Message/Message.stories.tsx +43 -5
  384. package/src/components/Message/Message.theme.ts +44 -0
  385. package/src/components/Message/Message.tsx +76 -16
  386. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  387. package/src/components/Panel/Panel.theme.ts +41 -0
  388. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  389. package/src/components/Popover/Popover.theme.ts +40 -0
  390. package/src/components/Popover/Popover.tsx +7 -7
  391. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
  392. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  393. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  394. package/src/components/ScrollArea/index.ts +1 -0
  395. package/src/components/ScrollArea/scrollbar.ts +21 -0
  396. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  397. package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
  398. package/src/components/Select/Select.theme.ts +55 -0
  399. package/src/components/Select/Select.tsx +26 -10
  400. package/src/components/Separator/Separator.theme.ts +23 -0
  401. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  402. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  403. package/src/components/Splitter/Splitter.theme.ts +18 -0
  404. package/src/components/Splitter/Splitter.tsx +10 -15
  405. package/src/components/Status/Status.theme.ts +31 -0
  406. package/src/components/Status/Status.tsx +1 -2
  407. package/src/components/Tag/Tag.theme.ts +22 -0
  408. package/src/components/Toast/Toast.stories.tsx +41 -20
  409. package/src/components/Toast/Toast.theme.ts +56 -0
  410. package/src/components/Toast/Toast.tsx +95 -27
  411. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  412. package/src/components/Toolbar/Toolbar.tsx +67 -15
  413. package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
  414. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  415. package/src/components/Tooltip/Tooltip.tsx +18 -17
  416. package/src/components/Tooltip/index.ts +1 -0
  417. package/src/components/Tooltip/tooltipContent.ts +16 -0
  418. package/src/components/index.ts +7 -5
  419. package/src/exemplars/generics.stories.tsx +1 -2
  420. package/src/exemplars/slot.stories.tsx +5 -6
  421. package/src/exemplars/virtualizer.stories.tsx +0 -1
  422. package/src/hooks/useDensityContext.ts +1 -1
  423. package/src/hooks/useElevationContext.ts +1 -1
  424. package/src/hooks/useThemeContext.ts +1 -1
  425. package/src/hooks/useTranslationsContext.ts +1 -1
  426. package/src/index.ts +1 -0
  427. package/src/playground/Custom.stories.tsx +12 -32
  428. package/src/primitives/Container/Container.tsx +3 -1
  429. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  430. package/src/primitives/Flex/Flex.tsx +3 -1
  431. package/src/primitives/Grid/Grid.tsx +3 -1
  432. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  433. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  434. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  435. package/src/primitives/index.ts +4 -2
  436. package/src/testing/decorators/withLayout.tsx +7 -17
  437. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  438. package/src/testing/decorators/withTheme.tsx +21 -13
  439. package/src/theme/bindTheme.ts +13 -0
  440. package/src/theme/defaultTheme.ts +83 -0
  441. package/src/theme/index.ts +37 -0
  442. package/src/translations.ts +14 -0
  443. package/src/util/index.ts +2 -1
  444. package/src/util/mobile.ts +11 -0
  445. package/src/util/slots.ts +129 -0
  446. package/src/util/usePx.ts +4 -1
  447. package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
  448. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
  449. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
  450. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
  451. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  452. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  453. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  454. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  455. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  456. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  457. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  458. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  459. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  460. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  461. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  462. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  463. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  464. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  465. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  466. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  467. package/src/util/hasIosKeyboard.ts +0 -8
  468. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  469. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  470. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  471. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  472. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  473. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  474. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  475. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  476. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  477. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  478. /package/src/{primitives → components}/Panel/index.ts +0 -0
  479. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  480. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  481. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  482. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -0,0 +1,279 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { createContext } from '@radix-ui/react-context';
6
+ import { format as formatDate } from 'date-fns';
7
+ import React, {
8
+ type ComponentPropsWithoutRef,
9
+ type PropsWithChildren,
10
+ type ReactNode,
11
+ forwardRef,
12
+ useCallback,
13
+ useState,
14
+ } from 'react';
15
+
16
+ import { useThemeContext } from '../../hooks';
17
+ import { useTranslation } from '../../primitives';
18
+ import { translationKey } from '../../translations';
19
+ import { type ThemedClassName } from '../../util';
20
+ import { Calendar, type DateRange } from '../Calendar';
21
+ import { Icon } from '../Icon';
22
+ import { Popover } from '../Popover';
23
+
24
+ //
25
+ // Public API.
26
+ //
27
+ // Wraps the new react-aria-components-backed `<Calendar>` (single + range) in a Radix Popover,
28
+ // preserving the previous slot-style namespace: `<DatePicker.Root>`, `<DatePicker.Trigger>`,
29
+ // `<DatePicker.Content>`, `<DatePicker.Calendar>`. Multi-select is no longer supported (no
30
+ // in-repo consumers); use `<Calendar.Root>` directly with custom state if needed.
31
+ //
32
+
33
+ export type DatePickerMode = 'single' | 'range';
34
+
35
+ type ValueByMode = {
36
+ single: Date | undefined;
37
+ range: DateRange | undefined;
38
+ };
39
+
40
+ type DatePickerContextValue = {
41
+ mode: DatePickerMode;
42
+ value: ValueByMode[DatePickerMode];
43
+ setValue: (next: ValueByMode[DatePickerMode]) => void;
44
+ withTime: boolean;
45
+ open: boolean;
46
+ onOpenChange: (open: boolean) => void;
47
+ };
48
+
49
+ const [DatePickerProvider, useDatePickerContext] = createContext<DatePickerContextValue>('DatePicker');
50
+
51
+ //
52
+ // Root.
53
+ //
54
+
55
+ export type DatePickerRootProps<M extends DatePickerMode = 'single'> = {
56
+ mode?: M;
57
+ value?: ValueByMode[M];
58
+ defaultValue?: ValueByMode[M];
59
+ onValueChange?: (value: ValueByMode[M]) => void;
60
+ /** Preserve hour/minute on the selected date(s) when picking a new day. */
61
+ withTime?: boolean;
62
+ open?: boolean;
63
+ defaultOpen?: boolean;
64
+ onOpenChange?: (open: boolean) => void;
65
+ children?: ReactNode;
66
+ };
67
+
68
+ const DatePickerRoot = <M extends DatePickerMode = 'single'>({
69
+ mode = 'single' as M,
70
+ value,
71
+ defaultValue,
72
+ onValueChange,
73
+ withTime = false,
74
+ open,
75
+ defaultOpen,
76
+ onOpenChange,
77
+ children,
78
+ }: DatePickerRootProps<M>) => {
79
+ const [internalValue, setInternalValue] = useState<ValueByMode[M] | undefined>(defaultValue);
80
+ const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);
81
+
82
+ const controlled = value !== undefined || onValueChange !== undefined;
83
+ const resolvedValue = (controlled ? value : internalValue) as ValueByMode[DatePickerMode];
84
+
85
+ const setValue = useCallback(
86
+ (next: ValueByMode[DatePickerMode]) => {
87
+ if (!controlled) {
88
+ setInternalValue(next as ValueByMode[M] | undefined);
89
+ }
90
+ onValueChange?.(next as ValueByMode[M]);
91
+ },
92
+ [controlled, onValueChange],
93
+ );
94
+
95
+ const resolvedOpen = open ?? internalOpen;
96
+ const handleOpenChange = useCallback(
97
+ (next: boolean) => {
98
+ if (open === undefined) {
99
+ setInternalOpen(next);
100
+ }
101
+ onOpenChange?.(next);
102
+ },
103
+ [open, onOpenChange],
104
+ );
105
+
106
+ return (
107
+ <DatePickerProvider
108
+ mode={mode as DatePickerMode}
109
+ value={resolvedValue}
110
+ setValue={setValue}
111
+ withTime={withTime}
112
+ open={resolvedOpen}
113
+ onOpenChange={handleOpenChange}
114
+ >
115
+ <Popover.Root open={resolvedOpen} onOpenChange={handleOpenChange}>
116
+ {children}
117
+ </Popover.Root>
118
+ </DatePickerProvider>
119
+ );
120
+ };
121
+
122
+ //
123
+ // Trigger.
124
+ //
125
+
126
+ const formatValue = (mode: DatePickerMode, value: unknown, fmt: string): string | undefined => {
127
+ if (value === undefined || value === null) {
128
+ return undefined;
129
+ }
130
+ switch (mode) {
131
+ case 'single':
132
+ return formatDate(value as Date, fmt);
133
+ case 'range': {
134
+ const r = value as DateRange;
135
+ if (!r.from) {
136
+ return undefined;
137
+ }
138
+ return r.to ? `${formatDate(r.from, fmt)} – ${formatDate(r.to, fmt)}` : formatDate(r.from, fmt);
139
+ }
140
+ }
141
+ };
142
+
143
+ export type DatePickerTriggerProps = ThemedClassName<Omit<ComponentPropsWithoutRef<'button'>, 'children'>> &
144
+ PropsWithChildren<{
145
+ format?: string;
146
+ placeholder?: string;
147
+ /** Show the leading calendar icon in the default trigger. Defaults to true. */
148
+ icon?: boolean;
149
+ }>;
150
+
151
+ const DatePickerTrigger = forwardRef<HTMLButtonElement, DatePickerTriggerProps>(
152
+ ({ classNames, format: fmt = 'PPP', placeholder, icon = true, children, ...props }, forwardedRef) => {
153
+ const { tx } = useThemeContext();
154
+ const { t } = useTranslation(translationKey);
155
+ const { mode, value } = useDatePickerContext('DatePickerTrigger');
156
+
157
+ const placeholderText = placeholder ?? (t(`date-picker.placeholder.${mode}.label`) as string);
158
+ const label = formatValue(mode, value, fmt) ?? placeholderText;
159
+ const hasValue = label !== placeholderText;
160
+
161
+ return (
162
+ <Popover.Trigger asChild>
163
+ <button
164
+ ref={forwardedRef}
165
+ type='button'
166
+ {...props}
167
+ className={tx('datePicker.trigger', { hasValue }, classNames) ?? undefined}
168
+ >
169
+ {children ?? (
170
+ <>
171
+ {icon && <Icon size={4} icon='ph--calendar--regular' />}
172
+ {label}
173
+ </>
174
+ )}
175
+ </button>
176
+ </Popover.Trigger>
177
+ );
178
+ },
179
+ );
180
+
181
+ DatePickerTrigger.displayName = 'DatePickerTrigger';
182
+
183
+ //
184
+ // Content.
185
+ //
186
+
187
+ export type DatePickerContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof Popover.Content>>;
188
+
189
+ const DatePickerContent = forwardRef<HTMLDivElement, DatePickerContentProps>(
190
+ ({ classNames, children, ...props }, forwardedRef) => {
191
+ const { tx } = useThemeContext();
192
+ return (
193
+ <Popover.Portal>
194
+ <Popover.Content ref={forwardedRef} align='start' sideOffset={4} {...props}>
195
+ <div className={tx('datePicker.content', {}, classNames)}>{children}</div>
196
+ </Popover.Content>
197
+ </Popover.Portal>
198
+ );
199
+ },
200
+ );
201
+
202
+ DatePickerContent.displayName = 'DatePickerContent';
203
+
204
+ //
205
+ // Calendar — single or range, time-of-day preservation, auto-dismiss on completion.
206
+ //
207
+
208
+ const carryTime = (oldDate: Date | undefined, newDate: Date | undefined): Date | undefined => {
209
+ if (!newDate) {
210
+ return newDate;
211
+ }
212
+ if (!oldDate) {
213
+ return newDate;
214
+ }
215
+ const out = new Date(newDate);
216
+ out.setHours(oldDate.getHours(), oldDate.getMinutes(), 0, 0);
217
+ return out;
218
+ };
219
+
220
+ const DatePickerCalendar = ({ classNames }: { classNames?: string } = {}) => {
221
+ const { mode, value, setValue, withTime, onOpenChange } = useDatePickerContext('DatePickerCalendar');
222
+
223
+ if (mode === 'single') {
224
+ const date = value as Date | undefined;
225
+ return (
226
+ <Calendar.Root
227
+ mode='single'
228
+ classNames={classNames}
229
+ selected={date}
230
+ onSelect={(next) => {
231
+ const merged = withTime ? carryTime(date, next) : next;
232
+ setValue(merged);
233
+ if (next !== undefined) {
234
+ onOpenChange(false);
235
+ }
236
+ }}
237
+ />
238
+ );
239
+ }
240
+
241
+ const range = value as DateRange | undefined;
242
+ return (
243
+ <Calendar.Root
244
+ mode='range'
245
+ classNames={classNames}
246
+ selected={range}
247
+ onSelect={(next) => {
248
+ if (!next) {
249
+ setValue(undefined);
250
+ return;
251
+ }
252
+ const merged: DateRange = withTime
253
+ ? { from: carryTime(range?.from, next.from)!, to: carryTime(range?.to, next.to) }
254
+ : next;
255
+ setValue(merged);
256
+ if (merged.from && merged.to) {
257
+ onOpenChange(false);
258
+ }
259
+ }}
260
+ />
261
+ );
262
+ };
263
+
264
+ DatePickerCalendar.displayName = 'DatePickerCalendar';
265
+
266
+ //
267
+ // Public namespace.
268
+ //
269
+
270
+ export const DatePicker = {
271
+ Root: DatePickerRoot,
272
+ Trigger: DatePickerTrigger,
273
+ Content: DatePickerContent,
274
+ Calendar: DatePickerCalendar,
275
+ };
276
+
277
+ export { useDatePickerContext };
278
+
279
+ export type { ValueByMode };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ export * from './DatePicker';
@@ -6,18 +6,17 @@ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
6
6
  import { createContext } from '@radix-ui/react-context';
7
7
  import React, { type ForwardRefExoticComponent, type FunctionComponent, forwardRef } from 'react';
8
8
 
9
- import { type DialogSize } from '@dxos/ui-theme';
10
-
11
9
  import { useThemeContext } from '../../hooks';
12
- import { Column } from '../../primitives';
10
+ import { ElevationProvider } from '../../primitives';
11
+ import { type DialogSize } from '../../theme';
13
12
  import { type ThemedClassName } from '../../util';
14
- import { ElevationProvider } from '../ElevationProvider';
13
+ import { Column } from '../Column';
15
14
  import {
16
15
  Dialog,
17
16
  type DialogHeaderProps,
18
17
  type DialogBodyProps,
19
18
  type DialogActionBarProps,
20
- type DialogCloseIconButtonProps,
19
+ type DialogActionIconButtonProps,
21
20
  } from './Dialog';
22
21
 
23
22
  //
@@ -38,7 +37,7 @@ const AlertDialogRoot: FunctionComponent<AlertDialogRootProps> = (props) => (
38
37
 
39
38
  type AlertDialogTriggerProps = AlertDialogPrimitive.AlertDialogTriggerProps;
40
39
 
41
- const AlertDialogTrigger: FunctionComponent<AlertDialogTriggerProps> = AlertDialogPrimitive.Trigger;
40
+ const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
42
41
 
43
42
  //
44
43
  // Portal
@@ -46,7 +45,7 @@ const AlertDialogTrigger: FunctionComponent<AlertDialogTriggerProps> = AlertDial
46
45
 
47
46
  type AlertDialogPortalProps = AlertDialogPrimitive.AlertDialogPortalProps;
48
47
 
49
- const AlertDialogPortal: FunctionComponent<AlertDialogPortalProps> = AlertDialogPrimitive.Portal;
48
+ const AlertDialogPortal = AlertDialogPrimitive.Portal;
50
49
 
51
50
  //
52
51
  // Cancel
@@ -54,7 +53,7 @@ const AlertDialogPortal: FunctionComponent<AlertDialogPortalProps> = AlertDialog
54
53
 
55
54
  type AlertDialogCancelProps = AlertDialogPrimitive.AlertDialogCancelProps;
56
55
 
57
- const AlertDialogCancel: FunctionComponent<AlertDialogCancelProps> = AlertDialogPrimitive.Cancel;
56
+ const AlertDialogCancel = AlertDialogPrimitive.Cancel;
58
57
 
59
58
  //
60
59
  // Action
@@ -62,7 +61,7 @@ const AlertDialogCancel: FunctionComponent<AlertDialogCancelProps> = AlertDialog
62
61
 
63
62
  type AlertDialogActionProps = AlertDialogPrimitive.AlertDialogActionProps;
64
63
 
65
- const AlertDialogAction: FunctionComponent<AlertDialogActionProps> = AlertDialogPrimitive.Action;
64
+ const AlertDialogAction = AlertDialogPrimitive.Action;
66
65
 
67
66
  //
68
67
  // Context
@@ -70,8 +69,8 @@ const AlertDialogAction: FunctionComponent<AlertDialogActionProps> = AlertDialog
70
69
 
71
70
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
72
71
 
73
- const ALERT_DIALOG_OVERLAY_NAME = 'AlertDialogOverlay';
74
- const ALERT_DIALOG_CONTENT_NAME = 'AlertDialogContent';
72
+ const ALERT_DIALOG_OVERLAY_NAME = 'AlertDialog.Overlay';
73
+ const ALERT_DIALOG_CONTENT_NAME = 'AlertDialog.Content';
75
74
 
76
75
  const [OverlayLayoutProvider, useOverlayLayoutContext] = createContext<OverlayLayoutContextValue>(
77
76
  ALERT_DIALOG_OVERLAY_NAME,
@@ -121,9 +120,6 @@ const AlertDialogContent: ForwardRefExoticComponent<AlertDialogContentProps> = f
121
120
  <AlertDialogPrimitive.Content
122
121
  {...props}
123
122
  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}
127
123
  ref={forwardedRef}
128
124
  >
129
125
  <Column.Root classNames='dx-expander' gutter='sm'>
@@ -189,7 +185,7 @@ export const AlertDialog = {
189
185
  Title: AlertDialogTitle,
190
186
  Description: AlertDialogDescription,
191
187
  ActionBar: Dialog.ActionBar,
192
- CloseIconButton: Dialog.CloseIconButton,
188
+ ActionIconButton: Dialog.ActionIconButton,
193
189
  // AlertDialog-specific dismissal.
194
190
  Cancel: AlertDialogCancel,
195
191
  Action: AlertDialogAction,
@@ -209,5 +205,5 @@ export type {
209
205
  DialogHeaderProps as AlertDialogHeaderProps,
210
206
  DialogBodyProps as AlertDialogBodyProps,
211
207
  DialogActionBarProps as AlertDialogActionBarProps,
212
- DialogCloseIconButtonProps as AlertDialogCloseIconButtonProps,
208
+ DialogActionIconButtonProps as AlertDialogActionIconButtonProps,
213
209
  };
@@ -38,7 +38,7 @@ const DefaultStory = ({ size, title, description, openTrigger, closeTrigger, blo
38
38
  <Dialog.Title>{title}</Dialog.Title>
39
39
  {closeTrigger && (
40
40
  <Dialog.Close asChild>
41
- <Dialog.CloseIconButton />
41
+ <Dialog.ActionIconButton action='close' />
42
42
  </Dialog.Close>
43
43
  )}
44
44
  </Dialog.Header>
@@ -77,7 +77,7 @@ const ScrollingStory = ({ size, title, description, openTrigger, closeTrigger, b
77
77
  <Dialog.Title>{title}</Dialog.Title>
78
78
  {closeTrigger && (
79
79
  <Dialog.Close asChild>
80
- <Dialog.CloseIconButton />
80
+ <Dialog.ActionIconButton action='close' />
81
81
  </Dialog.Close>
82
82
  )}
83
83
  </Dialog.Header>
@@ -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
+ };
@@ -14,14 +14,15 @@ import React, {
14
14
  } from 'react';
15
15
  import { useTranslation } from 'react-i18next';
16
16
 
17
- import { composableProps, type DialogSize, osTranslations, slottable } from '@dxos/ui-theme';
17
+ import { osTranslations } from '@dxos/ui-theme';
18
18
  import { type SlottableProps } from '@dxos/ui-types';
19
19
 
20
20
  import { useThemeContext } from '../../hooks';
21
- import { Column } from '../../primitives';
22
- import { type ThemedClassName } from '../../util';
21
+ import { ElevationProvider } from '../../primitives';
22
+ import { type DialogSize } from '../../theme';
23
+ import { type ThemedClassName, composableProps, slottable } from '../../util';
23
24
  import { IconButton } from '../Button';
24
- import { ElevationProvider } from '../ElevationProvider';
25
+ import { Column } from '../Column';
25
26
 
26
27
  //
27
28
  // Root
@@ -40,13 +41,15 @@ const DialogRoot: FunctionComponent<DialogRootProps> = (props) => (
40
41
  </ElevationProvider>
41
42
  );
42
43
 
44
+ DialogRoot.displayName = 'Dialog.Root';
45
+
43
46
  //
44
47
  // Trigger
45
48
  //
46
49
 
47
50
  type DialogTriggerProps = DialogPrimitive.DialogTriggerProps;
48
51
 
49
- const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Trigger;
52
+ const DialogTrigger = DialogPrimitive.Trigger;
50
53
 
51
54
  //
52
55
  // Portal
@@ -54,13 +57,13 @@ const DialogTrigger: FunctionComponent<DialogTriggerProps> = DialogPrimitive.Tri
54
57
 
55
58
  type DialogPortalProps = DialogPrimitive.DialogPortalProps;
56
59
 
57
- const DialogPortal: FunctionComponent<DialogPortalProps> = DialogPrimitive.Portal;
60
+ const DialogPortal = DialogPrimitive.Portal;
58
61
 
59
62
  //
60
63
  // Overlay
61
64
  //
62
65
 
63
- const DIALOG_OVERLAY_NAME = 'DialogOverlay';
66
+ const DIALOG_OVERLAY_NAME = 'Dialog.Overlay';
64
67
 
65
68
  type OverlayLayoutContextValue = { inOverlayLayout?: boolean };
66
69
 
@@ -96,7 +99,7 @@ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
96
99
  // Content
97
100
  //
98
101
 
99
- const DIALOG_CONTENT_NAME = 'DialogContent';
102
+ const DIALOG_CONTENT_NAME = 'Dialog.Content';
100
103
 
101
104
  type DialogContentProps = ThemedClassName<ComponentPropsWithRef<typeof DialogPrimitive.Content>> & {
102
105
  size?: DialogSize;
@@ -151,20 +154,35 @@ const DialogHeader = slottable<HTMLDivElement>(({ children, asChild, ...props },
151
154
  );
152
155
  });
153
156
 
157
+ DialogHeader.displayName = 'Dialog.Header';
158
+
154
159
  //
155
- // CloseIconButton
160
+ // ActionIconButton
156
161
  //
157
162
 
158
- 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
+ };
159
177
 
160
- const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButtonProps>(
161
- ({ label, ...props }, forwardedRef) => {
178
+ const DialogActionIconButton = forwardRef<HTMLButtonElement, DialogActionIconButtonProps>(
179
+ ({ action, label, ...props }, forwardedRef) => {
162
180
  const { t } = useTranslation(osTranslations);
163
181
  return (
164
182
  <IconButton
165
183
  {...props}
166
- label={label ?? t('close-dialog.label')}
167
- icon='ph--x--regular'
184
+ label={label ?? t(DIALOG_ACTION_LABEL_KEYS[action])}
185
+ icon={DIALOG_ACTION_ICONS[action]}
168
186
  iconOnly
169
187
  size={4}
170
188
  variant='ghost'
@@ -174,6 +192,8 @@ const DialogCloseIconButton = forwardRef<HTMLButtonElement, DialogCloseIconButto
174
192
  },
175
193
  );
176
194
 
195
+ DialogActionIconButton.displayName = 'Dialog.ActionIconButton';
196
+
177
197
  //
178
198
  // Body
179
199
  //
@@ -191,6 +211,8 @@ const DialogBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, f
191
211
  );
192
212
  });
193
213
 
214
+ DialogBody.displayName = 'Dialog.Body';
215
+
194
216
  //
195
217
  // Title
196
218
  //
@@ -206,6 +228,8 @@ const DialogTitle = forwardRef<HTMLHeadingElement, DialogTitleProps>(
206
228
  },
207
229
  );
208
230
 
231
+ DialogTitle.displayName = 'Dialog.Title';
232
+
209
233
  //
210
234
  // Description
211
235
  //
@@ -225,6 +249,8 @@ const DialogDescription = forwardRef<HTMLParagraphElement, DialogDescriptionProp
225
249
  },
226
250
  );
227
251
 
252
+ DialogDescription.displayName = 'Dialog.Description';
253
+
228
254
  //
229
255
  // ActionBar
230
256
  //
@@ -242,13 +268,15 @@ const DialogActionBar = slottable<HTMLDivElement>(({ children, asChild, ...props
242
268
  );
243
269
  });
244
270
 
271
+ DialogActionBar.displayName = 'Dialog.ActionBar';
272
+
245
273
  //
246
274
  // Close
247
275
  //
248
276
 
249
277
  type DialogCloseProps = DialogPrimitive.DialogCloseProps;
250
278
 
251
- const DialogClose: FunctionComponent<DialogCloseProps> = DialogPrimitive.Close;
279
+ const DialogClose = DialogPrimitive.Close;
252
280
 
253
281
  //
254
282
  // Dialog
@@ -266,7 +294,7 @@ export const Dialog = {
266
294
  Description: DialogDescription,
267
295
  ActionBar: DialogActionBar,
268
296
  Close: DialogClose,
269
- CloseIconButton: DialogCloseIconButton,
297
+ ActionIconButton: DialogActionIconButton,
270
298
  };
271
299
 
272
300
  export type {
@@ -281,5 +309,6 @@ export type {
281
309
  DialogDescriptionProps,
282
310
  DialogActionBarProps,
283
311
  DialogCloseProps,
284
- DialogCloseIconButtonProps,
312
+ DialogActionIconButtonAction,
313
+ DialogActionIconButtonProps,
285
314
  };
@@ -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>