@dxos/react-ui 0.8.4-main.ead640a → 0.8.4-main.ef1bc66f44

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 (315) hide show
  1. package/dist/lib/browser/chunk-EJYV4HAH.mjs +774 -0
  2. package/dist/lib/browser/chunk-EJYV4HAH.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3199 -64
  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 +37 -48
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-YTLZCZ2M.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-YTLZCZ2M.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3199 -64
  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 +37 -48
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts +7 -0
  16. package/dist/types/src/components/AnchoredOverflow/AnchoredOverflow.d.ts.map +1 -1
  17. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +1 -1
  18. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  19. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  20. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +2 -2
  21. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  22. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  23. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  24. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  25. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  26. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.d.ts +4 -4
  27. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  28. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.stories.d.ts +4 -4
  29. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  30. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  31. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  32. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  33. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  34. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  35. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  36. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  37. package/dist/types/src/components/Dialog/Dialog.d.ts +46 -0
  38. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  39. package/dist/types/src/components/{Dialogs → Dialog}/Dialog.stories.d.ts +7 -5
  40. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  41. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  42. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  43. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  44. package/dist/types/src/components/Icon/Icon.d.ts +1 -1
  45. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  46. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  47. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  48. package/dist/types/src/components/Input/Input.d.ts +5 -2
  49. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  50. package/dist/types/src/components/Input/Input.stories.d.ts +2 -2
  51. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  52. package/dist/types/src/components/{Lists → List}/List.d.ts +1 -1
  53. package/dist/types/src/components/List/List.d.ts.map +1 -0
  54. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  55. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  56. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  57. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  58. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  59. package/dist/types/src/components/List/Treegrid.d.ts.map +1 -0
  60. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  61. package/dist/types/src/components/List/index.d.ts.map +1 -0
  62. package/dist/types/src/components/Main/Main.d.ts +16 -17
  63. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  64. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  65. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  66. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  67. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  68. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +3 -4
  69. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  70. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  71. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  72. package/dist/types/src/components/Message/Message.d.ts +1 -1
  73. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  74. package/dist/types/src/components/Message/Message.stories.d.ts +1 -1
  75. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  76. package/dist/types/src/components/Popover/Popover.d.ts +1 -1
  77. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  78. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  79. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  80. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +46 -8
  81. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  82. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  83. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  84. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
  85. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  87. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Select/Select.d.ts +10 -10
  89. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  90. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  91. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  92. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  93. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  94. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  95. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  96. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  97. package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
  98. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  99. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  100. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  101. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  102. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  103. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  104. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  105. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +2 -2
  106. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  107. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  108. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  109. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  110. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  111. package/dist/types/src/components/Toast/Toast.d.ts +4 -4
  112. package/dist/types/src/components/Toolbar/Toolbar.d.ts +14 -11
  113. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  115. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  116. package/dist/types/src/components/index.d.ts +7 -4
  117. package/dist/types/src/components/index.d.ts.map +1 -1
  118. package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
  119. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  120. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  121. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  122. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  123. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  124. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  125. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  126. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  127. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  128. package/dist/types/src/index.d.ts +2 -1
  129. package/dist/types/src/index.d.ts.map +1 -1
  130. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  131. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  132. package/dist/types/src/primitives/Container/Container.d.ts +23 -0
  133. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  134. package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
  135. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  136. package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
  137. package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
  138. package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
  139. package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
  140. package/dist/types/src/primitives/Container/index.d.ts +3 -0
  141. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  142. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
  143. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  144. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  145. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  146. package/dist/types/src/primitives/index.d.ts +3 -0
  147. package/dist/types/src/primitives/index.d.ts.map +1 -0
  148. package/dist/types/src/testing/decorators/index.d.ts +1 -1
  149. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  150. package/dist/types/src/testing/decorators/withLayout.d.ts +3 -3
  151. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
  152. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  153. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  154. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -2
  155. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  156. package/dist/types/src/util/index.d.ts +1 -2
  157. package/dist/types/src/util/index.d.ts.map +1 -1
  158. package/dist/types/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +38 -30
  160. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +8 -0
  161. package/src/components/Avatars/Avatar.stories.tsx +4 -4
  162. package/src/components/Avatars/Avatar.tsx +1 -1
  163. package/src/components/Avatars/AvatarGroup.stories.tsx +2 -2
  164. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +3 -3
  165. package/src/components/{Buttons → Button}/Button.stories.tsx +3 -3
  166. package/src/components/{Buttons → Button}/Button.tsx +1 -1
  167. package/src/components/{Buttons → Button}/IconButton.stories.tsx +2 -2
  168. package/src/components/{Buttons → Button}/IconButton.tsx +19 -13
  169. package/src/components/{Buttons → Button}/Toggle.stories.tsx +7 -6
  170. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +2 -2
  171. package/src/components/Clipboard/CopyButton.tsx +4 -4
  172. package/src/components/DensityProvider/DensityProvider.tsx +1 -1
  173. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +3 -3
  174. package/src/components/Dialog/Dialog.stories.tsx +101 -0
  175. package/src/components/{Dialogs → Dialog}/Dialog.tsx +181 -40
  176. package/src/components/ElevationProvider/ElevationProvider.tsx +1 -1
  177. package/src/components/Icon/Icon.stories.tsx +113 -0
  178. package/src/components/Icon/Icon.tsx +1 -1
  179. package/src/components/Input/Input.stories.tsx +12 -11
  180. package/src/components/Input/Input.tsx +13 -5
  181. package/src/components/Link/Link.stories.tsx +2 -2
  182. package/src/components/{Lists → List}/List.stories.tsx +19 -15
  183. package/src/components/{Lists → List}/List.tsx +1 -1
  184. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  185. package/src/components/{Lists → List}/Tree.stories.tsx +2 -2
  186. package/src/components/{Lists → List}/Treegrid.stories.tsx +2 -2
  187. package/src/components/Main/Main.stories.tsx +41 -20
  188. package/src/components/Main/Main.tsx +103 -56
  189. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +2 -2
  190. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +3 -3
  191. package/src/components/{Menus → Menu}/DropdownMenu.tsx +79 -58
  192. package/src/components/Message/Message.stories.tsx +3 -3
  193. package/src/components/Message/Message.tsx +30 -5
  194. package/src/components/Popover/Popover.stories.tsx +3 -3
  195. package/src/components/Popover/Popover.tsx +52 -33
  196. package/src/components/ScrollArea/ScrollArea.stories.tsx +166 -40
  197. package/src/components/ScrollArea/ScrollArea.tsx +86 -80
  198. package/src/components/ScrollArea/index.ts +1 -1
  199. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
  200. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  201. package/src/components/ScrollContainer/index.ts +5 -0
  202. package/src/components/Select/Select.stories.tsx +3 -3
  203. package/src/components/Select/Select.tsx +4 -4
  204. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  205. package/src/components/Skeleton/Skeleton.tsx +26 -0
  206. package/src/components/Skeleton/index.ts +5 -0
  207. package/src/components/Splitter/Splitter.stories.tsx +73 -0
  208. package/src/components/Splitter/Splitter.tsx +123 -0
  209. package/src/components/Splitter/index.ts +5 -0
  210. package/src/components/Status/Status.stories.tsx +2 -2
  211. package/src/components/Tag/Tag.stories.tsx +4 -4
  212. package/src/components/Tag/Tag.tsx +1 -1
  213. package/src/components/ThemeProvider/ThemeProvider.tsx +2 -3
  214. package/src/components/ThemeProvider/TranslationsProvider.tsx +1 -16
  215. package/src/components/ThemeProvider/index.ts +3 -3
  216. package/src/components/Toast/Toast.stories.tsx +3 -3
  217. package/src/components/Toolbar/Toolbar.stories.tsx +4 -6
  218. package/src/components/Toolbar/Toolbar.tsx +32 -12
  219. package/src/components/Tooltip/Tooltip.stories.tsx +3 -3
  220. package/src/components/Tooltip/Tooltip.tsx +22 -20
  221. package/src/components/index.ts +7 -4
  222. package/src/exemplars/generics.stories.tsx +44 -0
  223. package/src/exemplars/slot.stories.tsx +108 -0
  224. package/src/exemplars/tabster.stories.tsx +127 -0
  225. package/src/hooks/useDensityContext.ts +1 -1
  226. package/src/hooks/useElevationContext.ts +1 -1
  227. package/src/index.ts +2 -1
  228. package/src/playground/Controls.stories.tsx +3 -4
  229. package/src/playground/Custom.stories.tsx +8 -10
  230. package/src/playground/Typography.stories.tsx +2 -2
  231. package/src/primitives/Container/Container.stories.tsx +67 -0
  232. package/src/primitives/Container/Container.tsx +82 -0
  233. package/src/primitives/Container/Layout.stories.tsx +57 -0
  234. package/src/primitives/Container/Layout.tsx +61 -0
  235. package/src/primitives/Container/index.ts +6 -0
  236. package/src/primitives/Flex/Flex.tsx +26 -0
  237. package/src/primitives/Flex/index.ts +5 -0
  238. package/src/primitives/index.ts +6 -0
  239. package/src/testing/decorators/index.ts +1 -1
  240. package/src/testing/decorators/withLayout.tsx +22 -15
  241. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +5 -5
  242. package/src/testing/decorators/withTheme.tsx +21 -18
  243. package/src/util/index.ts +2 -2
  244. package/dist/lib/browser/chunk-24AWTFTZ.mjs +0 -4521
  245. package/dist/lib/browser/chunk-24AWTFTZ.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-MPRFBTTQ.mjs +0 -4523
  247. package/dist/lib/node-esm/chunk-MPRFBTTQ.mjs.map +0 -7
  248. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  249. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  250. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  251. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  252. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  253. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -13
  254. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  255. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  256. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  257. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  258. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  259. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  260. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  261. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  262. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  263. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  264. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  265. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  266. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  267. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  268. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  269. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  270. package/dist/types/src/components/Lists/Treegrid.d.ts.map +0 -1
  271. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  272. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  273. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  274. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  275. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  276. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  277. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  278. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  279. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  280. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  281. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  282. package/dist/types/src/util/domino.d.ts +0 -18
  283. package/dist/types/src/util/domino.d.ts.map +0 -1
  284. package/src/components/Dialogs/Dialog.stories.tsx +0 -67
  285. package/src/util/ThemedClassName.ts +0 -7
  286. package/src/util/domino.ts +0 -53
  287. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +0 -0
  288. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +0 -0
  289. package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  290. package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  291. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +0 -0
  292. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -0
  293. package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  294. package/dist/types/src/components/{Lists → List}/List.stories.d.ts +0 -0
  295. package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  296. package/dist/types/src/components/{Lists → List}/Tree.d.ts +0 -0
  297. package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -0
  298. package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  299. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +0 -0
  300. package/dist/types/src/components/{Lists → List}/Treegrid.stories.d.ts +0 -0
  301. package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  302. package/dist/types/src/components/{Menus → Menu}/ContextMenu.stories.d.ts +0 -0
  303. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.stories.d.ts +0 -0
  304. package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  305. package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  306. package/src/components/{Buttons → Button}/ToggleGroup.tsx +0 -0
  307. package/src/components/{Buttons → Button}/index.ts +0 -0
  308. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +0 -0
  309. package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  310. package/src/components/{Lists → List}/Tree.tsx +0 -0
  311. package/src/components/{Lists → List}/TreeDropIndicator.tsx +0 -0
  312. package/src/components/{Lists → List}/Treegrid.tsx +1 -1
  313. /package/src/components/{Lists → List}/index.ts +0 -0
  314. /package/src/components/{Menus → Menu}/ContextMenu.tsx +0 -0
  315. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -25,6 +25,7 @@ import React, {
25
25
  forwardRef,
26
26
  useCallback,
27
27
  useEffect,
28
+ useMemo,
28
29
  useRef,
29
30
  } from 'react';
