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

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 (51) hide show
  1. package/dist/lib/browser/{chunk-LBCJC75U.mjs → chunk-HUZZ56DW.mjs} +165 -115
  2. package/dist/lib/browser/chunk-HUZZ56DW.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +3 -1
  4. package/dist/lib/browser/index.mjs.map +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +44 -16
  7. package/dist/lib/browser/testing/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/{chunk-QTUGGUCB.mjs → chunk-OJLL6E2Z.mjs} +165 -115
  9. package/dist/lib/node-esm/chunk-OJLL6E2Z.mjs.map +7 -0
  10. package/dist/lib/node-esm/index.mjs +3 -1
  11. package/dist/lib/node-esm/index.mjs.map +1 -1
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/testing/index.mjs +44 -16
  14. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  15. package/dist/types/src/components/Icon/Icon.stories.d.ts +17 -0
  16. package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/Lists/Treegrid.d.ts.map +1 -1
  18. package/dist/types/src/components/Main/Main.d.ts +1 -10
  19. package/dist/types/src/components/Main/Main.d.ts.map +1 -1
  20. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  21. package/dist/types/src/components/Toolbar/Toolbar.d.ts +9 -5
  22. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
  23. package/dist/types/src/hooks/useVisualViewport.d.ts +2 -2
  24. package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
  25. package/dist/types/src/testing/decorators/index.d.ts +2 -1
  26. package/dist/types/src/testing/decorators/index.d.ts.map +1 -1
  27. package/dist/types/src/testing/decorators/withLayout.d.ts +15 -0
  28. package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -0
  29. package/dist/types/src/util/domino.d.ts +1 -1
  30. package/dist/types/src/util/domino.d.ts.map +1 -1
  31. package/dist/types/src/util/index.d.ts +1 -0
  32. package/dist/types/src/util/index.d.ts.map +1 -1
  33. package/dist/types/src/util/usePx.d.ts +8 -0
  34. package/dist/types/src/util/usePx.d.ts.map +1 -0
  35. package/dist/types/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +16 -15
  37. package/src/components/Icon/Icon.stories.tsx +113 -0
  38. package/src/components/Icon/Icon.tsx +1 -1
  39. package/src/components/Lists/Treegrid.tsx +57 -16
  40. package/src/components/Main/Main.tsx +16 -7
  41. package/src/components/Popover/Popover.tsx +3 -3
  42. package/src/components/Toolbar/Toolbar.tsx +16 -5
  43. package/src/hooks/useSafeArea.ts +2 -2
  44. package/src/hooks/useVisualViewport.ts +3 -3
  45. package/src/testing/decorators/index.ts +2 -1
  46. package/src/testing/decorators/withLayout.tsx +56 -0
  47. package/src/util/domino.ts +6 -4
  48. package/src/util/index.ts +1 -0
  49. package/src/util/usePx.ts +61 -0
  50. package/dist/lib/browser/chunk-LBCJC75U.mjs.map +0 -7
  51. package/dist/lib/node-esm/chunk-QTUGGUCB.mjs.map +0 -7
