@dxos/react-ui 0.8.4-main.d05539e30a → 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 (375) hide show
  1. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  2. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  4. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +2403 -1562
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +9 -6
  9. package/dist/lib/browser/testing/index.mjs.map +3 -3
  10. package/dist/lib/browser/translations.mjs +1 -1
  11. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
  12. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-XCFLA74M.mjs → chunk-FPVTVXND.mjs} +11 -2
  14. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +2403 -1562
  16. package/dist/lib/node-esm/index.mjs.map +4 -4
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/testing/index.mjs +9 -6
  19. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  20. package/dist/lib/node-esm/translations.mjs +1 -1
  21. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  22. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  26. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.d.ts +1 -1
  28. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  29. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  30. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  34. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  36. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  37. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  38. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  39. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  40. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  42. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.d.ts +51 -44
  44. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  45. package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
  46. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  47. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  48. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  49. package/dist/types/src/components/Carousel/Carousel.d.ts +2 -6
  50. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
  51. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  52. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  53. package/dist/types/src/{primitives → components}/Column/Column.d.ts.map +1 -1
  54. package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  56. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  57. package/dist/types/src/components/Column/index.d.ts +3 -0
  58. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  60. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  61. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  62. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  63. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  64. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  65. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  66. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  67. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  68. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  69. package/dist/types/src/components/Dialog/AlertDialog.d.ts +8 -8
  70. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  71. package/dist/types/src/components/Dialog/Dialog.d.ts +9 -7
  72. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  73. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  74. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  75. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  76. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  77. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  78. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  79. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  80. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  81. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  82. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  83. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  84. package/dist/types/src/components/Icon/index.d.ts +1 -0
  85. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  86. package/dist/types/src/components/Input/Input.d.ts +81 -3
  87. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  88. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  89. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  91. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  92. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  93. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  94. package/dist/types/src/components/Input/constants.d.ts +2 -0
  95. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  96. package/dist/types/src/components/Input/index.d.ts +2 -0
  97. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  98. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  99. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  100. package/dist/types/src/components/List/List.d.ts.map +1 -1
  101. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  102. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  103. package/dist/types/src/components/List/Treegrid.d.ts +1 -1
  104. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  105. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  106. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  107. package/dist/types/src/components/Main/Main.d.ts +2 -2
  108. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  109. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  110. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  111. package/dist/types/src/components/Main/constants.d.ts +3 -0
  112. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  113. package/dist/types/src/components/Main/index.d.ts +1 -0
  114. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  115. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +9 -12
  116. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -1
  117. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +1 -1
  118. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  121. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  122. package/dist/types/src/components/Message/Message.d.ts +2 -2
  123. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  124. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  125. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  127. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  128. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +1 -1
  129. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  130. package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  132. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  133. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  135. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  136. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  137. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  138. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  139. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  140. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  141. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  142. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  143. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +13 -19
  144. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  146. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  147. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  148. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  149. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  150. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  151. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  152. package/dist/types/src/components/Splitter/Splitter.d.ts +3 -5
  153. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  154. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  155. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  156. package/dist/types/src/components/Status/Status.d.ts +1 -1
  157. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  158. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  159. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  160. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  161. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  162. package/dist/types/src/components/Toast/Toast.d.ts +13 -10
  163. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  164. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  165. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  167. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Toolbar/Toolbar.d.ts +19 -7
  169. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  171. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  172. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  174. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  175. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  176. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  177. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  178. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  179. package/dist/types/src/components/index.d.ts +5 -4
  180. package/dist/types/src/components/index.d.ts.map +1 -1
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  182. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  183. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  184. package/dist/types/src/index.d.ts +1 -0
  185. package/dist/types/src/index.d.ts.map +1 -1
  186. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  187. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  188. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  189. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  190. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  191. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  192. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  193. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  194. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  195. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -1
  196. package/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  197. package/dist/types/src/{components → primitives}/ThemeProvider/index.d.ts +1 -1
  198. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  199. package/dist/types/src/primitives/index.d.ts +3 -2
  200. package/dist/types/src/primitives/index.d.ts.map +1 -1
  201. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  202. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  203. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  204. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  205. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  206. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  207. package/dist/types/src/theme/index.d.ts +31 -0
  208. package/dist/types/src/theme/index.d.ts.map +1 -0
  209. package/dist/types/src/translations.d.ts +9 -0
  210. package/dist/types/src/translations.d.ts.map +1 -1
  211. package/dist/types/src/util/index.d.ts +2 -1
  212. package/dist/types/src/util/index.d.ts.map +1 -1
  213. package/dist/types/src/util/mobile.d.ts +5 -0
  214. package/dist/types/src/util/mobile.d.ts.map +1 -0
  215. package/dist/types/src/util/slots.d.ts +57 -0
  216. package/dist/types/src/util/slots.d.ts.map +1 -0
  217. package/dist/types/src/util/usePx.d.ts.map +1 -1
  218. package/dist/types/tsconfig.tsbuildinfo +1 -1
  219. package/package.json +19 -17
  220. package/src/components/Avatars/Avatar.theme.ts +93 -0
  221. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  222. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  223. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  224. package/src/components/Button/Button.theme.ts +31 -0
  225. package/src/components/Button/Button.tsx +1 -1
  226. package/src/components/Button/IconButton.stories.tsx +50 -2
  227. package/src/components/Button/IconButton.theme.ts +21 -0
  228. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  229. package/src/components/Calendar/Calendar.theme.ts +74 -0
  230. package/src/components/Calendar/Calendar.tsx +196 -0
  231. package/src/components/Calendar/index.ts +5 -0
  232. package/src/components/Card/Card.stories.tsx +40 -19
  233. package/src/components/Card/Card.theme.ts +93 -0
  234. package/src/components/Card/Card.tsx +121 -147
  235. package/src/components/Carousel/Carousel.tsx +2 -10
  236. package/src/components/Clipboard/CopyButton.tsx +1 -1
  237. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  238. package/src/components/Column/Column.theme.ts +48 -0
  239. package/src/{primitives → components}/Column/Column.tsx +2 -1
  240. package/src/{primitives → components}/Column/index.ts +1 -0
  241. package/src/components/Column/withColumn.ts +27 -0
  242. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  243. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  244. package/src/components/DatePicker/DatePicker.tsx +279 -0
  245. package/src/components/DatePicker/index.ts +5 -0
  246. package/src/components/Dialog/AlertDialog.tsx +12 -13
  247. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  248. package/src/components/Dialog/Dialog.theme.ts +61 -0
  249. package/src/components/Dialog/Dialog.tsx +46 -17
  250. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  251. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  252. package/src/components/Focus/Focus.theme.ts +32 -0
  253. package/src/components/Focus/Focus.tsx +1 -1
  254. package/src/components/Icon/Icon.theme.ts +45 -0
  255. package/src/components/Icon/IconBlock.tsx +38 -0
  256. package/src/components/Icon/index.ts +1 -0
  257. package/src/components/Image/Image.stories.tsx +1 -1
  258. package/src/components/Input/Input.stories.tsx +132 -29
  259. package/src/components/Input/Input.theme.ts +191 -0
  260. package/src/components/Input/Input.tsx +207 -2
  261. package/src/components/Input/SegmentedInput.tsx +454 -0
  262. package/src/components/Input/constants.ts +5 -0
  263. package/src/components/Input/index.ts +2 -0
  264. package/src/components/Link/Link.theme.ts +16 -0
  265. package/src/components/List/List.theme.ts +47 -0
  266. package/src/components/List/List.tsx +2 -2
  267. package/src/components/List/ListDropIndicator.tsx +1 -1
  268. package/src/components/List/TreeDropIndicator.tsx +3 -3
  269. package/src/components/List/Treegrid.theme.ts +35 -0
  270. package/src/components/List/Treegrid.tsx +3 -4
  271. package/src/components/Main/Main.theme.ts +29 -0
  272. package/src/components/Main/Main.tsx +9 -7
  273. package/src/components/Main/constants.ts +6 -0
  274. package/src/components/Main/index.ts +1 -0
  275. package/src/components/MediaPlayer/MediaPlayer.tsx +61 -36
  276. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  277. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  278. package/src/components/Menu/DropdownMenu.tsx +15 -15
  279. package/src/components/Menu/Menu.theme.ts +48 -0
  280. package/src/components/Message/Message.stories.tsx +42 -4
  281. package/src/components/Message/Message.theme.ts +44 -0
  282. package/src/components/Message/Message.tsx +63 -20
  283. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  284. package/src/components/Panel/Panel.theme.ts +42 -0
  285. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  286. package/src/components/Popover/Popover.theme.ts +40 -0
  287. package/src/components/Popover/Popover.tsx +7 -7
  288. package/src/components/ScrollArea/ScrollArea.stories.tsx +1 -1
  289. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  290. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  291. package/src/components/ScrollArea/index.ts +1 -0
  292. package/src/components/ScrollArea/scrollbar.ts +21 -0
  293. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  294. package/src/components/ScrollContainer/ScrollContainer.tsx +57 -55
  295. package/src/components/Select/Select.theme.ts +55 -0
  296. package/src/components/Select/Select.tsx +26 -10
  297. package/src/components/Separator/Separator.theme.ts +23 -0
  298. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  299. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  300. package/src/components/Splitter/Splitter.theme.ts +18 -0
  301. package/src/components/Splitter/Splitter.tsx +10 -15
  302. package/src/components/Status/Status.theme.ts +31 -0
  303. package/src/components/Status/Status.tsx +1 -2
  304. package/src/components/Tag/Tag.theme.ts +22 -0
  305. package/src/components/Toast/Toast.stories.tsx +41 -20
  306. package/src/components/Toast/Toast.theme.ts +56 -0
  307. package/src/components/Toast/Toast.tsx +95 -27
  308. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  309. package/src/components/Toolbar/Toolbar.tsx +63 -13
  310. package/src/components/Tooltip/Tooltip.stories.tsx +0 -9
  311. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  312. package/src/components/Tooltip/Tooltip.tsx +4 -4
  313. package/src/components/Tooltip/index.ts +1 -0
  314. package/src/components/Tooltip/tooltipContent.ts +16 -0
  315. package/src/components/index.ts +5 -5
  316. package/src/exemplars/generics.stories.tsx +1 -2
  317. package/src/exemplars/slot.stories.tsx +2 -1
  318. package/src/hooks/useDensityContext.ts +1 -1
  319. package/src/hooks/useElevationContext.ts +1 -1
  320. package/src/hooks/useThemeContext.ts +1 -1
  321. package/src/hooks/useTranslationsContext.ts +1 -1
  322. package/src/index.ts +1 -0
  323. package/src/playground/Custom.stories.tsx +12 -32
  324. package/src/primitives/Container/Container.tsx +3 -1
  325. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  326. package/src/primitives/Flex/Flex.tsx +3 -1
  327. package/src/primitives/Grid/Grid.tsx +3 -1
  328. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  329. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  330. package/src/{components → primitives}/ThemeProvider/index.ts +1 -1
  331. package/src/primitives/index.ts +4 -2
  332. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  333. package/src/testing/decorators/withTheme.tsx +21 -13
  334. package/src/theme/bindTheme.ts +13 -0
  335. package/src/theme/defaultTheme.ts +83 -0
  336. package/src/theme/index.ts +37 -0
  337. package/src/translations.ts +9 -0
  338. package/src/util/index.ts +2 -1
  339. package/src/util/mobile.ts +11 -0
  340. package/src/util/slots.ts +129 -0
  341. package/src/util/usePx.ts +4 -1
  342. package/dist/lib/browser/chunk-A5QCIG5R.mjs +0 -24
  343. package/dist/lib/browser/chunk-A5QCIG5R.mjs.map +0 -7
  344. package/dist/lib/browser/chunk-LY5XDQR5.mjs +0 -846
  345. package/dist/lib/browser/chunk-LY5XDQR5.mjs.map +0 -7
  346. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs +0 -848
  347. package/dist/lib/node-esm/chunk-NGKLIKP3.mjs.map +0 -7
  348. package/dist/lib/node-esm/chunk-XCFLA74M.mjs.map +0 -7
  349. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  350. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  351. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  352. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  353. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  354. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  355. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  356. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  357. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  358. package/src/util/hasIosKeyboard.ts +0 -8
  359. /package/dist/types/src/{primitives → components}/Column/Column.d.ts +0 -0
  360. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  361. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  362. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  363. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  364. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  365. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  366. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  367. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  368. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  369. /package/dist/types/src/{components → primitives}/ThemeProvider/TranslationsProvider.d.ts +0 -0
  370. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  371. /package/src/{primitives → components}/Panel/index.ts +0 -0
  372. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  373. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  374. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  375. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Column-aware theme utilities.
