@dxos/react-ui 0.8.4-main.67995b8 → 0.8.4-main.69d29f4

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 (312) hide show
  1. package/dist/lib/browser/chunk-CEKVHJ27.mjs +774 -0
  2. package/dist/lib/browser/chunk-CEKVHJ27.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3069 -59
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +65 -49
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-2NHEX4AD.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-2NHEX4AD.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3069 -59
  11. package/dist/lib/node-esm/index.mjs.map +4 -4
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +65 -49
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  18. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  20. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  22. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  25. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  26. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  27. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  28. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  30. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  31. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  32. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  34. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  35. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  37. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  41. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  42. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  43. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  44. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  45. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  46. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
  47. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  48. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  49. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  50. package/dist/types/src/components/Dialog/Dialog.d.ts +40 -0
  51. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  52. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
  53. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  55. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  56. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  57. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  58. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  59. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  60. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/Input/Input.d.ts +6 -5
  62. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  63. package/dist/types/src/components/Input/Input.stories.d.ts +11 -12
  64. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  66. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  68. package/dist/types/src/components/List/List.d.ts.map +1 -0
  69. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  70. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  71. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  72. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  73. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  74. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  75. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  76. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  77. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  78. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  79. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  80. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/List/index.d.ts.map +1 -0
  82. package/dist/types/src/components/Main/Main.d.ts +10 -19
  83. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  84. package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
  85. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  87. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  88. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  89. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  91. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  92. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  93. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  95. package/dist/types/src/components/Message/Message.d.ts +1 -1
  96. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  97. package/dist/types/src/components/Message/Message.stories.d.ts +8 -17
  98. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/Popover/Popover.d.ts +3 -3
  100. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  101. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  102. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +10 -8
  104. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  105. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +8 -30
  106. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  108. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  109. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
  110. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  111. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  112. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  113. package/dist/types/src/components/Select/Select.d.ts +10 -10
  114. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  115. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  116. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  118. package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
  119. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  121. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  122. package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
  123. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -3
  125. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  126. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  127. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  128. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  129. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  130. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  131. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  132. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  133. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Toolbar/Toolbar.d.ts +17 -17
  135. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  136. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  137. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  139. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  140. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  141. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  142. package/dist/types/src/components/index.d.ts +5 -4
  143. package/dist/types/src/components/index.d.ts.map +1 -1
  144. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  145. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  146. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  147. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  148. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  150. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +1 -1
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  154. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  155. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  156. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  157. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  158. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  159. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  160. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  161. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  162. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  163. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  164. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  165. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -0
  166. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  167. package/dist/types/src/util/index.d.ts +2 -1
  168. package/dist/types/src/util/index.d.ts.map +1 -1
  169. package/dist/types/src/util/usePx.d.ts +8 -0
  170. package/dist/types/src/util/usePx.d.ts.map +1 -0
  171. package/dist/types/tsconfig.tsbuildinfo +1 -1
  172. package/package.json +37 -31
  173. package/src/components/Avatars/Avatar.stories.tsx +21 -12
  174. package/src/components/Avatars/Avatar.tsx +4 -4
  175. package/src/components/Avatars/AvatarGroup.stories.tsx +10 -6
  176. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +17 -12
  177. package/src/components/Breadcrumb/Breadcrumb.tsx +1 -1
  178. package/src/components/{Buttons → Button}/Button.stories.tsx +8 -9
  179. package/src/components/{Buttons → Button}/Button.tsx +1 -1
  180. package/src/components/{Buttons → Button}/IconButton.stories.tsx +11 -8
  181. package/src/components/{Buttons → Button}/IconButton.tsx +22 -15
  182. package/src/components/{Buttons → Button}/Toggle.stories.tsx +13 -9
  183. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +10 -7
  184. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  185. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  186. package/src/components/Clipboard/CopyButton.tsx +6 -5
  187. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  188. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +15 -12
  189. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +13 -13
  190. package/src/components/Dialog/Dialog.stories.tsx +97 -0
  191. package/src/components/{Dialogs → Dialog}/Dialog.tsx +151 -51
  192. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  193. package/src/components/Icon/Icon.stories.tsx +113 -0
  194. package/src/components/Icon/Icon.tsx +2 -2
  195. package/src/components/Input/Input.stories.tsx +13 -15
  196. package/src/components/Input/Input.tsx +28 -19
  197. package/src/components/Link/Link.stories.tsx +10 -6
  198. package/src/components/{Lists → List}/List.stories.tsx +32 -26
  199. package/src/components/{Lists → List}/List.tsx +17 -13
  200. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  201. package/src/components/{Lists → List}/Tree.stories.tsx +11 -8
  202. package/src/components/{Lists → List}/Tree.tsx +4 -3
  203. package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
  204. package/src/components/{Lists → List}/Treegrid.stories.tsx +12 -6
  205. package/src/components/{Lists → List}/Treegrid.tsx +58 -17
  206. package/src/components/Main/Main.stories.tsx +17 -9
  207. package/src/components/Main/Main.tsx +43 -28
  208. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +11 -8
  209. package/src/components/{Menus → Menu}/ContextMenu.tsx +1 -0
  210. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +12 -9
  211. package/src/components/{Menus → Menu}/DropdownMenu.tsx +102 -71
  212. package/src/components/Message/Message.stories.tsx +12 -8
  213. package/src/components/Message/Message.tsx +30 -5
  214. package/src/components/Popover/Popover.stories.tsx +12 -9
  215. package/src/components/Popover/Popover.tsx +64 -45
  216. package/src/components/ScrollArea/ScrollArea.stories.tsx +64 -11
  217. package/src/components/ScrollArea/ScrollArea.tsx +54 -8
  218. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
  219. package/src/components/ScrollContainer/ScrollContainer.tsx +233 -0
  220. package/src/components/ScrollContainer/index.ts +5 -0
  221. package/src/components/Select/Select.stories.tsx +15 -12
  222. package/src/components/Select/Select.tsx +9 -8
  223. package/src/components/Status/Status.stories.tsx +9 -6
  224. package/src/components/Tag/Tag.stories.tsx +20 -11
  225. package/src/components/Tag/Tag.tsx +1 -1
  226. package/src/components/ThemeProvider/ThemeProvider.tsx +3 -4
  227. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  228. package/src/components/ThemeProvider/index.ts +3 -3
  229. package/src/components/Toast/Toast.stories.tsx +12 -9
  230. package/src/components/Toast/Toast.tsx +9 -9
  231. package/src/components/Toolbar/Toolbar.stories.tsx +14 -12
  232. package/src/components/Toolbar/Toolbar.tsx +37 -10
  233. package/src/components/Tooltip/Tooltip.stories.tsx +16 -12
  234. package/src/components/Tooltip/Tooltip.tsx +27 -24
  235. package/src/components/index.ts +5 -4
  236. package/src/hooks/useDensityContext.ts +1 -1
  237. package/src/hooks/useElevationContext.ts +1 -1
  238. package/src/hooks/useSafeArea.ts +3 -2
  239. package/src/hooks/useVisualViewport.ts +4 -4
  240. package/src/index.ts +1 -1
  241. package/src/playground/Controls.stories.tsx +12 -8
  242. package/src/playground/Custom.stories.tsx +13 -24
  243. package/src/playground/Typography.stories.tsx +8 -6
  244. package/src/testing/decorators/index.ts +2 -1
  245. package/src/testing/decorators/withLayout.tsx +63 -0
  246. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +5 -5
  247. package/src/testing/decorators/withTheme.tsx +32 -0
  248. package/src/util/index.ts +3 -1
  249. package/src/util/usePx.ts +61 -0
  250. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  251. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  253. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  254. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  255. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  256. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  257. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  258. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  259. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  260. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  261. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  262. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  263. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  264. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  265. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  266. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  267. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  268. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  269. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  270. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  271. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  272. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  273. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  274. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  275. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  276. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  277. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  278. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  279. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  280. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  281. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  282. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  283. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  284. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  285. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  286. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  287. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  288. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  289. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  290. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  291. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  292. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  293. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  294. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  295. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  296. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  297. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  298. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  299. package/src/testing/decorators/withTheme.ts +0 -25
  300. package/src/util/ThemedClassName.ts +0 -7
  301. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  302. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  303. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  304. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  305. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  306. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  307. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  308. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  309. /package/src/components/{Buttons → Button}/index.ts +0 -0
  310. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  311. /package/src/components/{Lists → List}/index.ts +0 -0
  312. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -2,15 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
