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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  4. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-KVJDKHLF.mjs +1613 -0
  6. package/dist/lib/browser/chunk-KVJDKHLF.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +2982 -1631
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +37 -28
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs +1615 -0
  15. package/dist/lib/node-esm/chunk-5JYHWJDZ.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
  17. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +2982 -1631
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +37 -28
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  29. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  30. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  35. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Button.d.ts +3 -3
  37. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  39. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  41. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  43. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts +4 -0
  45. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  47. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  48. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  49. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  50. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Button/ToggleGroup.d.ts +6 -6
  52. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  53. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  54. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  55. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  56. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  58. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  60. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  61. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  62. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  63. package/dist/types/src/components/Card/Card.d.ts +92 -68
  64. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  65. package/dist/types/src/components/Card/Card.stories.d.ts +3 -2
  66. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  68. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/Carousel.d.ts +102 -0
  70. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  71. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  72. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  74. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  75. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  76. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  77. package/dist/types/src/components/Column/Column.d.ts +33 -0
  78. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  79. package/dist/types/src/components/Column/Column.stories.d.ts +25 -0
  80. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  82. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  83. package/dist/types/src/components/Column/index.d.ts +3 -0
  84. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  85. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  86. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  90. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  91. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  92. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  93. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  94. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  95. package/dist/types/src/components/Dialog/AlertDialog.d.ts +43 -32
  96. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.d.ts +51 -32
  99. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  100. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +3 -2
  101. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  103. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  104. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  105. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +14 -3
  107. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  108. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  109. package/dist/types/src/components/Focus/Focus.d.ts +36 -0
  110. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -0
  111. package/dist/types/src/{primitives/Column/Column.stories.d.ts → components/Focus/Focus.stories.d.ts} +4 -1
  112. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -0
  113. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  114. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Focus/index.d.ts +2 -0
  116. package/dist/types/src/components/Focus/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/Icon.d.ts +4 -0
  118. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  119. package/dist/types/src/components/Icon/Icon.stories.d.ts +11 -3
  120. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  122. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  123. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  124. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  125. package/dist/types/src/components/Icon/index.d.ts +1 -0
  126. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  127. package/dist/types/src/components/Image/Image.d.ts +2 -1
  128. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  129. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  130. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/Input/Input.d.ts +90 -15
  132. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  133. package/dist/types/src/components/Input/Input.stories.d.ts +17 -6
  134. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  136. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  137. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  138. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  139. package/dist/types/src/components/Input/constants.d.ts +2 -0
  140. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  141. package/dist/types/src/components/Input/index.d.ts +2 -0
  142. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  143. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  144. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  146. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  147. package/dist/types/src/components/List/List.d.ts +5 -3
  148. package/dist/types/src/components/List/List.d.ts.map +1 -1
  149. package/dist/types/src/components/List/List.stories.d.ts +3 -1
  150. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  151. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  152. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  153. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  154. package/dist/types/src/components/List/Tree.d.ts +2 -2
  155. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  156. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  157. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  158. package/dist/types/src/components/List/Treegrid.d.ts +6 -10
  159. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  160. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  162. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  163. package/dist/types/src/components/Main/Main.d.ts +9 -5
  164. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  165. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  167. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  168. package/dist/types/src/components/Main/constants.d.ts +3 -0
  169. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  170. package/dist/types/src/components/Main/index.d.ts +1 -0
  171. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  172. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  173. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +43 -0
  174. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  175. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  176. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  177. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  178. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  179. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  180. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  181. package/dist/types/src/components/Menu/DropdownMenu.d.ts +58 -49
  182. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  183. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +14 -1
  184. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  185. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  186. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  187. package/dist/types/src/components/Message/Message.d.ts +3 -3
  188. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  189. package/dist/types/src/components/Message/Message.stories.d.ts +6 -2
  190. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  191. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  192. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  193. package/dist/types/src/components/Panel/Panel.d.ts +35 -0
  194. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  195. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  196. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  197. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  198. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  199. package/dist/types/src/components/Popover/Popover.d.ts +38 -22
  200. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  201. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  202. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  203. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  204. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +12 -9
  205. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  206. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +18 -5
  207. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  209. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  210. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  211. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  212. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  213. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  214. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +41 -18
  215. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  216. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +5 -6
  217. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  218. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  219. package/dist/types/src/components/Select/Select.stories.d.ts +2 -2
  220. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  221. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  222. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  223. package/dist/types/src/components/Separator/Separator.d.ts +3 -3
  224. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  225. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  226. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  229. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Splitter/Splitter.d.ts +18 -18
  231. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  232. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  233. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  234. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  235. package/dist/types/src/components/Status/Status.d.ts +3 -4
  236. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  237. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  238. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  239. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  240. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  241. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  242. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  243. package/dist/types/src/components/Toast/Toast.d.ts +23 -20
  244. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  245. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  246. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  247. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  248. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  249. package/dist/types/src/components/Toolbar/Toolbar.d.ts +30 -26
  250. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  251. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  252. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  253. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  254. package/dist/types/src/components/Tooltip/Tooltip.d.ts +16 -16
  255. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  256. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +2 -2
  257. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  258. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  259. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  260. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  261. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  262. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  263. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  264. package/dist/types/src/components/index.d.ts +8 -4
  265. package/dist/types/src/components/index.d.ts.map +1 -1
  266. package/dist/types/src/exemplars/generics.stories.d.ts +6 -5
  267. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  268. package/dist/types/src/exemplars/slot.stories.d.ts +1 -0
  269. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  270. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  271. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  272. package/dist/types/src/hooks/index.d.ts +1 -0
  273. package/dist/types/src/hooks/index.d.ts.map +1 -1
  274. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  275. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  276. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  277. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  278. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  279. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  280. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  281. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  282. package/dist/types/src/index.d.ts +1 -0
  283. package/dist/types/src/index.d.ts.map +1 -1
  284. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  285. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  286. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  287. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  288. package/dist/types/src/primitives/Container/Container.d.ts +4 -5
  289. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  290. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  291. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  292. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  293. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  294. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  295. package/dist/types/src/primitives/Flex/Flex.d.ts +5 -7
  296. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  297. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  298. package/dist/types/src/primitives/Grid/Grid.d.ts +3 -8
  299. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  300. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  301. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +1 -1
  302. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  303. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
  304. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  305. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  306. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  307. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  308. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  309. package/dist/types/src/primitives/index.d.ts +3 -2
  310. package/dist/types/src/primitives/index.d.ts.map +1 -1
  311. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  312. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  313. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  314. package/dist/types/src/testing/decorators/withTheme.d.ts +6 -2
  315. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  316. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  317. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  318. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  319. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  320. package/dist/types/src/theme/index.d.ts +31 -0
  321. package/dist/types/src/theme/index.d.ts.map +1 -0
  322. package/dist/types/src/translations.d.ts +17 -3
  323. package/dist/types/src/translations.d.ts.map +1 -1
  324. package/dist/types/src/util/index.d.ts +2 -1
  325. package/dist/types/src/util/index.d.ts.map +1 -1
  326. package/dist/types/src/util/mobile.d.ts +5 -0
  327. package/dist/types/src/util/mobile.d.ts.map +1 -0
  328. package/dist/types/src/util/slots.d.ts +57 -0
  329. package/dist/types/src/util/slots.d.ts.map +1 -0
  330. package/dist/types/src/util/usePx.d.ts.map +1 -1
  331. package/dist/types/tsconfig.tsbuildinfo +1 -1
  332. package/package.json +31 -26
  333. package/src/components/Avatars/Avatar.stories.tsx +2 -3
  334. package/src/components/Avatars/Avatar.theme.ts +93 -0
  335. package/src/components/Avatars/Avatar.tsx +1 -2
  336. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -1
  337. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -2
  338. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  339. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  340. package/src/components/Button/Button.stories.tsx +0 -1
  341. package/src/components/Button/Button.theme.ts +31 -0
  342. package/src/components/Button/Button.tsx +6 -14
  343. package/src/components/Button/IconButton.stories.tsx +56 -6
  344. package/src/components/Button/IconButton.theme.ts +21 -0
  345. package/src/components/Button/IconButton.tsx +3 -4
  346. package/src/components/Button/Toggle.stories.tsx +0 -1
  347. package/src/components/Button/Toggle.tsx +4 -4
  348. package/src/components/Button/ToggleGroup.stories.tsx +0 -1
  349. package/src/components/Button/ToggleGroup.tsx +12 -16
  350. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  351. package/src/components/Calendar/Calendar.theme.ts +74 -0
  352. package/src/components/Calendar/Calendar.tsx +196 -0
  353. package/src/components/Calendar/index.ts +5 -0
  354. package/src/components/Card/Card.stories.tsx +55 -34
  355. package/src/components/Card/Card.theme.ts +93 -0
  356. package/src/components/Card/Card.tsx +297 -156
  357. package/src/components/Carousel/Carousel.tsx +371 -0
  358. package/src/components/Carousel/index.ts +5 -0
  359. package/src/components/Clipboard/CopyButton.tsx +6 -7
  360. package/src/components/Column/AUDIT.md +148 -0
  361. package/src/components/Column/Column.stories.tsx +181 -0
  362. package/src/components/Column/Column.theme.ts +48 -0
  363. package/src/components/Column/Column.tsx +166 -0
  364. package/src/{primitives → components}/Column/index.ts +1 -0
  365. package/src/components/Column/withColumn.ts +27 -0
  366. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  367. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  368. package/src/components/DatePicker/DatePicker.tsx +279 -0
  369. package/src/components/DatePicker/index.ts +5 -0
  370. package/src/components/Dialog/AlertDialog.stories.tsx +5 -6
  371. package/src/components/Dialog/AlertDialog.tsx +72 -132
  372. package/src/components/Dialog/Dialog.stories.tsx +65 -10
  373. package/src/components/Dialog/Dialog.theme.ts +61 -0
  374. package/src/components/Dialog/Dialog.tsx +124 -99
  375. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +3 -8
  376. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  377. package/src/components/ErrorFallback/ErrorStack.tsx +48 -8
  378. package/src/components/Focus/AUDIT.md +43 -0
  379. package/src/components/Focus/Focus.stories.tsx +230 -0
  380. package/src/components/Focus/Focus.theme.ts +32 -0
  381. package/src/components/Focus/Focus.tsx +201 -0
  382. package/src/components/Focus/index.ts +5 -0
  383. package/src/components/Icon/Icon.stories.tsx +43 -13
  384. package/src/components/Icon/Icon.theme.ts +45 -0
  385. package/src/components/Icon/Icon.tsx +14 -3
  386. package/src/components/Icon/IconBlock.tsx +38 -0
  387. package/src/components/Icon/index.ts +1 -0
  388. package/src/components/Image/Image.stories.tsx +4 -4
  389. package/src/components/Image/Image.tsx +31 -8
  390. package/src/components/Input/Input.stories.tsx +135 -33
  391. package/src/components/Input/Input.theme.ts +191 -0
  392. package/src/components/Input/Input.tsx +214 -9
  393. package/src/components/Input/SegmentedInput.tsx +454 -0
  394. package/src/components/Input/constants.ts +5 -0
  395. package/src/components/Input/index.ts +2 -0
  396. package/src/components/Link/Link.stories.tsx +0 -1
  397. package/src/components/Link/Link.theme.ts +16 -0
  398. package/src/components/Link/Link.tsx +10 -2
  399. package/src/components/List/List.stories.tsx +1 -2
  400. package/src/components/List/List.theme.ts +47 -0
  401. package/src/components/List/List.tsx +8 -7
  402. package/src/components/List/ListDropIndicator.tsx +1 -2
  403. package/src/components/List/Tree.stories.tsx +2 -3
  404. package/src/components/List/Tree.tsx +0 -1
  405. package/src/components/List/TreeDropIndicator.tsx +3 -3
  406. package/src/components/List/Treegrid.stories.tsx +26 -27
  407. package/src/components/List/Treegrid.theme.ts +35 -0
  408. package/src/components/List/Treegrid.tsx +15 -16
  409. package/src/components/Main/Main.stories.tsx +0 -1
  410. package/src/components/Main/Main.theme.ts +29 -0
  411. package/src/components/Main/Main.tsx +10 -9
  412. package/src/components/Main/constants.ts +6 -0
  413. package/src/components/Main/index.ts +1 -0
  414. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  415. package/src/components/MediaPlayer/MediaPlayer.tsx +178 -0
  416. package/src/components/MediaPlayer/index.ts +5 -0
  417. package/src/components/Menu/ContextMenu.stories.tsx +0 -4
  418. package/src/components/Menu/DropdownMenu.stories.tsx +0 -4
  419. package/src/components/Menu/DropdownMenu.tsx +63 -57
  420. package/src/components/Menu/Menu.theme.ts +48 -0
  421. package/src/components/Message/Message.stories.tsx +48 -11
  422. package/src/components/Message/Message.theme.ts +44 -0
  423. package/src/components/Message/Message.tsx +75 -19
  424. package/src/{primitives → components}/Panel/Panel.stories.tsx +9 -9
  425. package/src/components/Panel/Panel.theme.ts +42 -0
  426. package/src/components/Panel/Panel.tsx +121 -0
  427. package/src/components/Popover/Popover.stories.tsx +4 -5
  428. package/src/components/Popover/Popover.theme.ts +40 -0
  429. package/src/components/Popover/Popover.tsx +49 -49
  430. package/src/components/ScrollArea/ScrollArea.stories.tsx +89 -30
  431. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  432. package/src/components/ScrollArea/ScrollArea.tsx +40 -23
  433. package/src/components/ScrollArea/index.ts +1 -0
  434. package/src/components/ScrollArea/scrollbar.ts +21 -0
  435. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +21 -19
  436. package/src/components/ScrollContainer/ScrollContainer.tsx +215 -106
  437. package/src/components/Select/Select.stories.tsx +5 -6
  438. package/src/components/Select/Select.theme.ts +55 -0
  439. package/src/components/Select/Select.tsx +26 -10
  440. package/src/components/Separator/Separator.theme.ts +23 -0
  441. package/src/components/Separator/Separator.tsx +4 -7
  442. package/src/components/Skeleton/Skeleton.stories.tsx +0 -1
  443. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  444. package/src/components/Splitter/Splitter.stories.tsx +30 -30
  445. package/src/components/Splitter/Splitter.theme.ts +18 -0
  446. package/src/components/Splitter/Splitter.tsx +36 -40
  447. package/src/components/Status/Status.stories.tsx +0 -1
  448. package/src/components/Status/Status.theme.ts +31 -0
  449. package/src/components/Status/Status.tsx +7 -5
  450. package/src/components/Tag/Tag.stories.tsx +0 -1
  451. package/src/components/Tag/Tag.theme.ts +22 -0
  452. package/src/components/Toast/Toast.stories.tsx +41 -21
  453. package/src/components/Toast/Toast.theme.ts +56 -0
  454. package/src/components/Toast/Toast.tsx +105 -52
  455. package/src/components/Toolbar/Toolbar.stories.tsx +0 -1
  456. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  457. package/src/components/Toolbar/Toolbar.tsx +83 -46
  458. package/src/components/Tooltip/Tooltip.stories.tsx +7 -17
  459. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  460. package/src/components/Tooltip/Tooltip.tsx +33 -33
  461. package/src/components/Tooltip/index.ts +1 -0
  462. package/src/components/Tooltip/tooltipContent.ts +16 -0
  463. package/src/components/index.ts +8 -5
  464. package/src/exemplars/generics.stories.tsx +7 -16
  465. package/src/exemplars/slot.stories.tsx +66 -57
  466. package/src/exemplars/tabster.stories.tsx +1 -1
  467. package/src/exemplars/virtualizer.stories.tsx +4 -5
  468. package/src/hooks/index.ts +1 -0
  469. package/src/hooks/useDensityContext.ts +3 -3
  470. package/src/hooks/useElevationContext.ts +1 -1
  471. package/src/hooks/useThemeContext.ts +1 -1
  472. package/src/hooks/useTranslationsContext.ts +1 -1
  473. package/src/index.ts +1 -0
  474. package/src/playground/Custom.stories.tsx +13 -36
  475. package/src/primitives/Container/Container.stories.tsx +0 -1
  476. package/src/primitives/Container/Container.tsx +7 -8
  477. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  478. package/src/primitives/Flex/Flex.stories.tsx +0 -1
  479. package/src/primitives/Flex/Flex.tsx +12 -12
  480. package/src/primitives/Grid/Grid.stories.tsx +0 -1
  481. package/src/primitives/Grid/Grid.tsx +6 -9
  482. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -2
  483. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +6 -5
  484. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  485. package/src/primitives/index.ts +4 -2
  486. package/src/testing/Loading.tsx +25 -4
  487. package/src/testing/decorators/withLayout.tsx +7 -17
  488. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  489. package/src/testing/decorators/withTheme.tsx +23 -12
  490. package/src/theme/bindTheme.ts +13 -0
  491. package/src/theme/defaultTheme.ts +83 -0
  492. package/src/theme/index.ts +37 -0
  493. package/src/translations.ts +17 -3
  494. package/src/util/index.ts +2 -1
  495. package/src/util/mobile.ts +11 -0
  496. package/src/util/slots.ts +129 -0
  497. package/src/util/usePx.ts +5 -1
  498. package/dist/lib/browser/chunk-2FKSMWNY.mjs +0 -774
  499. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +0 -7
  500. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +0 -776
  501. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +0 -7
  502. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  503. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  504. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  505. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  506. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  507. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  508. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  509. package/dist/types/src/primitives/Column/Column.d.ts +0 -26
  510. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  511. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  512. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  513. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  514. package/dist/types/src/primitives/Panel/Panel.d.ts +0 -26
  515. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  516. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  517. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  518. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  519. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  520. package/src/primitives/Column/Column.stories.tsx +0 -78
  521. package/src/primitives/Column/Column.tsx +0 -134
  522. package/src/primitives/Panel/Panel.tsx +0 -119
  523. package/src/util/hasIosKeyboard.ts +0 -8
  524. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  525. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  526. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  527. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  528. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  529. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  530. /package/src/{primitives → components}/Panel/index.ts +0 -0
  531. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  532. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  533. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  534. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -17,9 +17,9 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
