@dxos/react-ui 0.8.4-main.7ace549 → 0.8.4-main.8360d9e660

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 (342) hide show
  1. package/dist/lib/browser/chunk-EJSGYGYH.mjs +774 -0
  2. package/dist/lib/browser/chunk-EJSGYGYH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3913 -68
  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 +73 -61
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-B7MXDDMJ.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-B7MXDDMJ.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3913 -68
  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 +73 -61
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts +3 -3
  19. package/dist/types/src/components/Button/Button.d.ts.map +1 -1
  20. package/dist/types/src/components/Button/IconButton.d.ts +2 -1
  21. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
  22. package/dist/types/src/components/Button/Toggle.d.ts +2 -2
  23. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -1
  24. package/dist/types/src/components/Button/ToggleGroup.d.ts +10 -10
  25. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -1
  26. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +4 -4
  27. package/dist/types/src/components/Card/Card.d.ts +107 -0
  28. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  29. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  30. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/Card/index.d.ts +2 -0
  32. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  33. package/dist/types/src/components/Clipboard/index.d.ts +10 -1
  34. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  35. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  36. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  37. package/dist/types/src/components/Dialog/AlertDialog.d.ts +26 -17
  38. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
  39. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
  40. package/dist/types/src/components/Dialog/Dialog.d.ts +35 -19
  41. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  42. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +9 -10
  43. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
  44. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  45. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  46. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  47. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  48. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  49. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  50. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  51. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  52. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  53. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  54. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  55. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  56. package/dist/types/src/components/Icon/Icon.d.ts +1 -1
  57. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  58. package/dist/types/src/components/Image/Image.d.ts +14 -0
  59. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  60. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  61. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  62. package/dist/types/src/components/Image/index.d.ts +2 -0
  63. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  64. package/dist/types/src/components/Input/Input.d.ts +7 -7
  65. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  66. package/dist/types/src/components/Input/Input.stories.d.ts +8 -8
  67. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  68. package/dist/types/src/components/List/List.d.ts +1 -1
  69. package/dist/types/src/components/List/List.d.ts.map +1 -1
  70. package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
  72. package/dist/types/src/components/Main/Main.d.ts +9 -10
  73. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  74. package/dist/types/src/components/Main/Main.stories.d.ts +0 -3
  75. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  77. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  78. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  79. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +52 -50
  80. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  81. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +20 -0
  82. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  83. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  84. package/dist/types/src/components/Message/Message.d.ts +1 -1
  85. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  86. package/dist/types/src/components/Message/Message.stories.d.ts +3 -4
  87. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/Popover/Popover.d.ts +29 -23
  89. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  90. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +23 -26
  91. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  92. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +44 -8
  93. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +4 -2
  95. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +8 -2
  97. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Select/Select.d.ts +9 -9
  99. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  100. package/dist/types/src/components/Separator/Separator.d.ts +4 -4
  101. package/dist/types/src/components/Separator/Separator.d.ts.map +1 -1
  102. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  103. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  104. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  105. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  106. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  107. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  108. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  109. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  110. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  111. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  113. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  114. package/dist/types/src/components/Status/Status.stories.d.ts +4 -2
  115. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  117. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  118. package/dist/types/src/components/Tag/Tag.stories.d.ts +0 -5
  119. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -2
  121. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  122. package/dist/types/src/components/{Menus/DropdownMenu.stories.d.ts → ThemeProvider/ThemeProvider.stories.d.ts} +2 -5
  123. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  125. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  126. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  127. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  128. package/dist/types/src/components/Toast/Toast.d.ts +19 -19
  129. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  130. package/dist/types/src/components/Toolbar/Toolbar.d.ts +39 -17
  131. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  132. package/dist/types/src/components/Tooltip/Tooltip.d.ts +9 -9
  133. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  134. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/index.d.ts +9 -5
  136. package/dist/types/src/components/index.d.ts.map +1 -1
  137. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  138. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  139. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  140. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  141. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  142. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  143. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  144. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  145. package/dist/types/src/hooks/index.d.ts +1 -0
  146. package/dist/types/src/hooks/index.d.ts.map +1 -1
  147. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  148. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  150. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +2 -1
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  154. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  155. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  156. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  157. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  158. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  159. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  160. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  161. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  162. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  163. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  164. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  165. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  166. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  167. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  168. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  169. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  170. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  171. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  172. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  173. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  174. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  175. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  176. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  177. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  178. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  179. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  180. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  181. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  182. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  183. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  184. package/dist/types/src/primitives/index.d.ts +6 -0
  185. package/dist/types/src/primitives/index.d.ts.map +1 -0
  186. package/dist/types/src/testing/Loading.d.ts +9 -0
  187. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  188. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  189. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  190. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +1 -1
  191. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
  192. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  193. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  194. package/dist/types/src/testing/index.d.ts +1 -0
  195. package/dist/types/src/testing/index.d.ts.map +1 -1
  196. package/dist/types/src/translations.d.ts +11 -0
  197. package/dist/types/src/translations.d.ts.map +1 -0
  198. package/dist/types/src/util/index.d.ts +1 -2
  199. package/dist/types/src/util/index.d.ts.map +1 -1
  200. package/dist/types/tsconfig.tsbuildinfo +1 -1
  201. package/package.json +40 -31
  202. package/src/components/Avatars/Avatar.stories.tsx +5 -6
  203. package/src/components/Avatars/Avatar.tsx +6 -13
  204. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  205. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  206. package/src/components/Breadcrumb/Breadcrumb.tsx +11 -37
  207. package/src/components/Button/Button.stories.tsx +3 -3
  208. package/src/components/Button/Button.tsx +9 -15
  209. package/src/components/Button/IconButton.stories.tsx +4 -4
  210. package/src/components/Button/IconButton.tsx +9 -5
  211. package/src/components/Button/Toggle.stories.tsx +2 -2
  212. package/src/components/Button/Toggle.tsx +4 -4
  213. package/src/components/Button/ToggleGroup.stories.tsx +2 -2
  214. package/src/components/Button/ToggleGroup.tsx +12 -16
  215. package/src/components/Card/Card.stories.tsx +151 -0
  216. package/src/components/Card/Card.tsx +390 -0
  217. package/src/components/Card/index.ts +5 -0
  218. package/src/components/Clipboard/CopyButton.tsx +6 -6
  219. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  220. package/src/components/Dialog/AlertDialog.stories.tsx +15 -15
  221. package/src/components/Dialog/AlertDialog.tsx +137 -54
  222. package/src/components/Dialog/Dialog.stories.tsx +83 -28
  223. package/src/components/Dialog/Dialog.tsx +191 -75
  224. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  225. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  226. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  227. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  228. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  229. package/src/components/ErrorFallback/index.ts +9 -0
  230. package/src/components/Icon/Icon.stories.tsx +3 -3
  231. package/src/components/Icon/Icon.tsx +4 -3
  232. package/src/components/Image/Image.stories.tsx +86 -0
  233. package/src/components/Image/Image.tsx +223 -0
  234. package/src/components/Image/index.ts +5 -0
  235. package/src/components/Input/Input.stories.tsx +21 -40
  236. package/src/components/Input/Input.tsx +36 -72
  237. package/src/components/Link/Link.stories.tsx +2 -2
  238. package/src/components/Link/Link.tsx +2 -2
  239. package/src/components/List/List.stories.tsx +30 -33
  240. package/src/components/List/List.tsx +12 -17
  241. package/src/components/List/ListDropIndicator.tsx +7 -7
  242. package/src/components/List/Tree.stories.tsx +4 -4
  243. package/src/components/List/TreeDropIndicator.tsx +6 -6
  244. package/src/components/List/Treegrid.stories.tsx +3 -3
  245. package/src/components/List/Treegrid.tsx +10 -15
  246. package/src/components/Main/Main.stories.tsx +41 -23
  247. package/src/components/Main/Main.tsx +139 -82
  248. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
  249. package/src/components/{Menus → Menu}/ContextMenu.tsx +9 -33
  250. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +2 -2
  251. package/src/components/{Menus → Menu}/DropdownMenu.tsx +113 -105
  252. package/src/components/Message/Message.stories.tsx +26 -11
  253. package/src/components/Message/Message.tsx +46 -33
  254. package/src/components/Popover/Popover.stories.tsx +4 -4
  255. package/src/components/Popover/Popover.tsx +96 -91
  256. package/src/components/ScrollArea/ScrollArea.stories.tsx +166 -40
  257. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  258. package/src/components/ScrollArea/index.ts +1 -1
  259. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +41 -21
  260. package/src/components/ScrollContainer/ScrollContainer.tsx +101 -94
  261. package/src/components/Select/Select.stories.tsx +2 -2
  262. package/src/components/Select/Select.tsx +11 -27
  263. package/src/components/Separator/Separator.tsx +5 -8
  264. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  265. package/src/components/Skeleton/Skeleton.tsx +26 -0
  266. package/src/components/Skeleton/index.ts +5 -0
  267. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  268. package/src/components/Splitter/Splitter.tsx +126 -0
  269. package/src/components/Splitter/index.ts +5 -0
  270. package/src/components/Status/Status.stories.tsx +21 -17
  271. package/src/components/Status/Status.tsx +2 -2
  272. package/src/components/Tag/Tag.stories.tsx +6 -11
  273. package/src/components/Tag/Tag.tsx +3 -8
  274. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  275. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
  276. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  277. package/src/components/ThemeProvider/index.ts +3 -3
  278. package/src/components/Toast/Toast.stories.tsx +2 -2
  279. package/src/components/Toast/Toast.tsx +22 -41
  280. package/src/components/Toolbar/Toolbar.stories.tsx +2 -2
  281. package/src/components/Toolbar/Toolbar.tsx +179 -19
  282. package/src/components/Tooltip/Tooltip.stories.tsx +15 -13
  283. package/src/components/Tooltip/Tooltip.tsx +40 -38
  284. package/src/components/index.ts +10 -6
  285. package/src/exemplars/generics.stories.tsx +49 -0
  286. package/src/exemplars/slot.stories.tsx +107 -0
  287. package/src/exemplars/tabster.stories.tsx +127 -0
  288. package/src/exemplars/virtualizer.stories.tsx +137 -0
  289. package/src/hooks/index.ts +1 -0
  290. package/src/hooks/useDensityContext.ts +1 -1
  291. package/src/hooks/useElevationContext.ts +1 -1
  292. package/src/index.ts +2 -1
  293. package/src/playground/Controls.stories.tsx +3 -10
  294. package/src/playground/Custom.stories.tsx +11 -11
  295. package/src/playground/Typography.stories.tsx +3 -3
  296. package/src/primitives/Column/Column.stories.tsx +78 -0
  297. package/src/primitives/Column/Column.tsx +133 -0
  298. package/src/primitives/Column/index.ts +5 -0
  299. package/src/primitives/Container/Container.stories.tsx +30 -0
  300. package/src/primitives/Container/Container.tsx +22 -0
  301. package/src/primitives/Container/index.ts +5 -0
  302. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  303. package/src/primitives/Flex/Flex.tsx +29 -0
  304. package/src/primitives/Flex/index.ts +5 -0
  305. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  306. package/src/primitives/Grid/Grid.tsx +35 -0
  307. package/src/primitives/Grid/index.ts +5 -0
  308. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  309. package/src/primitives/Panel/Panel.tsx +119 -0
  310. package/src/primitives/Panel/index.ts +5 -0
  311. package/src/primitives/index.ts +9 -0
  312. package/src/testing/Loading.tsx +26 -0
  313. package/src/testing/decorators/withLayout.tsx +39 -18
  314. package/src/testing/decorators/withLayoutVariants.tsx +20 -23
  315. package/src/testing/decorators/withTheme.tsx +21 -18
  316. package/src/testing/index.ts +2 -0
  317. package/src/translations.ts +19 -0
  318. package/src/util/index.ts +2 -2
  319. package/dist/lib/browser/chunk-N5GDJTT2.mjs +0 -4707
  320. package/dist/lib/browser/chunk-N5GDJTT2.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-SP7VQH72.mjs +0 -4709
  322. package/dist/lib/node-esm/chunk-SP7VQH72.mjs.map +0 -7
  323. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  324. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  325. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  326. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  327. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  328. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  330. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  331. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  332. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  333. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  334. package/dist/types/src/util/domino.d.ts +0 -18
  335. package/dist/types/src/util/domino.d.ts.map +0 -1
  336. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  337. package/src/components/AnchoredOverflow/index.ts +0 -5
  338. package/src/util/ThemedClassName.ts +0 -7
  339. package/src/util/domino.ts +0 -53
  340. /package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  341. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  342. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -1,51 +1,177 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { type PropsWithChildren } from 'react';