8
7
 
9
- import { type MessageValence } from '@dxos/react-ui-types';
8
+ import { type MessageValence } from '@dxos/ui-types';
10
9
 
11
- import { Callout } from './Message';
12
10
  import { withTheme } from '../../testing';
13
11
 
12
+ import { Callout } from './Message';
13
+
14
14
  type StoryProps = {
15
15
  valence: MessageValence;
16
16
  title: string;
@@ -24,9 +24,9 @@ const DefaultStory = ({ valence, title, body }: StoryProps) => (
24
24
  </Callout.Root>
25
25
  );
26
26
 
27
- export default {
27
+ const meta = {
28
28
  title: 'ui/react-ui-core/Callout',
29
- component: Callout,
29
+ component: Callout.Root as any,
30
30
  render: DefaultStory,
31
31
  decorators: [withTheme],
32
32
  parameters: { chromatic: { disableSnapshot: false } },
@@ -36,9 +36,13 @@ export default {
36
36
  options: ['success', 'info', 'warning', 'error', 'neutral'],
37
37
  },
38
38
  },
39
- };
39
+ } satisfies Meta<typeof DefaultStory>;
40
+
41
+ export default meta;
42
+
43
+ type Story = StoryObj<typeof meta>;
40
44
 
41
- export const Default = {
45
+ export const Default: Story = {
42
46
  args: {
43
47
  valence: 'neutral',
44
48
  title: 'Alert title',
@@ -8,7 +8,7 @@ import { Slot } from '@radix-ui/react-slot';
8
8
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
9
9
 
10
10
  import { useId } from '@dxos/react-hooks';
11
- import { type MessageValence, type Elevation } from '@dxos/react-ui-types';
11
+ import { type Elevation, type MessageValence } from '@dxos/ui-types';
12
12
 
13
13
  import { useElevationContext, useThemeContext } from '../../hooks';
14
14
  import { type ThemedClassName } from '../../util';
@@ -31,9 +31,15 @@ type MessageRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.d
31
31
  };
32
32
 
33
33
  type MessageContextValue = { titleId?: string; descriptionId: string; valence: MessageValence };
34
+
34
35
  const MESSAGE_NAME = 'Message';
36
+
35
37
  const [MessageProvider, useMessageContext] = createContext<MessageContextValue>(MESSAGE_NAME);
36
38
 
39
+ //
40
+ // Root
41
+ //
42
+
37
43
  const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
38
44
  (
39
45
  {
@@ -53,6 +59,7 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
53
59
  const descriptionId = useId('message__description', propsDescriptionId);
54
60
  const elevation = useElevationContext(propsElevation);
55
61
  const Root = asChild ? Slot : Primitive.div;
62
+
56
63
  return (
57
64
  <MessageProvider {...{ titleId, descriptionId, valence }}>
58
65
  <Root
@@ -72,6 +79,10 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
72
79
 
73
80
  MessageRoot.displayName = MESSAGE_NAME;
74
81
 
82
+ //
83
+ // Title
84
+ //
85
+
75
86
  type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
76
87
  asChild?: boolean;
77
88
  icon?: string;
@@ -84,6 +95,7 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
84
95
  const { tx } = useThemeContext();
85
96
  const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
86
97
  const Root = asChild ? Slot : Primitive.h2;
98
+
87
99
  return (
88
100
  <Root
89
101
  {...props}
@@ -106,16 +118,20 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
106
118
 
107
119
  MessageTitle.displayName = MESSAGE_TITLE_NAME;
108
120
 
121
+ //
122
+ // Content
123
+ //
124
+
109
125
  type MessageContentProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
110
126
  asChild?: boolean;
111
127
  };
112
128
 
113
- const MESSAGE_BODY_NAME = 'MessageContent';
129
+ const MESSAGE_CONTENT_NAME = 'MessageContent';
114
130
 
115
131
  const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
116
132
  ({ asChild, classNames, children, ...props }, forwardedRef) => {
117
133
  const { tx } = useThemeContext();
118
- const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
134
+ const { descriptionId } = useMessageContext(MESSAGE_CONTENT_NAME);
119
135
  const Root = asChild ? Slot : Primitive.p;
120
136
  return (
121
137
  <Root
@@ -130,9 +146,18 @@ const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
130
146
  },
131
147
  );
132
148
 
133
- MessageContent.displayName = MESSAGE_BODY_NAME;
149
+ MessageContent.displayName = MESSAGE_CONTENT_NAME;
150
+
151
+ //
152
+ // Message
153
+ //
154
+
155
+ export const Message = {
156
+ Root: MessageRoot,
157
+ Title: MessageTitle,
158
+ Content: MessageContent,
159
+ };
134
160
 
135
- export const Message = { Root: MessageRoot, Title: MessageTitle, Content: MessageContent };
136
161
  export const Callout = Message;
137
162
 
138
163
  export type { MessageRootProps, MessageTitleProps, MessageContentProps };
@@ -2,15 +2,15 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { type PropsWithChildren, type ReactNode, useRef, useState } from 'react';
8
7
 
9
8
  import { faker } from '@dxos/random';
10
9
 
11
- import { Popover } from './Popover';
12
10
  import { withTheme } from '../../testing';
13
- import { Button } from '../Buttons';
11
+ import { Button } from '../Button';
12
+
13
+ import { Popover } from './Popover';
14
14
 
15
15
  faker.seed(1234);
16
16
 
@@ -28,15 +28,18 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
28
28
  );
29
29
  };
30
30
 
31
- export default {
31
+ const meta = {
32
32
  title: 'ui/react-ui-core/Popover',
33
- component: Popover,
33
+ component: Popover.Root,
34
34
  render: DefaultStory,
35
35
  decorators: [withTheme],
36
- parameters: { chromatic: { disableSnapshot: false } },
37
- };
36
+ } satisfies Meta<typeof DefaultStory>;
37
+
38
+ export default meta;
39
+
40
+ type Story = StoryObj<typeof meta>;
38
41
 
39
- export const Default = {
42
+ export const Default: Story = {
40
43
  args: {
41
44
  openTrigger: <Button>Open popover</Button>,
42
45
  children: faker.lorem.paragraphs(3),
@@ -22,17 +22,18 @@ import { useControllableState } from '@radix-ui/react-use-controllable-state';
22
22
  import { hideOthers } from 'aria-hidden';
23
23
  import React, {
24
24
  type ComponentPropsWithRef,
25
- forwardRef,
25
+ type ComponentPropsWithoutRef,
26
26
  type ElementRef,
27
- type RefObject,
27
+ type FC,
28
+ type MutableRefObject,
28
29
  type ReactNode,
29
- useRef,
30
+ type RefObject,
31
+ forwardRef,
30
32
  useCallback,
31
- type ComponentPropsWithoutRef,
32
- type FC,
33
- useState,
34
33
  useEffect,
35
- type MutableRefObject,
34
+ useMemo,
35
+ useRef,
36
+ useState,
36
37
  } from 'react';
37
38
  import { RemoveScroll } from 'react-remove-scroll';
38
39
 
@@ -40,9 +41,9 @@ import { useElevationContext, useThemeContext } from '../../hooks';
40
41
  import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
41
42
  import { type ThemedClassName } from '../../util';
42
43
 
43
- /* -------------------------------------------------------------------------------------------------
44
- * Popover
45
- * ----------------------------------------------------------------------------------------------- */
44
+ //
45
+ // Context
46
+ //
46
47
 
47
48
  const POPOVER_NAME = 'Popover';
48
49
 
@@ -64,6 +65,10 @@ type PopoverContextValue = {
64
65
 
65
66
  const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
66
67
 
68
+ //
69
+ // PopoverRoot
70
+ //
71
+
67
72
  interface PopoverRootProps {
68
73
  children?: ReactNode;
69
74
  open?: boolean;
@@ -105,9 +110,9 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
105
110
 
106
111
  PopoverRoot.displayName = POPOVER_NAME;
107
112
 
108
- /* -------------------------------------------------------------------------------------------------
109
- * PopoverAnchor
110
- * ----------------------------------------------------------------------------------------------- */
113
+ //
114
+ // PopoverAnchor
115
+ //
111
116
 
112
117
  const ANCHOR_NAME = 'PopoverAnchor';
113
118
 
@@ -133,9 +138,9 @@ const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
133
138
 
134
139
  PopoverAnchor.displayName = ANCHOR_NAME;
135
140
 
136
- /* -------------------------------------------------------------------------------------------------
137
- * PopoverTrigger
138
- * ----------------------------------------------------------------------------------------------- */
141
+ //
142
+ // PopoverTrigger
143
+ //
139
144
 
140
145
  const TRIGGER_NAME = 'PopoverTrigger';
141
146
 
@@ -175,14 +180,14 @@ const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
175
180
 
176
181
  PopoverTrigger.displayName = TRIGGER_NAME;
177
182
 
178
- /* -------------------------------------------------------------------------------------------------
179
- * PopoverVirtualTrigger
180
- * ----------------------------------------------------------------------------------------------- */
183
+ //
184
+ // PopoverVirtualTrigger
185
+ //
181
186
 
182
187
  const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
183
188
 
184
189
  interface PopoverVirtualTriggerProps {
185
- virtualRef: RefObject<PopoverTriggerElement>;
190
+ virtualRef: RefObject<PopoverTriggerElement | null>;
186
191
  }
187
192
 
188
193
  const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
@@ -194,14 +199,14 @@ const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) =
194
199
  context.triggerRef.current = virtualRef.current;
195
200
  }
196
201
  });
197
- return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef} />;
202
+ return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef as RefObject<PopoverTriggerElement>} />;
198
203
  };
199
204
 
200
205
  PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
201
206
 
202
- /* -------------------------------------------------------------------------------------------------
203
- * PopoverPortal
204
- * ----------------------------------------------------------------------------------------------- */
207
+ //
208
+ // PopoverPortal
209
+ //
205
210
 
206
211
  const PORTAL_NAME = 'PopoverPortal';
207
212
 
@@ -240,9 +245,9 @@ const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalP
240
245
 
241
246
  PopoverPortal.displayName = PORTAL_NAME;
242
247
 
243
- /* -------------------------------------------------------------------------------------------------
244
- * PopoverContent
245
- * ----------------------------------------------------------------------------------------------- */
248
+ //
249
+ // PopoverContent
250
+ //
246
251
 
247
252
  const CONTENT_NAME = 'PopoverContent';
248
253
 
@@ -274,8 +279,6 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
274
279
 
275
280
  PopoverContent.displayName = CONTENT_NAME;
276
281
 
277
- /* ----------------------------------------------------------------------------------------------- */
278
-
279
282
  type PopoverContentTypeElement = PopoverContentImplElement;
280
283
  export interface PopoverContentTypeProps
281
284
  extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
@@ -390,12 +393,11 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
390
393
  },
