@dxos/react-ui 0.8.4-main.84f28bd → 0.8.4-main.937b3ca

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