7
+ * Components apply these in their theme functions to participate in the Column grid
8
+ * without importing Column React components.
9
+ *
10
+ * CSS custom property cascade:
11
+ * - Column.Root sets `--dx-col: 2 / span 1` (center column placement).
12
+ * - ScrollArea.Viewport resets `--dx-col: auto` after consuming `--gutter`.
13
+ * - Components apply `grid-column: var(--dx-col, auto)` to auto-center in Column
14
+ * or do nothing outside Column / inside ScrollArea.
15
+ */
16
+ export const withColumn = {
17
+ /** Centers element in the Column grid via --dx-col. No-op outside Column or inside ScrollArea. */
18
+ center: () => '[grid-column:var(--dx-col,auto)]',
19
+
20
+ /** Propagates the Column grid to children via subgrid. No-op outside Column.
21
+ * Direct children default to center column unless they are a dx-container (ScrollArea). */
22
+ propagate: () =>
23
+ '[.dx-column-root_&]:col-span-full [.dx-column-root_&]:grid [.dx-column-root_&]:grid-cols-subgrid [.dx-column-root_&]:[&>*:not(.dx-container)]:[grid-column:var(--dx-col,auto)]',
24
+
25
+ /** Resets --dx-col after consuming --gutter. Applied by ScrollArea.Viewport. */
26
+ consumed: () => '[--dx-col:auto]',
27
+ };
@@ -0,0 +1,102 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import { format } from 'date-fns';
7
+ import React, { useState } from 'react';
8
+
9
+ import { withTheme } from '../../testing';
10
+ import { translations } from '../../translations';
11
+ import { type DateRange } from '../Calendar';
12
+ import { Input } from '../Input';
13
+ import { DatePicker } from './DatePicker';
14
+
15
+ const toTime = (date: Date | undefined) => (date ? format(date, 'HH:mm') : '');
16
+ const applyTime = (date: Date | undefined, time: string): Date => {
17
+ const [hours, minutes] = time.split(':').map((part) => parseInt(part, 10));
18
+ const out = date ? new Date(date) : new Date();
19
+ out.setHours(Number.isFinite(hours) ? hours : 0, Number.isFinite(minutes) ? minutes : 0, 0, 0);
20
+ return out;
21
+ };
22
+
23
+ const meta: Meta<typeof DatePicker.Root> = {
24
+ title: 'ui/react-ui-core/components/DatePicker',
25
+ decorators: [withTheme()],
26
+ parameters: { layout: 'centered', translations },
27
+ };
28
+
29
+ export default meta;
30
+
31
+ type Story = StoryObj;
32
+
33
+ export const Single: Story = {
34
+ render: () => {
35
+ const [value, setValue] = useState<Date | undefined>();
36
+ return (
37
+ <DatePicker.Root mode='single' value={value} onValueChange={setValue}>
38
+ <DatePicker.Trigger />
39
+ <DatePicker.Content>
40
+ <DatePicker.Calendar />
41
+ </DatePicker.Content>
42
+ </DatePicker.Root>
43
+ );
44
+ },
45
+ };
46
+
47
+ export const Range: Story = {
48
+ render: () => {
49
+ const [value, setValue] = useState<DateRange | undefined>();
50
+ return (
51
+ <DatePicker.Root mode='range' value={value} onValueChange={setValue}>
52
+ <DatePicker.Trigger />
53
+ <DatePicker.Content>
54
+ <DatePicker.Calendar />
55
+ </DatePicker.Content>
56
+ </DatePicker.Root>
57
+ );
58
+ },
59
+ };
60
+
61
+ export const SingleWithTime: Story = {
62
+ render: () => {
63
+ const [value, setValue] = useState<Date | undefined>();
64
+ return (
65
+ <DatePicker.Root mode='single' withTime value={value} onValueChange={setValue}>
66
+ <DatePicker.Trigger format='PPP p' />
67
+ <DatePicker.Content>
68
+ <DatePicker.Calendar />
69
+ <Input.Root>
70
+ <Input.Time value={toTime(value)} onValueChange={(next) => setValue(applyTime(value, next))} />
71
+ </Input.Root>
72
+ </DatePicker.Content>
73
+ </DatePicker.Root>
74
+ );
75
+ },
76
+ };
77
+
78
+ export const RangeWithTime: Story = {
79
+ render: () => {
80
+ const [value, setValue] = useState<DateRange | undefined>();
81
+ return (
82
+ <DatePicker.Root mode='range' withTime value={value} onValueChange={setValue}>
83
+ <DatePicker.Trigger format='PPP p' />
84
+ <DatePicker.Content>
85
+ <DatePicker.Calendar />
86
+ <Input.Root>
87
+ <Input.Time
88
+ value={toTime(value?.from)}
89
+ onValueChange={(next) => setValue(value ? { ...value, from: applyTime(value.from, next) } : undefined)}
90
+ />
91
+ </Input.Root>
92
+ <Input.Root>
93
+ <Input.Time
94
+ value={toTime(value?.to)}
95
+ onValueChange={(next) => setValue(value?.from ? { ...value, to: applyTime(value.to, next) } : undefined)}
96
+ />
97
+ </Input.Root>
98
+ </DatePicker.Content>
99
+ </DatePicker.Root>
100
+ );
101
+ },
102
+ };
@@ -0,0 +1,35 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ export type DatePickerStyleProps = Partial<{
9
+ hasValue: boolean;
10
+ }>;
11
+
12
+ const trigger: ComponentFunction<DatePickerStyleProps> = ({ hasValue }, ...etc) =>
13
+ mx(
14
+ 'inline-flex w-fit items-center gap-2 px-2 rounded-sm border border-separator',
15
+ 'bg-input-surface text-base-fg',
16
+ 'hover:bg-hover-surface focus-visible:outline-2 focus-visible:outline-primary-500',
17
+ !hasValue && 'text-description',
18
+ ...etc,
19
+ );
20
+
21
+ const content: ComponentFunction<DatePickerStyleProps> = (_p, ...etc) => mx('flex flex-col gap-2 p-2', ...etc);
22
+
23
+ const timeField: ComponentFunction<DatePickerStyleProps> = (_p, ...etc) =>
24
+ mx(
25
+ 'flex items-center gap-2 px-2 py-1',
26
+ '[&_input]:bg-input-surface [&_input]:border [&_input]:border-separator',
27
+ '[&_input]:rounded-sm [&_input]:px-2 [&_input]:py-1',
28
+ ...etc,
29
+ );
30
+
31
+ export const datePickerTheme: Theme<DatePickerStyleProps> = {
32
+ trigger,
33
+ content,
34
+ timeField,
35
+ };
@@ -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,
@@ -189,7 +188,7 @@ export const AlertDialog = {
189
188
  Title: AlertDialogTitle,
190
189
  Description: AlertDialogDescription,
191
190
  ActionBar: Dialog.ActionBar,
192
- CloseIconButton: Dialog.CloseIconButton,
191
+ ActionIconButton: Dialog.ActionIconButton,
193
192
  // AlertDialog-specific dismissal.
194
193
  Cancel: AlertDialogCancel,
195
194
  Action: AlertDialogAction,
@@ -209,5 +208,5 @@ export type {
209
208
  DialogHeaderProps as AlertDialogHeaderProps,
210
209
  DialogBodyProps as AlertDialogBodyProps,
211
210
  DialogActionBarProps as AlertDialogActionBarProps,
212
- DialogCloseIconButtonProps as AlertDialogCloseIconButtonProps,
211
+ DialogActionIconButtonProps as AlertDialogActionIconButtonProps,
213
212
  };
@@ -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
+ };