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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/chunk-5SPBSIWS.mjs +33 -0
  4. package/dist/lib/browser/chunk-5SPBSIWS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-7JFD5ZHZ.mjs +1612 -0
  6. package/dist/lib/browser/chunk-7JFD5ZHZ.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +3039 -1891
  8. package/dist/lib/browser/index.mjs.map +4 -4
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/testing/index.mjs +10 -13
  11. package/dist/lib/browser/testing/index.mjs.map +3 -3
  12. package/dist/lib/browser/translations.mjs +9 -0
  13. package/dist/lib/browser/translations.mjs.map +7 -0
  14. package/dist/lib/node-esm/chunk-FPVTVXND.mjs +35 -0
  15. package/dist/lib/node-esm/chunk-FPVTVXND.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs +1614 -0
  17. package/dist/lib/node-esm/chunk-TTEL2FP2.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +3039 -1891
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/testing/index.mjs +10 -13
  22. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  23. package/dist/lib/node-esm/translations.mjs +10 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  26. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
  28. package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
  29. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
  31. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  32. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  33. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
  34. package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Button.d.ts +1 -1
  36. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  37. package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
  38. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
  40. package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
  41. package/dist/types/src/components/Button/IconButton.d.ts +1 -0
  42. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  43. package/dist/types/src/components/Button/IconButton.stories.d.ts +1 -0
  44. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
  46. package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
  47. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
  48. package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
  49. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
  50. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
  52. package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
  53. package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
  54. package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
  56. package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
  57. package/dist/types/src/components/Calendar/index.d.ts +2 -0
  58. package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
  59. package/dist/types/src/components/Card/Card.d.ts +63 -57
  60. package/dist/types/src/components/Card/Card.d.ts.map +1 -1
  61. package/dist/types/src/components/Card/Card.stories.d.ts +1 -0
  62. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
  64. package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
  65. package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
  66. package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
  67. package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
  68. package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
  69. package/dist/types/src/components/Carousel/index.d.ts +2 -0
  70. package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
  71. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  72. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  73. package/dist/types/src/components/Clipboard/index.d.ts +1 -1
  74. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  75. package/dist/types/src/{primitives → components}/Column/Column.d.ts +4 -4
  76. package/dist/types/src/components/Column/Column.d.ts.map +1 -0
  77. package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
  78. package/dist/types/src/components/Column/Column.theme.d.ts +9 -0
  79. package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
  80. package/dist/types/src/components/Column/index.d.ts +3 -0
  81. package/dist/types/src/components/Column/index.d.ts.map +1 -0
  82. package/dist/types/src/components/Column/withColumn.d.ts +21 -0
  83. package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
  84. package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
  85. package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
  86. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
  87. package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
  88. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
  89. package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
  90. package/dist/types/src/components/DatePicker/index.d.ts +2 -0
  91. package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
  92. package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
  93. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  94. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
  96. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  97. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
  99. package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
  100. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
  101. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
  103. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
  104. package/dist/types/src/components/Focus/Focus.d.ts +2 -2
  105. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  106. package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
  108. package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
  109. package/dist/types/src/components/Icon/Icon.d.ts +1 -0
  110. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  111. package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
  112. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
  113. package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
  114. package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
  115. package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
  116. package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
  117. package/dist/types/src/components/Icon/index.d.ts +1 -0
  118. package/dist/types/src/components/Icon/index.d.ts.map +1 -1
  119. package/dist/types/src/components/Image/Image.d.ts +8 -1
  120. package/dist/types/src/components/Image/Image.d.ts.map +1 -1
  121. package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
  122. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/Input/Input.d.ts +88 -13
  124. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  125. package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
  126. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
  128. package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
  129. package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
  130. package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
  131. package/dist/types/src/components/Input/constants.d.ts +2 -0
  132. package/dist/types/src/components/Input/constants.d.ts.map +1 -0
  133. package/dist/types/src/components/Input/index.d.ts +2 -0
  134. package/dist/types/src/components/Input/index.d.ts.map +1 -1
  135. package/dist/types/src/components/Link/Link.d.ts.map +1 -1
  136. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
  138. package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
  139. package/dist/types/src/components/List/List.d.ts +2 -2
  140. package/dist/types/src/components/List/List.d.ts.map +1 -1
  141. package/dist/types/src/components/List/List.stories.d.ts +1 -1
  142. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  143. package/dist/types/src/components/List/List.theme.d.ts +7 -0
  144. package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
  145. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
  146. package/dist/types/src/components/List/Tree.d.ts +2 -2
  147. package/dist/types/src/components/List/Tree.d.ts.map +1 -1
  148. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
  150. package/dist/types/src/components/List/Treegrid.d.ts +2 -2
  151. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  152. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
  154. package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
  155. package/dist/types/src/components/Main/Main.d.ts +9 -5
  156. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  157. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
  159. package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
  160. package/dist/types/src/components/Main/constants.d.ts +3 -0
  161. package/dist/types/src/components/Main/constants.d.ts.map +1 -0
  162. package/dist/types/src/components/Main/index.d.ts +1 -0
  163. package/dist/types/src/components/Main/index.d.ts.map +1 -1
  164. package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
  165. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
  166. package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
  167. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
  168. package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
  169. package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
  170. package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
  171. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
  172. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
  173. package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
  174. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
  175. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
  177. package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
  178. package/dist/types/src/components/Message/Message.d.ts +3 -3
  179. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  180. package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
  181. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  182. package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
  183. package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
  184. package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
  185. package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
  186. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
  187. package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
  188. package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
  189. package/dist/types/src/components/Panel/index.d.ts.map +1 -0
  190. package/dist/types/src/components/Popover/Popover.d.ts +10 -2
  191. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  192. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  193. package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
  194. package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
  195. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
  196. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  197. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
  198. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  199. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
  200. package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
  201. package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
  202. package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
  203. package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
  204. package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
  205. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
  206. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  207. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  209. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  210. package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
  211. package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
  212. package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
  213. package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
  214. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
  215. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
  216. package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
  217. package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
  218. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
  219. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
  220. package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
  221. package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
  222. package/dist/types/src/components/Status/Status.d.ts +1 -1
  223. package/dist/types/src/components/Status/Status.d.ts.map +1 -1
  224. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  225. package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
  226. package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
  227. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  228. package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
  229. package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
  230. package/dist/types/src/components/Toast/Toast.d.ts +12 -9
  231. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  232. package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
  233. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  234. package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
  235. package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
  236. package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
  237. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  238. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  239. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
  240. package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
  241. package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
  242. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  243. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  244. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
  245. package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
  246. package/dist/types/src/components/Tooltip/index.d.ts +1 -0
  247. package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
  248. package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
  249. package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
  250. package/dist/types/src/components/index.d.ts +7 -4
  251. package/dist/types/src/components/index.d.ts.map +1 -1
  252. package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
  253. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
  254. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
  255. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
  256. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
  257. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  258. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  259. package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
  260. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  261. package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
  262. package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
  263. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  264. package/dist/types/src/index.d.ts +1 -0
  265. package/dist/types/src/index.d.ts.map +1 -1
  266. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  267. package/dist/types/src/playground/Custom.stories.d.ts +1 -1
  268. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  269. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  270. package/dist/types/src/primitives/Container/Container.d.ts +1 -1
  271. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
  272. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
  273. package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
  274. package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
  275. package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  276. package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
  277. package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
  278. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
  279. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
  281. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
  282. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
  283. package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  284. package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  285. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
  286. package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
  287. package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
  288. package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
  289. package/dist/types/src/primitives/index.d.ts +3 -2
  290. package/dist/types/src/primitives/index.d.ts.map +1 -1
  291. package/dist/types/src/testing/Loading.d.ts.map +1 -1
  292. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  293. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  294. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  295. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  296. package/dist/types/src/theme/bindTheme.d.ts +3 -0
  297. package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
  298. package/dist/types/src/theme/defaultTheme.d.ts +4 -0
  299. package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
  300. package/dist/types/src/theme/index.d.ts +31 -0
  301. package/dist/types/src/theme/index.d.ts.map +1 -0
  302. package/dist/types/src/translations.d.ts +17 -3
  303. package/dist/types/src/translations.d.ts.map +1 -1
  304. package/dist/types/src/util/index.d.ts +2 -1
  305. package/dist/types/src/util/index.d.ts.map +1 -1
  306. package/dist/types/src/util/mobile.d.ts +5 -0
  307. package/dist/types/src/util/mobile.d.ts.map +1 -0
  308. package/dist/types/src/util/slots.d.ts +57 -0
  309. package/dist/types/src/util/slots.d.ts.map +1 -0
  310. package/dist/types/src/util/usePx.d.ts.map +1 -1
  311. package/dist/types/tsconfig.tsbuildinfo +1 -1
  312. package/package.json +29 -25
  313. package/src/components/Avatars/Avatar.theme.ts +93 -0
  314. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
  315. package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
  316. package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
  317. package/src/components/Button/Button.theme.ts +31 -0
  318. package/src/components/Button/Button.tsx +2 -2
  319. package/src/components/Button/IconButton.stories.tsx +51 -3
  320. package/src/components/Button/IconButton.theme.ts +21 -0
  321. package/src/components/Button/IconButton.tsx +3 -2
  322. package/src/components/Calendar/Calendar.stories.tsx +43 -0
  323. package/src/components/Calendar/Calendar.theme.ts +74 -0
  324. package/src/components/Calendar/Calendar.tsx +196 -0
  325. package/src/components/Calendar/index.ts +5 -0
  326. package/src/components/Card/Card.stories.tsx +43 -22
  327. package/src/components/Card/Card.theme.ts +93 -0
  328. package/src/components/Card/Card.tsx +161 -169
  329. package/src/components/Carousel/Carousel.stories.tsx +47 -0
  330. package/src/components/Carousel/Carousel.tsx +373 -0
  331. package/src/components/Carousel/index.ts +5 -0
  332. package/src/components/Clipboard/CopyButton.tsx +3 -3
  333. package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
  334. package/src/components/Column/Column.theme.ts +48 -0
  335. package/src/{primitives → components}/Column/Column.tsx +2 -1
  336. package/src/{primitives → components}/Column/index.ts +1 -0
  337. package/src/components/Column/withColumn.ts +27 -0
  338. package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
  339. package/src/components/DatePicker/DatePicker.theme.ts +35 -0
  340. package/src/components/DatePicker/DatePicker.tsx +279 -0
  341. package/src/components/DatePicker/index.ts +5 -0
  342. package/src/components/Dialog/AlertDialog.tsx +12 -16
  343. package/src/components/Dialog/Dialog.stories.tsx +2 -2
  344. package/src/components/Dialog/Dialog.theme.ts +61 -0
  345. package/src/components/Dialog/Dialog.tsx +46 -17
  346. package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
  347. package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
  348. package/src/components/Focus/Focus.theme.ts +32 -0
  349. package/src/components/Focus/Focus.tsx +1 -1
  350. package/src/components/Icon/Icon.theme.ts +45 -0
  351. package/src/components/Icon/Icon.tsx +10 -3
  352. package/src/components/Icon/IconBlock.tsx +38 -0
  353. package/src/components/Icon/index.ts +1 -0
  354. package/src/components/Image/Image.stories.tsx +1 -1
  355. package/src/components/Image/Image.tsx +38 -9
  356. package/src/components/Input/Input.stories.tsx +132 -29
  357. package/src/components/Input/Input.theme.ts +191 -0
  358. package/src/components/Input/Input.tsx +208 -2
  359. package/src/components/Input/SegmentedInput.tsx +454 -0
  360. package/src/components/Input/constants.ts +5 -0
  361. package/src/components/Input/index.ts +2 -0
  362. package/src/components/Link/Link.theme.ts +16 -0
  363. package/src/components/Link/Link.tsx +10 -2
  364. package/src/components/List/List.stories.tsx +1 -1
  365. package/src/components/List/List.theme.ts +47 -0
  366. package/src/components/List/List.tsx +3 -3
  367. package/src/components/List/ListDropIndicator.tsx +1 -2
  368. package/src/components/List/Tree.stories.tsx +1 -1
  369. package/src/components/List/TreeDropIndicator.tsx +3 -3
  370. package/src/components/List/Treegrid.theme.ts +35 -0
  371. package/src/components/List/Treegrid.tsx +3 -4
  372. package/src/components/Main/Main.theme.ts +29 -0
  373. package/src/components/Main/Main.tsx +9 -7
  374. package/src/components/Main/constants.ts +6 -0
  375. package/src/components/Main/index.ts +1 -0
  376. package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
  377. package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
  378. package/src/components/MediaPlayer/index.ts +5 -0
  379. package/src/components/Menu/ContextMenu.stories.tsx +0 -3
  380. package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
  381. package/src/components/Menu/DropdownMenu.tsx +15 -15
  382. package/src/components/Menu/Menu.theme.ts +48 -0
  383. package/src/components/Message/Message.stories.tsx +43 -5
  384. package/src/components/Message/Message.theme.ts +44 -0
  385. package/src/components/Message/Message.tsx +76 -16
  386. package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
  387. package/src/components/Panel/Panel.theme.ts +41 -0
  388. package/src/{primitives → components}/Panel/Panel.tsx +2 -1
  389. package/src/components/Popover/Popover.theme.ts +40 -0
  390. package/src/components/Popover/Popover.tsx +7 -7
  391. package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
  392. package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
  393. package/src/components/ScrollArea/ScrollArea.tsx +3 -2
  394. package/src/components/ScrollArea/index.ts +1 -0
  395. package/src/components/ScrollArea/scrollbar.ts +21 -0
  396. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
  397. package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
  398. package/src/components/Select/Select.theme.ts +55 -0
  399. package/src/components/Select/Select.tsx +26 -10
  400. package/src/components/Separator/Separator.theme.ts +23 -0
  401. package/src/components/Skeleton/Skeleton.theme.ts +22 -0
  402. package/src/components/Splitter/Splitter.stories.tsx +1 -1
  403. package/src/components/Splitter/Splitter.theme.ts +18 -0
  404. package/src/components/Splitter/Splitter.tsx +10 -15
  405. package/src/components/Status/Status.theme.ts +31 -0
  406. package/src/components/Status/Status.tsx +1 -2
  407. package/src/components/Tag/Tag.theme.ts +22 -0
  408. package/src/components/Toast/Toast.stories.tsx +41 -20
  409. package/src/components/Toast/Toast.theme.ts +56 -0
  410. package/src/components/Toast/Toast.tsx +95 -27
  411. package/src/components/Toolbar/Toolbar.theme.ts +36 -0
  412. package/src/components/Toolbar/Toolbar.tsx +67 -15
  413. package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
  414. package/src/components/Tooltip/Tooltip.theme.ts +19 -0
  415. package/src/components/Tooltip/Tooltip.tsx +18 -17
  416. package/src/components/Tooltip/index.ts +1 -0
  417. package/src/components/Tooltip/tooltipContent.ts +16 -0
  418. package/src/components/index.ts +7 -5
  419. package/src/exemplars/generics.stories.tsx +1 -2
  420. package/src/exemplars/slot.stories.tsx +5 -6
  421. package/src/exemplars/virtualizer.stories.tsx +0 -1
  422. package/src/hooks/useDensityContext.ts +1 -1
  423. package/src/hooks/useElevationContext.ts +1 -1
  424. package/src/hooks/useThemeContext.ts +1 -1
  425. package/src/hooks/useTranslationsContext.ts +1 -1
  426. package/src/index.ts +1 -0
  427. package/src/playground/Custom.stories.tsx +12 -32
  428. package/src/primitives/Container/Container.tsx +3 -1
  429. package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
  430. package/src/primitives/Flex/Flex.tsx +3 -1
  431. package/src/primitives/Grid/Grid.tsx +3 -1
  432. package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
  433. package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
  434. package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
  435. package/src/primitives/index.ts +4 -2
  436. package/src/testing/decorators/withLayout.tsx +7 -17
  437. package/src/testing/decorators/withLayoutVariants.tsx +1 -1
  438. package/src/testing/decorators/withTheme.tsx +21 -13
  439. package/src/theme/bindTheme.ts +13 -0
  440. package/src/theme/defaultTheme.ts +83 -0
  441. package/src/theme/index.ts +37 -0
  442. package/src/translations.ts +14 -0
  443. package/src/util/index.ts +2 -1
  444. package/src/util/mobile.ts +11 -0
  445. package/src/util/slots.ts +129 -0
  446. package/src/util/usePx.ts +4 -1
  447. package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
  448. package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
  449. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
  450. package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
  451. package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
  452. package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
  453. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
  454. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
  455. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
  456. package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
  457. package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
  458. package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
  459. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
  460. package/dist/types/src/primitives/Column/index.d.ts +0 -2
  461. package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
  462. package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
  463. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
  464. package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
  465. package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
  466. package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
  467. package/src/util/hasIosKeyboard.ts +0 -8
  468. /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
  469. /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
  470. /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
  471. /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
  472. /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
  473. /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
  474. /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
  475. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
  476. /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
  477. /package/src/{primitives → components}/Column/AUDIT.md +0 -0
  478. /package/src/{primitives → components}/Panel/index.ts +0 -0
  479. /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
  480. /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
  481. /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
  482. /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