17
17
  import React, {
18
18
  type ComponentPropsWithRef,
19
19
  type ComponentPropsWithoutRef,
20
- type ElementRef,
20
+ type ComponentRef,
21
21
  type FC,
22
- type MutableRefObject,
22
+ PropsWithChildren,
23
23
  type ReactNode,
24
24
  type RefObject,
25
25
  forwardRef,
@@ -47,7 +47,7 @@ const useMenuScope: (scope?: Scope) => any = createMenuScope();
47
47
 
48
48
  type DropdownMenuContextValue = {
49
49
  triggerId: string;
50
- triggerRef: MutableRefObject<HTMLButtonElement | null>;
50
+ triggerRef: RefObject<HTMLButtonElement | null>;
51
51
  contentId: string;
52
52
  open: boolean;
53
53
  onOpenChange(open: boolean): void;
@@ -58,17 +58,23 @@ type DropdownMenuContextValue = {
58
58
  const [DropdownMenuProvider, useDropdownMenuContext] =
59
59
  createDropdownMenuContext<DropdownMenuContextValue>(DROPDOWN_MENU_NAME);
60
60
 
61
- interface DropdownMenuRootProps {
62
- children?: ReactNode;
61
+ type DropdownMenuRootProps = PropsWithChildren<{
63
62
  dir?: Direction;
63
+ modal?: boolean;
64
64
  open?: boolean;
65
65
  defaultOpen?: boolean;
66
66
  onOpenChange?(open: boolean): void;
67
- modal?: boolean;
68
- }
69
-
70
- const DropdownMenuRoot: FC<DropdownMenuRootProps> = (props: ScopedProps<DropdownMenuRootProps>) => {
71
- const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
67
+ }>;
68
+
69
+ const DropdownMenuRoot = ({
70
+ __scopeDropdownMenu,
71
+ children,
72
+ dir,
73
+ modal = true,
74
+ open: openProp,
75
+ defaultOpen,
76
+ onOpenChange,
77
+ }: ScopedProps<DropdownMenuRootProps>) => {
72
78
  const menuScope = useMenuScope(__scopeDropdownMenu);
73
79
  const triggerRef = useRef<HTMLButtonElement | null>(null);
74
80
  const [open = false, setOpen] = useControllableState({
@@ -81,14 +87,14 @@ const DropdownMenuRoot: FC<DropdownMenuRootProps> = (props: ScopedProps<Dropdown
81
87
  <DropdownMenuProvider
82
88
  scope={__scopeDropdownMenu}
83
89
  triggerId={useId()}
84
- triggerRef={triggerRef as MutableRefObject<HTMLButtonElement | null>}
90
+ triggerRef={triggerRef}
85
91
  contentId={useId()}
86
92
  open={open}
87
93
  onOpenChange={setOpen}
88
94
  onOpenToggle={useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}
89
95
  modal={modal}
90
96
  >
91
- <MenuPrimitive.Root {...menuScope} open={open} onOpenChange={setOpen} dir={dir} modal={modal}>
97
+ <MenuPrimitive.Root {...menuScope} dir={dir} modal={modal} open={open} onOpenChange={setOpen}>
92
98
  {children}
93
99
  </MenuPrimitive.Root>
94
100
  </DropdownMenuProvider>
@@ -101,11 +107,11 @@ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
101
107
  // DropdownMenuTrigger
102
108
  //
103
109
 
104
- const TRIGGER_NAME = 'DropdownMenuTrigger';
110
+ const TRIGGER_NAME = 'DropdownMenu.Trigger';
105
111
 
106
- type DropdownMenuTriggerElement = ElementRef<typeof Primitive.button>;
112
+ type DropdownMenuTriggerElement = ComponentRef<typeof Primitive.button>;
107
113
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
108
- interface DropdownMenuTriggerProps extends PrimitiveButtonProps {}
114
+ type DropdownMenuTriggerProps = PrimitiveButtonProps;
109
115
 
110
116
  const DropdownMenuTrigger = forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(
111
117
  (props: ScopedProps<DropdownMenuTriggerProps>, forwardedRef) => {
@@ -166,11 +172,11 @@ DropdownMenuTrigger.displayName = TRIGGER_NAME;
166
172
  // DropdownMenuVirtualTrigger
167
173
  //
168
174
 
169
- const VIRTUAL_TRIGGER_NAME = 'DropdownMenuVirtualTrigger';
175
+ const VIRTUAL_TRIGGER_NAME = 'DropdownMenu.VirtualTrigger';
170
176
 
171
- interface DropdownMenuVirtualTriggerProps {
177
+ type DropdownMenuVirtualTriggerProps = {
172
178
  virtualRef: RefObject<DropdownMenuTriggerElement | null>;
173
- }
179
+ };
174
180
 
175
181
  const DropdownMenuVirtualTrigger = (props: ScopedProps<DropdownMenuVirtualTriggerProps>) => {
176
182
  const { __scopeDropdownMenu, virtualRef } = props;
@@ -190,10 +196,10 @@ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
190
196
  // DropdownMenuPortal
191
197
  //
192
198
 
193
- const PORTAL_NAME = 'DropdownMenuPortal';
199
+ const PORTAL_NAME = 'DropdownMenu.Portal';
194
200
 
195
201
  type MenuPortalProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Portal>;
196
- interface DropdownMenuPortalProps extends MenuPortalProps {}
202
+ type DropdownMenuPortalProps = MenuPortalProps;
197
203
 
198
204
  const DropdownMenuPortal: FC<DropdownMenuPortalProps> = (props: ScopedProps<DropdownMenuPortalProps>) => {
199
205
  const { __scopeDropdownMenu, ...portalProps } = props;
@@ -227,11 +233,11 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
227
233
  // DropdownMenuContent
228
234
  //
229
235
 
230
- const CONTENT_NAME = 'DropdownMenuContent';
236
+ const CONTENT_NAME = 'DropdownMenu.Content';
231
237
 
232
- type DropdownMenuContentElement = ElementRef<typeof MenuPrimitive.Content>;
238
+ type DropdownMenuContentElement = ComponentRef<typeof MenuPrimitive.Content>;
233
239
  type MenuContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Content>>;
234
- interface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'> {}
240
+ type DropdownMenuContentProps = Omit<MenuContentProps, 'onEntryFocus'>;
235
241
 
236
242
  const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
237
243
  (props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {
@@ -306,11 +312,11 @@ DropdownMenuContent.displayName = CONTENT_NAME;
306
312
  // DropdownMenuGroup
307
313
  //
308
314
 
309
- const GROUP_NAME = 'DropdownMenuGroup';
315
+ const GROUP_NAME = 'DropdownMenu.Group';
310
316
 
311
- type DropdownMenuGroupElement = ElementRef<typeof MenuPrimitive.Group>;
317
+ type DropdownMenuGroupElement = ComponentRef<typeof MenuPrimitive.Group>;
312
318
  type MenuGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.Group>;
313
- interface DropdownMenuGroupProps extends MenuGroupProps {}
319
+ type DropdownMenuGroupProps = MenuGroupProps;
314
320
 
315
321
  const DropdownMenuGroup = forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(
316
322
  (props: ScopedProps<DropdownMenuGroupProps>, forwardedRef) => {
@@ -326,11 +332,11 @@ DropdownMenuGroup.displayName = GROUP_NAME;
326
332
  // DropdownMenuLabel
327
333
  //
328
334
 
329
- const LABEL_NAME = 'DropdownMenuLabel';
335
+ const LABEL_NAME = 'DropdownMenu.Label';
330
336
 
331
- type DropdownMenuLabelElement = ElementRef<typeof MenuPrimitive.Label>;
337
+ type DropdownMenuLabelElement = ComponentRef<typeof MenuPrimitive.Label>;
332
338
  type MenuLabelProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Label>>;
333
- interface DropdownMenuLabelProps extends MenuLabelProps {}
339
+ type DropdownMenuLabelProps = MenuLabelProps;
334
340
 
335
341
  const DropdownMenuGroupLabel = forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(
336
342
  (props: ScopedProps<DropdownMenuLabelProps>, forwardedRef) => {
@@ -354,11 +360,11 @@ DropdownMenuGroupLabel.displayName = LABEL_NAME;
354
360
  // DropdownMenuItem
355
361
  //
356
362
 
357
- const ITEM_NAME = 'DropdownMenuItem';
363
+ const ITEM_NAME = 'DropdownMenu.Item';
358
364
 
359
- type DropdownMenuItemElement = ElementRef<typeof MenuPrimitive.Item>;
365
+ type DropdownMenuItemElement = ComponentRef<typeof MenuPrimitive.Item>;
360
366
  type MenuItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Item>>;
361
- interface DropdownMenuItemProps extends MenuItemProps {}
367
+ type DropdownMenuItemProps = MenuItemProps;
362
368
 
363
369
  const DropdownMenuItem = forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(
364
370
  (props: ScopedProps<DropdownMenuItemProps>, forwardedRef) => {
@@ -382,11 +388,11 @@ DropdownMenuItem.displayName = ITEM_NAME;
382
388
  // DropdownMenuCheckboxItem
383
389
  //
384
390
 
385
- const CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';
391
+ const CHECKBOX_ITEM_NAME = 'DropdownMenu.CheckboxItem';
386
392
 
387
- type DropdownMenuCheckboxItemElement = ElementRef<typeof MenuPrimitive.CheckboxItem>;
393
+ type DropdownMenuCheckboxItemElement = ComponentRef<typeof MenuPrimitive.CheckboxItem>;
388
394
  type MenuCheckboxItemProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.CheckboxItem>>;
389
- interface DropdownMenuCheckboxItemProps extends MenuCheckboxItemProps {}
395
+ type DropdownMenuCheckboxItemProps = MenuCheckboxItemProps;
390
396
 
391
397
  const DropdownMenuCheckboxItem = forwardRef<DropdownMenuCheckboxItemElement, DropdownMenuCheckboxItemProps>(
392
398
  (props: ScopedProps<DropdownMenuCheckboxItemProps>, forwardedRef) => {
@@ -410,11 +416,11 @@ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
410
416
  // DropdownMenuRadioGroup
411
417
  //
412
418
 
413
- const RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';
419
+ const RADIO_GROUP_NAME = 'DropdownMenu.RadioGroup';
414
420
 
415
- type DropdownMenuRadioGroupElement = ElementRef<typeof MenuPrimitive.RadioGroup>;
421
+ type DropdownMenuRadioGroupElement = ComponentRef<typeof MenuPrimitive.RadioGroup>;
416
422
  type MenuRadioGroupProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioGroup>;
417
- interface DropdownMenuRadioGroupProps extends MenuRadioGroupProps {}
423
+ type DropdownMenuRadioGroupProps = MenuRadioGroupProps;
418
424
 
419
425
  const DropdownMenuRadioGroup = forwardRef<DropdownMenuRadioGroupElement, DropdownMenuRadioGroupProps>(
420
426
  (props: ScopedProps<DropdownMenuRadioGroupProps>, forwardedRef) => {
@@ -430,9 +436,9 @@ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
430
436
  // DropdownMenuRadioItem
431
437
  //
432
438
 
433
- const RADIO_ITEM_NAME = 'DropdownMenuRadioItem';
439
+ const RADIO_ITEM_NAME = 'DropdownMenu.RadioItem';
434
440
 
435
- type DropdownMenuRadioItemElement = ElementRef<typeof MenuPrimitive.RadioItem>;
441
+ type DropdownMenuRadioItemElement = ComponentRef<typeof MenuPrimitive.RadioItem>;
436
442
  type MenuRadioItemProps = ComponentPropsWithoutRef<typeof MenuPrimitive.RadioItem>;
437
443
  type DropdownMenuRadioItemProps = ThemedClassName<MenuRadioItemProps>;
438
444
 
@@ -458,11 +464,11 @@ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
458
464
  // DropdownMenuItemIndicator
459
465
  //
460
466
 
461
- const INDICATOR_NAME = 'DropdownMenuItemIndicator';
467
+ const INDICATOR_NAME = 'DropdownMenu.ItemIndicator';
462
468
 
463
- type DropdownMenuItemIndicatorElement = ElementRef<typeof MenuPrimitive.ItemIndicator>;
469
+ type DropdownMenuItemIndicatorElement = ComponentRef<typeof MenuPrimitive.ItemIndicator>;
464
470
  type MenuItemIndicatorProps = ComponentPropsWithoutRef<typeof MenuPrimitive.ItemIndicator>;
465
- interface DropdownMenuItemIndicatorProps extends MenuItemIndicatorProps {}
471
+ type DropdownMenuItemIndicatorProps = MenuItemIndicatorProps;
466
472
 
467
473
  const DropdownMenuItemIndicator = forwardRef<DropdownMenuItemIndicatorElement, DropdownMenuItemIndicatorProps>(
468
474
  (props: ScopedProps<DropdownMenuItemIndicatorProps>, forwardedRef) => {
@@ -478,11 +484,11 @@ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
478
484
  // DropdownMenuSeparator
479
485
  //
480
486
 
481
- const SEPARATOR_NAME = 'DropdownMenuSeparator';
487
+ const SEPARATOR_NAME = 'DropdownMenu.Separator';
482
488
 
483
- type DropdownMenuSeparatorElement = ElementRef<typeof MenuPrimitive.Separator>;
489
+ type DropdownMenuSeparatorElement = ComponentRef<typeof MenuPrimitive.Separator>;
484
490
  type MenuSeparatorProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Separator>>;
485
- interface DropdownMenuSeparatorProps extends MenuSeparatorProps {}
491
+ type DropdownMenuSeparatorProps = MenuSeparatorProps;
486
492
 
487
493
  const DropdownMenuSeparator = forwardRef<DropdownMenuSeparatorElement, DropdownMenuSeparatorProps>(
488
494
  (props: ScopedProps<DropdownMenuSeparatorProps>, forwardedRef) => {
@@ -506,11 +512,11 @@ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
506
512
  // DropdownMenuArrow
507
513
  //
508
514
 
509
- const ARROW_NAME = 'DropdownMenuArrow';
515
+ const ARROW_NAME = 'DropdownMenu.Arrow';
510
516
 
511
- type DropdownMenuArrowElement = ElementRef<typeof MenuPrimitive.Arrow>;
517
+ type DropdownMenuArrowElement = ComponentRef<typeof MenuPrimitive.Arrow>;
512
518
  type MenuArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof MenuPrimitive.Arrow>>;
513
- interface DropdownMenuArrowProps extends MenuArrowProps {}
519
+ type DropdownMenuArrowProps = MenuArrowProps;
514
520
 
515
521
  const DropdownMenuArrow = forwardRef<DropdownMenuArrowElement, DropdownMenuArrowProps>(
516
522
  (props: ScopedProps<DropdownMenuArrowProps>, forwardedRef) => {
@@ -534,12 +540,12 @@ DropdownMenuArrow.displayName = ARROW_NAME;
534
540
  // DropdownMenuSub
535
541
  //
536
542
 
537
- interface DropdownMenuSubProps {
543
+ type DropdownMenuSubProps = {
538
544
  children?: ReactNode;
539
545
  open?: boolean;
540
546
  defaultOpen?: boolean;
541
547
  onOpenChange?(open: boolean): void;
542
- }
548
+ };
543
549
 
544
550
  const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMenuSubProps>) => {
545
551
  const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
@@ -561,11 +567,11 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
561
567
  // DropdownMenuSubTrigger
562
568
  //
563
569
 
564
- const SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';
570
+ const SUB_TRIGGER_NAME = 'DropdownMenu.SubTrigger';
565
571
 
566
- type DropdownMenuSubTriggerElement = ElementRef<typeof MenuPrimitive.SubTrigger>;
572
+ type DropdownMenuSubTriggerElement = ComponentRef<typeof MenuPrimitive.SubTrigger>;
567
573
  type MenuSubTriggerProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubTrigger>;
568
- interface DropdownMenuSubTriggerProps extends MenuSubTriggerProps {}
574
+ type DropdownMenuSubTriggerProps = MenuSubTriggerProps;
569
575
 
570
576
  const DropdownMenuSubTrigger = forwardRef<DropdownMenuSubTriggerElement, DropdownMenuSubTriggerProps>(
571
577
  (props: ScopedProps<DropdownMenuSubTriggerProps>, forwardedRef) => {
@@ -581,11 +587,11 @@ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
581
587
  // DropdownMenuSubContent
582
588
  //
583
589
 
584
- const SUB_CONTENT_NAME = 'DropdownMenuSubContent';
590
+ const SUB_CONTENT_NAME = 'DropdownMenu.SubContent';
585
591
 
586
- type DropdownMenuSubContentElement = ElementRef<typeof MenuPrimitive.Content>;
592
+ type DropdownMenuSubContentElement = ComponentRef<typeof MenuPrimitive.Content>;
587
593
  type MenuSubContentProps = ComponentPropsWithoutRef<typeof MenuPrimitive.SubContent>;
588
- interface DropdownMenuSubContentProps extends MenuSubContentProps {}
594
+ type DropdownMenuSubContentProps = MenuSubContentProps;
589
595
 
590
596
  const DropdownMenuSubContent = forwardRef<DropdownMenuSubContentElement, DropdownMenuSubContentProps>(
591
597
  (props: ScopedProps<DropdownMenuSubContentProps>, forwardedRef) => {
@@ -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
+ };
@@ -5,26 +5,34 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
8
+ import { random } from '@dxos/random';
9
9
  import { type MessageValence } from '@dxos/ui-types';
10
10
 
11
11
  import { withTheme } from '../../testing';
12
-
12
+ import { Button } from '../Button';
13
13
  import { Message } from './Message';
14
14
 
15
- faker.seed(123);
15
+ random.seed(123);
16
16
 
17
- type StoryProps = {
17
+ type DefaultStoryProps = {
18
18
  valence: MessageValence;
19
19
  title: string;
20
20
  body: string;
21
+ button?: boolean;
21
22
  };
22
23
 
23
- const DefaultStory = ({ valence, title, body }: StoryProps) => (
24
+ const DefaultStory = ({ valence, title, body, button }: DefaultStoryProps) => (
24
25
  <div className='w-[30rem]'>
25
26
  <Message.Root valence={valence}>
26
- {title && <Message.Title>{title}</Message.Title>}
27
- {body && <Message.Content>{body}</Message.Content>}
27
+ {title && <Message.Title onClose={() => console.log('close')}>{title}</Message.Title>}
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
+ )}
28
36
  </Message.Root>
29
37
  </div>
30
38
  );
@@ -52,15 +60,44 @@ type Story = StoryObj<typeof meta>;
52
60
  export const Default: Story = {
53
61
  args: {
54
62
  valence: 'neutral',
55
- title: 'Alert title',
56
- body: faker.lorem.paragraphs(1),
63
+ title: 'Default',
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,
57
93
  },
58
94
  };
59
95
 
60
96
  export const Error: Story = {
61
97
  args: {
62
98
  valence: 'error',
63
- title: 'Error title',
64
- body: faker.lorem.paragraphs(1),
99
+ title: 'Error',
100
+ body: random.lorem.paragraphs(1),
101
+ button: true,
65
102
  },
66
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
+ };
@@ -5,13 +5,18 @@
5
5
  import { createContext } from '@radix-ui/react-context';
6
6
  import { Primitive } from '@radix-ui/react-primitive';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
- import React, { type ComponentPropsWithRef, forwardRef } from 'react';
8
+ import React, { type CSSProperties, type ComponentPropsWithRef, forwardRef } from 'react';
9
+ import { useTranslation } from 'react-i18next';
9
10
 
10
11
  import { useId } from '@dxos/react-hooks';
11
12
  import { type Elevation, type MessageValence } from '@dxos/ui-types';
12
13
 
14
+ import { translationKey } from '#translations';
15
+
13
16
  import { useElevationContext, useThemeContext } from '../../hooks';
14
17
  import { type ThemedClassName } from '../../util';
18
+ import { IconButton } from '../Button';
19
+ import { Column } from '../Column';
15
20
  import { Icon } from '../Icon';
16
21
 
17
22
  const messageIcons: Record<MessageValence, string> = {
@@ -34,6 +39,42 @@ type MessageContextValue = { titleId?: string; descriptionId: string; valence: M
34
39
 
35
40
  const MESSAGE_NAME = 'Message';
36
41
 
42
+ // CSS custom properties for valence color inheritance — consumed by Button variant='valence'.
43
+ // Extending CSSProperties so entries satisfy the style prop type without a cast at the use site.
44
+ type ValenceCSSVars = CSSProperties & {
45
+ '--dx-valence-bg': string;
46
+ '--dx-valence-bg-hover': string;
47
+ '--dx-valence-text': string;
48
+ };
49
+
50
+ const valenceVars: Record<MessageValence, ValenceCSSVars> = {
51
+ success: {
52
+ '--dx-valence-bg': 'var(--color-success-bg)',
53
+ '--dx-valence-bg-hover': 'var(--color-success-bg-hover)',
54
+ '--dx-valence-text': 'var(--color-success-text)',
55
+ },
56
+ info: {
57
+ '--dx-valence-bg': 'var(--color-info-bg)',
58
+ '--dx-valence-bg-hover': 'var(--color-info-bg-hover)',
59
+ '--dx-valence-text': 'var(--color-info-text)',
60
+ },
61
+ warning: {
62
+ '--dx-valence-bg': 'var(--color-warning-bg)',
63
+ '--dx-valence-bg-hover': 'var(--color-warning-bg-hover)',
64
+ '--dx-valence-text': 'var(--color-warning-text)',
65
+ },
66
+ error: {
67
+ '--dx-valence-bg': 'var(--color-error-bg)',
68
+ '--dx-valence-bg-hover': 'var(--color-error-bg-hover)',
69
+ '--dx-valence-text': 'var(--color-error-text)',
70
+ },
71
+ neutral: {
72
+ '--dx-valence-bg': 'var(--color-neutral-bg)',
73
+ '--dx-valence-bg-hover': 'var(--color-neutral-bg-hover)',
74
+ '--dx-valence-text': 'var(--color-neutral-text)',
75
+ },
76
+ };
77
+
37
78
  const [MessageProvider, useMessageContext] = createContext<MessageContextValue>(MESSAGE_NAME);
38
79
 
39
80
  //
@@ -58,20 +99,21 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
58
99
  const titleId = useId('message__title', propsTitleId);
59
100
  const descriptionId = useId('message__description', propsDescriptionId);
60
101
  const elevation = useElevationContext(propsElevation);
61
- const Comp = asChild ? Slot : Primitive.div;
62
102
 
63
103
  return (
64
104
  <MessageProvider {...{ titleId, descriptionId, valence }}>
65
- <Comp
105
+ <Column.Root
106
+ asChild={asChild}
66
107
  role={valence === 'neutral' ? 'paragraph' : 'alert'}
67
- {...props}
68
- className={tx('message.root', { valence, elevation }, classNames)}
69
108
  aria-labelledby={titleId}
70
109
  aria-describedby={descriptionId}
110
+ {...props}
111
+ style={{ ...valenceVars[valence], ...(props.style || {}) }}
112
+ classNames={tx('message.root', { valence, elevation }, classNames)}
71
113
  ref={forwardedRef}
72
114
  >
73
115
  {children}
74
- </Comp>
116
+ </Column.Root>
75
117
  </MessageProvider>
76
118
  );
77
119
  },
@@ -84,27 +126,41 @@ MessageRoot.displayName = MESSAGE_NAME;
84
126
  //
85
127
 
86
128
  type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
87
- asChild?: boolean;
88
129
  icon?: string;
130
+ onClose?: () => void;
89
131
  };
90
132
 
91
- const MESSAGE_TITLE_NAME = 'MessageTitle';
133
+ const MESSAGE_TITLE_NAME = 'Message.Title';
92
134
 
93
- const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
94
- ({ asChild, classNames, children, icon: iconProp, ...props }, forwardedRef) => {
135
+ const MessageTitle = forwardRef<HTMLDivElement, MessageTitleProps>(
136
+ ({ classNames, children, icon: iconProp, onClose }, forwardedRef) => {
137
+ const { t } = useTranslation(translationKey);
95
138
  const { tx } = useThemeContext();
96
139
  const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
97
- const Comp = asChild ? Slot : Primitive.h2;
98
140
  const icon = iconProp ?? messageIcons[valence];
99
141
  return (
100
- <Comp {...props} className={tx('message.header', {}, classNames)} id={titleId} ref={forwardedRef}>
101
- {!icon && valence === 'neutral' ? (
102
- <div />
103
- ) : (
104
- <Icon size={5} icon={icon} classNames={tx('message.icon', { valence })} />
142
+ <Column.Row classNames={tx('message.header', {}, classNames)} ref={forwardedRef}>
143
+ {icon && (
144
+ <div className={tx('message.icon', { valence })}>
145
+ <Icon icon={icon} size={5} />
146
+ </div>
105
147
  )}
106
- <span className={tx('message.title', {}, classNames)}>{children}</span>
107
- </Comp>
148
+ <h2 className={tx('message.title', {}, classNames)} id={titleId}>
149
+ {children}
150
+ </h2>
151
+ {onClose && (
152
+ <div className={tx('message.close', {})}>
153
+ <IconButton
154
+ variant='ghost'
155
+ icon='ph--x--regular'
156
+ iconOnly
157
+ density='sm'
158
+ label={t('toolbar-close.label')}
159
+ onClick={onClose}
160
+ />
161
+ </div>
162
+ )}
163
+ </Column.Row>
108
164
  );
109
165
  },
110
166
  );
@@ -119,7 +175,7 @@ type MessageContentProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Pri
119
175
  asChild?: boolean;
120
176
  };
121
177
 
122
- const MESSAGE_CONTENT_NAME = 'MessageContent';
178
+ const MESSAGE_CONTENT_NAME = 'Message.Content';
123
179
 
124
180
  const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
125
181
  ({ asChild, classNames, children, ...props }, forwardedRef) => {