@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
@@ -31,7 +31,7 @@ var useIconHref = (icon) => {
31
31
 
32
32
  // src/hooks/useSafeArea.ts
33
33
  import { useCallback, useState } from "react";
34
- import { useResize } from "@dxos/react-hooks";
34
+ import { useViewportResize } from "@dxos/react-hooks";
35
35
  var initialSafeArea = {
36
36
  top: NaN,
37
37
  right: NaN,
@@ -48,7 +48,7 @@ var useSafeArea = () => {
48
48
  left: parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--safe-area-left"))
49
49
  });
50
50
  }, []);
51
- useResize(handleResize);
51
+ useViewportResize(handleResize);
52
52
  return padding;
53
53
  };
54
54
 
@@ -130,7 +130,7 @@ var useTranslationsContext = () => useContext4(TranslationsContext);
130
130
 
131
131
  // src/hooks/useVisualViewport.ts
132
132
  import { useCallback as useCallback2, useState as useState3 } from "react";
133
- import { useResize as useResize2 } from "@dxos/react-hooks";
133
+ import { useViewportResize as useViewportResize2 } from "@dxos/react-hooks";
134
134
  var useVisualViewport = (deps) => {
135
135
  const [width, setWidth] = useState3(null);
136
136
  const [height, setHeight] = useState3(null);
@@ -140,7 +140,7 @@ var useVisualViewport = (deps) => {
140
140
  setHeight(window.visualViewport.height);
141
141
  }
142
142
  }, []);