391
394
  );
392
395
 
393
- /* ----------------------------------------------------------------------------------------------- */
394
-
395
396
  type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
396
397
  type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
397
398
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
398
399
  type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
400
+
399
401
  interface PopoverContentImplProps
400
402
  extends Omit<PopperContentProps, 'onPlaced'>,
401
403
  Omit<DismissableLayerProps, 'onDismiss'> {
@@ -431,6 +433,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
431
433
  onFocusOutside,
432
434
  onInteractOutside,
433
435
  collisionPadding = 8,
436
+ collisionBoundary,
434
437
  classNames,
435
438
  ...contentProps
436
439
  } = props;
@@ -440,10 +443,23 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
440
443
  const elevation = useElevationContext();
441
444
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
442
445
 
443
- // Make sure the whole tree has focus guards as our `Popover` may be
444
- // the last element in the DOM (because of the `Portal`)
446
+ // Make sure the whole tree has focus guards as our `Popover` may be the last element in the DOM (because of the `Portal`)
445
447
  useFocusGuards();
446
448
 
449
+ // Check for the closest annotated collision boundary in the DOM tree.
450
+ const computedCollisionBoundary = useMemo(() => {
451
+ const closestBoundary = context.triggerRef.current?.closest(
452
+ '[data-popover-collision-boundary]',
453
+ ) as HTMLElement | null;
454
+ return closestBoundary
455
+ ? Array.isArray(collisionBoundary)
456
+ ? [closestBoundary, ...collisionBoundary]
457
+ : collisionBoundary
458
+ ? [closestBoundary, collisionBoundary]
459
+ : [closestBoundary]
460
+ : collisionBoundary;
461
+ }, [context.open, collisionBoundary, context.triggerRef.current]);
462
+
447
463
  return (
448
464
  <FocusScope
449
465
  asChild
@@ -468,11 +484,12 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
468
484
  {...popperScope}
469
485
  {...contentProps}
470
486
  collisionPadding={safeCollisionPadding}
487
+ collisionBoundary={computedCollisionBoundary}
471
488
  className={tx('popover.content', 'popover', { elevation }, classNames)}
472
489
  ref={forwardedRef}
473
490
  style={{
474
491
  ...contentProps.style,
475
- // re-namespace exposed content custom properties
492
+ // Re-namespace exposed content custom properties.
476
493
  ...{
477
494
  '--radix-popover-content-transform-origin': 'var(--radix-popper-transform-origin)',
478
495
  '--radix-popover-content-available-width': 'var(--radix-popper-available-width)',
@@ -488,9 +505,9 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
488
505
  },
489
506
  );
490
507
 
491
- /* -------------------------------------------------------------------------------------------------
492
- * PopoverClose
493
- * ----------------------------------------------------------------------------------------------- */
508
+ //
509
+ // PopoverClose
510
+ //
494
511
 
495
512
  const CLOSE_NAME = 'PopoverClose';
496
513
 
@@ -514,9 +531,9 @@ const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
514
531
 
515
532
  PopoverClose.displayName = CLOSE_NAME;
516
533
 
517
- /* -------------------------------------------------------------------------------------------------
518
- * PopoverArrow
519
- * ----------------------------------------------------------------------------------------------- */
534
+ //
535
+ // PopoverArrow
536
+ //
520
537
 
521
538
  const ARROW_NAME = 'PopoverArrow';
522
539
 
@@ -542,9 +559,9 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
542
559
 
543
560
  PopoverArrow.displayName = ARROW_NAME;
544
561
 
545
- /* -------------------------------------------------------------------------------------------------
546
- * PopoverViewport
547
- * ----------------------------------------------------------------------------------------------- */
562
+ //
563
+ // PopoverViewport
564
+ //
548
565
 
549
566
  type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
550
567
  asChild?: boolean;
@@ -568,12 +585,14 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
568
585
  },
569
586
  );
