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