143
- useResize2(handleResize, deps);
143
+ useViewportResize2(handleResize, deps);
144
144
  return {
145
145
  width,
146
146
  height
@@ -277,7 +277,7 @@ import React6, { forwardRef as forwardRef5 } from "react";
277
277
  // src/components/Icon/Icon.tsx
278
278
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
279
279
  import React4, { forwardRef as forwardRef3, memo } from "react";
280
- var Icon = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef3(({ icon, classNames, size, ...props }, forwardedRef) => {
280
+ var Icon = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef3(({ icon, classNames, size = 4, ...props }, forwardedRef) => {
281
281
  var _effect = _useSignals4();
282
282
  try {
283
283
  const { tx } = useThemeContext();
@@ -1282,27 +1282,18 @@ import { mx as mx3 } from "@dxos/react-ui-theme";
1282
1282
  // src/components/ThemeProvider/ThemeProvider.tsx
1283
1283
  import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
1284
1284
  import { createKeyborg } from "keyborg";
1285
- import React15, { createContext as createContext7, useEffect as useEffect3, useMemo as useMemo2 } from "react";
1285
+ import React15, { createContext as createContext7, useEffect as useEffect4, useMemo as useMemo3 } from "react";
1286
1286
 
1287
1287
  // src/util/domino.ts
1288
1288
  import { mx as mx2 } from "@dxos/react-ui-theme";
1289
- function _define_property(obj, key, value) {
1290
- if (key in obj) {
1291
- Object.defineProperty(obj, key, {
1292
- value,
1293
- enumerable: true,
1294
- configurable: true,
1295
- writable: true
1296
- });
1297
- } else {
1298
- obj[key] = value;
1299
- }
1300
- return obj;
1301
- }
1302
1289
  var Domino = class _Domino {
1303
1290
  static of(tag) {
1304
1291
  return new _Domino(tag);
1305
1292
  }
1293
+ _el;
1294
+ constructor(tag) {
1295
+ this._el = document.createElement(tag);
1296
+ }
1306
1297
  classNames(...classNames) {
1307
1298
  this._el.className = mx2(classNames);
1308
1299
  return this;
@@ -1315,12 +1306,12 @@ var Domino = class _Domino {
1315
1306
  this._el.dataset[key] = value;
1316
1307
  return this;
1317
1308
  }
1318
- style(styles) {
1319
- Object.assign(this._el.style, styles);
1309
+ attributes(attr) {
1310
+ Object.entries(attr).filter(([_, value]) => value !== void 0).map(([key, value]) => this._el.setAttribute(key, value));
1320
1311
  return this;
1321
1312
  }
1322
- attr(key, value) {
1323
- this._el[key] = value;
1313
+ style(styles) {
1314
+ Object.assign(this._el.style, styles);
1324
1315
  return this;
1325
1316
  }
1326
1317
  children(...children) {
@@ -1334,10 +1325,6 @@ var Domino = class _Domino {
1334
1325
  build() {
1335
1326
  return this._el;
1336
1327
  }
1337
- constructor(tag) {
1338
- _define_property(this, "_el", void 0);
1339
- this._el = document.createElement(tag);
1340
- }
1341
1328
  };
1342
1329
 
1343
1330
  // src/util/hasIosKeyboard.ts
@@ -1345,6 +1332,48 @@ var hasIosKeyboard = () => {
1345
1332
  return !!navigator.userAgent.match(/iP(ad|od|hone).+Safari/);
1346
1333
  };
1347
1334
 
1335
+ // src/util/usePx.ts
1336
+ import { useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo2, useState as useState6 } from "react";
1337
+ var getDocumentElementFontSize = () => parseFloat(getComputedStyle(document.documentElement).fontSize);
1338
+ var usePx = (rem) => {
1339
+ const [fontSize, setFontSize] = useState6(() => {
1340
+ if (typeof document !== "undefined") {
1341
+ return getDocumentElementFontSize();
1342
+ }
1343
+ return 16;
1344
+ });
1345
+ const updateFontSize = useCallback5(() => {
1346
+ setFontSize(getDocumentElementFontSize());
1347
+ }, []);
1348
+ useEffect3(() => {
1349
+ if (typeof document === "undefined") {
1350
+ return;
1351
+ }
1352
+ const resizeObserver = new ResizeObserver(updateFontSize);
1353
+ resizeObserver.observe(document.documentElement);
1354
+ const mediaQueryList = window.matchMedia("all");
1355
+ const handleMediaChange = () => {
1356
+ updateFontSize();
1357
+ };
1358
+ if (mediaQueryList.addEventListener) {
1359
+ mediaQueryList.addEventListener("change", handleMediaChange);
1360
+ } else {
1361
+ mediaQueryList.addListener(handleMediaChange);
1362
+ }
1363
+ return () => {
1364
+ resizeObserver.disconnect();
1365
+ if (mediaQueryList.removeEventListener) {
1366
+ mediaQueryList.removeEventListener("change", handleMediaChange);
1367
+ } else {
1368
+ mediaQueryList.removeListener(handleMediaChange);
1369
+ }
1370
+ };
1371
+ }, []);
1372
+ return useMemo2(() => rem * fontSize, [
1373
+ fontSize
1374
+ ]);
1375
+ };
1376
+
1348
1377
  // src/components/DensityProvider/DensityProvider.tsx
1349
1378
  import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
1350
1379
  import React13, { createContext as createContext5 } from "react";
@@ -1388,7 +1417,7 @@ var ThemeContext = /* @__PURE__ */ createContext7(void 0);
1388
1417
  var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx = (_path, defaultClassName, _styleProps, ..._options) => defaultClassName, themeMode = "dark", rootDensity = "fine", ...rest }) => {
1389
1418
  var _effect = _useSignals15();
1390
1419
  try {
1391
- useEffect3(() => {
1420
+ useEffect4(() => {
1392
1421
  if (document.defaultView) {
1393
1422
  const kb = createKeyborg(document.defaultView);
1394
1423
  kb.subscribe(handleInputModalityChange);
@@ -1396,7 +1425,7 @@ var ThemeProvider = ({ children, fallback = null, resourceExtensions, appNs, tx
1396
1425
  }
1397
1426
  }, []);
1398
1427
  const safeAreaPadding = useSafeArea();
1399
- const contextValue = useMemo2(() => ({
1428
+ const contextValue = useMemo3(() => ({
1400
1429
  tx,
1401
1430
  themeMode,
1402
1431
  hasIosKeyboard: hasIosKeyboard(),
@@ -1704,7 +1733,7 @@ var AlertDialog = {
1704
1733
  import { useSignals as _useSignals19 } from "@preact-signals/safe-react/tracking";
1705
1734
  import { Root as CheckboxPrimitive } from "@radix-ui/react-checkbox";
1706
1735
  import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
1707
- import React19, { forwardRef as forwardRef13, useCallback as useCallback5 } from "react";
1736
+ import React19, { forwardRef as forwardRef13, useCallback as useCallback6 } from "react";
1708
1737
  import { DescriptionAndValidation as DescriptionAndValidationPrimitive, Description as DescriptionPrimitive, INPUT_NAME, InputRoot, Label as LabelPrimitive, PinInput as PinInputPrimitive, TextArea as TextAreaPrimitive, TextInput as TextInputPrimitive, Validation as ValidationPrimitive, useInputContext } from "@dxos/react-input";
1709
1738
  import { mx as mx4 } from "@dxos/react-ui-theme";
1710
1739
  var Label = /* @__PURE__ */ forwardRef13(({ srOnly, classNames, children, ...props }, forwardedRef) => {
@@ -1776,7 +1805,7 @@ var PinInput = /* @__PURE__ */ forwardRef13(({ density: propsDensity, elevation:
1776
1805
  const { tx } = useThemeContext();
1777
1806
  const density = useDensityContext(propsDensity);
1778
1807
  const elevation = useElevationContext(propsElevation);
1779
- const segmentClassName = useCallback5(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1808
+ const segmentClassName = useCallback6(({ focused, validationValence }) => tx("input.input", "input--pin-segment", {
1780
1809
  variant: "static",
1781
1810
  focused,
1782
1811
  disabled: props.disabled,
@@ -2213,12 +2242,12 @@ var TreeItem = {
2213
2242
 
2214
2243
  // src/components/Lists/Treegrid.tsx
2215
2244
  import { useSignals as _useSignals24 } from "@preact-signals/safe-react/tracking";
2216
- import { useArrowNavigationGroup, useFocusableGroup } from "@fluentui/react-tabster";
2245
+ import { useFocusFinders } from "@fluentui/react-tabster";
2217
2246
  import { createContextScope as createContextScope2 } from "@radix-ui/react-context";
2218
2247
  import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
2219
2248
  import { Slot as Slot7 } from "@radix-ui/react-slot";
2220
2249
  import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
2221
- import React24, { forwardRef as forwardRef16 } from "react";
2250
+ import React24, { forwardRef as forwardRef16, useCallback as useCallback7 } from "react";
2222
2251
  var TREEGRID_ROW_NAME = "TreegridRow";
2223
2252
  var [createTreegridRowContext, createTreegridRowScope] = createContextScope2(TREEGRID_ROW_NAME, []);
2224
2253
  var [TreegridRowProvider, useTreegridRowContext] = createTreegridRowContext(TREEGRID_ROW_NAME);
@@ -2229,14 +2258,43 @@ var TreegridRoot = /* @__PURE__ */ forwardRef16(({ asChild, classNames, children
2229
2258
  try {
2230
2259
  const { tx } = useThemeContext();
2231
2260
  const Root7 = asChild ? Slot7 : Primitive7.div;
2232
- const arrowNavigationAttrs = useArrowNavigationGroup({
2233
- axis: "vertical",
2234
- tabbable: false,
2235
- circular: true
2236
- });
2261
+ const { findFirstFocusable } = useFocusFinders();
2262
+ const handleKeyDown = useCallback7((event) => {
2263
+ switch (event.key) {
2264
+ case "ArrowDown":
2265
+ case "ArrowUp": {
2266
+ const direction = event.key === "ArrowDown" ? "down" : "up";
2267
+ const target = event.target;
2268
+ const ancestorWithArrowKeys = target.closest(`[data-arrow-keys*="${direction}"], [data-arrow-keys="all"]`);
2269
+ if (!ancestorWithArrowKeys) {
2270
+ const currentRow = target.closest('[role="row"]');
2271
+ if (currentRow) {
2272
+ const treegrid = currentRow.closest('[role="treegrid"]');
2273
+ if (treegrid) {
2274
+ const rows = Array.from(treegrid.querySelectorAll('[role="row"]'));
2275
+ const currentIndex = rows.indexOf(currentRow);
2276
+ const nextIndex = direction === "down" ? currentIndex + 1 : currentIndex - 1;
2277
+ const targetRow = rows[nextIndex];
2278
+ if (targetRow) {
2279
+ const firstFocusable = findFirstFocusable(targetRow);
2280
+ if (firstFocusable) {
2281
+ event.preventDefault();
2282
+ firstFocusable.focus();
2283
+ }
2284
+ }
2285
+ }
2286
+ }
2287
+ }
2288
+ break;
2289
+ }
2290
+ }
2291
+ props.onKeyDown?.(event);
2292
+ }, [
2293
+ findFirstFocusable
2294
+ ]);
2237
2295
  return /* @__PURE__ */ React24.createElement(Root7, {
2238
2296
  role: "treegrid",
2239
- ...arrowNavigationAttrs,
2297
+ onKeyDown: handleKeyDown,
2240
2298
  ...props,
2241
2299
  className: tx("treegrid.root", "treegrid", {}, classNames),
2242
2300
  style: {
@@ -2261,15 +2319,6 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2261
2319
  onChange: propsOnOpenChange,
2262
2320
  defaultProp: defaultOpen
2263
2321
  });
2264
- const focusableGroupAttrs = useFocusableGroup({
2265
- tabBehavior: "limited"
2266
- });
2267
- const arrowGroupAttrs = useArrowNavigationGroup({
2268
- axis: "horizontal",
2269
- tabbable: false,
2270
- circular: false,
2271
- memorizeCurrent: false
2272
- });
2273
2322
  return /* @__PURE__ */ React24.createElement(TreegridRowProvider, {
2274
2323
  open,
2275
2324
  onOpenChange,
@@ -2284,16 +2333,10 @@ var TreegridRow = /* @__PURE__ */ forwardRef16(({ __treegridRowScope, asChild, c
2284
2333
  "aria-expanded": open,
2285
2334
  "aria-owns": parentOf
2286
2335
  },
2287
- tabIndex: 0,
2288
- ...focusableGroupAttrs,
2289
2336
  ...props,
2290
2337
  id,
2291
2338
  ref: forwardedRef
2292
- }, /* @__PURE__ */ React24.createElement("div", {
2293
- role: "none",
2294
- className: "contents",
2295
- ...arrowGroupAttrs
2296
- }, children)));
2339
+ }, children));
2297
2340
  } finally {
2298
2341
  _effect.f();
2299
2342
  }
@@ -2326,17 +2369,18 @@ var Treegrid = {
2326
2369
 
2327
2370
  // src/components/Main/Main.tsx
2328
2371
  import { useSignals as _useSignals25 } from "@preact-signals/safe-react/tracking";
2372
+ import { useFocusableGroup } from "@fluentui/react-tabster";
2329
2373
  import { createContext as createContext10 } from "@radix-ui/react-context";
2330
2374
  import { DialogContent as DialogContent2, Root as DialogRoot2, DialogTitle as DialogTitle2 } from "@radix-ui/react-dialog";
2331
2375
  import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
2332
2376
  import { Slot as Slot8 } from "@radix-ui/react-slot";
2333
2377
  import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
2334
- import React25, { forwardRef as forwardRef17, useCallback as useCallback7, useEffect as useEffect5, useRef as useRef2, useState as useState7 } from "react";
2378
+ import React25, { forwardRef as forwardRef17, useCallback as useCallback9, useEffect as useEffect6, useRef as useRef2, useState as useState8 } from "react";
2335
2379
  import { log } from "@dxos/log";
2336
2380
  import { useForwardedRef, useMediaQuery } from "@dxos/react-hooks";
2337
2381
 
2338
2382
  // src/components/Main/useSwipeToDismiss.ts
2339
- import { useCallback as useCallback6, useEffect as useEffect4, useState as useState6 } from "react";
2383
+ import { useCallback as useCallback8, useEffect as useEffect5, useState as useState7 } from "react";
2340
2384
  var useSwipeToDismiss = (ref, {
2341
2385
  onDismiss,
2342
2386
  dismissThreshold = 64,
@@ -2345,22 +2389,22 @@ var useSwipeToDismiss = (ref, {
2345
2389
  /* side = 'inline-start' */
2346
2390
  }) => {
2347
2391
  const $root = ref.current;
2348
- const [motionState, setMotionState] = useState6(0);
2349
- const [gestureStartX, setGestureStartX] = useState6(0);
2350
- const setIdle = useCallback6(() => {
2392
+ const [motionState, setMotionState] = useState7(0);
2393
+ const [gestureStartX, setGestureStartX] = useState7(0);
2394
+ const setIdle = useCallback8(() => {
2351
2395
  setMotionState(0);
2352
2396
  $root?.style.removeProperty("inset-inline-start");
2353
2397
  $root?.style.setProperty("transition-duration", "200ms");
2354
2398
  }, [
2355
2399
  $root
2356
2400
  ]);
2357
- const setFollowing = useCallback6(() => {
2401
+ const setFollowing = useCallback8(() => {
2358
2402
  setMotionState(2);
2359
2403
  $root?.style.setProperty("transition-duration", "0ms");
2360
2404
  }, [
2361
2405
  $root
2362
2406
  ]);
2363
- const handlePointerDown = useCallback6(({ screenX }) => {
2407
+ const handlePointerDown = useCallback8(({ screenX }) => {
2364
2408
  if (motionState === 0) {
2365
2409
  setMotionState(1);
2366
2410
  setGestureStartX(screenX);
@@ -2368,7 +2412,7 @@ var useSwipeToDismiss = (ref, {
2368
2412
  }, [
2369
2413
  motionState
2370
2414
  ]);
2371
- const handlePointerMove = useCallback6(({ screenX }) => {
2415
+ const handlePointerMove = useCallback8(({ screenX }) => {
2372
2416
  if ($root) {
2373
2417
  const delta = Math.min(screenX - gestureStartX, 0);
2374
2418
  switch (motionState) {
@@ -2392,12 +2436,12 @@ var useSwipeToDismiss = (ref, {
2392
2436
  motionState,
2393
2437
  gestureStartX
2394
2438
  ]);
2395
- const handlePointerUp = useCallback6(() => {
2439
+ const handlePointerUp = useCallback8(() => {
2396
2440
  setIdle();
2397
2441
  }, [
2398
2442
  setIdle
2399
2443
  ]);
2400
- useEffect4(() => {
2444
+ useEffect5(() => {
2401
2445
  $root?.addEventListener("pointerdown", handlePointerDown);
2402
2446
  return () => {
2403
2447
  $root?.removeEventListener("pointerdown", handlePointerDown);
@@ -2406,7 +2450,7 @@ var useSwipeToDismiss = (ref, {
2406
2450
  $root,
2407
2451
  handlePointerDown
2408
2452
  ]);
2409
- useEffect4(() => {
2453
+ useEffect5(() => {
2410
2454
  $root && document.documentElement.addEventListener("pointermove", handlePointerMove);
2411
2455
  return () => {
2412
2456
  document.documentElement.removeEventListener("pointermove", handlePointerMove);
@@ -2415,7 +2459,7 @@ var useSwipeToDismiss = (ref, {
2415
2459
  $root,
2416
2460
  handlePointerMove
2417
2461
  ]);
2418
- useEffect4(() => {
2462
+ useEffect5(() => {
2419
2463
  $root && document.documentElement.addEventListener("pointerup", handlePointerUp);
2420
2464
  return () => {
2421
2465
  document.documentElement.removeEventListener("pointerup", handlePointerUp);
@@ -2435,7 +2479,7 @@ var MAIN_NAME = "Main";
2435
2479
  var GENERIC_CONSUMER_NAME = "GenericConsumer";
2436
2480
  var landmarkAttr = "data-main-landmark";
2437
2481
  var useLandmarkMover = (propsOnKeyDown, landmark) => {
2438
- const handleKeyDown = useCallback7((event) => {
2482
+ const handleKeyDown = useCallback9((event) => {
2439
2483
  const target = event.target;
2440
2484
  if (event.target === event.currentTarget && event.key === "Tab" && target.hasAttribute(landmarkAttr)) {
2441
2485
  event.preventDefault();
@@ -2449,12 +2493,12 @@ var useLandmarkMover = (propsOnKeyDown, landmark) => {
2449
2493
  }, [
2450
2494
  propsOnKeyDown
2451
2495
  ]);
2452
- const focusableGroupAttrs = window ? {} : {
2496
+ const focusableGroupAttrs = useFocusableGroup({
2453
2497
  tabBehavior: "limited",
2454
2498
  ignoreDefaultKeydown: {
2455
2499
  Tab: true
2456
2500
  }
2457
- };
2501
+ });
2458
2502
  return {
2459
2503
  onKeyDown: handleKeyDown,
2460
2504
  [landmarkAttr]: landmark,
@@ -2468,7 +2512,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2468
2512
  setNavigationSidebarState: (_nextState) => {
2469
2513
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2470
2514
  F: __dxlog_file,
2471
- L: 88,
2515
+ L: 92,
2472
2516
  S: void 0,
2473
2517
  C: (f, a) => f(...a)
2474
2518
  });
@@ -2477,7 +2521,7 @@ var [MainProvider, useMainContext] = createContext10(MAIN_NAME, {
2477
2521
  setComplementarySidebarState: (_nextState) => {
2478
2522
  log.warn("Attempt to set sidebar state without initializing `MainRoot`", void 0, {
2479
2523
  F: __dxlog_file,
2480
- L: 93,
2524
+ L: 97,
2481
2525
  S: void 0,
2482
2526
  C: (f, a) => f(...a)
2483
2527
  });
@@ -2488,31 +2532,29 @@ var useSidebars = (consumerName = GENERIC_CONSUMER_NAME) => {
2488
2532
  return {
2489
2533
  navigationSidebarState,
2490
2534
  setNavigationSidebarState,
2491
- toggleNavigationSidebar: useCallback7(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2535
+ toggleNavigationSidebar: useCallback9(() => setNavigationSidebarState(navigationSidebarState === "expanded" ? "closed" : "expanded"), [
2492
2536
  navigationSidebarState,
2493
2537
  setNavigationSidebarState
2494
2538
  ]),
2495
- openNavigationSidebar: useCallback7(() => setNavigationSidebarState("expanded"), []),
2496
- collapseNavigationSidebar: useCallback7(() => setNavigationSidebarState("collapsed"), []),
2497
- closeNavigationSidebar: useCallback7(() => setNavigationSidebarState("closed"), []),
2539
+ openNavigationSidebar: useCallback9(() => setNavigationSidebarState("expanded"), []),
2540
+ collapseNavigationSidebar: useCallback9(() => setNavigationSidebarState("collapsed"), []),
2541
+ closeNavigationSidebar: useCallback9(() => setNavigationSidebarState("closed"), []),
2498
2542
  complementarySidebarState,
2499
2543
  setComplementarySidebarState,
2500
- toggleComplementarySidebar: useCallback7(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2544
+ toggleComplementarySidebar: useCallback9(() => setComplementarySidebarState(complementarySidebarState === "expanded" ? "closed" : "expanded"), [
2501
2545
  complementarySidebarState,
2502
2546
  setComplementarySidebarState
2503
2547
  ]),
2504
- openComplementarySidebar: useCallback7(() => setComplementarySidebarState("expanded"), []),
2505
- collapseComplementarySidebar: useCallback7(() => setComplementarySidebarState("collapsed"), []),
2506
- closeComplementarySidebar: useCallback7(() => setComplementarySidebarState("closed"), [])
2548
+ openComplementarySidebar: useCallback9(() => setComplementarySidebarState("expanded"), []),
2549
+ collapseComplementarySidebar: useCallback9(() => setComplementarySidebarState("collapsed"), []),
2550
+ closeComplementarySidebar: useCallback9(() => setComplementarySidebarState("closed"), [])
2507
2551
  };
2508
2552
  };
2509
2553
  var resizeDebounce = 3e3;
2510
2554
  var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNavigationSidebarState, onNavigationSidebarStateChange, complementarySidebarState: propsComplementarySidebarState, defaultComplementarySidebarState, onComplementarySidebarStateChange, children, ...props }) => {
2511
2555
  var _effect = _useSignals25();
2512
2556
  try {
2513
- const [isLg] = useMediaQuery("lg", {
2514
- ssr: false
2515
- });
2557
+ const [isLg] = useMediaQuery("lg");
2516
2558
  const [navigationSidebarState = isLg ? "expanded" : "collapsed", setNavigationSidebarState] = useControllableState4({
2517
2559
  prop: propsNavigationSidebarState,
2518
2560
  defaultProp: defaultNavigationSidebarState,
@@ -2523,9 +2565,9 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2523
2565
  defaultProp: defaultComplementarySidebarState,
2524
2566
  onChange: onComplementarySidebarStateChange
2525
2567
  });
2526
- const [resizing, setResizing] = useState7(false);
2568
+ const [resizing, setResizing] = useState8(false);
2527
2569
  const resizeInterval = useRef2(null);
2528
- const handleResize = useCallback7(() => {
2570
+ const handleResize = useCallback9(() => {
2529
2571
  setResizing(true);
2530
2572
  if (resizeInterval.current) {
2531
2573
  clearTimeout(resizeInterval.current);
@@ -2535,7 +2577,7 @@ var MainRoot = ({ navigationSidebarState: propsNavigationSidebarState, defaultNa
2535
2577
  resizeInterval.current = null;
2536
2578
  }, resizeDebounce);
2537
2579
  }, []);
2538
- useEffect5(() => {
2580
+ useEffect6(() => {
2539
2581
  window.addEventListener("resize", handleResize);
2540
2582
  return () => window.removeEventListener("resize", handleResize);
2541
2583
  }, [
@@ -2560,9 +2602,7 @@ var handleOpenAutoFocus = (event) => {
2560
2602
  var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToDismiss, onOpenAutoFocus, state, resizing, onStateChange, side, label, ...props }, forwardedRef) => {
2561
2603
  var _effect = _useSignals25();
2562
2604
  try {
2563
- const [isLg] = useMediaQuery("lg", {
2564
- ssr: false
2565
- });
2605
+ const [isLg] = useMediaQuery("lg");
2566
2606
  const { tx } = useThemeContext();
2567
2607
  const { t } = useTranslation();
2568
2608
  const ref = useForwardedRef(forwardedRef);
@@ -2570,9 +2610,12 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2570
2610
  useSwipeToDismiss(swipeToDismiss ? ref : noopRef, {
2571
2611
  onDismiss: () => onStateChange?.("closed")
2572
2612
  });
2573
- const handleKeyDown = useCallback7((event) => {
2574
- if (event.key === "Escape") {
2575
- event.target.closest("[data-tabster]")?.focus();
2613
+ const handleKeyDown = useCallback9((event) => {
2614
+ const focusGroupParent = event.target.closest("[data-tabster]");
2615
+ if (event.key === "Escape" && focusGroupParent) {
2616
+ event.preventDefault();
2617
+ event.stopPropagation();
2618
+ focusGroupParent.focus();
2576
2619
  }
2577
2620
  props.onKeyDown?.(event);
2578
2621
  }, [
@@ -2596,7 +2639,7 @@ var MainSidebar = /* @__PURE__ */ forwardRef17(({ classNames, children, swipeToD
2596
2639
  "data-state": state,
2597
2640
  "data-resizing": resizing ? "true" : "false",
2598
2641
  className: tx("main.sidebar", "main__sidebar", {}, classNames),
2599
- onKeyDown: handleKeyDown,
2642
+ onKeyDownCapture: handleKeyDown,
2600
2643
  ...state === "closed" && {
2601
2644
  inert: true
2602
2645
  },
@@ -2674,9 +2717,7 @@ MainContent.displayName = MAIN_NAME;
2674
2717
  var MainOverlay = /* @__PURE__ */ forwardRef17(({ classNames, ...props }, forwardedRef) => {
2675
2718
  var _effect = _useSignals25();
2676
2719
  try {
2677
- const [isLg] = useMediaQuery("lg", {
2678
- ssr: false
2679
- });
2720
+ const [isLg] = useMediaQuery("lg");
2680
2721
  const { navigationSidebarState, setNavigationSidebarState, complementarySidebarState, setComplementarySidebarState } = useMainContext(MAIN_NAME);
2681
2722
  const { tx } = useThemeContext();
2682
2723
  return /* @__PURE__ */ React25.createElement("div", {
@@ -2714,7 +2755,7 @@ import { Slot as Slot9 } from "@radix-ui/react-slot";
2714
2755
  import React26, { forwardRef as forwardRef18 } from "react";
2715
2756
 
2716
2757
  // src/hooks/useSafeCollisionPadding.ts
2717
- import { useMemo as useMemo3 } from "react";
2758
+ import { useMemo as useMemo4 } from "react";
2718
2759
  var propIsNumber = (prop) => Number.isFinite(prop);
2719
2760
  var propsIsRecord = (prop) => !!(prop && typeof prop === "object");
2720
2761
  var safePadding = (propsPadding, safePadding2, side) => {
@@ -2722,7 +2763,7 @@ var safePadding = (propsPadding, safePadding2, side) => {
2722
2763
  };
2723
2764
  var useSafeCollisionPadding = (collisionPadding) => {
2724
2765
  const { safeAreaPadding } = useThemeContext();
2725
- return useMemo3(() => ({
2766
+ return useMemo4(() => ({
2726
2767
  top: safePadding(collisionPadding, safeAreaPadding, "top"),
2727
2768
  right: safePadding(collisionPadding, safeAreaPadding, "right"),
2728
2769
  bottom: safePadding(collisionPadding, safeAreaPadding, "bottom"),
@@ -2863,7 +2904,7 @@ import { createMenuScope } from "@radix-ui/react-menu";
2863
2904
  import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2864
2905
  import { Slot as Slot10 } from "@radix-ui/react-slot";
2865
2906
  import { useControllableState as useControllableState5 } from "@radix-ui/react-use-controllable-state";
2866
- import React27, { forwardRef as forwardRef19, useCallback as useCallback8, useEffect as useEffect6, useRef as useRef3 } from "react";
2907
+ import React27, { forwardRef as forwardRef19, useCallback as useCallback10, useEffect as useEffect7, useRef as useRef3 } from "react";
2867
2908
  var DROPDOWN_MENU_NAME = "DropdownMenu";
2868
2909
  var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope3(DROPDOWN_MENU_NAME, [
2869
2910
  createMenuScope
@@ -2888,7 +2929,7 @@ var DropdownMenuRoot = (props) => {
2888
2929
  contentId: useId3(),
2889
2930
  open,
2890
2931
  onOpenChange: setOpen,
2891
- onOpenToggle: useCallback8(() => setOpen((prevOpen) => !prevOpen), [
2932
+ onOpenToggle: useCallback10(() => setOpen((prevOpen) => !prevOpen), [
2892
2933
  setOpen
2893
2934
  ]),
2894
2935
  modal
@@ -2968,7 +3009,7 @@ var DropdownMenuVirtualTrigger = (props) => {
2968
3009
  const { __scopeDropdownMenu, virtualRef } = props;
2969
3010
  const context = useDropdownMenuContext(VIRTUAL_TRIGGER_NAME, __scopeDropdownMenu);
2970
3011
  const menuScope = useMenuScope(__scopeDropdownMenu);
2971
- useEffect6(() => {
3012
+ useEffect7(() => {
2972
3013
  if (virtualRef.current) {
2973
3014
  context.triggerRef.current = virtualRef.current;
2974
3015
  }
@@ -3415,7 +3456,7 @@ import { Primitive as Primitive12 } from "@radix-ui/react-primitive";
3415
3456
  import { Slot as Slot12 } from "@radix-ui/react-slot";
3416
3457
  import { useControllableState as useControllableState6 } from "@radix-ui/react-use-controllable-state";
3417
3458
  import { hideOthers } from "aria-hidden";
3418
- import React29, { forwardRef as forwardRef21, useCallback as useCallback9, useEffect as useEffect7, useRef as useRef4, useState as useState8 } from "react";
3459
+ import React29, { forwardRef as forwardRef21, useCallback as useCallback11, useEffect as useEffect8, useRef as useRef4, useState as useState9 } from "react";
3419
3460
  import { RemoveScroll } from "react-remove-scroll";
3420
3461
  var POPOVER_NAME = "Popover";
3421
3462
  var [createPopoverContext, createPopoverScope] = createContextScope4(POPOVER_NAME, [
@@ -3429,7 +3470,7 @@ var PopoverRoot = (props) => {
3429
3470
  const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
3430
3471
  const popperScope = usePopperScope2(__scopePopover);
3431
3472
  const triggerRef = useRef4(null);
3432
- const [hasCustomAnchor, setHasCustomAnchor] = useState8(false);
3473
+ const [hasCustomAnchor, setHasCustomAnchor] = useState9(false);
3433
3474
  const [open = false, setOpen] = useControllableState6({
3434
3475
  prop: openProp,
3435
3476
  defaultProp: defaultOpen,
@@ -3441,12 +3482,12 @@ var PopoverRoot = (props) => {
3441
3482
  triggerRef,
3442
3483
  open,
3443
3484
  onOpenChange: setOpen,
3444
- onOpenToggle: useCallback9(() => setOpen((prevOpen) => !prevOpen), [
3485
+ onOpenToggle: useCallback11(() => setOpen((prevOpen) => !prevOpen), [
3445
3486
  setOpen
3446
3487
  ]),
3447
3488
  hasCustomAnchor,
3448
- onCustomAnchorAdd: useCallback9(() => setHasCustomAnchor(true), []),
3449
- onCustomAnchorRemove: useCallback9(() => setHasCustomAnchor(false), []),
3489
+ onCustomAnchorAdd: useCallback11(() => setHasCustomAnchor(true), []),
3490
+ onCustomAnchorRemove: useCallback11(() => setHasCustomAnchor(false), []),
3450
3491
  modal
3451
3492
  }, children));
3452
3493
  } finally {
@@ -3462,7 +3503,7 @@ var PopoverAnchor = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3462
3503
  const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
3463
3504
  const popperScope = usePopperScope2(__scopePopover);
3464
3505
  const { onCustomAnchorAdd, onCustomAnchorRemove } = context;
3465
- useEffect7(() => {
3506
+ useEffect8(() => {
3466
3507
  onCustomAnchorAdd();
3467
3508
  return () => onCustomAnchorRemove();
3468
3509
  }, [
@@ -3513,7 +3554,7 @@ var PopoverVirtualTrigger = (props) => {
3513
3554
  const { __scopePopover, virtualRef } = props;
3514
3555
  const context = usePopoverContext(VIRTUAL_TRIGGER_NAME2, __scopePopover);
3515
3556
  const popperScope = usePopperScope2(__scopePopover);
3516
- useEffect7(() => {
3557
+ useEffect8(() => {
3517
3558
  if (virtualRef.current) {
3518
3559
  context.triggerRef.current = virtualRef.current;
3519
3560
  }
@@ -3578,7 +3619,7 @@ var PopoverContentModal = /* @__PURE__ */ forwardRef21((props, forwardedRef) =>
3578
3619
  const contentRef = useRef4(null);
3579
3620
  const composedRefs = useComposedRefs2(forwardedRef, contentRef);
3580
3621
  const isRightClickOutsideRef = useRef4(false);
3581
- useEffect7(() => {
3622
+ useEffect8(() => {
3582
3623
  const content = contentRef.current;
3583
3624
  if (content) {
3584
3625
  return hideOthers(content);
@@ -3699,7 +3740,7 @@ var PopoverContentImpl = /* @__PURE__ */ forwardRef21((props, forwardedRef) => {
3699
3740
  ref: forwardedRef,
3700
3741
  style: {
3701
3742
  ...contentProps.style,
3702
- // re-namespace exposed content custom properties
3743
+ // Re-namespace exposed content custom properties.
3703
3744
  ...{
3704
3745
  "--radix-popover-content-transform-origin": "var(--radix-popper-transform-origin)",
3705
3746
  "--radix-popover-content-available-width": "var(--radix-popper-available-width)",
@@ -4227,19 +4268,27 @@ var Toast = {
4227
4268
  // src/components/Toolbar/Toolbar.tsx
4228
4269
  import { useSignals as _useSignals36 } from "@preact-signals/safe-react/tracking";
4229
4270
  import * as ToolbarPrimitive from "@radix-ui/react-toolbar";
4230
- import React36, { forwardRef as forwardRef28 } from "react";
4231
- var ToolbarRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, layoutManaged, ...props }, forwardedRef) => {
4271
+ import React36, { Fragment, forwardRef as forwardRef28 } from "react";
4272
+ var ToolbarRoot = /* @__PURE__ */ forwardRef28(({ classNames, children, layoutManaged, textBlockWidth: textBlockWidthParam, disabled, ...props }, forwardedRef) => {
4232
4273
  var _effect = _useSignals36();
4233
4274
  try {
4234
4275
  const { tx } = useThemeContext();
4276
+ const InnerRoot = textBlockWidthParam ? "div" : Fragment;
4277
+ const innerRootProps = textBlockWidthParam ? {
4278
+ role: "none",
4279
+ className: tx("toolbar.inner", "toolbar", {
4280
+ layoutManaged
4281
+ }, classNames)
4282
+ } : {};
4235
4283
  return /* @__PURE__ */ React36.createElement(ToolbarPrimitive.Root, {
4236
4284
  ...props,
4237
4285
  "data-arrow-keys": props.orientation === "vertical" ? "up down" : "left right",
4238
4286
  className: tx("toolbar.root", "toolbar", {
4239
- layoutManaged
4287
+ layoutManaged,
4288
+ disabled
4240
4289
  }, classNames),
4241
4290
  ref: forwardedRef
4242
- }, children);
4291
+ }, /* @__PURE__ */ React36.createElement(InnerRoot, innerRootProps, children));
4243
4292
  } finally {
4244
4293
  _effect.f();
4245
4294
  }
@@ -4417,6 +4466,7 @@ export {
4417
4466
  useClipboard,
4418
4467
  Domino,
4419
4468
  hasIosKeyboard,
4469
+ usePx,
4420
4470
  DensityContext,
4421
4471
  DensityProvider,
4422
4472
  ElevationContext,
@@ -4458,4 +4508,4 @@ export {
4458
4508
  Toast,
4459
4509
  Toolbar
4460
4510
  };
4461
- //# sourceMappingURL=chunk-QTUGGUCB.mjs.map
4511
+ //# sourceMappingURL=chunk-OJLL6E2Z.mjs.map