@dxos/react-ui 0.8.4-main.406dc2a → 0.8.4-main.59c2e9b

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