@@ -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,23 +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' ? <div /> : <Icon icon={icon} classNames={tx('message.icon', { valence })} />}
102
- <span className={tx('message.title', {}, classNames)}>{children}</span>
103
- </Comp>
142
+ <Column.Row classNames={tx('message.header', {}, classNames)} ref={forwardedRef}>
143
+ {icon && (
144
+ <div className={tx('message.icon', { valence })}>
145
+ <Icon icon={icon} />
146
+ </div>
147
+ )}
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>
104
164
  );
105
165
  },
106
166
  );
@@ -115,7 +175,7 @@ type MessageContentProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Pri
115
175
  asChild?: boolean;
116
176
  };
117
177
 
118
- const MESSAGE_CONTENT_NAME = 'MessageContent';
178
+ const MESSAGE_CONTENT_NAME = 'Message.Content';
119
179
 
120
180
  const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
121
181
  ({ asChild, classNames, children, ...props }, forwardedRef) => {
@@ -5,10 +5,9 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { composable, composableProps } from '@dxos/ui-theme';
9
-
10
8
  import { Input, ScrollArea, ScrollAreaRootProps, Toolbar } from '../../components';
11
9
  import { withLayout, withTheme } from '../../testing';
10
+ import { composable, composableProps } from '../../util';
12
11
  import { Panel } from './Panel';
13
12
 
14
13
  const List = composable<HTMLDivElement, ScrollAreaRootProps>((props, forwardedRef) => {
@@ -53,7 +52,7 @@ const DefaultStory = () => {
53
52
  };
54
53
 
55
54
  const meta: Meta = {
56
- title: 'ui/react-ui-core/primitives/Panel',
55
+ title: 'ui/react-ui-core/components/Panel',
57
56
  render: DefaultStory,
58
57
  decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
59
58
  parameters: {
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type ComponentFunction } from '@dxos/ui-types';
7
+
8
+ type Size = 'lg' | 'md' | 'sm';
9
+
10
+ export type PanelStyleProps = {
11
+ size?: Size;
12
+ };
13
+
14
+ const sizes: Record<Size, string> = {
15
+ lg: 'h-(--dx-topbar-size)',
16
+ md: 'h-(--dx-toolbar-size)',
17
+ sm: 'h-(--dx-statusbar-size)',
18
+ };
19
+
20
+ const root: ComponentFunction<PanelStyleProps> = (_, ...etc) =>
21
+ mx(
22
+ 'dx-container grid grid-cols-[100%] overflow-hidden',
23
+ // Add uncategorized children to content slot.
24
+ '[&>*:not([data-slot])]:[grid-area:content]',
25
+ ...etc,
26
+ );
27
+
28
+ const toolbar: ComponentFunction<PanelStyleProps> = ({ size = 'md' }, ...etc) =>
29
+ mx('[grid-area:toolbar]', 'shrink-0', sizes[size], ...etc);
30
+
31
+ const content: ComponentFunction<PanelStyleProps> = (_, ...etc) => mx('[grid-area:content] min-h-0', ...etc);
32
+
33
+ const statusbar: ComponentFunction<PanelStyleProps> = ({ size = 'md' }, ...etc) =>
34
+ mx('[grid-area:statusbar]', 'shrink-0', sizes[size], ...etc);
35
+
36
+ export const panelTheme = {
37
+ root,
38
+ toolbar,
39
+ content,
40
+ statusbar,
41
+ };
@@ -6,10 +6,11 @@ import { Primitive } from '@radix-ui/react-primitive';
6
6
  import { Slot } from '@radix-ui/react-slot';
7
7
  import React, { type CSSProperties } from 'react';
8
8
 
9
- import { composableProps, PanelStyleProps, slottable } from '@dxos/ui-theme';
10
9
  import { type SlottableProps } from '@dxos/ui-types';
11
10
 
12
11
  import { useThemeContext } from '../../hooks';
12
+ import { PanelStyleProps } from '../../theme';
13
+ import { composableProps, slottable } from '../../util';
13
14
 
14
15
  //
15
16
  // Root
@@ -0,0 +1,40 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { mx, surfaceShadow, surfaceZIndex } from '@dxos/ui-theme';
6
+ import { type ComponentFunction, type Elevation, type Theme } from '@dxos/ui-types';
7
+
8
+ export type PopoverStyleProps = Partial<{
9
+ constrainBlock: boolean;
10
+ constrainInline: boolean;
11
+ elevation: Elevation;
12
+ }>;
13
+
14
+ const content: ComponentFunction<PopoverStyleProps> = ({ elevation }, ...etc) =>
15
+ mx(
16
+ 'dx-popover-surface border border-separator rounded-sm',
17
+ surfaceShadow({ elevation: 'positioned' }),
18
+ surfaceZIndex({ elevation, level: 'menu' }),
19
+ 'dx-focus-ring',
20
+ ...etc,
21
+ );
22
+
23
+ const viewport: ComponentFunction<PopoverStyleProps> = ({ constrainBlock, constrainInline }, ...etc) =>
24
+ mx(
25
+ 'grid grid-rows-[1fr] min-h-0 min-w-popover-min-width',
26
+ (constrainBlock || constrainInline) && 'overflow-hidden',
27
+ constrainBlock && 'max-h-(--radix-popover-content-available-height)',
28
+ constrainBlock &&
29
+ 'max-h-[min(var(--radix-popover-content-available-height),calc(100dvh-var(--spacing-screen-border)*2))]',
30
+ constrainInline && 'max-w-(--radix-popover-content-available-width)',
31
+ ...etc,
32
+ );
33
+
34
+ const arrow: ComponentFunction<PopoverStyleProps> = (_props, ...etc) => mx('fill-separator', ...etc);
35
+
36
+ export const popoverTheme: Theme<PopoverStyleProps> = {
37
+ content,
38
+ viewport,
39
+ arrow,
40
+ };
@@ -114,7 +114,7 @@ PopoverRoot.displayName = POPOVER_NAME;
114
114
  // PopoverAnchor
115
115
  //
116
116
 
117
- const ANCHOR_NAME = 'PopoverAnchor';
117
+ const ANCHOR_NAME = 'Popover.Anchor';
118
118
 
119
119
  type PopoverAnchorElement = ComponentRef<typeof PopperPrimitive.Anchor>;
120
120
  type PopperAnchorProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;
@@ -142,7 +142,7 @@ PopoverAnchor.displayName = ANCHOR_NAME;
142
142
  // PopoverTrigger
143
143
  //
144
144
 
145
- const TRIGGER_NAME = 'PopoverTrigger';
145
+ const TRIGGER_NAME = 'Popover.Trigger';
146
146
 
147
147
  type PopoverTriggerElement = ComponentRef<typeof Primitive.button>;
148
148
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
@@ -187,7 +187,7 @@ PopoverTrigger.displayName = TRIGGER_NAME;
187
187
  // PopoverVirtualTrigger
188
188
  //
189
189
 
190
- const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
190
+ const VIRTUAL_TRIGGER_NAME = 'Popover.VirtualTrigger';
191
191
 
192
192
  type PopoverVirtualTriggerProps = {
193
193
  virtualRef: RefObject<PopoverTriggerElement | null>;
@@ -211,7 +211,7 @@ PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
211
211
  // PopoverPortal
212
212
  //
213
213
 
214
- const PORTAL_NAME = 'PopoverPortal';
214
+ const PORTAL_NAME = 'Popover.Portal';
215
215
 
216
216
  type PortalContextValue = { forceMount?: true };
217
217
  const [PortalProvider, usePortalContext] = createPopoverContext<PortalContextValue>(PORTAL_NAME, {
@@ -252,7 +252,7 @@ PopoverPortal.displayName = PORTAL_NAME;
252
252
  // PopoverContent
253
253
  //
254
254
 
255
- const CONTENT_NAME = 'PopoverContent';
255
+ const CONTENT_NAME = 'Popover.Content';
256
256
 
257
257
  type PopoverContentProps = ThemedClassName<PopoverContentTypeProps> & {
258
258
  /**
@@ -512,7 +512,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
512
512
  // PopoverClose
513
513
  //
514
514
 
515
- const CLOSE_NAME = 'PopoverClose';
515
+ const CLOSE_NAME = 'Popover.Close';
516
516
 
517
517
  type PopoverCloseElement = ComponentRef<typeof Primitive.button>;
518
518
  type PopoverCloseProps = PrimitiveButtonProps;
@@ -538,7 +538,7 @@ PopoverClose.displayName = CLOSE_NAME;
538
538
  // PopoverArrow
539
539
  //
540
540
 
541
- const ARROW_NAME = 'PopoverArrow';
541
+ const ARROW_NAME = 'Popover.Arrow';
542
542
 
543
543
  type PopoverArrowElement = ComponentRef<typeof PopperPrimitive.Arrow>;
544
544
  type PopperArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Arrow>>;
@@ -8,8 +8,8 @@ import { random } from '@dxos/random';
8
8
  import { mx } from '@dxos/ui-theme';
9
9
  import { ThemedClassName } from '@dxos/ui-types';
10
10
 
11
- import { Column } from '../../primitives';
12
11
  import { withLayout, withTheme } from '../../testing';
12
+ import { Column } from '../Column';
13
13
  import { Input } from '../Input';
14
14
  import { ScrollArea } from './ScrollArea';
15
15
 
@@ -48,11 +48,7 @@ const Row = ({ items = 50 }: { items?: number }) => (
48
48
  );
49
49
 
50
50
  const Container = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {
51
- return (
52
- <div role='none' className={mx('border border-separator rounded-md overflow-hidden', classNames)}>
53
- {children}
54
- </div>
55
- );
51
+ return <div className={mx('border border-separator rounded-md overflow-hidden', classNames)}>{children}</div>;
56
52
  };
57
53
 
58
54
  export const Vertical = {
@@ -0,0 +1,107 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { mx } from '@dxos/ui-theme';
6
+ import { type AllowedAxis, type ComponentFunction, type Theme } from '@dxos/ui-types';
7
+
8
+ import { withColumn } from '../Column/withColumn';
9
+
10
+ export type ScrollAreaStyleProps = {
11
+ orientation?: AllowedAxis;
12
+ autoHide?: boolean;
13
+ /** Balance left/right, top/bottom offset with scrollbar. */
14
+ centered?: boolean;
15
+ /** Add default padding. */
16
+ /** TODO(burdon): Integrate with Column.Root padding. */
17
+ padding?: boolean;
18
+ /** Use thin scrollbars. */
19
+ /** TODO(burdon): Density fine/course. */
20
+ thin?: boolean;
21
+ /** Enable snap scrolling. */
22
+ snap?: boolean;
23
+ };
24
+
25
+ const root: ComponentFunction<ScrollAreaStyleProps> = ({ orientation }, ...etc) =>
26
+ mx(
27
+ // Expand
28
+ 'dx-container',
29
+
30
+ orientation === 'vertical' && 'group/scroll-v flex flex-col',
31
+ orientation === 'horizontal' && 'group/scroll-h flex',
32
+ // `flex flex-col` is required (as in `vertical`) so the viewport's `flex-1 min-h-0` can
33
+ // bound its height; without it the viewport grows to content height and only scrolls
34
+ // horizontally (the root clips the vertical overflow instead of scrolling it).
35
+ orientation === 'all' && 'group/scroll-all flex flex-col',
36
+
37
+ // Apply col-span-full only when inside a Column.Root grid (detected via dx-column-root marker).
38
+ '[.dx-column-root_&]:col-span-full',
39
+
40
+ ...etc,
41
+ );
42
+
43
+ /**
44
+ * NOTE: The browser reserves space for scrollbars.
45
+ */
46
+ const viewport: ComponentFunction<ScrollAreaStyleProps> = (
47
+ { orientation, centered, padding, snap, autoHide },
48
+ ...etc
49
+ ) => {
50
+ return mx(
51
+ 'flex-1 min-h-0 w-full',
52
+
53
+ // Reset --dx-col so nested components don't try to grid-position themselves.
54
+ // ScrollArea has already consumed --gutter for padding.
55
+ withColumn.consumed(),
56
+
57
+ orientation === 'vertical' && 'overflow-y-scroll',
58
+ orientation === 'horizontal' && 'flex overflow-x-scroll overscroll-x-contain',
59
+ orientation === 'all' && 'overflow-scroll',
60
+
61
+ '[&::-webkit-scrollbar-corner]:bg-transparent',
62
+ '[&::-webkit-scrollbar-track]:bg-transparent',
63
+ '[&::-webkit-scrollbar-thumb]:rounded-none',
64
+
65
+ '[&::-webkit-scrollbar]:w-[var(--scroll-width)] [&::-webkit-scrollbar]:h-[var(--scroll-width)]',
66
+
67
+ // If contained within Column.Root grid the gutter is set by that component (--gutter CSS variable).
68
+ // If centered, left padding compensates for scrollbar width so content is visually centered.
69
+ (orientation === 'vertical' || orientation === 'all') &&
70
+ (padding
71
+ ? [
72
+ centered ? 'pl-[var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))]' : 'pl-[var(--gutter,0)]',
73
+ 'pr-[calc(var(--gutter,calc(var(--scroll-width)+var(--scroll-padding)))-var(--scroll-width))]',
74
+ ]
75
+ : centered && 'pl-[var(--scroll-width)]'),
76
+
77
+ (orientation === 'horizontal' || orientation === 'all') &&
78
+ (padding
79
+ ? [centered && 'pt-[calc(var(--scroll-width)+var(--scroll-padding))]', 'pb-[var(--scroll-padding)]']
80
+ : centered && 'pt-[var(--scroll-width)]'),
81
+
82
+ snap && [
83
+ orientation === 'vertical' && 'snap-y snap-mandatory',
84
+ orientation === 'horizontal' && 'snap-x snap-mandatory',
85
+ orientation === 'all' && 'snap-both snap-mandatory',
86
+ ],
87
+
88
+ autoHide
89
+ ? [
90
+ orientation === 'vertical' && 'group-hover/scroll-v:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
91
+ orientation === 'horizontal' && 'group-hover/scroll-h:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
92
+ orientation === 'all' && 'group-hover/scroll-all:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
93
+ ]
94
+ : [
95
+ orientation === 'vertical' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
96
+ orientation === 'horizontal' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
97
+ orientation === 'all' && '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
98
+ ],
99
+
100
+ ...etc,
101
+ );
102
+ };
103
+
104
+ export const scrollAreaTheme: Theme<ScrollAreaStyleProps> = {
105
+ root,
106
+ viewport,
107
+ };
@@ -7,10 +7,11 @@ import { Primitive } from '@radix-ui/react-primitive';
7
7
  import { Slot } from '@radix-ui/react-slot';
8
8
  import React, { CSSProperties, useMemo } from 'react';
9
9
 
10
- import { composableProps, scrollbar, slottable } from '@dxos/ui-theme';
11
10
  import { type AllowedAxis, type SlottableProps } from '@dxos/ui-types';
12
11
 
13
12
  import { useThemeContext } from '../../hooks';
13
+ import { composableProps, slottable } from '../../util';
14
+ import { scrollbar } from './scrollbar';
14
15
 
15
16
  //
16
17
  // Context
@@ -92,7 +93,7 @@ type ScrollAreaViewportProps = SlottableProps;
92
93
  const ScrollAreaViewport = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
93
94
  const { tx } = useThemeContext();
94
95
  const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
95
- const density = options.thin ? scrollbar.thin : scrollbar.coarse;
96
+ const density = options.thin ? scrollbar.md : scrollbar.lg;
96
97
  const { className, ...rest } = composableProps(props);
97
98
  const { style, ...restWithoutStyle } = rest as { style?: CSSProperties; [key: string]: any };
98
99
  const Comp = asChild ? Slot : Primitive.div;
@@ -3,3 +3,4 @@
3
3
  //
4
4
 
5
5
  export * from './ScrollArea';
6
+ export * from './scrollbar';
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Scrollbar sizing presets keyed by density tier.
7
+ */
8
+ export const scrollbar = {
9
+ sm: {
10
+ size: 2,
11
+ padding: 2,
12
+ },
13
+ md: {
14
+ size: 4,
15
+ padding: 4,
16
+ },
17
+ lg: {
18
+ size: 8,
19
+ padding: 8,
20
+ },
21
+ };
@@ -7,9 +7,9 @@ import React, { useEffect, useRef, useState } from 'react';
7
7
 
8
8
  import { random } from '@dxos/random';
9
9
 
10
- import { Panel } from '../../primitives';
11
10
  import { withLayout, withTheme } from '../../testing';
12
11
  import { Button } from '../Button';
12
+ import { Panel } from '../Panel';
13
13
  import { Toolbar } from '../Toolbar';
14
14
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
15
15