5
+ import React, { useMemo } from 'react';
7
6
 
8
7
  import { faker } from '@dxos/random';
9
- import { activeSurface, surfaceShadow } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
10
9
 
11
- import { withTheme } from '../../testing';
10
+ import { withLayout, withTheme } from '../../testing';
12
11
 
13
12
  import { ScrollArea } from './ScrollArea';
14
13
 
15
- faker.seed(1234);
16
-
17
- const DefaultStory = ({ children }: PropsWithChildren<{}>) => {
18
- return (
19
- <ScrollArea.Root
20
- classNames={['is-[300px] bs-[400px] rounded', activeSurface, surfaceShadow({ elevation: 'positioned' })]}
21
- >
22
- <ScrollArea.Viewport classNames='rounded p-4'>
23
- <p>{children}</p>
24
- </ScrollArea.Viewport>
25
- <ScrollArea.Scrollbar orientation='horizontal'>
26
- <ScrollArea.Thumb />
27
- </ScrollArea.Scrollbar>
28
- <ScrollArea.Scrollbar orientation='vertical'>
29
- <ScrollArea.Thumb />
30
- </ScrollArea.Scrollbar>
31
- <ScrollArea.Corner />
32
- </ScrollArea.Root>
33
- );
34
- };
35
-
36
- const meta = {
37
- title: 'ui/react-ui-core/ScrollArea',
38
- component: ScrollArea as any,
39
- render: DefaultStory,
40
- decorators: [withTheme],
41
- } satisfies Meta<typeof DefaultStory>;
42
-
43
- export default meta;
44
-
45
- type Story = StoryObj<typeof meta>;
46
-
47
- export const Default: Story = {
48
- args: {
49
- children: faker.lorem.paragraphs(5),
14
+ faker.seed(123);
15
+
16
+ export default {
17
+ title: 'ui/react-ui-core/components/ScrollArea',
18
+ component: ScrollArea,
19
+ decorators: [withTheme()],
20
+ parameters: {
21
+ layout: 'centered',
50
22
  },
51
23
  };
24
+
25
+ const Column = () => (
26
+ <div>
27
+ {Array.from({ length: 50 }).map((_, index) => (
28
+ <div key={index} className='px-1 text-sm cursor-pointer hover:bg-hover-surface'>
29
+ Item {index + 1}
30
+ </div>
31
+ ))}
32
+ </div>
33
+ );
34
+
35
+ const Row = () => (
36
+ <div className='flex gap-2 w-max'>
37
+ {Array.from({ length: 50 }).map((_, index) => (
38
+ <div
39
+ key={index}
40
+ className='shrink-0 h-20 w-20 cursor-pointer border border-separator rounded-md flex items-center justify-center text-sm hover:bg-hover-surface'
41
+ >
42
+ {index + 1}
43
+ </div>
44
+ ))}
45
+ </div>
46
+ );
47
+
48
+ export const Vertical = {
49
+ render: () => (
50
+ <div className='h-72 w-48 p-2 border border-separator rounded-md'>
51
+ <ScrollArea.Root orientation='vertical' padding>
52
+ <ScrollArea.Viewport>
53
+ <Column />
54
+ </ScrollArea.Viewport>
55
+ </ScrollArea.Root>
56
+ </div>
57
+ ),
58
+ };
59
+
60
+ export const VerticalThin = {
61
+ render: () => (
62
+ <div className='h-72 w-48 p-2 border border-separator rounded-md'>
63
+ <ScrollArea.Root orientation='vertical' padding thin>
64
+ <ScrollArea.Viewport>
65
+ <Column />
66
+ </ScrollArea.Viewport>
67
+ </ScrollArea.Root>
68
+ </div>
69
+ ),
70
+ };
71
+
72
+ export const Horizontal = {
73
+ render: () => (
74
+ <div className='w-96 p-2 border border-separator rounded-md'>
75
+ <ScrollArea.Root orientation='horizontal' padding>
76
+ <ScrollArea.Viewport>
77
+ <Row />
78
+ </ScrollArea.Viewport>
79
+ </ScrollArea.Root>
80
+ </div>
81
+ ),
82
+ };
83
+
84
+ export const HorizontalThin = {
85
+ render: () => (
86
+ <div className='w-96 p-2 border border-separator rounded-md'>
87
+ <ScrollArea.Root orientation='horizontal' padding thin>
88
+ <ScrollArea.Viewport>
89
+ <Row />
90
+ </ScrollArea.Viewport>
91
+ </ScrollArea.Root>
92
+ </div>
93
+ ),
94
+ };
95
+
96
+ export const Both = {
97
+ render: () => (
98
+ <div className='h-96 w-96 p-2 border border-separator rounded-md'>
99
+ <ScrollArea.Root orientation='all' padding>
100
+ <ScrollArea.Viewport>
101
+ <div className='flex flex-col gap-2'>
102
+ {Array.from({ length: 50 }).map((_, rowIndex) => (
103
+ <div key={rowIndex} className='flex gap-2'>
104
+ {Array.from({ length: 50 }).map((_, colIndex) => (
105
+ <div
106
+ key={colIndex}
107
+ className='shrink-0 h-20 w-20 flex items-center justify-center text-sm border border-separator font-mono'
108
+ >
109
+ [{colIndex}:{rowIndex}]
110
+ </div>
111
+ ))}
112
+ </div>
113
+ ))}
114
+ </div>
115
+ </ScrollArea.Viewport>
116
+ </ScrollArea.Root>
117
+ </div>
118
+ ),
119
+ };
120
+
121
+ export const NestedScrollAreas = {
122
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
123
+ render: () => {
124
+ const columns = useMemo(
125
+ () =>
126
+ Array.from({ length: 8 }).map((_, index) => ({
127
+ id: String(index),
128
+ count: faker.number.int({ min: 5, max: 20 }),
129
+ })),
130
+ [],
131
+ );
132
+
133
+ return (
134
+ <ScrollArea.Root thin orientation='horizontal'>
135
+ <ScrollArea.Viewport classNames='gap-4'>
136
+ {columns.map((column) => (
137
+ <section
138
+ key={column.id}
139
+ className='shrink-0 h-full w-[16rem] grid grid-rows-[min-content_1fr_min-content] border border-separator'
140
+ >
141
+ <header className='flex shrink-0 p-2 border-b border-separator'>Column {column.id}</header>
142
+ <ScrollArea.Root thin orientation='vertical'>
143
+ <ScrollArea.Viewport classNames='py-2 px-2 gap-2'>
144
+ {Array.from({ length: column.count }, (_, i) => (
145
+ <div key={i} role='listitem' className={`shrink-0 p-2 text-sm border border-separator rounded-xs`}>
146
+ Item {i + 1}
147
+ </div>
148
+ ))}
149
+ </ScrollArea.Viewport>
150
+ </ScrollArea.Root>
151
+ <footer className={`p-2 text-subdued border-t border-separator`}>{column.count}</footer>
152
+ </section>
153
+ ))}
154
+ </ScrollArea.Viewport>
155
+ </ScrollArea.Root>
156
+ );
157
+ },
158
+ };
159
+
160
+ export const NativeScroll = {
161
+ render: () => (
162
+ <div className='group h-48 w-48 border border-separator'>
163
+ <div
164
+ className={mx(
165
+ 'group h-full w-full overflow-y-scroll',
166
+ '[&::-webkit-scrollbar]:w-3',
167
+ '[&::-webkit-scrollbar-thumb]:rounded-none',
168
+ '[&::-webkit-scrollbar-track]:bg-scrollbar-track',
169
+ '[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumbSubdued',
170
+ 'group-hover:[&::-webkit-scrollbar-thumb]:bg-scrollbar-thumb',
171
+ )}
172
+ >
173
+ <Column />
174
+ </div>
175
+ </div>
176
+ ),
177
+ };
@@ -1,111 +1,113 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Corner as ScrollAreaPrimitiveCorner,
7
- type ScrollAreaCornerProps as ScrollAreaPrimitiveCornerProps,
8
- Root as ScrollAreaPrimitiveRoot,
9
- type ScrollAreaProps as ScrollAreaPrimitiveRootProps,
10
- Scrollbar as ScrollAreaPrimitiveScrollbar,
11
- type ScrollAreaScrollbarProps as ScrollAreaPrimitiveScrollbarProps,
12
- Thumb as ScrollAreaPrimitiveThumb,
13
- type ScrollAreaThumbProps as ScrollAreaPrimitiveThumbProps,
14
- Viewport as ScrollAreaPrimitiveViewport,
15
- type ScrollAreaViewportProps as ScrollAreaPrimitiveViewportProps,
16
- } from '@radix-ui/react-scroll-area';
17
- import React, { forwardRef } from 'react';
5
+ import { createContext } from '@radix-ui/react-context';
6
+ import { Primitive } from '@radix-ui/react-primitive';
7
+ import { Slot } from '@radix-ui/react-slot';
8
+ import React, { type HTMLAttributes, forwardRef } from 'react';
9
+
10
+ import { composableProps } from '@dxos/ui-theme';
11
+ import { type AllowedAxis, type SlottableProps, type ThemedClassName } from '@dxos/ui-types';
18
12
 
19
13
  import { useThemeContext } from '../../hooks';
20
- import { type ThemedClassName } from '../../util';
21
14
 
22
- type ScrollAreaVariant = 'coarse' | 'fine';
15
+ //
16
+ // Context
17
+ //
23
18
 
24
- type ScrollAreaRootProps = ThemedClassName<ScrollAreaPrimitiveRootProps>;
19
+ const SCROLLAREA_NAME = 'ScrollArea';
20
+
21
+ type ScrollAreaContextType = {
22
+ /** Orientation of scrollbars. */
23
+ orientation: AllowedAxis;
24
+ /** Hide scrollbars when not scrolling. */
25
+ autoHide: boolean;
26
+ /** Apply padding to opposite side of scrollbar. */
27
+ margin?: boolean;
28
+ /** Apply padding. */
29
+ padding: boolean;
30
+ /** Use thin scrollbars. */
31
+ thin: boolean;
32
+ /** Enable snap scrolling. */
33
+ snap: boolean;
34
+ };
35
+
36
+ const [ScrollAreaProvider, useScrollAreaContext] = createContext<ScrollAreaContextType>(SCROLLAREA_NAME);
37
+
38
+ //
39
+ // Root
40
+ //
41
+
42
+ const SCROLLAREA_ROOT_NAME = 'ScrollArea.Root';
43
+
44
+ type ScrollAreaRootProps = SlottableProps<HTMLDivElement, Partial<ScrollAreaContextType>>;
25
45
 
26
46
  /**
27
- * @deprecated
47
+ * ScrollArea provides native scrollbars with custom styling.
28
48
  */
29
- const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(({ classNames, ...props }, forwardedRef) => {
30
- const { tx } = useThemeContext();
31
- return (
32
- <ScrollAreaPrimitiveRoot
33
- {...props}
34
- className={tx('scrollArea.root', 'scroll-area', {}, classNames)}
35
- ref={forwardedRef}
36
- />
37
- );
38
- });
39
-
40
- type ScrollAreaViewportProps = ThemedClassName<ScrollAreaPrimitiveViewportProps>;
41
-
42
- const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
43
- ({ classNames, ...props }, forwardedRef) => {
49
+ const ScrollAreaRoot = forwardRef<HTMLDivElement, ScrollAreaRootProps>(
50
+ (
51
+ {
52
+ children,
53
+ asChild,
54
+ orientation = 'vertical',
55
+ autoHide = true,
56
+ margin = false,
57
+ padding = false,
58
+ thin = false,
59
+ snap = false,
60
+ ...props
61
+ },
62
+ forwardedRef,
63
+ ) => {
64
+ const { className, ...rest } = composableProps(props);
65
+ const Comp = asChild ? Slot : Primitive.div;
44
66
  const { tx } = useThemeContext();
67
+ const options = { orientation, autoHide, margin, padding, thin, snap };
68
+
45
69
  return (
46
- <ScrollAreaPrimitiveViewport
47
- {...props}
48
- className={tx('scrollArea.viewport', 'scroll-area', {}, classNames)}
49
- ref={forwardedRef}
50
- />
70
+ <ScrollAreaProvider {...options}>
71
+ <Comp {...rest} className={tx('scrollArea.root', options, className)} ref={forwardedRef}>
72
+ {children}
73
+ </Comp>
74
+ </ScrollAreaProvider>
51
75
  );
52
76
  },
53
77
  );
54
78
 
55
- type ScrollAreaScrollbarProps = ThemedClassName<ScrollAreaPrimitiveScrollbarProps> & { variant?: ScrollAreaVariant };
79
+ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
80
+
81
+ //
82
+ // Viewport
83
+ //
84
+
85
+ const SCROLLAREA_VIEWPORT_NAME = 'ScrollArea.Viewport';
86
+
87
+ type ScrollAreaViewportProps = ThemedClassName<HTMLAttributes<HTMLDivElement>>;
56
88
 
57
- const ScrollAreaScrollbar = forwardRef<HTMLDivElement, ScrollAreaScrollbarProps>(
58
- ({ classNames, variant = 'fine', ...props }, forwardedRef) => {
89
+ const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(
90
+ ({ classNames, children, ...props }, forwardedRef) => {
59
91
  const { tx } = useThemeContext();
92
+ const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
93
+
60
94
  return (
61
- <ScrollAreaPrimitiveScrollbar
62
- data-variant={variant}
63
- {...props}
64
- className={tx('scrollArea.scrollbar', 'scroll-area__scrollbar', {}, classNames)}
65
- ref={forwardedRef}
66
- />
95
+ <div {...props} className={tx('scrollArea.viewport', options, classNames)} ref={forwardedRef}>
96
+ {children}
97
+ </div>
67
98
  );
68
99
  },
69
100
  );
70
101
 
71
- type ScrollAreaThumbProps = ThemedClassName<ScrollAreaPrimitiveThumbProps>;
72
-
73
- const ScrollAreaThumb = forwardRef<HTMLDivElement, ScrollAreaThumbProps>(({ classNames, ...props }, forwardedRef) => {
74
- const { tx } = useThemeContext();
75
- return (
76
- <ScrollAreaPrimitiveThumb
77
- {...props}
78
- className={tx('scrollArea.thumb', 'scroll-area__thumb', {}, classNames)}
79
- ref={forwardedRef}
80
- />
81
- );
82
- });
83
-
84
- type ScrollAreaCornerProps = ThemedClassName<ScrollAreaPrimitiveCornerProps>;
85
-
86
- const ScrollAreaCorner = forwardRef<HTMLDivElement, ScrollAreaCornerProps>(({ classNames, ...props }, forwardedRef) => {
87
- const { tx } = useThemeContext();
88
- return (
89
- <ScrollAreaPrimitiveCorner
90
- {...props}
91
- className={tx('scrollArea.corner', 'scroll-area__corner', {}, classNames)}
92
- ref={forwardedRef}
93
- />
94
- );
95
- });
102
+ ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
103
+
104
+ //
105
+ // ScrollArea
106
+ //
96
107
 
97
108
  export const ScrollArea = {
98
109
  Root: ScrollAreaRoot,
99
110
  Viewport: ScrollAreaViewport,
100
- Scrollbar: ScrollAreaScrollbar,
101
- Thumb: ScrollAreaThumb,
102
- Corner: ScrollAreaCorner,
103
111
  };
104
112
 
105
- export type {
106
- ScrollAreaRootProps,
107
- ScrollAreaViewportProps,
108
- ScrollAreaScrollbarProps,
109
- ScrollAreaThumbProps,
110
- ScrollAreaCornerProps,
111
- };
113
+ export type { ScrollAreaRootProps, ScrollAreaViewportProps };
@@ -1,5 +1,5 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
5
  export * from './ScrollArea';
@@ -7,16 +7,22 @@ import React, { useEffect, useRef, useState } from 'react';
7
7
 
8
8
  import { faker } from '@dxos/random';
9
9
 
10
+ import { Panel } from '../../primitives';
10
11
  import { withLayout, withTheme } from '../../testing';
11
12
  import { Button } from '../Button';
12
13
  import { Toolbar } from '../Toolbar';
13
14
 
14
15
  import { ScrollContainer, type ScrollContainerRootProps, type ScrollController } from './ScrollContainer';
15
16
 
16
- const DefaultStory = (props: ScrollContainerRootProps) => {
17
+ type StoryProps = ScrollContainerRootProps & { running?: boolean; initialLines?: number };
18
+
19
+ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: StoryProps) => {
17
20
  const [lines, setLines] = useState<string[]>([]);
18
- const [running, setRunning] = useState(true);
21
+ const [running, setRunning] = useState(runningProp);
19
22
  const scroller = useRef<ScrollController>(null);
23
+ useEffect(() => {
24
+ setLines(Array.from({ length: initialLines }, () => faker.lorem.paragraph()));
25
+ }, [initialLines]);
20
26
  useEffect(() => {
21
27
  if (!running) {
22
28
  return;
@@ -30,31 +36,36 @@ const DefaultStory = (props: ScrollContainerRootProps) => {
30
36
  }, [running]);
31
37
 
32
38
  return (
33
- <div className='flex flex-col bs-full overflow-hidden'>
34
- <Toolbar.Root>
35
- <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
36
- <Button onClick={() => scroller.current?.scrollToBottom()}>Scroll to bottom</Button>
37
- <div className='flex-1' />
38
- <div>{lines.length}</div>
39
- </Toolbar.Root>
40
- <ScrollContainer.Root {...props} ref={scroller}>
41
- <ScrollContainer.Viewport>
42
- {lines.map((line, index) => (
43
- <div key={index} className='p-2'>
44
- {line}
45
- </div>
46
- ))}
47
- </ScrollContainer.Viewport>
48
- </ScrollContainer.Root>
49
- </div>
39
+ <Panel.Root className='dx-document'>
40
+ <Panel.Toolbar asChild>
41
+ <Toolbar.Root>
42
+ <Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
43
+ <Button onClick={() => scroller.current?.scrollToBottom()}>Scroll to bottom</Button>
44
+ <Toolbar.Separator />
45
+ <div className='px-1'>{lines.length}</div>
46
+ </Toolbar.Root>
47
+ </Panel.Toolbar>
48
+ <Panel.Content asChild>
49
+ <ScrollContainer.Root {...props} ref={scroller}>
50
+ <ScrollContainer.Viewport>
51
+ {lines.map((line, index) => (
52
+ <div key={index} className='p-2 text-description'>
53
+ {line}
54
+ </div>
55
+ ))}
56
+ </ScrollContainer.Viewport>
57
+ <ScrollContainer.ScrollDownButton />
58
+ </ScrollContainer.Root>
59
+ </Panel.Content>
60
+ </Panel.Root>
50
61
  );
51
62
  };
52
63
 
53
64
  const meta = {
54
- title: 'ui/react-ui-core/ScrollContainer',
65
+ title: 'ui/react-ui-core/components/ScrollContainer',
55
66
  component: ScrollContainer.Root,
56
67
  render: DefaultStory,
57
- decorators: [withTheme, withLayout({ container: 'column', classNames: 'is-[30rem]' })],
68
+ decorators: [withTheme(), withLayout({ layout: 'column', classNames: 'w-[30rem]' })],
58
69
  } satisfies Meta<typeof DefaultStory>;
59
70
 
60
71
  export default meta;
@@ -65,5 +76,14 @@ export const Default: Story = {
65
76
  args: {
66
77
  pin: true,
67
78
  fade: true,
79
+ running: true,
80
+ },
81
+ };
82
+
83
+ export const Large: Story = {
84
+ args: {
85
+ pin: true,
86
+ fade: true,
87
+ initialLines: 100,
68
88
  },
69
89
  };