@dxos/react-ui 0.8.4-main.67995b8 → 0.8.4-main.6fa680abb7

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 (448) hide show
  1. package/dist/lib/browser/chunk-2FKSMWNY.mjs +774 -0
  2. package/dist/lib/browser/chunk-2FKSMWNY.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3918 -61
  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 +100 -60
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-ZNBLTSHI.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3918 -61
  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 +100 -60
  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/Card/Card.d.ts +107 -0
  42. package/dist/types/src/components/Card/Card.d.ts.map +1 -0
  43. package/dist/types/src/components/Card/Card.stories.d.ts +21 -0
  44. package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Card/index.d.ts +2 -0
  46. package/dist/types/src/components/Card/index.d.ts.map +1 -0
  47. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  48. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  49. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  50. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  51. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  52. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +13 -4
  53. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  55. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.d.ts +47 -0
  57. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +24 -0
  59. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  60. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  61. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  62. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  63. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts +11 -0
  64. package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -0
  65. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts +7 -0
  66. package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -0
  67. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +8 -0
  68. package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -0
  69. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts +9 -0
  70. package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -0
  71. package/dist/types/src/components/ErrorFallback/index.d.ts +5 -0
  72. package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -0
  73. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  74. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  75. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  76. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  77. package/dist/types/src/components/Image/Image.d.ts +14 -0
  78. package/dist/types/src/components/Image/Image.d.ts.map +1 -0
  79. package/dist/types/src/components/Image/Image.stories.d.ts +33 -0
  80. package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -0
  81. package/dist/types/src/components/Image/index.d.ts +2 -0
  82. package/dist/types/src/components/Image/index.d.ts.map +1 -0
  83. package/dist/types/src/components/Input/Input.d.ts +6 -8
  84. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  85. package/dist/types/src/components/Input/Input.stories.d.ts +17 -18
  86. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  88. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  90. package/dist/types/src/components/List/List.d.ts.map +1 -0
  91. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  92. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  93. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  94. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  95. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  96. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  97. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  99. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  100. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  101. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  102. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  103. package/dist/types/src/components/List/index.d.ts.map +1 -0
  104. package/dist/types/src/components/Main/Main.d.ts +18 -28
  105. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  106. package/dist/types/src/components/Main/Main.stories.d.ts +6 -10
  107. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  109. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  110. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  111. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  112. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  113. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  114. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  115. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  116. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Message/Message.d.ts +1 -1
  118. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  119. package/dist/types/src/components/Message/Message.stories.d.ts +10 -20
  120. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Popover/Popover.d.ts +4 -3
  122. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  123. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  124. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +23 -26
  126. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  127. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +35 -25
  128. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  130. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  131. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +24 -0
  132. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  134. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  135. package/dist/types/src/components/Select/Select.d.ts +10 -10
  136. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  137. package/dist/types/src/components/Select/Select.stories.d.ts +4 -9
  138. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  140. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  141. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  142. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  143. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  145. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  146. package/dist/types/src/components/Splitter/Splitter.d.ts +32 -0
  147. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  148. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  149. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  151. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  152. package/dist/types/src/components/Status/Status.stories.d.ts +6 -10
  153. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  155. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  156. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -13
  157. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  159. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  160. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts +12 -0
  161. package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
  162. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  163. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  164. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  165. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  166. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  167. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  168. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  169. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  170. package/dist/types/src/components/Toolbar/Toolbar.d.ts +46 -20
  171. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  172. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  173. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  174. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  175. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  176. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  177. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  178. package/dist/types/src/components/index.d.ts +13 -8
  179. package/dist/types/src/components/index.d.ts.map +1 -1
  180. package/dist/types/src/exemplars/generics.stories.d.ts +18 -0
  181. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  182. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  183. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  184. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  185. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  186. package/dist/types/src/exemplars/virtualizer.stories.d.ts +11 -0
  187. package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  189. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  190. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  191. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  194. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  195. package/dist/types/src/index.d.ts +2 -1
  196. package/dist/types/src/index.d.ts.map +1 -1
  197. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  198. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  199. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  200. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  201. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  202. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  203. package/dist/types/src/primitives/Column/Column.d.ts +26 -0
  204. package/dist/types/src/primitives/Column/Column.d.ts.map +1 -0
  205. package/dist/types/src/primitives/Column/Column.stories.d.ts +6 -0
  206. package/dist/types/src/primitives/Column/Column.stories.d.ts.map +1 -0
  207. package/dist/types/src/primitives/Column/index.d.ts +2 -0
  208. package/dist/types/src/primitives/Column/index.d.ts.map +1 -0
  209. package/dist/types/src/primitives/Container/Container.d.ts +8 -0
  210. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  211. package/dist/types/src/primitives/Container/Container.stories.d.ts +6 -0
  212. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  213. package/dist/types/src/primitives/Container/index.d.ts +2 -0
  214. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  215. package/dist/types/src/primitives/Flex/Flex.d.ts +13 -0
  216. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  217. package/dist/types/src/primitives/Flex/Flex.stories.d.ts +8 -0
  218. package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -0
  219. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  220. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  221. package/dist/types/src/primitives/Grid/Grid.d.ts +15 -0
  222. package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -0
  223. package/dist/types/src/primitives/Grid/Grid.stories.d.ts +8 -0
  224. package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -0
  225. package/dist/types/src/primitives/Grid/index.d.ts +2 -0
  226. package/dist/types/src/primitives/Grid/index.d.ts.map +1 -0
  227. package/dist/types/src/primitives/Panel/Panel.d.ts +26 -0
  228. package/dist/types/src/primitives/Panel/Panel.d.ts.map +1 -0
  229. package/dist/types/src/primitives/Panel/Panel.stories.d.ts +6 -0
  230. package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +1 -0
  231. package/dist/types/src/primitives/Panel/index.d.ts +2 -0
  232. package/dist/types/src/primitives/Panel/index.d.ts.map +1 -0
  233. package/dist/types/src/primitives/index.d.ts +6 -0
  234. package/dist/types/src/primitives/index.d.ts.map +1 -0
  235. package/dist/types/src/testing/Loading.d.ts +9 -0
  236. package/dist/types/src/testing/Loading.d.ts.map +1 -0
  237. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  238. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  239. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  240. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  241. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  242. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  243. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  244. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  245. package/dist/types/src/testing/index.d.ts +1 -0
  246. package/dist/types/src/testing/index.d.ts.map +1 -1
  247. package/dist/types/src/translations.d.ts +11 -0
  248. package/dist/types/src/translations.d.ts.map +1 -0
  249. package/dist/types/src/util/index.d.ts +2 -1
  250. package/dist/types/src/util/index.d.ts.map +1 -1
  251. package/dist/types/src/util/usePx.d.ts +8 -0
  252. package/dist/types/src/util/usePx.d.ts.map +1 -0
  253. package/dist/types/tsconfig.tsbuildinfo +1 -1
  254. package/package.json +41 -31
  255. package/src/components/Avatars/Avatar.stories.tsx +24 -16
  256. package/src/components/Avatars/Avatar.tsx +9 -16
  257. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  258. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +20 -15
  259. package/src/components/Breadcrumb/Breadcrumb.tsx +12 -38
  260. package/src/components/{Buttons → Button}/Button.stories.tsx +10 -11
  261. package/src/components/{Buttons → Button}/Button.tsx +7 -13
  262. package/src/components/{Buttons → Button}/IconButton.stories.tsx +15 -12
  263. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  264. package/src/components/Button/Toggle.stories.tsx +37 -0
  265. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +12 -9
  266. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  267. package/src/components/Card/Card.stories.tsx +151 -0
  268. package/src/components/Card/Card.tsx +347 -0
  269. package/src/components/Card/index.ts +5 -0
  270. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  271. package/src/components/Clipboard/CopyButton.tsx +9 -8
  272. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  273. package/src/components/Dialog/AlertDialog.stories.tsx +69 -0
  274. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +128 -28
  275. package/src/components/Dialog/Dialog.stories.tsx +122 -0
  276. package/src/components/{Dialogs → Dialog}/Dialog.tsx +190 -60
  277. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  278. package/src/components/ErrorFallback/ErrorFallback.stories.tsx +50 -0
  279. package/src/components/ErrorFallback/ErrorFallback.tsx +70 -0
  280. package/src/components/ErrorFallback/ErrorStack.tsx +80 -0
  281. package/src/components/ErrorFallback/ThrowError.tsx +37 -0
  282. package/src/components/ErrorFallback/index.ts +9 -0
  283. package/src/components/Icon/Icon.stories.tsx +113 -0
  284. package/src/components/Icon/Icon.tsx +3 -3
  285. package/src/components/Image/Image.stories.tsx +86 -0
  286. package/src/components/Image/Image.tsx +223 -0
  287. package/src/components/Image/index.ts +5 -0
  288. package/src/components/Input/Input.stories.tsx +28 -49
  289. package/src/components/Input/Input.tsx +46 -82
  290. package/src/components/Link/Link.stories.tsx +12 -8
  291. package/src/components/Link/Link.tsx +2 -2
  292. package/src/components/{Lists → List}/List.stories.tsx +44 -45
  293. package/src/components/{Lists → List}/List.tsx +27 -28
  294. package/src/components/{Lists → List}/ListDropIndicator.tsx +7 -7
  295. package/src/components/{Lists → List}/Tree.stories.tsx +15 -12
  296. package/src/components/{Lists → List}/Tree.tsx +4 -3
  297. package/src/components/{Lists → List}/TreeDropIndicator.tsx +7 -7
  298. package/src/components/{Lists → List}/Treegrid.stories.tsx +15 -9
  299. package/src/components/{Lists → List}/Treegrid.tsx +67 -31
  300. package/src/components/Main/Main.stories.tsx +53 -27
  301. package/src/components/Main/Main.tsx +176 -104
  302. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  303. package/src/components/{Menus → Menu}/ContextMenu.tsx +10 -33
  304. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  305. package/src/components/{Menus → Menu}/DropdownMenu.tsx +111 -80
  306. package/src/components/Message/Message.stories.tsx +35 -16
  307. package/src/components/Message/Message.tsx +46 -33
  308. package/src/components/Popover/Popover.stories.tsx +16 -13
  309. package/src/components/Popover/Popover.tsx +86 -64
  310. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  311. package/src/components/ScrollArea/ScrollArea.tsx +84 -82
  312. package/src/components/ScrollArea/index.ts +1 -1
  313. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +89 -0
  314. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  315. package/src/components/ScrollContainer/index.ts +5 -0
  316. package/src/components/Select/Select.stories.tsx +15 -12
  317. package/src/components/Select/Select.tsx +16 -31
  318. package/src/components/Separator/Separator.tsx +1 -1
  319. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  320. package/src/components/Skeleton/Skeleton.tsx +26 -0
  321. package/src/components/Skeleton/index.ts +5 -0
  322. package/src/components/Splitter/Splitter.stories.tsx +83 -0
  323. package/src/components/Splitter/Splitter.tsx +126 -0
  324. package/src/components/Splitter/index.ts +5 -0
  325. package/src/components/Status/Status.stories.tsx +30 -23
  326. package/src/components/Status/Status.tsx +2 -2
  327. package/src/components/Tag/Tag.stories.tsx +17 -13
  328. package/src/components/Tag/Tag.tsx +3 -8
  329. package/src/components/ThemeProvider/ThemeProvider.stories.tsx +32 -0
  330. package/src/components/ThemeProvider/ThemeProvider.tsx +7 -7
  331. package/src/components/ThemeProvider/TranslationsProvider.tsx +3 -18
  332. package/src/components/ThemeProvider/index.ts +3 -3
  333. package/src/components/Toast/Toast.stories.tsx +14 -11
  334. package/src/components/Toast/Toast.tsx +19 -23
  335. package/src/components/Toolbar/Toolbar.stories.tsx +16 -14
  336. package/src/components/Toolbar/Toolbar.tsx +201 -12
  337. package/src/components/Tooltip/Tooltip.stories.tsx +31 -25
  338. package/src/components/Tooltip/Tooltip.tsx +30 -26
  339. package/src/components/index.ts +14 -9
  340. package/src/exemplars/generics.stories.tsx +49 -0
  341. package/src/exemplars/slot.stories.tsx +107 -0
  342. package/src/exemplars/tabster.stories.tsx +127 -0
  343. package/src/exemplars/virtualizer.stories.tsx +137 -0
  344. package/src/hooks/useDensityContext.ts +1 -1
  345. package/src/hooks/useElevationContext.ts +1 -1
  346. package/src/hooks/useSafeArea.ts +3 -2
  347. package/src/hooks/useVisualViewport.ts +4 -4
  348. package/src/index.ts +2 -1
  349. package/src/playground/Controls.stories.tsx +12 -15
  350. package/src/playground/Custom.stories.tsx +15 -26
  351. package/src/playground/Typography.stories.tsx +11 -9
  352. package/src/primitives/Column/Column.stories.tsx +78 -0
  353. package/src/primitives/Column/Column.tsx +134 -0
  354. package/src/primitives/Column/index.ts +5 -0
  355. package/src/primitives/Container/Container.stories.tsx +30 -0
  356. package/src/primitives/Container/Container.tsx +22 -0
  357. package/src/primitives/Container/index.ts +5 -0
  358. package/src/primitives/Flex/Flex.stories.tsx +58 -0
  359. package/src/primitives/Flex/Flex.tsx +29 -0
  360. package/src/primitives/Flex/index.ts +5 -0
  361. package/src/primitives/Grid/Grid.stories.tsx +57 -0
  362. package/src/primitives/Grid/Grid.tsx +35 -0
  363. package/src/primitives/Grid/index.ts +5 -0
  364. package/src/primitives/Panel/Panel.stories.tsx +67 -0
  365. package/src/primitives/Panel/Panel.tsx +119 -0
  366. package/src/primitives/Panel/index.ts +5 -0
  367. package/src/primitives/index.ts +9 -0
  368. package/src/testing/Loading.tsx +26 -0
  369. package/src/testing/decorators/index.ts +2 -1
  370. package/src/testing/decorators/withLayout.tsx +77 -0
  371. package/src/testing/decorators/withLayoutVariants.tsx +48 -0
  372. package/src/testing/decorators/withTheme.tsx +34 -0
  373. package/src/testing/index.ts +2 -0
  374. package/src/translations.ts +19 -0
  375. package/src/util/index.ts +3 -1
  376. package/src/util/usePx.ts +61 -0
  377. package/dist/lib/browser/chunk-2COVUP44.mjs +0 -4373
  378. package/dist/lib/browser/chunk-2COVUP44.mjs.map +0 -7
  379. package/dist/lib/node-esm/chunk-GHXHND5V.mjs +0 -4375
  380. package/dist/lib/node-esm/chunk-GHXHND5V.mjs.map +0 -7
  381. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +0 -15
  382. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +0 -1
  383. package/dist/types/src/components/AnchoredOverflow/index.d.ts +0 -2
  384. package/dist/types/src/components/AnchoredOverflow/index.d.ts.map +0 -1
  385. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  386. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  387. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  388. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  389. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  390. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  391. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  392. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  393. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  394. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  395. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  396. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  397. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  398. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  399. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  400. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  401. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  402. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  403. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  404. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  405. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  406. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  407. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  408. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  409. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  410. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  411. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  412. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  413. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  414. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  415. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  416. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  417. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  418. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  419. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  420. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  421. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  422. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  423. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  424. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  425. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  426. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  427. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  428. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  429. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +0 -59
  430. package/src/components/AnchoredOverflow/index.ts +0 -5
  431. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  432. package/src/components/Dialogs/AlertDialog.stories.tsx +0 -66
  433. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  434. package/src/testing/decorators/withSurfaceVariantsLayout.tsx +0 -51
  435. package/src/testing/decorators/withTheme.ts +0 -25
  436. package/src/util/ThemedClassName.ts +0 -7
  437. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  438. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  439. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  440. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  441. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  442. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  443. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  444. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  445. /package/src/components/{Buttons → Button}/index.ts +0 -0
  446. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  447. /package/src/components/{Lists → List}/index.ts +0 -0
  448. /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, { 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
 
@@ -20,7 +20,7 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
20
20
  <Popover.Trigger asChild>{openTrigger}</Popover.Trigger>
21
21
  <Popover.Content>
22
22
  <Popover.Viewport>
23
- <p className='pli-2 plb-1 min-is-[18rem] max-is-[38rem]'>{children}</p>
23
+ <p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{children}</p>
24
24
  </Popover.Viewport>
25
25
  <Popover.Arrow />
26
26
  </Popover.Content>
@@ -28,15 +28,18 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
28
28
  );
