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