570
587
 
571
- /* ----------------------------------------------------------------------------------------------- */
572
-
573
588
  const getState = (open: boolean) => (open ? 'open' : 'closed');
574
589
 
575
590
  type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
576
591
 
592
+ //
593
+ // Popver
594
+ //
595
+
577
596
  export const Popover = {
578
597
  Root: PopoverRoot,
579
598
  Anchor: PopoverAnchor,
@@ -2,15 +2,15 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { type PropsWithChildren } from 'react';
8
7
 
9
8
  import { faker } from '@dxos/random';
10
- import { activeSurface, surfaceShadow } from '@dxos/react-ui-theme';
9
+ import { activeSurface, surfaceShadow } from '@dxos/ui-theme';
10
+
11
+ import { withLayout, withTheme } from '../../testing';
11
12
 
12
13
  import { ScrollArea } from './ScrollArea';
13
- import { withTheme } from '../../testing';
14
14
 
15
15
  faker.seed(1234);
16
16
 
@@ -33,16 +33,69 @@ const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
33
33
  );
34
34
  };
35
35
 
36
- export default {
37
- title: 'ui/react-ui-core/Scroll area',
38
- component: ScrollArea,
36
+ const meta = {
37
+ title: 'ui/react-ui-core/ScrollArea',
38
+ component: ScrollArea as any,
39
39
  render: DefaultStory,
40
- decorators: [withTheme],
41
- parameters: { chromatic: { disableSnapshot: false } },
42
- };
40
+ decorators: [withTheme, withLayout({ layout: 'fullscreen' })],
41
+ parameters: {
42
+ layout: 'fullscreen',
43
+ },
44
+ } satisfies Meta<typeof DefaultStory>;
45
+
46
+ export default meta;
43
47
 