29
29
  };
30
30
 
31
- export default {
32
- title: 'ui/react-ui-core/Popover',
33
- component: Popover,
31
+ const meta = {
32
+ title: 'ui/react-ui-core/components/Popover',
33
+ component: Popover.Root,
34
34
  render: DefaultStory,
35
- decorators: [withTheme],
36
- parameters: { chromatic: { disableSnapshot: false } },
37
- };
35
+ decorators: [withTheme()],
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),
@@ -56,7 +59,7 @@ export const VirtualTrigger = {
56
59
  <Popover.VirtualTrigger virtualRef={buttonRef} />
57
60
  <Popover.Content>
58
61
  <Popover.Viewport>
59
- <p className='pli-2 plb-1 min-is-[18rem] max-is-[38rem]'>{faker.lorem.paragraphs(3)}</p>
62
+ <p className='px-2 py-1 min-w-[18rem] max-w-[38rem]'>{faker.lorem.paragraphs(3)}</p>
60
63
  </Popover.Viewport>
61
64
  <Popover.Arrow />
62
65
  </Popover.Content>
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- // This is based upon `@radix-ui/react-popover` fetched 25 Oct 2024 at https://github.com/radix-ui/primitives at commit 374c7d7.
5
+ // This is based upon `@radix-ui/react-popover` fetched Oct 25, 2024 at https://github.com/radix-ui/primitives at commit 374c7d7.
6
6
 
7
7
  import { composeEventHandlers } from '@radix-ui/primitive';
8
8
  import { useComposedRefs } from '@radix-ui/react-compose-refs';
@@ -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
+ type ComponentRef,
26
27
  type ElementRef,
27
- type RefObject,
28
+ type FC,
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
 
@@ -51,7 +52,7 @@ const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NA
51
52
  const usePopperScope = createPopperScope();
52
53
 
53
54
  type PopoverContextValue = {
54
- triggerRef: MutableRefObject<HTMLButtonElement>;
55
+ triggerRef: RefObject<HTMLButtonElement>;
55
56
  contentId: string;
56
57
  open: boolean;
57
58
  onOpenChange(open: boolean): void;
@@ -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;
@@ -88,7 +93,7 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
88
93
  <PopoverProvider
89
94
  scope={__scopePopover}
90
95
  contentId={useId()}
91
- triggerRef={triggerRef as MutableRefObject<HTMLButtonElement>}
96
+ triggerRef={triggerRef as RefObject<HTMLButtonElement>}
92
97
  open={open}
93
98
  onOpenChange={setOpen}
94
99
  onOpenToggle={useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}
@@ -105,13 +110,13 @@ 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
 
114
- type PopoverAnchorElement = ElementRef<typeof PopperPrimitive.Anchor>;
119
+ type PopoverAnchorElement = ComponentRef<typeof PopperPrimitive.Anchor>;
115
120
  type PopperAnchorProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>;
116
121
  interface PopoverAnchorProps extends PopperAnchorProps {}
117
122
 
@@ -133,25 +138,28 @@ 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
 
142
147
  type PopoverTriggerElement = ElementRef<typeof Primitive.button>;
143
148
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
144
- interface PopoverTriggerProps extends PrimitiveButtonProps {}
149
+ interface PopoverTriggerProps extends PrimitiveButtonProps {
150
+ asChild?: boolean;
151
+ }
145
152
 
146
153
  const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
147
154
  (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {
148
- const { __scopePopover, ...triggerProps } = props;
155
+ const { __scopePopover, asChild, ...triggerProps } = props;
149
156
  const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
150
157
  const popperScope = usePopperScope(__scopePopover);
151
158
  const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
159
+ const Comp = asChild ? Slot : Primitive.button;
152
160
 
153
161
  const trigger = (
154
- <Primitive.button
162
+ <Comp
155
163
  type='button'
156
164
  aria-haspopup='dialog'
157
165
  aria-expanded={context.open}
@@ -175,14 +183,14 @@ const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
175
183
 
176
184
  PopoverTrigger.displayName = TRIGGER_NAME;
177
185
 
178
- /* -------------------------------------------------------------------------------------------------
179
- * PopoverVirtualTrigger
180
- * ----------------------------------------------------------------------------------------------- */
186
+ //
187
+ // PopoverVirtualTrigger
188
+ //
181
189
 
182
190
  const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
183
191
 
184
192
  interface PopoverVirtualTriggerProps {
185
- virtualRef: RefObject<PopoverTriggerElement>;
193
+ virtualRef: RefObject<PopoverTriggerElement | null>;
186
194
  }
187
195
 
188
196
  const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) => {
@@ -194,14 +202,14 @@ const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) =
194
202
  context.triggerRef.current = virtualRef.current;
195
203
  }
196
204
  });
197
- return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef} />;
205
+ return <PopperPrimitive.Anchor {...popperScope} virtualRef={virtualRef as RefObject<PopoverTriggerElement>} />;
198
206
  };