30
31
 
@@ -34,15 +35,15 @@ import { type ThemedClassName } from '../../util';
34
35
 
35
36
  type Direction = 'ltr' | 'rtl';
36
37
 
37
- /* -------------------------------------------------------------------------------------------------
38
- * DropdownMenu
39
- * ----------------------------------------------------------------------------------------------- */
38
+ //
39
+ // DropdownMenu
40
+ //
40
41
 
41
42
  const DROPDOWN_MENU_NAME = 'DropdownMenu';
42
43
 
43
44
  type ScopedProps<P> = P & { __scopeDropdownMenu?: Scope };
44
45
  const [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(DROPDOWN_MENU_NAME, [createMenuScope]);
45
- const useMenuScope = createMenuScope();
46
+ const useMenuScope: (scope?: Scope) => any = createMenuScope();
46
47
 
47
48
  type DropdownMenuContextValue = {
48
49
  triggerId: string;
@@ -96,9 +97,9 @@ const DropdownMenuRoot: FC<DropdownMenuRootProps> = (props: ScopedProps<Dropdown
96
97
 
97
98
  DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
98
99
 
99
- /* -------------------------------------------------------------------------------------------------
100
- * DropdownMenuTrigger
101
- * ----------------------------------------------------------------------------------------------- */
100
+ //
101
+ // DropdownMenuTrigger
102
+ //
102
103
 
103
104
  const TRIGGER_NAME = 'DropdownMenuTrigger';
104
105
 
@@ -161,9 +162,9 @@ const DropdownMenuTrigger = forwardRef<DropdownMenuTriggerElement, DropdownMenuT
161
162
 
162
163
  DropdownMenuTrigger.displayName = TRIGGER_NAME;
163
164
 
164
- /* -------------------------------------------------------------------------------------------------
165
- * DropdownMenuVirtualTrigger
166
- * ----------------------------------------------------------------------------------------------- */
165
+ //
166
+ // DropdownMenuVirtualTrigger
167
+ //
167
168
 
168
169
  const VIRTUAL_TRIGGER_NAME = 'DropdownMenuVirtualTrigger';
169
170
 
@@ -185,9 +186,9 @@ const DropdownMenuVirtualTrigger = (props: ScopedProps<DropdownMenuVirtualTrigge
185
186
 
186
187
  DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
187
188
 
188
- /* -------------------------------------------------------------------------------------------------
189
- * DropdownMenuPortal
190
- * ----------------------------------------------------------------------------------------------- */
189
+ //
190
+ // DropdownMenuPortal
191
+ //
191
192
 
192
193
  const PORTAL_NAME = 'DropdownMenuPortal';
193
194
 
@@ -202,9 +203,9 @@ const DropdownMenuPortal: FC<DropdownMenuPortalProps> = (props: ScopedProps<Drop
202
203
 
203
204
  DropdownMenuPortal.displayName = PORTAL_NAME;
204
205
 
205
- /* -------------------------------------------------------------------------------------------------
206
- * DropdownMenuViewport
207
- * ----------------------------------------------------------------------------------------------- */
206
+ //
207
+ // DropdownMenuViewport
208
+ //
208
209
 
209
210
  type DropdownMenuViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
210
211
  asChild?: boolean;
@@ -222,9 +223,9 @@ const DropdownMenuViewport = forwardRef<HTMLDivElement, DropdownMenuViewportProp
222
223
  },
223
224
  );
224
225
 
225
- /* -------------------------------------------------------------------------------------------------
226
- * DropdownMenuContent
227
- * ----------------------------------------------------------------------------------------------- */
226
+ //
227
+ // DropdownMenuContent
228
+ //
228
229
 
229
230
  const CONTENT_NAME = 'DropdownMenuContent';
230
231
 
@@ -234,19 +235,35 @@ interface DropdownMenuContentProps extends Omit<MenuContentProps, 'onEntryFocus'
234
235
 
235
236
  const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(
236
237
  (props: ScopedProps<DropdownMenuContentProps>, forwardedRef) => {
237
- const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
238
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, collisionBoundary, ...contentProps } = props;
238
239
  const { tx } = useThemeContext();
239
240
  const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
240
241
  const elevation = useElevationContext();
241
242
  const menuScope = useMenuScope(__scopeDropdownMenu);
242
243
  const hasInteractedOutsideRef = useRef(false);
243
244
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
245
+
246
+ // Check for the closest annotated collision boundary in the DOM tree.
247
+ const computedCollisionBoundary = useMemo(() => {
248
+ const closestBoundary = context.triggerRef.current?.closest(
249
+ '[data-popover-collision-boundary]',
250
+ ) as HTMLElement | null;
251
+ return closestBoundary
252
+ ? Array.isArray(collisionBoundary)
253
+ ? [closestBoundary, ...collisionBoundary]
254
+ : collisionBoundary
255
+ ? [closestBoundary, collisionBoundary]
256
+ : [closestBoundary]
257
+ : collisionBoundary;
258
+ }, [context.open, collisionBoundary, context.triggerRef.current]);
259
+
244
260
  return (
245
261
  <MenuPrimitive.Content
246
262
  id={context.contentId}
247
263
  aria-labelledby={context.triggerId}
248
264
  {...menuScope}
249
265
  {...contentProps}
266
+ collisionBoundary={computedCollisionBoundary}
250
267
  collisionPadding={safeCollisionPadding}
251
268
  ref={forwardedRef}
252
269
  onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
@@ -285,9 +302,9 @@ const DropdownMenuContent = forwardRef<DropdownMenuContentElement, DropdownMenuC
285
302
 
286
303
  DropdownMenuContent.displayName = CONTENT_NAME;
287
304
 
288
- /* -------------------------------------------------------------------------------------------------
289
- * DropdownMenuGroup
290
- * ----------------------------------------------------------------------------------------------- */
305
+ //
306
+ // DropdownMenuGroup
307
+ //
291
308
 
292
309
  const GROUP_NAME = 'DropdownMenuGroup';
293
310
 
@@ -305,9 +322,9 @@ const DropdownMenuGroup = forwardRef<DropdownMenuGroupElement, DropdownMenuGroup
305
322
 
306
323
  DropdownMenuGroup.displayName = GROUP_NAME;
307
324
 
308
- /* -------------------------------------------------------------------------------------------------
309
- * DropdownMenuLabel
310
- * ----------------------------------------------------------------------------------------------- */
325
+ //
326
+ // DropdownMenuLabel
327
+ //
311
328
 
312
329
  const LABEL_NAME = 'DropdownMenuLabel';
313
330
 
@@ -333,9 +350,9 @@ const DropdownMenuGroupLabel = forwardRef<DropdownMenuLabelElement, DropdownMenu
333
350
 
334
351
  DropdownMenuGroupLabel.displayName = LABEL_NAME;
335
352
 
336
- /* -------------------------------------------------------------------------------------------------
337
- * DropdownMenuItem
338
- * ----------------------------------------------------------------------------------------------- */
353
+ //
354
+ // DropdownMenuItem
355
+ //
339
356
 
340
357
  const ITEM_NAME = 'DropdownMenuItem';
341
358
 
@@ -361,9 +378,9 @@ const DropdownMenuItem = forwardRef<DropdownMenuItemElement, DropdownMenuItemPro
361
378
 
362
379
  DropdownMenuItem.displayName = ITEM_NAME;
363
380
 
364
- /* -------------------------------------------------------------------------------------------------
365
- * DropdownMenuCheckboxItem
366
- * ----------------------------------------------------------------------------------------------- */
381
+ //
382
+ // DropdownMenuCheckboxItem
383
+ //
367
384
 
368
385
  const CHECKBOX_ITEM_NAME = 'DropdownMenuCheckboxItem';
369
386
 
@@ -389,9 +406,9 @@ const DropdownMenuCheckboxItem = forwardRef<DropdownMenuCheckboxItemElement, Dro
389
406
 
390
407
  DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
391
408
 
392
- /* -------------------------------------------------------------------------------------------------
393
- * DropdownMenuRadioGroup
394
- * ----------------------------------------------------------------------------------------------- */
409
+ //
410
+ // DropdownMenuRadioGroup
411
+ //
395
412
 
396
413
  const RADIO_GROUP_NAME = 'DropdownMenuRadioGroup';
397
414
 
@@ -409,9 +426,9 @@ const DropdownMenuRadioGroup = forwardRef<DropdownMenuRadioGroupElement, Dropdow
409
426
 
410
427
  DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
411
428
 
412
- /* -------------------------------------------------------------------------------------------------
413
- * DropdownMenuRadioItem
414
- * ----------------------------------------------------------------------------------------------- */
429
+ //
430
+ // DropdownMenuRadioItem
431
+ //
415
432
 
416
433
  const RADIO_ITEM_NAME = 'DropdownMenuRadioItem';
417
434
 
@@ -437,9 +454,9 @@ const DropdownMenuRadioItem = forwardRef<DropdownMenuRadioItemElement, DropdownM
437
454
 
438
455
  DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
439
456
 
440
- /* -------------------------------------------------------------------------------------------------
441
- * DropdownMenuItemIndicator
442
- * ----------------------------------------------------------------------------------------------- */
457
+ //
458
+ // DropdownMenuItemIndicator
459
+ //
443
460
 
444
461
  const INDICATOR_NAME = 'DropdownMenuItemIndicator';
445
462
 
@@ -457,9 +474,9 @@ const DropdownMenuItemIndicator = forwardRef<DropdownMenuItemIndicatorElement, D
457
474
 
458
475
  DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
459
476
 
460
- /* -------------------------------------------------------------------------------------------------
461
- * DropdownMenuSeparator
462
- * ----------------------------------------------------------------------------------------------- */
477
+ //
478
+ // DropdownMenuSeparator
479
+ //
463
480
 
464
481
  const SEPARATOR_NAME = 'DropdownMenuSeparator';
465
482
 
@@ -485,9 +502,9 @@ const DropdownMenuSeparator = forwardRef<DropdownMenuSeparatorElement, DropdownM
485
502
 
486
503
  DropdownMenuSeparator.displayName = SEPARATOR_NAME;
487
504
 
488
- /* -------------------------------------------------------------------------------------------------
489
- * DropdownMenuArrow
490
- * ----------------------------------------------------------------------------------------------- */
505
+ //
506
+ // DropdownMenuArrow
507
+ //
491
508
 
492
509
  const ARROW_NAME = 'DropdownMenuArrow';
493
510
 
@@ -513,9 +530,9 @@ const DropdownMenuArrow = forwardRef<DropdownMenuArrowElement, DropdownMenuArrow
513
530
 
514
531
  DropdownMenuArrow.displayName = ARROW_NAME;
515
532
 
516
- /* -------------------------------------------------------------------------------------------------
517
- * DropdownMenuSub
518
- * ----------------------------------------------------------------------------------------------- */
533
+ //
534
+ // DropdownMenuSub
535
+ //
519
536
 
520
537
  interface DropdownMenuSubProps {
521
538
  children?: ReactNode;
@@ -540,9 +557,9 @@ const DropdownMenuSub: FC<DropdownMenuSubProps> = (props: ScopedProps<DropdownMe
540
557
  );
541
558
  };
542
559
 
543
- /* -------------------------------------------------------------------------------------------------
544
- * DropdownMenuSubTrigger
545
- * ----------------------------------------------------------------------------------------------- */
560
+ //
561
+ // DropdownMenuSubTrigger
562
+ //
546
563
 
547
564
  const SUB_TRIGGER_NAME = 'DropdownMenuSubTrigger';
548
565
 
@@ -560,9 +577,9 @@ const DropdownMenuSubTrigger = forwardRef<DropdownMenuSubTriggerElement, Dropdow
560
577
 
561
578
  DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
562
579
 
563
- /* -------------------------------------------------------------------------------------------------
564
- * DropdownMenuSubContent
565
- * ----------------------------------------------------------------------------------------------- */
580
+ //
581
+ // DropdownMenuSubContent
582
+ //
566
583
 
567
584
  const SUB_CONTENT_NAME = 'DropdownMenuSubContent';
568
585
 
@@ -598,7 +615,9 @@ const DropdownMenuSubContent = forwardRef<DropdownMenuSubContentElement, Dropdow
598
615
 
599
616
  DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
600
617
 
601
- /* ----------------------------------------------------------------------------------------------- */
618
+ //
619
+ // DropdownMenu
620
+ //
602
621
 
603
622
  export const DropdownMenu = {
604
623
  Root: DropdownMenuRoot,
@@ -621,7 +640,9 @@ export const DropdownMenu = {
621
640
  SubContent: DropdownMenuSubContent,
622
641
  };
623
642
 
624
- const useDropdownMenuMenuScope = useMenuScope;
643
+ type DropdownMenuScope = Scope;
644
+
645
+ const useDropdownMenuMenuScope: (scope?: DropdownMenuScope) => any = useMenuScope;
625
646
 
626
647
  export { createDropdownMenuScope, useDropdownMenuContext, useDropdownMenuMenuScope };
627
648
 
@@ -5,7 +5,7 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { type MessageValence } from '@dxos/react-ui-types';
8
+ import { type MessageValence } from '@dxos/ui-types';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
11
 
@@ -25,10 +25,10 @@ const DefaultStory = ({ valence, title, body }: StoryProps) => (
25
25
  );
26
26
 
27
27
  const meta = {
28
- title: 'ui/react-ui-core/Callout',
28
+ title: 'ui/react-ui-core/components/Callout',
29
29
  component: Callout.Root as any,
30
30
  render: DefaultStory,
31
- decorators: [withTheme],
31
+ decorators: [withTheme()],
32
32
  parameters: { chromatic: { disableSnapshot: false } },
33
33
  argTypes: {
34
34
  valence: {
@@ -8,7 +8,7 @@ import { Slot } from '@radix-ui/react-slot';
8
8
  import React, { type ComponentPropsWithRef, forwardRef } from 'react';
9
9
 
10
10
  import { useId } from '@dxos/react-hooks';
11
- import { type Elevation, type MessageValence } from '@dxos/react-ui-types';
11
+ import { type Elevation, type MessageValence } from '@dxos/ui-types';
12
12
 
13
13
  import { useElevationContext, useThemeContext } from '../../hooks';
14
14
  import { type ThemedClassName } from '../../util';
@@ -31,9 +31,15 @@ type MessageRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.d
31
31
  };
32
32
 
33
33
  type MessageContextValue = { titleId?: string; descriptionId: string; valence: MessageValence };
34
+
34
35
  const MESSAGE_NAME = 'Message';
36
+
35
37
  const [MessageProvider, useMessageContext] = createContext<MessageContextValue>(MESSAGE_NAME);
36
38
 
39
+ //
40
+ // Root
41
+ //
42
+
37
43
  const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
38
44
  (
39
45
  {
@@ -53,6 +59,7 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
53
59
  const descriptionId = useId('message__description', propsDescriptionId);
54
60
  const elevation = useElevationContext(propsElevation);
55
61
  const Root = asChild ? Slot : Primitive.div;
62
+
56
63
  return (
57
64
  <MessageProvider {...{ titleId, descriptionId, valence }}>
58
65
  <Root
@@ -72,6 +79,10 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
72
79
 
73
80
  MessageRoot.displayName = MESSAGE_NAME;
74
81
 
82
+ //
83
+ // Title
84
+ //
85
+
75
86
  type MessageTitleProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
76
87
  asChild?: boolean;
77
88
  icon?: string;
@@ -84,6 +95,7 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
84
95
  const { tx } = useThemeContext();
85
96
  const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
86
97
  const Root = asChild ? Slot : Primitive.h2;
98
+
87
99
  return (
88
100
  <Root
89
101
  {...props}
@@ -106,16 +118,20 @@ const MessageTitle = forwardRef<HTMLHeadingElement, MessageTitleProps>(
106
118
 
107
119
  MessageTitle.displayName = MESSAGE_TITLE_NAME;
108
120
 
121
+ //
122
+ // Content
123
+ //
124
+
109
125
  type MessageContentProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
110
126
  asChild?: boolean;
111
127
  };
112
128
 
113
- const MESSAGE_BODY_NAME = 'MessageContent';
129
+ const MESSAGE_CONTENT_NAME = 'MessageContent';
114
130
 
115
131
  const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
116
132
  ({ asChild, classNames, children, ...props }, forwardedRef) => {
117
133
  const { tx } = useThemeContext();
118
- const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
134
+ const { descriptionId } = useMessageContext(MESSAGE_CONTENT_NAME);
119
135
  const Root = asChild ? Slot : Primitive.p;
120
136
  return (
121
137
  <Root
@@ -130,9 +146,18 @@ const MessageContent = forwardRef<HTMLParagraphElement, MessageContentProps>(
130
146
  },
131
147
  );
132
148
 
133
- MessageContent.displayName = MESSAGE_BODY_NAME;
149
+ MessageContent.displayName = MESSAGE_CONTENT_NAME;
150
+
151
+ //
152
+ // Message
153
+ //
154
+
155
+ export const Message = {
156
+ Root: MessageRoot,
157
+ Title: MessageTitle,
158
+ Content: MessageContent,
159
+ };
134
160
 
135
- export const Message = { Root: MessageRoot, Title: MessageTitle, Content: MessageContent };
136
161
  export const Callout = Message;
137
162
 
138
163
  export type { MessageRootProps, MessageTitleProps, MessageContentProps };
@@ -8,7 +8,7 @@ import React, { type PropsWithChildren, type ReactNode, useRef, useState } from
8
8
  import { faker } from '@dxos/random';
9
9
 
10
10
  import { withTheme } from '../../testing';
11
- import { Button } from '../Buttons';
11
+ import { Button } from '../Button';
12
12
 
13
13
  import { Popover } from './Popover';
14
14
 
@@ -29,10 +29,10 @@ const DefaultStory = ({ openTrigger, children }: PropsWithChildren<{ openTrigger
29
29
  };
30
30
 
31
31
  const meta = {
32
- title: 'ui/react-ui-core/Popover',
32
+ title: 'ui/react-ui-core/components/Popover',
33
33
  component: Popover.Root,
34
34
  render: DefaultStory,
35
- decorators: [withTheme],
35
+ decorators: [withTheme()],
36
36
  } satisfies Meta<typeof DefaultStory>;
37
37
 
38
38
  export default meta;
@@ -31,6 +31,7 @@ import React, {
31
31
  forwardRef,
32
32
  useCallback,
33
33
  useEffect,
34
+ useMemo,
34
35
  useRef,
35
36
  useState,
36
37
  } from 'react';
@@ -40,9 +41,9 @@ import { useElevationContext, useThemeContext } from '../../hooks';
40
41
  import { useSafeCollisionPadding } from '../../hooks/useSafeCollisionPadding';
41
42
  import { type ThemedClassName } from '../../util';
42
43
 
43
- /* -------------------------------------------------------------------------------------------------
44
- * Popover
45
- * ----------------------------------------------------------------------------------------------- */
44
+ //
45
+ // Context
46
+ //
46
47
 
47
48
  const POPOVER_NAME = 'Popover';
48
49
 
@@ -64,6 +65,10 @@ type PopoverContextValue = {
64
65
 
65
66
  const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
66
67
 
68
+ //
69
+ // PopoverRoot
70
+ //
71
+
67
72
  interface PopoverRootProps {
68
73
  children?: ReactNode;
69
74
  open?: boolean;
@@ -105,9 +110,9 @@ const PopoverRoot: FC<PopoverRootProps> = (props: ScopedProps<PopoverRootProps>)
105
110
 
106
111
  PopoverRoot.displayName = POPOVER_NAME;
107
112
 
108
- /* -------------------------------------------------------------------------------------------------
109
- * PopoverAnchor
110
- * ----------------------------------------------------------------------------------------------- */
113
+ //
114
+ // PopoverAnchor
115
+ //
111
116
 
112
117
  const ANCHOR_NAME = 'PopoverAnchor';
113
118
 
@@ -133,9 +138,9 @@ const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
133
138
 
134
139
  PopoverAnchor.displayName = ANCHOR_NAME;
135
140
 
136
- /* -------------------------------------------------------------------------------------------------
137
- * PopoverTrigger
138
- * ----------------------------------------------------------------------------------------------- */
141
+ //
142
+ // PopoverTrigger
143
+ //
139
144
 
140
145
  const TRIGGER_NAME = 'PopoverTrigger';
141
146
 
@@ -175,9 +180,9 @@ const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
175
180
 
176
181
  PopoverTrigger.displayName = TRIGGER_NAME;
177
182
 
178
- /* -------------------------------------------------------------------------------------------------
179
- * PopoverVirtualTrigger
180
- * ----------------------------------------------------------------------------------------------- */
183
+ //
184
+ // PopoverVirtualTrigger
185
+ //
181
186
 
182
187
  const VIRTUAL_TRIGGER_NAME = 'PopoverVirtualTrigger';
183
188
 
@@ -199,9 +204,9 @@ const PopoverVirtualTrigger = (props: ScopedProps<PopoverVirtualTriggerProps>) =
199
204
 
200
205
  PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
201
206
 
202
- /* -------------------------------------------------------------------------------------------------
203
- * PopoverPortal
204
- * ----------------------------------------------------------------------------------------------- */
207
+ //
208
+ // PopoverPortal
209
+ //
205
210
 
206
211
  const PORTAL_NAME = 'PopoverPortal';
207
212
 
@@ -240,9 +245,9 @@ const PopoverPortal: FC<PopoverPortalProps> = (props: ScopedProps<PopoverPortalP
240
245
 
241
246
  PopoverPortal.displayName = PORTAL_NAME;
242
247
 
243
- /* -------------------------------------------------------------------------------------------------
244
- * PopoverContent
245
- * ----------------------------------------------------------------------------------------------- */
248
+ //
249
+ // PopoverContent
250
+ //
246
251
 
247
252
  const CONTENT_NAME = 'PopoverContent';
248
253
 
@@ -274,8 +279,6 @@ const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps
274
279
 
275
280
  PopoverContent.displayName = CONTENT_NAME;
276
281
 
277
- /* ----------------------------------------------------------------------------------------------- */
278
-
279
282
  type PopoverContentTypeElement = PopoverContentImplElement;
280
283
  export interface PopoverContentTypeProps
281
284
  extends Omit<PopoverContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}
@@ -390,8 +393,6 @@ const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverCont
390
393
  },
391
394
  );
392
395
 
393
- /* ----------------------------------------------------------------------------------------------- */
394
-
395
396
  type PopoverContentImplElement = ElementRef<typeof PopperPrimitive.Content>;
396
397
  type FocusScopeProps = ComponentPropsWithoutRef<typeof FocusScope>;
397
398
  type DismissableLayerProps = ComponentPropsWithoutRef<typeof DismissableLayer>;
@@ -432,6 +433,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
432
433
  onFocusOutside,
433
434
  onInteractOutside,
434
435
  collisionPadding = 8,
436
+ collisionBoundary,
435
437
  classNames,
436
438
  ...contentProps
437
439
  } = props;
@@ -444,6 +446,20 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
444
446
  // Make sure the whole tree has focus guards as our `Popover` may be the last element in the DOM (because of the `Portal`)
445
447
  useFocusGuards();
446
448
 
449
+ // Check for the closest annotated collision boundary in the DOM tree.
450
+ const computedCollisionBoundary = useMemo(() => {
451
+ const closestBoundary = context.triggerRef.current?.closest(
452
+ '[data-popover-collision-boundary]',
453
+ ) as HTMLElement | null;
454
+ return closestBoundary
455
+ ? Array.isArray(collisionBoundary)
456
+ ? [closestBoundary, ...collisionBoundary]
457
+ : collisionBoundary
458
+ ? [closestBoundary, collisionBoundary]
459
+ : [closestBoundary]
460
+ : collisionBoundary;
461
+ }, [context.open, collisionBoundary, context.triggerRef.current]);
462
+
447
463
  return (
448
464
  <FocusScope
449
465
  asChild
@@ -468,6 +484,7 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
468
484
  {...popperScope}
469
485
  {...contentProps}
470
486
  collisionPadding={safeCollisionPadding}
487
+ collisionBoundary={computedCollisionBoundary}
471
488
  className={tx('popover.content', 'popover', { elevation }, classNames)}
472
489
  ref={forwardedRef}
473
490
  style={{
@@ -488,9 +505,9 @@ const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentI
488
505
  },
489
506
  );
490
507
 
491
- /* -------------------------------------------------------------------------------------------------
492
- * PopoverClose
493
- * ----------------------------------------------------------------------------------------------- */
508
+ //
509
+ // PopoverClose
510
+ //
494
511
 
495
512
  const CLOSE_NAME = 'PopoverClose';
496
513
 
@@ -514,9 +531,9 @@ const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
514
531
 
515
532
  PopoverClose.displayName = CLOSE_NAME;
516
533
 
517
- /* -------------------------------------------------------------------------------------------------
518
- * PopoverArrow
519
- * ----------------------------------------------------------------------------------------------- */
534
+ //
535
+ // PopoverArrow
536
+ //
520
537
 
521
538
  const ARROW_NAME = 'PopoverArrow';
522
539
 
@@ -542,9 +559,9 @@ const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
542
559
 
543
560
  PopoverArrow.displayName = ARROW_NAME;
544
561
 
545
- /* -------------------------------------------------------------------------------------------------
546
- * PopoverViewport
547
- * ----------------------------------------------------------------------------------------------- */
562
+ //
563
+ // PopoverViewport
564
+ //
548
565
 
549
566
  type PopoverViewportProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
550
567
  asChild?: boolean;
@@ -568,12 +585,14 @@ const PopoverViewport = forwardRef<HTMLDivElement, PopoverViewportProps>(
568
585
  },
569
586
  );
570
587
 
571
- /* ----------------------------------------------------------------------------------------------- */
572
-
573
588
  const getState = (open: boolean) => (open ? 'open' : 'closed');
574
589
 
575
590
  type PopoverContentInteractOutsideEvent = Parameters<NonNullable<PopoverContentProps['onInteractOutside']>>[0];
576
591
 
592
+ //
593
+ // Popver
594
+ //
595
+
577
596
  export const Popover = {
578
597
  Root: PopoverRoot,
579
598
  Anchor: PopoverAnchor,