@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
@@ -25,18 +25,20 @@ import React, {
25
25
  import { addEventListener } from '@dxos/async';
26
26
  import { log } from '@dxos/log';
27
27
  import { useForwardedRef, useMediaQuery } from '@dxos/react-hooks';
28
- import { type MainStyleProps, osTranslations } from '@dxos/ui-theme';
28
+ import { osTranslations } from '@dxos/ui-theme';
29
29
 
30
30
  import { useThemeContext } from '../../hooks';
31
+ import { type Label, toLocalizedString, useTranslation } from '../../primitives';
32
+ import { type MainStyleProps } from '../../theme';
31
33
  import { type ThemedClassName } from '../../util';
32
- import { type Label, toLocalizedString, useTranslation } from '../ThemeProvider';
33
34
  import { useSwipeToDismiss } from './useSwipeToDismiss';
34
35
 
35
36
  const MAIN_NAME = 'Main';
36
- const MAIN_ROOT_NAME = 'MainRoot';
37
- const MAIN_OVERLAY_NAME = 'MainOverlay';
38
- const NAVIGATION_SIDEBAR_NAME = 'NavigationSidebar';
39
- const COMPLEMENTARY_SIDEBAR_NAME = 'ComplementarySidebar';
37
+ const MAIN_ROOT_NAME = 'Main.Root';
38
+ const MAIN_OVERLAY_NAME = 'Main.Overlay';
39
+ const MAIN_CONTENT_NAME = 'Main.Content';
40
+ const NAVIGATION_SIDEBAR_NAME = 'Main.NavigationSidebar';
41
+ const COMPLEMENTARY_SIDEBAR_NAME = 'Main.ComplementarySidebar';
40
42
 
41
43
  const handleOpenAutoFocus = (event: Event) => {
42
44
  !document.body.hasAttribute('data-w-keyboard') && event.preventDefault();
@@ -412,7 +414,7 @@ const MainContent = forwardRef<HTMLDivElement, MainContentProps>(
412
414
  },
413
415
  );
414
416
 
415
- MainContent.displayName = MAIN_NAME;
417
+ MainContent.displayName = MAIN_CONTENT_NAME;
416
418
 
417
419
  //
418
420
  // Main
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export const mainPaddingTransitions = 'dx-main-content-padding-transitions';
6
+ export const mainIntrinsicSize = 'dx-main-intrinsic-size';
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './Main';
6
+ export * from './constants';
@@ -2,7 +2,7 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
5
+ import React, { useState } from 'react';
6
6
 
7
7
  import { mx } from '@dxos/ui-theme';
8
8
 
@@ -10,6 +10,17 @@ import { type ThemedClassName } from '../../util';
10
10
 
11
11
  export type MediaKind = 'video' | 'audio';
12
12
 
13
+ export type MediaFit = 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
14
+
15
+ /** Static map to keep Tailwind's class scanner happy (no dynamic `object-${fit}`). */
16
+ const FIT_CLASS: Record<MediaFit, string> = {
17
+ cover: 'object-cover',
18
+ contain: 'object-contain',
19
+ fill: 'object-fill',
20
+ none: 'object-none',
21
+ 'scale-down': 'object-scale-down',
22
+ };
23
+
13
24
  const VIDEO_EXTENSIONS = ['.mp4', '.webm', '.ogv', '.mov', '.m4v'];
14
25
  const AUDIO_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.m4a', '.aac', '.flac'];
15
26
 
@@ -40,43 +51,40 @@ export const detectMediaKind = (src: string): MediaKind | undefined => {
40
51
  * Heuristic match for URLs that should render as native `<video>` / `<audio>`
41
52
  * (i.e. URLs ending in a recognised media extension).
42
53
  *
43
- * NB: legacy embed URLs (Cloudflare Stream etc. paths containing `iframe`)
44
- * serve an HTML player page, **not** a media stream, so they cannot be loaded
45
- * via `<video>`. Those are detected by {@link isLegacyIframeUrl} and rendered
46
- * via `<iframe>` instead.
54
+ * NB: Cloudflare Stream embed URLs serve an HTML player page, **not** a media
55
+ * stream, so they cannot be loaded via `<video>`. Those are detected by
56
+ * {@link isCloudflareStreamEmbed} and rendered via `<iframe>` instead.
47
57
  */
48
58
  export const isEmbedUrl = (src: string): boolean => detectMediaKind(src) !== undefined;
49
59
 
50
- /** Match URLs whose pathname has an `/iframe` segment (e.g. Cloudflare Stream embeds). */
51
- const LEGACY_IFRAME_PATH_PATTERN = /\/iframe(?:[/?#]|$)/i;
60
+ /**
61
+ * Match Cloudflare Stream `/iframe` embed URLs of the form
62
+ * `https://customer-<code>.cloudflarestream.com/<32-hex-uid>/iframe[?…]`.
63
+ */
64
+ const CLOUDFLARE_STREAM_IFRAME_PATTERN =
65
+ /^https:\/\/[a-z0-9-]+\.cloudflarestream\.com\/[a-f0-9]{32}\/iframe(?:[/?#]|$)/i;
52
66
 
53
- const isLegacyIframeUrl = (src: string): boolean => {
54
- const pathAndQuery = src.split('#', 1)[0]!;
55
- return LEGACY_IFRAME_PATH_PATTERN.test(pathAndQuery);
56
- };
67
+ const isCloudflareStreamEmbed = (src: string): boolean => CLOUDFLARE_STREAM_IFRAME_PATTERN.test(src);
57
68
 
58
69
  export type MediaPlayerProps = ThemedClassName<{
59
70
  src: string;
71
+ alt?: string;
60
72
  /** Override auto-detection. When omitted, `detectMediaKind(src)` is used and falls back to 'video'. */
61
73
  kind?: MediaKind;
62
74
  controls?: boolean;
63
75
  autoPlay?: boolean;
64
76
  loop?: boolean;
65
77
  muted?: boolean;
66
- /** Accessible label for the `<video>` / `<audio>` element. */
67
- alt?: string;
68
78
  /** Defaults to 'anonymous' for cross-origin sources (e.g. signed S3 URLs). */
69
79
  crossOrigin?: 'anonymous' | 'use-credentials' | '';
70
- /** Additional classes applied only when rendering `<img>`. */
71
- imgClassNames?: string;
72
- /** Additional classes applied only when rendering native media or `<iframe>`. */
73
- mediaClassNames?: string;
80
+ /** CSS `object-fit` for `<img>` and `<video>`. Ignored for `<iframe>`/`<audio>`. Defaults to 'cover'. */
81
+ fit?: MediaFit;
74
82
  }>;
75
83
 
76
84
  /**
77
85
  * Renders a media URL using the appropriate element:
78
86
  * - Direct media URLs (mp4, mp3, …) → native `<video>` / `<audio>`.
79
- * - Legacy `iframe`-style embed URLs (Cloudflare Stream, oEmbed players) → `<iframe>`.
87
+ * - Cloudflare Stream `/iframe` embed URLs → `<iframe>`.
80
88
  * - Everything else → `<img>` that hides itself on load failure (broken images
81
89
  * are common in feeds and the placeholder is uglier than nothing).
82
90
  */
@@ -90,15 +98,15 @@ export const MediaPlayer = ({
90
98
  muted = false,
91
99
  alt,
92
100
  crossOrigin = 'anonymous',
93
- imgClassNames,
94
- mediaClassNames,
101
+ fit = 'cover',
95
102
  }: MediaPlayerProps) => {
103
+ const fitClass = FIT_CLASS[fit];
96
104
  if (isEmbedUrl(src)) {
97
105
  const resolved = kind ?? detectMediaKind(src) ?? 'video';
98
106
  if (resolved === 'audio') {
99
107
  return (
100
108
  <audio
101
- className={mx('w-full', classNames, mediaClassNames)}
109
+ className={mx('w-full', classNames)}
102
110
  src={src}
103
111
  controls={controls}
104
112
  autoPlay={autoPlay}
@@ -112,7 +120,7 @@ export const MediaPlayer = ({
112
120
 
113
121
  return (
114
122
  <video
115
- className={mx('aspect-video max-w-full max-h-full', classNames, mediaClassNames)}
123
+ className={mx('max-w-full max-h-full aspect-video', fitClass, classNames)}
116
124
  src={src}
117
125
  controls={controls}
118
126
  autoPlay={autoPlay}
@@ -124,30 +132,47 @@ export const MediaPlayer = ({
124
132
  );
125
133
  }
126
134
 
127
- if (isLegacyIframeUrl(src)) {
128
- return (
129
- <iframe
130
- src={src}
131
- title={alt ?? 'Embedded media'}
132
- loading='lazy'
133
- className={mx('border-none', classNames, mediaClassNames)}
134
- sandbox={DEFAULT_IFRAME_SANDBOX}
135
- referrerPolicy='no-referrer'
136
- allow='accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;'
137
- allowFullScreen
138
- />
139
- );
135
+ if (isCloudflareStreamEmbed(src)) {
136
+ return <IframePlayer key={src} classNames={classNames} src={src} alt={alt} />;
140
137
  }
141
138
 
142
139
  return (
143
140
  <img
141
+ className={mx(fitClass, classNames)}
144
142
  src={src}
145
143
  alt={alt ?? ''}
146
144
  loading='lazy'
147
- className={mx(classNames, imgClassNames)}
148
145
  onError={(event) => {
149
146
  event.currentTarget.style.display = 'none';
150
147
  }}
151
148
  />
152
149
  );
153
150
  };
151
+
152
+ type IframePlayerProps = ThemedClassName<{
153
+ src: string;
154
+ alt?: string;
155
+ }>;
156
+
157
+ const IframePlayer = ({ src, alt, classNames }: IframePlayerProps) => {
158
+ const [loaded, setLoaded] = useState(false);
159
+ return (
160
+ <div className={mx('relative bg-baseSurface', classNames)}>
161
+ <iframe
162
+ src={src}
163
+ title={alt ?? 'Embedded media'}
164
+ loading='lazy'
165
+ className={mx(
166
+ 'border-none w-full h-full transition-opacity duration-150',
167
+ loaded ? 'opacity-100' : 'opacity-0',
168
+ )}
169
+ style={{ colorScheme: 'dark' }}
170
+ sandbox={DEFAULT_IFRAME_SANDBOX}
171
+ referrerPolicy='no-referrer'
172
+ allow='accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;'
173
+ allowFullScreen
174
+ onLoad={() => setLoaded(true)}
175
+ />
176
+ </div>
177
+ );
178
+ };
@@ -103,7 +103,4 @@ type Story = StoryObj<typeof meta>;
103
103
 
104
104
  export const Default: Story = {
105
105
  args: {},
106
- parameters: {
107
- chromatic: { delay: 1600 },
108
- },
109
106
  };
@@ -103,9 +103,6 @@ type Story = StoryObj<typeof meta>;
103
103
 
104
104
  export const Default: Story = {
105
105
  args: {},
106
- parameters: {
107
- chromatic: { delay: 1600 },
108
- },
109
106
  };
110
107
 
111
108
  export const VirtualTrigger = {
@@ -107,7 +107,7 @@ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
107
107
  // DropdownMenuTrigger
108
108
  //
109
109
 
110
- const TRIGGER_NAME = 'DropdownMenuTrigger';
110
+ const TRIGGER_NAME = 'DropdownMenu.Trigger';
111
111
 
112
112
  type DropdownMenuTriggerElement = ComponentRef<typeof Primitive.button>;
113
113
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
@@ -172,7 +172,7 @@ DropdownMenuTrigger.displayName = TRIGGER_NAME;
172
172
  // DropdownMenuVirtualTrigger
173
173
  //
174
174
 
175
- const VIRTUAL_TRIGGER_NAME = 'DropdownMenuVirtualTrigger';
175
+ const VIRTUAL_TRIGGER_NAME = 'DropdownMenu.VirtualTrigger';
176
176
 
177
177
  type DropdownMenuVirtualTriggerProps = {
178
178
  virtualRef: RefObject<DropdownMenuTriggerElement | null>;
@@ -196,7 +196,7 @@ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
196
196
  // DropdownMenuPortal
197
197
  //
198
198
 
199
- const PORTAL_NAME = 'DropdownMenuPortal';
199
+ const PORTAL_NAME = 'DropdownMenu.Portal';
200
200
 
201
201
  type MenuPortalProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;
202
202
  type DropdownMenuPortalProps = MenuPortalProps;
@@ -233,7 +233,7 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
233
233
  // DropdownMenuContent
234
234
  //
235
235
 
236
- const CONTENT_NAME = 'DropdownMenuContent';
236
+ const CONTENT_NAME = 'DropdownMenu.Content';
237
237
 
238
238
  type DropdownMenuContentElement = ComponentRef<typeof MenuPrimitive.Content>;
239
239
  type MenuContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Content>>;
@@ -312,7 +312,7 @@ DropdownMenuContent.displayName = CONTENT_NAME;
312
312
  // DropdownMenuGroup
313
313
  //
314
314
 
315
- const GROUP_NAME = 'DropdownMenuGroup';
315
+ const GROUP_NAME = 'DropdownMenu.Group';
316
316
 
317
317
  type DropdownMenuGroupElement = ComponentRef<typeof MenuPrimitive.Group>;
318
318
  type MenuGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;
@@ -332,7 +332,7 @@ DropdownMenuGroup.displayName = GROUP_NAME;
332
332
  // DropdownMenuLabel
333
333
  //
334
334
 
335
- const LABEL_NAME = 'DropdownMenuLabel';
335
+ const LABEL_NAME = 'DropdownMenu.Label';
336
336
 
337
337
  type DropdownMenuLabelElement = ComponentRef<typeof MenuPrimitive.Label>;
338
338
  type MenuLabelProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Label>>;
@@ -360,7 +360,7 @@ DropdownMenuGroupLabel.displayName = LABEL_NAME;
360
360
  // DropdownMenuItem
361
361
  //
362
362
 
363
- const ITEM_NAME = 'DropdownMenuItem';
363
+ const ITEM_NAME = 'DropdownMenu.Item';
364
364
 
365
365
  type DropdownMenuItemElement = ComponentRef<typeof MenuPrimitive.Item>;
366
366
  type MenuItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Item>>;
@@ -388,7 +388,7 @@ DropdownMenuItem.displayName = ITEM_NAME;
388
388
  // DropdownMenuCheckboxItem
389
389
  //
390
390
 
391
- const CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';
391
+ const CHECKBOX_ITEM_NAME = 'DropdownMenu.CheckboxItem';
392
392
 
393
393
  type DropdownMenuCheckboxItemElement = ComponentRef<typeof MenuPrimitive.CheckboxItem>;
394
394
  type MenuCheckboxItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>>;
@@ -416,7 +416,7 @@ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
416
416
  // DropdownMenuRadioGroup
417
417
  //
418
418
 
419
- const RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';
419
+ const RADIO_GROUP_NAME = 'DropdownMenu.RadioGroup';
420
420
 
421
421
  type DropdownMenuRadioGroupElement = ComponentRef<typeof MenuPrimitive.RadioGroup>;
422
422
  type MenuRadioGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;
@@ -436,7 +436,7 @@ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
436
436
  // DropdownMenuRadioItem
437
437
  //
438
438
 
439
- const RADIO_ITEM_NAME = 'DropdownMenuRadioItem';
439
+ const RADIO_ITEM_NAME = 'DropdownMenu.RadioItem';
440
440
 
441
441
  type DropdownMenuRadioItemElement = ComponentRef<typeof MenuPrimitive.RadioItem>;
442
442
  type MenuRadioItemProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;
@@ -464,7 +464,7 @@ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
464
464
  // DropdownMenuItemIndicator
465
465
  //
466
466
 
467
- const INDICATOR_NAME = 'DropdownMenuItemIndicator';
467
+ const INDICATOR_NAME = 'DropdownMenu.ItemIndicator';
468
468
 
469
469
  type DropdownMenuItemIndicatorElement = ComponentRef<typeof MenuPrimitive.ItemIndicator>;
470
470
  type MenuItemIndicatorProps = ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;
@@ -484,7 +484,7 @@ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
484
484
  // DropdownMenuSeparator
485
485
  //
486
486
 
487
- const SEPARATOR_NAME = 'DropdownMenuSeparator';
487
+ const SEPARATOR_NAME = 'DropdownMenu.Separator';
488
488
 
489
489
  type DropdownMenuSeparatorElement = ComponentRef<typeof MenuPrimitive.Separator>;
490
490
  type MenuSeparatorProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>>;
@@ -512,7 +512,7 @@ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
512
512
  // DropdownMenuArrow
513
513
  //
514
514
 
515
- const ARROW_NAME = 'DropdownMenuArrow';
515
+ const ARROW_NAME = 'DropdownMenu.Arrow';
516
516
 
517
517
  type DropdownMenuArrowElement = ComponentRef<typeof MenuPrimitive.Arrow>;
518
518
  type MenuArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>>;
@@ -567,7 +567,7 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
567
567
  // DropdownMenuSubTrigger
568
568
  //
569
569
 
570
- const SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';
570
+ const SUB_TRIGGER_NAME = 'DropdownMenu.SubTrigger';
571
571
 
572
572
  type DropdownMenuSubTriggerElement = ComponentRef<typeof MenuPrimitive.SubTrigger>;
573
573
  type MenuSubTriggerProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;
@@ -587,7 +587,7 @@ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
587
587
  // DropdownMenuSubContent
588
588
  //
589
589
 
590
- const SUB_CONTENT_NAME = 'DropdownMenuSubContent';
590
+ const SUB_CONTENT_NAME = 'DropdownMenu.SubContent';
591
591
 
592
592
  type DropdownMenuSubContentElement = ComponentRef<typeof MenuPrimitive.Content>;
593
593
  type MenuSubContentProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { dataDisabled } from '@dxos/ui-theme';
6
+ import { mx, surfaceShadow, surfaceZIndex } from '@dxos/ui-theme';
7
+ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
8
+
9
+ export type MenuStyleProps = Partial<{
10
+ constrainBlockSize: boolean;
11
+ elevation: Elevation;
12
+ }>;
13
+
14
+ const content: ComponentFunction<MenuStyleProps> = ({ elevation }, ...etc) =>
15
+ mx(
16
+ 'dx-popover-surface w-48 rounded-sm md:w-56 border border-separator',
17
+ surfaceZIndex({ elevation, level: 'menu' }),
18
+ surfaceShadow({ elevation: 'positioned' }),
19
+ ...etc,
20
+ );
21
+
22
+ const viewport: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
23
+ mx('rounded-sm p-1 max-h-[var(--radix-dropdown-menu-content-available-height)] overflow-y-auto', ...etc);
24
+
25
+ const item: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
26
+ mx(
27
+ 'flex cursor-pointer select-none items-center gap-2 rounded-xs px-2 py-2 text-sm',
28
+ 'hover:bg-hover-surface data-[highlighted]:bg-hover-surface',
29
+ 'dx-focus-subdued',
30
+ dataDisabled,
31
+ ...etc,
32
+ );
33
+
34
+ const separator: ComponentFunction<MenuStyleProps> = (_props, ...etc) => mx('my-1 mx-2 h-px bg-separator', ...etc);
35
+
36
+ const groupLabel: ComponentFunction<MenuStyleProps> = (_props, ...etc) =>
37
+ mx('text-description', 'select-none px-2 py-2', ...etc);
38
+
39
+ const arrow: ComponentFunction<MenuStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
40
+
41
+ export const menuTheme: Theme<MenuStyleProps> = {
42
+ content,
43
+ viewport,
44
+ item,
45
+ separator,
46
+ groupLabel,
47
+ arrow,
48
+ };
@@ -9,6 +9,7 @@ import { random } from '@dxos/random';
9
9
  import { type MessageValence } from '@dxos/ui-types';
10
10
 
11
11
  import { withTheme } from '../../testing';
12
+ import { Button } from '../Button';
12
13
  import { Message } from './Message';
13
14
 
14
15
  random.seed(123);
@@ -17,13 +18,21 @@ type DefaultStoryProps = {
17
18
  valence: MessageValence;
18
19
  title: string;
19
20
  body: string;
21
+ button?: boolean;
20
22
  };
21
23
 
22
- const DefaultStory = ({ valence, title, body }: DefaultStoryProps) => (
24
+ const DefaultStory = ({ valence, title, body, button }: DefaultStoryProps) => (
23
25
  <div className='w-[30rem]'>
24
26
  <Message.Root valence={valence}>
25
27
  {title && <Message.Title onClose={() => console.log('close')}>{title}</Message.Title>}
26
- {body && <Message.Content>{body}</Message.Content>}
28
+ {body && (
29
+ <Message.Content asChild classNames='gap-2'>
30
+ <div>
31
+ <p>{body}</p>
32
+ {button && <Button>Test</Button>}
33
+ </div>
34
+ </Message.Content>
35
+ )}
27
36
  </Message.Root>
28
37
  </div>
29
38
  );
@@ -51,15 +60,44 @@ type Story = StoryObj<typeof meta>;
51
60
  export const Default: Story = {
52
61
  args: {
53
62
  valence: 'neutral',
54
- title: 'Alert title',
63
+ title: 'Default',
55
64
  body: random.lorem.paragraphs(1),
65
+ button: true,
66
+ },
67
+ };
68
+
69
+ export const Success: Story = {
70
+ args: {
71
+ valence: 'success',
72
+ title: 'Success',
73
+ body: random.lorem.paragraphs(1),
74
+ button: true,
75
+ },
76
+ };
77
+
78
+ export const Info: Story = {
79
+ args: {
80
+ valence: 'info',
81
+ title: 'Info',
82
+ body: random.lorem.paragraphs(1),
83
+ button: true,
84
+ },
85
+ };
86
+
87
+ export const Warning: Story = {
88
+ args: {
89
+ valence: 'warning',
90
+ title: 'Warning',
91
+ body: random.lorem.paragraphs(1),
92
+ button: true,
56
93
  },
57
94
  };
58
95
 
59
96
  export const Error: Story = {
60
97
  args: {
61
98
  valence: 'error',
62
- title: 'Error title',
99
+ title: 'Error',
63
100
  body: random.lorem.paragraphs(1),
101
+ button: true,
64
102
  },
65
103
  };
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx, messageValence } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Elevation, type MessageValence, type Theme } from '@dxos/ui-types';
7
+
8
+ export type MessageStyleProps = {
9
+ valence?: MessageValence;
10
+ elevation?: Elevation;
11
+ };
12
+
13
+ const root: ComponentFunction<MessageStyleProps> = ({ valence }, etc) => {
14
+ return mx('p-1 rounded-sm', messageValence(valence), etc);
15
+ };
16
+
17
+ const header: ComponentFunction<MessageStyleProps> = (_, etc) => {
18
+ return mx('items-center', etc);
19
+ };
20
+
21
+ const title: ComponentFunction<MessageStyleProps> = (_, etc) => {
22
+ return mx('col-start-2 overflow-hidden truncate', etc);
23
+ };
24
+
25
+ const icon: ComponentFunction<MessageStyleProps> = (_, etc) => {
26
+ return mx('col-start-1 grid place-items-center', etc);
27
+ };
28
+
29
+ const close: ComponentFunction<MessageStyleProps> = (_, etc) => {
30
+ return mx('col-start-3', etc);
31
+ };
32
+
33
+ const content: ComponentFunction<MessageStyleProps> = (_, etc) => {
34
+ return mx('col-start-2 flex flex-col first:font-medium pb-1.5', etc);
35
+ };
36
+
37
+ export const messageTheme: Theme<MessageStyleProps> = {
38
+ root,
39
+ header,
40
+ icon,
41
+ title,
42
+ close,
43
+ content,
44
+ };