199
207
 
200
208
  PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
201
209
 
202
- /* -------------------------------------------------------------------------------------------------
203
- * PopoverPortal
204
- * ----------------------------------------------------------------------------------------------- */
210
+ //
211
+ // PopoverPortal
212
+ //
205
213
 
206
214
  const PORTAL_NAME = 'PopoverPortal';
207
215
 
@@ -240,9 +248,9 @@ const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalP
240
248
 
241
249
  PopoverPortal.displayName = PORTAL_NAME;
242
250
 
243
- /* -------------------------------------------------------------------------------------------------
244
- * PopoverContent
245
- * ----------------------------------------------------------------------------------------------- */
251
+ //
252
+ // PopoverContent
253
+ //
246
254
 
247
255
  const CONTENT_NAME = 'PopoverContent';
248
256
 
@@ -274,11 +282,11 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
274
282
 
275
283
  PopoverContent.displayName = CONTENT_NAME;
276
284
 
277
- /* ----------------------------------------------------------------------------------------------- */
278
-
279
285
  type PopoverContentTypeElement = PopoverContentImplElement;
280
- export interface PopoverContentTypeProps
281
- extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
286
+ export interface PopoverContentTypeProps extends Omit<
287
+ PopoverContentImplProps,
288
+ 'trapFocus' | 'disableOutsidePointerEvents'
289
+ > {}
282
290
 
