@dxos/react-ui 0.8.3 → 0.8.4-main.1068cf700f

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 (382) hide show
  1. package/dist/lib/browser/chunk-6DTBPJE4.mjs +774 -0
  2. package/dist/lib/browser/chunk-6DTBPJE4.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3203 -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 +66 -50
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs +776 -0
  9. package/dist/lib/node-esm/chunk-JKHQSGNU.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3203 -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 +66 -50
  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/Avatars/Avatar.d.ts +1 -1
  18. package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
  19. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +5 -31
  20. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +5 -11
  22. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  24. package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  25. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +8 -20
  26. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +2 -2
  28. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  29. package/dist/types/src/components/Button/Button.stories.d.ts +17 -0
  30. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +4 -4
  32. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  33. package/dist/types/src/components/Button/IconButton.stories.d.ts +13 -0
  34. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  35. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  37. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  38. package/dist/types/src/components/Button/ToggleGroup.d.ts +27 -0
  39. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  40. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +27 -0
  41. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  42. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  43. package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
  44. package/dist/types/src/components/Clipboard/CopyButton.d.ts +5 -6
  45. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  46. package/dist/types/src/components/Clipboard/index.d.ts +2 -3
  47. package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
  48. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts +1 -1
  49. package/dist/types/src/components/DensityProvider/DensityProvider.d.ts.map +1 -1
  50. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +1 -1
  51. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  52. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts +11 -0
  53. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  54. package/dist/types/src/components/Dialog/Dialog.d.ts +46 -0
  55. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  56. package/dist/types/src/components/Dialog/Dialog.stories.d.ts +27 -0
  57. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  58. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  59. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts +1 -1
  60. package/dist/types/src/components/ElevationProvider/ElevationProvider.d.ts.map +1 -1
  61. package/dist/types/src/components/Icon/Icon.d.ts +2 -2
  62. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  63. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  64. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  65. package/dist/types/src/components/Input/Input.d.ts +6 -5
  66. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  67. package/dist/types/src/components/Input/Input.stories.d.ts +12 -13
  68. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  69. package/dist/types/src/components/Link/Link.stories.d.ts +8 -8
  70. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/{Lists → List}/List.d.ts +3 -3
  72. package/dist/types/src/components/List/List.d.ts.map +1 -0
  73. package/dist/types/src/components/List/List.stories.d.ts +14 -0
  74. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  75. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  76. package/dist/types/src/components/{Lists → List}/Tree.d.ts +1 -1
  77. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  78. package/dist/types/src/components/List/Tree.stories.d.ts +15 -0
  79. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  80. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  81. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts +1 -1
  82. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  83. package/dist/types/src/components/List/Treegrid.stories.d.ts +12 -0
  84. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  85. package/dist/types/src/components/List/index.d.ts.map +1 -0
  86. package/dist/types/src/components/Main/Main.d.ts +17 -27
  87. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  88. package/dist/types/src/components/Main/Main.stories.d.ts +6 -7
  89. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/{Menus → Menu}/ContextMenu.d.ts +6 -6
  91. package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -0
  92. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts +12 -0
  93. package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/{Menus → Menu}/DropdownMenu.d.ts +8 -8
  95. package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -0
  96. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +15 -0
  97. package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -0
  98. package/dist/types/src/components/Menu/index.d.ts.map +1 -0
  99. package/dist/types/src/components/Message/Message.d.ts +1 -1
  100. package/dist/types/src/components/Message/Message.d.ts.map +1 -1
  101. package/dist/types/src/components/Message/Message.stories.d.ts +8 -17
  102. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  103. package/dist/types/src/components/Popover/Popover.d.ts +4 -4
  104. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  105. package/dist/types/src/components/Popover/Popover.stories.d.ts +6 -34
  106. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  107. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +25 -26
  108. package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
  109. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +37 -25
  110. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +39 -0
  112. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  113. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +19 -0
  114. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  115. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  116. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  117. package/dist/types/src/components/Select/Select.d.ts +10 -10
  118. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  119. package/dist/types/src/components/Select/Select.stories.d.ts +5 -10
  120. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/Separator/Separator.d.ts +1 -1
  122. package/dist/types/src/components/Skeleton/Skeleton.d.ts +12 -0
  123. package/dist/types/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  124. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts +17 -0
  125. package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  126. package/dist/types/src/components/Skeleton/index.d.ts +2 -0
  127. package/dist/types/src/components/Skeleton/index.d.ts.map +1 -0
  128. package/dist/types/src/components/Splitter/Splitter.d.ts +26 -0
  129. package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -0
  130. package/dist/types/src/components/Splitter/Splitter.stories.d.ts +7 -0
  131. package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -0
  132. package/dist/types/src/components/Splitter/index.d.ts +2 -0
  133. package/dist/types/src/components/Splitter/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Status/Status.stories.d.ts +2 -8
  135. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/Tag/Tag.d.ts +1 -1
  137. package/dist/types/src/components/Tag/Tag.d.ts.map +1 -1
  138. package/dist/types/src/components/Tag/Tag.stories.d.ts +12 -12
  139. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts +3 -3
  141. package/dist/types/src/components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  142. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +1 -8
  143. package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
  144. package/dist/types/src/components/ThemeProvider/index.d.ts +2 -1
  145. package/dist/types/src/components/ThemeProvider/index.d.ts.map +1 -1
  146. package/dist/types/src/components/Toast/Toast.d.ts +5 -5
  147. package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
  148. package/dist/types/src/components/Toast/Toast.stories.d.ts +6 -44
  149. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/Toolbar/Toolbar.d.ts +20 -19
  151. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  152. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +6 -50
  153. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -4
  155. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  156. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +8 -61
  157. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/index.d.ts +7 -4
  159. package/dist/types/src/components/index.d.ts.map +1 -1
  160. package/dist/types/src/exemplars/generics.stories.d.ts +17 -0
  161. package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -0
  162. package/dist/types/src/exemplars/slot.stories.d.ts +14 -0
  163. package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -0
  164. package/dist/types/src/exemplars/tabster.stories.d.ts +8 -0
  165. package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -0
  166. package/dist/types/src/hooks/useDensityContext.d.ts +1 -1
  167. package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useElevationContext.d.ts +1 -1
  169. package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
  170. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  171. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  172. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  173. package/dist/types/src/index.d.ts +3 -2
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/playground/Controls.stories.d.ts +5 -9
  176. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  177. package/dist/types/src/playground/Custom.stories.d.ts +12 -4
  178. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  179. package/dist/types/src/playground/Typography.stories.d.ts +5 -11
  180. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  181. package/dist/types/src/primitives/Container/Container.d.ts +23 -0
  182. package/dist/types/src/primitives/Container/Container.d.ts.map +1 -0
  183. package/dist/types/src/primitives/Container/Container.stories.d.ts +11 -0
  184. package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -0
  185. package/dist/types/src/primitives/Container/Layout.d.ts +18 -0
  186. package/dist/types/src/primitives/Container/Layout.d.ts.map +1 -0
  187. package/dist/types/src/primitives/Container/Layout.stories.d.ts +10 -0
  188. package/dist/types/src/primitives/Container/Layout.stories.d.ts.map +1 -0
  189. package/dist/types/src/primitives/Container/index.d.ts +3 -0
  190. package/dist/types/src/primitives/Container/index.d.ts.map +1 -0
  191. package/dist/types/src/primitives/Flex/Flex.d.ts +8 -0
  192. package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -0
  193. package/dist/types/src/primitives/Flex/index.d.ts +2 -0
  194. package/dist/types/src/primitives/Flex/index.d.ts.map +1 -0
  195. package/dist/types/src/primitives/index.d.ts +3 -0
  196. package/dist/types/src/primitives/index.d.ts.map +1 -0
  197. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  198. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  199. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  200. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  201. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts +12 -0
  202. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  203. package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
  204. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  205. package/dist/types/src/util/index.d.ts +2 -1
  206. package/dist/types/src/util/index.d.ts.map +1 -1
  207. package/dist/types/src/util/usePx.d.ts +8 -0
  208. package/dist/types/src/util/usePx.d.ts.map +1 -0
  209. package/dist/types/tsconfig.tsbuildinfo +1 -1
  210. package/package.json +39 -31
  211. package/src/components/AnchoredOverflow/AnchoredOverflow.tsx +10 -12
  212. package/src/components/Avatars/Avatar.stories.tsx +23 -14
  213. package/src/components/Avatars/Avatar.tsx +6 -13
  214. package/src/components/Avatars/AvatarGroup.stories.tsx +12 -8
  215. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +19 -14
  216. package/src/components/Breadcrumb/Breadcrumb.tsx +8 -34
  217. package/src/components/{Buttons → Button}/Button.stories.tsx +11 -12
  218. package/src/components/{Buttons → Button}/Button.tsx +3 -8
  219. package/src/components/{Buttons → Button}/IconButton.stories.tsx +13 -10
  220. package/src/components/{Buttons → Button}/IconButton.tsx +23 -16
  221. package/src/components/Button/Toggle.stories.tsx +37 -0
  222. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +15 -12
  223. package/src/components/{Buttons → Button}/ToggleGroup.tsx +17 -4
  224. package/src/components/Clipboard/ClipboardProvider.tsx +1 -1
  225. package/src/components/Clipboard/CopyButton.tsx +17 -18
  226. package/src/components/DensityProvider/DensityProvider.tsx +2 -2
  227. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +17 -14
  228. package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +16 -21
  229. package/src/components/Dialog/Dialog.stories.tsx +101 -0
  230. package/src/components/{Dialogs → Dialog}/Dialog.tsx +182 -57
  231. package/src/components/ElevationProvider/ElevationProvider.tsx +2 -2
  232. package/src/components/Icon/Icon.stories.tsx +113 -0
  233. package/src/components/Icon/Icon.tsx +3 -3
  234. package/src/components/Input/Input.stories.tsx +22 -23
  235. package/src/components/Input/Input.tsx +38 -44
  236. package/src/components/Link/Link.stories.tsx +12 -8
  237. package/src/components/Link/Link.tsx +1 -1
  238. package/src/components/{Lists → List}/List.stories.tsx +40 -34
  239. package/src/components/{Lists → List}/List.tsx +22 -29
  240. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  241. package/src/components/{Lists → List}/Tree.stories.tsx +13 -10
  242. package/src/components/{Lists → List}/Tree.tsx +4 -3
  243. package/src/components/{Lists → List}/TreeDropIndicator.tsx +1 -1
  244. package/src/components/{Lists → List}/Treegrid.stories.tsx +14 -8
  245. package/src/components/{Lists → List}/Treegrid.tsx +61 -25
  246. package/src/components/Main/Main.stories.tsx +56 -27
  247. package/src/components/Main/Main.tsx +166 -94
  248. package/src/components/{Menus → Menu}/ContextMenu.stories.tsx +13 -10
  249. package/src/components/{Menus → Menu}/ContextMenu.tsx +8 -31
  250. package/src/components/{Menus → Menu}/DropdownMenu.stories.tsx +14 -11
  251. package/src/components/{Menus → Menu}/DropdownMenu.tsx +109 -78
  252. package/src/components/Message/Message.stories.tsx +14 -10
  253. package/src/components/Message/Message.tsx +34 -23
  254. package/src/components/Popover/Popover.stories.tsx +14 -11
  255. package/src/components/Popover/Popover.tsx +68 -49
  256. package/src/components/ScrollArea/ScrollArea.stories.tsx +163 -34
  257. package/src/components/ScrollArea/ScrollArea.tsx +80 -82
  258. package/src/components/ScrollArea/index.ts +1 -1
  259. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +70 -0
  260. package/src/components/ScrollContainer/ScrollContainer.tsx +238 -0
  261. package/src/components/ScrollContainer/index.ts +5 -0
  262. package/src/components/Select/Select.stories.tsx +15 -12
  263. package/src/components/Select/Select.tsx +18 -34
  264. package/src/components/Separator/Separator.tsx +1 -1
  265. package/src/components/Skeleton/Skeleton.stories.tsx +52 -0
  266. package/src/components/Skeleton/Skeleton.tsx +26 -0
  267. package/src/components/Skeleton/index.ts +5 -0
  268. package/src/components/Splitter/Splitter.stories.tsx +73 -0
  269. package/src/components/Splitter/Splitter.tsx +123 -0
  270. package/src/components/Splitter/index.ts +5 -0
  271. package/src/components/Status/Status.stories.tsx +11 -8
  272. package/src/components/Status/Status.tsx +2 -2
  273. package/src/components/Tag/Tag.stories.tsx +21 -12
  274. package/src/components/Tag/Tag.tsx +2 -7
  275. package/src/components/ThemeProvider/ThemeProvider.tsx +5 -6
  276. package/src/components/ThemeProvider/TranslationsProvider.tsx +4 -19
  277. package/src/components/ThemeProvider/index.ts +3 -1
  278. package/src/components/Toast/Toast.stories.tsx +14 -11
  279. package/src/components/Toast/Toast.tsx +15 -19
  280. package/src/components/Toolbar/Toolbar.stories.tsx +23 -21
  281. package/src/components/Toolbar/Toolbar.tsx +41 -10
  282. package/src/components/Tooltip/Tooltip.stories.tsx +18 -14
  283. package/src/components/Tooltip/Tooltip.tsx +29 -26
  284. package/src/components/index.ts +7 -4
  285. package/src/exemplars/generics.stories.tsx +44 -0
  286. package/src/exemplars/slot.stories.tsx +108 -0
  287. package/src/exemplars/tabster.stories.tsx +127 -0
  288. package/src/hooks/useDensityContext.ts +1 -1
  289. package/src/hooks/useElevationContext.ts +1 -1
  290. package/src/hooks/useSafeArea.ts +3 -2
  291. package/src/hooks/useSafeCollisionPadding.ts +1 -1
  292. package/src/hooks/useVisualViewport.ts +4 -4
  293. package/src/index.ts +3 -2
  294. package/src/playground/Controls.stories.tsx +20 -18
  295. package/src/playground/Custom.stories.tsx +15 -26
  296. package/src/playground/Typography.stories.tsx +10 -8
  297. package/src/primitives/Container/Container.stories.tsx +67 -0
  298. package/src/primitives/Container/Container.tsx +79 -0
  299. package/src/primitives/Container/Layout.stories.tsx +57 -0
  300. package/src/primitives/Container/Layout.tsx +61 -0
  301. package/src/primitives/Container/index.ts +6 -0
  302. package/src/primitives/Flex/Flex.tsx +26 -0
  303. package/src/primitives/Flex/index.ts +5 -0
  304. package/src/primitives/index.ts +6 -0
  305. package/src/testing/decorators/index.ts +2 -1
  306. package/src/testing/decorators/withLayout.tsx +63 -0
  307. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +4 -4
  308. package/src/testing/decorators/withTheme.tsx +34 -0
  309. package/src/util/index.ts +3 -1
  310. package/src/util/usePx.ts +61 -0
  311. package/README.yml +0 -1
  312. package/dist/lib/browser/chunk-WXW6KSRL.mjs +0 -4376
  313. package/dist/lib/browser/chunk-WXW6KSRL.mjs.map +0 -7
  314. package/dist/lib/node/chunk-3E3QKWX4.cjs +0 -4363
  315. package/dist/lib/node/chunk-3E3QKWX4.cjs.map +0 -7
  316. package/dist/lib/node/index.cjs +0 -175
  317. package/dist/lib/node/index.cjs.map +0 -7
  318. package/dist/lib/node/meta.json +0 -1
  319. package/dist/lib/node/testing/index.cjs +0 -114
  320. package/dist/lib/node/testing/index.cjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-EQ7EG74H.mjs +0 -4378
  322. package/dist/lib/node-esm/chunk-EQ7EG74H.mjs.map +0 -7
  323. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  324. package/dist/types/src/components/Buttons/Button.stories.d.ts +0 -12
  325. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  326. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  327. package/dist/types/src/components/Buttons/IconButton.stories.d.ts +0 -22
  328. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  329. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  330. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  331. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  332. package/dist/types/src/components/Buttons/ToggleGroup.d.ts +0 -28
  333. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  334. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts +0 -39
  335. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  336. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  337. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  338. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts +0 -43
  339. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  340. package/dist/types/src/components/Dialogs/Dialog.d.ts +0 -31
  341. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  342. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts +0 -48
  343. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  345. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  346. package/dist/types/src/components/Lists/List.stories.d.ts +0 -37
  347. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  348. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  349. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  350. package/dist/types/src/components/Lists/Tree.stories.d.ts +0 -41
  351. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  352. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  353. package/dist/types/src/components/Lists/Treegrid.stories.d.ts +0 -10
  354. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  355. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  356. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +0 -1
  357. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -50
  358. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +0 -1
  359. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +0 -1
  360. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -50
  361. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +0 -1
  362. package/dist/types/src/components/Menus/index.d.ts.map +0 -1
  363. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts +0 -12
  364. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  365. package/dist/types/src/util/ThemedClassName.d.ts +0 -5
  366. package/dist/types/src/util/ThemedClassName.d.ts.map +0 -1
  367. package/src/components/Buttons/Toggle.stories.tsx +0 -33
  368. package/src/components/Dialogs/Dialog.stories.tsx +0 -65
  369. package/src/testing/decorators/withTheme.ts +0 -22
  370. package/src/util/ThemedClassName.ts +0 -7
  371. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  372. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  373. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  374. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  375. /package/dist/types/src/components/{Lists → List}/TreeDropIndicator.d.ts +0 -0
  376. /package/dist/types/src/components/{Lists → List}/index.d.ts +0 -0
  377. /package/dist/types/src/components/{Menus → Menu}/index.d.ts +0 -0
  378. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  379. /package/src/components/{Buttons → Button}/index.ts +0 -0
  380. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  381. /package/src/components/{Lists → List}/index.ts +0 -0
  382. /package/src/components/{Menus → Menu}/index.ts +0 -0
@@ -1,81 +1,3213 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- AlertDialog,
4
- AnchoredOverflow,
5
- Avatar,
6
- BUTTON_GROUP_NAME,
7
- Breadcrumb,
8
- Button,
9
- ButtonGroup,
10
- Callout,
11
- Clipboard,
12
- ContextMenu,
13
3
  DensityContext,
14
4
  DensityProvider,
15
- Dialog,
16
- DropdownMenu,
17
5
  ElevationContext,
18
6
  ElevationProvider,
19
- Icon,
20
- IconButton,
21
- Input,
22
- LIST_ITEM_NAME,
23
- LIST_NAME,
24
- Link,
25
- List,
26
- ListItem,
27
- Main,
28
- Message,
29
- Popover,
30
- ScrollArea,
31
- Select,
32
- Separator,
33
- Status,
34
- Tag,
35
7
  ThemeContext,
36
8
  ThemeProvider,
37
- Toast,
38
- Toggle,
39
- ToggleGroup,
40
- ToggleGroupItem,
41
- Toolbar,
42
9
  Tooltip,
43
- Tree,
44
- TreeItem,
45
- Treegrid,
46
- createDropdownMenuScope,
47
- createPopoverScope,
10
+ TranslationsContext,
48
11
  createTooltipScope,
49
12
  hasIosKeyboard,
50
13
  initialSafeArea,
51
- isLabel,
52
- messageIcons,
53
- toLocalizedString,
54
- useAvatarContext,
55
- useButtonGroupContext,
56
- useClipboard,
57
- useDensityContext,
58
- useDropdownMenuContext,
59
- useDropdownMenuMenuScope,
60
14
  useElevationContext,
61
- useIconHref,
62
- useLandmarkMover,
63
- useListContext,
64
- useListItemContext,
65
- useMainContext,
66
15
  useSafeArea,
67
- useSidebars,
68
16
  useThemeContext,
69
17
  useTooltipContext,
70
- useTranslation,
71
- useTranslationsContext,
72
- useVisualViewport
73
- } from "./chunk-EQ7EG74H.mjs";
18
+ useTranslation
19
+ } from "./chunk-JKHQSGNU.mjs";
74
20
 
75
- // packages/ui/react-ui/src/index.ts
21
+ // src/index.ts
76
22
  import { Trans } from "react-i18next";
77
23
  export * from "@dxos/react-hooks";
