@dxos/react-ui 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef

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