@dxos/react-ui 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d

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 (245) hide show
  1. package/dist/lib/browser/{chunk-P333G32W.mjs → chunk-N5GDJTT2.mjs} +632 -299
  2. package/dist/lib/browser/chunk-N5GDJTT2.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +12 -1
  4. package/dist/lib/browser/index.mjs.map +2 -2
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +57 -29
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-JRCE5UVS.mjs → chunk-SP7VQH72.mjs} +632 -299
  9. package/dist/lib/node-esm/chunk-SP7VQH72.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +12 -1
  11. package/dist/lib/node-esm/index.mjs.map +2 -2
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +57 -29
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Avatars/Avatar.stories.d.ts +0 -6
  16. package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts +0 -6
  18. package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts +0 -6
  20. package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
  21. package/dist/types/src/components/{Buttons → Button}/Button.d.ts +1 -1
  22. package/dist/types/src/components/Button/Button.d.ts.map +1 -0
  23. package/dist/types/src/components/{Buttons → Button}/Button.stories.d.ts +1 -7
  24. package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -0
  25. package/dist/types/src/components/{Buttons → Button}/IconButton.d.ts +1 -2
  26. package/dist/types/src/components/Button/IconButton.d.ts.map +1 -0
  27. package/dist/types/src/components/{Buttons → Button}/IconButton.stories.d.ts +0 -6
  28. package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -0
  29. package/dist/types/src/components/Button/Toggle.d.ts.map +1 -0
  30. package/dist/types/src/components/Button/Toggle.stories.d.ts +16 -0
  31. package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -0
  32. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.d.ts +6 -7
  33. package/dist/types/src/components/Button/ToggleGroup.d.ts.map +1 -0
  34. package/dist/types/src/components/{Buttons → Button}/ToggleGroup.stories.d.ts +2 -12
  35. package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -0
  36. package/dist/types/src/components/Button/index.d.ts.map +1 -0
  37. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -1
  38. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  39. package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -0
  40. package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.stories.d.ts +0 -6
  41. package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -0
  42. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -0
  43. package/dist/types/src/components/{Dialogs → Dialog}/Dialog.stories.d.ts +0 -1
  44. package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -0
  45. package/dist/types/src/components/Dialog/index.d.ts.map +1 -0
  46. package/dist/types/src/components/Icon/Icon.d.ts +1 -1
  47. package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
  48. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  49. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  50. package/dist/types/src/components/Input/Input.d.ts +0 -2
  51. package/dist/types/src/components/Input/Input.d.ts.map +1 -1
  52. package/dist/types/src/components/Input/Input.stories.d.ts +0 -6
  53. package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
  54. package/dist/types/src/components/Link/Link.stories.d.ts +0 -6
  55. package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
  56. package/dist/types/src/components/List/List.d.ts.map +1 -0
  57. package/dist/types/src/components/{Lists → List}/List.stories.d.ts +0 -6
  58. package/dist/types/src/components/List/List.stories.d.ts.map +1 -0
  59. package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -0
  60. package/dist/types/src/components/List/Tree.d.ts.map +1 -0
  61. package/dist/types/src/components/{Lists → List}/Tree.stories.d.ts +0 -6
  62. package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -0
  63. package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -0
  64. package/dist/types/src/components/{Lists → List}/Treegrid.d.ts.map +1 -1
  65. package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/List/index.d.ts.map +1 -0
  67. package/dist/types/src/components/Main/Main.d.ts +9 -18
  68. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  69. package/dist/types/src/components/Main/Main.stories.d.ts +1 -2
  70. package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
  71. package/dist/types/src/components/Menus/ContextMenu.d.ts.map +1 -1
  72. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts +0 -6
  73. package/dist/types/src/components/Menus/ContextMenu.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/Menus/DropdownMenu.d.ts +7 -7
  75. package/dist/types/src/components/Menus/DropdownMenu.d.ts.map +1 -1
  76. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts +0 -6
  77. package/dist/types/src/components/Menus/DropdownMenu.stories.d.ts.map +1 -1
  78. package/dist/types/src/components/Message/Message.stories.d.ts +0 -1
  79. package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/Popover/Popover.d.ts +1 -1
  81. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  82. package/dist/types/src/components/Popover/Popover.stories.d.ts +0 -6
  83. package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +0 -6
  85. package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
  86. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +37 -0
  87. package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -0
  88. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts +18 -0
  89. package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -0
  90. package/dist/types/src/components/ScrollContainer/index.d.ts +2 -0
  91. package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -0
  92. package/dist/types/src/components/Select/Select.d.ts +1 -1
  93. package/dist/types/src/components/Select/Select.d.ts.map +1 -1
  94. package/dist/types/src/components/Select/Select.stories.d.ts +0 -6
  95. package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
  96. package/dist/types/src/components/Status/Status.stories.d.ts +0 -6
  97. package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/Tag/Tag.stories.d.ts +8 -8
  99. package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/Toast/Toast.stories.d.ts +0 -6
  101. package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Toolbar/Toolbar.d.ts +12 -12
  103. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  104. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +0 -6
  105. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/Tooltip/Tooltip.d.ts +1 -3
  107. package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  108. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts +0 -6
  109. package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/index.d.ts +4 -3
  111. package/dist/types/src/components/index.d.ts.map +1 -1
  112. package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
  113. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  114. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  115. package/dist/types/src/index.d.ts +1 -1
  116. package/dist/types/src/index.d.ts.map +1 -1
  117. package/dist/types/src/playground/Controls.stories.d.ts +0 -6
  118. package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
  119. package/dist/types/src/playground/Custom.stories.d.ts +1 -2
  120. package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
  121. package/dist/types/src/playground/Typography.stories.d.ts +0 -6
  122. package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
  123. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  124. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  125. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  126. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  127. package/dist/types/src/testing/decorators/{withSurfaceVariantsLayout.d.ts → withLayoutVariants.d.ts} +2 -2
  128. package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -0
  129. package/dist/types/src/testing/decorators/withTheme.d.ts +3 -0
  130. package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
  131. package/dist/types/src/util/domino.d.ts +18 -0
  132. package/dist/types/src/util/domino.d.ts.map +1 -0
  133. package/dist/types/src/util/index.d.ts +2 -0
  134. package/dist/types/src/util/index.d.ts.map +1 -1
  135. package/dist/types/src/util/usePx.d.ts +8 -0
  136. package/dist/types/src/util/usePx.d.ts.map +1 -0
  137. package/dist/types/tsconfig.tsbuildinfo +1 -1
  138. package/package.json +24 -23
  139. package/src/components/Avatars/Avatar.stories.tsx +0 -2
  140. package/src/components/Avatars/AvatarGroup.stories.tsx +0 -3
  141. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -4
  142. package/src/components/{Buttons → Button}/Button.stories.tsx +3 -5
  143. package/src/components/{Buttons → Button}/IconButton.stories.tsx +0 -3
  144. package/src/components/{Buttons → Button}/IconButton.tsx +14 -13
  145. package/src/components/{Buttons → Button}/Toggle.stories.tsx +5 -7
  146. package/src/components/{Buttons → Button}/ToggleGroup.stories.tsx +0 -3
  147. package/src/components/{Buttons → Button}/ToggleGroup.tsx +14 -1
  148. package/src/components/Clipboard/CopyButton.tsx +1 -1
  149. package/src/components/{Dialogs → Dialog}/AlertDialog.stories.tsx +1 -4
  150. package/src/components/{Dialogs → Dialog}/Dialog.stories.tsx +6 -4
  151. package/src/components/Icon/Icon.stories.tsx +113 -0
  152. package/src/components/Icon/Icon.tsx +1 -1
  153. package/src/components/Input/Input.stories.tsx +0 -3
  154. package/src/components/Input/Input.tsx +3 -3
  155. package/src/components/Link/Link.stories.tsx +0 -3
  156. package/src/components/{Lists → List}/List.stories.tsx +2 -6
  157. package/src/components/{Lists → List}/ListDropIndicator.tsx +1 -1
  158. package/src/components/{Lists → List}/Tree.stories.tsx +0 -3
  159. package/src/components/{Lists → List}/Treegrid.tsx +57 -16
  160. package/src/components/Main/Main.stories.tsx +4 -4
  161. package/src/components/Main/Main.tsx +28 -19
  162. package/src/components/Menus/ContextMenu.stories.tsx +0 -3
  163. package/src/components/Menus/ContextMenu.tsx +1 -0
  164. package/src/components/Menus/DropdownMenu.stories.tsx +1 -4
  165. package/src/components/Menus/DropdownMenu.tsx +37 -8
  166. package/src/components/Message/Message.stories.tsx +0 -2
  167. package/src/components/Popover/Popover.stories.tsx +1 -4
  168. package/src/components/Popover/Popover.tsx +22 -5
  169. package/src/components/ScrollArea/ScrollArea.stories.tsx +1 -4
  170. package/src/components/ScrollContainer/ScrollContainer.stories.tsx +69 -0
  171. package/src/components/ScrollContainer/ScrollContainer.tsx +231 -0
  172. package/src/components/ScrollContainer/index.ts +5 -0
  173. package/src/components/Select/Select.stories.tsx +3 -5
  174. package/src/components/Select/Select.tsx +5 -4
  175. package/src/components/Status/Status.stories.tsx +0 -3
  176. package/src/components/Tag/Tag.stories.tsx +8 -7
  177. package/src/components/Toast/Toast.stories.tsx +1 -4
  178. package/src/components/Toolbar/Toolbar.stories.tsx +2 -7
  179. package/src/components/Toolbar/Toolbar.tsx +18 -6
  180. package/src/components/Tooltip/Tooltip.stories.tsx +1 -4
  181. package/src/components/Tooltip/Tooltip.tsx +2 -1
  182. package/src/components/index.ts +4 -3
  183. package/src/hooks/useSafeArea.ts +3 -2
  184. package/src/hooks/useVisualViewport.ts +4 -4
  185. package/src/index.ts +1 -1
  186. package/src/playground/Controls.stories.tsx +3 -5
  187. package/src/playground/Custom.stories.tsx +9 -20
  188. package/src/playground/Typography.stories.tsx +0 -3
  189. package/src/testing/decorators/index.ts +2 -1
  190. package/src/testing/decorators/withLayout.tsx +56 -0
  191. package/src/testing/decorators/{withSurfaceVariantsLayout.tsx → withLayoutVariants.tsx} +2 -2
  192. package/src/testing/decorators/withTheme.tsx +31 -0
  193. package/src/util/domino.ts +53 -0
  194. package/src/util/index.ts +2 -0
  195. package/src/util/usePx.ts +61 -0
  196. package/dist/lib/browser/chunk-P333G32W.mjs.map +0 -7
  197. package/dist/lib/node-esm/chunk-JRCE5UVS.mjs.map +0 -7
  198. package/dist/types/src/components/Buttons/Button.d.ts.map +0 -1
  199. package/dist/types/src/components/Buttons/Button.stories.d.ts.map +0 -1
  200. package/dist/types/src/components/Buttons/IconButton.d.ts.map +0 -1
  201. package/dist/types/src/components/Buttons/IconButton.stories.d.ts.map +0 -1
  202. package/dist/types/src/components/Buttons/Toggle.d.ts.map +0 -1
  203. package/dist/types/src/components/Buttons/Toggle.stories.d.ts +0 -19
  204. package/dist/types/src/components/Buttons/Toggle.stories.d.ts.map +0 -1
  205. package/dist/types/src/components/Buttons/ToggleGroup.d.ts.map +0 -1
  206. package/dist/types/src/components/Buttons/ToggleGroup.stories.d.ts.map +0 -1
  207. package/dist/types/src/components/Buttons/index.d.ts.map +0 -1
  208. package/dist/types/src/components/Dialogs/AlertDialog.d.ts.map +0 -1
  209. package/dist/types/src/components/Dialogs/AlertDialog.stories.d.ts.map +0 -1
  210. package/dist/types/src/components/Dialogs/Dialog.d.ts.map +0 -1
  211. package/dist/types/src/components/Dialogs/Dialog.stories.d.ts.map +0 -1
  212. package/dist/types/src/components/Dialogs/index.d.ts.map +0 -1
  213. package/dist/types/src/components/Lists/List.d.ts.map +0 -1
  214. package/dist/types/src/components/Lists/List.stories.d.ts.map +0 -1
  215. package/dist/types/src/components/Lists/ListDropIndicator.d.ts.map +0 -1
  216. package/dist/types/src/components/Lists/Tree.d.ts.map +0 -1
  217. package/dist/types/src/components/Lists/Tree.stories.d.ts.map +0 -1
  218. package/dist/types/src/components/Lists/TreeDropIndicator.d.ts.map +0 -1
  219. package/dist/types/src/components/Lists/Treegrid.stories.d.ts.map +0 -1
  220. package/dist/types/src/components/Lists/index.d.ts.map +0 -1
  221. package/dist/types/src/testing/decorators/withSurfaceVariantsLayout.d.ts.map +0 -1
  222. package/src/testing/decorators/withTheme.ts +0 -25
  223. /package/dist/types/src/components/{Buttons → Button}/Toggle.d.ts +0 -0
  224. /package/dist/types/src/components/{Buttons → Button}/index.d.ts +0 -0
  225. /package/dist/types/src/components/{Dialogs → Dialog}/AlertDialog.d.ts +0 -0
  226. /package/dist/types/src/components/{Dialogs → Dialog}/Dialog.d.ts +0 -0
  227. /package/dist/types/src/components/{Dialogs → Dialog}/index.d.ts +0 -0
  228. /package/dist/types/src/components/{Lists → List}/List.d.ts +0 -0
  229. /package/dist/types/src/components/{Lists → List}/ListDropIndicator.d.ts +0 -0
  230. /package/dist/types/src/components/{Lists → List}/Tree.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/src/components/{Buttons → Button}/Button.tsx +0 -0
  236. /package/src/components/{Buttons → Button}/Toggle.tsx +0 -0
  237. /package/src/components/{Buttons → Button}/index.ts +0 -0
  238. /package/src/components/{Dialogs → Dialog}/AlertDialog.tsx +0 -0
  239. /package/src/components/{Dialogs → Dialog}/Dialog.tsx +0 -0
  240. /package/src/components/{Dialogs → Dialog}/index.ts +0 -0
  241. /package/src/components/{Lists → List}/List.tsx +0 -0
  242. /package/src/components/{Lists → List}/Tree.tsx +0 -0
  243. /package/src/components/{Lists → List}/TreeDropIndicator.tsx +0 -0
  244. /package/src/components/{Lists → List}/Treegrid.stories.tsx +0 -0
  245. /package/src/components/{Lists → List}/index.ts +0 -0
@@ -29,7 +29,7 @@ var useIconHref = (icon) => {
29
29
 
30
30
  // src/hooks/useSafeArea.ts
31
31
  import { useCallback, useState } from "react";
32
- import { useResize } from "@dxos/react-hooks";
32
+ import { useViewportResize } from "@dxos/react-hooks";
33
33
  var initialSafeArea = {
34
34
  top: NaN,
35
35
  right: NaN,
@@ -46,7 +46,7 @@ var useSafeArea = () => {
46
46
  left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--safe-area-left"))
47
47
  });
48
48
  }, []);