44
- export const Default = {
48
+ type Story = StoryObj<typeof meta>;
49
+
50
+ export const Default: Story = {
45
51
  args: {
46
52
  children: faker.lorem.paragraphs(5),
47
53
  },
48
54
  };
55
+
56
+ export const NestedScrollAreas: Story = {
57
+ render: () => {
58
+ const columns = Array.from({ length: 3 }).map((_, index) => ({
59
+ id: String(index),
60
+ itemCount: 20,
61
+ }));
62
+
63
+ return (
64
+ <div className='p-4 bs-full is-full overflow-hidden'>
65
+ <div className='flex bs-full is-full overflow-hidden border border-sky-500'>
66
+ <ScrollArea.Root>
67
+ <ScrollArea.Viewport>
68
+ <div className='flex gap-4 p-3 bs-full overflow-hidden'>
69
+ {columns.map((column) => (
70
+ <div key={column.id} className='flex flex-col gap-1 bs-full overflow-hidden is-[300px]'>
71
+ <div className='flex shrink-0 p-2 border border-separator'>Column {column.id}</div>
72
+ <ScrollArea.Expander classNames='border border-rose-500'>
73
+ <ScrollArea.Root>
74
+ <ScrollArea.Viewport>
75
+ <div className='flex flex-col p-3 space-y-2'>
76
+ {Array.from({ length: column.itemCount }, (_, i) => (
77
+ <div key={i} className={`p-3 border border-separator rounded-sm`}>
78
+ Item {i + 1}
79
+ </div>
80
+ ))}
81
+ </div>
82
+ </ScrollArea.Viewport>
83
+ <ScrollArea.Scrollbar orientation='vertical'>
84
+ <ScrollArea.Thumb />
85
+ </ScrollArea.Scrollbar>
86
+ </ScrollArea.Root>
87
+ </ScrollArea.Expander>
88
+ <div className={`p-2 border border-separator`}>Footer</div>
89
+ </div>
90
+ ))}
91
+ </div>
92
+ </ScrollArea.Viewport>
93
+ <ScrollArea.Scrollbar orientation='horizontal'>
94
+ <ScrollArea.Thumb />
95
+ </ScrollArea.Scrollbar>
96
+ </ScrollArea.Root>
97
+ </div>
98
+ </div>
99
+ );
100
+ },
101
+ };
@@ -3,29 +3,32 @@
3
3
  //
4
4
 
5
5
  import {
6
+ Corner as ScrollAreaPrimitiveCorner,
7
+ type ScrollAreaCornerProps as ScrollAreaPrimitiveCornerProps,
6
8
  Root as ScrollAreaPrimitiveRoot,
7
9
  type ScrollAreaProps as ScrollAreaPrimitiveRootProps,
8
- Viewport as ScrollAreaPrimitiveViewport,
9
- type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
10
10
  Scrollbar as ScrollAreaPrimitiveScrollbar,
11
11
  type ScrollAreaScrollbarProps as ScrollAreaPrimitiveScrollbarProps,
12
12
  Thumb as ScrollAreaPrimitiveThumb,
13
13
  type ScrollAreaThumbProps as ScrollAreaPrimitiveThumbProps,
14
- Corner as ScrollAreaPrimitiveCorner,
15
- type ScrollAreaCornerProps as ScrollAreaPrimitiveCornerProps,
14
+ Viewport as ScrollAreaPrimitiveViewport,
15
+ type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
16
16
  } from '@radix-ui/react-scroll-area';
17
- import React, { forwardRef } from 'react';
17
+ import React, { type PropsWithChildren, forwardRef } from 'react';
18
+
19
+ import { mx } from '@dxos/ui-theme';
18
20
 
19
21
  import { useThemeContext } from '../../hooks';
20
22
  import { type ThemedClassName } from '../../util';
21
23
 
22
24
  type ScrollAreaVariant = 'coarse' | 'fine';
23
25
 
26
+ //
27
+ // Root
28
+ //
29
+
24
30
  type ScrollAreaRootProps = ThemedClassName<ScrollAreaPrimitiveRootProps>;
25
31
 
26
- /**
27
- * @deprecated
28
- */
29
32
  const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(({ classNames, ...props }, forwardedRef) => {
30
33
  const { tx } = useThemeContext();
31
34
  return (
@@ -37,6 +40,10 @@ const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(({ classN
37
40
  );
38
41
  });
39
42
 
43
+ //
44
+ // Viewport
45
+ //
46
+
40
47
  type ScrollAreaViewportProps = ThemedClassName<ScrollAreaPrimitiveViewportProps>;
41
48
 
42
49
  const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
@@ -52,6 +59,10 @@ const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
52
59
  },
53
60
  );
54
61
 
62
+ //
63
+ // Scrollbar
64
+ //
65
+
55
66
  type ScrollAreaScrollbarProps = ThemedClassName<ScrollAreaPrimitiveScrollbarProps> & { variant?: ScrollAreaVariant };
56
67
 
57
68
  const ScrollAreaScrollbar = forwardRef<HTMLDivElement, ScrollAreaScrollbarProps>(
@@ -68,6 +79,10 @@ const ScrollAreaScrollbar = forwardRef<HTMLDivElement, ScrollAreaScrollbarProps>
68
79
  },
69
80
  );
70
81
 
82
+ //
83
+ // Thumb
84
+ //
85
+
71
86
  type ScrollAreaThumbProps = ThemedClassName<ScrollAreaPrimitiveThumbProps>;
72
87
 
73
88
  const ScrollAreaThumb = forwardRef<HTMLDivElement, ScrollAreaThumbProps>(({ classNames, ...props }, forwardedRef) => {
@@ -81,6 +96,10 @@ const ScrollAreaThumb = forwardRef<HTMLDivElement, ScrollAreaThumbProps>(({ clas
81
96
  );
82
97
  });
83
98
 
99
+ //
100
+ // Corner
101
+ //
102
+
84
103
  type ScrollAreaCornerProps = ThemedClassName<ScrollAreaPrimitiveCornerProps>;
85
104
 
86
105
  const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ classNames, ...props }, forwardedRef) => {
@@ -94,12 +113,38 @@ const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ cl
94
113
  );
95
114
  });