78
- export * from "@dxos/react-ui-types";
24
+ export * from "@dxos/ui-types";
25
+
26
+ // src/components/AnchoredOverflow/AnchoredOverflow.tsx
27
+ import { Primitive } from "@radix-ui/react-primitive";
28
+ import { Slot } from "@radix-ui/react-slot";
29
+ import React, { forwardRef } from "react";
30
+
31
+ // src/hooks/useDensityContext.ts
32
+ import { useContext } from "react";
33
+ var useDensityContext = (propsDensity) => {
34
+ const { density } = useContext(DensityContext);
35
+ return propsDensity ?? density;
36
+ };
37
+
38
+ // src/hooks/useIconHref.ts
39
+ var ICONS_URL = "/icons.svg";
40
+ var useIconHref = (icon) => {
41
+ const { noCache } = useThemeContext();
42
+ const url = noCache ? `${ICONS_URL}?nocache=${(/* @__PURE__ */ new Date()).getMinutes()}` : ICONS_URL;
43
+ return icon ? `${url}#${icon}` : void 0;
44
+ };
45
+
46
+ // src/hooks/useTranslationsContext.ts
47
+ import { useContext as useContext2 } from "react";
48
+ var useTranslationsContext = () => useContext2(TranslationsContext);
49
+
50
+ // src/hooks/useVisualViewport.ts
51
+ import { useCallback, useState } from "react";
52
+ import { useViewportResize } from "@dxos/react-hooks";
53
+ var useVisualViewport = (deps) => {
54
+ const [width, setWidth] = useState(null);
55
+ const [height, setHeight] = useState(null);
56
+ const handleResize = useCallback(() => {
57
+ if (window.visualViewport) {
58
+ setWidth(window.visualViewport.width);
59
+ setHeight(window.visualViewport.height);
60
+ }
61
+ }, []);
62
+ useViewportResize(handleResize, deps);
63
+ return {
64
+ width,
65
+ height
66
+ };
67
+ };
68
+
69
+ // src/components/AnchoredOverflow/AnchoredOverflow.tsx
70
+ var AnchoredOverflowRoot = /* @__PURE__ */ forwardRef(({ asChild, classNames, children, ...props }, forwardedRef) => {
71
+ const { tx } = useThemeContext();
72
+ const Root8 = asChild ? Slot : Primitive.div;
73
+ return /* @__PURE__ */ React.createElement(Root8, {
74
+ role: "none",
75
+ ...props,
76
+ className: tx("anchoredOverflow.root", {}, classNames),
77
+ ref: forwardedRef
78
+ }, children);
79
+ });
80
+ var AnchoredOverflowAnchor = /* @__PURE__ */ forwardRef(({ asChild, classNames, children, ...props }, forwardedRef) => {
81
+ const { tx } = useThemeContext();
82
+ const Root8 = asChild ? Slot : Primitive.div;
83
+ return /* @__PURE__ */ React.createElement(Root8, {
84
+ role: "none",
85
+ ...props,
86
+ className: tx("anchoredOverflow.anchor", {}, classNames),
87
+ ref: forwardedRef
88
+ }, children);
89
+ });
90
+ var AnchoredOverflow = {
91
+ Root: AnchoredOverflowRoot,
92
+ Anchor: AnchoredOverflowAnchor
93
+ };
94
+
95
+ // src/components/Avatars/Avatar.tsx
96
+ import "@dxos/lit-ui/dx-avatar.pcss";
97
+ import { createContext } from "@radix-ui/react-context";
98
+ import { Primitive as Primitive2 } from "@radix-ui/react-primitive";
99
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
100
+ import React2, { forwardRef as forwardRef2 } from "react";
101
+ import { DxAvatar } from "@dxos/lit-ui/react";
102
+ import { useId } from "@dxos/react-hooks";
103
+ import { mx } from "@dxos/ui-theme";
104
+ var AVATAR_NAME = "Avatar";
105
+ var [AvatarProvider, useAvatarContext] = createContext(AVATAR_NAME);
106
+ var AvatarRoot = ({ children, labelId: propsLabelId, descriptionId: propsDescriptionId }) => {
107
+ const labelId = useId("avatar__label", propsLabelId);
108
+ const descriptionId = useId("avatar__description", propsDescriptionId);
109
+ return /* @__PURE__ */ React2.createElement(AvatarProvider, {
110
+ labelId,
111
+ descriptionId
112
+ }, children);
113
+ };
114
+ var AvatarContent = /* @__PURE__ */ forwardRef2(({ icon, classNames, ...props }, forwardedRef) => {
115
+ const href = useIconHref(icon);
116
+ const { labelId, descriptionId } = useAvatarContext("AvatarContent");
117
+ return /* @__PURE__ */ React2.createElement(DxAvatar, {
118
+ ...props,
119
+ icon: href,
120
+ "aria-labelledby": labelId,
121
+ "aria-describedby": descriptionId,
122
+ rootClassName: mx(classNames),
123
+ ref: forwardedRef
124
+ });
125
+ });
126
+ var AvatarLabel = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
127
+ const Root8 = asChild ? Slot2 : Primitive2.span;
128
+ const { tx } = useThemeContext();
129
+ const { labelId } = useAvatarContext("AvatarLabel");
130
+ return /* @__PURE__ */ React2.createElement(Root8, {
131
+ ...props,
132
+ id: labelId,
133
+ ref: forwardedRef,
134
+ className: tx("avatar.label", {
135
+ srOnly
136
+ }, classNames)
137
+ });
138
+ });
139
+ var AvatarDescription = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
140
+ const Root8 = asChild ? Slot2 : Primitive2.span;
141
+ const { tx } = useThemeContext();
142
+ const { descriptionId } = useAvatarContext("AvatarDescription");
143
+ return /* @__PURE__ */ React2.createElement(Root8, {
144
+ ...props,
145
+ id: descriptionId,
146
+ ref: forwardedRef,
147
+ className: tx("avatar.description", {
148
+ srOnly
149
+ }, classNames)
150
+ });
151
+ });
152
+ var Avatar = {
153
+ Root: AvatarRoot,
154
+ Content: AvatarContent,
155
+ Label: AvatarLabel,
156
+ Description: AvatarDescription
157
+ };
158
+
159
+ // src/components/Breadcrumb/Breadcrumb.tsx
160
+ import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
161
+ import { Slot as Slot4 } from "@radix-ui/react-slot";
162
+ import React5, { forwardRef as forwardRef5 } from "react";
163
+
164
+ // src/components/Icon/Icon.tsx
165
+ import React3, { forwardRef as forwardRef3, memo } from "react";
166
+ var Icon = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef3(({ icon, classNames, size = 4, ...props }, forwardedRef) => {
167
+ const { tx } = useThemeContext();
168
+ const href = useIconHref(icon);
169
+ return /* @__PURE__ */ React3.createElement("svg", {
170
+ ...props,
171
+ className: tx("icon.root", {
172
+ size
173
+ }, classNames),
174
+ ref: forwardedRef
175
+ }, /* @__PURE__ */ React3.createElement("use", {
176
+ href
177
+ }));
178
+ }));
179
+
180
+ // src/components/Link/Link.tsx
181
+ import { Primitive as Primitive3 } from "@radix-ui/react-primitive";
182
+ import { Slot as Slot3 } from "@radix-ui/react-slot";
183
+ import React4, { forwardRef as forwardRef4 } from "react";
184
+ var Link = /* @__PURE__ */ forwardRef4(({ asChild, variant, classNames, ...props }, forwardedRef) => {
185
+ const { tx } = useThemeContext();
186
+ const Root8 = asChild ? Slot3 : Primitive3.a;
187
+ return /* @__PURE__ */ React4.createElement(Root8, {
188
+ ...props,
189
+ className: tx("link.root", {
190
+ variant
191
+ }, classNames),
192
+ ref: forwardedRef
193
+ });
194
+ });
195
+
196
+ // src/components/Breadcrumb/Breadcrumb.tsx
197
+ var BreadcrumbRoot = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...props }, forwardedRef) => {
198
+ const { tx } = useThemeContext();
199
+ const Root8 = asChild ? Slot4 : Primitive4.div;
200
+ return /* @__PURE__ */ React5.createElement(Root8, {
201
+ role: "navigation",
202
+ ...props,
203
+ className: tx("breadcrumb.root", {}, classNames),
204
+ ref: forwardedRef
205
+ });
206
+ });
207
+ var BreadcrumbList = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...props }, forwardedRef) => {
208
+ const { tx } = useThemeContext();
209
+ const Root8 = asChild ? Slot4 : Primitive4.ol;
210
+ return /* @__PURE__ */ React5.createElement(Root8, {
211
+ role: "list",
212
+ ...props,
213
+ className: tx("breadcrumb.list", {}, classNames),
214
+ ref: forwardedRef
215
+ });
216
+ });
217
+ var BreadcrumbListItem = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...props }, forwardedRef) => {
218
+ const { tx } = useThemeContext();
219
+ const Root8 = asChild ? Slot4 : Primitive4.li;
220
+ return /* @__PURE__ */ React5.createElement(Root8, {
221
+ role: "listitem",
222
+ ...props,
223
+ className: tx("breadcrumb.listItem", {}, classNames),
224
+ ref: forwardedRef
225
+ });
226
+ });
227
+ var BreadcrumbLink = /* @__PURE__ */ forwardRef5(({ asChild, ...props }, forwardedRef) => {
228
+ const Root8 = asChild ? Slot4 : Link;
229
+ return /* @__PURE__ */ React5.createElement(Root8, {
230
+ ...props,
231
+ ref: forwardedRef
232
+ });
233
+ });
234
+ var BreadcrumbCurrent = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...props }, forwardedRef) => {
235
+ const { tx } = useThemeContext();
236
+ const Root8 = asChild ? Slot4 : "h1";
237
+ return /* @__PURE__ */ React5.createElement(Root8, {
238
+ ...props,
239
+ "aria-current": "page",
240
+ className: tx("breadcrumb.current", {}, classNames),
241
+ ref: forwardedRef
242
+ });
243
+ });
244
+ var BreadcrumbSeparator = ({ children, classNames, ...props }) => {
245
+ const { tx } = useThemeContext();
246
+ return /* @__PURE__ */ React5.createElement(Primitive4.span, {
247
+ role: "separator",
248
+ "aria-hidden": "true",
249
+ ...props,
250
+ className: tx("breadcrumb.separator", {}, classNames)
251
+ }, children ?? /* @__PURE__ */ React5.createElement(Icon, {
252
+ icon: "ph--dot--bold"
253
+ }));
254
+ };
255
+ var Breadcrumb = {
256
+ Root: BreadcrumbRoot,
257
+ List: BreadcrumbList,
258
+ ListItem: BreadcrumbListItem,
259
+ Link: BreadcrumbLink,
260
+ Current: BreadcrumbCurrent,
261
+ Separator: BreadcrumbSeparator
262
+ };
263
+
264
+ // src/components/Button/Button.tsx
265
+ import { createContext as createContext2 } from "@radix-ui/react-context";
266
+ import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
267
+ import { Slot as Slot5 } from "@radix-ui/react-slot";
268
+ import React6, { forwardRef as forwardRef6, memo as memo2 } from "react";
269
+ var BUTTON_GROUP_NAME = "ButtonGroup";
270
+ var BUTTON_NAME = "Button";
271
+ var [ButtonGroupProvider, useButtonGroupContext] = createContext2(BUTTON_GROUP_NAME, {
272
+ inGroup: false
273
+ });
274
+ var Button = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef6(({ classNames, children, density: propsDensity, elevation: propsElevation, variant = "default", asChild, ...props }, ref) => {
275
+ const { inGroup } = useButtonGroupContext(BUTTON_NAME);
276
+ const { tx } = useThemeContext();
277
+ const elevation = useElevationContext(propsElevation);
278
+ const density = useDensityContext(propsDensity);
279
+ const Root8 = asChild ? Slot5 : Primitive5.button;
280
+ return /* @__PURE__ */ React6.createElement(Root8, {
281
+ ref,
282
+ ...props,
283
+ "data-variant": variant,
284
+ "data-density": density,
285
+ "data-props": inGroup ? "grouped" : "",
286
+ className: tx("button.root", {
287
+ variant,
288
+ inGroup,
289
+ disabled: props.disabled,
290
+ density,
291
+ elevation
292
+ }, classNames),
293
+ ...props.disabled && {
294
+ disabled: true
295
+ }
296
+ }, children);
297
+ }));
298
+ Button.displayName = BUTTON_NAME;
299
+ var ButtonGroup = /* @__PURE__ */ forwardRef6(({ children, elevation: propsElevation, classNames, asChild, ...props }, forwardedRef) => {
300
+ const { tx } = useThemeContext();
301
+ const elevation = useElevationContext(propsElevation);
302
+ const Root8 = asChild ? Slot5 : Primitive5.div;
303
+ return /* @__PURE__ */ React6.createElement(Root8, {
304
+ role: "none",
305
+ ...props,
306
+ className: tx("button.group", {
307
+ elevation
308
+ }, classNames),
309
+ ref: forwardedRef
310
+ }, /* @__PURE__ */ React6.createElement(ButtonGroupProvider, {
311
+ inGroup: true
312
+ }, children));
313
+ });
314
+ ButtonGroup.displayName = BUTTON_GROUP_NAME;
315
+
316
+ // src/components/Button/IconButton.tsx
317
+ import React7, { forwardRef as forwardRef7 } from "react";
318
+ var IconButton = /* @__PURE__ */ forwardRef7((props, forwardedRef) => props.iconOnly ? /* @__PURE__ */ React7.createElement(IconOnlyButton, {
319
+ ...props,
320
+ ref: forwardedRef
321
+ }) : /* @__PURE__ */ React7.createElement(LabelledIconButton, {
322
+ ...props,
323
+ ref: forwardedRef
324
+ }));
325
+ var IconOnlyButton = /* @__PURE__ */ forwardRef7(({ noTooltip, tooltipSide, ...props }, forwardedRef) => {
326
+ if (noTooltip) {
327
+ return /* @__PURE__ */ React7.createElement(LabelledIconButton, {
328
+ ...props,
329
+ ref: forwardedRef
330
+ });
331
+ }
332
+ return /* @__PURE__ */ React7.createElement(Tooltip.Trigger, {
333
+ asChild: true,
334
+ content: props.label,
335
+ side: tooltipSide
336
+ }, /* @__PURE__ */ React7.createElement(LabelledIconButton, {
337
+ ...props,
338
+ ref: forwardedRef
339
+ }));
340
+ });
341
+ var LabelledIconButton = /* @__PURE__ */ forwardRef7(({ size = 5, icon, iconOnly, iconEnd, iconClassNames, label, caretDown, noTooltip: _, classNames, ...props }, forwardedRef) => {
342
+ const { tx } = useThemeContext();
343
+ return /* @__PURE__ */ React7.createElement(Button, {
344
+ ...props,
345
+ classNames: tx("iconButton.root", {
346
+ iconOnly
347
+ }, classNames),
348
+ ref: forwardedRef
349
+ }, icon && !iconEnd && /* @__PURE__ */ React7.createElement(Icon, {
350
+ icon,
351
+ size,
352
+ classNames: iconClassNames
353
+ }), /* @__PURE__ */ React7.createElement("span", {
354
+ className: iconOnly ? "sr-only" : void 0
355
+ }, label), icon && iconEnd && /* @__PURE__ */ React7.createElement(Icon, {
356
+ icon,
357
+ size,
358
+ classNames: iconClassNames
359
+ }), caretDown && /* @__PURE__ */ React7.createElement(Icon, {
360
+ size: 3,
361
+ icon: "ph--caret-down--bold"
362
+ }));
363
+ });
364
+
365
+ // src/components/Button/Toggle.tsx
366
+ import { Toggle as TogglePrimitive } from "@radix-ui/react-toggle";
367
+ import React8, { forwardRef as forwardRef8 } from "react";
368
+ var Toggle = /* @__PURE__ */ forwardRef8(({ defaultPressed, pressed, onPressedChange, ...props }, forwardedRef) => {
369
+ return /* @__PURE__ */ React8.createElement(TogglePrimitive, {
370
+ defaultPressed,
371
+ pressed,
372
+ onPressedChange,
373
+ asChild: true
374
+ }, /* @__PURE__ */ React8.createElement(Button, {
375
+ ...props,
376
+ ref: forwardedRef
377
+ }));
378
+ });
379
+
380
+ // src/components/Button/ToggleGroup.tsx
381
+ import { ToggleGroupItem as ToggleGroupItemPrimitive, ToggleGroup as ToggleGroupPrimitive } from "@radix-ui/react-toggle-group";
382
+ import React9, { forwardRef as forwardRef9 } from "react";
383
+ var ToggleGroup = /* @__PURE__ */ forwardRef9(({ classNames, children, ...props }, forwardedRef) => {
384
+ return /* @__PURE__ */ React9.createElement(ToggleGroupPrimitive, {
385
+ ...props,
386
+ asChild: true
387
+ }, /* @__PURE__ */ React9.createElement(ButtonGroup, {
388
+ classNames,
389
+ children,
390
+ ref: forwardedRef
391
+ }));
392
+ });
393
+ var ToggleGroupItem = /* @__PURE__ */ forwardRef9(({ variant, elevation, density, classNames, children, ...props }, forwardedRef) => {
394
+ return /* @__PURE__ */ React9.createElement(ToggleGroupItemPrimitive, {
395
+ ...props,
396
+ asChild: true
397
+ }, /* @__PURE__ */ React9.createElement(Button, {
398
+ variant,
399
+ elevation,
400
+ density,
401
+ classNames,
402
+ children,
403
+ ref: forwardedRef
404
+ }));
405
+ });
406
+ var ToggleGroupIconItem = /* @__PURE__ */ forwardRef9(({ variant, label, icon, size, elevation, density, classNames, ...props }, forwardedRef) => {
407
+ return /* @__PURE__ */ React9.createElement(ToggleGroupItemPrimitive, {
408
+ ...props,
409
+ asChild: true
410
+ }, /* @__PURE__ */ React9.createElement(IconButton, {
411
+ variant,
412
+ elevation,
413
+ density,
414
+ classNames,
415
+ label,
416
+ icon,
417
+ size,
418
+ ref: forwardedRef
419
+ }));
420
+ });
421
+
422
+ // src/components/Clipboard/ClipboardProvider.tsx
423
+ import React10, { createContext as createContext3, useCallback as useCallback2, useContext as useContext3, useState as useState2 } from "react";
424
+ var ClipboardContext = /* @__PURE__ */ createContext3({
425
+ textValue: "",
426
+ setTextValue: async (_) => {
427
+ }
428
+ });
429
+ var useClipboard = () => useContext3(ClipboardContext);
430
+ var ClipboardProvider = ({ children }) => {
431
+ const [textValue, setInternalTextValue] = useState2("");
432
+ const setTextValue = useCallback2(async (nextValue) => {
433
+ await navigator.clipboard.writeText(nextValue);
434
+ return setInternalTextValue(nextValue);
435
+ }, []);
436
+ return /* @__PURE__ */ React10.createElement(ClipboardContext.Provider, {
437
+ value: {
438
+ textValue,
439
+ setTextValue
440
+ }
441
+ }, children);
442
+ };
443
+
444
+ // src/components/Clipboard/CopyButton.tsx
445
+ import React11 from "react";
446
+ import { mx as mx2, osTranslations } from "@dxos/ui-theme";
447
+
448
+ // src/components/ThemeProvider/index.ts
449
+ import { isLabel, toLocalizedString } from "@dxos/ui-types";
450
+
451
+ // src/util/usePx.ts
452
+ import { useCallback as useCallback3, useEffect, useMemo, useState as useState3 } from "react";
453
+ var getDocumentElementFontSize = () => parseFloat(getComputedStyle(document.documentElement).fontSize);
454
+ var usePx = (rem) => {
455
+ const [fontSize, setFontSize] = useState3(() => {
456
+ if (typeof document !== "undefined") {
457
+ return getDocumentElementFontSize();
458
+ }
459
+ return 16;
460
+ });
461
+ const updateFontSize = useCallback3(() => {
462
+ setFontSize(getDocumentElementFontSize());
463
+ }, []);
464
+ useEffect(() => {
465
+ if (typeof document === "undefined") {
466
+ return;
467
+ }
468
+ const resizeObserver = new ResizeObserver(updateFontSize);
469
+ resizeObserver.observe(document.documentElement);
470
+ const mediaQueryList = window.matchMedia("all");
471
+ const handleMediaChange = () => {
472
+ updateFontSize();
473
+ };
474
+ if (mediaQueryList.addEventListener) {
475
+ mediaQueryList.addEventListener("change", handleMediaChange);
476
+ } else {
477
+ mediaQueryList.addListener(handleMediaChange);
478
+ }
479
+ return () => {
480
+ resizeObserver.disconnect();
481
+ if (mediaQueryList.removeEventListener) {
482
+ mediaQueryList.removeEventListener("change", handleMediaChange);
483
+ } else {
484
+ mediaQueryList.removeListener(handleMediaChange);
485
+ }
486
+ };
487
+ }, []);
488
+ return useMemo(() => rem * fontSize, [
489
+ fontSize
490
+ ]);
491
+ };
492
+
493
+ // src/components/Clipboard/CopyButton.tsx
494
+ var inactiveLabelStyles = "invisible bs-px -mbe-px overflow-hidden";
495
+ var CopyButton = ({ classNames, value, size = 5, ...props }) => {
496
+ const { t } = useTranslation(osTranslations);
497
+ const { textValue, setTextValue } = useClipboard();
498
+ const isCopied = textValue === value;
499
+ return /* @__PURE__ */ React11.createElement(Button, {
500
+ ...props,
501
+ classNames: [
502
+ "inline-flex flex-col justify-center",
503
+ classNames
504
+ ],
505
+ onClick: () => setTextValue(value),
506
+ "data-testid": "copy-invitation"
507
+ }, /* @__PURE__ */ React11.createElement("div", {
508
+ role: "none",
509
+ className: mx2("flex gap-1 items-center", isCopied && inactiveLabelStyles)
510
+ }, /* @__PURE__ */ React11.createElement("span", {
511
+ className: "pli-1"
512
+ }, t("copy label")), /* @__PURE__ */ React11.createElement(Icon, {
513
+ icon: "ph--copy--regular",
514
+ size
515
+ })), /* @__PURE__ */ React11.createElement("div", {
516
+ role: "none",
517
+ className: mx2("flex gap-1 items-center", !isCopied && inactiveLabelStyles)
518
+ }, /* @__PURE__ */ React11.createElement("span", {
519
+ className: "pli-1"
520
+ }, t("copy success label")), /* @__PURE__ */ React11.createElement(Icon, {
521
+ icon: "ph--check--regular",
522
+ size
523
+ })));
524
+ };
525
+ var CopyButtonIconOnly = ({ __scopeTooltip, value, classNames, size, variant, ...props }) => {
526
+ const { t } = useTranslation(osTranslations);
527
+ const { textValue, setTextValue } = useClipboard();
528
+ const isCopied = textValue === value;
529
+ const label = isCopied ? t("copy success label") : props.label ?? t("copy label");
530
+ const { onOpen } = useTooltipContext("CopyButton", __scopeTooltip);
531
+ return /* @__PURE__ */ React11.createElement(IconButton, {
532
+ iconOnly: true,
533
+ label,
534
+ icon: "ph--copy--regular",
535
+ size,
536
+ variant,
537
+ classNames: [
538
+ "inline-flex flex-col justify-center",
539
+ classNames
540
+ ],
541
+ onClick: () => setTextValue(value).then(onOpen),
542
+ "data-testid": "copy-invitation"
543
+ });
544
+ };
545
+
546
+ // src/components/Clipboard/index.ts
547
+ var Clipboard = {
548
+ Button: CopyButton,
549
+ IconButton: CopyButtonIconOnly,
550
+ Provider: ClipboardProvider
551
+ };
552
+
553
+ // src/components/Dialog/Dialog.tsx
554
+ import { createContext as createContext4 } from "@radix-ui/react-context";
555
+ import { DialogClose as DialogClosePrimitive, DialogContent as DialogContentPrimitive, DialogDescription as DialogDescriptionPrimitive, DialogOverlay as DialogOverlayPrimitive, DialogPortal as DialogPortalPrimitive, Root as DialogRootPrimitive, DialogTitle as DialogTitlePrimitive, DialogTrigger as DialogTriggerPrimitive } from "@radix-ui/react-dialog";
556
+ import React12, { forwardRef as forwardRef10 } from "react";
557
+ import { useTranslation as useTranslation2 } from "react-i18next";
558
+ import { osTranslations as osTranslations2 } from "@dxos/ui-theme";
559
+ var DialogRoot = (props) => /* @__PURE__ */ React12.createElement(ElevationProvider, {
560
+ elevation: "dialog"
561
+ }, /* @__PURE__ */ React12.createElement(DialogRootPrimitive, props));
562
+ var DialogTrigger = DialogTriggerPrimitive;
563
+ var DialogPortal = DialogPortalPrimitive;
564
+ var DIALOG_OVERLAY_NAME = "DialogOverlay";
565
+ var [OverlayLayoutProvider, useOverlayLayoutContext] = createContext4(DIALOG_OVERLAY_NAME, {});
566
+ var DialogOverlay = /* @__PURE__ */ forwardRef10(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
567
+ const { tx } = useThemeContext();
568
+ return /* @__PURE__ */ React12.createElement(DialogOverlayPrimitive, {
569
+ ...props,
570
+ className: tx("dialog.overlay", {}, classNames),
571
+ ref: forwardedRef,
572
+ "data-block-align": blockAlign
573
+ }, /* @__PURE__ */ React12.createElement(OverlayLayoutProvider, {
574
+ inOverlayLayout: true
575
+ }, children));
576
+ });
577
+ DialogOverlay.displayName = DIALOG_OVERLAY_NAME;
578
+ var DIALOG_CONTENT_NAME = "DialogContent";
579
+ var DialogContent = /* @__PURE__ */ forwardRef10(({ classNames, children, size, inOverlayLayout: propsInOverlayLayout, ...props }, forwardedRef) => {
580
+ const { tx } = useThemeContext();
581
+ const { inOverlayLayout } = useOverlayLayoutContext(DIALOG_CONTENT_NAME);
582
+ return /* @__PURE__ */ React12.createElement(DialogContentPrimitive, {
583
+ // NOTE: Radix warning unless set to undefined.
584
+ // https://www.radix-ui.com/primitives/docs/components/dialog#description
585
+ "aria-describedby": void 0,
586
+ ...props,
587
+ className: tx("dialog.content", {
588
+ inOverlayLayout: propsInOverlayLayout || inOverlayLayout,
589
+ size
590
+ }, classNames),
591
+ ref: forwardedRef
592
+ }, children);
593
+ });
594
+ DialogContent.displayName = DIALOG_CONTENT_NAME;
595
+ var DialogHeader = /* @__PURE__ */ forwardRef10(({ classNames, srOnly, ...props }, forwardedRef) => {
596
+ const { tx } = useThemeContext();
597
+ return /* @__PURE__ */ React12.createElement("div", {
598
+ ...props,
599
+ role: "header",
600
+ className: tx("dialog.header", {
601
+ srOnly
602
+ }, classNames),
603
+ ref: forwardedRef
604
+ });
605
+ });
606
+ var DialogBody = /* @__PURE__ */ forwardRef10(({ children, ...props }, forwardedRef) => {
607
+ const { tx } = useThemeContext();
608
+ return /* @__PURE__ */ React12.createElement("div", {
609
+ ...props,
610
+ className: tx("dialog.body"),
611
+ ref: forwardedRef
612
+ }, children);
613
+ });
614
+ var DialogTitle = /* @__PURE__ */ forwardRef10(({ classNames, srOnly, ...props }, forwardedRef) => {
615
+ const { tx } = useThemeContext();
616
+ return /* @__PURE__ */ React12.createElement(DialogTitlePrimitive, {
617
+ ...props,
618
+ className: tx("dialog.title", {
619
+ srOnly
620
+ }, classNames),
621
+ ref: forwardedRef
622
+ });
623
+ });
624
+ var DialogDescription = /* @__PURE__ */ forwardRef10(({ classNames, srOnly, ...props }, forwardedRef) => {
625
+ const { tx } = useThemeContext();
626
+ return /* @__PURE__ */ React12.createElement(DialogDescriptionPrimitive, {
627
+ ...props,
628
+ className: tx("dialog.description", {
629
+ srOnly
630
+ }, classNames),
631
+ ref: forwardedRef
632
+ });
633
+ });
634
+ var DialogActionBar = /* @__PURE__ */ forwardRef10(({ children, classNames, ...props }, forwardedRef) => {
635
+ const { tx } = useThemeContext();
636
+ return /* @__PURE__ */ React12.createElement("div", {
637
+ ...props,
638
+ className: tx("dialog.actionbar", {}, classNames),
639
+ ref: forwardedRef
640
+ }, children);
641
+ });
642
+ var DialogClose = DialogClosePrimitive;
643
+ var DialogCloseIconButton = /* @__PURE__ */ forwardRef10((props, forwardedRef) => {
644
+ const { t } = useTranslation2(osTranslations2);
645
+ return /* @__PURE__ */ React12.createElement(IconButton, {
646
+ ...props,
647
+ label: props.label ?? t("close dialog label"),
648
+ icon: "ph--x--regular",
649
+ iconOnly: true,
650
+ size: 4,
651
+ density: "fine",
652
+ variant: "ghost",
653
+ ref: forwardedRef
654
+ });
655
+ });
656
+ var Dialog = {
657
+ Root: DialogRoot,
658
+ Trigger: DialogTrigger,
659
+ Portal: DialogPortal,
660
+ Overlay: DialogOverlay,
661
+ Content: DialogContent,
662
+ Header: DialogHeader,
663
+ Body: DialogBody,
664
+ Title: DialogTitle,
665
+ Description: DialogDescription,
666
+ ActionBar: DialogActionBar,
667
+ Close: DialogClose,
668
+ CloseIconButton: DialogCloseIconButton
669
+ };
670
+
671
+ // src/components/Dialog/AlertDialog.tsx
672
+ import { AlertDialogAction as AlertDialogActionPrimitive, AlertDialogCancel as AlertDialogCancelPrimitive, AlertDialogContent as AlertDialogContentPrimitive, AlertDialogDescription as AlertDialogDescriptionPrimitive, AlertDialogOverlay as AlertDialogOverlayPrimitive, AlertDialogPortal as AlertDialogPortalPrimitive, Root as AlertDialogRootPrimitive, AlertDialogTitle as AlertDialogTitlePrimitive, AlertDialogTrigger as AlertDialogTriggerPrimitive } from "@radix-ui/react-alert-dialog";
673
+ import { createContext as createContext5 } from "@radix-ui/react-context";
674
+ import React13, { forwardRef as forwardRef11 } from "react";
675
+ var AlertDialogRoot = (props) => /* @__PURE__ */ React13.createElement(ElevationProvider, {
676
+ elevation: "dialog"
677
+ }, /* @__PURE__ */ React13.createElement(AlertDialogRootPrimitive, props));
678
+ var AlertDialogTrigger = AlertDialogTriggerPrimitive;
679
+ var AlertDialogPortal = AlertDialogPortalPrimitive;
680
+ var AlertDialogCancel = AlertDialogCancelPrimitive;
681
+ var AlertDialogAction = AlertDialogActionPrimitive;
682
+ var AlertDialogTitle = /* @__PURE__ */ forwardRef11(({ classNames, srOnly, ...props }, forwardedRef) => {
683
+ const { tx } = useThemeContext();
684
+ return /* @__PURE__ */ React13.createElement(AlertDialogTitlePrimitive, {
685
+ ...props,
686
+ className: tx("dialog.title", {
687
+ srOnly
688
+ }, classNames),
689
+ ref: forwardedRef
690
+ });
691
+ });
692
+ var AlertDialogDescription = /* @__PURE__ */ forwardRef11(({ classNames, srOnly, ...props }, forwardedRef) => {
693
+ const { tx } = useThemeContext();
694
+ return /* @__PURE__ */ React13.createElement(AlertDialogDescriptionPrimitive, {
695
+ ...props,
696
+ className: tx("dialog.description", {
697
+ srOnly
698
+ }, classNames),
699
+ ref: forwardedRef
700
+ });
701
+ });
702
+ var ALERT_DIALOG_OVERLAY_NAME = "AlertDialogOverlay";
703
+ var ALERT_DIALOG_CONTENT_NAME = "AlertDialogContent";
704
+ var [OverlayLayoutProvider2, useOverlayLayoutContext2] = createContext5(ALERT_DIALOG_OVERLAY_NAME, {
705
+ inOverlayLayout: false
706
+ });
707
+ var AlertDialogOverlay = /* @__PURE__ */ forwardRef11(({ classNames, children, blockAlign, ...props }, forwardedRef) => {
708
+ const { tx } = useThemeContext();
709
+ return /* @__PURE__ */ React13.createElement(AlertDialogOverlayPrimitive, {
710
+ ...props,
711
+ className: tx("dialog.overlay", {}, classNames, "data-[block-align=start]:justify-center", "data-[block-align=start]:items-start", "data-[block-align=center]:place-content-center"),
712
+ ref: forwardedRef,
713
+ "data-block-align": blockAlign
714
+ }, /* @__PURE__ */ React13.createElement(OverlayLayoutProvider2, {
715
+ inOverlayLayout: true
716
+ }, children));
717
+ });
718
+ AlertDialogOverlay.displayName = ALERT_DIALOG_OVERLAY_NAME;
719
+ var AlertDialogContent = /* @__PURE__ */ forwardRef11(({ classNames, children, ...props }, forwardedRef) => {
720
+ const { tx } = useThemeContext();
721
+ const { inOverlayLayout } = useOverlayLayoutContext2(ALERT_DIALOG_CONTENT_NAME);
722
+ return /* @__PURE__ */ React13.createElement(AlertDialogContentPrimitive, {
723
+ ...props,
724
+ className: tx("dialog.content", {
725
+ inOverlayLayout
726
+ }, classNames),
727
+ ref: forwardedRef
728
+ }, children);
729
+ });
730
+ AlertDialogContent.displayName = ALERT_DIALOG_CONTENT_NAME;
731
+ var AlertDialog = {
732
+ Root: AlertDialogRoot,
733
+ Trigger: AlertDialogTrigger,
734
+ Portal: AlertDialogPortal,
735
+ Overlay: AlertDialogOverlay,
736
+ Content: AlertDialogContent,
737
+ Title: AlertDialogTitle,
738
+ Description: AlertDialogDescription,
739
+ Cancel: AlertDialogCancel,
740
+ Action: AlertDialogAction
741
+ };
742
+
743
+ // src/components/Input/Input.tsx
744
+ import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
745
+ import { useControllableState } from "@radix-ui/react-use-controllable-state";
746
+ import React14, { forwardRef as forwardRef12, useCallback as useCallback4 } from "react";
747
+ import { DescriptionAndValidation as DescriptionAndValidationPrimitive, Description as DescriptionPrimitive, INPUT_NAME, InputRoot, Label as LabelPrimitive, PinInput as PinInputPrimitive, TextArea as TextAreaPrimitive, TextInput as TextInputPrimitive, Validation as ValidationPrimitive, useInputContext } from "@dxos/react-input";
748
+ import { mx as mx3 } from "@dxos/ui-theme";
749
+ var Label = /* @__PURE__ */ forwardRef12(({ srOnly, classNames, children, ...props }, forwardedRef) => {
750
+ const { tx } = useThemeContext();
751
+ return /* @__PURE__ */ React14.createElement(LabelPrimitive, {
752
+ ...props,
753
+ className: tx("input.label", {
754
+ srOnly
755
+ }, classNames),
756
+ ref: forwardedRef
757
+ }, children);
758
+ });
759
+ var Description = /* @__PURE__ */ forwardRef12(({ srOnly, classNames, children, ...props }, forwardedRef) => {
760
+ const { tx } = useThemeContext();
761
+ return /* @__PURE__ */ React14.createElement(DescriptionPrimitive, {
762
+ ...props,
763
+ className: tx("input.description", {
764
+ srOnly
765
+ }, classNames),
766
+ ref: forwardedRef
767
+ }, children);
768
+ });
769
+ var Validation = /* @__PURE__ */ forwardRef12(({ __inputScope, srOnly, classNames, children, ...props }, forwardedRef) => {
770
+ const { tx } = useThemeContext();
771
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
772
+ return /* @__PURE__ */ React14.createElement(ValidationPrimitive, {
773
+ ...props,
774
+ className: tx("input.validation", {
775
+ srOnly,
776
+ validationValence
777
+ }, classNames),
778
+ ref: forwardedRef
779
+ }, children);
780
+ });
781
+ var DescriptionAndValidation = /* @__PURE__ */ forwardRef12(({ srOnly, classNames, children, ...props }, forwardedRef) => {
782
+ const { tx } = useThemeContext();
783
+ return /* @__PURE__ */ React14.createElement(DescriptionAndValidationPrimitive, {
784
+ ...props,
785
+ className: tx("input.descriptionAndValidation", {
786
+ srOnly
787
+ }, classNames),
788
+ ref: forwardedRef
789
+ }, children);
790
+ });
791
+ var PinInput = /* @__PURE__ */ forwardRef12(({ density: propsDensity, elevation: propsElevation, segmentClassName: propsSegmentClassName, inputClassName, ...props }, forwardedRef) => {
792
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
793
+ const { tx } = useThemeContext();
794
+ const density = useDensityContext(propsDensity);
795
+ const elevation = useElevationContext(propsElevation);
796
+ const segmentClassName = useCallback4(({ focused, validationValence }) => tx("input.input", {
797
+ variant: "static",
798
+ focused,
799
+ disabled: props.disabled,
800
+ density,
801
+ elevation,
802
+ validationValence
803
+ }, propsSegmentClassName) || "", [
804
+ tx,
805
+ props.disabled,
806
+ elevation,
807
+ propsElevation,
808
+ density
809
+ ]);
810
+ return /* @__PURE__ */ React14.createElement(PinInputPrimitive, {
811
+ ...props,
812
+ segmentClassName,
813
+ ...props.autoFocus && !hasIosKeyboard2 && {
814
+ autoFocus: true
815
+ },
816
+ inputClassName: tx("input.inputWithSegments", {
817
+ disabled: props.disabled
818
+ }, inputClassName) || "",
819
+ ref: forwardedRef
820
+ });
821
+ });
822
+ var TextInput = /* @__PURE__ */ forwardRef12(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, noAutoFill, ...props }, forwardedRef) => {
823
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
824
+ const { tx } = useThemeContext();
825
+ const density = useDensityContext(propsDensity);
826
+ const elevation = useElevationContext(propsElevation);
827
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
828
+ return /* @__PURE__ */ React14.createElement(TextInputPrimitive, {
829
+ ...props,
830
+ "data-1p-ignore": noAutoFill,
831
+ className: tx("input.input", {
832
+ variant,
833
+ disabled: props.disabled,
834
+ density,
835
+ elevation,
836
+ validationValence
837
+ }, classNames),
838
+ ...props.autoFocus && !hasIosKeyboard2 && {
839
+ autoFocus: true
840
+ },
841
+ ref: forwardedRef
842
+ });
843
+ });
844
+ var TextArea = /* @__PURE__ */ forwardRef12(({ __inputScope, classNames, density: propsDensity, elevation: propsElevation, variant, ...props }, forwardedRef) => {
845
+ const { hasIosKeyboard: hasIosKeyboard2 } = useThemeContext();
846
+ const { tx } = useThemeContext();
847
+ const density = useDensityContext(propsDensity);
848
+ const elevation = useElevationContext(propsElevation);
849
+ const { validationValence } = useInputContext(INPUT_NAME, __inputScope);
850
+ return /* @__PURE__ */ React14.createElement(TextAreaPrimitive, {
851
+ ...props,
852
+ className: tx("input.input", {
853
+ variant,
854
+ disabled: props.disabled,
855
+ density,
856
+ elevation,
857
+ validationValence
858
+ }, "-mbe-labelSpacingBlock", classNames),
859
+ ...props.autoFocus && !hasIosKeyboard2 && {
860
+ autoFocus: true
861
+ },
862
+ ref: forwardedRef
863
+ });
864
+ });
865
+ var Checkbox = /* @__PURE__ */ forwardRef12(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, classNames, ...props }, forwardedRef) => {
866
+ const [checked, onCheckedChange] = useControllableState({
867
+ prop: propsChecked,
868
+ defaultProp: propsDefaultChecked,
869
+ onChange: propsOnCheckedChange
870
+ });
871
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
872
+ const { tx } = useThemeContext();
873
+ return /* @__PURE__ */ React14.createElement(CheckboxPrimitive, {
874
+ ...props,
875
+ checked,
876
+ onCheckedChange,
877
+ id,
878
+ "aria-describedby": descriptionId,
879
+ ...validationValence === "error" && {
880
+ "aria-invalid": "true",
881
+ "aria-errormessage": errorMessageId
882
+ },
883
+ className: tx("input.checkbox", {
884
+ size
885
+ }, "shrink-0", classNames),
886
+ ref: forwardedRef
887
+ }, /* @__PURE__ */ React14.createElement(Icon, {
888
+ icon: checked === "indeterminate" ? "ph--minus--regular" : "ph--check--regular",
889
+ classNames: tx("input.checkboxIndicator", {
890
+ size,
891
+ checked
892
+ })
893
+ }));
894
+ });
895
+ var Switch = /* @__PURE__ */ forwardRef12(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, classNames, ...props }, forwardedRef) => {
896
+ const [checked, onCheckedChange] = useControllableState({
897
+ prop: propsChecked,
898
+ defaultProp: propsDefaultChecked ?? false,
899
+ onChange: propsOnCheckedChange
900
+ });
901
+ const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
902
+ return /* @__PURE__ */ React14.createElement("input", {
903
+ type: "checkbox",
904
+ className: mx3("dx-checkbox--switch dx-focus-ring", classNames),
905
+ checked,
906
+ onChange: (event) => {
907
+ onCheckedChange(event.target.checked);
908
+ },
909
+ id,
910
+ "aria-describedby": descriptionId,
911
+ ...props,
912
+ ...validationValence === "error" && {
913
+ "aria-invalid": "true",
914
+ "aria-errormessage": errorMessageId
915
+ },
916
+ ref: forwardedRef
917
+ });
918
+ });
919
+ var Input = {
920
+ Root: InputRoot,
921
+ PinInput,
922
+ TextInput,
923
+ TextArea,
924
+ Checkbox,
925
+ Switch,
926
+ Label,
927
+ Description,
928
+ Validation,
929
+ DescriptionAndValidation
930
+ };
931
+
932
+ // src/components/List/List.tsx
933
+ import { Slot as Slot6 } from "@radix-ui/react-slot";
934
+ import React16, { forwardRef as forwardRef13 } from "react";
935
+ import { LIST_ITEM_NAME, LIST_NAME, ListItemCollapsibleContent, List as ListPrimitive, ListItem as ListPrimitiveItem, ListItemHeading as ListPrimitiveItemHeading, ListItemOpenTrigger as ListPrimitiveItemOpenTrigger, useListContext, useListItemContext } from "@dxos/react-list";
936
+
937
+ // src/components/List/ListDropIndicator.tsx
938
+ import React15 from "react";
939
+ var edgeToOrientationMap = {
940
+ top: "horizontal",
941
+ bottom: "horizontal",
942
+ left: "vertical",
943
+ right: "vertical"
944
+ };
945
+ var orientationStyles = {
946
+ horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
947
+ vertical: "is-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
948
+ };
949
+ var edgeStyles = {
950
+ top: "top-[--line-offset] before:top-[--offset-terminal]",
951
+ right: "right-[--line-offset] before:right-[--offset-terminal]",
952
+ bottom: "bottom-[--line-offset] before:bottom-[--offset-terminal]",
953
+ left: "left-[--line-offset] before:left-[--offset-terminal]"
954
+ };
955
+ var strokeSize = 2;
956
+ var terminalSize = 8;
957
+ var offsetToAlignTerminalWithLine = (strokeSize - terminalSize) / 2;
958
+ var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineInset - terminalSize }) => {
959
+ const orientation = edgeToOrientationMap[edge];
960
+ return /* @__PURE__ */ React15.createElement("div", {
961
+ role: "none",
962
+ style: {
963
+ "--line-thickness": `${strokeSize}px`,
964
+ "--line-offset": `calc(-0.5 * (${gap}px + ${strokeSize}px))`,
965
+ "--line-inset": `${lineInset}px`,
966
+ "--terminal-size": `${terminalSize}px`,
967
+ "--terminal-radius": `${terminalSize / 2}px`,
968
+ "--terminal-inset": `${terminalInset}px`,
969
+ "--offset-terminal": `${offsetToAlignTerminalWithLine}px`
970
+ },
971
+ className: `absolute z-10 pointer-events-none bg-accentSurface before:content-[''] before:w-[--terminal-size] before:h-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles[orientation]} ${edgeStyles[edge]}`
972
+ });
973
+ };
974
+
975
+ // src/components/List/List.tsx
976
+ var List = /* @__PURE__ */ forwardRef13(({ classNames, children, ...props }, forwardedRef) => {
977
+ const { tx } = useThemeContext();
978
+ const density = useDensityContext(props.density);
979
+ return /* @__PURE__ */ React16.createElement(DensityProvider, {
980
+ density
981
+ }, /* @__PURE__ */ React16.createElement(ListPrimitive, {
982
+ ...props,
983
+ className: tx("list.root", {}, classNames),
984
+ ref: forwardedRef
985
+ }, children));
986
+ });
987
+ var ListItemEndcap = /* @__PURE__ */ forwardRef13(({ children, classNames, asChild, ...props }, forwardedRef) => {
988
+ const Root8 = asChild ? Slot6 : "div";
989
+ const density = useDensityContext();
990
+ const { tx } = useThemeContext();
991
+ return /* @__PURE__ */ React16.createElement(Root8, {
992
+ ...!asChild && {
993
+ role: "none"
994
+ },
995
+ ...props,
996
+ className: tx("list.item.endcap", {
997
+ density
998
+ }, classNames),
999
+ ref: forwardedRef
1000
+ }, children);
1001
+ });
1002
+ var MockListItemOpenTrigger = ({ classNames, ...props }) => {
1003
+ const density = useDensityContext();
1004
+ const { tx } = useThemeContext();
1005
+ return /* @__PURE__ */ React16.createElement("div", {
1006
+ role: "none",
1007
+ ...props,
1008
+ className: tx("list.item.openTrigger", {
1009
+ density
1010
+ }, classNames)
1011
+ });
1012
+ };
1013
+ var ListItemHeading = /* @__PURE__ */ forwardRef13(({ children, classNames, ...props }, forwardedRef) => {
1014
+ const { tx } = useThemeContext();
1015
+ const density = useDensityContext();
1016
+ return /* @__PURE__ */ React16.createElement(ListPrimitiveItemHeading, {
1017
+ ...props,
1018
+ className: tx("list.item.heading", {
1019
+ density
1020
+ }, classNames),
1021
+ ref: forwardedRef
1022
+ }, children);
1023
+ });
1024
+ var ListItemOpenTrigger = /* @__PURE__ */ forwardRef13(({ __listItemScope, classNames, children, ...props }, forwardedRef) => {
1025
+ const { tx } = useThemeContext();
1026
+ const density = useDensityContext();
1027
+ const { open } = useListItemContext(LIST_ITEM_NAME, __listItemScope);
1028
+ return /* @__PURE__ */ React16.createElement(ListPrimitiveItemOpenTrigger, {
1029
+ ...props,
1030
+ className: tx("list.item.openTrigger", {
1031
+ density
1032
+ }, classNames),
1033
+ ref: forwardedRef
1034
+ }, children || /* @__PURE__ */ React16.createElement(Icon, {
1035
+ size: 3,
1036
+ icon: open ? "ph--caret-down--bold" : "ph--caret-right--bold",
1037
+ classNames: tx("list.item.openTriggerIcon", {})
1038
+ }));
1039
+ });
1040
+ var ListItemRoot = /* @__PURE__ */ forwardRef13(({ classNames, children, ...props }, forwardedRef) => {
1041
+ const { tx } = useThemeContext();
1042
+ const density = useDensityContext();
1043
+ return /* @__PURE__ */ React16.createElement(ListPrimitiveItem, {
1044
+ ...props,
1045
+ className: tx("list.item.root", {
1046
+ density,
1047
+ collapsible: props.collapsible
1048
+ }, classNames),
1049
+ ref: forwardedRef
1050
+ }, children);
1051
+ });
1052
+ var ListItem = {
1053
+ Root: ListItemRoot,
1054
+ Endcap: ListItemEndcap,
1055
+ Heading: ListItemHeading,
1056
+ OpenTrigger: ListItemOpenTrigger,
1057
+ CollapsibleContent: ListItemCollapsibleContent,
1058
+ MockOpenTrigger: MockListItemOpenTrigger,
1059
+ DropIndicator: ListDropIndicator
1060
+ };
1061
+
1062
+ // src/components/List/Tree.tsx
1063
+ import React18, { forwardRef as forwardRef14 } from "react";
1064
+
1065
+ // src/components/List/TreeDropIndicator.tsx
1066
+ import React17 from "react";
1067
+ var edgeToOrientationMap2 = {
1068
+ "reorder-above": "sibling",
1069
+ "reorder-below": "sibling",
1070
+ "make-child": "child",
1071
+ reparent: "child"
1072
+ };
1073
+ var orientationStyles2 = {
1074
+ // TODO(wittjosiah): Stop using left/right here.
1075
+ sibling: "bs-[--line-thickness] left-[--horizontal-indent] right-0 bg-accentSurface before:left-[--negative-terminal-size]",
1076
+ child: "is-full block-start-0 block-end-0 border-[length:--line-thickness] before:invisible"
1077
+ };
1078
+ var instructionStyles = {
1079
+ "reorder-above": "block-start-[--line-offset] before:block-start-[--offset-terminal]",
1080
+ "reorder-below": "block-end-[--line-offset] before:block-end-[--offset-terminal]",
1081
+ "make-child": "border-accentSurface",
1082
+ // TODO(wittjosiah): This is not occurring in the current implementation.
1083
+ reparent: ""
1084
+ };
1085
+ var strokeSize2 = 2;
1086
+ var terminalSize2 = 8;
1087
+ var offsetToAlignTerminalWithLine2 = (strokeSize2 - terminalSize2) / 2;
1088
+ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
1089
+ const lineOffset = `calc(-0.5 * (${gap}px + ${strokeSize2}px))`;
1090
+ const isBlocked = instruction.type === "instruction-blocked";
1091
+ const desiredInstruction = isBlocked ? instruction.desired : instruction;
1092
+ const orientation = edgeToOrientationMap2[desiredInstruction.type];
1093
+ if (isBlocked) {
1094
+ return null;
1095
+ }
1096
+ return /* @__PURE__ */ React17.createElement("div", {
1097
+ style: {
1098
+ "--line-thickness": `${strokeSize2}px`,
1099
+ "--line-offset": `${lineOffset}`,
1100
+ "--terminal-size": `${terminalSize2}px`,
1101
+ "--terminal-radius": `${terminalSize2 / 2}px`,
1102
+ "--negative-terminal-size": `-${terminalSize2}px`,
1103
+ "--offset-terminal": `${offsetToAlignTerminalWithLine2}px`,
1104
+ "--horizontal-indent": `${desiredInstruction.currentLevel * desiredInstruction.indentPerLevel + 4}px`
1105
+ },
1106
+ className: `absolute z-10 pointer-events-none before:is-[--terminal-size] before:bs-[--terminal-size] box-border before:absolute before:border-[length:--line-thickness] before:border-solid before:border-accentSurface before:rounded-full ${orientationStyles2[orientation]} ${instructionStyles[desiredInstruction.type]}`
1107
+ });
1108
+ };
1109
+
1110
+ // src/components/List/Tree.tsx
1111
+ var TreeRoot = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1112
+ return /* @__PURE__ */ React18.createElement(List, {
1113
+ ...props,
1114
+ ref: forwardedRef
1115
+ });
1116
+ });
1117
+ var TreeBranch = /* @__PURE__ */ forwardRef14(({ __listScope, ...props }, forwardedRef) => {
1118
+ const { headingId } = useListItemContext(LIST_ITEM_NAME, __listScope);
1119
+ return /* @__PURE__ */ React18.createElement(List, {
1120
+ ...props,
1121
+ "aria-labelledby": headingId,
1122
+ ref: forwardedRef
1123
+ });
1124
+ });
1125
+ var TreeItemRoot = /* @__PURE__ */ forwardRef14((props, forwardedRef) => {
1126
+ return /* @__PURE__ */ React18.createElement(ListItem.Root, {
1127
+ role: "treeitem",
1128
+ ...props,
1129
+ ref: forwardedRef
1130
+ });
1131
+ });
1132
+ var TreeItemHeading = ListItem.Heading;
1133
+ var TreeItemOpenTrigger = ListItem.OpenTrigger;
1134
+ var MockTreeItemOpenTrigger = ListItem.MockOpenTrigger;
1135
+ var TreeItemBody = ListItem.CollapsibleContent;
1136
+ var Tree = {
1137
+ Root: TreeRoot,
1138
+ Branch: TreeBranch
1139
+ };
1140
+ var TreeItem = {
1141
+ Root: TreeItemRoot,
1142
+ Heading: TreeItemHeading,
1143
+ Body: TreeItemBody,
1144
+ OpenTrigger: TreeItemOpenTrigger,
1145
+ MockOpenTrigger: MockTreeItemOpenTrigger,
1146
+ DropIndicator: TreeDropIndicator
1147
+ };
1148
+
1149
+ // src/components/List/Treegrid.tsx
1150
+ import { useFocusFinders } from "@fluentui/react-tabster";
1151
+ import { createContextScope } from "@radix-ui/react-context";
1152
+ import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
1153
+ import { Slot as Slot7 } from "@radix-ui/react-slot";
1154
+ import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1155
+ import React19, { forwardRef as forwardRef15, useCallback as useCallback5 } from "react";
1156
+ var TREEGRID_ROW_NAME = "TreegridRow";
1157
+ var [createTreegridRowContext, createTreegridRowScope] = createContextScope(TREEGRID_ROW_NAME, []);
1158
+ var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
1159
+ var PATH_SEPARATOR = "~";
1160
+ var PARENT_OF_SEPARATOR = " ";
1161
+ var TreegridRoot = /* @__PURE__ */ forwardRef15(({ asChild, classNames, children, style, gridTemplateColumns, ...props }, forwardedRef) => {
1162
+ const { tx } = useThemeContext();
1163
+ const Root8 = asChild ? Slot7 : Primitive6.div;
1164
+ const { findFirstFocusable } = useFocusFinders();
1165
+ const handleKeyDown = useCallback5((event) => {
1166
+ switch (event.key) {
1167
+ case "ArrowDown":
1168
+ case "ArrowUp": {
1169
+ const direction = event.key === "ArrowDown" ? "down" : "up";
1170
+ const target = event.target;
1171
+ const ancestorWithArrowKeys = target.closest(`[data-arrow-keys*="${direction}"], [data-arrow-keys="all"]`);
1172
+ if (!ancestorWithArrowKeys) {
1173
+ const currentRow = target.closest('[role="row"]');
1174
+ if (currentRow) {
1175
+ const treegrid = currentRow.closest('[role="treegrid"]');
1176
+ if (treegrid) {
1177
+ const rows = Array.from(treegrid.querySelectorAll('[role="row"]'));
1178
+ const currentIndex = rows.indexOf(currentRow);
1179
+ const nextIndex = direction === "down" ? currentIndex + 1 : currentIndex - 1;
1180
+ const targetRow = rows[nextIndex];
1181
+ if (targetRow) {
1182
+ const firstFocusable = findFirstFocusable(targetRow);
1183
+ if (firstFocusable) {
1184
+ event.preventDefault();
1185
+ firstFocusable.focus();
1186
+ }
1187
+ }
1188
+ }
1189
+ }
1190
+ }
1191
+ break;
1192
+ }
1193
+ }
1194
+ props.onKeyDown?.(event);
1195
+ }, [
1196
+ findFirstFocusable
1197
+ ]);
1198
+ return /* @__PURE__ */ React19.createElement(Root8, {
1199
+ role: "treegrid",
1200
+ ...props,
1201
+ className: tx("treegrid.root", {}, classNames),
1202
+ style: {
1203
+ ...style,
1204
+ gridTemplateColumns
1205
+ },
1206
+ onKeyDown: handleKeyDown,
1207
+ ref: forwardedRef
1208
+ }, children);
1209
+ });
1210
+ var TreegridRow = /* @__PURE__ */ forwardRef15(({ __treegridRowScope, asChild, classNames, children, id, parentOf, open: propsOpen, defaultOpen, onOpenChange: propsOnOpenChange, ...props }, forwardedRef) => {
1211
+ const { tx } = useThemeContext();
1212
+ const Root8 = asChild ? Slot7 : Primitive6.div;
1213
+ const pathParts = id.split(PATH_SEPARATOR);
1214
+ const level = pathParts.length - 1;
1215
+ const [open, onOpenChange] = useControllableState2({
1216
+ prop: propsOpen,
1217
+ onChange: propsOnOpenChange,
1218
+ defaultProp: defaultOpen
1219
+ });
1220
+ return /* @__PURE__ */ React19.createElement(TreegridRowProvider, {
1221
+ open,
1222
+ onOpenChange,
1223
+ scope: __treegridRowScope
1224
+ }, /* @__PURE__ */ React19.createElement(Root8, {
1225
+ role: "row",
1226
+ "aria-level": level,
1227
+ className: tx("treegrid.row", {
1228
+ level
1229
+ }, classNames),
1230
+ ...parentOf && {
1231
+ "aria-expanded": open,
1232
+ "aria-owns": parentOf
1233
+ },
1234
+ ...props,
1235
+ id,
1236
+ ref: forwardedRef
1237
+ }, children));
1238
+ });
1239
+ var TreegridCell = /* @__PURE__ */ forwardRef15(({ classNames, children, indent, ...props }, forwardedRef) => {
1240
+ const { tx } = useThemeContext();
1241
+ return /* @__PURE__ */ React19.createElement("div", {
1242
+ role: "gridcell",
1243
+ className: tx("treegrid.cell", {
1244
+ indent
1245
+ }, classNames),
1246
+ ...props,
1247
+ ref: forwardedRef
1248
+ }, children);
1249
+ });
1250
+ var Treegrid = {
1251
+ Root: TreegridRoot,
1252
+ Row: TreegridRow,
1253
+ Cell: TreegridCell,
1254
+ PARENT_OF_SEPARATOR,
1255
+ PATH_SEPARATOR,
1256
+ createTreegridRowScope,
1257
+ useTreegridRowContext
1258
+ };
1259
+
1260
+ // src/components/Main/Main.tsx
1261
+ import { useFocusableGroup } from "@fluentui/react-tabster";
1262
+ import { createContext as createContext6 } from "@radix-ui/react-context";
1263
+ import { DialogContent as DialogContent2, Root as DialogRoot2, DialogTitle as DialogTitle2 } from "@radix-ui/react-dialog";
1264
+ import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
1265
+ import { Slot as Slot8 } from "@radix-ui/react-slot";
1266
+ import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
1267
+ import React20, { forwardRef as forwardRef16, useCallback as useCallback7, useEffect as useEffect3, useRef, useState as useState5 } from "react";
1268
+ import { addEventListener } from "@dxos/async";
1269
+ import { log } from "@dxos/log";
1270
+ import { useForwardedRef, useMediaQuery } from "@dxos/react-hooks";
1271
+
1272
+ // src/components/Main/useSwipeToDismiss.ts
1273
+ import { useCallback as useCallback6, useEffect as useEffect2, useState as useState4 } from "react";
1274
+ var useSwipeToDismiss = (ref, {
1275
+ onDismiss,
1276
+ dismissThreshold = 64,
1277
+ debounceThreshold = 8,
1278
+ offset = 0
1279
+ /* side = 'inline-start' */
1280
+ }) => {
1281
+ const $root = ref.current;
1282
+ const [motionState, setMotionState] = useState4(0);
1283
+ const [gestureStartX, setGestureStartX] = useState4(0);
1284
+ const setIdle = useCallback6(() => {
1285
+ setMotionState(0);
1286
+ $root?.style.removeProperty("inset-inline-start");
1287
+ $root?.style.setProperty("transition-duration", "200ms");
1288
+ }, [
1289
+ $root
1290
+ ]);
1291
+ const setFollowing = useCallback6(() => {
1292
+ setMotionState(2);
1293
+ $root?.style.setProperty("transition-duration", "0ms");
1294
+ }, [
1295
+ $root
1296
+ ]);
1297
+ const handlePointerDown = useCallback6(({ screenX }) => {
1298
+ if (motionState === 0) {
1299
+ setMotionState(1);
1300
+ setGestureStartX(screenX);
1301
+ }
1302
+ }, [
1303
+ motionState
1304
+ ]);
1305
+ const handlePointerMove = useCallback6(({ screenX }) => {
1306
+ if ($root) {
1307
+ const delta = Math.min(screenX - gestureStartX, 0);
1308
+ switch (motionState) {
1309
+ case 2:
1310
+ if (Math.abs(delta) > dismissThreshold) {
1311
+ setIdle();
1312
+ onDismiss?.();
1313
+ } else {
1314
+ $root.style.setProperty("inset-inline-start", `${offset + delta}px`);
1315
+ }
1316
+ break;
1317
+ case 1:
1318
+ if (Math.abs(delta) > debounceThreshold) {
1319
+ setFollowing();
1320
+ }
1321
+ break;
1322
+ }
1323
+ }
1324
+ }, [
1325
+ $root,
1326
+ motionState,
1327
+ gestureStartX
1328
+ ]);
1329
+ const handlePointerUp = useCallback6(() => {
1330
+ setIdle();
1331
+ }, [
1332
+ setIdle
1333
+ ]);
1334
+ useEffect2(() => {
1335
+ $root?.addEventListener("pointerdown", handlePointerDown);
1336
+ return () => {
1337
+ $root?.removeEventListener("pointerdown", handlePointerDown);
1338
+ };
1339
+ }, [
1340
+ $root,
1341
+ handlePointerDown
1342
+ ]);
1343
+ useEffect2(() => {
1344
+ $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
1345
+ return () => {
1346
+ document.documentElement.removeEventListener("pointermove", handlePointerMove);
1347
+ };
1348
+ }, [
1349
+ $root,
1350
+ handlePointerMove
1351
+ ]);
1352
+ useEffect2(() => {
1353
+ $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
1354
+ return () => {
1355
+ document.documentElement.removeEventListener("pointerup", handlePointerUp);
1356
+ };
1357
+ }, [
1358
+ $root,
1359
+ handlePointerUp
1360
+ ]);
1361
+ };
1362
+
1363
+ // src/components/Main/Main.tsx
1364
+ var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
1365
+ var MAIN_NAME = "Main";
1366
+ var MAIN_ROOT_NAME = "MainRoot";
1367
+ var MAIN_OVERLAY_NAME = "MainOverlay";
1368
+ var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
1369
+ var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
1370
+ var handleOpenAutoFocus = (event) => {
1371
+ !document.body.hasAttribute("data-is-keyboard") && event.preventDefault();
1372
+ };
1373
+ var landmarkAttr = "data-main-landmark";
1374
+ var useLandmarkMover = (propsOnKeyDown, landmark) => {
1375
+ const handleKeyDown = useCallback7((event) => {
1376
+ const target = event.target;
1377
+ if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
1378
+ event.preventDefault();
1379
+ const landmarks = Array.from(document.querySelectorAll(`[${landmarkAttr}]:not([inert])`)).map((el) => el.hasAttribute(landmarkAttr) ? parseInt(el.getAttribute(landmarkAttr)) : NaN).sort();
1380
+ const l = landmarks.length;
1381
+ const cursor = landmarks.indexOf(parseInt(target.getAttribute(landmarkAttr)));
1382
+ const nextLandmark = landmarks[(cursor + l + (event.getModifierState("Shift") ? -1 : 1)) % l];
1383
+ document.querySelector(`[${landmarkAttr}="${nextLandmark}"]`)?.focus();
1384
+ }
1385
+ propsOnKeyDown?.(event);
1386
+ }, [
1387
+ propsOnKeyDown
1388
+ ]);
1389
+ const focusableGroupAttrs = useFocusableGroup({
1390
+ tabBehavior: "limited",
1391
+ ignoreDefaultKeydown: {
1392
+ Tab: true
1393
+ }
1394
+ });
1395
+ return {
1396
+ [landmarkAttr]: landmark,
1397
+ tabIndex: 0,
1398
+ onKeyDown: handleKeyDown,
1399
+ ...focusableGroupAttrs
1400
+ };
1401
+ };
1402
+ var [MainProvider, useMainContext] = createContext6(MAIN_NAME, {
1403
+ resizing: false,
1404
+ navigationSidebarState: "closed",
1405
+ setNavigationSidebarState: (_nextState) => {
1406
+ log.warn("Not initialized", void 0, {
1407
+ F: __dxlog_file,
1408
+ L: 111,
1409
+ S: void 0,
1410
+ C: (f, a) => f(...a)
1411
+ });
1412
+ },
1413
+ complementarySidebarState: "closed",
1414
+ setComplementarySidebarState: (_nextState) => {
1415
+ log.warn("Not initialized", void 0, {
1416
+ F: __dxlog_file,
1417
+ L: 116,
1418
+ S: void 0,
1419
+ C: (f, a) => f(...a)
1420
+ });
1421
+ }
1422
+ });
1423
+ var useSidebars = (consumerName) => {
1424
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(consumerName);
1425
+ return {
1426
+ navigationSidebarState,
1427
+ setNavigationSidebarState,
1428
+ toggleNavigationSidebar: useCallback7(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
1429
+ navigationSidebarState,
1430
+ setNavigationSidebarState
1431
+ ]),
1432
+ openNavigationSidebar: useCallback7(() => setNavigationSidebarState("expanded"), []),
1433
+ collapseNavigationSidebar: useCallback7(() => setNavigationSidebarState("collapsed"), []),
1434
+ closeNavigationSidebar: useCallback7(() => setNavigationSidebarState("closed"), []),
1435
+ complementarySidebarState,
1436
+ setComplementarySidebarState,
1437
+ toggleComplementarySidebar: useCallback7(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
1438
+ complementarySidebarState,
1439
+ setComplementarySidebarState
1440
+ ]),
1441
+ openComplementarySidebar: useCallback7(() => setComplementarySidebarState("expanded"), []),
1442
+ collapseComplementarySidebar: useCallback7(() => setComplementarySidebarState("collapsed"), []),
1443
+ closeComplementarySidebar: useCallback7(() => setComplementarySidebarState("closed"), [])
1444
+ };
1445
+ };
1446
+ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState = "closed", onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState = "closed", onComplementarySidebarStateChange, children, ...props }) => {
1447
+ const [isLg] = useMediaQuery("lg");
1448
+ const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = useControllableState3({
1449
+ prop: propsNavigationSidebarState,
1450
+ defaultProp: defaultNavigationSidebarState,
1451
+ onChange: onNavigationSidebarStateChange
1452
+ });
1453
+ const [complementarySidebarState = isLg ? "expanded" : "collapsed", setComplementarySidebarState] = useControllableState3({
1454
+ prop: propsComplementarySidebarState,
1455
+ defaultProp: defaultComplementarySidebarState,
1456
+ onChange: onComplementarySidebarStateChange
1457
+ });
1458
+ const [resizing, setResizing] = useState5(false);
1459
+ const resizeInterval = useRef(null);
1460
+ useEffect3(() => addEventListener(window, "resize", () => {
1461
+ setResizing(true);
1462
+ if (resizeInterval.current) {
1463
+ clearTimeout(resizeInterval.current);
1464
+ }
1465
+ resizeInterval.current = setTimeout(() => {
1466
+ setResizing(false);
1467
+ resizeInterval.current = null;
1468
+ }, 3e3);
1469
+ }), []);
1470
+ return /* @__PURE__ */ React20.createElement(MainProvider, {
1471
+ ...props,
1472
+ navigationSidebarState,
1473
+ setNavigationSidebarState,
1474
+ complementarySidebarState,
1475
+ setComplementarySidebarState,
1476
+ resizing
1477
+ }, children);
1478
+ };
1479
+ MainRoot.displayName = MAIN_ROOT_NAME;
1480
+ var MainOverlay = /* @__PURE__ */ forwardRef16(({ classNames, ...props }, forwardedRef) => {
1481
+ const [isLg] = useMediaQuery("lg");
1482
+ const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_OVERLAY_NAME);
1483
+ const { tx } = useThemeContext();
1484
+ return /* @__PURE__ */ React20.createElement("div", {
1485
+ ...props,
1486
+ onClick: () => {
1487
+ setNavigationSidebarState("collapsed");
1488
+ setComplementarySidebarState("collapsed");
1489
+ },
1490
+ className: tx("main.overlay", {
1491
+ isLg,
1492
+ inlineStartSidebarOpen: navigationSidebarState,
1493
+ inlineEndSidebarOpen: complementarySidebarState
1494
+ }, classNames),
1495
+ "data-state": navigationSidebarState === "expanded" || complementarySidebarState === "expanded" ? "open" : "closed",
1496
+ "aria-hidden": "true",
1497
+ ref: forwardedRef
1498
+ });
1499
+ });
1500
+ MainOverlay.displayName = MAIN_OVERLAY_NAME;
1501
+ var MainSidebar = /* @__PURE__ */ forwardRef16(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
1502
+ const [isLg] = useMediaQuery("lg");
1503
+ const { tx } = useThemeContext();
1504
+ const { t } = useTranslation();
1505
+ const ref = useForwardedRef(forwardedRef);
1506
+ const noopRef = useRef(null);
1507
+ useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
1508
+ onDismiss: () => onStateChange?.("closed")
1509
+ });
1510
+ const handleKeyDown = useCallback7((event) => {
1511
+ const focusGroupParent = event.target.closest("[data-tabster]");
1512
+ if (event.key === "Escape" && focusGroupParent) {
1513
+ event.preventDefault();
1514
+ event.stopPropagation();
1515
+ focusGroupParent.focus();
1516
+ }
1517
+ props.onKeyDown?.(event);
1518
+ }, [
1519
+ props.onKeyDown
1520
+ ]);
1521
+ const Root8 = isLg ? Primitive7.div : DialogContent2;
1522
+ return /* @__PURE__ */ React20.createElement(DialogRoot2, {
1523
+ open: state !== "closed",
1524
+ "aria-label": toLocalizedString(label, t),
1525
+ modal: false
1526
+ }, !isLg && /* @__PURE__ */ React20.createElement(DialogTitle2, {
1527
+ className: "sr-only"
1528
+ }, toLocalizedString(label, t)), /* @__PURE__ */ React20.createElement(Root8, {
1529
+ ...!isLg && {
1530
+ forceMount: true,
1531
+ tabIndex: -1,
1532
+ onOpenAutoFocus: onOpenAutoFocus ?? handleOpenAutoFocus
1533
+ },
1534
+ ...state === "closed" && {
1535
+ inert: true
1536
+ },
1537
+ ...props,
1538
+ "data-side": side === "inline-end" ? "ie" : "is",
1539
+ "data-state": state,
1540
+ "data-resizing": resizing ? "true" : "false",
1541
+ className: tx("main.sidebar", {}, classNames),
1542
+ onKeyDownCapture: handleKeyDown,
1543
+ ref
1544
+ }, children));
1545
+ });
1546
+ var MainNavigationSidebar = /* @__PURE__ */ forwardRef16((props, forwardedRef) => {
1547
+ const { navigationSidebarState, setNavigationSidebarState, resizing } = useMainContext(NAVIGATION_SIDEBAR_NAME);
1548
+ const mover = useLandmarkMover(props.onKeyDown, "0");
1549
+ return /* @__PURE__ */ React20.createElement(MainSidebar, {
1550
+ ...mover,
1551
+ ...props,
1552
+ state: navigationSidebarState,
1553
+ onStateChange: setNavigationSidebarState,
1554
+ resizing,
1555
+ side: "inline-start",
1556
+ ref: forwardedRef
1557
+ });
1558
+ });
1559
+ MainNavigationSidebar.displayName = NAVIGATION_SIDEBAR_NAME;
1560
+ var MainComplementarySidebar = /* @__PURE__ */ forwardRef16((props, forwardedRef) => {
1561
+ const { complementarySidebarState, setComplementarySidebarState, resizing } = useMainContext(COMPLEMENTARY_SIDEBAR_NAME);
1562
+ const mover = useLandmarkMover(props.onKeyDown, "2");
1563
+ return /* @__PURE__ */ React20.createElement(MainSidebar, {
1564
+ ...mover,
1565
+ ...props,
1566
+ state: complementarySidebarState,
1567
+ onStateChange: setComplementarySidebarState,
1568
+ resizing,
1569
+ side: "inline-end",
1570
+ ref: forwardedRef
1571
+ });
1572
+ });
1573
+ MainComplementarySidebar.displayName = COMPLEMENTARY_SIDEBAR_NAME;
1574
+ var MainContent = /* @__PURE__ */ forwardRef16(({ asChild, classNames, bounce, handlesFocus, children, role, ...props }, forwardedRef) => {
1575
+ const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
1576
+ const { tx } = useThemeContext();
1577
+ const Root8 = asChild ? Slot8 : role ? "div" : "main";
1578
+ const mover = useLandmarkMover(props.onKeyDown, "1");
1579
+ return /* @__PURE__ */ React20.createElement(Root8, {
1580
+ role,
1581
+ ...handlesFocus && {
1582
+ ...mover
1583
+ },
1584
+ ...props,
1585
+ "data-sidebar-inline-start-state": navigationSidebarState,
1586
+ "data-sidebar-inline-end-state": complementarySidebarState,
1587
+ "data-handles-focus": handlesFocus,
1588
+ className: tx("main.content", {
1589
+ bounce,
1590
+ handlesFocus
1591
+ }, classNames),
1592
+ ref: forwardedRef
1593
+ }, children);
1594
+ });
1595
+ MainContent.displayName = MAIN_NAME;
1596
+ var Main = {
1597
+ Root: MainRoot,
1598
+ Overlay: MainOverlay,
1599
+ Content: MainContent,
1600
+ NavigationSidebar: MainNavigationSidebar,
1601
+ ComplementarySidebar: MainComplementarySidebar
1602
+ };
1603
+
1604
+ // src/components/Menu/ContextMenu.tsx
1605
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
1606
+ import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
1607
+ import { Slot as Slot9 } from "@radix-ui/react-slot";
1608
+ import React21, { forwardRef as forwardRef17 } from "react";
1609
+
1610
+ // src/hooks/useSafeCollisionPadding.ts
1611
+ import { useMemo as useMemo2 } from "react";
1612
+ var propIsNumber = (prop) => Number.isFinite(prop);
1613
+ var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
1614
+ var safePadding = (propsPadding, safePadding2, side) => {
1615
+ return (propIsNumber(safePadding2[side]) ? safePadding2[side] : 0) + (propIsNumber(propsPadding) ? propsPadding : propsIsRecord(propsPadding) ? propsPadding[side] ?? 0 : 0);
1616
+ };
1617
+ var useSafeCollisionPadding = (collisionPadding) => {
1618
+ const { safeAreaPadding } = useThemeContext();
1619
+ return useMemo2(() => ({
1620
+ top: safePadding(collisionPadding, safeAreaPadding, "top"),
1621
+ right: safePadding(collisionPadding, safeAreaPadding, "right"),
1622
+ bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
1623
+ left: safePadding(collisionPadding, safeAreaPadding, "left")
1624
+ }), [
1625
+ collisionPadding,
1626
+ safeAreaPadding
1627
+ ]);
1628
+ };
1629
+
1630
+ // src/components/Menu/ContextMenu.tsx
1631
+ var ContextMenuRoot = ContextMenuPrimitive.ContextMenu;
1632
+ var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
1633
+ var ContextMenuPortal = ContextMenuPrimitive.Portal;
1634
+ var ContextMenuContent = /* @__PURE__ */ forwardRef17(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
1635
+ const { tx } = useThemeContext();
1636
+ const elevation = useElevationContext();
1637
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1638
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.Content, {
1639
+ ...props,
1640
+ "data-arrow-keys": "up down",
1641
+ collisionPadding: safeCollisionPadding,
1642
+ className: tx("menu.content", {
1643
+ elevation
1644
+ }, classNames),
1645
+ ref: forwardedRef
1646
+ }, children);
1647
+ });
1648
+ var ContextMenuViewport = /* @__PURE__ */ forwardRef17(({ classNames, asChild, children, ...props }, forwardedRef) => {
1649
+ const { tx } = useThemeContext();
1650
+ const Root8 = asChild ? Slot9 : Primitive8.div;
1651
+ return /* @__PURE__ */ React21.createElement(Root8, {
1652
+ ...props,
1653
+ className: tx("menu.viewport", {}, classNames),
1654
+ ref: forwardedRef
1655
+ }, children);
1656
+ });
1657
+ var ContextMenuArrow = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
1658
+ const { tx } = useThemeContext();
1659
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.Arrow, {
1660
+ ...props,
1661
+ className: tx("menu.arrow", {}, classNames),
1662
+ ref: forwardedRef
1663
+ });
1664
+ });
1665
+ var ContextMenuGroup = ContextMenuPrimitive.Group;
1666
+ var ContextMenuItemIndicator = ContextMenuPrimitive.ItemIndicator;
1667
+ var ContextMenuItem = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
1668
+ const { tx } = useThemeContext();
1669
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.Item, {
1670
+ ...props,
1671
+ className: tx("menu.item", {}, classNames),
1672
+ ref: forwardedRef
1673
+ });
1674
+ });
1675
+ var ContextMenuCheckboxItem = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
1676
+ const { tx } = useThemeContext();
1677
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.CheckboxItem, {
1678
+ ...props,
1679
+ className: tx("menu.item", {}, classNames),
1680
+ ref: forwardedRef
1681
+ });
1682
+ });
1683
+ var ContextMenuSeparator = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
1684
+ const { tx } = useThemeContext();
1685
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.Separator, {
1686
+ ...props,
1687
+ className: tx("menu.separator", {}, classNames),
1688
+ ref: forwardedRef
1689
+ });
1690
+ });
1691
+ var ContextMenuGroupLabel = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
1692
+ const { tx } = useThemeContext();
1693
+ return /* @__PURE__ */ React21.createElement(ContextMenuPrimitive.Label, {
1694
+ ...props,
1695
+ className: tx("menu.groupLabel", {}, classNames),
1696
+ ref: forwardedRef
1697
+ });
1698
+ });
1699
+ var ContextMenu2 = {
1700
+ Root: ContextMenuRoot,
1701
+ Trigger: ContextMenuTrigger,
1702
+ Portal: ContextMenuPortal,
1703
+ Content: ContextMenuContent,
1704
+ Viewport: ContextMenuViewport,
1705
+ Arrow: ContextMenuArrow,
1706
+ Group: ContextMenuGroup,
1707
+ Item: ContextMenuItem,
1708
+ CheckboxItem: ContextMenuCheckboxItem,
1709
+ ItemIndicator: ContextMenuItemIndicator,
1710
+ Separator: ContextMenuSeparator,
1711
+ GroupLabel: ContextMenuGroupLabel
1712
+ };
1713
+
1714
+ // src/components/Menu/DropdownMenu.tsx
1715
+ import { composeEventHandlers } from "@radix-ui/primitive";
1716
+ import { composeRefs } from "@radix-ui/react-compose-refs";
1717
+ import { createContextScope as createContextScope2 } from "@radix-ui/react-context";
1718
+ import { useId as useId2 } from "@radix-ui/react-id";
1719
+ import * as MenuPrimitive from "@radix-ui/react-menu";
1720
+ import { createMenuScope } from "@radix-ui/react-menu";
1721
+ import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
1722
+ import { Slot as Slot10 } from "@radix-ui/react-slot";
1723
+ import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
1724
+ import React22, { forwardRef as forwardRef18, useCallback as useCallback8, useEffect as useEffect4, useMemo as useMemo3, useRef as useRef2 } from "react";
1725
+ var DROPDOWN_MENU_NAME = "DropdownMenu";
1726
+ var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope2(DROPDOWN_MENU_NAME, [
1727
+ createMenuScope
1728
+ ]);
1729
+ var useMenuScope = createMenuScope();
1730
+ var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
1731
+ var DropdownMenuRoot = (props) => {
1732
+ const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props;
1733
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1734
+ const triggerRef = useRef2(null);
1735
+ const [open = false, setOpen] = useControllableState4({
1736
+ prop: openProp,
1737
+ defaultProp: defaultOpen,
1738
+ onChange: onOpenChange
1739
+ });
1740
+ return /* @__PURE__ */ React22.createElement(DropdownMenuProvider, {
1741
+ scope: __scopeDropdownMenu,
1742
+ triggerId: useId2(),
1743
+ triggerRef,
1744
+ contentId: useId2(),
1745
+ open,
1746
+ onOpenChange: setOpen,
1747
+ onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
1748
+ setOpen
1749
+ ]),
1750
+ modal
1751
+ }, /* @__PURE__ */ React22.createElement(MenuPrimitive.Root, {
1752
+ ...menuScope,
1753
+ open,
1754
+ onOpenChange: setOpen,
1755
+ dir,
1756
+ modal
1757
+ }, children));
1758
+ };
1759
+ DropdownMenuRoot.displayName = DROPDOWN_MENU_NAME;
1760
+ var TRIGGER_NAME = "DropdownMenuTrigger";
1761
+ var DropdownMenuTrigger = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1762
+ const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1763
+ const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
1764
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1765
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Anchor, {
1766
+ asChild: true,
1767
+ ...menuScope
1768
+ }, /* @__PURE__ */ React22.createElement(Primitive9.button, {
1769
+ type: "button",
1770
+ id: context.triggerId,
1771
+ "aria-haspopup": "menu",
1772
+ "aria-expanded": context.open,
1773
+ "aria-controls": context.open ? context.contentId : void 0,
1774
+ "data-state": context.open ? "open" : "closed",
1775
+ "data-disabled": disabled ? "" : void 0,
1776
+ disabled,
1777
+ ...triggerProps,
1778
+ ref: composeRefs(forwardedRef, context.triggerRef),
1779
+ "data-arrow-keys": "down",
1780
+ onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
1781
+ if (!disabled && event.button === 0 && event.ctrlKey === false) {
1782
+ context.onOpenToggle();
1783
+ if (!context.open) {
1784
+ event.preventDefault();
1785
+ }
1786
+ }
1787
+ }),
1788
+ onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1789
+ if (disabled) {
1790
+ return;
1791
+ }
1792
+ if ([
1793
+ "Enter",
1794
+ " "
1795
+ ].includes(event.key)) {
1796
+ context.onOpenToggle();
1797
+ }
1798
+ if (event.key === "ArrowDown") {
1799
+ context.onOpenChange(true);
1800
+ }
1801
+ if ([
1802
+ "Enter",
1803
+ " ",
1804
+ "ArrowDown"
1805
+ ].includes(event.key)) {
1806
+ event.preventDefault();
1807
+ }
1808
+ })
1809
+ }));
1810
+ });
1811
+ DropdownMenuTrigger.displayName = TRIGGER_NAME;
1812
+ var VIRTUAL_TRIGGER_NAME = "DropdownMenuVirtualTrigger";
1813
+ var DropdownMenuVirtualTrigger = (props) => {
1814
+ const { __scopeDropdownMenu, virtualRef } = props;
1815
+ const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
1816
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1817
+ useEffect4(() => {
1818
+ if (virtualRef.current) {
1819
+ context.triggerRef.current = virtualRef.current;
1820
+ }
1821
+ });
1822
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Anchor, {
1823
+ ...menuScope,
1824
+ virtualRef
1825
+ });
1826
+ };
1827
+ DropdownMenuVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME;
1828
+ var PORTAL_NAME = "DropdownMenuPortal";
1829
+ var DropdownMenuPortal = (props) => {
1830
+ const { __scopeDropdownMenu, ...portalProps } = props;
1831
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1832
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Portal, {
1833
+ ...menuScope,
1834
+ ...portalProps
1835
+ });
1836
+ };
1837
+ DropdownMenuPortal.displayName = PORTAL_NAME;
1838
+ var DropdownMenuViewport = /* @__PURE__ */ forwardRef18(({ classNames, asChild, children, ...props }, forwardedRef) => {
1839
+ const { tx } = useThemeContext();
1840
+ const Root8 = asChild ? Slot10 : Primitive9.div;
1841
+ return /* @__PURE__ */ React22.createElement(Root8, {
1842
+ ...props,
1843
+ className: tx("menu.viewport", {}, classNames),
1844
+ ref: forwardedRef
1845
+ }, children);
1846
+ });
1847
+ var CONTENT_NAME = "DropdownMenuContent";
1848
+ var DropdownMenuContent = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1849
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, collisionBoundary, ...contentProps } = props;
1850
+ const { tx } = useThemeContext();
1851
+ const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
1852
+ const elevation = useElevationContext();
1853
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1854
+ const hasInteractedOutsideRef = useRef2(false);
1855
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
1856
+ const computedCollisionBoundary = useMemo3(() => {
1857
+ const closestBoundary = context.triggerRef.current?.closest("[data-popover-collision-boundary]");
1858
+ return closestBoundary ? Array.isArray(collisionBoundary) ? [
1859
+ closestBoundary,
1860
+ ...collisionBoundary
1861
+ ] : collisionBoundary ? [
1862
+ closestBoundary,
1863
+ collisionBoundary
1864
+ ] : [
1865
+ closestBoundary
1866
+ ] : collisionBoundary;
1867
+ }, [
1868
+ context.open,
1869
+ collisionBoundary,
1870
+ context.triggerRef.current
1871
+ ]);
1872
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Content, {
1873
+ id: context.contentId,
1874
+ "aria-labelledby": context.triggerId,
1875
+ ...menuScope,
1876
+ ...contentProps,
1877
+ collisionBoundary: computedCollisionBoundary,
1878
+ collisionPadding: safeCollisionPadding,
1879
+ ref: forwardedRef,
1880
+ onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
1881
+ if (!hasInteractedOutsideRef.current) {
1882
+ context.triggerRef.current?.focus();
1883
+ }
1884
+ hasInteractedOutsideRef.current = false;
1885
+ event.preventDefault();
1886
+ }),
1887
+ onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
1888
+ const originalEvent = event.detail.originalEvent;
1889
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
1890
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
1891
+ if (!context.modal || isRightClick) {
1892
+ hasInteractedOutsideRef.current = true;
1893
+ }
1894
+ }),
1895
+ "data-arrow-keys": "up down",
1896
+ className: tx("menu.content", {
1897
+ elevation
1898
+ }, classNames),
1899
+ style: {
1900
+ ...props.style,
1901
+ // re-namespace exposed content custom properties
1902
+ ...{
1903
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1904
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1905
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1906
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1907
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1908
+ }
1909
+ }
1910
+ });
1911
+ });
1912
+ DropdownMenuContent.displayName = CONTENT_NAME;
1913
+ var GROUP_NAME = "DropdownMenuGroup";
1914
+ var DropdownMenuGroup = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1915
+ const { __scopeDropdownMenu, ...groupProps } = props;
1916
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1917
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Group, {
1918
+ ...menuScope,
1919
+ ...groupProps,
1920
+ ref: forwardedRef
1921
+ });
1922
+ });
1923
+ DropdownMenuGroup.displayName = GROUP_NAME;
1924
+ var LABEL_NAME = "DropdownMenuLabel";
1925
+ var DropdownMenuGroupLabel = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1926
+ const { __scopeDropdownMenu, classNames, ...labelProps } = props;
1927
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1928
+ const { tx } = useThemeContext();
1929
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Label, {
1930
+ ...menuScope,
1931
+ ...labelProps,
1932
+ className: tx("menu.groupLabel", {}, classNames),
1933
+ ref: forwardedRef
1934
+ });
1935
+ });
1936
+ DropdownMenuGroupLabel.displayName = LABEL_NAME;
1937
+ var ITEM_NAME = "DropdownMenuItem";
1938
+ var DropdownMenuItem = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1939
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
1940
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1941
+ const { tx } = useThemeContext();
1942
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Item, {
1943
+ ...menuScope,
1944
+ ...itemProps,
1945
+ className: tx("menu.item", {}, classNames),
1946
+ ref: forwardedRef
1947
+ });
1948
+ });
1949
+ DropdownMenuItem.displayName = ITEM_NAME;
1950
+ var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
1951
+ var DropdownMenuCheckboxItem = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1952
+ const { __scopeDropdownMenu, classNames, ...checkboxItemProps } = props;
1953
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1954
+ const { tx } = useThemeContext();
1955
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.CheckboxItem, {
1956
+ ...menuScope,
1957
+ ...checkboxItemProps,
1958
+ className: tx("menu.item", {}, classNames),
1959
+ ref: forwardedRef
1960
+ });
1961
+ });
1962
+ DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
1963
+ var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
1964
+ var DropdownMenuRadioGroup = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1965
+ const { __scopeDropdownMenu, ...radioGroupProps } = props;
1966
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1967
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.RadioGroup, {
1968
+ ...menuScope,
1969
+ ...radioGroupProps,
1970
+ ref: forwardedRef
1971
+ });
1972
+ });
1973
+ DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
1974
+ var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
1975
+ var DropdownMenuRadioItem = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1976
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
1977
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1978
+ const { tx } = useThemeContext();
1979
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Item, {
1980
+ ...menuScope,
1981
+ ...itemProps,
1982
+ className: tx("menu.item", {}, classNames),
1983
+ ref: forwardedRef
1984
+ });
1985
+ });
1986
+ DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
1987
+ var INDICATOR_NAME = "DropdownMenuItemIndicator";
1988
+ var DropdownMenuItemIndicator = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
1989
+ const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
1990
+ const menuScope = useMenuScope(__scopeDropdownMenu);
1991
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.ItemIndicator, {
1992
+ ...menuScope,
1993
+ ...itemIndicatorProps,
1994
+ ref: forwardedRef
1995
+ });
1996
+ });
1997
+ DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
1998
+ var SEPARATOR_NAME = "DropdownMenuSeparator";
1999
+ var DropdownMenuSeparator = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
2000
+ const { __scopeDropdownMenu, classNames, ...separatorProps } = props;
2001
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2002
+ const { tx } = useThemeContext();
2003
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Separator, {
2004
+ ...menuScope,
2005
+ ...separatorProps,
2006
+ className: tx("menu.separator", {}, classNames),
2007
+ ref: forwardedRef
2008
+ });
2009
+ });
2010
+ DropdownMenuSeparator.displayName = SEPARATOR_NAME;
2011
+ var ARROW_NAME = "DropdownMenuArrow";
2012
+ var DropdownMenuArrow = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
2013
+ const { __scopeDropdownMenu, classNames, ...arrowProps } = props;
2014
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2015
+ const { tx } = useThemeContext();
2016
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Arrow, {
2017
+ ...menuScope,
2018
+ ...arrowProps,
2019
+ className: tx("menu.arrow", {}, classNames),
2020
+ ref: forwardedRef
2021
+ });
2022
+ });
2023
+ DropdownMenuArrow.displayName = ARROW_NAME;
2024
+ var DropdownMenuSub = (props) => {
2025
+ const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
2026
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2027
+ const [open = false, setOpen] = useControllableState4({
2028
+ prop: openProp,
2029
+ defaultProp: defaultOpen,
2030
+ onChange: onOpenChange
2031
+ });
2032
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.Sub, {
2033
+ ...menuScope,
2034
+ open,
2035
+ onOpenChange: setOpen
2036
+ }, children);
2037
+ };
2038
+ var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
2039
+ var DropdownMenuSubTrigger = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
2040
+ const { __scopeDropdownMenu, ...subTriggerProps } = props;
2041
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2042
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.SubTrigger, {
2043
+ ...menuScope,
2044
+ ...subTriggerProps,
2045
+ ref: forwardedRef
2046
+ });
2047
+ });
2048
+ DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
2049
+ var SUB_CONTENT_NAME = "DropdownMenuSubContent";
2050
+ var DropdownMenuSubContent = /* @__PURE__ */ forwardRef18((props, forwardedRef) => {
2051
+ const { __scopeDropdownMenu, ...subContentProps } = props;
2052
+ const menuScope = useMenuScope(__scopeDropdownMenu);
2053
+ return /* @__PURE__ */ React22.createElement(MenuPrimitive.SubContent, {
2054
+ ...menuScope,
2055
+ ...subContentProps,
2056
+ ref: forwardedRef,
2057
+ style: {
2058
+ ...props.style,
2059
+ // re-namespace exposed content custom properties
2060
+ ...{
2061
+ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
2062
+ "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
2063
+ "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
2064
+ "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
2065
+ "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
2066
+ }
2067
+ }
2068
+ });
2069
+ });
2070
+ DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
2071
+ var DropdownMenu = {
2072
+ Root: DropdownMenuRoot,
2073
+ Trigger: DropdownMenuTrigger,
2074
+ VirtualTrigger: DropdownMenuVirtualTrigger,
2075
+ Portal: DropdownMenuPortal,
2076
+ Content: DropdownMenuContent,
2077
+ Viewport: DropdownMenuViewport,
2078
+ Group: DropdownMenuGroup,
2079
+ GroupLabel: DropdownMenuGroupLabel,
2080
+ Item: DropdownMenuItem,
2081
+ CheckboxItem: DropdownMenuCheckboxItem,
2082
+ RadioGroup: DropdownMenuRadioGroup,
2083
+ RadioItem: DropdownMenuRadioItem,
2084
+ ItemIndicator: DropdownMenuItemIndicator,
2085
+ Separator: DropdownMenuSeparator,
2086
+ Arrow: DropdownMenuArrow,
2087
+ Sub: DropdownMenuSub,
2088
+ SubTrigger: DropdownMenuSubTrigger,
2089
+ SubContent: DropdownMenuSubContent
2090
+ };
2091
+ var useDropdownMenuMenuScope = useMenuScope;
2092
+
2093
+ // src/components/Message/Message.tsx
2094
+ import { createContext as createContext7 } from "@radix-ui/react-context";
2095
+ import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2096
+ import { Slot as Slot11 } from "@radix-ui/react-slot";
2097
+ import React23, { forwardRef as forwardRef19 } from "react";
2098
+ import { useId as useId3 } from "@dxos/react-hooks";
2099
+ var messageIcons = {
2100
+ success: "ph--check-circle--duotone",
2101
+ info: "ph--info--duotone",
2102
+ warning: "ph--warning--duotone",
2103
+ error: "ph--warning-circle--duotone",
2104
+ neutral: "ph--info--duotone"
2105
+ };
2106
+ var MESSAGE_NAME = "Message";
2107
+ var [MessageProvider, useMessageContext] = createContext7(MESSAGE_NAME);
2108
+ var MessageRoot = /* @__PURE__ */ forwardRef19(({ asChild, valence = "neutral", elevation: propsElevation, classNames, titleId: propsTitleId, descriptionId: propsDescriptionId, children, ...props }, forwardedRef) => {
2109
+ const { tx } = useThemeContext();
2110
+ const titleId = useId3("message__title", propsTitleId);
2111
+ const descriptionId = useId3("message__description", propsDescriptionId);
2112
+ const elevation = useElevationContext(propsElevation);
2113
+ const Root8 = asChild ? Slot11 : Primitive10.div;
2114
+ return /* @__PURE__ */ React23.createElement(MessageProvider, {
2115
+ titleId,
2116
+ descriptionId,
2117
+ valence
2118
+ }, /* @__PURE__ */ React23.createElement(Root8, {
2119
+ role: valence === "neutral" ? "paragraph" : "alert",
2120
+ ...props,
2121
+ className: tx("message.root", {
2122
+ valence,
2123
+ elevation
2124
+ }, classNames),
2125
+ "aria-labelledby": titleId,
2126
+ "aria-describedby": descriptionId,
2127
+ ref: forwardedRef
2128
+ }, children));
2129
+ });
2130
+ MessageRoot.displayName = MESSAGE_NAME;
2131
+ var MESSAGE_TITLE_NAME = "MessageTitle";
2132
+ var MessageTitle = /* @__PURE__ */ forwardRef19(({ asChild, classNames, children, icon, ...props }, forwardedRef) => {
2133
+ const { tx } = useThemeContext();
2134
+ const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
2135
+ const Root8 = asChild ? Slot11 : Primitive10.h2;
2136
+ return /* @__PURE__ */ React23.createElement(Root8, {
2137
+ ...props,
2138
+ className: tx("message.title", {}, classNames),
2139
+ id: titleId,
2140
+ ref: forwardedRef
2141
+ }, !icon && valence === "neutral" ? null : /* @__PURE__ */ React23.createElement(Icon, {
2142
+ size: 5,
2143
+ icon: icon ?? messageIcons[valence],
2144
+ classNames: tx("message.icon", {
2145
+ valence
2146
+ })
2147
+ }), /* @__PURE__ */ React23.createElement("span", null, children));
2148
+ });
2149
+ MessageTitle.displayName = MESSAGE_TITLE_NAME;
2150
+ var MESSAGE_CONTENT_NAME = "MessageContent";
2151
+ var MessageContent = /* @__PURE__ */ forwardRef19(({ asChild, classNames, children, ...props }, forwardedRef) => {
2152
+ const { tx } = useThemeContext();
2153
+ const { descriptionId } = useMessageContext(MESSAGE_CONTENT_NAME);
2154
+ const Root8 = asChild ? Slot11 : Primitive10.p;
2155
+ return /* @__PURE__ */ React23.createElement(Root8, {
2156
+ ...props,
2157
+ className: tx("message.content", {}, classNames),
2158
+ id: descriptionId,
2159
+ ref: forwardedRef
2160
+ }, children);
2161
+ });
2162
+ MessageContent.displayName = MESSAGE_CONTENT_NAME;
2163
+ var Message = {
2164
+ Root: MessageRoot,
2165
+ Title: MessageTitle,
2166
+ Content: MessageContent
2167
+ };
2168
+ var Callout = Message;
2169
+
2170
+ // src/components/Popover/Popover.tsx
2171
+ import { composeEventHandlers as composeEventHandlers2 } from "@radix-ui/primitive";
2172
+ import { useComposedRefs } from "@radix-ui/react-compose-refs";
2173
+ import { createContextScope as createContextScope3 } from "@radix-ui/react-context";
2174
+ import { DismissableLayer } from "@radix-ui/react-dismissable-layer";
2175
+ import { useFocusGuards } from "@radix-ui/react-focus-guards";
2176
+ import { FocusScope } from "@radix-ui/react-focus-scope";
2177
+ import { useId as useId4 } from "@radix-ui/react-id";
2178
+ import * as PopperPrimitive from "@radix-ui/react-popper";
2179
+ import { createPopperScope } from "@radix-ui/react-popper";
2180
+ import { Portal as PortalPrimitive } from "@radix-ui/react-portal";
2181
+ import { Presence } from "@radix-ui/react-presence";
2182
+ import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
2183
+ import { Slot as Slot12 } from "@radix-ui/react-slot";
2184
+ import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2185
+ import { hideOthers } from "aria-hidden";
2186
+ import React24, { forwardRef as forwardRef20, useCallback as useCallback9, useEffect as useEffect5, useMemo as useMemo4, useRef as useRef3, useState as useState6 } from "react";
2187
+ import { RemoveScroll } from "react-remove-scroll";
2188
+ var POPOVER_NAME = "Popover";
2189
+ var [createPopoverContext, createPopoverScope] = createContextScope3(POPOVER_NAME, [
2190
+ createPopperScope
2191
+ ]);
2192
+ var usePopperScope = createPopperScope();
2193
+ var [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);
2194
+ var PopoverRoot = (props) => {
2195
+ const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
2196
+ const popperScope = usePopperScope(__scopePopover);
2197
+ const triggerRef = useRef3(null);
2198
+ const [hasCustomAnchor, setHasCustomAnchor] = useState6(false);
2199
+ const [open = false, setOpen] = useControllableState5({
2200
+ prop: openProp,
2201
+ defaultProp: defaultOpen,
2202
+ onChange: onOpenChange
2203
+ });
2204
+ return /* @__PURE__ */ React24.createElement(PopperPrimitive.Root, popperScope, /* @__PURE__ */ React24.createElement(PopoverProvider, {
2205
+ scope: __scopePopover,
2206
+ contentId: useId4(),
2207
+ triggerRef,
2208
+ open,
2209
+ onOpenChange: setOpen,
2210
+ onOpenToggle: useCallback9(() => setOpen((prevOpen) => !prevOpen), [
2211
+ setOpen
2212
+ ]),
2213
+ hasCustomAnchor,
2214
+ onCustomAnchorAdd: useCallback9(() => setHasCustomAnchor(true), []),
2215
+ onCustomAnchorRemove: useCallback9(() => setHasCustomAnchor(false), []),
2216
+ modal
2217
+ }, children));
2218
+ };
2219
+ PopoverRoot.displayName = POPOVER_NAME;
2220
+ var ANCHOR_NAME = "PopoverAnchor";
2221
+ var PopoverAnchor = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2222
+ const { __scopePopover, ...anchorProps } = props;
2223
+ const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
2224
+ const popperScope = usePopperScope(__scopePopover);
2225
+ const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
2226
+ useEffect5(() => {
2227
+ onCustomAnchorAdd();
2228
+ return () => onCustomAnchorRemove();
2229
+ }, [
2230
+ onCustomAnchorAdd,
2231
+ onCustomAnchorRemove
2232
+ ]);
2233
+ return /* @__PURE__ */ React24.createElement(PopperPrimitive.Anchor, {
2234
+ ...popperScope,
2235
+ ...anchorProps,
2236
+ ref: forwardedRef
2237
+ });
2238
+ });
2239
+ PopoverAnchor.displayName = ANCHOR_NAME;
2240
+ var TRIGGER_NAME2 = "PopoverTrigger";
2241
+ var PopoverTrigger = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2242
+ const { __scopePopover, ...triggerProps } = props;
2243
+ const context = usePopoverContext(TRIGGER_NAME2, __scopePopover);
2244
+ const popperScope = usePopperScope(__scopePopover);
2245
+ const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
2246
+ const trigger = /* @__PURE__ */ React24.createElement(Primitive11.button, {
2247
+ type: "button",
2248
+ "aria-haspopup": "dialog",
2249
+ "aria-expanded": context.open,
2250
+ "aria-controls": context.contentId,
2251
+ "data-state": getState(context.open),
2252
+ ...triggerProps,
2253
+ ref: composedTriggerRef,
2254
+ onClick: composeEventHandlers2(props.onClick, context.onOpenToggle)
2255
+ });
2256
+ return context.hasCustomAnchor ? trigger : /* @__PURE__ */ React24.createElement(PopperPrimitive.Anchor, {
2257
+ asChild: true,
2258
+ ...popperScope
2259
+ }, trigger);
2260
+ });
2261
+ PopoverTrigger.displayName = TRIGGER_NAME2;
2262
+ var VIRTUAL_TRIGGER_NAME2 = "PopoverVirtualTrigger";
2263
+ var PopoverVirtualTrigger = (props) => {
2264
+ const { __scopePopover, virtualRef } = props;
2265
+ const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
2266
+ const popperScope = usePopperScope(__scopePopover);
2267
+ useEffect5(() => {
2268
+ if (virtualRef.current) {
2269
+ context.triggerRef.current = virtualRef.current;
2270
+ }
2271
+ });
2272
+ return /* @__PURE__ */ React24.createElement(PopperPrimitive.Anchor, {
2273
+ ...popperScope,
2274
+ virtualRef
2275
+ });
2276
+ };
2277
+ PopoverVirtualTrigger.displayName = VIRTUAL_TRIGGER_NAME2;
2278
+ var PORTAL_NAME2 = "PopoverPortal";
2279
+ var [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME2, {
2280
+ forceMount: void 0
2281
+ });
2282
+ var PopoverPortal = (props) => {
2283
+ const { __scopePopover, forceMount, children, container } = props;
2284
+ const context = usePopoverContext(PORTAL_NAME2, __scopePopover);
2285
+ return /* @__PURE__ */ React24.createElement(PortalProvider, {
2286
+ scope: __scopePopover,
2287
+ forceMount
2288
+ }, /* @__PURE__ */ React24.createElement(Presence, {
2289
+ present: forceMount || context.open
2290
+ }, /* @__PURE__ */ React24.createElement(PortalPrimitive, {
2291
+ asChild: true,
2292
+ container
2293
+ }, children)));
2294
+ };
2295
+ PopoverPortal.displayName = PORTAL_NAME2;
2296
+ var CONTENT_NAME2 = "PopoverContent";
2297
+ var PopoverContent = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2298
+ const portalContext = usePortalContext(CONTENT_NAME2, props.__scopePopover);
2299
+ const { forceMount = portalContext.forceMount, ...contentProps } = props;
2300
+ const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2301
+ return /* @__PURE__ */ React24.createElement(Presence, {
2302
+ present: forceMount || context.open
2303
+ }, context.modal ? /* @__PURE__ */ React24.createElement(PopoverContentModal, {
2304
+ ...contentProps,
2305
+ ref: forwardedRef
2306
+ }) : /* @__PURE__ */ React24.createElement(PopoverContentNonModal, {
2307
+ ...contentProps,
2308
+ ref: forwardedRef
2309
+ }));
2310
+ });
2311
+ PopoverContent.displayName = CONTENT_NAME2;
2312
+ var PopoverContentModal = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2313
+ const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2314
+ const contentRef = useRef3(null);
2315
+ const composedRefs = useComposedRefs(forwardedRef, contentRef);
2316
+ const isRightClickOutsideRef = useRef3(false);
2317
+ useEffect5(() => {
2318
+ const content = contentRef.current;
2319
+ if (content) {
2320
+ return hideOthers(content);
2321
+ }
2322
+ }, []);
2323
+ return /* @__PURE__ */ React24.createElement(RemoveScroll, {
2324
+ as: Slot12,
2325
+ allowPinchZoom: true
2326
+ }, /* @__PURE__ */ React24.createElement(PopoverContentImpl, {
2327
+ ...props,
2328
+ ref: composedRefs,
2329
+ // we make sure we're not trapping once it's been closed
2330
+ // (closed !== unmounted when animating out)
2331
+ trapFocus: context.open,
2332
+ disableOutsidePointerEvents: true,
2333
+ onCloseAutoFocus: composeEventHandlers2(props.onCloseAutoFocus, (event) => {
2334
+ event.preventDefault();
2335
+ if (!isRightClickOutsideRef.current) {
2336
+ context.triggerRef.current?.focus();
2337
+ }
2338
+ }),
2339
+ onPointerDownOutside: composeEventHandlers2(props.onPointerDownOutside, (event) => {
2340
+ const originalEvent = event.detail.originalEvent;
2341
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2342
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
2343
+ isRightClickOutsideRef.current = isRightClick;
2344
+ }, {
2345
+ checkForDefaultPrevented: false
2346
+ }),
2347
+ // When focus is trapped, a `focusout` event may still happen.
2348
+ // We make sure we don't trigger our `onDismiss` in such case.
2349
+ onFocusOutside: composeEventHandlers2(props.onFocusOutside, (event) => event.preventDefault(), {
2350
+ checkForDefaultPrevented: false
2351
+ })
2352
+ }));
2353
+ });
2354
+ var PopoverContentNonModal = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2355
+ const context = usePopoverContext(CONTENT_NAME2, props.__scopePopover);
2356
+ const hasInteractedOutsideRef = useRef3(false);
2357
+ const hasPointerDownOutsideRef = useRef3(false);
2358
+ return /* @__PURE__ */ React24.createElement(PopoverContentImpl, {
2359
+ ...props,
2360
+ ref: forwardedRef,
2361
+ trapFocus: false,
2362
+ disableOutsidePointerEvents: false,
2363
+ onCloseAutoFocus: (event) => {
2364
+ props.onCloseAutoFocus?.(event);
2365
+ if (!event.defaultPrevented) {
2366
+ if (!hasInteractedOutsideRef.current) {
2367
+ context.triggerRef.current?.focus();
2368
+ }
2369
+ event.preventDefault();
2370
+ }
2371
+ hasInteractedOutsideRef.current = false;
2372
+ hasPointerDownOutsideRef.current = false;
2373
+ },
2374
+ onInteractOutside: (event) => {
2375
+ props.onInteractOutside?.(event);
2376
+ if (!event.defaultPrevented) {
2377
+ hasInteractedOutsideRef.current = true;
2378
+ if (event.detail.originalEvent.type === "pointerdown") {
2379
+ hasPointerDownOutsideRef.current = true;
2380
+ }
2381
+ }
2382
+ const target = event.target;
2383
+ const targetIsTrigger = context.triggerRef.current?.contains(target);
2384
+ if (targetIsTrigger) {
2385
+ event.preventDefault();
2386
+ }
2387
+ if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) {
2388
+ event.preventDefault();
2389
+ }
2390
+ }
2391
+ });
2392
+ });
2393
+ var PopoverContentImpl = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2394
+ const { __scopePopover, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, collisionPadding = 8, collisionBoundary, classNames, ...contentProps } = props;
2395
+ const context = usePopoverContext(CONTENT_NAME2, __scopePopover);
2396
+ const popperScope = usePopperScope(__scopePopover);
2397
+ const { tx } = useThemeContext();
2398
+ const elevation = useElevationContext();
2399
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2400
+ useFocusGuards();
2401
+ const computedCollisionBoundary = useMemo4(() => {
2402
+ const closestBoundary = context.triggerRef.current?.closest("[data-popover-collision-boundary]");
2403
+ return closestBoundary ? Array.isArray(collisionBoundary) ? [
2404
+ closestBoundary,
2405
+ ...collisionBoundary
2406
+ ] : collisionBoundary ? [
2407
+ closestBoundary,
2408
+ collisionBoundary
2409
+ ] : [
2410
+ closestBoundary
2411
+ ] : collisionBoundary;
2412
+ }, [
2413
+ context.open,
2414
+ collisionBoundary,
2415
+ context.triggerRef.current
2416
+ ]);
2417
+ return /* @__PURE__ */ React24.createElement(FocusScope, {
2418
+ asChild: true,
2419
+ loop: true,
2420
+ trapped: trapFocus,
2421
+ onMountAutoFocus: onOpenAutoFocus,
2422
+ onUnmountAutoFocus: onCloseAutoFocus
2423
+ }, /* @__PURE__ */ React24.createElement(DismissableLayer, {
2424
+ asChild: true,
2425
+ disableOutsidePointerEvents,
2426
+ onInteractOutside,
2427
+ onEscapeKeyDown,
2428
+ onPointerDownOutside,
2429
+ onFocusOutside,
2430
+ onDismiss: () => context.onOpenChange(false)
2431
+ }, /* @__PURE__ */ React24.createElement(PopperPrimitive.Content, {
2432
+ "data-state": getState(context.open),
2433
+ role: "dialog",
2434
+ id: context.contentId,
2435
+ ...popperScope,
2436
+ ...contentProps,
2437
+ collisionPadding: safeCollisionPadding,
2438
+ collisionBoundary: computedCollisionBoundary,
2439
+ className: tx("popover.content", {
2440
+ elevation
2441
+ }, classNames),
2442
+ ref: forwardedRef,
2443
+ style: {
2444
+ ...contentProps.style,
2445
+ // Re-namespace exposed content custom properties.
2446
+ ...{
2447
+ "--radix-popover-content-transform-origin": "var(--radix-popper-transform-origin)",
2448
+ "--radix-popover-content-available-width": "var(--radix-popper-available-width)",
2449
+ "--radix-popover-content-available-height": "var(--radix-popper-available-height)",
2450
+ "--radix-popover-trigger-width": "var(--radix-popper-anchor-width)",
2451
+ "--radix-popover-trigger-height": "var(--radix-popper-anchor-height)"
2452
+ }
2453
+ }
2454
+ })));
2455
+ });
2456
+ var CLOSE_NAME = "PopoverClose";
2457
+ var PopoverClose = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2458
+ const { __scopePopover, ...closeProps } = props;
2459
+ const context = usePopoverContext(CLOSE_NAME, __scopePopover);
2460
+ return /* @__PURE__ */ React24.createElement(Primitive11.button, {
2461
+ type: "button",
2462
+ ...closeProps,
2463
+ ref: forwardedRef,
2464
+ onClick: composeEventHandlers2(props.onClick, () => context.onOpenChange(false))
2465
+ });
2466
+ });
2467
+ PopoverClose.displayName = CLOSE_NAME;
2468
+ var ARROW_NAME2 = "PopoverArrow";
2469
+ var PopoverArrow = /* @__PURE__ */ forwardRef20((props, forwardedRef) => {
2470
+ const { __scopePopover, classNames, ...arrowProps } = props;
2471
+ const popperScope = usePopperScope(__scopePopover);
2472
+ const { tx } = useThemeContext();
2473
+ return /* @__PURE__ */ React24.createElement(PopperPrimitive.Arrow, {
2474
+ ...popperScope,
2475
+ ...arrowProps,
2476
+ className: tx("popover.arrow", {}, classNames),
2477
+ ref: forwardedRef
2478
+ });
2479
+ });
2480
+ PopoverArrow.displayName = ARROW_NAME2;
2481
+ var PopoverViewport = /* @__PURE__ */ forwardRef20(({ classNames, asChild, constrainInline = true, constrainBlock = true, children, ...props }, forwardedRef) => {
2482
+ const { tx } = useThemeContext();
2483
+ const Root8 = asChild ? Slot12 : Primitive11.div;
2484
+ return /* @__PURE__ */ React24.createElement(Root8, {
2485
+ ...props,
2486
+ className: tx("popover.viewport", {
2487
+ constrainInline,
2488
+ constrainBlock
2489
+ }, classNames),
2490
+ ref: forwardedRef
2491
+ }, children);
2492
+ });
2493
+ var getState = (open) => open ? "open" : "closed";
2494
+ var Popover = {
2495
+ Root: PopoverRoot,
2496
+ Anchor: PopoverAnchor,
2497
+ Trigger: PopoverTrigger,
2498
+ VirtualTrigger: PopoverVirtualTrigger,
2499
+ Portal: PopoverPortal,
2500
+ Content: PopoverContent,
2501
+ Close: PopoverClose,
2502
+ Arrow: PopoverArrow,
2503
+ Viewport: PopoverViewport
2504
+ };
2505
+
2506
+ // src/components/Status/Status.tsx
2507
+ import React25, { forwardRef as forwardRef21 } from "react";
2508
+ var Status = /* @__PURE__ */ forwardRef21(({ classNames, children, progress = 0, indeterminate, variant, ...props }, forwardedRef) => {
2509
+ const { tx } = useThemeContext();
2510
+ return /* @__PURE__ */ React25.createElement("span", {
2511
+ role: "status",
2512
+ ...props,
2513
+ className: tx("status.root", {
2514
+ indeterminate,
2515
+ variant
2516
+ }, classNames),
2517
+ ref: forwardedRef
2518
+ }, /* @__PURE__ */ React25.createElement("span", {
2519
+ role: "none",
2520
+ className: tx("status.bar", {
2521
+ indeterminate,
2522
+ variant
2523
+ }, classNames),
2524
+ ...!indeterminate && {
2525
+ style: {
2526
+ width: `${Math.round(progress * 100)}%`
2527
+ }
2528
+ }
2529
+ }), children);
2530
+ });
2531
+
2532
+ // src/components/ScrollArea/ScrollArea.tsx
2533
+ import { createContext as createContext8 } from "@radix-ui/react-context";
2534
+ import React26, { forwardRef as forwardRef22 } from "react";
2535
+ var SCROLLAREA_NAME = "ScrollArea";
2536
+ var [ScrollAreaProvider, useScrollAreaContext] = createContext8(SCROLLAREA_NAME);
2537
+ var SCROLLAREA_ROOT_NAME = "ScrollArea.Root";
2538
+ var ScrollAreaRoot = /* @__PURE__ */ forwardRef22(({ className, classNames, children, orientation = "vertical", autoHide = true, margin = false, padding = false, thin = false, snap = false, ...props }, forwardedRef) => {
2539
+ const { tx } = useThemeContext();
2540
+ const options = {
2541
+ orientation,
2542
+ autoHide,
2543
+ margin,
2544
+ padding,
2545
+ thin,
2546
+ snap
2547
+ };
2548
+ return /* @__PURE__ */ React26.createElement(ScrollAreaProvider, options, /* @__PURE__ */ React26.createElement("div", {
2549
+ ...props,
2550
+ className: tx("scrollArea.root", options, [
2551
+ className,
2552
+ classNames
2553
+ ]),
2554
+ ref: forwardedRef
2555
+ }, children));
2556
+ });
2557
+ ScrollAreaRoot.displayName = SCROLLAREA_ROOT_NAME;
2558
+ var SCROLLAREA_VIEWPORT_NAME = "ScrollArea.Viewport";
2559
+ var ScrollAreaViewport = /* @__PURE__ */ forwardRef22(({ classNames, children, ...props }, forwardedRef) => {
2560
+ const { tx } = useThemeContext();
2561
+ const options = useScrollAreaContext(SCROLLAREA_VIEWPORT_NAME);
2562
+ return /* @__PURE__ */ React26.createElement("div", {
2563
+ ...props,
2564
+ className: tx("scrollArea.viewport", options, classNames),
2565
+ ref: forwardedRef
2566
+ }, children);
2567
+ });
2568
+ ScrollAreaViewport.displayName = SCROLLAREA_VIEWPORT_NAME;
2569
+ var ScrollArea = {
2570
+ Root: ScrollAreaRoot,
2571
+ Viewport: ScrollAreaViewport
2572
+ };
2573
+
2574
+ // src/components/ScrollContainer/ScrollContainer.tsx
2575
+ import { createContext as createContext9 } from "@radix-ui/react-context";
2576
+ import React27, { forwardRef as forwardRef23, useCallback as useCallback10, useEffect as useEffect6, useImperativeHandle, useMemo as useMemo5, useRef as useRef4, useState as useState7 } from "react";
2577
+ import { addEventListener as addEventListener2, combine } from "@dxos/async";
2578
+ import { invariant } from "@dxos/invariant";
2579
+ import { useForwardedRef as useForwardedRef2 } from "@dxos/react-hooks";
2580
+ import { mx as mx4 } from "@dxos/ui-theme";
2581
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui/src/components/ScrollContainer/ScrollContainer.tsx";
2582
+ var isBottom = (el) => {
2583
+ return !!(el && el.scrollHeight - el.scrollTop === el.clientHeight);
2584
+ };
2585
+ var [ScrollContainerProvider, useScrollContainerContext] = createContext9("ScrollContainer");
2586
+ var Root3 = /* @__PURE__ */ forwardRef23(({ children, classNames, pin, fade, behavior: behaviorProp = "smooth" }, forwardedRef) => {
2587
+ const scrollerRef = useRef4(null);
2588
+ const autoScrollRef = useRef4(false);
2589
+ const [overflow, setOverflow] = useState7(false);
2590
+ const [pinned, setPinned] = useState7(pin);
2591
+ const timeoutRef = useRef4(void 0);
2592
+ const scrollToBottom = useCallback10((behavior = behaviorProp) => {
2593
+ if (scrollerRef.current) {
2594
+ autoScrollRef.current = true;
2595
+ scrollerRef.current.classList.add("scrollbar-none");
2596
+ scrollerRef.current.scrollTo({
2597
+ top: scrollerRef.current.scrollHeight,
2598
+ behavior
2599
+ });
2600
+ clearTimeout(timeoutRef.current);
2601
+ if (behavior !== "instant") {
2602
+ timeoutRef.current = setTimeout(() => {
2603
+ scrollerRef.current?.classList.remove("scrollbar-none");
2604
+ autoScrollRef.current = false;
2605
+ }, 500);
2606
+ }
2607
+ setPinned(true);
2608
+ }
2609
+ }, []);
2610
+ const controller = useMemo5(() => ({
2611
+ viewport: scrollerRef.current,
2612
+ scrollToTop: () => {
2613
+ invariant(scrollerRef.current, void 0, {
2614
+ F: __dxlog_file2,
2615
+ L: 95,
2616
+ S: void 0,
2617
+ A: [
2618
+ "scrollerRef.current",
2619
+ ""
2620
+ ]
2621
+ });
2622
+ scrollerRef.current.scrollTo({
2623
+ top: 0,
2624
+ behavior: "smooth"
2625
+ });
2626
+ setPinned(false);
2627
+ },
2628
+ scrollToBottom: () => {
2629
+ scrollToBottom("smooth");
2630
+ }
2631
+ }), [
2632
+ scrollToBottom,
2633
+ scrollerRef.current
2634
+ ]);
2635
+ useImperativeHandle(forwardedRef, () => controller, [
2636
+ controller
2637
+ ]);
2638
+ useEffect6(() => {
2639
+ if (!scrollerRef.current) {
2640
+ return;
2641
+ }
2642
+ return combine(
2643
+ // Check if user scrolls.
2644
+ addEventListener2(scrollerRef.current, "wheel", () => {
2645
+ setPinned(isBottom(scrollerRef.current));
2646
+ }),
2647
+ // Check if scrolls.
2648
+ addEventListener2(scrollerRef.current, "scroll", () => {
2649
+ setOverflow((scrollerRef.current?.scrollTop ?? 0) > 0);
2650
+ })
2651
+ );
2652
+ }, []);
2653
+ return /* @__PURE__ */ React27.createElement(ScrollContainerProvider, {
2654
+ pinned,
2655
+ controller,
2656
+ scrollToBottom
2657
+ }, /* @__PURE__ */ React27.createElement("div", {
2658
+ className: "relative grid flex-1 min-bs-0 overflow-hidden"
2659
+ }, fade && /* @__PURE__ */ React27.createElement("div", {
2660
+ role: "none",
2661
+ "data-visible": overflow,
2662
+ className: mx4(
2663
+ // NOTE: Gradients may not be visible with dark reader extensions.
2664
+ "z-10 absolute block-start-0 inset-inline-0 bs-24 is-full",
2665
+ 'opacity-0 duration-200 transition-opacity data-[visible="true"]:opacity-100',
2666
+ "bg-gradient-to-b from-[--surface-bg] to-transparent pointer-events-none"
2667
+ )
2668
+ }), /* @__PURE__ */ React27.createElement(ScrollArea.Root, {
2669
+ classNames: mx4("min-bs-0", classNames),
2670
+ ref: scrollerRef,
2671
+ thin: true
2672
+ }, /* @__PURE__ */ React27.createElement(ScrollArea.Viewport, null, children))));
2673
+ });
2674
+ Root3.displayName = "ScrollContainer.Root";
2675
+ var VIEWPORT_NAME = "ScrollContainer.Viewport";
2676
+ var Viewport = /* @__PURE__ */ forwardRef23(({ classNames, children, ...props }, forwardedRef) => {
2677
+ const contentRef = useForwardedRef2(forwardedRef);
2678
+ const { pinned, scrollToBottom } = useScrollContainerContext(VIEWPORT_NAME);
2679
+ useEffect6(() => {
2680
+ if (!pinned || !contentRef.current) {
2681
+ return;
2682
+ }
2683
+ scrollToBottom();
2684
+ const resizeObserver = new ResizeObserver(() => scrollToBottom());
2685
+ resizeObserver.observe(contentRef.current);
2686
+ return () => resizeObserver.disconnect();
2687
+ }, [
2688
+ pinned,
2689
+ scrollToBottom
2690
+ ]);
2691
+ return /* @__PURE__ */ React27.createElement("div", {
2692
+ className: mx4("is-full", classNames),
2693
+ ...props,
2694
+ ref: contentRef
2695
+ }, children);
2696
+ });
2697
+ Viewport.displayName = VIEWPORT_NAME;
2698
+ var SCROLL_DOWN_BUTTON_NAME = "ScrollContainer.ScrollDownButton";
2699
+ var ScrollDownButton = ({ classNames }) => {
2700
+ const { pinned, scrollToBottom } = useScrollContainerContext(SCROLL_DOWN_BUTTON_NAME);
2701
+ return /* @__PURE__ */ React27.createElement("div", {
2702
+ role: "none",
2703
+ className: mx4("absolute bottom-2 right-4 opacity-100 transition-opacity duration-300", pinned && "opacity-0", classNames)
2704
+ }, /* @__PURE__ */ React27.createElement(IconButton, {
2705
+ variant: "primary",
2706
+ icon: "ph--arrow-down--regular",
2707
+ iconOnly: true,
2708
+ size: 4,
2709
+ label: "Scroll down",
2710
+ onClick: () => scrollToBottom()
2711
+ }));
2712
+ };
2713
+ ScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
2714
+ var ScrollContainer = {
2715
+ Root: Root3,
2716
+ Viewport,
2717
+ ScrollDownButton
2718
+ };
2719
+
2720
+ // src/components/Select/Select.tsx
2721
+ import * as SelectPrimitive from "@radix-ui/react-select";
2722
+ import React28, { forwardRef as forwardRef24 } from "react";
2723
+ var SelectRoot = SelectPrimitive.Root;
2724
+ var SelectTrigger = SelectPrimitive.Trigger;
2725
+ var SelectValue = SelectPrimitive.Value;
2726
+ var SelectIcon = SelectPrimitive.Icon;
2727
+ var SelectPortal = SelectPrimitive.Portal;
2728
+ var SelectTriggerButton = /* @__PURE__ */ forwardRef24(({ children, placeholder, ...props }, forwardedRef) => {
2729
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Trigger, {
2730
+ asChild: true,
2731
+ ref: forwardedRef
2732
+ }, /* @__PURE__ */ React28.createElement(Button, props, /* @__PURE__ */ React28.createElement(SelectPrimitive.Value, {
2733
+ placeholder
2734
+ }, children), /* @__PURE__ */ React28.createElement("span", {
2735
+ className: "is-1 flex-1"
2736
+ }), /* @__PURE__ */ React28.createElement(SelectPrimitive.Icon, {
2737
+ asChild: true
2738
+ }, /* @__PURE__ */ React28.createElement(Icon, {
2739
+ size: 3,
2740
+ icon: "ph--caret-down--bold"
2741
+ }))));
2742
+ });
2743
+ var SelectContent = /* @__PURE__ */ forwardRef24(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
2744
+ const { tx } = useThemeContext();
2745
+ const elevation = useElevationContext();
2746
+ const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2747
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Content, {
2748
+ ...props,
2749
+ "data-arrow-keys": "up down",
2750
+ collisionPadding: safeCollisionPadding,
2751
+ className: tx("select.content", {
2752
+ elevation
2753
+ }, classNames),
2754
+ position: "popper",
2755
+ ref: forwardedRef
2756
+ }, children);
2757
+ });
2758
+ var SelectScrollUpButton2 = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
2759
+ const { tx } = useThemeContext();
2760
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.SelectScrollUpButton, {
2761
+ ...props,
2762
+ className: tx("select.scrollButton", {}, classNames),
2763
+ ref: forwardedRef
2764
+ }, children ?? /* @__PURE__ */ React28.createElement(Icon, {
2765
+ size: 3,
2766
+ icon: "ph--caret-up--bold"
2767
+ }));
2768
+ });
2769
+ var SelectScrollDownButton2 = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
2770
+ const { tx } = useThemeContext();
2771
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.SelectScrollDownButton, {
2772
+ ...props,
2773
+ className: tx("select.scrollButton", {}, classNames),
2774
+ ref: forwardedRef
2775
+ }, children ?? /* @__PURE__ */ React28.createElement(Icon, {
2776
+ size: 3,
2777
+ icon: "ph--caret-down--bold"
2778
+ }));
2779
+ });
2780
+ var SelectViewport2 = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
2781
+ const { tx } = useThemeContext();
2782
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.SelectViewport, {
2783
+ ...props,
2784
+ className: tx("select.viewport", {}, classNames),
2785
+ ref: forwardedRef
2786
+ }, children);
2787
+ });
2788
+ var SelectItem = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
2789
+ const { tx } = useThemeContext();
2790
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Item, {
2791
+ ...props,
2792
+ className: tx("select.item", {}, classNames),
2793
+ ref: forwardedRef
2794
+ });
2795
+ });
2796
+ var SelectItemText = SelectPrimitive.ItemText;
2797
+ var SelectItemIndicator = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
2798
+ const { tx } = useThemeContext();
2799
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.ItemIndicator, {
2800
+ ...props,
2801
+ className: tx("select.itemIndicator", {}, classNames),
2802
+ ref: forwardedRef
2803
+ }, children);
2804
+ });
2805
+ var SelectOption = /* @__PURE__ */ forwardRef24(({ children, classNames, ...props }, forwardedRef) => {
2806
+ const { tx } = useThemeContext();
2807
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Item, {
2808
+ ...props,
2809
+ className: tx("select.item", {}, classNames),
2810
+ ref: forwardedRef
2811
+ }, /* @__PURE__ */ React28.createElement(SelectPrimitive.ItemText, null, children), /* @__PURE__ */ React28.createElement("span", {
2812
+ className: "grow is-1"
2813
+ }), /* @__PURE__ */ React28.createElement(Icon, {
2814
+ icon: "ph--check--regular"
2815
+ }));
2816
+ });
2817
+ var SelectGroup = SelectPrimitive.Group;
2818
+ var SelectLabel = SelectPrimitive.Label;
2819
+ var SelectSeparator = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
2820
+ const { tx } = useThemeContext();
2821
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Separator, {
2822
+ ...props,
2823
+ className: tx("select.separator", {}, classNames),
2824
+ ref: forwardedRef
2825
+ });
2826
+ });
2827
+ var SelectArrow = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
2828
+ const { tx } = useThemeContext();
2829
+ return /* @__PURE__ */ React28.createElement(SelectPrimitive.Arrow, {
2830
+ ...props,
2831
+ className: tx("select.arrow", {}, classNames),
2832
+ ref: forwardedRef
2833
+ });
2834
+ });
2835
+ var Select = {
2836
+ Root: SelectRoot,
2837
+ Trigger: SelectTrigger,
2838
+ TriggerButton: SelectTriggerButton,
2839
+ Value: SelectValue,
2840
+ Icon: SelectIcon,
2841
+ Portal: SelectPortal,
2842
+ Content: SelectContent,
2843
+ ScrollUpButton: SelectScrollUpButton2,
2844
+ ScrollDownButton: SelectScrollDownButton2,
2845
+ Viewport: SelectViewport2,
2846
+ Item: SelectItem,
2847
+ ItemText: SelectItemText,
2848
+ ItemIndicator: SelectItemIndicator,
2849
+ Option: SelectOption,
2850
+ Group: SelectGroup,
2851
+ Label: SelectLabel,
2852
+ Separator: SelectSeparator,
2853
+ Arrow: SelectArrow
2854
+ };
2855
+
2856
+ // src/components/Separator/Separator.tsx
2857
+ import { Separator as SeparatorPrimitive } from "@radix-ui/react-separator";
2858
+ import React29, { forwardRef as forwardRef25 } from "react";
2859
+ var Separator4 = /* @__PURE__ */ forwardRef25(({ classNames, orientation = "horizontal", subdued, ...props }, forwardedRef) => {
2860
+ const { tx } = useThemeContext();
2861
+ return /* @__PURE__ */ React29.createElement(SeparatorPrimitive, {
2862
+ orientation,
2863
+ ...props,
2864
+ className: tx("separator.root", {
2865
+ orientation,
2866
+ subdued
2867
+ }, classNames),
2868
+ ref: forwardedRef
2869
+ });
2870
+ });
2871
+
2872
+ // src/components/Skeleton/Skeleton.tsx
2873
+ import React30, { forwardRef as forwardRef26 } from "react";
2874
+ var Skeleton = /* @__PURE__ */ forwardRef26(({ classNames, variant = "default", ...props }, forwardedRef) => {
2875
+ const { tx } = useThemeContext();
2876
+ return /* @__PURE__ */ React30.createElement("div", {
2877
+ ...props,
2878
+ className: tx("skeleton.root", {
2879
+ variant
2880
+ }, classNames),
2881
+ ref: forwardedRef
2882
+ });
2883
+ });
2884
+
2885
+ // src/components/Splitter/Splitter.tsx
2886
+ import { createContextScope as createContextScope4 } from "@radix-ui/react-context";
2887
+ import React31, { forwardRef as forwardRef27 } from "react";
2888
+ import { mx as mx5 } from "@dxos/ui-theme";
2889
+ var SPLITTER_NAME = "Splitter";
2890
+ var [createSplitterContext, createSplitterScope] = createContextScope4(SPLITTER_NAME);
2891
+ var [SplitterProvider, useSplitterContext] = createSplitterContext(SPLITTER_NAME);
2892
+ var ROOT_NAME = "Splitter.Root";
2893
+ var Root5 = /* @__PURE__ */ forwardRef27(({ __scopeSplitter, classNames, mode = "upper", ratio = 0.5, transition = 250, children, ...rootProps }, forwardedRef) => {
2894
+ return /* @__PURE__ */ React31.createElement(SplitterProvider, {
2895
+ scope: __scopeSplitter,
2896
+ mode,
2897
+ ratio,
2898
+ transition
2899
+ }, /* @__PURE__ */ React31.createElement("div", {
2900
+ role: "none",
2901
+ ...rootProps,
2902
+ ref: forwardedRef,
2903
+ className: mx5("relative bs-full overflow-hidden", classNames)
2904
+ }, children));
2905
+ });
2906
+ Root5.displayName = ROOT_NAME;
2907
+ var PANEL_NAME = "Splitter.Panel";
2908
+ var Panel = /* @__PURE__ */ forwardRef27(({ __scopeSplitter, classNames, children, position, style, ...panelProps }, forwardedRef) => {
2909
+ const context = useSplitterContext(PANEL_NAME, __scopeSplitter);
2910
+ const { mode, ratio, transition } = context;
2911
+ const isUpper = position === "upper";
2912
+ const top = isUpper ? "0%" : mode === "upper" ? "100%" : mode === "lower" ? "0%" : `${ratio * 100}%`;
2913
+ const height = isUpper ? mode === "upper" ? "100%" : mode === "lower" ? "0%" : `${ratio * 100}%` : mode === "lower" ? "100%" : mode === "upper" ? "0%" : `${(1 - ratio) * 100}%`;
2914
+ return /* @__PURE__ */ React31.createElement("div", {
2915
+ ...panelProps,
2916
+ ref: forwardedRef,
2917
+ className: mx5("absolute inset-inline-0 flex flex-col overflow-hidden", classNames),
2918
+ style: {
2919
+ top,
2920
+ height,
2921
+ transition: `top ${transition}ms, height ${transition}ms ease-out`,
2922
+ ...style
2923
+ }
2924
+ }, children);
2925
+ });
2926
+ Panel.displayName = PANEL_NAME;
2927
+ var Splitter = {
2928
+ Root: Root5,
2929
+ Panel
2930
+ };
2931
+
2932
+ // src/components/Tag/Tag.tsx
2933
+ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
2934
+ import { Slot as Slot13 } from "@radix-ui/react-slot";
2935
+ import React32, { forwardRef as forwardRef28 } from "react";
2936
+ var Tag = /* @__PURE__ */ forwardRef28(({ asChild, palette = "neutral", classNames, ...props }, forwardedRef) => {
2937
+ const { tx } = useThemeContext();
2938
+ const Root8 = asChild ? Slot13 : Primitive12.span;
2939
+ return /* @__PURE__ */ React32.createElement(Root8, {
2940
+ ...props,
2941
+ className: tx("tag.root", {
2942
+ palette
2943
+ }, classNames),
2944
+ "data-hue": palette,
2945
+ ref: forwardedRef
2946
+ });
2947
+ });
2948
+
2949
+ // src/components/Toast/Toast.tsx
2950
+ import { Primitive as Primitive13 } from "@radix-ui/react-primitive";
2951
+ import { Slot as Slot14 } from "@radix-ui/react-slot";
2952
+ import { ToastAction as ToastActionPrimitive, ToastClose as ToastClosePrimitive, ToastDescription as ToastDescriptionPrimitive, ToastProvider as ToastProviderPrimitive, Root as ToastRootPrimitive, ToastTitle as ToastTitlePrimitive, ToastViewport as ToastViewportPrimitive } from "@radix-ui/react-toast";
2953
+ import React33, { forwardRef as forwardRef29 } from "react";
2954
+ var ToastProvider = ToastProviderPrimitive;
2955
+ var ToastViewport = /* @__PURE__ */ forwardRef29(({ classNames, ...props }, forwardedRef) => {
2956
+ const { tx } = useThemeContext();
2957
+ return /* @__PURE__ */ React33.createElement(ToastViewportPrimitive, {
2958
+ className: tx("toast.viewport", {}, classNames),
2959
+ ref: forwardedRef
2960
+ });
2961
+ });
2962
+ var ToastRoot = /* @__PURE__ */ forwardRef29(({ classNames, children, ...props }, forwardedRef) => {
2963
+ const { tx } = useThemeContext();
2964
+ return /* @__PURE__ */ React33.createElement(ToastRootPrimitive, {
2965
+ ...props,
2966
+ className: tx("toast.root", {}, classNames),
2967
+ ref: forwardedRef
2968
+ }, /* @__PURE__ */ React33.createElement(ElevationProvider, {
2969
+ elevation: "toast"
2970
+ }, children));
2971
+ });
2972
+ var ToastBody = /* @__PURE__ */ forwardRef29(({ asChild, classNames, ...props }, forwardedRef) => {
2973
+ const { tx } = useThemeContext();
2974
+ const Root8 = asChild ? Slot14 : Primitive13.div;
2975
+ return /* @__PURE__ */ React33.createElement(Root8, {
2976
+ ...props,
2977
+ className: tx("toast.body", {}, classNames),
2978
+ ref: forwardedRef
2979
+ });
2980
+ });
2981
+ var ToastTitle = /* @__PURE__ */ forwardRef29(({ asChild, classNames, ...props }, forwardedRef) => {
2982
+ const { tx } = useThemeContext();
2983
+ const Root8 = asChild ? Slot14 : ToastTitlePrimitive;
2984
+ return /* @__PURE__ */ React33.createElement(Root8, {
2985
+ ...props,
2986
+ className: tx("toast.title", {}, classNames),
2987
+ ref: forwardedRef
2988
+ });
2989
+ });
2990
+ var ToastDescription = /* @__PURE__ */ forwardRef29(({ asChild, classNames, ...props }, forwardedRef) => {
2991
+ const { tx } = useThemeContext();
2992
+ const Root8 = asChild ? Slot14 : ToastDescriptionPrimitive;
2993
+ return /* @__PURE__ */ React33.createElement(Root8, {
2994
+ ...props,
2995
+ className: tx("toast.description", {}, classNames),
2996
+ ref: forwardedRef
2997
+ });
2998
+ });
2999
+ var ToastActions = /* @__PURE__ */ forwardRef29(({ asChild, classNames, ...props }, forwardedRef) => {
3000
+ const { tx } = useThemeContext();
3001
+ const Root8 = asChild ? Slot14 : Primitive13.div;
3002
+ return /* @__PURE__ */ React33.createElement(Root8, {
3003
+ ...props,
3004
+ className: tx("toast.actions", {}, classNames),
3005
+ ref: forwardedRef
3006
+ });
3007
+ });
3008
+ var ToastAction = ToastActionPrimitive;
3009
+ var ToastClose = ToastClosePrimitive;
3010
+ var Toast = {
3011
+ Provider: ToastProvider,
3012
+ Viewport: ToastViewport,
3013
+ Root: ToastRoot,
3014
+ Body: ToastBody,
3015
+ Title: ToastTitle,
3016
+ Description: ToastDescription,
3017
+ Actions: ToastActions,
3018
+ Action: ToastAction,
3019
+ Close: ToastClose
3020
+ };
3021
+
3022
+ // src/components/Toolbar/Toolbar.tsx
3023
+ import * as ToolbarPrimitive from "@radix-ui/react-toolbar";
3024
+ import React34, { Fragment, forwardRef as forwardRef30 } from "react";
3025
+ var ToolbarRoot = /* @__PURE__ */ forwardRef30(({ classNames, children, density, disabled, layoutManaged, textBlockWidth: textBlockWidthProp, ...props }, forwardedRef) => {
3026
+ const { tx } = useThemeContext();
3027
+ const InnerRoot = textBlockWidthProp ? "div" : Fragment;
3028
+ const innerRootProps = textBlockWidthProp ? {
3029
+ role: "none",
3030
+ className: tx("toolbar.inner", {
3031
+ layoutManaged
3032
+ }, classNames)
3033
+ } : {};
3034
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Root, {
3035
+ ...props,
3036
+ "data-arrow-keys": props.orientation === "vertical" ? "up down" : "left right",
3037
+ className: tx("toolbar.root", {
3038
+ density,
3039
+ disabled,
3040
+ layoutManaged
3041
+ }, classNames),
3042
+ ref: forwardedRef
3043
+ }, /* @__PURE__ */ React34.createElement(InnerRoot, innerRootProps, children));
3044
+ });
3045
+ var ToolbarButton = /* @__PURE__ */ forwardRef30((props, forwardedRef) => {
3046
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Button, {
3047
+ asChild: true
3048
+ }, /* @__PURE__ */ React34.createElement(Button, {
3049
+ ...props,
3050
+ ref: forwardedRef
3051
+ }));
3052
+ });
3053
+ var ToolbarIconButton = /* @__PURE__ */ forwardRef30((props, forwardedRef) => {
3054
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Button, {
3055
+ asChild: true
3056
+ }, /* @__PURE__ */ React34.createElement(IconButton, {
3057
+ ...props,
3058
+ noTooltip: true,
3059
+ ref: forwardedRef
3060
+ }));
3061
+ });
3062
+ var ToolbarToggle = /* @__PURE__ */ forwardRef30((props, forwardedRef) => {
3063
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Button, {
3064
+ asChild: true
3065
+ }, /* @__PURE__ */ React34.createElement(Toggle, {
3066
+ ...props,
3067
+ ref: forwardedRef
3068
+ }));
3069
+ });
3070
+ var ToolbarLink = /* @__PURE__ */ forwardRef30((props, forwardedRef) => {
3071
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Link, {
3072
+ asChild: true
3073
+ }, /* @__PURE__ */ React34.createElement(Link, {
3074
+ ...props,
3075
+ ref: forwardedRef
3076
+ }));
3077
+ });
3078
+ var ToolbarToggleGroup2 = /* @__PURE__ */ forwardRef30(({ classNames, children, elevation, ...props }, forwardedRef) => {
3079
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.ToolbarToggleGroup, {
3080
+ ...props,
3081
+ asChild: true
3082
+ }, /* @__PURE__ */ React34.createElement(ButtonGroup, {
3083
+ classNames,
3084
+ children,
3085
+ elevation,
3086
+ ref: forwardedRef
3087
+ }));
3088
+ });
3089
+ var ToolbarToggleGroupItem = /* @__PURE__ */ forwardRef30(({ variant, density, elevation, classNames, children, ...props }, forwardedRef) => {
3090
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.ToolbarToggleItem, {
3091
+ ...props,
3092
+ asChild: true
3093
+ }, /* @__PURE__ */ React34.createElement(Button, {
3094
+ variant,
3095
+ density,
3096
+ elevation,
3097
+ classNames,
3098
+ children,
3099
+ ref: forwardedRef
3100
+ }));
3101
+ });
3102
+ var ToolbarToggleGroupIconItem = /* @__PURE__ */ forwardRef30(({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
3103
+ return /* @__PURE__ */ React34.createElement(ToolbarPrimitive.ToolbarToggleItem, {
3104
+ ...props,
3105
+ asChild: true
3106
+ }, /* @__PURE__ */ React34.createElement(IconButton, {
3107
+ variant,
3108
+ density,
3109
+ elevation,
3110
+ classNames,
3111
+ icon,
3112
+ label,
3113
+ iconOnly,
3114
+ ref: forwardedRef
3115
+ }));
3116
+ });
3117
+ var ToolbarSeparator = /* @__PURE__ */ forwardRef30(({ variant = "line", ...props }, forwardedRef) => {
3118
+ return variant === "line" ? /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Separator, {
3119
+ asChild: true
3120
+ }, /* @__PURE__ */ React34.createElement(Separator4, {
3121
+ ...props,
3122
+ ref: forwardedRef
3123
+ })) : /* @__PURE__ */ React34.createElement(ToolbarPrimitive.Separator, {
3124
+ className: "grow",
3125
+ ref: forwardedRef
3126
+ });
3127
+ });
3128
+ var Toolbar = {
3129
+ Root: ToolbarRoot,
3130
+ Button: ToolbarButton,
3131
+ IconButton: ToolbarIconButton,
3132
+ Link: ToolbarLink,
3133
+ Toggle: ToolbarToggle,
3134
+ ToggleGroup: ToolbarToggleGroup2,
3135
+ ToggleGroupItem: ToolbarToggleGroupItem,
3136
+ ToggleGroupIconItem: ToolbarToggleGroupIconItem,
3137
+ Separator: ToolbarSeparator
3138
+ };
3139
+
3140
+ // src/primitives/Container/Container.tsx
3141
+ import { createContext as createContext10 } from "@radix-ui/react-context";
3142
+ import { Primitive as Primitive14 } from "@radix-ui/react-primitive";
3143
+ import { Slot as Slot15 } from "@radix-ui/react-slot";
3144
+ import React35, { forwardRef as forwardRef31 } from "react";
3145
+ var [ContainerProvider, useContext4] = createContext10("Container");
3146
+ var Root7 = ({ variant, children }) => {
3147
+ return /* @__PURE__ */ React35.createElement(ContainerProvider, {
3148
+ variant
3149
+ }, children);
3150
+ };
3151
+ var CONTAINER_COLUMN_NAME = "Container.Column";
3152
+ var Column = /* @__PURE__ */ forwardRef31(({ classNames, className, asChild, role = "none", children, variant, ...props }, ref) => {
3153
+ const { tx } = useThemeContext();
3154
+ const Root8 = asChild ? Slot15 : Primitive14.div;
3155
+ const context = useContext4(CONTAINER_COLUMN_NAME);
3156
+ return /* @__PURE__ */ React35.createElement(Root8, {
3157
+ ...props,
3158
+ className: tx("container.column", {
3159
+ variant: variant ?? context.variant
3160
+ }, [
3161
+ className,
3162
+ classNames
3163
+ ]),
3164
+ role,
3165
+ ref
3166
+ }, children);
3167
+ });
3168
+ Column.displayName = CONTAINER_COLUMN_NAME;
3169
+ var Container = {
3170
+ Root: Root7,
3171
+ Column
3172
+ };
3173
+
3174
+ // src/primitives/Container/Layout.tsx
3175
+ import React36, { forwardRef as forwardRef32, useMemo as useMemo6 } from "react";
3176
+ import { mx as mx6 } from "@dxos/ui-theme";
3177
+ var Main2 = /* @__PURE__ */ forwardRef32(({ classNames, children, role, toolbar, statusbar }, forwardedRef) => {
3178
+ const style = useMemo6(() => ({
3179
+ gridTemplateRows: [
3180
+ toolbar && "var(--toolbar-size)",
3181
+ "1fr",
3182
+ statusbar && "var(--statusbar-size)"
3183
+ ].filter(Boolean).join(" ")
3184
+ }), [
3185
+ toolbar,
3186
+ statusbar
3187
+ ]);
3188
+ return /* @__PURE__ */ React36.createElement("div", {
3189
+ ref: forwardedRef,
3190
+ role: role ?? "none",
3191
+ style,
3192
+ className: mx6("bs-full is-full grid grid-cols-[100%] overflow-hidden", toolbar && [
3193
+ "[.dx-main-mobile-layout_&>.dx-toolbar]:pli-3 [&>.dx-toolbar]:relative",
3194
+ "[&>.dx-toolbar]:border-be [&>.dx-toolbar]:border-subduedSeparator"
3195
+ ], classNames)
3196
+ }, children);
3197
+ });
3198
+ var Layout = {
3199
+ Main: Main2
3200
+ };
3201
+
3202
+ // src/primitives/Flex/Flex.tsx
3203
+ import React37 from "react";
3204
+ import { mx as mx7 } from "@dxos/ui-theme";
3205
+ var Flex = ({ children, classNames, role, column, grow }) => {
3206
+ return /* @__PURE__ */ React37.createElement("div", {
3207
+ role: role ?? "none",
3208
+ className: mx7("flex", column && "flex-col", grow && "flex-1 overflow-hidden", classNames)
3209
+ }, children);
3210
+ };
79
3211
  export {
80
3212
  AlertDialog,
81
3213
  AnchoredOverflow,
@@ -86,18 +3218,21 @@ export {
86
3218
  ButtonGroup,
87
3219
  Callout,
88
3220
  Clipboard,
89
- ContextMenu,
3221
+ Container,
3222
+ ContextMenu2 as ContextMenu,
90
3223
  DensityContext,
91
3224
  DensityProvider,
92
3225
  Dialog,
93
3226
  DropdownMenu,
94
3227
  ElevationContext,
95
3228
  ElevationProvider,
3229
+ Flex,
96
3230
  Icon,
97
3231
  IconButton,
98
3232
  Input,
99
3233
  LIST_ITEM_NAME,
100
3234
  LIST_NAME,
3235
+ Layout,
101
3236
  Link,
102
3237
  List,
103
3238
  ListItem,
@@ -105,8 +3240,11 @@ export {
105
3240
  Message,
106
3241
  Popover,
107
3242
  ScrollArea,
3243
+ ScrollContainer,
108
3244
  Select,
109
- Separator,
3245
+ Separator4 as Separator,
3246
+ Skeleton,
3247
+ Splitter,
110
3248
  Status,
111
3249
  Tag,
112
3250
  ThemeContext,
@@ -114,6 +3252,7 @@ export {
114
3252
  Toast,
115
3253
  Toggle,
116
3254
  ToggleGroup,
3255
+ ToggleGroupIconItem,
117
3256
  ToggleGroupItem,
118
3257
  Toolbar,
119
3258
  Tooltip,
@@ -123,6 +3262,7 @@ export {
123
3262
  Treegrid,
124
3263
  createDropdownMenuScope,
125
3264
  createPopoverScope,
3265
+ createSplitterScope,
126
3266
  createTooltipScope,
127
3267
  hasIosKeyboard,
128
3268
  initialSafeArea,
@@ -141,7 +3281,9 @@ export {
141
3281
  useListContext,
142
3282
  useListItemContext,
143
3283
  useMainContext,
3284
+ usePx,
144
3285
  useSafeArea,
3286
+ useScrollContainerContext,
145
3287
  useSidebars,
146
3288
  useThemeContext,
147
3289
  useTooltipContext,