283
291
  const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
284
292
  (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {
@@ -300,8 +308,7 @@ const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContent
300
308
  <PopoverContentImpl
301
309
  {...props}
302
310
  ref={composedRefs}
303
- // we make sure we're not trapping once it's been closed
304
- // (closed !== unmounted when animating out)
311
+ // Make sure we're not trapping once it's been closed (closed !== unmounted when animating out).
305
312
  trapFocus={context.open}
306
313
  disableOutsidePointerEvents
307
314
  onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
@@ -390,15 +397,13 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
390
397
  },
391
398
  );
392
399
 
393
- /* ----------------------------------------------------------------------------------------------- */
394
-
395
400
  type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
396
401
  type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
397
402
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
398
403
  type PopperContentProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPrimitive.Content>>;
404
+
399
405
  interface PopoverContentImplProps
400
- extends Omit<PopperContentProps, 'onPlaced'>,
401
- Omit<DismissableLayerProps, 'onDismiss'> {
406
+ extends Omit<PopperContentProps, 'onPlaced'>, Omit<DismissableLayerProps, 'onDismiss'> {
402
407
  /**
403
408
  * Whether focus should be trapped within the `Popover`
404
409
  * (default: false)
@@ -431,6 +436,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
431
436
  onFocusOutside,
432
437
  onInteractOutside,
433
438
  collisionPadding = 8,
439
+ collisionBoundary,
434
440
  classNames,
435
441
  ...contentProps
436
442
  } = props;
@@ -440,10 +446,23 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
440
446
  const elevation = useElevationContext();
441
447
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
442
448
 
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`)
449
+ // Make sure the whole tree has focus guards as our `Popover` may be the last element in the DOM (because of the `Portal`)
445
450
  useFocusGuards();
446
451
 
452
+ // Check for the closest annotated collision boundary in the DOM tree.
453
+ const computedCollisionBoundary = useMemo(() => {
454
+ const closestBoundary = context.triggerRef.current?.closest(
455
+ '[data-popover-collision-boundary]',
456
+ ) as HTMLElement | null;
457
+ return closestBoundary
458
+ ? Array.isArray(collisionBoundary)
459
+ ? [closestBoundary, ...collisionBoundary]
460
+ : collisionBoundary
461
+ ? [closestBoundary, collisionBoundary]
462
+ : [closestBoundary]
463
+ : collisionBoundary;
464
+ }, [context.open, collisionBoundary, context.triggerRef.current]);
465
+
447
466
  return (
448
467
  <FocusScope
449
468
  asChild
@@ -468,11 +487,12 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
468
487
  {...popperScope}
469
488
  {...contentProps}
470
489
  collisionPadding={safeCollisionPadding}
471
- className={tx('popover.content', 'popover', { elevation }, classNames)}
490
+ collisionBoundary={computedCollisionBoundary}
491
+ className={tx('popover.content', { elevation }, classNames)}
472
492
  ref={forwardedRef}
473
493
  style={{
474
494
  ...contentProps.style,
475
- // re-namespace exposed content custom properties
495
+ // Re-namespace exposed content custom properties.
476
496
  ...{
477
497
  '--radix-popover-content-transform-origin': 'var(--radix-popper-transform-origin)',
478
498
  '--radix-popover-content-available-width': 'var(--radix-popper-available-width)',
@@ -488,9 +508,9 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
488
508
  },
489
509
  );
490
510
 
491
- /* -------------------------------------------------------------------------------------------------
492
- * PopoverClose
493
- * ----------------------------------------------------------------------------------------------- */
511
+ //
512
+ // PopoverClose
513
+ //
494
514
 
495
515
  const CLOSE_NAME = 'PopoverClose';
496
516
 
@@ -514,9 +534,9 @@ const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
514
534
 
515
535
  PopoverClose.displayName = CLOSE_NAME;
516
536
 
517
- /* -------------------------------------------------------------------------------------------------
518
- * PopoverArrow
519
- * ----------------------------------------------------------------------------------------------- */
537
+ //
538
+ // PopoverArrow
539
+ //
520
540
 
521
541
  const ARROW_NAME = 'PopoverArrow';
522
542
 
@@ -533,7 +553,7 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
533
553
  <PopperPrimitive.Arrow
534
554
  {...popperScope}
535
555
  {...arrowProps}
536
- className={tx('popover.arrow', 'popover__arrow', {}, classNames)}
556
+ className={tx('popover.arrow', {}, classNames)}
537
557
  ref={forwardedRef}
538
558
  />
539
559
  );
@@ -542,9 +562,9 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
542
562
 
543
563
  PopoverArrow.displayName = ARROW_NAME;
544
564
 
545
- /* -------------------------------------------------------------------------------------------------
546
- * PopoverViewport
547
- * ----------------------------------------------------------------------------------------------- */
565
+ //
566
+ // PopoverViewport
567
+ //
548
568
 
549
569
  type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
550
570
  asChild?: boolean;
@@ -555,25 +575,27 @@ type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primiti
555
575
  const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
556
576
  ({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
557
577
  const { tx } = useThemeContext();
558
- const Root = asChild ? Slot : Primitive.div;
578
+ const Comp = asChild ? Slot : Primitive.div;
559
579
  return (
560
- <Root
580
+ <Comp
561
581
  {...props}
562
- className={tx('popover.viewport', 'popover__viewport', { constrainInline, constrainBlock }, classNames)}
582
+ className={tx('popover.viewport', { constrainInline, constrainBlock }, classNames)}
563
583
  ref={forwardedRef}
564
584
  >
565
585
  {children}
566
- </Root>
586
+ </Comp>
567
587
  );
568
588
  },
569
589
  );
570
590
 
571
- /* ----------------------------------------------------------------------------------------------- */
572
-
573
591
  const getState = (open: boolean) => (open ? 'open' : 'closed');
574
592
 
575
593
  type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
576
594
 
595
+ //
596
+ // Popver
597
+ //
598
+
577
599
  export const Popover = {
578
600
  Root: PopoverRoot,
579
601
  Anchor: PopoverAnchor,
@@ -1,48 +1,177 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import React, { type PropsWithChildren } from 'react';
5
+ import React, { useMemo } from 'react';
8
6
 
9
7
  import { faker } from '@dxos/random';
10
- import { activeSurface, surfaceShadow } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
9
+
10
+ import { withLayout, withTheme } from '../../testing';
11
11
 
12
12
  import { ScrollArea } from './ScrollArea';
13
- import { withTheme } from '../../testing';
14
-
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
- };
13
+
14
+ faker.seed(123);
35
15
 
36
16
  export default {
37
- title: 'ui/react-ui-core/Scroll area',
17
+ title: 'ui/react-ui-core/components/ScrollArea',
38
18
  component: ScrollArea,
39
- render: DefaultStory,
40
- decorators: [withTheme],
41
- parameters: { chromatic: { disableSnapshot: false } },
19
+ decorators: [withTheme()],
20
+ parameters: {
21
+ layout: 'centered',
22
+ },
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
+ ),
42
94
  };
43
95
 
44
- export const Default = {
45
- args: {
46
- children: faker.lorem.paragraphs(5),
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
+ );
47
157
  },
48
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
+ };