49
- useResize(handleResize);
49
+ useViewportResize(handleResize);
50
50
  return padding;
51
51
  };
52
52
 
@@ -128,7 +128,7 @@ var useTranslationsContext = () => useContext4(TranslationsContext);
128
128
 
129
129
  // src/hooks/useVisualViewport.ts
130
130
  import { useCallback as useCallback2, useState as useState3 } from "react";
131
- import { useResize as useResize2 } from "@dxos/react-hooks";
131
+ import { useViewportResize as useViewportResize2 } from "@dxos/react-hooks";
132
132
  var useVisualViewport = (deps) => {
133
133
  const [width, setWidth] = useState3(null);
134
134
  const [height, setHeight] = useState3(null);
@@ -138,7 +138,7 @@ var useVisualViewport = (deps) => {
138
138
  setHeight(window.visualViewport.height);
139
139
  }
140
140
  }, []);
141
- useResize2(handleResize);
141
+ useViewportResize2(handleResize, deps);
142
142
  return {
143
143
  width,
144
144
  height
@@ -150,8 +150,8 @@ var AnchoredOverflowRoot = /* @__PURE__ */ forwardRef(({ asChild, classNames, ch
150
150
  var _effect = _useSignals2();
151
151
  try {
152
152
  const { tx } = useThemeContext();
153
- const Root7 = asChild ? Slot : Primitive.div;
154
- return /* @__PURE__ */ React2.createElement(Root7, {
153
+ const Root8 = asChild ? Slot : Primitive.div;
154
+ return /* @__PURE__ */ React2.createElement(Root8, {
155
155
  role: "none",
156
156
  ...props,
157
157
  className: tx("anchoredOverflow.root", "overflow-anchored", {}, classNames),
@@ -165,8 +165,8 @@ var AnchoredOverflowAnchor = /* @__PURE__ */ forwardRef(({ asChild, classNames,
165
165
  var _effect = _useSignals2();
166
166
  try {
167
167
  const { tx } = useThemeContext();
168
- const Root7 = asChild ? Slot : Primitive.div;
169
- return /* @__PURE__ */ React2.createElement(Root7, {
168
+ const Root8 = asChild ? Slot : Primitive.div;
169
+ return /* @__PURE__ */ React2.createElement(Root8, {
170
170
  role: "none",
171
171
  ...props,
172
172
  className: tx("anchoredOverflow.anchor", "overflow-anchor", {}, classNames),
@@ -226,10 +226,10 @@ var AvatarContent = /* @__PURE__ */ forwardRef2(({ icon, classNames, ...props },
226
226
  var AvatarLabel = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
227
227
  var _effect = _useSignals3();
228
228
  try {
229
- const Root7 = asChild ? Slot2 : Primitive2.span;
229
+ const Root8 = asChild ? Slot2 : Primitive2.span;
230
230
  const { tx } = useThemeContext();
231
231
  const { labelId } = useAvatarContext("AvatarLabel");
232
- return /* @__PURE__ */ React3.createElement(Root7, {
232
+ return /* @__PURE__ */ React3.createElement(Root8, {
233
233
  ...props,
234
234
  id: labelId,
235
235
  ref: forwardedRef,
@@ -244,10 +244,10 @@ var AvatarLabel = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ..
244
244
  var AvatarDescription = /* @__PURE__ */ forwardRef2(({ asChild, srOnly, classNames, ...props }, forwardedRef) => {
245
245
  var _effect = _useSignals3();
246
246
  try {
247
- const Root7 = asChild ? Slot2 : Primitive2.span;
247
+ const Root8 = asChild ? Slot2 : Primitive2.span;
248
248
  const { tx } = useThemeContext();
249
249
  const { descriptionId } = useAvatarContext("AvatarDescription");
250
- return /* @__PURE__ */ React3.createElement(Root7, {
250
+ return /* @__PURE__ */ React3.createElement(Root8, {
251
251
  ...props,
252
252
  id: descriptionId,
253
253
  ref: forwardedRef,
@@ -275,7 +275,7 @@ import React6, { forwardRef as forwardRef5 } from "react";
275
275
  // src/components/Icon/Icon.tsx
276
276
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
277
277
  import React4, { forwardRef as forwardRef3, memo } from "react";
278
- var Icon = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef3(({ icon, classNames, size, ...props }, forwardedRef) => {
278
+ var Icon = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef3(({ icon, classNames, size = 4, ...props }, forwardedRef) => {
279
279
  var _effect = _useSignals4();
280
280
  try {
281
281
  const { tx } = useThemeContext();
@@ -303,8 +303,8 @@ var Link = /* @__PURE__ */ forwardRef4(({ asChild, variant, classNames, ...props
303
303
  var _effect = _useSignals5();
304
304
  try {
305
305
  const { tx } = useThemeContext();
306
- const Root7 = asChild ? Slot3 : Primitive3.a;
307
- return /* @__PURE__ */ React5.createElement(Root7, {
306
+ const Root8 = asChild ? Slot3 : Primitive3.a;
307
+ return /* @__PURE__ */ React5.createElement(Root8, {
308
308
  ...props,
309
309
  className: tx("link.root", "link", {
310
310
  variant
@@ -321,8 +321,8 @@ var BreadcrumbRoot = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...prop
321
321
  var _effect = _useSignals6();
322
322
  try {
323
323
  const { tx } = useThemeContext();
324
- const Root7 = asChild ? Slot4 : Primitive4.div;
325
- return /* @__PURE__ */ React6.createElement(Root7, {
324
+ const Root8 = asChild ? Slot4 : Primitive4.div;
325
+ return /* @__PURE__ */ React6.createElement(Root8, {
326
326
  role: "navigation",
327
327
  ...props,
328
328
  className: tx("breadcrumb.root", "breadcrumb", {}, classNames),
@@ -336,8 +336,8 @@ var BreadcrumbList = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...prop
336
336
  var _effect = _useSignals6();
337
337
  try {
338
338
  const { tx } = useThemeContext();
339
- const Root7 = asChild ? Slot4 : Primitive4.ol;
340
- return /* @__PURE__ */ React6.createElement(Root7, {
339
+ const Root8 = asChild ? Slot4 : Primitive4.ol;
340
+ return /* @__PURE__ */ React6.createElement(Root8, {
341
341
  role: "list",
342
342
  ...props,
343
343
  className: tx("breadcrumb.list", "breadcrumb__list", {}, classNames),
@@ -351,8 +351,8 @@ var BreadcrumbListItem = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...
351
351
  var _effect = _useSignals6();
352
352
  try {
353
353
  const { tx } = useThemeContext();
354
- const Root7 = asChild ? Slot4 : Primitive4.li;
355
- return /* @__PURE__ */ React6.createElement(Root7, {
354
+ const Root8 = asChild ? Slot4 : Primitive4.li;
355
+ return /* @__PURE__ */ React6.createElement(Root8, {
356
356
  role: "listitem",
357
357
  ...props,
358
358
  className: tx("breadcrumb.listItem", "breadcrumb__list__item", {}, classNames),
@@ -365,8 +365,8 @@ var BreadcrumbListItem = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...
365
365
  var BreadcrumbLink = /* @__PURE__ */ forwardRef5(({ asChild, ...props }, forwardedRef) => {
366
366
  var _effect = _useSignals6();
367
367
  try {
368
- const Root7 = asChild ? Slot4 : Link;
369
- return /* @__PURE__ */ React6.createElement(Root7, {
368
+ const Root8 = asChild ? Slot4 : Link;
369
+ return /* @__PURE__ */ React6.createElement(Root8, {
370
370
  ...props,
371
371
  ref: forwardedRef
372
372
  });
@@ -378,8 +378,8 @@ var BreadcrumbCurrent = /* @__PURE__ */ forwardRef5(({ asChild, classNames, ...p
378
378
  var _effect = _useSignals6();
379
379
  try {
380
380
  const { tx } = useThemeContext();
381
- const Root7 = asChild ? Slot4 : "h1";
382
- return /* @__PURE__ */ React6.createElement(Root7, {
381
+ const Root8 = asChild ? Slot4 : "h1";
382
+ return /* @__PURE__ */ React6.createElement(Root8, {
383
383
  ...props,
384
384
  "aria-current": "page",
385
385
  className: tx("breadcrumb.current", "breadcrumb__item__heading--current", {}, classNames),
@@ -414,7 +414,7 @@ var Breadcrumb = {
414
414
  Separator: BreadcrumbSeparator
415
415
  };
416
416
 
417
- // src/components/Buttons/Button.tsx
417
+ // src/components/Button/Button.tsx
418
418
  import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
419
419
  import { createContext as createContext3 } from "@radix-ui/react-context";
420
420
  import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
@@ -432,8 +432,8 @@ var Button = /* @__PURE__ */ memo2(/* @__PURE__ */ forwardRef6(({ classNames, ch
432
432
  const { tx } = useThemeContext();
433
433
  const elevation = useElevationContext(propsElevation);
434
434
  const density = useDensityContext(propsDensity);
435
- const Root7 = asChild ? Slot5 : Primitive5.button;
436
- return /* @__PURE__ */ React7.createElement(Root7, {
435
+ const Root8 = asChild ? Slot5 : Primitive5.button;
436
+ return /* @__PURE__ */ React7.createElement(Root8, {
437
437
  ref,
438
438
  ...props,
439
439
  "data-variant": variant,
@@ -460,8 +460,8 @@ var ButtonGroup = /* @__PURE__ */ forwardRef6(({ children, elevation: propsEleva
460
460
  try {
461
461
  const { tx } = useThemeContext();
462
462
  const elevation = useElevationContext(propsElevation);
463
- const Root7 = asChild ? Slot5 : Primitive5.div;
464
- return /* @__PURE__ */ React7.createElement(Root7, {
463
+ const Root8 = asChild ? Slot5 : Primitive5.div;
464
+ return /* @__PURE__ */ React7.createElement(Root8, {
465
465
  role: "none",
466
466
  ...props,
467
467
  className: tx("button.group", "button-group", {
@@ -477,7 +477,7 @@ var ButtonGroup = /* @__PURE__ */ forwardRef6(({ children, elevation: propsEleva
477
477
  });
478
478
  ButtonGroup.displayName = BUTTON_GROUP_NAME;
479
479
 
480
- // src/components/Buttons/IconButton.tsx
480
+ // src/components/Button/IconButton.tsx
481
481
  import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
482
482
  import React9, { forwardRef as forwardRef8 } from "react";
483
483
 
@@ -1104,8 +1104,22 @@ var Tooltip = {
1104
1104
  Trigger: TooltipTrigger
1105
1105
  };
1106
1106
 
1107
- // src/components/Buttons/IconButton.tsx
1108
- var IconOnlyButton = /* @__PURE__ */ forwardRef8(({ noTooltip, tooltipPortal = true, tooltipSide, ...props }, forwardedRef) => {
1107
+ // src/components/Button/IconButton.tsx
1108
+ var IconButton = /* @__PURE__ */ forwardRef8((props, forwardedRef) => {
1109
+ var _effect = _useSignals9();
1110
+ try {
1111
+ return props.iconOnly ? /* @__PURE__ */ React9.createElement(IconOnlyButton, {
1112
+ ...props,
1113
+ ref: forwardedRef
1114
+ }) : /* @__PURE__ */ React9.createElement(LabelledIconButton, {
1115
+ ...props,
1116
+ ref: forwardedRef
1117
+ });
1118
+ } finally {
1119
+ _effect.f();
1120
+ }
1121
+ });
1122
+ var IconOnlyButton = /* @__PURE__ */ forwardRef8(({ noTooltip, tooltipSide, ...props }, forwardedRef) => {
1109
1123
  var _effect = _useSignals9();
1110
1124
  try {
1111
1125
  if (noTooltip) {
@@ -1126,7 +1140,7 @@ var IconOnlyButton = /* @__PURE__ */ forwardRef8(({ noTooltip, tooltipPortal = t
1126
1140
  _effect.f();
1127
1141
  }
1128
1142
  });
1129
- var LabelledIconButton = /* @__PURE__ */ forwardRef8(({ icon, size, iconOnly, label, classNames, iconClassNames, caretDown, ...props }, forwardedRef) => {
1143
+ var LabelledIconButton = /* @__PURE__ */ forwardRef8(({ icon, size = 5, iconOnly, label, classNames, iconClassNames, caretDown, ...props }, forwardedRef) => {
1130
1144
  var _effect = _useSignals9();
1131
1145
  try {
1132
1146
  const { tx } = useThemeContext();
@@ -1136,7 +1150,7 @@ var LabelledIconButton = /* @__PURE__ */ forwardRef8(({ icon, size, iconOnly, la
1136
1150
  iconOnly
1137
1151
  }, classNames),
1138
1152
  ref: forwardedRef
1139
- }, /* @__PURE__ */ React9.createElement(Icon, {
1153
+ }, icon && /* @__PURE__ */ React9.createElement(Icon, {
1140
1154
  icon,
1141
1155
  size,
1142
1156
  classNames: iconClassNames
@@ -1150,22 +1164,8 @@ var LabelledIconButton = /* @__PURE__ */ forwardRef8(({ icon, size, iconOnly, la
1150
1164
  _effect.f();
1151
1165
  }
1152
1166
  });
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
1167
 
1168
- // src/components/Buttons/Toggle.tsx
1168
+ // src/components/Button/Toggle.tsx
1169
1169
  import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
1170
1170
  import { Toggle as TogglePrimitive } from "@radix-ui/react-toggle";
1171
1171
  import React10, { forwardRef as forwardRef9 } from "react";
@@ -1186,7 +1186,7 @@ var Toggle = /* @__PURE__ */ forwardRef9(({ defaultPressed, pressed, onPressedCh
1186
1186
  }
1187
1187
  });
1188
1188
 
1189
- // src/components/Buttons/ToggleGroup.tsx
1189
+ // src/components/Button/ToggleGroup.tsx
1190
1190
  import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
1191
1191
  import { ToggleGroupItem as ToggleGroupItemPrimitive, ToggleGroup as ToggleGroupPrimitive } from "@radix-ui/react-toggle-group";
1192
1192
  import React11, { forwardRef as forwardRef10 } from "react";
@@ -1223,6 +1223,26 @@ var ToggleGroupItem = /* @__PURE__ */ forwardRef10(({ variant, elevation, densit
1223
1223
  _effect.f();
1224
1224
  }
1225
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
+ });
1226
1246
 
1227
1247
  // src/components/Clipboard/ClipboardProvider.tsx
1228
1248
  import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
@@ -1255,18 +1275,103 @@ var ClipboardProvider = ({ children }) => {
1255
1275
  // src/components/Clipboard/CopyButton.tsx
1256
1276
  import { useSignals as _useSignals16 } from "@preact-signals/safe-react/tracking";
1257
1277
  import React16 from "react";
1258
- import { mx as mx2 } from "@dxos/react-ui-theme";
1278
+ import { mx as mx3 } from "@dxos/react-ui-theme";
1259
1279
 
1260
1280
  // src/components/ThemeProvider/ThemeProvider.tsx
1261
1281
  import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
1262
1282
  import { createKeyborg } from "keyborg";
1263
- import React15, { createContext as createContext7, useEffect as useEffect3, useMemo as useMemo2 } from "react";
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
+ var Domino = class _Domino {
1288
+ static of(tag) {
1289
+ return new _Domino(tag);
1290
+ }
1291
+ _el;
1292
+ constructor(tag) {
1293
+ this._el = document.createElement(tag);
1294
+ }
1295
+ classNames(...classNames) {
1296
+ this._el.className = mx2(classNames);
1297
+ return this;
1298
+ }
1299
+ text(value) {
1300
+ this._el.textContent = value;
1301
+ return this;
1302
+ }
1303
+ data(key, value) {
1304
+ this._el.dataset[key] = value;
1305
+ return this;
1306
+ }
1307
+ attributes(attr) {
1308
+ Object.entries(attr).filter(([_, value]) => value !== void 0).map(([key, value]) => this._el.setAttribute(key, value));
1309
+ return this;
1310
+ }
1311
+ style(styles) {
1312
+ Object.assign(this._el.style, styles);
1313
+ return this;
1314
+ }
1315
+ children(...children) {
1316
+ children.forEach((child) => this._el.appendChild(child.build()));
1317
+ return this;
1318
+ }
1319
+ on(event, handler) {
1320
+ this._el.addEventListener(event, handler);
1321
+ return this;
1322
+ }
1323
+ build() {
1324
+ return this._el;
1325
+ }
1326
+ };
1264
1327
 
1265
1328
  // src/util/hasIosKeyboard.ts
1266
1329
  var hasIosKeyboard = () => {
1267
1330
  return !!navigator.userAgent.match(/iP(ad|od|hone).+Safari/);
1268
1331
  };
1269
1332
 
1333
+ // src/util/usePx.ts
1334
+ import { useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo2, useState as useState6 } from "react";
1335
+ var getDocumentElementFontSize = () => parseFloat(getComputedStyle(document.documentElement).fontSize);
1336
+ var usePx = (rem) => {
1337
+ const [fontSize, setFontSize] = useState6(() => {
1338
+ if (typeof document !== "undefined") {
1339
+ return getDocumentElementFontSize();
1340
+ }
1341
+ return 16;
1342
+ });
1343
+ const updateFontSize = useCallback5(() => {
1344
+ setFontSize(getDocumentElementFontSize());
1345
+ }, []);
1346
+ useEffect3(() => {
1347
+ if (typeof document === "undefined") {
1348
+ return;
1349
+ }
1350
+ const resizeObserver = new ResizeObserver(updateFontSize);
1351
+ resizeObserver.observe(document.documentElement);
1352
+ const mediaQueryList = window.matchMedia("all");
1353
+ const handleMediaChange = () => {
1354
+ updateFontSize();
1355
+ };
1356
+ if (mediaQueryList.addEventListener) {
1357
+ mediaQueryList.addEventListener("change", handleMediaChange);
1358
+ } else {
1359
+ mediaQueryList.addListener(handleMediaChange);
1360
+ }
1361
+ return () => {
1362
+ resizeObserver.disconnect();
1363
+ if (mediaQueryList.removeEventListener) {
1364
+ mediaQueryList.removeEventListener("change", handleMediaChange);
1365
+ } else {
1366
+ mediaQueryList.removeListener(handleMediaChange);
1367
+ }
1368
+ };
1369
+ }, []);
1370
+ return useMemo2(() => rem * fontSize, [
1371
+ fontSize
1372
+ ]);
1373
+ };
1374
+
1270
1375
  // src/components/DensityProvider/DensityProvider.tsx
1271
1376
  import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
1272
1377
  import React13, { createContext as createContext5 } from "react";
@@ -1310,7 +1415,7 @@ var ThemeContext = /* @__PURE__ */ createContext7(void 0);
1310
1415
  var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName, themeMode = "dark", rootDensity = "fine", ...rest }) => {
1311
1416
  var _effect = _useSignals15();
1312
1417
  try {
1313
- useEffect3(() => {
1418
+ useEffect4(() => {
1314
1419
  if (document.defaultView) {
1315
1420
  const kb = createKeyborg(document.defaultView);
1316
1421
  kb.subscribe(handleInputModalityChange);
@@ -1318,7 +1423,7 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
1318
1423
  }
1319
1424
  }, []);
1320
1425
  const safeAreaPadding = useSafeArea();
1321
- const contextValue = useMemo2(() => ({
1426
+ const contextValue = useMemo3(() => ({
1322
1427
  tx,
1323
1428
  themeMode,
1324
1429
  hasIosKeyboard: hasIosKeyboard(),
@@ -1371,7 +1476,7 @@ var CopyButton = ({ classNames, value, size = 5, ...props }) => {
1371
1476
  "data-testid": "copy-invitation"
1372
1477
  }, /* @__PURE__ */ React16.createElement("div", {
1373
1478
  role: "none",
1374
- className: mx2("flex gap-1 items-center", isCopied && inactiveLabelStyles)
1479
+ className: mx3("flex gap-1 items-center", isCopied && inactiveLabelStyles)
1375
1480
  }, /* @__PURE__ */ React16.createElement("span", {
1376
1481
  className: "pli-1"
1377
1482
  }, t("copy label")), /* @__PURE__ */ React16.createElement(Icon, {
@@ -1379,7 +1484,7 @@ var CopyButton = ({ classNames, value, size = 5, ...props }) => {
1379
1484
  size
1380
1485
  })), /* @__PURE__ */ React16.createElement("div", {
1381
1486
  role: "none",
1382
- className: mx2("flex gap-1 items-center", !isCopied && inactiveLabelStyles)
1487
+ className: mx3("flex gap-1 items-center", !isCopied && inactiveLabelStyles)
1383
1488
  }, /* @__PURE__ */ React16.createElement("span", {
1384
1489
  className: "pli-1"
1385
1490
  }, t("copy success label")), /* @__PURE__ */ React16.createElement(Icon, {
@@ -1423,7 +1528,7 @@ var Clipboard = {
1423
1528
  Provider: ClipboardProvider
1424
1529
  };
1425
1530
 
1426
- // src/components/Dialogs/Dialog.tsx
1531
+ // src/components/Dialog/Dialog.tsx
1427
1532
  import { useSignals as _useSignals17 } from "@preact-signals/safe-react/tracking";
1428
1533
  import { createContext as createContext8 } from "@radix-ui/react-context";
1429
1534
  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";
@@ -1522,7 +1627,7 @@ var Dialog = {
1522
1627
  Close: DialogClose
1523
1628
  };
1524
1629
 
1525
- // src/components/Dialogs/AlertDialog.tsx
1630
+ // src/components/Dialog/AlertDialog.tsx
1526
1631
  import { useSignals as _useSignals18 } from "@preact-signals/safe-react/tracking";
1527
1632
  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";
1528
1633
  import { createContext as createContext9 } from "@radix-ui/react-context";
@@ -1626,9 +1731,9 @@ var AlertDialog = {
1626
1731
  import { useSignals as _useSignals19 } from "@preact-signals/safe-react/tracking";
1627
1732
  import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
1628
1733
  import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1629
- import React19, { forwardRef as forwardRef13, useCallback as useCallback5 } from "react";
1734
+ import React19, { forwardRef as forwardRef13, useCallback as useCallback6 } from "react";
1630
1735
  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";
1631
- import { mx as mx3 } from "@dxos/react-ui-theme";
1736
+ import { mx as mx4 } from "@dxos/react-ui-theme";
1632
1737
  var Label = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
1633
1738
  var _effect = _useSignals19();
1634
1739
  try {
@@ -1698,7 +1803,7 @@ var PinInput = /* @__PURE__ */ forwardRef13(({ density: propsDensity, elevation:
1698
1803
  const { tx } = useThemeContext();
1699
1804
  const density = useDensityContext(propsDensity);
1700
1805
  const elevation = useElevationContext(propsElevation);
1701
- const segmentClassName = useCallback5(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1806
+ const segmentClassName = useCallback6(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1702
1807
  variant: "static",
1703
1808
  focused,
1704
1809
  disabled: props.disabled,
@@ -1780,7 +1885,7 @@ var TextArea = /* @__PURE__ */ forwardRef13(({ __inputScope, classNames, density
1780
1885
  _effect.f();
1781
1886
  }
1782
1887
  });
1783
- var Checkbox = /* @__PURE__ */ forwardRef13(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, weight = "bold", classNames, ...props }, forwardedRef) => {
1888
+ var Checkbox = /* @__PURE__ */ forwardRef13(({ __inputScope, checked: propsChecked, defaultChecked: propsDefaultChecked, onCheckedChange: propsOnCheckedChange, size, classNames, ...props }, forwardedRef) => {
1784
1889
  var _effect = _useSignals19();
1785
1890
  try {
1786
1891
  const [checked, onCheckedChange] = useControllableState2({
@@ -1826,7 +1931,7 @@ var Switch = /* @__PURE__ */ forwardRef13(({ __inputScope, checked: propsChecked
1826
1931
  const { id, validationValence, descriptionId, errorMessageId } = useInputContext(INPUT_NAME, __inputScope);
1827
1932
  return /* @__PURE__ */ React19.createElement("input", {
1828
1933
  type: "checkbox",
1829
- className: mx3("dx-checkbox--switch dx-focus-ring", classNames),
1934
+ className: mx4("dx-checkbox--switch dx-focus-ring", classNames),
1830
1935
  checked,
1831
1936
  onChange: (event) => {
1832
1937
  onCheckedChange(event.target.checked);
@@ -1857,13 +1962,13 @@ var Input = {
1857
1962
  DescriptionAndValidation
1858
1963
  };
1859
1964
 
1860
- // src/components/Lists/List.tsx
1965
+ // src/components/List/List.tsx
1861
1966
  import { useSignals as _useSignals21 } from "@preact-signals/safe-react/tracking";
1862
1967
  import { Slot as Slot6 } from "@radix-ui/react-slot";
1863
1968
  import React21, { forwardRef as forwardRef14 } from "react";
1864
1969
  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";
1865
1970
 
1866
- // src/components/Lists/ListDropIndicator.tsx
1971
+ // src/components/List/ListDropIndicator.tsx
1867
1972
  import { useSignals as _useSignals20 } from "@preact-signals/safe-react/tracking";
1868
1973
  import React20 from "react";
1869
1974
  var edgeToOrientationMap = {
@@ -1874,7 +1979,7 @@ var edgeToOrientationMap = {
1874
1979
  };
1875
1980
  var orientationStyles = {
1876
1981
  horizontal: "h-[--line-thickness] left-[calc(var(--line-inset)+var(--terminal-radius))] right-[--line-inset] before:left-[--terminal-inset]",
1877
- vertical: "w-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1982
+ vertical: "is-[--line-thickness] top-[calc(var(--line-inset)+var(--terminal-radius))] bottom-[--line-inset] before:top-[--terminal-inset]"
1878
1983
  };
1879
1984
  var edgeStyles = {
1880
1985
  top: "top-[--line-offset] before:top-[--offset-terminal]",
@@ -1907,7 +2012,7 @@ var ListDropIndicator = ({ edge, gap = 0, lineInset = 0, terminalInset = lineIns
1907
2012
  }
1908
2013
  };
1909
2014
 
1910
- // src/components/Lists/List.tsx
2015
+ // src/components/List/List.tsx
1911
2016
  var List = /* @__PURE__ */ forwardRef14(({ classNames, children, ...props }, forwardedRef) => {
1912
2017
  var _effect = _useSignals21();
1913
2018
  try {
@@ -1927,10 +2032,10 @@ var List = /* @__PURE__ */ forwardRef14(({ classNames, children, ...props }, for
1927
2032
  var ListItemEndcap = /* @__PURE__ */ forwardRef14(({ children, classNames, asChild, ...props }, forwardedRef) => {
1928
2033
  var _effect = _useSignals21();
1929
2034
  try {
1930
- const Root7 = asChild ? Slot6 : "div";
2035
+ const Root8 = asChild ? Slot6 : "div";
1931
2036
  const density = useDensityContext();
1932
2037
  const { tx } = useThemeContext();
1933
- return /* @__PURE__ */ React21.createElement(Root7, {
2038
+ return /* @__PURE__ */ React21.createElement(Root8, {
1934
2039
  ...!asChild && {
1935
2040
  role: "none"
1936
2041
  },
@@ -2024,11 +2129,11 @@ var ListItem = {
2024
2129
  DropIndicator: ListDropIndicator
2025
2130
  };
2026
2131
 
2027
- // src/components/Lists/Tree.tsx
2132
+ // src/components/List/Tree.tsx
2028
2133
  import { useSignals as _useSignals23 } from "@preact-signals/safe-react/tracking";
2029
2134
  import React23, { forwardRef as forwardRef15 } from "react";
2030
2135
 
2031
- // src/components/Lists/TreeDropIndicator.tsx
2136
+ // src/components/List/TreeDropIndicator.tsx
2032
2137
  import { useSignals as _useSignals22 } from "@preact-signals/safe-react/tracking";
2033
2138
  import React22 from "react";
2034
2139
  var edgeToOrientationMap2 = {
@@ -2079,7 +2184,7 @@ var TreeDropIndicator = ({ instruction, gap = 0 }) => {
2079
2184
  }
2080
2185
  };
2081
2186
 
2082
- // src/components/Lists/Tree.tsx
2187
+ // src/components/List/Tree.tsx
2083
2188
  var TreeRoot = /* @__PURE__ */ forwardRef15((props, forwardedRef) => {
2084
2189
  var _effect = _useSignals23();
2085
2190
  try {
@@ -2133,14 +2238,14 @@ var TreeItem = {
2133
2238
  DropIndicator: TreeDropIndicator
2134
2239
  };
2135
2240
 
2136
- // src/components/Lists/Treegrid.tsx
2241
+ // src/components/List/Treegrid.tsx
2137
2242
  import { useSignals as _useSignals24 } from "@preact-signals/safe-react/tracking";
2138
- import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
2243
+ import { useFocusFinders } from "@fluentui/react-tabster";
2139
2244
  import { createContextScope as createContextScope2 } from "@radix-ui/react-context";
2140
2245
  import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
2141
2246
  import { Slot as Slot7 } from "@radix-ui/react-slot";
2142
2247
  import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
2143
- import React24, { forwardRef as forwardRef16 } from "react";
2248
+ import React24, { forwardRef as forwardRef16, useCallback as useCallback7 } from "react";
2144
2249
  var TREEGRID_ROW_NAME = "TreegridRow";
2145
2250
  var [createTreegridRowContext, createTreegridRowScope] = createContextScope2(TREEGRID_ROW_NAME, []);
2146
2251
  var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
@@ -2150,15 +2255,44 @@ var TreegridRoot = /* @__PURE__ */ forwardRef16(({ asChild, classNames, children
2150
2255
  var _effect = _useSignals24();
2151
2256
  try {
2152
2257
  const { tx } = useThemeContext();
2153
- const Root7 = asChild ? Slot7 : Primitive7.div;
2154
- const arrowNavigationAttrs = useArrowNavigationGroup({
2155
- axis: "vertical",
2156
- tabbable: false,
2157
- circular: true
2158
- });
2159
- return /* @__PURE__ */ React24.createElement(Root7, {
2258
+ const Root8 = asChild ? Slot7 : Primitive7.div;
2259
+ const { findFirstFocusable } = useFocusFinders();
2260
+ const handleKeyDown = useCallback7((event) => {
2261
+ switch (event.key) {
2262
+ case "ArrowDown":
2263
+ case "ArrowUp": {
2264
+ const direction = event.key === "ArrowDown" ? "down" : "up";
2265
+ const target = event.target;
2266
+ const ancestorWithArrowKeys = target.closest(`[data-arrow-keys*="${direction}"], [data-arrow-keys="all"]`);
2267
+ if (!ancestorWithArrowKeys) {
2268
+ const currentRow = target.closest('[role="row"]');
2269
+ if (currentRow) {
2270
+ const treegrid = currentRow.closest('[role="treegrid"]');
2271
+ if (treegrid) {
2272
+ const rows = Array.from(treegrid.querySelectorAll('[role="row"]'));
2273
+ const currentIndex = rows.indexOf(currentRow);
2274
+ const nextIndex = direction === "down" ? currentIndex + 1 : currentIndex - 1;
2275
+ const targetRow = rows[nextIndex];
2276
+ if (targetRow) {
2277
+ const firstFocusable = findFirstFocusable(targetRow);
2278
+ if (firstFocusable) {
2279
+ event.preventDefault();
2280
+ firstFocusable.focus();
2281
+ }
2282
+ }
2283
+ }
2284
+ }
2285
+ }
2286
+ break;
2287
+ }
2288
+ }
2289
+ props.onKeyDown?.(event);
2290
+ }, [
2291
+ findFirstFocusable
2292
+ ]);
2293
+ return /* @__PURE__ */ React24.createElement(Root8, {
2160
2294
  role: "treegrid",
2161
- ...arrowNavigationAttrs,
2295
+ onKeyDown: handleKeyDown,
2162
2296
  ...props,
2163
2297
  className: tx("treegrid.root", "treegrid", {}, classNames),
2164
2298
  style: {
@@ -2175,7 +2309,7 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2175
2309
  var _effect = _useSignals24();
2176
2310
  try {
2177
2311
  const { tx } = useThemeContext();
2178
- const Root7 = asChild ? Slot7 : Primitive7.div;
2312
+ const Root8 = asChild ? Slot7 : Primitive7.div;
2179
2313
  const pathParts = id.split(PATH_SEPARATOR);
2180
2314
  const level = pathParts.length - 1;
2181
2315
  const [open, onOpenChange] = useControllableState3({
@@ -2183,20 +2317,11 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2183
2317
  onChange: propsOnOpenChange,
2184
2318
  defaultProp: defaultOpen
2185
2319
  });
2186
- const focusableGroupAttrs = useFocusableGroup({
2187
- tabBehavior: "limited"
2188
- });
2189
- const arrowGroupAttrs = useArrowNavigationGroup({
2190
- axis: "horizontal",
2191
- tabbable: false,
2192
- circular: false,
2193
- memorizeCurrent: false
2194
- });
2195
2320
  return /* @__PURE__ */ React24.createElement(TreegridRowProvider, {
2196
2321
  open,
2197
2322
  onOpenChange,
2198
2323
  scope: __treegridRowScope
2199
- }, /* @__PURE__ */ React24.createElement(Root7, {
2324
+ }, /* @__PURE__ */ React24.createElement(Root8, {
2200
2325
  role: "row",
2201
2326
  "aria-level": level,
2202
2327
  className: tx("treegrid.row", "treegrid__row", {
@@ -2206,16 +2331,10 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2206
2331
  "aria-expanded": open,
2207
2332
  "aria-owns": parentOf
2208
2333
  },
2209
- tabIndex: 0,
2210
- ...focusableGroupAttrs,
2211
2334
  ...props,
2212
2335
  id,
2213
2336
  ref: forwardedRef
2214
- }, /* @__PURE__ */ React24.createElement("div", {
2215
- role: "none",
2216
- className: "contents",
2217
- ...arrowGroupAttrs
2218
- }, children)));
2337
+ }, children));
2219
2338
  } finally {
2220
2339
  _effect.f();
2221
2340
  }
@@ -2248,17 +2367,18 @@ var Treegrid = {
2248
2367
 
2249
2368
  // src/components/Main/Main.tsx
2250
2369
  import { useSignals as _useSignals25 } from "@preact-signals/safe-react/tracking";
2370
+ import { useFocusableGroup } from "@fluentui/react-tabster";
2251
2371
  import { createContext as createContext10 } from "@radix-ui/react-context";
2252
2372
  import { DialogContent as DialogContent2, Root as DialogRoot2, DialogTitle as DialogTitle2 } from "@radix-ui/react-dialog";
2253
2373
  import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
2254
2374
  import { Slot as Slot8 } from "@radix-ui/react-slot";
2255
2375
  import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
2256
- import React25, { forwardRef as forwardRef17, useCallback as useCallback7, useEffect as useEffect5, useRef as useRef2, useState as useState7 } from "react";
2376
+ import React25, { forwardRef as forwardRef17, useCallback as useCallback9, useEffect as useEffect6, useRef as useRef2, useState as useState8 } from "react";
2257
2377
  import { log } from "@dxos/log";
2258
2378
  import { useForwardedRef, useMediaQuery } from "@dxos/react-hooks";
2259
2379
 
2260
2380
  // src/components/Main/useSwipeToDismiss.ts
2261
- import { useCallback as useCallback6, useEffect as useEffect4, useState as useState6 } from "react";
2381
+ import { useCallback as useCallback8, useEffect as useEffect5, useState as useState7 } from "react";
2262
2382
  var useSwipeToDismiss = (ref, {
2263
2383
  onDismiss,
2264
2384
  dismissThreshold = 64,
@@ -2267,22 +2387,22 @@ var useSwipeToDismiss = (ref, {
2267
2387
  /* side = 'inline-start' */
2268
2388
  }) => {
2269
2389
  const $root = ref.current;
2270
- const [motionState, setMotionState] = useState6(0);
2271
- const [gestureStartX, setGestureStartX] = useState6(0);
2272
- const setIdle = useCallback6(() => {
2390
+ const [motionState, setMotionState] = useState7(0);
2391
+ const [gestureStartX, setGestureStartX] = useState7(0);
2392
+ const setIdle = useCallback8(() => {
2273
2393
  setMotionState(0);
2274
2394
  $root?.style.removeProperty("inset-inline-start");
2275
2395
  $root?.style.setProperty("transition-duration", "200ms");
2276
2396
  }, [
2277
2397
  $root
2278
2398
  ]);
2279
- const setFollowing = useCallback6(() => {
2399
+ const setFollowing = useCallback8(() => {
2280
2400
  setMotionState(2);
2281
2401
  $root?.style.setProperty("transition-duration", "0ms");
2282
2402
  }, [
2283
2403
  $root
2284
2404
  ]);
2285
- const handlePointerDown = useCallback6(({ screenX }) => {
2405
+ const handlePointerDown = useCallback8(({ screenX }) => {
2286
2406
  if (motionState === 0) {
2287
2407
  setMotionState(1);
2288
2408
  setGestureStartX(screenX);
@@ -2290,7 +2410,7 @@ var useSwipeToDismiss = (ref, {
2290
2410
  }, [
2291
2411
  motionState
2292
2412
  ]);
2293
- const handlePointerMove = useCallback6(({ screenX }) => {
2413
+ const handlePointerMove = useCallback8(({ screenX }) => {
2294
2414
  if ($root) {
2295
2415
  const delta = Math.min(screenX - gestureStartX, 0);
2296
2416
  switch (motionState) {
@@ -2314,12 +2434,12 @@ var useSwipeToDismiss = (ref, {
2314
2434
  motionState,
2315
2435
  gestureStartX
2316
2436
  ]);
2317
- const handlePointerUp = useCallback6(() => {
2437
+ const handlePointerUp = useCallback8(() => {
2318
2438
  setIdle();
2319
2439
  }, [
2320
2440
  setIdle
2321
2441
  ]);
2322
- useEffect4(() => {
2442
+ useEffect5(() => {
2323
2443
  $root?.addEventListener("pointerdown", handlePointerDown);
2324
2444
  return () => {
2325
2445
  $root?.removeEventListener("pointerdown", handlePointerDown);
@@ -2328,7 +2448,7 @@ var useSwipeToDismiss = (ref, {
2328
2448
  $root,
2329
2449
  handlePointerDown
2330
2450
  ]);
2331
- useEffect4(() => {
2451
+ useEffect5(() => {
2332
2452
  $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
2333
2453
  return () => {
2334
2454
  document.documentElement.removeEventListener("pointermove", handlePointerMove);
@@ -2337,7 +2457,7 @@ var useSwipeToDismiss = (ref, {
2337
2457
  $root,
2338
2458
  handlePointerMove
2339
2459
  ]);
2340
- useEffect4(() => {
2460
+ useEffect5(() => {
2341
2461
  $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
2342
2462
  return () => {
2343
2463
  document.documentElement.removeEventListener("pointerup", handlePointerUp);
@@ -2350,14 +2470,14 @@ var useSwipeToDismiss = (ref, {
2350
2470
 
2351
2471
  // src/components/Main/Main.tsx
2352
2472
  var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui/src/components/Main/Main.tsx";
2473
+ var MAIN_NAME = "Main";
2353
2474
  var MAIN_ROOT_NAME = "MainRoot";
2354
2475
  var NAVIGATION_SIDEBAR_NAME = "NavigationSidebar";
2355
2476
  var COMPLEMENTARY_SIDEBAR_NAME = "ComplementarySidebar";
2356
- var MAIN_NAME = "Main";
2357
2477
  var GENERIC_CONSUMER_NAME = "GenericConsumer";
2358
2478
  var landmarkAttr = "data-main-landmark";
2359
2479
  var useLandmarkMover = (propsOnKeyDown, landmark) => {
2360
- const handleKeyDown = useCallback7((event) => {
2480
+ const handleKeyDown = useCallback9((event) => {
2361
2481
  const target = event.target;
2362
2482
  if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2363
2483
  event.preventDefault();
@@ -2371,12 +2491,12 @@ var useLandmarkMover = (propsOnKeyDown, landmark) => {
2371
2491
  }, [
2372
2492
  propsOnKeyDown
2373
2493
  ]);
2374
- const focusableGroupAttrs = window ? {} : {
2494
+ const focusableGroupAttrs = useFocusableGroup({
2375
2495
  tabBehavior: "limited",
2376
2496
  ignoreDefaultKeydown: {
2377
2497
  Tab: true
2378
2498
  }
2379
- };
2499
+ });
2380
2500
  return {
2381
2501
  onKeyDown: handleKeyDown,
2382
2502
  [landmarkAttr]: landmark,
@@ -2390,7 +2510,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2390
2510
  setNavigationSidebarState: (_nextState) => {
2391
2511
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2392
2512
  F: __dxlog_file,
2393
- L: 88,
2513
+ L: 92,
2394
2514
  S: void 0,
2395
2515
  C: (f, a) => f(...a)
2396
2516
  });
@@ -2399,7 +2519,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2399
2519
  setComplementarySidebarState: (_nextState) => {
2400
2520
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2401
2521
  F: __dxlog_file,
2402
- L: 93,
2522
+ L: 97,
2403
2523
  S: void 0,
2404
2524
  C: (f, a) => f(...a)
2405
2525
  });
@@ -2410,31 +2530,29 @@ var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2410
2530
  return {
2411
2531
  navigationSidebarState,
2412
2532
  setNavigationSidebarState,
2413
- toggleNavigationSidebar: useCallback7(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2533
+ toggleNavigationSidebar: useCallback9(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2414
2534
  navigationSidebarState,
2415
2535
  setNavigationSidebarState
2416
2536
  ]),
2417
- openNavigationSidebar: useCallback7(() => setNavigationSidebarState("expanded"), []),
2418
- collapseNavigationSidebar: useCallback7(() => setNavigationSidebarState("collapsed"), []),
2419
- closeNavigationSidebar: useCallback7(() => setNavigationSidebarState("closed"), []),
2537
+ openNavigationSidebar: useCallback9(() => setNavigationSidebarState("expanded"), []),
2538
+ collapseNavigationSidebar: useCallback9(() => setNavigationSidebarState("collapsed"), []),
2539
+ closeNavigationSidebar: useCallback9(() => setNavigationSidebarState("closed"), []),
2420
2540
  complementarySidebarState,
2421
2541
  setComplementarySidebarState,
2422
- toggleComplementarySidebar: useCallback7(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2542
+ toggleComplementarySidebar: useCallback9(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2423
2543
  complementarySidebarState,
2424
2544
  setComplementarySidebarState
2425
2545
  ]),
2426
- openComplementarySidebar: useCallback7(() => setComplementarySidebarState("expanded"), []),
2427
- collapseComplementarySidebar: useCallback7(() => setComplementarySidebarState("collapsed"), []),
2428
- closeComplementarySidebar: useCallback7(() => setComplementarySidebarState("closed"), [])
2546
+ openComplementarySidebar: useCallback9(() => setComplementarySidebarState("expanded"), []),
2547
+ collapseComplementarySidebar: useCallback9(() => setComplementarySidebarState("collapsed"), []),
2548
+ closeComplementarySidebar: useCallback9(() => setComplementarySidebarState("closed"), [])
2429
2549
  };
2430
2550
  };
2431
2551
  var resizeDebounce = 3e3;
2432
2552
  var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2433
2553
  var _effect = _useSignals25();
2434
2554
  try {
2435
- const [isLg] = useMediaQuery("lg", {
2436
- ssr: false
2437
- });
2555
+ const [isLg] = useMediaQuery("lg");
2438
2556
  const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = useControllableState4({
2439
2557
  prop: propsNavigationSidebarState,
2440
2558
  defaultProp: defaultNavigationSidebarState,
@@ -2445,9 +2563,9 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2445
2563
  defaultProp: defaultComplementarySidebarState,
2446
2564
  onChange: onComplementarySidebarStateChange
2447
2565
  });
2448
- const [resizing, setResizing] = useState7(false);
2566
+ const [resizing, setResizing] = useState8(false);
2449
2567
  const resizeInterval = useRef2(null);
2450
- const handleResize = useCallback7(() => {
2568
+ const handleResize = useCallback9(() => {
2451
2569
  setResizing(true);
2452
2570
  if (resizeInterval.current) {
2453
2571
  clearTimeout(resizeInterval.current);
@@ -2457,7 +2575,7 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2457
2575
  resizeInterval.current = null;
2458
2576
  }, resizeDebounce);
2459
2577
  }, []);
2460
- useEffect5(() => {
2578
+ useEffect6(() => {
2461
2579
  window.addEventListener("resize", handleResize);
2462
2580
  return () => window.removeEventListener("resize", handleResize);
2463
2581
  }, [
@@ -2482,9 +2600,7 @@ var handleOpenAutoFocus = (event) => {
2482
2600
  var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2483
2601
  var _effect = _useSignals25();
2484
2602
  try {
2485
- const [isLg] = useMediaQuery("lg", {
2486
- ssr: false
2487
- });
2603
+ const [isLg] = useMediaQuery("lg");
2488
2604
  const { tx } = useThemeContext();
2489
2605
  const { t } = useTranslation();
2490
2606
  const ref = useForwardedRef(forwardedRef);
@@ -2492,22 +2608,25 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2492
2608
  useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2493
2609
  onDismiss: () => onStateChange?.("closed")
2494
2610
  });
2495
- const handleKeyDown = useCallback7((event) => {
2496
- if (event.key === "Escape") {
2497
- event.target.closest("[data-tabster]")?.focus();
2611
+ const handleKeyDown = useCallback9((event) => {
2612
+ const focusGroupParent = event.target.closest("[data-tabster]");
2613
+ if (event.key === "Escape" && focusGroupParent) {
2614
+ event.preventDefault();
2615
+ event.stopPropagation();
2616
+ focusGroupParent.focus();
2498
2617
  }
2499
2618
  props.onKeyDown?.(event);
2500
2619
  }, [
2501
2620
  props.onKeyDown
2502
2621
  ]);
2503
- const Root7 = isLg ? Primitive8.div : DialogContent2;
2622
+ const Root8 = isLg ? Primitive8.div : DialogContent2;
2504
2623
  return /* @__PURE__ */ React25.createElement(DialogRoot2, {
2505
2624
  open: state !== "closed",
2506
2625
  "aria-label": toLocalizedString(label, t),
2507
2626
  modal: false
2508
2627
  }, !isLg && /* @__PURE__ */ React25.createElement(DialogTitle2, {
2509
2628
  className: "sr-only"
2510
- }, toLocalizedString(label, t)), /* @__PURE__ */ React25.createElement(Root7, {
2629
+ }, toLocalizedString(label, t)), /* @__PURE__ */ React25.createElement(Root8, {
2511
2630
  ...!isLg && {
2512
2631
  forceMount: true,
2513
2632
  tabIndex: -1,
@@ -2518,9 +2637,9 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2518
2637
  "data-state": state,
2519
2638
  "data-resizing": resizing ? "true" : "false",
2520
2639
  className: tx("main.sidebar", "main__sidebar", {}, classNames),
2521
- onKeyDown: handleKeyDown,
2640
+ onKeyDownCapture: handleKeyDown,
2522
2641
  ...state === "closed" && {
2523
- inert: "true"
2642
+ inert: true
2524
2643
  },
2525
2644
  ref
2526
2645
  }, children));
@@ -2571,9 +2690,9 @@ var MainContent = /* @__PURE__ */ forwardRef17(({ asChild, classNames, bounce, h
2571
2690
  try {
2572
2691
  const { navigationSidebarState, complementarySidebarState } = useMainContext(MAIN_NAME);
2573
2692
  const { tx } = useThemeContext();
2574
- const Root7 = asChild ? Slot8 : role ? "div" : "main";
2693
+ const Root8 = asChild ? Slot8 : role ? "div" : "main";
2575
2694
  const mover = useLandmarkMover(props.onKeyDown, "1");
2576
- return /* @__PURE__ */ React25.createElement(Root7, {
2695
+ return /* @__PURE__ */ React25.createElement(Root8, {
2577
2696
  role,
2578
2697
  ...handlesFocus && {
2579
2698
  ...mover
@@ -2596,9 +2715,7 @@ MainContent.displayName = MAIN_NAME;
2596
2715
  var MainOverlay = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
2597
2716
  var _effect = _useSignals25();
2598
2717
  try {
2599
- const [isLg] = useMediaQuery("lg", {
2600
- ssr: false
2601
- });
2718
+ const [isLg] = useMediaQuery("lg");
2602
2719
  const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2603
2720
  const { tx } = useThemeContext();
2604
2721
  return /* @__PURE__ */ React25.createElement("div", {
@@ -2636,7 +2753,7 @@ import { Slot as Slot9 } from "@radix-ui/react-slot";
2636
2753
  import React26, { forwardRef as forwardRef18 } from "react";
2637
2754
 
2638
2755
  // src/hooks/useSafeCollisionPadding.ts
2639
- import { useMemo as useMemo3 } from "react";
2756
+ import { useMemo as useMemo4 } from "react";
2640
2757
  var propIsNumber = (prop) => Number.isFinite(prop);
2641
2758
  var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
2642
2759
  var safePadding = (propsPadding, safePadding2, side) => {
@@ -2644,7 +2761,7 @@ var safePadding = (propsPadding, safePadding2, side) => {
2644
2761
  };
2645
2762
  var useSafeCollisionPadding = (collisionPadding) => {
2646
2763
  const { safeAreaPadding } = useThemeContext();
2647
- return useMemo3(() => ({
2764
+ return useMemo4(() => ({
2648
2765
  top: safePadding(collisionPadding, safeAreaPadding, "top"),
2649
2766
  right: safePadding(collisionPadding, safeAreaPadding, "right"),
2650
2767
  bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
@@ -2667,6 +2784,7 @@ var ContextMenuContent = /* @__PURE__ */ forwardRef18(({ classNames, children, c
2667
2784
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
2668
2785
  return /* @__PURE__ */ React26.createElement(ContextMenuPrimitive.Content, {
2669
2786
  ...props,
2787
+ "data-arrow-keys": "up down",
2670
2788
  collisionPadding: safeCollisionPadding,
2671
2789
  className: tx("menu.content", "menu", {
2672
2790
  elevation
@@ -2681,8 +2799,8 @@ var ContextMenuViewport = /* @__PURE__ */ forwardRef18(({ classNames, asChild, c
2681
2799
  var _effect = _useSignals26();
2682
2800
  try {
2683
2801
  const { tx } = useThemeContext();
2684
- const Root7 = asChild ? Slot9 : Primitive9.div;
2685
- return /* @__PURE__ */ React26.createElement(Root7, {
2802
+ const Root8 = asChild ? Slot9 : Primitive9.div;
2803
+ return /* @__PURE__ */ React26.createElement(Root8, {
2686
2804
  ...props,
2687
2805
  className: tx("menu.viewport", "menu__viewport", {}, classNames),
2688
2806
  ref: forwardedRef
@@ -2784,7 +2902,7 @@ import { createMenuScope } from "@radix-ui/react-menu";
2784
2902
  import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2785
2903
  import { Slot as Slot10 } from "@radix-ui/react-slot";
2786
2904
  import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2787
- import React27, { forwardRef as forwardRef19, useCallback as useCallback8, useEffect as useEffect6, useRef as useRef3 } from "react";
2905
+ import React27, { forwardRef as forwardRef19, useCallback as useCallback10, useEffect as useEffect7, useMemo as useMemo5, useRef as useRef3 } from "react";
2788
2906
  var DROPDOWN_MENU_NAME = "DropdownMenu";
2789
2907
  var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope3(DROPDOWN_MENU_NAME, [
2790
2908
  createMenuScope
@@ -2809,7 +2927,7 @@ var DropdownMenuRoot = (props) => {
2809
2927
  contentId: useId3(),
2810
2928
  open,
2811
2929
  onOpenChange: setOpen,
2812
- onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
2930
+ onOpenToggle: useCallback10(() => setOpen((prevOpen) => !prevOpen), [
2813
2931
  setOpen
2814
2932
  ]),
2815
2933
  modal
@@ -2846,6 +2964,7 @@ var DropdownMenuTrigger = /* @__PURE__ */ forwardRef19((props, forwardedRef) =>
2846
2964
  disabled,
2847
2965
  ...triggerProps,
2848
2966
  ref: composeRefs(forwardedRef, context.triggerRef),
2967
+ "data-arrow-keys": "down",
2849
2968
  onPointerDown: composeEventHandlers2(props.onPointerDown, (event) => {
2850
2969
  if (!disabled && event.button === 0 && event.ctrlKey === false) {
2851
2970
  context.onOpenToggle();
@@ -2888,7 +3007,7 @@ var DropdownMenuVirtualTrigger = (props) => {
2888
3007
  const { __scopeDropdownMenu, virtualRef } = props;
2889
3008
  const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
2890
3009
  const menuScope = useMenuScope(__scopeDropdownMenu);
2891
- useEffect6(() => {
3010
+ useEffect7(() => {
2892
3011
  if (virtualRef.current) {
2893
3012
  context.triggerRef.current = virtualRef.current;
2894
3013
  }
@@ -2921,8 +3040,8 @@ var DropdownMenuViewport = /* @__PURE__ */ forwardRef19(({ classNames, asChild,
2921
3040
  var _effect = _useSignals27();
2922
3041
  try {
2923
3042
  const { tx } = useThemeContext();
2924
- const Root7 = asChild ? Slot10 : Primitive10.div;
2925
- return /* @__PURE__ */ React27.createElement(Root7, {
3043
+ const Root8 = asChild ? Slot10 : Primitive10.div;
3044
+ return /* @__PURE__ */ React27.createElement(Root8, {
2926
3045
  ...props,
2927
3046
  className: tx("menu.viewport", "menu__viewport", {}, classNames),
2928
3047
  ref: forwardedRef
@@ -2935,18 +3054,35 @@ var CONTENT_NAME2 = "DropdownMenuContent";
2935
3054
  var DropdownMenuContent = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
2936
3055
  var _effect = _useSignals27();
2937
3056
  try {
2938
- const { __scopeDropdownMenu, classNames, collisionPadding = 8, ...contentProps } = props;
3057
+ const { __scopeDropdownMenu, classNames, collisionPadding = 8, collisionBoundary, ...contentProps } = props;
2939
3058
  const { tx } = useThemeContext();
2940
3059
  const context = useDropdownMenuContext(CONTENT_NAME2, __scopeDropdownMenu);
2941
3060
  const elevation = useElevationContext();
2942
3061
  const menuScope = useMenuScope(__scopeDropdownMenu);
2943
3062
  const hasInteractedOutsideRef = useRef3(false);
2944
3063
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
3064
+ const computedCollisionBoundary = useMemo5(() => {
3065
+ const closestBoundary = context.triggerRef.current?.closest("[data-popover-collision-boundary]");
3066
+ return closestBoundary ? Array.isArray(collisionBoundary) ? [
3067
+ closestBoundary,
3068
+ ...collisionBoundary
3069
+ ] : collisionBoundary ? [
3070
+ closestBoundary,
3071
+ collisionBoundary
3072
+ ] : [
3073
+ closestBoundary
3074
+ ] : collisionBoundary;
3075
+ }, [
3076
+ context.open,
3077
+ collisionBoundary,
3078
+ context.triggerRef.current
3079
+ ]);
2945
3080
  return /* @__PURE__ */ React27.createElement(MenuPrimitive.Content, {
2946
3081
  id: context.contentId,
2947
3082
  "aria-labelledby": context.triggerId,
2948
3083
  ...menuScope,
2949
3084
  ...contentProps,
3085
+ collisionBoundary: computedCollisionBoundary,
2950
3086
  collisionPadding: safeCollisionPadding,
2951
3087
  ref: forwardedRef,
2952
3088
  onCloseAutoFocus: composeEventHandlers2(props.onCloseAutoFocus, (event) => {
@@ -2964,6 +3100,7 @@ var DropdownMenuContent = /* @__PURE__ */ forwardRef19((props, forwardedRef) =>
2964
3100
  hasInteractedOutsideRef.current = true;
2965
3101
  }
2966
3102
  }),
3103
+ "data-arrow-keys": "up down",
2967
3104
  className: tx("menu.content", "menu", {
2968
3105
  elevation
2969
3106
  }, classNames),
@@ -3074,11 +3211,13 @@ var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
3074
3211
  var DropdownMenuRadioItem = /* @__PURE__ */ forwardRef19((props, forwardedRef) => {
3075
3212
  var _effect = _useSignals27();
3076
3213
  try {
3077
- const { __scopeDropdownMenu, ...radioItemProps } = props;
3214
+ const { __scopeDropdownMenu, classNames, ...itemProps } = props;
3078
3215
  const menuScope = useMenuScope(__scopeDropdownMenu);
3079
- return /* @__PURE__ */ React27.createElement(MenuPrimitive.RadioItem, {
3216
+ const { tx } = useThemeContext();
3217
+ return /* @__PURE__ */ React27.createElement(MenuPrimitive.Item, {
3080
3218
  ...menuScope,
3081
- ...radioItemProps,
3219
+ ...itemProps,
3220
+ className: tx("menu.item", "menu__item", {}, classNames),
3082
3221
  ref: forwardedRef
3083
3222
  });
3084
3223
  } finally {
@@ -3245,12 +3384,12 @@ var MessageRoot = /* @__PURE__ */ forwardRef20(({ asChild, valence = "neutral",
3245
3384
  const titleId = useId4("message__title", propsTitleId);
3246
3385
  const descriptionId = useId4("message__description", propsDescriptionId);
3247
3386
  const elevation = useElevationContext(propsElevation);
3248
- const Root7 = asChild ? Slot11 : Primitive11.div;
3387
+ const Root8 = asChild ? Slot11 : Primitive11.div;
3249
3388
  return /* @__PURE__ */ React28.createElement(MessageProvider, {
3250
3389
  titleId,
3251
3390
  descriptionId,
3252
3391
  valence
3253
- }, /* @__PURE__ */ React28.createElement(Root7, {
3392
+ }, /* @__PURE__ */ React28.createElement(Root8, {
3254
3393
  role: valence === "neutral" ? "paragraph" : "alert",
3255
3394
  ...props,
3256
3395
  className: tx("message.root", "message", {
@@ -3272,8 +3411,8 @@ var MessageTitle = /* @__PURE__ */ forwardRef20(({ asChild, classNames, children
3272
3411
  try {
3273
3412
  const { tx } = useThemeContext();
3274
3413
  const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
3275
- const Root7 = asChild ? Slot11 : Primitive11.h2;
3276
- return /* @__PURE__ */ React28.createElement(Root7, {
3414
+ const Root8 = asChild ? Slot11 : Primitive11.h2;
3415
+ return /* @__PURE__ */ React28.createElement(Root8, {
3277
3416
  ...props,
3278
3417
  className: tx("message.title", "message__title", {}, classNames),
3279
3418
  id: titleId,
@@ -3296,8 +3435,8 @@ var MessageContent = /* @__PURE__ */ forwardRef20(({ asChild, classNames, childr
3296
3435
  try {
3297
3436
  const { tx } = useThemeContext();
3298
3437
  const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
3299
- const Root7 = asChild ? Slot11 : Primitive11.p;
3300
- return /* @__PURE__ */ React28.createElement(Root7, {
3438
+ const Root8 = asChild ? Slot11 : Primitive11.p;
3439
+ return /* @__PURE__ */ React28.createElement(Root8, {
3301
3440
  ...props,
3302
3441
  className: tx("message.content", "message__content", {}, classNames),
3303
3442
  id: descriptionId,
@@ -3332,7 +3471,7 @@ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
3332
3471
  import { Slot as Slot12 } from "@radix-ui/react-slot";
3333
3472
  import { useControllableState as useControllableState6 } from "@radix-ui/react-use-controllable-state";
3334
3473
  import { hideOthers } from "aria-hidden";
3335
- import React29, { forwardRef as forwardRef21, useCallback as useCallback9, useEffect as useEffect7, useRef as useRef4, useState as useState8 } from "react";
3474
+ import React29, { forwardRef as forwardRef21, useCallback as useCallback11, useEffect as useEffect8, useMemo as useMemo6, useRef as useRef4, useState as useState9 } from "react";
3336
3475
  import { RemoveScroll } from "react-remove-scroll";
3337
3476
  var POPOVER_NAME = "Popover";
3338
3477
  var [createPopoverContext, createPopoverScope] = createContextScope4(POPOVER_NAME, [
@@ -3346,7 +3485,7 @@ var PopoverRoot = (props) => {
3346
3485
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
3347
3486
  const popperScope = usePopperScope2(__scopePopover);
3348
3487
  const triggerRef = useRef4(null);
3349
- const [hasCustomAnchor, setHasCustomAnchor] = useState8(false);
3488
+ const [hasCustomAnchor, setHasCustomAnchor] = useState9(false);
3350
3489
  const [open = false, setOpen] = useControllableState6({
3351
3490
  prop: openProp,
3352
3491
  defaultProp: defaultOpen,
@@ -3358,12 +3497,12 @@ var PopoverRoot = (props) => {
3358
3497
  triggerRef,
3359
3498
  open,
3360
3499
  onOpenChange: setOpen,
3361
- onOpenToggle: useCallback9(() => setOpen((prevOpen) => !prevOpen), [
3500
+ onOpenToggle: useCallback11(() => setOpen((prevOpen) => !prevOpen), [
3362
3501
  setOpen
3363
3502
  ]),
3364
3503
  hasCustomAnchor,
3365
- onCustomAnchorAdd: useCallback9(() => setHasCustomAnchor(true), []),
3366
- onCustomAnchorRemove: useCallback9(() => setHasCustomAnchor(false), []),
3504
+ onCustomAnchorAdd: useCallback11(() => setHasCustomAnchor(true), []),
3505
+ onCustomAnchorRemove: useCallback11(() => setHasCustomAnchor(false), []),
3367
3506
  modal
3368
3507
  }, children));
3369
3508
  } finally {
@@ -3379,7 +3518,7 @@ var PopoverAnchor = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3379
3518
  const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
3380
3519
  const popperScope = usePopperScope2(__scopePopover);
3381
3520
  const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
3382
- useEffect7(() => {
3521
+ useEffect8(() => {
3383
3522
  onCustomAnchorAdd();
3384
3523
  return () => onCustomAnchorRemove();
3385
3524
  }, [
@@ -3430,7 +3569,7 @@ var PopoverVirtualTrigger = (props) => {
3430
3569
  const { __scopePopover, virtualRef } = props;
3431
3570
  const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
3432
3571
  const popperScope = usePopperScope2(__scopePopover);
3433
- useEffect7(() => {
3572
+ useEffect8(() => {
3434
3573
  if (virtualRef.current) {
3435
3574
  context.triggerRef.current = virtualRef.current;
3436
3575
  }
@@ -3495,7 +3634,7 @@ var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) =>
3495
3634
  const contentRef = useRef4(null);
3496
3635
  const composedRefs = useComposedRefs2(forwardedRef, contentRef);
3497
3636
  const isRightClickOutsideRef = useRef4(false);
3498
- useEffect7(() => {
3637
+ useEffect8(() => {
3499
3638
  const content = contentRef.current;
3500
3639
  if (content) {
3501
3640
  return hideOthers(content);
@@ -3582,13 +3721,29 @@ var PopoverContentNonModal = /* @__PURE__ */ forwardRef21((props, forwardedRef)
3582
3721
  var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3583
3722
  var _effect = _useSignals29();
3584
3723
  try {
3585
- const { __scopePopover, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, collisionPadding = 8, classNames, ...contentProps } = props;
3724
+ const { __scopePopover, trapFocus, onOpenAutoFocus, onCloseAutoFocus, disableOutsidePointerEvents, onEscapeKeyDown, onPointerDownOutside, onFocusOutside, onInteractOutside, collisionPadding = 8, collisionBoundary, classNames, ...contentProps } = props;
3586
3725
  const context = usePopoverContext(CONTENT_NAME3, __scopePopover);
3587
3726
  const popperScope = usePopperScope2(__scopePopover);
3588
3727
  const { tx } = useThemeContext();
3589
3728
  const elevation = useElevationContext();
3590
3729
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
3591
3730
  useFocusGuards();
3731
+ const computedCollisionBoundary = useMemo6(() => {
3732
+ const closestBoundary = context.triggerRef.current?.closest("[data-popover-collision-boundary]");
3733
+ return closestBoundary ? Array.isArray(collisionBoundary) ? [
3734
+ closestBoundary,
3735
+ ...collisionBoundary
3736
+ ] : collisionBoundary ? [
3737
+ closestBoundary,
3738
+ collisionBoundary
3739
+ ] : [
3740
+ closestBoundary
3741
+ ] : collisionBoundary;
3742
+ }, [
3743
+ context.open,
3744
+ collisionBoundary,
3745
+ context.triggerRef.current
3746
+ ]);
3592
3747
  return /* @__PURE__ */ React29.createElement(FocusScope, {
3593
3748
  asChild: true,
3594
3749
  loop: true,
@@ -3610,13 +3765,14 @@ var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3610
3765
  ...popperScope,
3611
3766
  ...contentProps,
3612
3767
  collisionPadding: safeCollisionPadding,
3768
+ collisionBoundary: computedCollisionBoundary,
3613
3769
  className: tx("popover.content", "popover", {
3614
3770
  elevation
3615
3771
  }, classNames),
3616
3772
  ref: forwardedRef,
3617
3773
  style: {
3618
3774
  ...contentProps.style,
3619
- // re-namespace exposed content custom properties
3775
+ // Re-namespace exposed content custom properties.
3620
3776
  ...{
3621
3777
  "--radix-popover-content-transform-origin": "var(--radix-popper-transform-origin)",
3622
3778
  "--radix-popover-content-available-width": "var(--radix-popper-available-width)",
@@ -3669,8 +3825,8 @@ var PopoverViewport = /* @__PURE__ */ forwardRef21(({ classNames, asChild, const
3669
3825
  var _effect = _useSignals29();
3670
3826
  try {
3671
3827
  const { tx } = useThemeContext();
3672
- const Root7 = asChild ? Slot12 : Primitive12.div;
3673
- return /* @__PURE__ */ React29.createElement(Root7, {
3828
+ const Root8 = asChild ? Slot12 : Primitive12.div;
3829
+ return /* @__PURE__ */ React29.createElement(Root8, {
3674
3830
  ...props,
3675
3831
  className: tx("popover.viewport", "popover__viewport", {
3676
3832
  constrainInline,
@@ -3805,28 +3961,190 @@ var ScrollArea = {
3805
3961
  Corner: ScrollAreaCorner
3806
3962
  };
3807
3963
 
3808
- // src/components/Select/Select.tsx
3964
+ // src/components/ScrollContainer/ScrollContainer.tsx
3809
3965
  import { useSignals as _useSignals32 } from "@preact-signals/safe-react/tracking";
3966
+ import { useState as useState10 } from "@preact-signals/safe-react/react";
3967
+ import { createContext as createContext12 } from "@radix-ui/react-context";
3968
+ import React32, { forwardRef as forwardRef24, useCallback as useCallback12, useEffect as useEffect9, useImperativeHandle, useMemo as useMemo7, useRef as useRef5 } from "react";
3969
+ import { addEventListener, combine } from "@dxos/async";
3970
+ import { invariant } from "@dxos/invariant";
3971
+ import { useForwardedRef as useForwardedRef2 } from "@dxos/react-hooks";
3972
+ import { mx as mx5 } from "@dxos/react-ui-theme";
3973
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui/src/components/ScrollContainer/ScrollContainer.tsx";
3974
+ var isBottom = (el) => {
3975
+ return !!(el && el.scrollHeight - el.scrollTop === el.clientHeight);
3976
+ };
3977
+ var [ScrollContainerProvider, useScrollContainerContext] = createContext12("ScrollContainer");
3978
+ var Root5 = /* @__PURE__ */ forwardRef24(({ children, classNames, pin, fade }, forwardedRef) => {
3979
+ var _effect = _useSignals32();
3980
+ try {
3981
+ const scrollerRef = useRef5(null);
3982
+ const autoScrollRef = useRef5(false);
3983
+ const [overflow, setOverflow] = useState10(false);
3984
+ const [pinned, setPinned] = useState10(pin);
3985
+ const timeoutRef = useRef5(void 0);
3986
+ const scrollToBottom = useCallback12((behavior = "instant") => {
3987
+ if (scrollerRef.current) {
3988
+ autoScrollRef.current = true;
3989
+ scrollerRef.current.classList.add("scrollbar-none");
3990
+ scrollerRef.current.scrollTo({
3991
+ top: scrollerRef.current.scrollHeight,
3992
+ behavior
3993
+ });
3994
+ clearTimeout(timeoutRef.current);
3995
+ if (behavior !== "instant") {
3996
+ timeoutRef.current = setTimeout(() => {
3997
+ scrollerRef.current?.classList.remove("scrollbar-none");
3998
+ autoScrollRef.current = false;
3999
+ }, 500);
4000
+ }
4001
+ setPinned(true);
4002
+ }
4003
+ }, []);
4004
+ const controller = useMemo7(() => ({
4005
+ viewport: scrollerRef.current,
4006
+ scrollToTop: () => {
4007
+ invariant(scrollerRef.current, void 0, {
4008
+ F: __dxlog_file2,
4009
+ L: 92,
4010
+ S: void 0,
4011
+ A: [
4012
+ "scrollerRef.current",
4013
+ ""
4014
+ ]
4015
+ });
4016
+ scrollerRef.current.scrollTo({
4017
+ top: 0,
4018
+ behavior: "smooth"
4019
+ });
4020
+ setPinned(false);
4021
+ },
4022
+ scrollToBottom: () => {
4023
+ scrollToBottom("smooth");
4024
+ }
4025
+ }), [
4026
+ scrollToBottom,
4027
+ scrollerRef.current
4028
+ ]);
4029
+ useImperativeHandle(forwardedRef, () => controller, [
4030
+ controller
4031
+ ]);
4032
+ useEffect9(() => {
4033
+ if (!scrollerRef.current) {
4034
+ return;
4035
+ }
4036
+ return combine(
4037
+ // Check if user scrolls.
4038
+ addEventListener(scrollerRef.current, "wheel", () => {
4039
+ setPinned(isBottom(scrollerRef.current));
4040
+ }),
4041
+ // Check if scrolls.
4042
+ addEventListener(scrollerRef.current, "scroll", () => {
4043
+ setOverflow((scrollerRef.current?.scrollTop ?? 0) > 0);
4044
+ })
4045
+ );
4046
+ }, []);
4047
+ return /* @__PURE__ */ React32.createElement(ScrollContainerProvider, {
4048
+ pinned,
4049
+ controller,
4050
+ scrollToBottom
4051
+ }, /* @__PURE__ */ React32.createElement("div", {
4052
+ className: "relative grid flex-1 min-bs-0 overflow-hidden"
4053
+ }, fade && /* @__PURE__ */ React32.createElement("div", {
4054
+ role: "none",
4055
+ "data-visible": overflow,
4056
+ className: mx5(
4057
+ // NOTE: Gradients may not be visible with dark reader extensions.
4058
+ "z-10 absolute block-start-0 inset-inline-0 bs-24 is-full",
4059
+ 'opacity-0 duration-200 transition-opacity data-[visible="true"]:opacity-100',
4060
+ "bg-gradient-to-b from-[--surface-bg] to-transparent pointer-events-none"
4061
+ )
4062
+ }), /* @__PURE__ */ React32.createElement("div", {
4063
+ className: mx5("flex flex-col min-bs-0 overflow-y-auto scrollbar-thin", classNames),
4064
+ ref: scrollerRef
4065
+ }, children)));
4066
+ } finally {
4067
+ _effect.f();
4068
+ }
4069
+ });
4070
+ Root5.displayName = "ScrollContainer.Root";
4071
+ var Viewport = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
4072
+ var _effect = _useSignals32();
4073
+ try {
4074
+ const contentRef = useForwardedRef2(forwardedRef);
4075
+ const { pinned, scrollToBottom } = useScrollContainerContext(Viewport.displayName);
4076
+ useEffect9(() => {
4077
+ if (!pinned || !contentRef.current) {
4078
+ return;
4079
+ }
4080
+ const resizeObserver = new ResizeObserver(() => scrollToBottom());
4081
+ scrollToBottom("instant");
4082
+ resizeObserver.observe(contentRef.current);
4083
+ return () => {
4084
+ resizeObserver.disconnect();
4085
+ };
4086
+ }, [
4087
+ pinned,
4088
+ scrollToBottom
4089
+ ]);
4090
+ return /* @__PURE__ */ React32.createElement("div", {
4091
+ className: mx5("is-full", classNames),
4092
+ ...props,
4093
+ ref: contentRef
4094
+ }, children);
4095
+ } finally {
4096
+ _effect.f();
4097
+ }
4098
+ });
4099
+ Viewport.displayName = "ScrollContainer.Viewport";
4100
+ var ScrollDownButton = ({ classNames }) => {
4101
+ var _effect = _useSignals32();
4102
+ try {
4103
+ const { pinned, scrollToBottom } = useScrollContainerContext(ScrollDownButton.displayName);
4104
+ return /* @__PURE__ */ React32.createElement("div", {
4105
+ role: "none",
4106
+ className: mx5("absolute bottom-2 right-4 opacity-100 transition-opacity duration-300", pinned && "opacity-0", classNames)
4107
+ }, /* @__PURE__ */ React32.createElement(IconButton, {
4108
+ variant: "primary",
4109
+ icon: "ph--arrow-down--regular",
4110
+ iconOnly: true,
4111
+ size: 4,
4112
+ label: "Scroll down",
4113
+ onClick: () => scrollToBottom()
4114
+ }));
4115
+ } finally {
4116
+ _effect.f();
4117
+ }
4118
+ };
4119
+ ScrollDownButton.displayName = "ScrollContainer.ScrollDownButton";
4120
+ var ScrollContainer = {
4121
+ Root: Root5,
4122
+ Viewport,
4123
+ ScrollDownButton
4124
+ };
4125
+
4126
+ // src/components/Select/Select.tsx
4127
+ import { useSignals as _useSignals33 } from "@preact-signals/safe-react/tracking";
3810
4128
  import * as SelectPrimitive from "@radix-ui/react-select";
3811
- import React32, { forwardRef as forwardRef24 } from "react";
4129
+ import React33, { forwardRef as forwardRef25 } from "react";
3812
4130
  var SelectRoot = SelectPrimitive.Root;
3813
4131
  var SelectTrigger = SelectPrimitive.Trigger;
3814
4132
  var SelectValue = SelectPrimitive.Value;
3815
4133
  var SelectIcon = SelectPrimitive.Icon;
3816
4134
  var SelectPortal = SelectPrimitive.Portal;
3817
- var SelectTriggerButton = /* @__PURE__ */ forwardRef24(({ children, placeholder, ...props }, forwardedRef) => {
3818
- var _effect = _useSignals32();
4135
+ var SelectTriggerButton = /* @__PURE__ */ forwardRef25(({ children, placeholder, ...props }, forwardedRef) => {
4136
+ var _effect = _useSignals33();
3819
4137
  try {
3820
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Trigger, {
4138
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Trigger, {
3821
4139
  asChild: true,
3822
4140
  ref: forwardedRef
3823
- }, /* @__PURE__ */ React32.createElement(Button, props, /* @__PURE__ */ React32.createElement(SelectPrimitive.Value, {
4141
+ }, /* @__PURE__ */ React33.createElement(Button, props, /* @__PURE__ */ React33.createElement(SelectPrimitive.Value, {
3824
4142
  placeholder
3825
- }, children), /* @__PURE__ */ React32.createElement("span", {
3826
- className: "w-1 flex-1"
3827
- }), /* @__PURE__ */ React32.createElement(SelectPrimitive.Icon, {
4143
+ }, children), /* @__PURE__ */ React33.createElement("span", {
4144
+ className: "is-1 flex-1"
4145
+ }), /* @__PURE__ */ React33.createElement(SelectPrimitive.Icon, {
3828
4146
  asChild: true
3829
- }, /* @__PURE__ */ React32.createElement(Icon, {
4147
+ }, /* @__PURE__ */ React33.createElement(Icon, {
3830
4148
  size: 3,
3831
4149
  icon: "ph--caret-down--bold"
3832
4150
  }))));
@@ -3834,14 +4152,15 @@ var SelectTriggerButton = /* @__PURE__ */ forwardRef24(({ children, placeholder,
3834
4152
  _effect.f();
3835
4153
  }
3836
4154
  });
3837
- var SelectContent = /* @__PURE__ */ forwardRef24(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
3838
- var _effect = _useSignals32();
4155
+ var SelectContent = /* @__PURE__ */ forwardRef25(({ classNames, children, collisionPadding = 8, ...props }, forwardedRef) => {
4156
+ var _effect = _useSignals33();
3839
4157
  try {
3840
4158
  const { tx } = useThemeContext();
3841
4159
  const elevation = useElevationContext();
3842
4160
  const safeCollisionPadding = useSafeCollisionPadding(collisionPadding);
3843
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Content, {
4161
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Content, {
3844
4162
  ...props,
4163
+ "data-arrow-keys": "up down",
3845
4164
  collisionPadding: safeCollisionPadding,
3846
4165
  className: tx("select.content", "select__content", {
3847
4166
  elevation
@@ -3853,15 +4172,15 @@ var SelectContent = /* @__PURE__ */ forwardRef24(({ classNames, children, collis
3853
4172
  _effect.f();
3854
4173
  }
3855
4174
  });
3856
- var SelectScrollUpButton2 = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
3857
- var _effect = _useSignals32();
4175
+ var SelectScrollUpButton2 = /* @__PURE__ */ forwardRef25(({ classNames, children, ...props }, forwardedRef) => {
4176
+ var _effect = _useSignals33();
3858
4177
  try {
3859
4178
  const { tx } = useThemeContext();
3860
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.SelectScrollUpButton, {
4179
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.SelectScrollUpButton, {
3861
4180
  ...props,
3862
4181
  className: tx("select.scrollButton", "select__scroll-button--up", {}, classNames),
3863
4182
  ref: forwardedRef
3864
- }, children ?? /* @__PURE__ */ React32.createElement(Icon, {
4183
+ }, children ?? /* @__PURE__ */ React33.createElement(Icon, {
3865
4184
  size: 3,
3866
4185
  icon: "ph--caret-up--bold"
3867
4186
  }));
@@ -3869,15 +4188,15 @@ var SelectScrollUpButton2 = /* @__PURE__ */ forwardRef24(({ classNames, children
3869
4188
  _effect.f();
3870
4189
  }
3871
4190
  });
3872
- var SelectScrollDownButton2 = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
3873
- var _effect = _useSignals32();
4191
+ var SelectScrollDownButton2 = /* @__PURE__ */ forwardRef25(({ classNames, children, ...props }, forwardedRef) => {
4192
+ var _effect = _useSignals33();
3874
4193
  try {
3875
4194
  const { tx } = useThemeContext();
3876
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.SelectScrollDownButton, {
4195
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.SelectScrollDownButton, {
3877
4196
  ...props,
3878
4197
  className: tx("select.scrollButton", "select__scroll-button--down", {}, classNames),
3879
4198
  ref: forwardedRef
3880
- }, children ?? /* @__PURE__ */ React32.createElement(Icon, {
4199
+ }, children ?? /* @__PURE__ */ React33.createElement(Icon, {
3881
4200
  size: 3,
3882
4201
  icon: "ph--caret-down--bold"
3883
4202
  }));
@@ -3885,11 +4204,11 @@ var SelectScrollDownButton2 = /* @__PURE__ */ forwardRef24(({ classNames, childr
3885
4204
  _effect.f();
3886
4205
  }
3887
4206
  });
3888
- var SelectViewport2 = /* @__PURE__ */ forwardRef24(({ classNames, asChild, children, ...props }, forwardedRef) => {
3889
- var _effect = _useSignals32();
4207
+ var SelectViewport2 = /* @__PURE__ */ forwardRef25(({ classNames, children, ...props }, forwardedRef) => {
4208
+ var _effect = _useSignals33();
3890
4209
  try {
3891
4210
  const { tx } = useThemeContext();
3892
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.SelectViewport, {
4211
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.SelectViewport, {
3893
4212
  ...props,
3894
4213
  className: tx("select.viewport", "select__viewport", {}, classNames),
3895
4214
  ref: forwardedRef
@@ -3898,11 +4217,11 @@ var SelectViewport2 = /* @__PURE__ */ forwardRef24(({ classNames, asChild, child
3898
4217
  _effect.f();
3899
4218
  }
3900
4219
  });
3901
- var SelectItem = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
3902
- var _effect = _useSignals32();
4220
+ var SelectItem = /* @__PURE__ */ forwardRef25(({ classNames, ...props }, forwardedRef) => {
4221
+ var _effect = _useSignals33();
3903
4222
  try {
3904
4223
  const { tx } = useThemeContext();
3905
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Item, {
4224
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Item, {
3906
4225
  ...props,
3907
4226
  className: tx("select.item", "option", {}, classNames),
3908
4227
  ref: forwardedRef
@@ -3912,11 +4231,11 @@ var SelectItem = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forward
3912
4231
  }
3913
4232
  });
3914
4233
  var SelectItemText = SelectPrimitive.ItemText;
3915
- var SelectItemIndicator = /* @__PURE__ */ forwardRef24(({ classNames, children, ...props }, forwardedRef) => {
3916
- var _effect = _useSignals32();
4234
+ var SelectItemIndicator = /* @__PURE__ */ forwardRef25(({ classNames, children, ...props }, forwardedRef) => {
4235
+ var _effect = _useSignals33();
3917
4236
  try {
3918
4237
  const { tx } = useThemeContext();
3919
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.ItemIndicator, {
4238
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.ItemIndicator, {
3920
4239
  ...props,
3921
4240
  className: tx("select.itemIndicator", "option__indicator", {}, classNames),
3922
4241
  ref: forwardedRef
@@ -3925,17 +4244,17 @@ var SelectItemIndicator = /* @__PURE__ */ forwardRef24(({ classNames, children,
3925
4244
  _effect.f();
3926
4245
  }
3927
4246
  });
3928
- var SelectOption = /* @__PURE__ */ forwardRef24(({ children, classNames, ...props }, forwardedRef) => {
3929
- var _effect = _useSignals32();
4247
+ var SelectOption = /* @__PURE__ */ forwardRef25(({ children, classNames, ...props }, forwardedRef) => {
4248
+ var _effect = _useSignals33();
3930
4249
  try {
3931
4250
  const { tx } = useThemeContext();
3932
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Item, {
4251
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Item, {
3933
4252
  ...props,
3934
4253
  className: tx("select.item", "option", {}, classNames),
3935
4254
  ref: forwardedRef
3936
- }, /* @__PURE__ */ React32.createElement(SelectPrimitive.ItemText, null, children), /* @__PURE__ */ React32.createElement("span", {
3937
- className: "grow w-1"
3938
- }), /* @__PURE__ */ React32.createElement(Icon, {
4255
+ }, /* @__PURE__ */ React33.createElement(SelectPrimitive.ItemText, null, children), /* @__PURE__ */ React33.createElement("span", {
4256
+ className: "grow is-1"
4257
+ }), /* @__PURE__ */ React33.createElement(Icon, {
3939
4258
  icon: "ph--check--regular"
3940
4259
  }));
3941
4260
  } finally {
@@ -3944,11 +4263,11 @@ var SelectOption = /* @__PURE__ */ forwardRef24(({ children, classNames, ...prop
3944
4263
  });
3945
4264
  var SelectGroup = SelectPrimitive.Group;
3946
4265
  var SelectLabel = SelectPrimitive.Label;
3947
- var SelectSeparator = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
3948
- var _effect = _useSignals32();
4266
+ var SelectSeparator = /* @__PURE__ */ forwardRef25(({ classNames, ...props }, forwardedRef) => {
4267
+ var _effect = _useSignals33();
3949
4268
  try {
3950
4269
  const { tx } = useThemeContext();
3951
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Separator, {
4270
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Separator, {
3952
4271
  ...props,
3953
4272
  className: tx("select.separator", "select__separator", {}, classNames),
3954
4273
  ref: forwardedRef
@@ -3957,11 +4276,11 @@ var SelectSeparator = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, fo
3957
4276
  _effect.f();
3958
4277
  }
3959
4278
  });
3960
- var SelectArrow = /* @__PURE__ */ forwardRef24(({ classNames, ...props }, forwardedRef) => {
3961
- var _effect = _useSignals32();
4279
+ var SelectArrow = /* @__PURE__ */ forwardRef25(({ classNames, ...props }, forwardedRef) => {
4280
+ var _effect = _useSignals33();
3962
4281
  try {
3963
4282
  const { tx } = useThemeContext();
3964
- return /* @__PURE__ */ React32.createElement(SelectPrimitive.Arrow, {
4283
+ return /* @__PURE__ */ React33.createElement(SelectPrimitive.Arrow, {
3965
4284
  ...props,
3966
4285
  className: tx("select.arrow", "select__arrow", {}, classNames),
3967
4286
  ref: forwardedRef
@@ -3992,14 +4311,14 @@ var Select = {
3992
4311
  };
3993
4312
 
3994
4313
  // src/components/Separator/Separator.tsx
3995
- import { useSignals as _useSignals33 } from "@preact-signals/safe-react/tracking";
4314
+ import { useSignals as _useSignals34 } from "@preact-signals/safe-react/tracking";
3996
4315
  import { Separator as SeparatorPrimitive } from "@radix-ui/react-separator";
3997
- import React33, { forwardRef as forwardRef25 } from "react";
3998
- var Separator4 = /* @__PURE__ */ forwardRef25(({ classNames, orientation = "horizontal", subdued, ...props }, forwardedRef) => {
3999
- var _effect = _useSignals33();
4316
+ import React34, { forwardRef as forwardRef26 } from "react";
4317
+ var Separator4 = /* @__PURE__ */ forwardRef26(({ classNames, orientation = "horizontal", subdued, ...props }, forwardedRef) => {
4318
+ var _effect = _useSignals34();
4000
4319
  try {
4001
4320
  const { tx } = useThemeContext();
4002
- return /* @__PURE__ */ React33.createElement(SeparatorPrimitive, {
4321
+ return /* @__PURE__ */ React34.createElement(SeparatorPrimitive, {
4003
4322
  orientation,
4004
4323
  ...props,
4005
4324
  className: tx("separator.root", "separator", {
@@ -4014,16 +4333,16 @@ var Separator4 = /* @__PURE__ */ forwardRef25(({ classNames, orientation = "hori
4014
4333
  });
4015
4334
 
4016
4335
  // src/components/Tag/Tag.tsx
4017
- import { useSignals as _useSignals34 } from "@preact-signals/safe-react/tracking";
4336
+ import { useSignals as _useSignals35 } from "@preact-signals/safe-react/tracking";
4018
4337
  import { Primitive as Primitive13 } from "@radix-ui/react-primitive";
4019
4338
  import { Slot as Slot13 } from "@radix-ui/react-slot";
4020
- import React34, { forwardRef as forwardRef26 } from "react";
4021
- var Tag = /* @__PURE__ */ forwardRef26(({ asChild, palette = "neutral", classNames, ...props }, forwardedRef) => {
4022
- var _effect = _useSignals34();
4339
+ import React35, { forwardRef as forwardRef27 } from "react";
4340
+ var Tag = /* @__PURE__ */ forwardRef27(({ asChild, palette = "neutral", classNames, ...props }, forwardedRef) => {
4341
+ var _effect = _useSignals35();
4023
4342
  try {
4024
4343
  const { tx } = useThemeContext();
4025
- const Root7 = asChild ? Slot13 : Primitive13.span;
4026
- return /* @__PURE__ */ React34.createElement(Root7, {
4344
+ const Root8 = asChild ? Slot13 : Primitive13.span;
4345
+ return /* @__PURE__ */ React35.createElement(Root8, {
4027
4346
  ...props,
4028
4347
  className: tx("tag.root", "dx-tag", {
4029
4348
  palette
@@ -4037,17 +4356,17 @@ var Tag = /* @__PURE__ */ forwardRef26(({ asChild, palette = "neutral", classNam
4037
4356
  });
4038
4357
 
4039
4358
  // src/components/Toast/Toast.tsx
4040
- import { useSignals as _useSignals35 } from "@preact-signals/safe-react/tracking";
4359
+ import { useSignals as _useSignals36 } from "@preact-signals/safe-react/tracking";
4041
4360
  import { Primitive as Primitive14 } from "@radix-ui/react-primitive";
4042
4361
  import { Slot as Slot14 } from "@radix-ui/react-slot";
4043
4362
  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";
4044
- import React35, { forwardRef as forwardRef27 } from "react";
4363
+ import React36, { forwardRef as forwardRef28 } from "react";
4045
4364
  var ToastProvider = ToastProviderPrimitive;
4046
- var ToastViewport = /* @__PURE__ */ forwardRef27(({ classNames, ...props }, forwardedRef) => {
4047
- var _effect = _useSignals35();
4365
+ var ToastViewport = /* @__PURE__ */ forwardRef28(({ classNames, ...props }, forwardedRef) => {
4366
+ var _effect = _useSignals36();
4048
4367
  try {
4049
4368
  const { tx } = useThemeContext();
4050
- return /* @__PURE__ */ React35.createElement(ToastViewportPrimitive, {
4369
+ return /* @__PURE__ */ React36.createElement(ToastViewportPrimitive, {
4051
4370
  className: tx("toast.viewport", "toast-viewport", {}, classNames),
4052
4371
  ref: forwardedRef
4053
4372
  });
@@ -4055,27 +4374,27 @@ var ToastViewport = /* @__PURE__ */ forwardRef27(({ classNames, ...props }, forw
4055
4374
  _effect.f();
4056
4375
  }
4057
4376
  });
4058
- var ToastRoot = /* @__PURE__ */ forwardRef27(({ classNames, children, ...props }, forwardedRef) => {
4059
- var _effect = _useSignals35();
4377
+ var ToastRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, ...props }, forwardedRef) => {
4378
+ var _effect = _useSignals36();
4060
4379
  try {
4061
4380
  const { tx } = useThemeContext();
4062
- return /* @__PURE__ */ React35.createElement(ToastRootPrimitive, {
4381
+ return /* @__PURE__ */ React36.createElement(ToastRootPrimitive, {
4063
4382
  ...props,
4064
4383
  className: tx("toast.root", "toast", {}, classNames),
4065
4384
  ref: forwardedRef
4066
- }, /* @__PURE__ */ React35.createElement(ElevationProvider, {
4385
+ }, /* @__PURE__ */ React36.createElement(ElevationProvider, {
4067
4386
  elevation: "toast"
4068
4387
  }, children));
4069
4388
  } finally {
4070
4389
  _effect.f();
4071
4390
  }
4072
4391
  });
4073
- var ToastBody = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
4074
- var _effect = _useSignals35();
4392
+ var ToastBody = /* @__PURE__ */ forwardRef28(({ asChild, classNames, ...props }, forwardedRef) => {
4393
+ var _effect = _useSignals36();
4075
4394
  try {
4076
4395
  const { tx } = useThemeContext();
4077
- const Root7 = asChild ? Slot14 : Primitive14.div;
4078
- return /* @__PURE__ */ React35.createElement(Root7, {
4396
+ const Root8 = asChild ? Slot14 : Primitive14.div;
4397
+ return /* @__PURE__ */ React36.createElement(Root8, {
4079
4398
  ...props,
4080
4399
  className: tx("toast.body", "toast__body", {}, classNames),
4081
4400
  ref: forwardedRef
@@ -4084,12 +4403,12 @@ var ToastBody = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props },
4084
4403
  _effect.f();
4085
4404
  }
4086
4405
  });
4087
- var ToastTitle = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
4088
- var _effect = _useSignals35();
4406
+ var ToastTitle = /* @__PURE__ */ forwardRef28(({ asChild, classNames, ...props }, forwardedRef) => {
4407
+ var _effect = _useSignals36();
4089
4408
  try {
4090
4409
  const { tx } = useThemeContext();
4091
- const Root7 = asChild ? Slot14 : ToastTitlePrimitive;
4092
- return /* @__PURE__ */ React35.createElement(Root7, {
4410
+ const Root8 = asChild ? Slot14 : ToastTitlePrimitive;
4411
+ return /* @__PURE__ */ React36.createElement(Root8, {
4093
4412
  ...props,
4094
4413
  className: tx("toast.title", "toast__title", {}, classNames),
4095
4414
  ref: forwardedRef
@@ -4098,12 +4417,12 @@ var ToastTitle = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }
4098
4417
  _effect.f();
4099
4418
  }
4100
4419
  });
4101
- var ToastDescription = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
4102
- var _effect = _useSignals35();
4420
+ var ToastDescription = /* @__PURE__ */ forwardRef28(({ asChild, classNames, ...props }, forwardedRef) => {
4421
+ var _effect = _useSignals36();
4103
4422
  try {
4104
4423
  const { tx } = useThemeContext();
4105
- const Root7 = asChild ? Slot14 : ToastDescriptionPrimitive;
4106
- return /* @__PURE__ */ React35.createElement(Root7, {
4424
+ const Root8 = asChild ? Slot14 : ToastDescriptionPrimitive;
4425
+ return /* @__PURE__ */ React36.createElement(Root8, {
4107
4426
  ...props,
4108
4427
  className: tx("toast.description", "toast__description", {}, classNames),
4109
4428
  ref: forwardedRef
@@ -4112,12 +4431,12 @@ var ToastDescription = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...p
4112
4431
  _effect.f();
4113
4432
  }
4114
4433
  });
4115
- var ToastActions = /* @__PURE__ */ forwardRef27(({ asChild, classNames, ...props }, forwardedRef) => {
4116
- var _effect = _useSignals35();
4434
+ var ToastActions = /* @__PURE__ */ forwardRef28(({ asChild, classNames, ...props }, forwardedRef) => {
4435
+ var _effect = _useSignals36();
4117
4436
  try {
4118
4437
  const { tx } = useThemeContext();
4119
- const Root7 = asChild ? Slot14 : Primitive14.div;
4120
- return /* @__PURE__ */ React35.createElement(Root7, {
4438
+ const Root8 = asChild ? Slot14 : Primitive14.div;
4439
+ return /* @__PURE__ */ React36.createElement(Root8, {
4121
4440
  ...props,
4122
4441
  className: tx("toast.actions", "toast__actions", {}, classNames),
4123
4442
  ref: forwardedRef
@@ -4141,30 +4460,39 @@ var Toast = {
4141
4460
  };
4142
4461
 
4143
4462
  // src/components/Toolbar/Toolbar.tsx
4144
- import { useSignals as _useSignals36 } from "@preact-signals/safe-react/tracking";
4463
+ import { useSignals as _useSignals37 } from "@preact-signals/safe-react/tracking";
4145
4464
  import * as ToolbarPrimitive from "@radix-ui/react-toolbar";
4146
- import React36, { forwardRef as forwardRef28 } from "react";
4147
- var ToolbarRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
4148
- var _effect = _useSignals36();
4465
+ import React37, { Fragment, forwardRef as forwardRef29 } from "react";
4466
+ var ToolbarRoot = /* @__PURE__ */ forwardRef29(({ classNames, children, layoutManaged, textBlockWidth: textBlockWidthParam, disabled, ...props }, forwardedRef) => {
4467
+ var _effect = _useSignals37();
4149
4468
  try {
4150
4469
  const { tx } = useThemeContext();
4151
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Root, {
4470
+ const InnerRoot = textBlockWidthParam ? "div" : Fragment;
4471
+ const innerRootProps = textBlockWidthParam ? {
4472
+ role: "none",
4473
+ className: tx("toolbar.inner", "toolbar", {
4474
+ layoutManaged
4475
+ }, classNames)
4476
+ } : {};
4477
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Root, {
4152
4478
  ...props,
4479
+ "data-arrow-keys": props.orientation === "vertical" ? "up down" : "left right",
4153
4480
  className: tx("toolbar.root", "toolbar", {
4154
- layoutManaged
4481
+ layoutManaged,
4482
+ disabled
4155
4483
  }, classNames),
4156
4484
  ref: forwardedRef
4157
- }, children);
4485
+ }, /* @__PURE__ */ React37.createElement(InnerRoot, innerRootProps, children));
4158
4486
  } finally {
4159
4487
  _effect.f();
4160
4488
  }
4161
4489
  });
4162
- var ToolbarButton = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4163
- var _effect = _useSignals36();
4490
+ var ToolbarButton = /* @__PURE__ */ forwardRef29((props, forwardedRef) => {
4491
+ var _effect = _useSignals37();
4164
4492
  try {
4165
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Button, {
4493
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Button, {
4166
4494
  asChild: true
4167
- }, /* @__PURE__ */ React36.createElement(Button, {
4495
+ }, /* @__PURE__ */ React37.createElement(Button, {
4168
4496
  ...props,
4169
4497
  ref: forwardedRef
4170
4498
  }));
@@ -4172,12 +4500,12 @@ var ToolbarButton = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4172
4500
  _effect.f();
4173
4501
  }
4174
4502
  });
4175
- var ToolbarIconButton = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4176
- var _effect = _useSignals36();
4503
+ var ToolbarIconButton = /* @__PURE__ */ forwardRef29((props, forwardedRef) => {
4504
+ var _effect = _useSignals37();
4177
4505
  try {
4178
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Button, {
4506
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Button, {
4179
4507
  asChild: true
4180
- }, /* @__PURE__ */ React36.createElement(IconButton, {
4508
+ }, /* @__PURE__ */ React37.createElement(IconButton, {
4181
4509
  ...props,
4182
4510
  ref: forwardedRef
4183
4511
  }));
@@ -4185,12 +4513,12 @@ var ToolbarIconButton = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4185
4513
  _effect.f();
4186
4514
  }
4187
4515
  });
4188
- var ToolbarToggle = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4189
- var _effect = _useSignals36();
4516
+ var ToolbarToggle = /* @__PURE__ */ forwardRef29((props, forwardedRef) => {
4517
+ var _effect = _useSignals37();
4190
4518
  try {
4191
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Button, {
4519
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Button, {
4192
4520
  asChild: true
4193
- }, /* @__PURE__ */ React36.createElement(Toggle, {
4521
+ }, /* @__PURE__ */ React37.createElement(Toggle, {
4194
4522
  ...props,
4195
4523
  ref: forwardedRef
4196
4524
  }));
@@ -4198,12 +4526,12 @@ var ToolbarToggle = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4198
4526
  _effect.f();
4199
4527
  }
4200
4528
  });
4201
- var ToolbarLink = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4202
- var _effect = _useSignals36();
4529
+ var ToolbarLink = /* @__PURE__ */ forwardRef29((props, forwardedRef) => {
4530
+ var _effect = _useSignals37();
4203
4531
  try {
4204
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Link, {
4532
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Link, {
4205
4533
  asChild: true
4206
- }, /* @__PURE__ */ React36.createElement(Link, {
4534
+ }, /* @__PURE__ */ React37.createElement(Link, {
4207
4535
  ...props,
4208
4536
  ref: forwardedRef
4209
4537
  }));
@@ -4211,13 +4539,13 @@ var ToolbarLink = /* @__PURE__ */ forwardRef28((props, forwardedRef) => {
4211
4539
  _effect.f();
4212
4540
  }
4213
4541
  });
4214
- var ToolbarToggleGroup2 = /* @__PURE__ */ forwardRef28(({ classNames, children, elevation, ...props }, forwardedRef) => {
4215
- var _effect = _useSignals36();
4542
+ var ToolbarToggleGroup2 = /* @__PURE__ */ forwardRef29(({ classNames, children, elevation, ...props }, forwardedRef) => {
4543
+ var _effect = _useSignals37();
4216
4544
  try {
4217
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.ToolbarToggleGroup, {
4545
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.ToolbarToggleGroup, {
4218
4546
  ...props,
4219
4547
  asChild: true
4220
- }, /* @__PURE__ */ React36.createElement(ButtonGroup, {
4548
+ }, /* @__PURE__ */ React37.createElement(ButtonGroup, {
4221
4549
  classNames,
4222
4550
  children,
4223
4551
  elevation,
@@ -4227,13 +4555,13 @@ var ToolbarToggleGroup2 = /* @__PURE__ */ forwardRef28(({ classNames, children,
4227
4555
  _effect.f();
4228
4556
  }
4229
4557
  });
4230
- var ToolbarToggleGroupItem = /* @__PURE__ */ forwardRef28(({ variant, density, elevation, classNames, children, ...props }, forwardedRef) => {
4231
- var _effect = _useSignals36();
4558
+ var ToolbarToggleGroupItem = /* @__PURE__ */ forwardRef29(({ variant, density, elevation, classNames, children, ...props }, forwardedRef) => {
4559
+ var _effect = _useSignals37();
4232
4560
  try {
4233
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.ToolbarToggleItem, {
4561
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.ToolbarToggleItem, {
4234
4562
  ...props,
4235
4563
  asChild: true
4236
- }, /* @__PURE__ */ React36.createElement(Button, {
4564
+ }, /* @__PURE__ */ React37.createElement(Button, {
4237
4565
  variant,
4238
4566
  density,
4239
4567
  elevation,
@@ -4245,13 +4573,13 @@ var ToolbarToggleGroupItem = /* @__PURE__ */ forwardRef28(({ variant, density, e
4245
4573
  _effect.f();
4246
4574
  }
4247
4575
  });
4248
- var ToolbarToggleGroupIconItem = /* @__PURE__ */ forwardRef28(({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
4249
- var _effect = _useSignals36();
4576
+ var ToolbarToggleGroupIconItem = /* @__PURE__ */ forwardRef29(({ variant, density, elevation, classNames, icon, label, iconOnly, ...props }, forwardedRef) => {
4577
+ var _effect = _useSignals37();
4250
4578
  try {
4251
- return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.ToolbarToggleItem, {
4579
+ return /* @__PURE__ */ React37.createElement(ToolbarPrimitive.ToolbarToggleItem, {
4252
4580
  ...props,
4253
4581
  asChild: true
4254
- }, /* @__PURE__ */ React36.createElement(IconButton, {
4582
+ }, /* @__PURE__ */ React37.createElement(IconButton, {
4255
4583
  variant,
4256
4584
  density,
4257
4585
  elevation,
@@ -4265,15 +4593,15 @@ var ToolbarToggleGroupIconItem = /* @__PURE__ */ forwardRef28(({ variant, densit
4265
4593
  _effect.f();
4266
4594
  }
4267
4595
  });
4268
- var ToolbarSeparator = /* @__PURE__ */ forwardRef28(({ variant = "line", ...props }, forwardedRef) => {
4269
- var _effect = _useSignals36();
4596
+ var ToolbarSeparator = /* @__PURE__ */ forwardRef29(({ variant = "line", ...props }, forwardedRef) => {
4597
+ var _effect = _useSignals37();
4270
4598
  try {
4271
- return variant === "line" ? /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Separator, {
4599
+ return variant === "line" ? /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Separator, {
4272
4600
  asChild: true
4273
- }, /* @__PURE__ */ React36.createElement(Separator4, {
4601
+ }, /* @__PURE__ */ React37.createElement(Separator4, {
4274
4602
  ...props,
4275
4603
  ref: forwardedRef
4276
- })) : /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Separator, {
4604
+ })) : /* @__PURE__ */ React37.createElement(ToolbarPrimitive.Separator, {
4277
4605
  className: "grow",
4278
4606
  ref: forwardedRef
4279
4607
  });
@@ -4328,8 +4656,11 @@ export {
4328
4656
  Toggle,
4329
4657
  ToggleGroup,
4330
4658
  ToggleGroupItem,
4659
+ ToggleGroupIconItem,
4331
4660
  useClipboard,
4661
+ Domino,
4332
4662
  hasIosKeyboard,
4663
+ usePx,
4333
4664
  DensityContext,
4334
4665
  DensityProvider,
4335
4666
  ElevationContext,
@@ -4365,10 +4696,12 @@ export {
4365
4696
  Popover,
4366
4697
  Status,
4367
4698
  ScrollArea,
4699
+ useScrollContainerContext,
4700
+ ScrollContainer,
4368
4701
  Select,
4369
4702
  Separator4 as Separator,
4370
4703
  Tag,
4371
4704
  Toast,
4372
4705
  Toolbar
4373
4706
  };
4374
- //# sourceMappingURL=chunk-P333G32W.mjs.map
4707
+ //# sourceMappingURL=chunk-N5GDJTT2.mjs.map