@@ -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, deps);
141
+ useViewportResize2(handleResize, deps);
142
142
  return {
143
143
  width,
144
144
  height
@@ -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();
@@ -1280,27 +1280,18 @@ import { mx as mx3 } from "@dxos/react-ui-theme";
1280
1280
  // src/components/ThemeProvider/ThemeProvider.tsx
1281
1281
  import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
1282
1282
  import { createKeyborg } from "keyborg";
1283
- 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
1284
 
1285
1285
  // src/util/domino.ts
1286
1286
  import { mx as mx2 } from "@dxos/react-ui-theme";
1287
- function _define_property(obj, key, value) {
1288
- if (key in obj) {
1289
- Object.defineProperty(obj, key, {
1290
- value,
1291
- enumerable: true,
1292
- configurable: true,
1293
- writable: true
1294
- });
1295
- } else {
1296
- obj[key] = value;
1297
- }
1298
- return obj;
1299
- }
1300
1287
  var Domino = class _Domino {
1301
1288
  static of(tag) {
1302
1289
  return new _Domino(tag);
1303
1290
  }
1291
+ _el;
1292
+ constructor(tag) {
1293
+ this._el = document.createElement(tag);
1294
+ }
1304
1295
  classNames(...classNames) {
1305
1296
  this._el.className = mx2(classNames);
1306
1297
  return this;
@@ -1313,12 +1304,12 @@ var Domino = class _Domino {
1313
1304
  this._el.dataset[key] = value;
1314
1305
  return this;
1315
1306
  }
1316
- style(styles) {
1317
- Object.assign(this._el.style, styles);
1307
+ attributes(attr) {
1308
+ Object.entries(attr).filter(([_, value]) => value !== void 0).map(([key, value]) => this._el.setAttribute(key, value));
1318
1309
  return this;
1319
1310
  }
1320
- attr(key, value) {
1321
- this._el[key] = value;
1311
+ style(styles) {
1312
+ Object.assign(this._el.style, styles);
1322
1313
  return this;
1323
1314
  }
1324
1315
  children(...children) {
@@ -1332,10 +1323,6 @@ var Domino = class _Domino {
1332
1323
  build() {
1333
1324
  return this._el;
1334
1325
  }
1335
- constructor(tag) {
1336
- _define_property(this, "_el", void 0);
1337
- this._el = document.createElement(tag);
1338
- }
1339
1326
  };
1340
1327
 
1341
1328
  // src/util/hasIosKeyboard.ts
@@ -1343,6 +1330,48 @@ var hasIosKeyboard = () => {
1343
1330
  return !!navigator.userAgent.match(/iP(ad|od|hone).+Safari/);
1344
1331
  };
1345
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
+
1346
1375
  // src/components/DensityProvider/DensityProvider.tsx
1347
1376
  import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
1348
1377
  import React13, { createContext as createContext5 } from "react";
@@ -1386,7 +1415,7 @@ var ThemeContext = /* @__PURE__ */ createContext7(void 0);
1386
1415
  var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName, themeMode = "dark", rootDensity = "fine", ...rest }) => {
1387
1416
  var _effect = _useSignals15();
1388
1417
  try {
1389
- useEffect3(() => {
1418
+ useEffect4(() => {
1390
1419
  if (document.defaultView) {
1391
1420
  const kb = createKeyborg(document.defaultView);
1392
1421
  kb.subscribe(handleInputModalityChange);
@@ -1394,7 +1423,7 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
1394
1423
  }
1395
1424
  }, []);
1396
1425
  const safeAreaPadding = useSafeArea();
1397
- const contextValue = useMemo2(() => ({
1426
+ const contextValue = useMemo3(() => ({
1398
1427
  tx,
1399
1428
  themeMode,
1400
1429
  hasIosKeyboard: hasIosKeyboard(),
@@ -1702,7 +1731,7 @@ var AlertDialog = {
1702
1731
  import { useSignals as _useSignals19 } from "@preact-signals/safe-react/tracking";
1703
1732
  import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
1704
1733
  import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1705
- import React19, { forwardRef as forwardRef13, useCallback as useCallback5 } from "react";
1734
+ import React19, { forwardRef as forwardRef13, useCallback as useCallback6 } from "react";
1706
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";
1707
1736
  import { mx as mx4 } from "@dxos/react-ui-theme";
1708
1737
  var Label = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
@@ -1774,7 +1803,7 @@ var PinInput = /* @__PURE__ */ forwardRef13(({ density: propsDensity, elevation:
1774
1803
  const { tx } = useThemeContext();
1775
1804
  const density = useDensityContext(propsDensity);
1776
1805
  const elevation = useElevationContext(propsElevation);
1777
- const segmentClassName = useCallback5(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1806
+ const segmentClassName = useCallback6(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1778
1807
  variant: "static",
1779
1808
  focused,
1780
1809
  disabled: props.disabled,
@@ -2211,12 +2240,12 @@ var TreeItem = {
2211
2240
 
2212
2241
  // src/components/Lists/Treegrid.tsx
2213
2242
  import { useSignals as _useSignals24 } from "@preact-signals/safe-react/tracking";
2214
- import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
2243
+ import { useFocusFinders } from "@fluentui/react-tabster";
2215
2244
  import { createContextScope as createContextScope2 } from "@radix-ui/react-context";
2216
2245
  import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
2217
2246
  import { Slot as Slot7 } from "@radix-ui/react-slot";
2218
2247
  import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
2219
- import React24, { forwardRef as forwardRef16 } from "react";
2248
+ import React24, { forwardRef as forwardRef16, useCallback as useCallback7 } from "react";
2220
2249
  var TREEGRID_ROW_NAME = "TreegridRow";
2221
2250
  var [createTreegridRowContext, createTreegridRowScope] = createContextScope2(TREEGRID_ROW_NAME, []);
2222
2251
  var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
@@ -2227,14 +2256,43 @@ var TreegridRoot = /* @__PURE__ */ forwardRef16(({ asChild, classNames, children
2227
2256
  try {
2228
2257
  const { tx } = useThemeContext();
2229
2258
  const Root7 = asChild ? Slot7 : Primitive7.div;
2230
- const arrowNavigationAttrs = useArrowNavigationGroup({
2231
- axis: "vertical",
2232
- tabbable: false,
2233
- circular: true
2234
- });
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
+ ]);
2235
2293
  return /* @__PURE__ */ React24.createElement(Root7, {
2236
2294
  role: "treegrid",
2237
- ...arrowNavigationAttrs,
2295
+ onKeyDown: handleKeyDown,
2238
2296
  ...props,
2239
2297
  className: tx("treegrid.root", "treegrid", {}, classNames),
2240
2298
  style: {
@@ -2259,15 +2317,6 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2259
2317
  onChange: propsOnOpenChange,
2260
2318
  defaultProp: defaultOpen
2261
2319
  });
2262
- const focusableGroupAttrs = useFocusableGroup({
2263
- tabBehavior: "limited"
2264
- });
2265
- const arrowGroupAttrs = useArrowNavigationGroup({
2266
- axis: "horizontal",
2267
- tabbable: false,
2268
- circular: false,
2269
- memorizeCurrent: false
2270
- });
2271
2320
  return /* @__PURE__ */ React24.createElement(TreegridRowProvider, {
2272
2321
  open,
2273
2322
  onOpenChange,
@@ -2282,16 +2331,10 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2282
2331
  "aria-expanded": open,
2283
2332
  "aria-owns": parentOf
2284
2333
  },
2285
- tabIndex: 0,
2286
- ...focusableGroupAttrs,
2287
2334
  ...props,
2288
2335
  id,
2289
2336
  ref: forwardedRef
2290
- }, /* @__PURE__ */ React24.createElement("div", {
2291
- role: "none",
2292
- className: "contents",
2293
- ...arrowGroupAttrs
2294
- }, children)));
2337
+ }, children));
2295
2338
  } finally {
2296
2339
  _effect.f();
2297
2340
  }
@@ -2324,17 +2367,18 @@ var Treegrid = {
2324
2367
 
2325
2368
  // src/components/Main/Main.tsx
2326
2369
  import { useSignals as _useSignals25 } from "@preact-signals/safe-react/tracking";
2370
+ import { useFocusableGroup } from "@fluentui/react-tabster";
2327
2371
  import { createContext as createContext10 } from "@radix-ui/react-context";
2328
2372
  import { DialogContent as DialogContent2, Root as DialogRoot2, DialogTitle as DialogTitle2 } from "@radix-ui/react-dialog";
2329
2373
  import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
2330
2374
  import { Slot as Slot8 } from "@radix-ui/react-slot";
2331
2375
  import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
2332
- 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";
2333
2377
  import { log } from "@dxos/log";
2334
2378
  import { useForwardedRef, useMediaQuery } from "@dxos/react-hooks";
2335
2379
 
2336
2380
  // src/components/Main/useSwipeToDismiss.ts
2337
- 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";
2338
2382
  var useSwipeToDismiss = (ref, {
2339
2383
  onDismiss,
2340
2384
  dismissThreshold = 64,
@@ -2343,22 +2387,22 @@ var useSwipeToDismiss = (ref, {
2343
2387
  /* side = 'inline-start' */
2344
2388
  }) => {
2345
2389
  const $root = ref.current;
2346
- const [motionState, setMotionState] = useState6(0);
2347
- const [gestureStartX, setGestureStartX] = useState6(0);
2348
- const setIdle = useCallback6(() => {
2390
+ const [motionState, setMotionState] = useState7(0);
2391
+ const [gestureStartX, setGestureStartX] = useState7(0);
2392
+ const setIdle = useCallback8(() => {
2349
2393
  setMotionState(0);
2350
2394
  $root?.style.removeProperty("inset-inline-start");
2351
2395
  $root?.style.setProperty("transition-duration", "200ms");
2352
2396
  }, [
2353
2397
  $root
2354
2398
  ]);
2355
- const setFollowing = useCallback6(() => {
2399
+ const setFollowing = useCallback8(() => {
2356
2400
  setMotionState(2);
2357
2401
  $root?.style.setProperty("transition-duration", "0ms");
2358
2402
  }, [
2359
2403
  $root
2360
2404
  ]);
2361
- const handlePointerDown = useCallback6(({ screenX }) => {
2405
+ const handlePointerDown = useCallback8(({ screenX }) => {
2362
2406
  if (motionState === 0) {
2363
2407
  setMotionState(1);
2364
2408
  setGestureStartX(screenX);
@@ -2366,7 +2410,7 @@ var useSwipeToDismiss = (ref, {
2366
2410
  }, [
2367
2411
  motionState
2368
2412
  ]);
2369
- const handlePointerMove = useCallback6(({ screenX }) => {
2413
+ const handlePointerMove = useCallback8(({ screenX }) => {
2370
2414
  if ($root) {
2371
2415
  const delta = Math.min(screenX - gestureStartX, 0);
2372
2416
  switch (motionState) {
@@ -2390,12 +2434,12 @@ var useSwipeToDismiss = (ref, {
2390
2434
  motionState,
2391
2435
  gestureStartX
2392
2436
  ]);
2393
- const handlePointerUp = useCallback6(() => {
2437
+ const handlePointerUp = useCallback8(() => {
2394
2438
  setIdle();
2395
2439
  }, [
2396
2440
  setIdle
2397
2441
  ]);
2398
- useEffect4(() => {
2442
+ useEffect5(() => {
2399
2443
  $root?.addEventListener("pointerdown", handlePointerDown);
2400
2444
  return () => {
2401
2445
  $root?.removeEventListener("pointerdown", handlePointerDown);
@@ -2404,7 +2448,7 @@ var useSwipeToDismiss = (ref, {
2404
2448
  $root,
2405
2449
  handlePointerDown
2406
2450
  ]);
2407
- useEffect4(() => {
2451
+ useEffect5(() => {
2408
2452
  $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
2409
2453
  return () => {
2410
2454
  document.documentElement.removeEventListener("pointermove", handlePointerMove);
@@ -2413,7 +2457,7 @@ var useSwipeToDismiss = (ref, {
2413
2457
  $root,
2414
2458
  handlePointerMove
2415
2459
  ]);
2416
- useEffect4(() => {
2460
+ useEffect5(() => {
2417
2461
  $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
2418
2462
  return () => {
2419
2463
  document.documentElement.removeEventListener("pointerup", handlePointerUp);
@@ -2433,7 +2477,7 @@ var MAIN_NAME = "Main";
2433
2477
  var GENERIC_CONSUMER_NAME = "GenericConsumer";
2434
2478
  var landmarkAttr = "data-main-landmark";
2435
2479
  var useLandmarkMover = (propsOnKeyDown, landmark) => {
2436
- const handleKeyDown = useCallback7((event) => {
2480
+ const handleKeyDown = useCallback9((event) => {
2437
2481
  const target = event.target;
2438
2482
  if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2439
2483
  event.preventDefault();
@@ -2447,12 +2491,12 @@ var useLandmarkMover = (propsOnKeyDown, landmark) => {
2447
2491
  }, [
2448
2492
  propsOnKeyDown
2449
2493
  ]);
2450
- const focusableGroupAttrs = window ? {} : {
2494
+ const focusableGroupAttrs = useFocusableGroup({
2451
2495
  tabBehavior: "limited",
2452
2496
  ignoreDefaultKeydown: {
2453
2497
  Tab: true
2454
2498
  }
2455
- };
2499
+ });
2456
2500
  return {
2457
2501
  onKeyDown: handleKeyDown,
2458
2502
  [landmarkAttr]: landmark,
@@ -2466,7 +2510,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2466
2510
  setNavigationSidebarState: (_nextState) => {
2467
2511
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2468
2512
  F: __dxlog_file,
2469
- L: 88,
2513
+ L: 92,
2470
2514
  S: void 0,
2471
2515
  C: (f, a) => f(...a)
2472
2516
  });
@@ -2475,7 +2519,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2475
2519
  setComplementarySidebarState: (_nextState) => {
2476
2520
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2477
2521
  F: __dxlog_file,
2478
- L: 93,
2522
+ L: 97,
2479
2523
  S: void 0,
2480
2524
  C: (f, a) => f(...a)
2481
2525
  });
@@ -2486,31 +2530,29 @@ var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2486
2530
  return {
2487
2531
  navigationSidebarState,
2488
2532
  setNavigationSidebarState,
2489
- toggleNavigationSidebar: useCallback7(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2533
+ toggleNavigationSidebar: useCallback9(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2490
2534
  navigationSidebarState,
2491
2535
  setNavigationSidebarState
2492
2536
  ]),
2493
- openNavigationSidebar: useCallback7(() => setNavigationSidebarState("expanded"), []),
2494
- collapseNavigationSidebar: useCallback7(() => setNavigationSidebarState("collapsed"), []),
2495
- closeNavigationSidebar: useCallback7(() => setNavigationSidebarState("closed"), []),
2537
+ openNavigationSidebar: useCallback9(() => setNavigationSidebarState("expanded"), []),
2538
+ collapseNavigationSidebar: useCallback9(() => setNavigationSidebarState("collapsed"), []),
2539
+ closeNavigationSidebar: useCallback9(() => setNavigationSidebarState("closed"), []),
2496
2540
  complementarySidebarState,
2497
2541
  setComplementarySidebarState,
2498
- toggleComplementarySidebar: useCallback7(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2542
+ toggleComplementarySidebar: useCallback9(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2499
2543
  complementarySidebarState,
2500
2544
  setComplementarySidebarState
2501
2545
  ]),
2502
- openComplementarySidebar: useCallback7(() => setComplementarySidebarState("expanded"), []),
2503
- collapseComplementarySidebar: useCallback7(() => setComplementarySidebarState("collapsed"), []),
2504
- closeComplementarySidebar: useCallback7(() => setComplementarySidebarState("closed"), [])
2546
+ openComplementarySidebar: useCallback9(() => setComplementarySidebarState("expanded"), []),
2547
+ collapseComplementarySidebar: useCallback9(() => setComplementarySidebarState("collapsed"), []),
2548
+ closeComplementarySidebar: useCallback9(() => setComplementarySidebarState("closed"), [])
2505
2549
  };
2506
2550
  };
2507
2551
  var resizeDebounce = 3e3;
2508
2552
  var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2509
2553
  var _effect = _useSignals25();
2510
2554
  try {
2511
- const [isLg] = useMediaQuery("lg", {
2512
- ssr: false
2513
- });
2555
+ const [isLg] = useMediaQuery("lg");
2514
2556
  const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = useControllableState4({
2515
2557
  prop: propsNavigationSidebarState,
2516
2558
  defaultProp: defaultNavigationSidebarState,
@@ -2521,9 +2563,9 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2521
2563
  defaultProp: defaultComplementarySidebarState,
2522
2564
  onChange: onComplementarySidebarStateChange
2523
2565
  });
2524
- const [resizing, setResizing] = useState7(false);
2566
+ const [resizing, setResizing] = useState8(false);
2525
2567
  const resizeInterval = useRef2(null);
2526
- const handleResize = useCallback7(() => {
2568
+ const handleResize = useCallback9(() => {
2527
2569
  setResizing(true);
2528
2570
  if (resizeInterval.current) {
2529
2571
  clearTimeout(resizeInterval.current);
@@ -2533,7 +2575,7 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2533
2575
  resizeInterval.current = null;
2534
2576
  }, resizeDebounce);
2535
2577
  }, []);
2536
- useEffect5(() => {
2578
+ useEffect6(() => {
2537
2579
  window.addEventListener("resize", handleResize);
2538
2580
  return () => window.removeEventListener("resize", handleResize);
2539
2581
  }, [
@@ -2558,9 +2600,7 @@ var handleOpenAutoFocus = (event) => {
2558
2600
  var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2559
2601
  var _effect = _useSignals25();
2560
2602
  try {
2561
- const [isLg] = useMediaQuery("lg", {
2562
- ssr: false
2563
- });
2603
+ const [isLg] = useMediaQuery("lg");
2564
2604
  const { tx } = useThemeContext();
2565
2605
  const { t } = useTranslation();
2566
2606
  const ref = useForwardedRef(forwardedRef);
@@ -2568,9 +2608,12 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2568
2608
  useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2569
2609
  onDismiss: () => onStateChange?.("closed")
2570
2610
  });
2571
- const handleKeyDown = useCallback7((event) => {
2572
- if (event.key === "Escape") {
2573
- 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();
2574
2617
  }
2575
2618
  props.onKeyDown?.(event);
2576
2619
  }, [
@@ -2594,7 +2637,7 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2594
2637
  "data-state": state,
2595
2638
  "data-resizing": resizing ? "true" : "false",
2596
2639
  className: tx("main.sidebar", "main__sidebar", {}, classNames),
2597
- onKeyDown: handleKeyDown,
2640
+ onKeyDownCapture: handleKeyDown,
2598
2641
  ...state === "closed" && {
2599
2642
  inert: true
2600
2643
  },
@@ -2672,9 +2715,7 @@ MainContent.displayName = MAIN_NAME;
2672
2715
  var MainOverlay = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
2673
2716
  var _effect = _useSignals25();
2674
2717
  try {
2675
- const [isLg] = useMediaQuery("lg", {
2676
- ssr: false
2677
- });
2718
+ const [isLg] = useMediaQuery("lg");
2678
2719
  const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2679
2720
  const { tx } = useThemeContext();
2680
2721
  return /* @__PURE__ */ React25.createElement("div", {
@@ -2712,7 +2753,7 @@ import { Slot as Slot9 } from "@radix-ui/react-slot";
2712
2753
  import React26, { forwardRef as forwardRef18 } from "react";
2713
2754
 
2714
2755
  // src/hooks/useSafeCollisionPadding.ts
2715
- import { useMemo as useMemo3 } from "react";
2756
+ import { useMemo as useMemo4 } from "react";
2716
2757
  var propIsNumber = (prop) => Number.isFinite(prop);
2717
2758
  var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
2718
2759
  var safePadding = (propsPadding, safePadding2, side) => {
@@ -2720,7 +2761,7 @@ var safePadding = (propsPadding, safePadding2, side) => {
2720
2761
  };
2721
2762
  var useSafeCollisionPadding = (collisionPadding) => {
2722
2763
  const { safeAreaPadding } = useThemeContext();
2723
- return useMemo3(() => ({
2764
+ return useMemo4(() => ({
2724
2765
  top: safePadding(collisionPadding, safeAreaPadding, "top"),
2725
2766
  right: safePadding(collisionPadding, safeAreaPadding, "right"),
2726
2767
  bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
@@ -2861,7 +2902,7 @@ import { createMenuScope } from "@radix-ui/react-menu";
2861
2902
  import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2862
2903
  import { Slot as Slot10 } from "@radix-ui/react-slot";
2863
2904
  import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2864
- 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, useRef as useRef3 } from "react";
2865
2906
  var DROPDOWN_MENU_NAME = "DropdownMenu";
2866
2907
  var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope3(DROPDOWN_MENU_NAME, [
2867
2908
  createMenuScope
@@ -2886,7 +2927,7 @@ var DropdownMenuRoot = (props) => {
2886
2927
  contentId: useId3(),
2887
2928
  open,
2888
2929
  onOpenChange: setOpen,
2889
- onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
2930
+ onOpenToggle: useCallback10(() => setOpen((prevOpen) => !prevOpen), [
2890
2931
  setOpen
2891
2932
  ]),
2892
2933
  modal
@@ -2966,7 +3007,7 @@ var DropdownMenuVirtualTrigger = (props) => {
2966
3007
  const { __scopeDropdownMenu, virtualRef } = props;
2967
3008
  const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
2968
3009
  const menuScope = useMenuScope(__scopeDropdownMenu);
2969
- useEffect6(() => {
3010
+ useEffect7(() => {
2970
3011
  if (virtualRef.current) {
2971
3012
  context.triggerRef.current = virtualRef.current;
2972
3013
  }
@@ -3413,7 +3454,7 @@ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
3413
3454
  import { Slot as Slot12 } from "@radix-ui/react-slot";
3414
3455
  import { useControllableState as useControllableState6 } from "@radix-ui/react-use-controllable-state";
3415
3456
  import { hideOthers } from "aria-hidden";
3416
- import React29, { forwardRef as forwardRef21, useCallback as useCallback9, useEffect as useEffect7, useRef as useRef4, useState as useState8 } from "react";
3457
+ import React29, { forwardRef as forwardRef21, useCallback as useCallback11, useEffect as useEffect8, useRef as useRef4, useState as useState9 } from "react";
3417
3458
  import { RemoveScroll } from "react-remove-scroll";
3418
3459
  var POPOVER_NAME = "Popover";
3419
3460
  var [createPopoverContext, createPopoverScope] = createContextScope4(POPOVER_NAME, [
@@ -3427,7 +3468,7 @@ var PopoverRoot = (props) => {
3427
3468
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
3428
3469
  const popperScope = usePopperScope2(__scopePopover);
3429
3470
  const triggerRef = useRef4(null);
3430
- const [hasCustomAnchor, setHasCustomAnchor] = useState8(false);
3471
+ const [hasCustomAnchor, setHasCustomAnchor] = useState9(false);
3431
3472
  const [open = false, setOpen] = useControllableState6({
3432
3473
  prop: openProp,
3433
3474
  defaultProp: defaultOpen,
@@ -3439,12 +3480,12 @@ var PopoverRoot = (props) => {
3439
3480
  triggerRef,
3440
3481
  open,
3441
3482
  onOpenChange: setOpen,
3442
- onOpenToggle: useCallback9(() => setOpen((prevOpen) => !prevOpen), [
3483
+ onOpenToggle: useCallback11(() => setOpen((prevOpen) => !prevOpen), [
3443
3484
  setOpen
3444
3485
  ]),
3445
3486
  hasCustomAnchor,
3446
- onCustomAnchorAdd: useCallback9(() => setHasCustomAnchor(true), []),
3447
- onCustomAnchorRemove: useCallback9(() => setHasCustomAnchor(false), []),
3487
+ onCustomAnchorAdd: useCallback11(() => setHasCustomAnchor(true), []),
3488
+ onCustomAnchorRemove: useCallback11(() => setHasCustomAnchor(false), []),
3448
3489
  modal
3449
3490
  }, children));
3450
3491
  } finally {
@@ -3460,7 +3501,7 @@ var PopoverAnchor = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3460
3501
  const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
3461
3502
  const popperScope = usePopperScope2(__scopePopover);
3462
3503
  const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
3463
- useEffect7(() => {
3504
+ useEffect8(() => {
3464
3505
  onCustomAnchorAdd();
3465
3506
  return () => onCustomAnchorRemove();
3466
3507
  }, [
@@ -3511,7 +3552,7 @@ var PopoverVirtualTrigger = (props) => {
3511
3552
  const { __scopePopover, virtualRef } = props;
3512
3553
  const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
3513
3554
  const popperScope = usePopperScope2(__scopePopover);
3514
- useEffect7(() => {
3555
+ useEffect8(() => {
3515
3556
  if (virtualRef.current) {
3516
3557
  context.triggerRef.current = virtualRef.current;
3517
3558
  }
@@ -3576,7 +3617,7 @@ var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) =>
3576
3617
  const contentRef = useRef4(null);
3577
3618
  const composedRefs = useComposedRefs2(forwardedRef, contentRef);
3578
3619
  const isRightClickOutsideRef = useRef4(false);
3579
- useEffect7(() => {
3620
+ useEffect8(() => {
3580
3621
  const content = contentRef.current;
3581
3622
  if (content) {
3582
3623
  return hideOthers(content);
@@ -3697,7 +3738,7 @@ var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3697
3738
  ref: forwardedRef,
3698
3739
  style: {
3699
3740
  ...contentProps.style,
3700
- // re-namespace exposed content custom properties
3741
+ // Re-namespace exposed content custom properties.
3701
3742
  ...{
3702
3743
  "--radix-popover-content-transform-origin": "var(--radix-popper-transform-origin)",
3703
3744
  "--radix-popover-content-available-width": "var(--radix-popper-available-width)",
@@ -4225,19 +4266,27 @@ var Toast = {
4225
4266
  // src/components/Toolbar/Toolbar.tsx
4226
4267
  import { useSignals as _useSignals36 } from "@preact-signals/safe-react/tracking";
4227
4268
  import * as ToolbarPrimitive from "@radix-ui/react-toolbar";
4228
- import React36, { forwardRef as forwardRef28 } from "react";
4229
- var ToolbarRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
4269
+ import React36, { Fragment, forwardRef as forwardRef28 } from "react";
4270
+ var ToolbarRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, layoutManaged, textBlockWidth: textBlockWidthParam, disabled, ...props }, forwardedRef) => {
4230
4271
  var _effect = _useSignals36();
4231
4272
  try {
4232
4273
  const { tx } = useThemeContext();
4274
+ const InnerRoot = textBlockWidthParam ? "div" : Fragment;
4275
+ const innerRootProps = textBlockWidthParam ? {
4276
+ role: "none",
4277
+ className: tx("toolbar.inner", "toolbar", {
4278
+ layoutManaged
4279
+ }, classNames)
4280
+ } : {};
4233
4281
  return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Root, {
4234
4282
  ...props,
4235
4283
  "data-arrow-keys": props.orientation === "vertical" ? "up down" : "left right",
4236
4284
  className: tx("toolbar.root", "toolbar", {
4237
- layoutManaged
4285
+ layoutManaged,
4286
+ disabled
4238
4287
  }, classNames),
4239
4288
  ref: forwardedRef
4240
- }, children);
4289
+ }, /* @__PURE__ */ React36.createElement(InnerRoot, innerRootProps, children));
4241
4290
  } finally {
4242
4291
  _effect.f();
4243
4292
  }
@@ -4415,6 +4464,7 @@ export {
4415
4464
  useClipboard,
4416
4465
  Domino,
4417
4466
  hasIosKeyboard,
4467
+ usePx,
4418
4468
  DensityContext,
4419
4469
  DensityProvider,
4420
4470
  ElevationContext,
@@ -4456,4 +4506,4 @@ export {
4456
4506
  Toast,
4457
4507
  Toolbar
4458
4508
  };
4459
- //# sourceMappingURL=chunk-LBCJC75U.mjs.map
4509
+ //# sourceMappingURL=chunk-HUZZ56DW.mjs.map