@dxos/react-ui 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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