96
115
 
116
+ //
117
+ // Expander
118
+ //
119
+
120
+ type ScrollAreaExpanderProps = ThemedClassName<PropsWithChildren>;
121
+
122
+ /**
123
+ * Size-locking wrapper required for inner ScrollArea to function correctly.
124
+ * NOTE: Radix ScrollArea.Viewport applies `display: table` to its immediate child,
125
+ * causing the content to participate in table layout and escape the intended fixed-size viewport.
126
+ */
127
+ const ScrollAreaExpander = ({ classNames, children }: ScrollAreaExpanderProps) => {
128
+ return (
129
+ <div role='none' className={mx('relative bs-full is-full overflow-hidden', classNames)}>
130
+ <div role='none' className='absolute inset-0 overflow-hidden'>
131
+ {children}
132
+ </div>
133
+ </div>
134
+ );
135
+ };
136
+
137
+ //
138
+ // ScrollArea
139
+ //
140
+
97
141
  export const ScrollArea = {
98
142
  Root: ScrollAreaRoot,
99
143
  Viewport: ScrollAreaViewport,
100
144
  Scrollbar: ScrollAreaScrollbar,
101
145
  Thumb: ScrollAreaThumb,
102
146
  Corner: ScrollAreaCorner,
147
+ Expander: ScrollAreaExpander,
103
148
  };
104
149
 
105
150
  export type {
@@ -108,4 +153,5 @@ export type {
108
153
  ScrollAreaScrollbarProps,
109
154
  ScrollAreaThumbProps,
110
155
  ScrollAreaCornerProps,
156
+ ScrollAreaExpanderProps,
111
157
  };