@oprt/react 0.1.0 → 0.2.1

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.
package/dist/index.cjs CHANGED
@@ -218,7 +218,7 @@ module.exports = __toCommonJS(src_exports);
218
218
  // src/Alert/Alert.tsx
219
219
  var import_icons = require("@oprt/icons");
220
220
  var import_class_variance_authority = require("class-variance-authority");
221
- var import_react = require("react");
221
+ var import_react2 = require("react");
222
222
  var import_clsx = __toESM(require("clsx"), 1);
223
223
 
224
224
  // src/Alert/Alert.manifest.ts
@@ -320,6 +320,28 @@ function devValidate(component, manifestProps, received) {
320
320
  }
321
321
  }
322
322
 
323
+ // src/_internal/liveRegion.ts
324
+ var import_react = require("react");
325
+ var neverChanges = () => () => {
326
+ };
327
+ var LIVE_REGION_LEAD_MS = 100;
328
+ function useHoldBackNewText(enabled) {
329
+ const hydrating = (0, import_react.useSyncExternalStore)(
330
+ neverChanges,
331
+ () => false,
332
+ () => true
333
+ );
334
+ const lateArrival = (0, import_react.useRef)(null);
335
+ if (lateArrival.current === null) lateArrival.current = !hydrating;
336
+ const [held, setHeld] = (0, import_react.useState)(Boolean(lateArrival.current));
337
+ (0, import_react.useEffect)(() => {
338
+ if (!held) return;
339
+ const timer = window.setTimeout(() => setHeld(false), LIVE_REGION_LEAD_MS);
340
+ return () => window.clearTimeout(timer);
341
+ }, [held]);
342
+ return enabled && held;
343
+ }
344
+
323
345
  // src/Alert/Alert.tsx
324
346
  var import_jsx_runtime = require("react/jsx-runtime");
325
347
  var ICONS = {
@@ -351,7 +373,7 @@ var accentStyles = (0, import_class_variance_authority.cva)("", {
351
373
  }
352
374
  }
353
375
  });
354
- var Alert = (0, import_react.forwardRef)((allProps, ref) => {
376
+ var Alert = (0, import_react2.forwardRef)((allProps, ref) => {
355
377
  const {
356
378
  className,
357
379
  variant,
@@ -362,6 +384,7 @@ var Alert = (0, import_react.forwardRef)((allProps, ref) => {
362
384
  ...props
363
385
  } = allProps;
364
386
  const role = variant === "error" || variant === "warning" ? "alert" : "status";
387
+ const holdBack = useHoldBackNewText(role === "status");
365
388
  const Icon = ICONS[variant];
366
389
  const hasBody = children != null && typeof children !== "boolean" && children !== "";
367
390
  if (process.env.NODE_ENV !== "production") {
@@ -369,19 +392,26 @@ var Alert = (0, import_react.forwardRef)((allProps, ref) => {
369
392
  }
370
393
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref, role, className: (0, import_clsx.default)(containerStyles({ variant }), className), ...props, children: [
371
394
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": "true", className: (0, import_clsx.default)("shrink-0", accentStyles({ variant })), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, { size: 16 }) }),
372
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1u oprt-wrap-anywhere", children: [
373
- title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
374
- "p",
375
- {
376
- className: (0, import_clsx.default)(
377
- "m-0 text-oprt-sm uppercase tracking-oprt-sm",
378
- accentStyles({ variant })
395
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
396
+ "div",
397
+ {
398
+ className: "flex min-w-0 flex-1 flex-col gap-1u oprt-wrap-anywhere",
399
+ ...holdBack ? { "aria-hidden": true } : {},
400
+ children: [
401
+ title && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
402
+ "p",
403
+ {
404
+ className: (0, import_clsx.default)(
405
+ "m-0 text-oprt-sm uppercase tracking-oprt-sm",
406
+ accentStyles({ variant })
407
+ ),
408
+ children: title
409
+ }
379
410
  ),
380
- children: title
381
- }
382
- ),
383
- hasBody && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-oprt-base normal-case text-oprt-text", children })
384
- ] }),
411
+ hasBody && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-oprt-base normal-case text-oprt-text", children })
412
+ ]
413
+ }
414
+ ),
385
415
  dismissible && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
386
416
  "button",
387
417
  {
@@ -398,7 +428,7 @@ Alert.displayName = "Alert";
398
428
 
399
429
  // src/Avatar/Avatar.tsx
400
430
  var import_class_variance_authority2 = require("class-variance-authority");
401
- var import_react2 = require("react");
431
+ var import_react3 = require("react");
402
432
  var import_clsx2 = __toESM(require("clsx"), 1);
403
433
  var import_icons2 = require("@oprt/icons");
404
434
 
@@ -447,13 +477,13 @@ var firstCharacter = (word) => Array.from(word)[0] ?? "";
447
477
  function getInitials(name) {
448
478
  return name.trim().split(/\s+/).filter(Boolean).slice(0, 2).map((word) => firstCharacter(firstCharacter(word).toUpperCase())).join("");
449
479
  }
450
- var Avatar = (0, import_react2.forwardRef)((allProps, ref) => {
480
+ var Avatar = (0, import_react3.forwardRef)((allProps, ref) => {
451
481
  const { className, size, name, src, alt, delayMs, ...props } = allProps;
452
482
  const initials = getInitials(name);
453
- const [load, setLoad] = (0, import_react2.useState)(null);
483
+ const [load, setLoad] = (0, import_react3.useState)(null);
454
484
  const status = load !== null && load.src === src ? load.status : "idle";
455
- const [fallbackReady, setFallbackReady] = (0, import_react2.useState)(delayMs === void 0);
456
- (0, import_react2.useEffect)(() => {
485
+ const [fallbackReady, setFallbackReady] = (0, import_react3.useState)(delayMs === void 0);
486
+ (0, import_react3.useEffect)(() => {
457
487
  if (delayMs === void 0) {
458
488
  setFallbackReady(true);
459
489
  return;
@@ -462,7 +492,7 @@ var Avatar = (0, import_react2.forwardRef)((allProps, ref) => {
462
492
  const t = setTimeout(() => setFallbackReady(true), delayMs);
463
493
  return () => clearTimeout(t);
464
494
  }, [delayMs, src]);
465
- const imgRef = (0, import_react2.useCallback)(
495
+ const imgRef = (0, import_react3.useCallback)(
466
496
  (node) => {
467
497
  if (node?.complete && node.naturalWidth > 0) setLoad({ src, status: "loaded" });
468
498
  },
@@ -504,7 +534,7 @@ Avatar.displayName = "Avatar";
504
534
 
505
535
  // src/Badge/Badge.tsx
506
536
  var import_class_variance_authority3 = require("class-variance-authority");
507
- var import_react3 = require("react");
537
+ var import_react4 = require("react");
508
538
  var import_clsx3 = __toESM(require("clsx"), 1);
509
539
 
510
540
  // src/Badge/Badge.manifest.ts
@@ -614,7 +644,7 @@ var iconBoxStyles = (0, import_class_variance_authority3.cva)("flex shrink-0 ite
614
644
  },
615
645
  defaultVariants: { size: "sm" }
616
646
  });
617
- var Badge = (0, import_react3.forwardRef)((allProps, ref) => {
647
+ var Badge = (0, import_react4.forwardRef)((allProps, ref) => {
618
648
  const {
619
649
  className,
620
650
  variant = "neutral",
@@ -633,7 +663,7 @@ var Badge = (0, import_react3.forwardRef)((allProps, ref) => {
633
663
  appearance: appearance ?? void 0,
634
664
  size: size ?? void 0
635
665
  };
636
- const composite = import_react3.Children.toArray(children).some(
666
+ const composite = import_react4.Children.toArray(children).some(
637
667
  (child) => typeof child !== "string" && typeof child !== "number"
638
668
  );
639
669
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
@@ -662,32 +692,32 @@ var Badge = (0, import_react3.forwardRef)((allProps, ref) => {
662
692
  Badge.displayName = "Badge";
663
693
 
664
694
  // src/TagGroup/TagGroup.tsx
665
- var import_react6 = require("react");
695
+ var import_react7 = require("react");
666
696
  var import_react_aria_components = require("react-aria-components");
667
697
  var import_class_variance_authority4 = require("class-variance-authority");
668
698
  var import_clsx4 = __toESM(require("clsx"), 1);
669
699
  var import_icons3 = require("@oprt/icons");
670
700
 
671
701
  // src/_internal/useRestoreFocusOnRemoval.ts
672
- var import_react5 = require("react");
702
+ var import_react6 = require("react");
673
703
 
674
704
  // src/_internal/useIsomorphicLayoutEffect.ts
675
- var import_react4 = require("react");
676
- var useIsomorphicLayoutEffect = typeof document === "undefined" ? import_react4.useEffect : import_react4.useLayoutEffect;
705
+ var import_react5 = require("react");
706
+ var useIsomorphicLayoutEffect = typeof document === "undefined" ? import_react5.useEffect : import_react5.useLayoutEffect;
677
707
 
678
708
  // src/_internal/useRestoreFocusOnRemoval.ts
679
709
  var goneByDefault = (element) => !element.isConnected || element.matches(":disabled");
680
710
  function useRestoreFocusOnRemoval(root, options = {}) {
681
- const tracked = (0, import_react5.useRef)(null);
682
- const latest = (0, import_react5.useRef)(options);
711
+ const tracked = (0, import_react6.useRef)(null);
712
+ const latest = (0, import_react6.useRef)(options);
683
713
  useIsomorphicLayoutEffect(() => {
684
714
  latest.current = options;
685
715
  });
686
- const isGone = (0, import_react5.useCallback)(
716
+ const isGone = (0, import_react6.useCallback)(
687
717
  (element, state) => (latest.current.isGone ?? goneByDefault)(element, state),
688
718
  []
689
719
  );
690
- const onFocusCapture = (0, import_react5.useCallback)(
720
+ const onFocusCapture = (0, import_react6.useCallback)(
691
721
  (event) => {
692
722
  const element = event.target;
693
723
  const host = root.current;
@@ -701,7 +731,7 @@ function useRestoreFocusOnRemoval(root, options = {}) {
701
731
  },
702
732
  [root]
703
733
  );
704
- const onBlurCapture = (0, import_react5.useCallback)(
734
+ const onBlurCapture = (0, import_react6.useCallback)(
705
735
  (event) => {
706
736
  const element = event.target;
707
737
  if (tracked.current?.element !== element) return;
@@ -713,7 +743,7 @@ function useRestoreFocusOnRemoval(root, options = {}) {
713
743
  },
714
744
  [isGone]
715
745
  );
716
- (0, import_react5.useEffect)(() => {
746
+ (0, import_react6.useEffect)(() => {
717
747
  const prior = tracked.current;
718
748
  if (!prior || !isGone(prior.element, prior.state)) return;
719
749
  tracked.current = null;
@@ -749,7 +779,7 @@ function reportNotApplied(prop) {
749
779
  )
750
780
  );
751
781
  }
752
- var TagGroup = (0, import_react6.forwardRef)(
782
+ var TagGroup = (0, import_react7.forwardRef)(
753
783
  ({
754
784
  items,
755
785
  label,
@@ -762,8 +792,8 @@ var TagGroup = (0, import_react6.forwardRef)(
762
792
  dangerouslySetInnerHTML,
763
793
  ...props
764
794
  }, ref) => {
765
- const rootRef = (0, import_react6.useRef)(null);
766
- (0, import_react6.useImperativeHandle)(ref, () => rootRef.current, []);
795
+ const rootRef = (0, import_react7.useRef)(null);
796
+ (0, import_react7.useImperativeHandle)(ref, () => rootRef.current, []);
767
797
  const { onFocusCapture, onBlurCapture } = useRestoreFocusOnRemoval(
768
798
  rootRef,
769
799
  {
@@ -779,7 +809,7 @@ var TagGroup = (0, import_react6.forwardRef)(
779
809
  ariaLabel !== void 0 && "aria-label",
780
810
  dangerouslySetInnerHTML !== void 0 && "dangerouslySetInnerHTML"
781
811
  ].filter(Boolean).join(" ");
782
- (0, import_react6.useEffect)(() => {
812
+ (0, import_react7.useEffect)(() => {
783
813
  if (process.env.NODE_ENV === "production") return;
784
814
  for (const prop of notApplied ? notApplied.split(" ") : []) reportNotApplied(prop);
785
815
  }, [notApplied]);
@@ -887,19 +917,19 @@ var TagGroupManifest = {
887
917
  };
888
918
 
889
919
  // src/PropertyFilter/PropertyFilter.tsx
890
- var import_react19 = require("react");
920
+ var import_react20 = require("react");
891
921
  var import_class_variance_authority9 = require("class-variance-authority");
892
922
  var import_clsx10 = __toESM(require("clsx"), 1);
893
923
 
894
924
  // src/Button/Button.tsx
895
925
  var import_react_slot = require("@radix-ui/react-slot");
896
926
  var import_class_variance_authority5 = require("class-variance-authority");
897
- var import_react9 = require("react");
927
+ var import_react10 = require("react");
898
928
  var import_clsx5 = __toESM(require("clsx"), 1);
899
929
 
900
930
  // src/_internal/motion.ts
901
- var import_react7 = require("react");
902
- var MotionContext = (0, import_react7.createContext)("auto");
931
+ var import_react8 = require("react");
932
+ var MotionContext = (0, import_react8.createContext)("auto");
903
933
  var MOTION_VALUES = ["auto", "none"];
904
934
  var MOTION_PROPS = {
905
935
  motion: { type: "enum", values: MOTION_VALUES, default: "auto" }
@@ -910,20 +940,20 @@ function useMotion(mode = "auto", component) {
910
940
  motion: mode
911
941
  });
912
942
  }
913
- const inherited = (0, import_react7.useContext)(MotionContext);
914
- const [ready, setReady] = (0, import_react7.useState)(false);
915
- const [keyboard, setKeyboard] = (0, import_react7.useState)(false);
916
- const pointer = (0, import_react7.useRef)(false);
917
- const frame = (0, import_react7.useRef)();
918
- const contactCleanup = (0, import_react7.useRef)();
919
- const clearContact = (0, import_react7.useCallback)(() => {
943
+ const inherited = (0, import_react8.useContext)(MotionContext);
944
+ const [ready, setReady] = (0, import_react8.useState)(false);
945
+ const [keyboard, setKeyboard] = (0, import_react8.useState)(false);
946
+ const pointer = (0, import_react8.useRef)(false);
947
+ const frame = (0, import_react8.useRef)();
948
+ const contactCleanup = (0, import_react8.useRef)();
949
+ const clearContact = (0, import_react8.useCallback)(() => {
920
950
  contactCleanup.current?.();
921
951
  contactCleanup.current = void 0;
922
952
  }, []);
923
- const cancel = (0, import_react7.useCallback)(() => {
953
+ const cancel = (0, import_react8.useCallback)(() => {
924
954
  if (frame.current !== void 0) cancelAnimationFrame(frame.current);
925
955
  }, []);
926
- const afterPaint = (0, import_react7.useCallback)(
956
+ const afterPaint = (0, import_react8.useCallback)(
927
957
  (callback) => {
928
958
  cancel();
929
959
  frame.current = requestAnimationFrame(() => {
@@ -935,14 +965,14 @@ function useMotion(mode = "auto", component) {
935
965
  },
936
966
  [cancel]
937
967
  );
938
- (0, import_react7.useEffect)(() => {
968
+ (0, import_react8.useEffect)(() => {
939
969
  afterPaint(() => setReady(true));
940
970
  return () => {
941
971
  cancel();
942
972
  clearContact();
943
973
  };
944
974
  }, [afterPaint, cancel, clearContact]);
945
- const resume = (0, import_react7.useCallback)(
975
+ const resume = (0, import_react8.useCallback)(
946
976
  () => afterPaint(() => {
947
977
  setReady(true);
948
978
  setKeyboard(false);
@@ -1022,11 +1052,11 @@ function composeMotionHandlers(motion, consumer) {
1022
1052
  }
1023
1053
 
1024
1054
  // src/_internal/unavailable.ts
1025
- var import_react8 = require("react");
1026
- var FocusableWhenUnavailableContext = (0, import_react8.createContext)(false);
1055
+ var import_react9 = require("react");
1056
+ var FocusableWhenUnavailableContext = (0, import_react9.createContext)(false);
1027
1057
  var FocusableWhenUnavailableProvider = FocusableWhenUnavailableContext.Provider;
1028
1058
  function useFocusableWhenUnavailable() {
1029
- return (0, import_react8.useContext)(FocusableWhenUnavailableContext);
1059
+ return (0, import_react9.useContext)(FocusableWhenUnavailableContext);
1030
1060
  }
1031
1061
 
1032
1062
  // src/Button/Button.manifest.ts
@@ -1116,14 +1146,14 @@ var buttonStyles = (0, import_class_variance_authority5.cva)(
1116
1146
  }
1117
1147
  );
1118
1148
  function flatten(children, prefix = "") {
1119
- return import_react9.Children.toArray(children).flatMap((child) => {
1120
- if (!(0, import_react9.isValidElement)(child)) return [child];
1121
- if (child.type === import_react9.Fragment) return flatten(child.props.children, `${prefix}${child.key}/`);
1122
- return [prefix ? (0, import_react9.cloneElement)(child, { key: `${prefix}${child.key}` }) : child];
1149
+ return import_react10.Children.toArray(children).flatMap((child) => {
1150
+ if (!(0, import_react10.isValidElement)(child)) return [child];
1151
+ if (child.type === import_react10.Fragment) return flatten(child.props.children, `${prefix}${child.key}/`);
1152
+ return [prefix ? (0, import_react10.cloneElement)(child, { key: `${prefix}${child.key}` }) : child];
1123
1153
  });
1124
1154
  }
1125
1155
  function isIcon(node) {
1126
- if (!(0, import_react9.isValidElement)(node)) return false;
1156
+ if (!(0, import_react10.isValidElement)(node)) return false;
1127
1157
  const hidden = node.props["aria-hidden"];
1128
1158
  return node.type === "svg" || hidden === true || hidden === "true" || typeof node.type !== "string" && node.props.children == null;
1129
1159
  }
@@ -1160,7 +1190,7 @@ function stopActivation(event) {
1160
1190
  event.preventDefault();
1161
1191
  event.stopPropagation();
1162
1192
  }
1163
- var Button2 = (0, import_react9.forwardRef)((allProps, ref) => {
1193
+ var Button2 = (0, import_react10.forwardRef)((allProps, ref) => {
1164
1194
  const {
1165
1195
  className,
1166
1196
  variant,
@@ -1216,14 +1246,14 @@ var Button2 = (0, import_react9.forwardRef)((allProps, ref) => {
1216
1246
  Button2.displayName = "Button";
1217
1247
 
1218
1248
  // src/Field/Field.tsx
1219
- var import_react12 = require("react");
1249
+ var import_react13 = require("react");
1220
1250
  var import_clsx6 = __toESM(require("clsx"), 1);
1221
1251
 
1222
1252
  // src/_internal/fieldIds.ts
1223
- var import_react11 = require("react");
1253
+ var import_react12 = require("react");
1224
1254
 
1225
1255
  // src/_internal/hydration.ts
1226
- var import_react10 = require("react");
1256
+ var import_react11 = require("react");
1227
1257
  function keyForIds(...forwardedIds) {
1228
1258
  return forwardedIds.join(" ");
1229
1259
  }
@@ -1254,13 +1284,13 @@ function warnProbeMissing(origin) {
1254
1284
  );
1255
1285
  }
1256
1286
  function useHydrationRoot(...forwardedIds) {
1257
- const probe = (0, import_react10.useId)();
1258
- const hydrated = (0, import_react10.useSyncExternalStore)(subscribeNoop, getClientSnapshot, getServerSnapshot);
1259
- const hydratingMount = (0, import_react10.useRef)();
1287
+ const probe = (0, import_react11.useId)();
1288
+ const hydrated = (0, import_react11.useSyncExternalStore)(subscribeNoop, getClientSnapshot, getServerSnapshot);
1289
+ const hydratingMount = (0, import_react11.useRef)();
1260
1290
  if (hydratingMount.current === void 0) hydratingMount.current = !hydrated;
1261
- const [disagrees, setDisagrees] = (0, import_react10.useState)(false);
1262
- const clientOnly = (0, import_react10.useRef)(hydrated);
1263
- const origin = (0, import_react10.useRef)();
1291
+ const [disagrees, setDisagrees] = (0, import_react11.useState)(false);
1292
+ const clientOnly = (0, import_react11.useRef)(hydrated);
1293
+ const origin = (0, import_react11.useRef)();
1264
1294
  if (process.env.NODE_ENV !== "production" && origin.current === void 0) {
1265
1295
  origin.current = callerOfHook();
1266
1296
  }
@@ -1279,9 +1309,9 @@ function useHydrationRoot(...forwardedIds) {
1279
1309
  };
1280
1310
  }
1281
1311
  function useHydratedId(readRenderedId) {
1282
- const reactId = (0, import_react10.useId)();
1283
- const [renderedId, setRenderedId] = (0, import_react10.useState)();
1284
- const read = (0, import_react10.useRef)(readRenderedId);
1312
+ const reactId = (0, import_react11.useId)();
1313
+ const [renderedId, setRenderedId] = (0, import_react11.useState)();
1314
+ const read = (0, import_react11.useRef)(readRenderedId);
1285
1315
  useIsomorphicLayoutEffect(() => {
1286
1316
  const id = read.current();
1287
1317
  if (id && id !== reactId) setRenderedId(id);
@@ -1290,7 +1320,7 @@ function useHydratedId(readRenderedId) {
1290
1320
  }
1291
1321
 
1292
1322
  // src/_internal/fieldIds.ts
1293
- var FieldContext = (0, import_react11.createContext)(null);
1323
+ var FieldContext = (0, import_react12.createContext)(null);
1294
1324
  function joinIds(...ids) {
1295
1325
  const joined = /* @__PURE__ */ new Set();
1296
1326
  for (const id of ids) {
@@ -1315,7 +1345,7 @@ function ariaInvalidToken(value) {
1315
1345
  return typeof value === "string" && value !== "true" && value !== "false" ? value : void 0;
1316
1346
  }
1317
1347
  function useFieldWiring(own2, options) {
1318
- const field = (0, import_react11.useContext)(FieldContext);
1348
+ const field = (0, import_react12.useContext)(FieldContext);
1319
1349
  const namedByField = options.label === "labelledby" && !own2["aria-label"] && !options.ownLabel;
1320
1350
  const invalid = own2.invalid ?? ariaInvalidValue(own2["aria-invalid"]) ?? field?.invalid ?? false;
1321
1351
  return {
@@ -1333,18 +1363,18 @@ function useFieldWiring(own2, options) {
1333
1363
  // src/Field/Field.tsx
1334
1364
  var import_jsx_runtime6 = require("react/jsx-runtime");
1335
1365
  function useFieldContext() {
1336
- const ctx = (0, import_react12.useContext)(FieldContext);
1366
+ const ctx = (0, import_react13.useContext)(FieldContext);
1337
1367
  if (!ctx) {
1338
1368
  throw new Error("useFieldContext must be used inside a <Field>.");
1339
1369
  }
1340
1370
  return ctx;
1341
1371
  }
1342
1372
  function useOptionalFieldContext() {
1343
- return (0, import_react12.useContext)(FieldContext);
1373
+ return (0, import_react13.useContext)(FieldContext);
1344
1374
  }
1345
- var Field = (0, import_react12.forwardRef)(
1375
+ var Field = (0, import_react13.forwardRef)(
1346
1376
  ({ controlId, label, help, error, required, children, className, ...props }, ref) => {
1347
- const labelRef = (0, import_react12.useRef)(null);
1377
+ const labelRef = (0, import_react13.useRef)(null);
1348
1378
  const ids = usePartIds(["label", "help", "error"], {
1349
1379
  id: controlId,
1350
1380
  readRendered: () => labelRef.current?.htmlFor
@@ -1404,7 +1434,7 @@ Field.displayName = "Field";
1404
1434
 
1405
1435
  // src/Input/Input.tsx
1406
1436
  var import_class_variance_authority7 = require("class-variance-authority");
1407
- var import_react14 = require("react");
1437
+ var import_react15 = require("react");
1408
1438
  var import_clsx7 = __toESM(require("clsx"), 1);
1409
1439
 
1410
1440
  // src/Input/Input.manifest.ts
@@ -1456,7 +1486,7 @@ var InputManifest = {
1456
1486
 
1457
1487
  // src/_internal/overlay.ts
1458
1488
  var import_class_variance_authority6 = require("class-variance-authority");
1459
- var import_react13 = require("react");
1489
+ var import_react14 = require("react");
1460
1490
  function toPlacement(side, align) {
1461
1491
  if (align === "center") return side;
1462
1492
  if (side === "left" || side === "right") return `${side} ${align === "start" ? "top" : "bottom"}`;
@@ -1485,7 +1515,7 @@ var DESTRUCTIVE_ACTION = "Destructive action";
1485
1515
  var MENU_ITEM_SHORTCUT = "shrink-0 font-mono text-oprt-sm normal-case tracking-normal text-oprt-text-dim forced-colors:[color:inherit]";
1486
1516
  var MENU_EMPTY = "m-0 px-3u py-2u text-oprt-base normal-case text-oprt-text-dim";
1487
1517
  function isSingleElement(node) {
1488
- return (0, import_react13.isValidElement)(node) && node.type !== import_react13.Fragment;
1518
+ return (0, import_react14.isValidElement)(node) && node.type !== import_react14.Fragment;
1489
1519
  }
1490
1520
 
1491
1521
  // src/_internal/controlStyles.ts
@@ -1538,7 +1568,7 @@ var inputStyles = (0, import_class_variance_authority7.cva)(
1538
1568
  // not the one line of text inside it (operations-map-R4); a text input centers its text itself.
1539
1569
  "peer min-w-[min(10ch,100%)] flex-1 self-stretch bg-transparent border-0 outline-hidden font-sans font-medium text-oprt-md text-oprt-text placeholder:text-oprt-text-placeholder disabled:placeholder:text-oprt-text-dim disabled:cursor-not-allowed disabled:text-oprt-text-dim"
1540
1570
  );
1541
- var Input = (0, import_react14.forwardRef)((allProps, ref) => {
1571
+ var Input = (0, import_react15.forwardRef)((allProps, ref) => {
1542
1572
  const {
1543
1573
  className,
1544
1574
  size,
@@ -1619,7 +1649,7 @@ Input.displayName = "Input";
1619
1649
  // src/Select/Select.tsx
1620
1650
  var import_react_aria_components3 = require("react-aria-components");
1621
1651
  var import_class_variance_authority8 = require("class-variance-authority");
1622
- var import_react18 = require("react");
1652
+ var import_react19 = require("react");
1623
1653
  var import_clsx9 = __toESM(require("clsx"), 1);
1624
1654
  var import_icons5 = require("@oprt/icons");
1625
1655
 
@@ -1698,11 +1728,11 @@ var SelectCompositionRules = {
1698
1728
  };
1699
1729
 
1700
1730
  // src/_internal/aria.ts
1701
- var import_react16 = require("react");
1731
+ var import_react17 = require("react");
1702
1732
 
1703
1733
  // src/_internal/mergeRefs.ts
1704
- var import_react15 = require("react");
1705
- var supportsRefCleanup = Number.parseInt(import_react15.version, 10) >= 19;
1734
+ var import_react16 = require("react");
1735
+ var supportsRefCleanup = Number.parseInt(import_react16.version, 10) >= 19;
1706
1736
  function setRef(ref, node) {
1707
1737
  if (typeof ref === "function") return ref(node);
1708
1738
  if (ref !== null && typeof ref === "object") ref.current = node;
@@ -1728,12 +1758,12 @@ function mergeRefs(...refs) {
1728
1758
  };
1729
1759
  }
1730
1760
  function useMergedRefs(...refs) {
1731
- return (0, import_react15.useMemo)(() => mergeRefs(...refs), refs);
1761
+ return (0, import_react16.useMemo)(() => mergeRefs(...refs), refs);
1732
1762
  }
1733
1763
  function useInputRefObject(setNode) {
1734
- const node = (0, import_react15.useRef)(null);
1735
- const cleanup = (0, import_react15.useRef)(null);
1736
- return (0, import_react15.useMemo)(
1764
+ const node = (0, import_react16.useRef)(null);
1765
+ const cleanup = (0, import_react16.useRef)(null);
1766
+ return (0, import_react16.useMemo)(
1737
1767
  () => ({
1738
1768
  get current() {
1739
1769
  return node.current;
@@ -1764,7 +1794,7 @@ function definedOnly(props) {
1764
1794
  return out;
1765
1795
  }
1766
1796
  function useAriaInvalidRef(forwarded, invalid) {
1767
- const sync = (0, import_react16.useCallback)(
1797
+ const sync = (0, import_react17.useCallback)(
1768
1798
  (node) => {
1769
1799
  if (!node) return;
1770
1800
  if (invalid) node.setAttribute("aria-invalid", "true");
@@ -1775,7 +1805,7 @@ function useAriaInvalidRef(forwarded, invalid) {
1775
1805
  return useMergedRefs(sync, forwarded);
1776
1806
  }
1777
1807
  function renderInvalidButton(invalid) {
1778
- return (props) => (0, import_react16.createElement)("button", invalid ? { ...props, "aria-invalid": "true" } : props);
1808
+ return (props) => (0, import_react17.createElement)("button", invalid ? { ...props, "aria-invalid": "true" } : props);
1779
1809
  }
1780
1810
  function switchValidationProps({
1781
1811
  invalid,
@@ -1790,7 +1820,7 @@ function switchValidationProps({
1790
1820
 
1791
1821
  // src/_internal/MotionPopover.tsx
1792
1822
  var import_react_aria_components2 = require("react-aria-components");
1793
- var import_react17 = require("react");
1823
+ var import_react18 = require("react");
1794
1824
  var import_clsx8 = __toESM(require("clsx"), 1);
1795
1825
  var import_jsx_runtime8 = require("react/jsx-runtime");
1796
1826
  function canTakeFocus(element) {
@@ -1805,16 +1835,16 @@ function PopoverSurface({
1805
1835
  placement,
1806
1836
  focusManagement
1807
1837
  }) {
1808
- const surface = (0, import_react17.useRef)(null);
1838
+ const surface = (0, import_react18.useRef)(null);
1809
1839
  const surfaceRef = useMergedRefs(
1810
1840
  surface,
1811
1841
  // RAC hands over a callback or an object ref; a legacy string ref is not one it uses.
1812
1842
  domProps.ref
1813
1843
  );
1814
- const wasExiting = (0, import_react17.useRef)(isExiting);
1815
- const restoreFocus = (0, import_react17.useRef)(false);
1816
- const previousPlacement = (0, import_react17.useRef)(placement);
1817
- (0, import_react17.useLayoutEffect)(() => {
1844
+ const wasExiting = (0, import_react18.useRef)(isExiting);
1845
+ const restoreFocus = (0, import_react18.useRef)(false);
1846
+ const previousPlacement = (0, import_react18.useRef)(placement);
1847
+ (0, import_react18.useLayoutEffect)(() => {
1818
1848
  const node = surface.current;
1819
1849
  if (!node) return;
1820
1850
  if (previousPlacement.current && previousPlacement.current !== placement) {
@@ -1839,7 +1869,7 @@ function PopoverSurface({
1839
1869
  }
1840
1870
  wasExiting.current = isExiting;
1841
1871
  }, [isExiting, trigger, triggerRef, placement, focusManagement]);
1842
- (0, import_react17.useEffect)(() => {
1872
+ (0, import_react18.useEffect)(() => {
1843
1873
  if (focusManagement === "automatic" && isExiting && restoreFocus.current) {
1844
1874
  const active = document.activeElement;
1845
1875
  if (active === document.body || surface.current?.contains(active)) {
@@ -1917,7 +1947,7 @@ var triggerStyles = (0, import_class_variance_authority8.cva)(
1917
1947
  );
1918
1948
  var contentStyles = LISTBOX_SURFACE;
1919
1949
  var itemStyles = LISTBOX_ROW;
1920
- var Select = (0, import_react18.forwardRef)(
1950
+ var Select = (0, import_react19.forwardRef)(
1921
1951
  ({
1922
1952
  motion = "auto",
1923
1953
  placeholder,
@@ -2051,7 +2081,7 @@ var Select = (0, import_react18.forwardRef)(
2051
2081
  }
2052
2082
  );
2053
2083
  Select.displayName = "Select";
2054
- var SelectOption = (0, import_react18.forwardRef)(
2084
+ var SelectOption = (0, import_react19.forwardRef)(
2055
2085
  ({ className, children, value, disabled, ...props }, ref) => {
2056
2086
  const itemProps = {};
2057
2087
  if (typeof children === "string") itemProps["textValue"] = children;
@@ -2110,7 +2140,7 @@ function tokenLabel(token, fields) {
2110
2140
  const error = getPropertyFilterTokenError(token, fields);
2111
2141
  return error ? `Invalid filter: ${label}. ${error}` : label;
2112
2142
  }
2113
- var PropertyFilter = (0, import_react19.forwardRef)(
2143
+ var PropertyFilter = (0, import_react20.forwardRef)(
2114
2144
  ({
2115
2145
  fields,
2116
2146
  value,
@@ -2124,29 +2154,29 @@ var PropertyFilter = (0, import_react19.forwardRef)(
2124
2154
  "aria-labelledby": labelledBy,
2125
2155
  ...props
2126
2156
  }, ref) => {
2127
- const instanceId = (0, import_react19.useId)();
2128
- const root = (0, import_react19.useRef)(null);
2129
- (0, import_react19.useImperativeHandle)(ref, () => root.current, []);
2157
+ const instanceId = (0, import_react20.useId)();
2158
+ const root = (0, import_react20.useRef)(null);
2159
+ (0, import_react20.useImperativeHandle)(ref, () => root.current, []);
2130
2160
  const ids = usePartIds(["error"], {
2131
2161
  id,
2132
2162
  readRendered: () => root.current?.getAttribute("data-oprt-ids")
2133
2163
  });
2134
- const nextId = (0, import_react19.useRef)(0);
2135
- const addRef = (0, import_react19.useRef)(null);
2136
- const clearRef = (0, import_react19.useRef)(null);
2137
- const composing = (0, import_react19.useRef)(false);
2138
- const pendingAdd = (0, import_react19.useRef)(null);
2139
- const [draft, setDraft] = (0, import_react19.useState)({ field: "", operator: "", value: "" });
2140
- const [error, setError] = (0, import_react19.useState)(null);
2164
+ const nextId = (0, import_react20.useRef)(0);
2165
+ const addRef = (0, import_react20.useRef)(null);
2166
+ const clearRef = (0, import_react20.useRef)(null);
2167
+ const composing = (0, import_react20.useRef)(false);
2168
+ const pendingAdd = (0, import_react20.useRef)(null);
2169
+ const [draft, setDraft] = (0, import_react20.useState)({ field: "", operator: "", value: "" });
2170
+ const [error, setError] = (0, import_react20.useState)(null);
2141
2171
  const field = fields.find((candidate) => candidate.key === draft.field);
2142
2172
  const operator = field?.operators.find((candidate) => candidate.key === draft.operator);
2143
2173
  const fault = (control) => error?.control === control ? { invalid: true, "aria-describedby": ids.error } : {};
2144
- const clearLeft = (0, import_react19.useRef)(false);
2174
+ const clearLeft = (0, import_react20.useRef)(false);
2145
2175
  const restore = useRestoreFocusOnRemoval(root, {
2146
2176
  track: (element) => element === clearRef.current ? void 0 : null,
2147
2177
  findTarget: () => !clearLeft.current && !disabled && value.tokens.length === 0 ? addRef.current : null
2148
2178
  });
2149
- (0, import_react19.useEffect)(() => {
2179
+ (0, import_react20.useEffect)(() => {
2150
2180
  const pending = pendingAdd.current;
2151
2181
  if (pending && value.tokens.some(
2152
2182
  (token) => token.id === pending.token.id && token.field === pending.token.field && token.operator === pending.token.operator && token.value === pending.token.value
@@ -2404,7 +2434,7 @@ var PropertyFilterManifest = {
2404
2434
  };
2405
2435
 
2406
2436
  // src/CollectionState/CollectionState.tsx
2407
- var import_react20 = require("react");
2437
+ var import_react21 = require("react");
2408
2438
  var import_class_variance_authority10 = require("class-variance-authority");
2409
2439
  var import_clsx11 = __toESM(require("clsx"), 1);
2410
2440
 
@@ -2465,7 +2495,7 @@ var headingStyles = (0, import_class_variance_authority10.cva)(
2465
2495
  }
2466
2496
  }
2467
2497
  );
2468
- var CollectionState = (0, import_react20.forwardRef)((allProps, ref) => {
2498
+ var CollectionState = (0, import_react21.forwardRef)((allProps, ref) => {
2469
2499
  const {
2470
2500
  variant,
2471
2501
  title,
@@ -2477,7 +2507,7 @@ var CollectionState = (0, import_react20.forwardRef)((allProps, ref) => {
2477
2507
  "aria-describedby": describedBy,
2478
2508
  ...props
2479
2509
  } = allProps;
2480
- const id = (0, import_react20.useId)();
2510
+ const id = (0, import_react21.useId)();
2481
2511
  const titleId = `${id}-title`;
2482
2512
  const descriptionId = `${id}-description`;
2483
2513
  const Heading5 = `h${headingLevel}`;
@@ -2511,7 +2541,7 @@ CollectionState.displayName = "CollectionState";
2511
2541
 
2512
2542
  // src/Breadcrumb/Breadcrumb.tsx
2513
2543
  var import_icons6 = require("@oprt/icons");
2514
- var import_react21 = require("react");
2544
+ var import_react22 = require("react");
2515
2545
  var import_clsx12 = __toESM(require("clsx"), 1);
2516
2546
  var import_jsx_runtime12 = require("react/jsx-runtime");
2517
2547
  function currentIndex(items) {
@@ -2520,7 +2550,7 @@ function currentIndex(items) {
2520
2550
  const last = items.length - 1;
2521
2551
  return items[last]?.current === false ? -1 : last;
2522
2552
  }
2523
- var Breadcrumb = (0, import_react21.forwardRef)(
2553
+ var Breadcrumb = (0, import_react22.forwardRef)(
2524
2554
  ({ items, separator = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_icons6.ChevronRight, { size: 12 }), className, ...props }, ref) => {
2525
2555
  if (items.length === 0) return null;
2526
2556
  const current = currentIndex(items);
@@ -2597,7 +2627,7 @@ var BreadcrumbManifest = {
2597
2627
 
2598
2628
  // src/ButtonGroup/ButtonGroup.tsx
2599
2629
  var import_class_variance_authority11 = require("class-variance-authority");
2600
- var import_react22 = require("react");
2630
+ var import_react23 = require("react");
2601
2631
  var import_clsx13 = __toESM(require("clsx"), 1);
2602
2632
 
2603
2633
  // src/ButtonGroup/ButtonGroup.manifest.ts
@@ -2650,7 +2680,7 @@ var groupStyles2 = (0, import_class_variance_authority11.cva)("inline-flex max-w
2650
2680
  ],
2651
2681
  defaultVariants: { orientation: "horizontal", attached: true }
2652
2682
  });
2653
- var ButtonGroup = (0, import_react22.forwardRef)((allProps, ref) => {
2683
+ var ButtonGroup = (0, import_react23.forwardRef)((allProps, ref) => {
2654
2684
  const { className, orientation = "horizontal", attached = true, ...props } = allProps;
2655
2685
  if (process.env.NODE_ENV !== "production") {
2656
2686
  devValidate("ButtonGroup", ButtonGroupManifest.ButtonGroup.props, { ...allProps });
@@ -2672,10 +2702,10 @@ var ButtonGroup = (0, import_react22.forwardRef)((allProps, ref) => {
2672
2702
  ButtonGroup.displayName = "ButtonGroup";
2673
2703
 
2674
2704
  // src/Card/Card.tsx
2675
- var import_react23 = require("react");
2705
+ var import_react24 = require("react");
2676
2706
  var import_clsx14 = __toESM(require("clsx"), 1);
2677
2707
  var import_jsx_runtime14 = require("react/jsx-runtime");
2678
- var Card = (0, import_react23.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2708
+ var Card = (0, import_react24.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2679
2709
  "div",
2680
2710
  {
2681
2711
  ref,
@@ -2687,7 +2717,7 @@ var Card = (0, import_react23.forwardRef)(({ className, ...props }, ref) => /* @
2687
2717
  }
2688
2718
  ));
2689
2719
  Card.displayName = "Card";
2690
- var CardHeader = (0, import_react23.forwardRef)(
2720
+ var CardHeader = (0, import_react24.forwardRef)(
2691
2721
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2692
2722
  "div",
2693
2723
  {
@@ -2703,7 +2733,7 @@ var CardHeader = (0, import_react23.forwardRef)(
2703
2733
  )
2704
2734
  );
2705
2735
  CardHeader.displayName = "CardHeader";
2706
- var CardBody = (0, import_react23.forwardRef)(
2736
+ var CardBody = (0, import_react24.forwardRef)(
2707
2737
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2708
2738
  "div",
2709
2739
  {
@@ -2717,7 +2747,7 @@ var CardBody = (0, import_react23.forwardRef)(
2717
2747
  )
2718
2748
  );
2719
2749
  CardBody.displayName = "CardBody";
2720
- var CardFooter = (0, import_react23.forwardRef)(
2750
+ var CardFooter = (0, import_react24.forwardRef)(
2721
2751
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2722
2752
  "div",
2723
2753
  {
@@ -2791,7 +2821,7 @@ var CardCompositionRules = {
2791
2821
  // src/Checkbox/Checkbox.tsx
2792
2822
  var import_react_aria_components4 = require("react-aria-components");
2793
2823
  var import_class_variance_authority12 = require("class-variance-authority");
2794
- var import_react24 = require("react");
2824
+ var import_react25 = require("react");
2795
2825
  var import_clsx15 = __toESM(require("clsx"), 1);
2796
2826
  var import_icons7 = require("@oprt/icons");
2797
2827
 
@@ -2860,7 +2890,7 @@ var rootStyles2 = (0, import_class_variance_authority12.cva)(
2860
2890
  defaultVariants: { size: "md" }
2861
2891
  }
2862
2892
  );
2863
- var Checkbox = (0, import_react24.forwardRef)((props, ref) => {
2893
+ var Checkbox = (0, import_react25.forwardRef)((props, ref) => {
2864
2894
  const {
2865
2895
  className,
2866
2896
  motion = "auto",
@@ -2900,13 +2930,13 @@ var Checkbox = (0, import_react24.forwardRef)((props, ref) => {
2900
2930
  devValidate("Checkbox", CheckboxManifest.Checkbox.props, { ...props });
2901
2931
  }
2902
2932
  const isControlled = checked !== void 0;
2903
- const [uncontrolledIndeterminate, setUncontrolledIndeterminate] = (0, import_react24.useState)(
2933
+ const [uncontrolledIndeterminate, setUncontrolledIndeterminate] = (0, import_react25.useState)(
2904
2934
  defaultChecked === "indeterminate"
2905
2935
  );
2906
2936
  const isIndeterminate = isControlled ? checked === "indeterminate" : uncontrolledIndeterminate;
2907
2937
  const setNode = useAriaInvalidRef(ref, isInvalid);
2908
2938
  const inputRef = useInputRefObject(setNode);
2909
- const deferredInputMotion = (0, import_react24.useRef)(null);
2939
+ const deferredInputMotion = (0, import_react25.useRef)(null);
2910
2940
  const motionProps = {
2911
2941
  ...motionState.props,
2912
2942
  onClickCapture: (event) => {
@@ -2983,7 +3013,7 @@ Checkbox.displayName = "Checkbox";
2983
3013
  // src/Collapsible/Collapsible.tsx
2984
3014
  var import_react_aria_components5 = require("react-aria-components");
2985
3015
  var import_react_aria = require("react-aria");
2986
- var import_react25 = require("react");
3016
+ var import_react26 = require("react");
2987
3017
  var import_clsx16 = __toESM(require("clsx"), 1);
2988
3018
  var import_icons8 = require("@oprt/icons");
2989
3019
 
@@ -3041,8 +3071,8 @@ var CollapsibleCompositionRules = {
3041
3071
  // src/Collapsible/Collapsible.tsx
3042
3072
  var import_jsx_runtime16 = require("react/jsx-runtime");
3043
3073
  function CollapsiblePanel({ expanded, children }) {
3044
- const panel = (0, import_react25.useRef)(null);
3045
- const latestExpanded = (0, import_react25.useRef)(expanded);
3074
+ const panel = (0, import_react26.useRef)(null);
3075
+ const latestExpanded = (0, import_react26.useRef)(expanded);
3046
3076
  latestExpanded.current = expanded;
3047
3077
  useIsomorphicLayoutEffect(() => {
3048
3078
  const node = panel.current;
@@ -3081,7 +3111,7 @@ function toKeySet(value) {
3081
3111
  if (Array.isArray(value)) return new Set(value);
3082
3112
  return new Set(value === "" ? [] : [value]);
3083
3113
  }
3084
- var Collapsible = (0, import_react25.forwardRef)(
3114
+ var Collapsible = (0, import_react26.forwardRef)(
3085
3115
  ({
3086
3116
  type = "single",
3087
3117
  motion = "auto",
@@ -3095,7 +3125,7 @@ var Collapsible = (0, import_react25.forwardRef)(
3095
3125
  }, ref) => {
3096
3126
  const motionState = useMotion(motion);
3097
3127
  const isControlled = value !== void 0;
3098
- const [uncontrolledKeys, setUncontrolledKeys] = (0, import_react25.useState)(
3128
+ const [uncontrolledKeys, setUncontrolledKeys] = (0, import_react26.useState)(
3099
3129
  () => toKeySet(defaultValue)
3100
3130
  );
3101
3131
  const expandedKeys = isControlled ? toKeySet(value) : uncontrolledKeys;
@@ -3138,7 +3168,7 @@ var Collapsible = (0, import_react25.forwardRef)(
3138
3168
  }
3139
3169
  );
3140
3170
  Collapsible.displayName = "Collapsible";
3141
- var CollapsibleItem = (0, import_react25.forwardRef)(
3171
+ var CollapsibleItem = (0, import_react26.forwardRef)(
3142
3172
  ({ value, title, disabled, className, children, ...props }, ref) => {
3143
3173
  const itemProps = {
3144
3174
  ...props,
@@ -3194,7 +3224,7 @@ CollapsibleItem.displayName = "CollapsibleItem";
3194
3224
  // src/CommandPalette/CommandPalette.tsx
3195
3225
  var import_icons9 = require("@oprt/icons");
3196
3226
  var import_react_aria_components6 = require("react-aria-components");
3197
- var import_react26 = require("react");
3227
+ var import_react27 = require("react");
3198
3228
  var import_clsx17 = __toESM(require("clsx"), 1);
3199
3229
  var import_jsx_runtime17 = require("react/jsx-runtime");
3200
3230
  var itemStyles2 = `m-0 ${MENU_ROW} text-oprt-base font-medium text-oprt-text cursor-pointer list-none outline-hidden data-[focused]:border-oprt-border-focus data-[focused]:shadow-oprt-focus data-[focused]:bg-oprt-surface-3 data-[disabled]:opacity-50 data-[disabled]:cursor-not-allowed ${FORCED_ACTIVE_ROW}`;
@@ -3210,17 +3240,17 @@ function reveal(list, row) {
3210
3240
  else if (bottom > list.clientHeight) list.scrollTop += bottom - list.clientHeight;
3211
3241
  }
3212
3242
  function useSettled(value, delay) {
3213
- const [settled, setSettled] = (0, import_react26.useState)(value);
3214
- (0, import_react26.useEffect)(() => {
3243
+ const [settled, setSettled] = (0, import_react27.useState)(value);
3244
+ (0, import_react27.useEffect)(() => {
3215
3245
  const timer = setTimeout(() => setSettled(value), delay);
3216
3246
  return () => clearTimeout(timer);
3217
3247
  }, [value, delay]);
3218
3248
  return settled;
3219
3249
  }
3220
3250
  function useReturnFocusToOpener(isOpen) {
3221
- const clicked = (0, import_react26.useRef)(null);
3222
- const opener = (0, import_react26.useRef)(null);
3223
- (0, import_react26.useEffect)(() => {
3251
+ const clicked = (0, import_react27.useRef)(null);
3252
+ const opener = (0, import_react27.useRef)(null);
3253
+ (0, import_react27.useEffect)(() => {
3224
3254
  const record = (event) => {
3225
3255
  const target = event.target instanceof Element ? event.target.closest(FOCUSABLE) : null;
3226
3256
  clicked.current = target;
@@ -3252,17 +3282,17 @@ function PaletteContent({
3252
3282
  emptyMessage,
3253
3283
  onRun
3254
3284
  }) {
3255
- const [query, setQuery] = (0, import_react26.useState)("");
3256
- const byId = (0, import_react26.useMemo)(() => {
3285
+ const [query, setQuery] = (0, import_react27.useState)("");
3286
+ const byId = (0, import_react27.useMemo)(() => {
3257
3287
  const map = /* @__PURE__ */ new Map();
3258
3288
  for (const cmd of commands) map.set(cmd.id, cmd);
3259
3289
  return map;
3260
3290
  }, [commands]);
3261
- const hasGroups = (0, import_react26.useMemo)(
3291
+ const hasGroups = (0, import_react27.useMemo)(
3262
3292
  () => commands.some((cmd) => cmd.group !== void 0 && cmd.group !== ""),
3263
3293
  [commands]
3264
3294
  );
3265
- const runs = (0, import_react26.useMemo)(() => {
3295
+ const runs = (0, import_react27.useMemo)(() => {
3266
3296
  const out = [];
3267
3297
  for (const cmd of commands) {
3268
3298
  const group = hasGroups && cmd.group !== void 0 && cmd.group !== "" ? cmd.group : void 0;
@@ -3272,12 +3302,12 @@ function PaletteContent({
3272
3302
  }
3273
3303
  return out;
3274
3304
  }, [commands, hasGroups]);
3275
- const disabledKeys = (0, import_react26.useMemo)(
3305
+ const disabledKeys = (0, import_react27.useMemo)(
3276
3306
  () => commands.filter((cmd) => cmd.disabled).map((cmd) => cmd.id),
3277
3307
  [commands]
3278
3308
  );
3279
3309
  const { contains } = (0, import_react_aria_components6.useFilter)({ sensitivity: "base" });
3280
- const filter = (0, import_react26.useCallback)(
3310
+ const filter = (0, import_react27.useCallback)(
3281
3311
  (textValue, inputValue, node) => {
3282
3312
  if (inputValue === "") return true;
3283
3313
  if (contains(textValue, inputValue)) return true;
@@ -3288,15 +3318,15 @@ function PaletteContent({
3288
3318
  );
3289
3319
  const noMatch = query !== "" && !commands.some((cmd) => filter(cmd.label, query, { key: cmd.id }));
3290
3320
  const announcement = useSettled(noMatch ? emptyMessage : "", 300);
3291
- const onAction = (0, import_react26.useCallback)(
3321
+ const onAction = (0, import_react27.useCallback)(
3292
3322
  (key) => {
3293
3323
  const cmd = byId.get(String(key));
3294
3324
  if (cmd && !cmd.disabled) onRun(cmd);
3295
3325
  },
3296
3326
  [byId, onRun]
3297
3327
  );
3298
- const listObserver = (0, import_react26.useRef)(null);
3299
- const listRef = (0, import_react26.useCallback)((list) => {
3328
+ const listObserver = (0, import_react27.useRef)(null);
3329
+ const listRef = (0, import_react27.useCallback)((list) => {
3300
3330
  listObserver.current?.disconnect();
3301
3331
  listObserver.current = null;
3302
3332
  if (!list) return;
@@ -3365,7 +3395,7 @@ function PaletteContent({
3365
3395
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { role: "status", className: "sr-only", children: announcement })
3366
3396
  ] });
3367
3397
  }
3368
- var CommandPalette = (0, import_react26.forwardRef)(
3398
+ var CommandPalette = (0, import_react27.forwardRef)(
3369
3399
  ({
3370
3400
  open,
3371
3401
  defaultOpen,
@@ -3375,18 +3405,18 @@ var CommandPalette = (0, import_react26.forwardRef)(
3375
3405
  emptyMessage = "No results",
3376
3406
  className
3377
3407
  }, ref) => {
3378
- const [internalOpen, setInternalOpen] = (0, import_react26.useState)(defaultOpen ?? false);
3408
+ const [internalOpen, setInternalOpen] = (0, import_react27.useState)(defaultOpen ?? false);
3379
3409
  const isControlled = open !== void 0;
3380
3410
  const isOpen = isControlled ? open : internalOpen;
3381
3411
  useReturnFocusToOpener(isOpen);
3382
- const setOpen = (0, import_react26.useCallback)(
3412
+ const setOpen = (0, import_react27.useCallback)(
3383
3413
  (next) => {
3384
3414
  if (!isControlled) setInternalOpen(next);
3385
3415
  onOpenChange?.(next);
3386
3416
  },
3387
3417
  [isControlled, onOpenChange]
3388
3418
  );
3389
- const onRun = (0, import_react26.useCallback)(
3419
+ const onRun = (0, import_react27.useCallback)(
3390
3420
  (cmd) => {
3391
3421
  cmd.onSelect();
3392
3422
  setOpen(false);
@@ -3464,14 +3494,14 @@ var CommandPaletteManifest = {
3464
3494
  };
3465
3495
 
3466
3496
  // src/ConfirmDialog/ConfirmDialog.tsx
3467
- var import_react28 = require("react");
3497
+ var import_react29 = require("react");
3468
3498
 
3469
3499
  // src/Dialog/Dialog.tsx
3470
3500
  var import_icons10 = require("@oprt/icons");
3471
3501
  var import_react_aria_components7 = require("react-aria-components");
3472
3502
  var import_react_aria2 = require("react-aria");
3473
3503
  var import_class_variance_authority13 = require("class-variance-authority");
3474
- var import_react27 = require("react");
3504
+ var import_react28 = require("react");
3475
3505
  var import_clsx18 = __toESM(require("clsx"), 1);
3476
3506
 
3477
3507
  // src/Dialog/Dialog.manifest.ts
@@ -3520,8 +3550,8 @@ function DialogReentryFocus({
3520
3550
  dialog,
3521
3551
  children
3522
3552
  }) {
3523
- const wasOpen = (0, import_react27.useRef)(open);
3524
- (0, import_react27.useLayoutEffect)(() => {
3553
+ const wasOpen = (0, import_react28.useRef)(open);
3554
+ (0, import_react28.useLayoutEffect)(() => {
3525
3555
  if (open && !wasOpen.current && !dialog.current?.contains(document.activeElement)) {
3526
3556
  dialog.current?.focus({ preventScroll: true });
3527
3557
  }
@@ -3530,8 +3560,8 @@ function DialogReentryFocus({
3530
3560
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_jsx_runtime18.Fragment, { children });
3531
3561
  }
3532
3562
  function useScrolls(element, content) {
3533
- const [scrolls, setScrolls] = (0, import_react27.useState)(false);
3534
- (0, import_react27.useEffect)(() => {
3563
+ const [scrolls, setScrolls] = (0, import_react28.useState)(false);
3564
+ (0, import_react28.useEffect)(() => {
3535
3565
  const box = element.current;
3536
3566
  if (!box || typeof ResizeObserver === "undefined") return;
3537
3567
  const measure = () => setScrolls(box.scrollHeight > box.clientHeight + 1);
@@ -3544,8 +3574,8 @@ function useScrolls(element, content) {
3544
3574
  return scrolls;
3545
3575
  }
3546
3576
  function DialogBody({ title, children }) {
3547
- const body = (0, import_react27.useRef)(null);
3548
- const content = (0, import_react27.useRef)(null);
3577
+ const body = (0, import_react28.useRef)(null);
3578
+ const content = (0, import_react28.useRef)(null);
3549
3579
  const scrolls = useScrolls(body, content);
3550
3580
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3551
3581
  "div",
@@ -3567,7 +3597,7 @@ function withDroppedProps2(rendered, accepted) {
3567
3597
  }
3568
3598
  return (0, import_react_aria2.mergeProps)(rendered, dropped);
3569
3599
  }
3570
- var Dialog2 = (0, import_react27.forwardRef)(
3600
+ var Dialog2 = (0, import_react28.forwardRef)(
3571
3601
  ({
3572
3602
  title,
3573
3603
  motion = "auto",
@@ -3583,7 +3613,7 @@ var Dialog2 = (0, import_react27.forwardRef)(
3583
3613
  ...props
3584
3614
  }, ref) => {
3585
3615
  const motionState = useMotion(motion);
3586
- const dialogRef = (0, import_react27.useRef)(null);
3616
+ const dialogRef = (0, import_react28.useRef)(null);
3587
3617
  const setDialogRef = useMergedRefs(dialogRef, ref);
3588
3618
  const rootProps = definedOnly({
3589
3619
  isOpen: open,
@@ -3593,7 +3623,7 @@ var Dialog2 = (0, import_react27.forwardRef)(
3593
3623
  if (process.env.NODE_ENV !== "production") {
3594
3624
  devValidate("Dialog", DialogManifest.Dialog.props, { ...props, size });
3595
3625
  }
3596
- const generatedId = (0, import_react27.useId)();
3626
+ const generatedId = (0, import_react28.useId)();
3597
3627
  const describedBy = description ? `${generatedId}description` : void 0;
3598
3628
  const naming = definedOnly({
3599
3629
  id: props.id,
@@ -3669,7 +3699,7 @@ var Dialog2 = (0, import_react27.forwardRef)(
3669
3699
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MotionContext.Provider, { value: motionState.mode, children: overlay });
3670
3700
  const triggerElement = isSingleElement(trigger) ? trigger : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Button2, { children: trigger });
3671
3701
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MotionContext.Provider, { value: motionState.mode, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components7.DialogTrigger, { ...rootProps, children: [
3672
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components7.Pressable, { ...{ "aria-haspopup": "dialog" }, children: (0, import_react27.cloneElement)(
3702
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components7.Pressable, { ...{ "aria-haspopup": "dialog" }, children: (0, import_react28.cloneElement)(
3673
3703
  triggerElement,
3674
3704
  composeMotionHandlers(motionState.props, triggerElement.props)
3675
3705
  ) }),
@@ -3711,7 +3741,7 @@ var ConfirmDialogManifest = {
3711
3741
 
3712
3742
  // src/ConfirmDialog/ConfirmDialog.tsx
3713
3743
  var import_jsx_runtime19 = require("react/jsx-runtime");
3714
- var ConfirmDialog = (0, import_react28.forwardRef)((props, ref) => {
3744
+ var ConfirmDialog = (0, import_react29.forwardRef)((props, ref) => {
3715
3745
  const {
3716
3746
  trigger,
3717
3747
  title,
@@ -3728,14 +3758,14 @@ var ConfirmDialog = (0, import_react28.forwardRef)((props, ref) => {
3728
3758
  className
3729
3759
  } = props;
3730
3760
  const isControlled = open !== void 0;
3731
- const [internalOpen, setInternalOpen] = (0, import_react28.useState)(defaultOpen ?? false);
3761
+ const [internalOpen, setInternalOpen] = (0, import_react29.useState)(defaultOpen ?? false);
3732
3762
  const resolvedOpen = isControlled ? open : internalOpen;
3733
3763
  const setOpen = (next) => {
3734
3764
  if (!isControlled) setInternalOpen(next);
3735
3765
  onOpenChange?.(next);
3736
3766
  };
3737
- const [phrase, setPhrase] = (0, import_react28.useState)("");
3738
- (0, import_react28.useEffect)(() => {
3767
+ const [phrase, setPhrase] = (0, import_react29.useState)("");
3768
+ (0, import_react29.useEffect)(() => {
3739
3769
  if (!resolvedOpen) setPhrase("");
3740
3770
  }, [resolvedOpen]);
3741
3771
  const confirmDisabled = confirmPhrase !== void 0 && phrase.trim() !== confirmPhrase;
@@ -3784,11 +3814,11 @@ ConfirmDialog.displayName = "ConfirmDialog";
3784
3814
 
3785
3815
  // src/DataTable/DataTable.tsx
3786
3816
  var import_icons11 = require("@oprt/icons");
3787
- var import_react33 = require("react");
3817
+ var import_react34 = require("react");
3788
3818
  var import_clsx20 = __toESM(require("clsx"), 1);
3789
3819
 
3790
3820
  // src/_internal/numberText.tsx
3791
- var import_react29 = require("react");
3821
+ var import_react30 = require("react");
3792
3822
  var import_clsx19 = __toESM(require("clsx"), 1);
3793
3823
  var import_jsx_runtime20 = require("react/jsx-runtime");
3794
3824
  var DIGIT = "\\p{Nd}";
@@ -3944,7 +3974,7 @@ function numberText({ value, unit, className }) {
3944
3974
  );
3945
3975
  }
3946
3976
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { "data-oprt-number": "", className, children: [
3947
- lead.map((piece, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react29.Fragment, { children: [
3977
+ lead.map((piece, index) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react30.Fragment, { children: [
3948
3978
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "whitespace-nowrap", children: piece }),
3949
3979
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("wbr", {})
3950
3980
  ] }, index)),
@@ -3996,21 +4026,21 @@ function sortedOrder(values, direction, compare) {
3996
4026
  }
3997
4027
 
3998
4028
  // src/DataTable/useScrollsSideways.ts
3999
- var import_react31 = require("react");
4029
+ var import_react32 = require("react");
4000
4030
 
4001
4031
  // src/_internal/useElementWidth.ts
4002
- var import_react30 = require("react");
4032
+ var import_react31 = require("react");
4003
4033
  function createResizeObserver(callback) {
4004
4034
  return typeof ResizeObserver === "undefined" ? null : new ResizeObserver(callback);
4005
4035
  }
4006
4036
  function useElementWidth(ref, { initial, min = 0, select }) {
4007
- const [value, setValue] = (0, import_react30.useState)(initial);
4008
- const measured = (0, import_react30.useRef)(null);
4009
- const latest = (0, import_react30.useRef)({ min, select });
4037
+ const [value, setValue] = (0, import_react31.useState)(initial);
4038
+ const measured = (0, import_react31.useRef)(null);
4039
+ const latest = (0, import_react31.useRef)({ min, select });
4010
4040
  useIsomorphicLayoutEffect(() => {
4011
4041
  latest.current = { min, select };
4012
4042
  });
4013
- (0, import_react30.useEffect)(() => {
4043
+ (0, import_react31.useEffect)(() => {
4014
4044
  const element = ref.current;
4015
4045
  if (!element) return;
4016
4046
  const observer = createResizeObserver((entries) => {
@@ -4023,7 +4053,7 @@ function useElementWidth(ref, { initial, min = 0, select }) {
4023
4053
  observer?.observe(element);
4024
4054
  return () => observer?.disconnect();
4025
4055
  }, [ref]);
4026
- (0, import_react30.useEffect)(() => {
4056
+ (0, import_react31.useEffect)(() => {
4027
4057
  if (select && measured.current !== null) setValue(select(measured.current));
4028
4058
  }, [select]);
4029
4059
  return value;
@@ -4031,14 +4061,14 @@ function useElementWidth(ref, { initial, min = 0, select }) {
4031
4061
 
4032
4062
  // src/DataTable/useScrollsSideways.ts
4033
4063
  function useScrollsSideways(enabled = true) {
4034
- const box = (0, import_react31.useRef)(null);
4035
- const followed = (0, import_react31.useRef)(null);
4036
- const [scrolling, setScrolling] = (0, import_react31.useState)(null);
4037
- const answered = (0, import_react31.useRef)(scrolling);
4064
+ const box = (0, import_react32.useRef)(null);
4065
+ const followed = (0, import_react32.useRef)(null);
4066
+ const [scrolling, setScrolling] = (0, import_react32.useState)(null);
4067
+ const answered = (0, import_react32.useRef)(scrolling);
4038
4068
  useIsomorphicLayoutEffect(() => {
4039
4069
  answered.current = scrolling;
4040
4070
  });
4041
- const setBox = (0, import_react31.useCallback)((element) => {
4071
+ const setBox = (0, import_react32.useCallback)((element) => {
4042
4072
  box.current = element;
4043
4073
  if (element !== null && answered.current !== null && answered.current !== element) {
4044
4074
  setScrolling(null);
@@ -4073,7 +4103,7 @@ function useScrollsSideways(enabled = true) {
4073
4103
  }
4074
4104
  };
4075
4105
  });
4076
- (0, import_react31.useEffect)(
4106
+ (0, import_react32.useEffect)(
4077
4107
  () => () => {
4078
4108
  followed.current?.stop();
4079
4109
  followed.current = null;
@@ -4084,7 +4114,7 @@ function useScrollsSideways(enabled = true) {
4084
4114
  }
4085
4115
 
4086
4116
  // src/DataTable/useTableWindow.ts
4087
- var import_react32 = require("react");
4117
+ var import_react33 = require("react");
4088
4118
  var finite = (value, fallback, minimum) => value !== void 0 && Number.isFinite(value) ? Math.max(minimum, value) : fallback;
4089
4119
  var NO_HEIGHTS = /* @__PURE__ */ new Map();
4090
4120
  var MIN_ROW = 24;
@@ -4097,18 +4127,18 @@ function useTableWindow(rowKeys, options) {
4097
4127
  const estimate = fixed ?? finite(options?.estimateRowHeight, 40, 24);
4098
4128
  const overscan = Math.floor(finite(options?.overscan, 3, 1));
4099
4129
  const measured = windowed && fixed === void 0;
4100
- const viewport = (0, import_react32.useRef)(null);
4101
- const [heights, setHeights] = (0, import_react32.useState)(NO_HEIGHTS);
4102
- const [anchor, setAnchor] = (0, import_react32.useState)(0);
4103
- const [focusedKey, setFocusedKey] = (0, import_react32.useState)(null);
4104
- const offsets = (0, import_react32.useMemo)(() => {
4130
+ const viewport = (0, import_react33.useRef)(null);
4131
+ const [heights, setHeights] = (0, import_react33.useState)(NO_HEIGHTS);
4132
+ const [anchor, setAnchor] = (0, import_react33.useState)(0);
4133
+ const [focusedKey, setFocusedKey] = (0, import_react33.useState)(null);
4134
+ const offsets = (0, import_react33.useMemo)(() => {
4105
4135
  if (!measured) return null;
4106
4136
  const result = new Float64Array(keys.length + 1);
4107
4137
  for (let row = 0; row < keys.length; row++)
4108
4138
  result[row + 1] = result[row] + (heights.get(keys[row]) ?? estimate);
4109
4139
  return result;
4110
4140
  }, [measured, keys, heights, estimate]);
4111
- const geometry = (0, import_react32.useMemo)(
4141
+ const geometry = (0, import_react33.useMemo)(
4112
4142
  () => ({ count: count2, offsets, estimate, height }),
4113
4143
  [count2, offsets, estimate, height]
4114
4144
  );
@@ -4134,11 +4164,11 @@ function useTableWindow(rowKeys, options) {
4134
4164
  const [from, to] = mountedRange(geometry, element.scrollTop, overscan);
4135
4165
  if (from !== start || to !== end) setAnchor(element.scrollTop);
4136
4166
  }, [windowed, geometry, overscan, start, end]);
4137
- const nodes = (0, import_react32.useRef)(/* @__PURE__ */ new Map());
4138
- const keyOf2 = (0, import_react32.useRef)(/* @__PURE__ */ new WeakMap());
4139
- const observer = (0, import_react32.useRef)(null);
4140
- const rowRefs = (0, import_react32.useRef)(/* @__PURE__ */ new Map());
4141
- (0, import_react32.useEffect)(() => {
4167
+ const nodes = (0, import_react33.useRef)(/* @__PURE__ */ new Map());
4168
+ const keyOf2 = (0, import_react33.useRef)(/* @__PURE__ */ new WeakMap());
4169
+ const observer = (0, import_react33.useRef)(null);
4170
+ const rowRefs = (0, import_react33.useRef)(/* @__PURE__ */ new Map());
4171
+ (0, import_react33.useEffect)(() => {
4142
4172
  if (!measured || typeof ResizeObserver === "undefined") return;
4143
4173
  const resizes = new ResizeObserver((entries) => {
4144
4174
  const sizes = [];
@@ -4156,7 +4186,7 @@ function useTableWindow(rowKeys, options) {
4156
4186
  observer.current = null;
4157
4187
  };
4158
4188
  }, [measured]);
4159
- (0, import_react32.useEffect)(() => {
4189
+ (0, import_react33.useEffect)(() => {
4160
4190
  if (!measured || typeof ResizeObserver !== "undefined") return;
4161
4191
  const sizes = [];
4162
4192
  for (const [key, node] of nodes.current) {
@@ -4165,7 +4195,7 @@ function useTableWindow(rowKeys, options) {
4165
4195
  }
4166
4196
  if (sizes.length > 0) setHeights((current) => withHeights(current, sizes));
4167
4197
  }, [measured, start, end]);
4168
- (0, import_react32.useEffect)(() => {
4198
+ (0, import_react33.useEffect)(() => {
4169
4199
  if (!measured) return;
4170
4200
  for (const key of rowRefs.current.keys())
4171
4201
  if (!index.has(key) && !nodes.current.has(key)) rowRefs.current.delete(key);
@@ -4322,7 +4352,7 @@ function renderCell(column, value, fixedWidth) {
4322
4352
  return value;
4323
4353
  }
4324
4354
  }
4325
- var DataTable = (0, import_react33.forwardRef)(
4355
+ var DataTable = (0, import_react34.forwardRef)(
4326
4356
  ({
4327
4357
  columns,
4328
4358
  data,
@@ -4343,7 +4373,7 @@ var DataTable = (0, import_react33.forwardRef)(
4343
4373
  onBlurCapture,
4344
4374
  ...props
4345
4375
  }, ref) => {
4346
- const [sort, setSort] = (0, import_react33.useState)(null);
4376
+ const [sort, setSort] = (0, import_react34.useState)(null);
4347
4377
  const externallySorted = sortDescriptor !== void 0;
4348
4378
  const toggleSort = (key) => {
4349
4379
  setSort((prev) => {
@@ -4353,21 +4383,21 @@ var DataTable = (0, import_react33.forwardRef)(
4353
4383
  });
4354
4384
  };
4355
4385
  const columnSortable = (col) => !externallySorted && sortable && col.sortable !== false;
4356
- const order = (0, import_react33.useMemo)(
4386
+ const order = (0, import_react34.useMemo)(
4357
4387
  () => !externallySorted && sort ? sortedOrder(
4358
4388
  data.map((row) => row[sort.key]),
4359
4389
  sort.dir === "asc" ? 1 : -1
4360
4390
  ) : null,
4361
4391
  [data, externallySorted, sort]
4362
4392
  );
4363
- const rows = (0, import_react33.useMemo)(
4393
+ const rows = (0, import_react34.useMemo)(
4364
4394
  () => order ? order.map((position) => data[position]) : data,
4365
4395
  [data, order]
4366
4396
  );
4367
- const latestGetRowId = (0, import_react33.useRef)(getRowId);
4397
+ const latestGetRowId = (0, import_react34.useRef)(getRowId);
4368
4398
  latestGetRowId.current = getRowId;
4369
4399
  const withRowIds = getRowId !== void 0;
4370
- const rowKeys = (0, import_react33.useMemo)(() => {
4400
+ const rowKeys = (0, import_react34.useMemo)(() => {
4371
4401
  const read = withRowIds ? latestGetRowId.current : void 0;
4372
4402
  const keys2 = rows.map((row, position) => read?.(row, position) ?? String(position));
4373
4403
  const index = /* @__PURE__ */ new Map();
@@ -4378,8 +4408,8 @@ var DataTable = (0, import_react33.forwardRef)(
4378
4408
  }, [rows, withRowIds]);
4379
4409
  const sortsItself = !externallySorted && sortable && columns.some((column) => column.sortable !== false);
4380
4410
  const outsideEnvelope = sortsItself && !virtualization && data.length > SORTABLE_ROWS_UNWINDOWED;
4381
- const warned = (0, import_react33.useRef)(false);
4382
- (0, import_react33.useEffect)(() => {
4411
+ const warned = (0, import_react34.useRef)(false);
4412
+ (0, import_react34.useEffect)(() => {
4383
4413
  if (process.env.NODE_ENV === "production" || !outsideEnvelope || warned.current) return;
4384
4414
  warned.current = true;
4385
4415
  console.warn(
@@ -4705,7 +4735,7 @@ var DataTableManifest = {
4705
4735
 
4706
4736
  // src/Divider/Divider.tsx
4707
4737
  var import_react_aria_components8 = require("react-aria-components");
4708
- var import_react34 = require("react");
4738
+ var import_react35 = require("react");
4709
4739
  var import_clsx21 = __toESM(require("clsx"), 1);
4710
4740
 
4711
4741
  // src/Divider/Divider.manifest.ts
@@ -4730,7 +4760,7 @@ var DividerManifest = {
4730
4760
  // src/Divider/Divider.tsx
4731
4761
  var import_jsx_runtime22 = require("react/jsx-runtime");
4732
4762
  var lineStyles = "bg-oprt-border";
4733
- var Divider = (0, import_react34.forwardRef)((allProps, ref) => {
4763
+ var Divider = (0, import_react35.forwardRef)((allProps, ref) => {
4734
4764
  const {
4735
4765
  className,
4736
4766
  orientation: requested = "horizontal",
@@ -4784,7 +4814,7 @@ Divider.displayName = "Divider";
4784
4814
 
4785
4815
  // src/DropdownMenu/DropdownMenu.tsx
4786
4816
  var import_react_aria_components9 = require("react-aria-components");
4787
- var import_react35 = require("react");
4817
+ var import_react36 = require("react");
4788
4818
  var import_clsx22 = __toESM(require("clsx"), 1);
4789
4819
 
4790
4820
  // src/DropdownMenu/DropdownMenu.manifest.ts
@@ -4868,8 +4898,8 @@ var DropdownMenuCompositionRules = {
4868
4898
 
4869
4899
  // src/DropdownMenu/DropdownMenu.tsx
4870
4900
  var import_jsx_runtime23 = require("react/jsx-runtime");
4871
- var KeepOpenContext = (0, import_react35.createContext)(null);
4872
- var DropdownMenu = (0, import_react35.forwardRef)((props, ref) => {
4901
+ var KeepOpenContext = (0, import_react36.createContext)(null);
4902
+ var DropdownMenu = (0, import_react36.forwardRef)((props, ref) => {
4873
4903
  const {
4874
4904
  motion = "auto",
4875
4905
  trigger,
@@ -4882,10 +4912,10 @@ var DropdownMenu = (0, import_react35.forwardRef)((props, ref) => {
4882
4912
  children
4883
4913
  } = props;
4884
4914
  const motionState = useMotion(motion);
4885
- const [localOpen, setLocalOpen] = (0, import_react35.useState)(defaultOpen);
4915
+ const [localOpen, setLocalOpen] = (0, import_react36.useState)(defaultOpen);
4886
4916
  const isOpen = open ?? localOpen;
4887
- const keepOpen = (0, import_react35.useRef)(false);
4888
- const requestOpen = (0, import_react35.useCallback)(
4917
+ const keepOpen = (0, import_react36.useRef)(false);
4918
+ const requestOpen = (0, import_react36.useCallback)(
4889
4919
  (next) => {
4890
4920
  if (!next && keepOpen.current) {
4891
4921
  keepOpen.current = false;
@@ -4920,9 +4950,9 @@ var DropdownMenu = (0, import_react35.forwardRef)((props, ref) => {
4920
4950
  ] }, hydration.key) }) });
4921
4951
  });
4922
4952
  DropdownMenu.displayName = "DropdownMenu";
4923
- var DropdownMenuItem = (0, import_react35.forwardRef)(
4953
+ var DropdownMenuItem = (0, import_react36.forwardRef)(
4924
4954
  ({ className, shortcut, danger = false, disabled, textValue, onSelect, children, ...props }, ref) => {
4925
- const keepOpen = (0, import_react35.useContext)(KeepOpenContext);
4955
+ const keepOpen = (0, import_react36.useContext)(KeepOpenContext);
4926
4956
  const itemProps = { ...definedOnly(props) };
4927
4957
  if (textValue !== void 0) itemProps["textValue"] = textValue;
4928
4958
  else if (typeof children === "string") itemProps["textValue"] = children;
@@ -4956,7 +4986,7 @@ var DropdownMenuItem = (0, import_react35.forwardRef)(
4956
4986
  }
4957
4987
  );
4958
4988
  DropdownMenuItem.displayName = "DropdownMenuItem";
4959
- var DropdownMenuSeparator = (0, import_react35.forwardRef)(
4989
+ var DropdownMenuSeparator = (0, import_react36.forwardRef)(
4960
4990
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4961
4991
  import_react_aria_components9.Separator,
4962
4992
  {
@@ -4968,7 +4998,7 @@ var DropdownMenuSeparator = (0, import_react35.forwardRef)(
4968
4998
  )
4969
4999
  );
4970
5000
  DropdownMenuSeparator.displayName = "DropdownMenuSeparator";
4971
- var DropdownMenuLabel = (0, import_react35.forwardRef)(
5001
+ var DropdownMenuLabel = (0, import_react36.forwardRef)(
4972
5002
  ({ className, ...props }, ref) => (
4973
5003
  // RAC's Header is a valid collection leaf inside a Menu, but a bare
4974
5004
  // <header> element maps to the `banner` landmark role, which is illegal
@@ -5024,7 +5054,7 @@ var FieldManifest = {
5024
5054
  var import_react_aria_components10 = require("react-aria-components");
5025
5055
  var import_react_aria3 = require("react-aria");
5026
5056
  var import_filterDOMProps = require("react-aria/filterDOMProps");
5027
- var import_react36 = require("react");
5057
+ var import_react37 = require("react");
5028
5058
  var import_clsx23 = __toESM(require("clsx"), 1);
5029
5059
  var import_jsx_runtime24 = require("react/jsx-runtime");
5030
5060
  var itemStyles3 = [
@@ -5079,7 +5109,7 @@ function report(mistake, prop, received) {
5079
5109
  }
5080
5110
  var NOT_APPLIED = ["role", "aria-orientation", "dangerouslySetInnerHTML"];
5081
5111
  var buttonsIn = (root) => root ? Array.from(root.querySelectorAll("button")) : [];
5082
- var FilterBar = (0, import_react36.forwardRef)((componentProps, ref) => {
5112
+ var FilterBar = (0, import_react37.forwardRef)((componentProps, ref) => {
5083
5113
  const {
5084
5114
  className,
5085
5115
  filters,
@@ -5091,9 +5121,9 @@ var FilterBar = (0, import_react36.forwardRef)((componentProps, ref) => {
5091
5121
  disabled = false,
5092
5122
  ...props
5093
5123
  } = componentProps;
5094
- const root = (0, import_react36.useRef)(null);
5124
+ const root = (0, import_react37.useRef)(null);
5095
5125
  const mergedRef = useMergedRefs(root, ref);
5096
- const [ownSelection, setOwnSelection] = (0, import_react36.useState)(
5126
+ const [ownSelection, setOwnSelection] = (0, import_react37.useState)(
5097
5127
  () => toKeys(defaultValue ?? "")
5098
5128
  );
5099
5129
  const selected = value !== void 0 ? toKeys(value) : ownSelection;
@@ -5105,7 +5135,7 @@ var FilterBar = (0, import_react36.forwardRef)((componentProps, ref) => {
5105
5135
  const sourceProp = value !== void 0 ? "value" : "defaultValue";
5106
5136
  const unavailableKey = JSON.stringify(unavailable);
5107
5137
  const duplicatesKey = JSON.stringify(duplicates);
5108
- (0, import_react36.useEffect)(() => {
5138
+ (0, import_react37.useEffect)(() => {
5109
5139
  if (process.env.NODE_ENV === "production") return;
5110
5140
  for (const key of JSON.parse(unavailableKey))
5111
5141
  report("unknown value", sourceProp, key);
@@ -5138,7 +5168,7 @@ var FilterBar = (0, import_react36.forwardRef)((componentProps, ref) => {
5138
5168
  for (const name of [...Object.keys(forwarded), ...NOT_APPLIED])
5139
5169
  delete dropped[name];
5140
5170
  const notApplied = NOT_APPLIED.filter((name) => props[name] !== void 0).join(" ");
5141
- (0, import_react36.useEffect)(() => {
5171
+ (0, import_react37.useEffect)(() => {
5142
5172
  if (process.env.NODE_ENV === "production") return;
5143
5173
  for (const name of notApplied ? notApplied.split(" ") : []) report("not applied", name, name);
5144
5174
  }, [notApplied]);
@@ -5237,7 +5267,7 @@ var FilterBarManifest = {
5237
5267
  // src/Progress/Progress.tsx
5238
5268
  var import_react_aria_components11 = require("react-aria-components");
5239
5269
  var import_class_variance_authority14 = require("class-variance-authority");
5240
- var import_react37 = require("react");
5270
+ var import_react38 = require("react");
5241
5271
  var import_clsx24 = __toESM(require("clsx"), 1);
5242
5272
 
5243
5273
  // src/Progress/Progress.manifest.ts
@@ -5287,7 +5317,7 @@ var SOLID_FILL = "bg-oprt-accent forced-colors:bg-[CanvasText] forced-colors:[fo
5287
5317
  var HATCH_FILL = "[--oprt-hatch:var(--oprt-accent)] forced-colors:[--oprt-hatch:CanvasText] forced-colors:[forced-color-adjust:none] [background-image:repeating-linear-gradient(135deg,var(--oprt-hatch)_0,var(--oprt-hatch)_var(--oprt-space-0-5),transparent_var(--oprt-space-0-5),transparent_var(--oprt-space-1))]";
5288
5318
  var SLIDE_STILL = "motion-reduce:animate-none forced-colors:animate-none";
5289
5319
  var BLOCK_HATCH = ["\u259A", "\u259E"];
5290
- var Progress = (0, import_react37.forwardRef)((allProps, ref) => {
5320
+ var Progress = (0, import_react38.forwardRef)((allProps, ref) => {
5291
5321
  const {
5292
5322
  className,
5293
5323
  value,
@@ -5393,7 +5423,7 @@ Progress.displayName = "Progress";
5393
5423
  // src/RadioGroup/RadioGroup.tsx
5394
5424
  var import_react_aria_components12 = require("react-aria-components");
5395
5425
  var import_class_variance_authority15 = require("class-variance-authority");
5396
- var import_react38 = require("react");
5426
+ var import_react39 = require("react");
5397
5427
  var import_clsx25 = __toESM(require("clsx"), 1);
5398
5428
  var import_icons12 = require("@oprt/icons");
5399
5429
 
@@ -5440,7 +5470,7 @@ var RadioGroupCompositionRules = {
5440
5470
 
5441
5471
  // src/RadioGroup/RadioGroup.tsx
5442
5472
  var import_jsx_runtime26 = require("react/jsx-runtime");
5443
- var SizeContext = (0, import_react38.createContext)("md");
5473
+ var SizeContext = (0, import_react39.createContext)("md");
5444
5474
  var groupStyles3 = (0, import_class_variance_authority15.cva)("flex font-sans", {
5445
5475
  variants: {
5446
5476
  orientation: {
@@ -5466,7 +5496,7 @@ var radioBoxStyles = (0, import_class_variance_authority15.cva)(
5466
5496
  defaultVariants: { size: "md" }
5467
5497
  }
5468
5498
  );
5469
- var RadioGroup = (0, import_react38.forwardRef)(
5499
+ var RadioGroup = (0, import_react39.forwardRef)(
5470
5500
  ({
5471
5501
  className,
5472
5502
  orientation,
@@ -5534,9 +5564,9 @@ var RadioGroup = (0, import_react38.forwardRef)(
5534
5564
  }
5535
5565
  );
5536
5566
  RadioGroup.displayName = "RadioGroup";
5537
- var Radio = (0, import_react38.forwardRef)(
5567
+ var Radio = (0, import_react39.forwardRef)(
5538
5568
  ({ className, children, value, disabled, id, "aria-label": ariaLabel }, ref) => {
5539
- const size = (0, import_react38.useContext)(SizeContext);
5569
+ const size = (0, import_react39.useContext)(SizeContext);
5540
5570
  const setNode = useMergedRefs(ref);
5541
5571
  const inputRef = useInputRefObject(setNode);
5542
5572
  const itemProps = definedOnly({ id, "aria-label": ariaLabel });
@@ -5566,24 +5596,24 @@ Radio.displayName = "Radio";
5566
5596
 
5567
5597
  // src/Sidebar/Sidebar.tsx
5568
5598
  var import_react_slot2 = require("@radix-ui/react-slot");
5569
- var import_react40 = require("react");
5599
+ var import_react41 = require("react");
5570
5600
  var import_clsx26 = __toESM(require("clsx"), 1);
5571
5601
 
5572
5602
  // src/_internal/navigationLandmark.ts
5573
- var import_react39 = require("react");
5574
- var InsideNavigationLandmarkContext = (0, import_react39.createContext)(false);
5603
+ var import_react40 = require("react");
5604
+ var InsideNavigationLandmarkContext = (0, import_react40.createContext)(false);
5575
5605
  var InsideNavigationLandmarkProvider = InsideNavigationLandmarkContext.Provider;
5576
5606
  function useInsideNavigationLandmark() {
5577
- return (0, import_react39.useContext)(InsideNavigationLandmarkContext);
5607
+ return (0, import_react40.useContext)(InsideNavigationLandmarkContext);
5578
5608
  }
5579
5609
 
5580
5610
  // src/Sidebar/Sidebar.tsx
5581
5611
  var import_jsx_runtime27 = require("react/jsx-runtime");
5582
- var Sidebar = (0, import_react40.forwardRef)(
5612
+ var Sidebar = (0, import_react41.forwardRef)(
5583
5613
  ({ className, children, ...props }, ref) => {
5584
5614
  const insideLandmark = useInsideNavigationLandmark();
5585
5615
  const Root2 = insideLandmark ? "div" : "nav";
5586
- const parts = import_react40.Children.toArray(children);
5616
+ const parts = import_react41.Children.toArray(children);
5587
5617
  let start = 0;
5588
5618
  while (start < parts.length && isPart(parts[start], SidebarLogo)) start += 1;
5589
5619
  let end = parts.length;
@@ -5618,9 +5648,9 @@ var Sidebar = (0, import_react40.forwardRef)(
5618
5648
  );
5619
5649
  Sidebar.displayName = "Sidebar";
5620
5650
  function isPart(node, part) {
5621
- return (0, import_react40.isValidElement)(node) && node.type === part;
5651
+ return (0, import_react41.isValidElement)(node) && node.type === part;
5622
5652
  }
5623
- var SidebarLogo = (0, import_react40.forwardRef)(
5653
+ var SidebarLogo = (0, import_react41.forwardRef)(
5624
5654
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5625
5655
  "div",
5626
5656
  {
@@ -5637,9 +5667,9 @@ var SidebarLogo = (0, import_react40.forwardRef)(
5637
5667
  )
5638
5668
  );
5639
5669
  SidebarLogo.displayName = "SidebarLogo";
5640
- var SidebarSection = (0, import_react40.forwardRef)(
5670
+ var SidebarSection = (0, import_react41.forwardRef)(
5641
5671
  ({ className, label, children, ...props }, ref) => {
5642
- const labelId = (0, import_react40.useId)();
5672
+ const labelId = (0, import_react41.useId)();
5643
5673
  return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5644
5674
  "div",
5645
5675
  {
@@ -5663,7 +5693,7 @@ var SidebarSection = (0, import_react40.forwardRef)(
5663
5693
  }
5664
5694
  );
5665
5695
  SidebarSection.displayName = "SidebarSection";
5666
- var SidebarItem = (0, import_react40.forwardRef)(
5696
+ var SidebarItem = (0, import_react41.forwardRef)(
5667
5697
  ({ className, icon, active = false, href, asChild = false, children, ...props }, ref) => {
5668
5698
  const Comp = asChild ? import_react_slot2.Slot : href ? "a" : "button";
5669
5699
  const sharedProps = {
@@ -5691,7 +5721,7 @@ var SidebarItem = (0, import_react40.forwardRef)(
5691
5721
  }
5692
5722
  );
5693
5723
  SidebarItem.displayName = "SidebarItem";
5694
- var SidebarFooter = (0, import_react40.forwardRef)(
5724
+ var SidebarFooter = (0, import_react41.forwardRef)(
5695
5725
  ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5696
5726
  "div",
5697
5727
  {
@@ -5777,7 +5807,7 @@ var SidebarCompositionRules = {
5777
5807
 
5778
5808
  // src/Skeleton/Skeleton.tsx
5779
5809
  var import_class_variance_authority16 = require("class-variance-authority");
5780
- var import_react41 = require("react");
5810
+ var import_react42 = require("react");
5781
5811
  var import_clsx27 = __toESM(require("clsx"), 1);
5782
5812
 
5783
5813
  // src/Skeleton/Skeleton.manifest.ts
@@ -5822,7 +5852,7 @@ var barStyles = (0, import_class_variance_authority16.cva)(
5822
5852
  defaultVariants: { variant: "block" }
5823
5853
  }
5824
5854
  );
5825
- var Skeleton = (0, import_react41.forwardRef)((allProps, ref) => {
5855
+ var Skeleton = (0, import_react42.forwardRef)((allProps, ref) => {
5826
5856
  const { className, variant = "block", width, height, lines = 3, ...props } = allProps;
5827
5857
  if (process.env.NODE_ENV !== "production") {
5828
5858
  devValidate("Skeleton", SkeletonManifest.Skeleton.props, { ...allProps });
@@ -5879,7 +5909,7 @@ Skeleton.displayName = "Skeleton";
5879
5909
  var import_react_aria_components13 = require("react-aria-components");
5880
5910
  var import_react_aria4 = require("react-aria");
5881
5911
  var import_class_variance_authority17 = require("class-variance-authority");
5882
- var import_react42 = require("react");
5912
+ var import_react43 = require("react");
5883
5913
  var import_clsx28 = __toESM(require("clsx"), 1);
5884
5914
 
5885
5915
  // src/Slider/Slider.manifest.ts
@@ -5989,8 +6019,8 @@ function ValueThumb({
5989
6019
  index = 0,
5990
6020
  ...props
5991
6021
  }) {
5992
- const inputRef = (0, import_react42.useRef)(null);
5993
- const state = (0, import_react42.useContext)(import_react_aria_components13.SliderStateContext);
6022
+ const inputRef = (0, import_react43.useRef)(null);
6023
+ const state = (0, import_react43.useContext)(import_react_aria_components13.SliderStateContext);
5994
6024
  useIsomorphicLayoutEffect(() => {
5995
6025
  const input = inputRef.current;
5996
6026
  if (!input) return;
@@ -6002,7 +6032,7 @@ function ValueThumb({
6002
6032
  return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components13.SliderThumb, { ...props, index, inputRef });
6003
6033
  }
6004
6034
  var ENDS = ["lower", "upper"];
6005
- var Slider = (0, import_react42.forwardRef)((props, ref) => {
6035
+ var Slider = (0, import_react43.forwardRef)((props, ref) => {
6006
6036
  const {
6007
6037
  className,
6008
6038
  style,
@@ -6049,7 +6079,7 @@ var Slider = (0, import_react42.forwardRef)((props, ref) => {
6049
6079
  },
6050
6080
  { label: "labelledby" }
6051
6081
  );
6052
- const wrapper = (0, import_react42.useRef)(null);
6082
+ const wrapper = (0, import_react43.useRef)(null);
6053
6083
  const ends = usePartIds(ENDS, {
6054
6084
  readRendered: () => wrapper.current?.getAttribute("data-oprt-ids")
6055
6085
  });
@@ -6143,7 +6173,7 @@ var Slider = (0, import_react42.forwardRef)((props, ref) => {
6143
6173
  i
6144
6174
  ))
6145
6175
  ] }),
6146
- showValue && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: valueStyles, "aria-hidden": "true", children: state.values.map((current, index) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react42.Fragment, { children: [
6176
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: valueStyles, "aria-hidden": "true", children: state.values.map((current, index) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react43.Fragment, { children: [
6147
6177
  index > 0 && " \u2013 ",
6148
6178
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(NumberText, { value: formatValue ? formatValue(current) : current })
6149
6179
  ] }, index)) })
@@ -6157,7 +6187,7 @@ Slider.displayName = "Slider";
6157
6187
 
6158
6188
  // src/StatCard/StatCard.tsx
6159
6189
  var import_icons13 = require("@oprt/icons");
6160
- var import_react43 = require("react");
6190
+ var import_react44 = require("react");
6161
6191
  var import_clsx29 = __toESM(require("clsx"), 1);
6162
6192
 
6163
6193
  // src/StatCard/StatCard.manifest.ts
@@ -6260,7 +6290,7 @@ function StatValue({ value, unit }) {
6260
6290
  };
6261
6291
  return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { "data-oprt-stat-value": "", className: VALUE_NUMBER, style, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { "data-oprt-stat-value-text": "", children: [
6262
6292
  number.lead.length > 0 && // The groups before the last, each a run that cannot wrap, with a break after each.
6263
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: number.lead.map((piece, index) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react43.Fragment, { children: [
6293
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: number.lead.map((piece, index) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react44.Fragment, { children: [
6264
6294
  /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "whitespace-nowrap", children: piece }),
6265
6295
  /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("wbr", {})
6266
6296
  ] }, index)) }),
@@ -6281,7 +6311,7 @@ function StatValue({ value, unit }) {
6281
6311
  unitRest
6282
6312
  ] }) : text }) });
6283
6313
  }
6284
- var StatCard = (0, import_react43.forwardRef)((allProps, ref) => {
6314
+ var StatCard = (0, import_react44.forwardRef)((allProps, ref) => {
6285
6315
  const {
6286
6316
  className,
6287
6317
  label,
@@ -6296,7 +6326,7 @@ var StatCard = (0, import_react43.forwardRef)((allProps, ref) => {
6296
6326
  "aria-labelledby": ariaLabelledBy,
6297
6327
  ...props
6298
6328
  } = allProps;
6299
- const labelId = (0, import_react43.useId)();
6329
+ const labelId = (0, import_react44.useId)();
6300
6330
  const showTrend = delta !== void 0 || trend !== void 0;
6301
6331
  const explicitTrend = has(TREND_ICONS, trend) ? trend : void 0;
6302
6332
  const resolvedTrend = explicitTrend ?? (delta !== void 0 ? deriveTrend(delta) : "flat");
@@ -6358,7 +6388,7 @@ StatCard.displayName = "StatCard";
6358
6388
 
6359
6389
  // src/Tabs/Tabs.tsx
6360
6390
  var import_react_aria_components14 = require("react-aria-components");
6361
- var import_react46 = require("react");
6391
+ var import_react47 = require("react");
6362
6392
  var import_clsx30 = __toESM(require("clsx"), 1);
6363
6393
 
6364
6394
  // src/Tabs/Tabs.manifest.ts
@@ -6431,10 +6461,10 @@ var TabsCompositionRules = {
6431
6461
  };
6432
6462
 
6433
6463
  // src/Tabs/useTabsIndicator.ts
6434
- var import_react44 = require("react");
6464
+ var import_react45 = require("react");
6435
6465
  function useTabsIndicator(list, vertical) {
6436
- const [geometry, setGeometry] = (0, import_react44.useState)();
6437
- const selectedId = (0, import_react44.useRef)();
6466
+ const [geometry, setGeometry] = (0, import_react45.useState)();
6467
+ const selectedId = (0, import_react45.useRef)();
6438
6468
  useIsomorphicLayoutEffect(() => {
6439
6469
  const node = list.current;
6440
6470
  if (!node) return;
@@ -6496,7 +6526,7 @@ function useTabsIndicator(list, vertical) {
6496
6526
  }
6497
6527
 
6498
6528
  // src/Tabs/useTabsScroll.ts
6499
- var import_react45 = require("react");
6529
+ var import_react46 = require("react");
6500
6530
  function hiddenSides(row) {
6501
6531
  const range = row.scrollWidth - row.clientWidth;
6502
6532
  if (range <= 1) return void 0;
@@ -6524,7 +6554,7 @@ function revealTab(row, tab) {
6524
6554
  if (delta !== 0) row.scrollLeft += delta;
6525
6555
  }
6526
6556
  function useTabsScroll(list, vertical) {
6527
- const [fade, setFade] = (0, import_react45.useState)();
6557
+ const [fade, setFade] = (0, import_react46.useState)();
6528
6558
  useIsomorphicLayoutEffect(() => {
6529
6559
  const row = list.current;
6530
6560
  if (!row || vertical) {
@@ -6612,8 +6642,8 @@ function useTabsScroll(list, vertical) {
6612
6642
 
6613
6643
  // src/Tabs/Tabs.tsx
6614
6644
  var import_jsx_runtime31 = require("react/jsx-runtime");
6615
- var TabsOrientationContext = (0, import_react46.createContext)("horizontal");
6616
- var Tabs = (0, import_react46.forwardRef)(
6645
+ var TabsOrientationContext = (0, import_react47.createContext)("horizontal");
6646
+ var Tabs = (0, import_react47.forwardRef)(
6617
6647
  ({
6618
6648
  className,
6619
6649
  motion = "auto",
@@ -6661,10 +6691,10 @@ var scrollingRow = [
6661
6691
  "data-[fade=right]:[mask-image:linear-gradient(to_left,transparent,var(--oprt-text)_var(--oprt-space-4))]",
6662
6692
  "data-[fade=both]:[mask-image:linear-gradient(to_right,transparent,var(--oprt-text)_var(--oprt-space-4),var(--oprt-text)_calc(100%_-_var(--oprt-space-4)),transparent)]"
6663
6693
  ];
6664
- var TabsList = (0, import_react46.forwardRef)(
6694
+ var TabsList = (0, import_react47.forwardRef)(
6665
6695
  ({ className, children, ...props }, ref) => {
6666
- const orientation = (0, import_react46.useContext)(TabsOrientationContext);
6667
- const list = (0, import_react46.useRef)(null);
6696
+ const orientation = (0, import_react47.useContext)(TabsOrientationContext);
6697
+ const list = (0, import_react47.useRef)(null);
6668
6698
  const setNode = useMergedRefs(list, ref);
6669
6699
  const vertical = orientation === "vertical";
6670
6700
  const geometry = useTabsIndicator(list, vertical);
@@ -6716,7 +6746,7 @@ var TabsList = (0, import_react46.forwardRef)(
6716
6746
  }
6717
6747
  );
6718
6748
  TabsList.displayName = "TabsList";
6719
- var TabsTrigger = (0, import_react46.forwardRef)(
6749
+ var TabsTrigger = (0, import_react47.forwardRef)(
6720
6750
  ({ className, value, disabled, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6721
6751
  import_react_aria_components14.Tab,
6722
6752
  {
@@ -6742,7 +6772,7 @@ var TabsTrigger = (0, import_react46.forwardRef)(
6742
6772
  )
6743
6773
  );
6744
6774
  TabsTrigger.displayName = "TabsTrigger";
6745
- var TabsContent = (0, import_react46.forwardRef)(
6775
+ var TabsContent = (0, import_react47.forwardRef)(
6746
6776
  ({ className, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6747
6777
  import_react_aria_components14.TabPanel,
6748
6778
  {
@@ -6761,7 +6791,7 @@ var TabsContent = (0, import_react46.forwardRef)(
6761
6791
  TabsContent.displayName = "TabsContent";
6762
6792
 
6763
6793
  // src/Textarea/Textarea.tsx
6764
- var import_react47 = require("react");
6794
+ var import_react48 = require("react");
6765
6795
  var import_class_variance_authority18 = require("class-variance-authority");
6766
6796
  var import_clsx31 = __toESM(require("clsx"), 1);
6767
6797
  var import_jsx_runtime32 = require("react/jsx-runtime");
@@ -6781,7 +6811,7 @@ var wrapperStyles2 = (0, import_class_variance_authority18.cva)(
6781
6811
  }
6782
6812
  );
6783
6813
  var textareaStyles = "w-full bg-transparent border-0 outline-hidden resize-none font-sans font-medium text-oprt-md text-oprt-text placeholder:text-oprt-text-placeholder disabled:placeholder:text-oprt-text-dim disabled:cursor-not-allowed disabled:text-oprt-text-dim";
6784
- var Textarea = (0, import_react47.forwardRef)(
6814
+ var Textarea = (0, import_react48.forwardRef)(
6785
6815
  ({
6786
6816
  className,
6787
6817
  invalid,
@@ -6849,7 +6879,7 @@ var TextareaManifest = {
6849
6879
  var import_icons14 = require("@oprt/icons");
6850
6880
  var RadixToast = __toESM(require("@radix-ui/react-toast"), 1);
6851
6881
  var import_class_variance_authority19 = require("class-variance-authority");
6852
- var import_react48 = require("react");
6882
+ var import_react49 = require("react");
6853
6883
  var import_clsx32 = __toESM(require("clsx"), 1);
6854
6884
 
6855
6885
  // src/Toast/Toast.manifest.ts
@@ -6937,9 +6967,9 @@ var ICONS2 = {
6937
6967
  function severityOf(variant) {
6938
6968
  return typeof variant === "string" && Object.prototype.hasOwnProperty.call(ICONS2, variant) ? variant : "info";
6939
6969
  }
6940
- var SwipeDirectionContext = (0, import_react48.createContext)("right");
6970
+ var SwipeDirectionContext = (0, import_react49.createContext)("right");
6941
6971
  function useNewestInView(region) {
6942
- (0, import_react48.useEffect)(() => {
6972
+ (0, import_react49.useEffect)(() => {
6943
6973
  const list = region.current;
6944
6974
  if (!list) return;
6945
6975
  const atEnd = () => list.scrollHeight - list.clientHeight - list.scrollTop <= 1;
@@ -6966,11 +6996,11 @@ function useNewestInView(region) {
6966
6996
  };
6967
6997
  }, [region]);
6968
6998
  }
6969
- var ToastProvider = (0, import_react48.forwardRef)((props, ref) => {
6999
+ var ToastProvider = (0, import_react49.forwardRef)((props, ref) => {
6970
7000
  const { children, label = "Notifications", swipeDirection = "right", duration } = props;
6971
7001
  const providerProps = { label, swipeDirection };
6972
7002
  if (duration !== void 0) providerProps["duration"] = duration;
6973
- const region = (0, import_react48.useRef)(null);
7003
+ const region = (0, import_react49.useRef)(null);
6974
7004
  const regionRef = useMergedRefs(ref, region);
6975
7005
  useNewestInView(region);
6976
7006
  if (process.env.NODE_ENV !== "production") {
@@ -7025,7 +7055,7 @@ var titleStyles = (0, import_class_variance_authority19.cva)("m-0 text-oprt-sm u
7025
7055
  },
7026
7056
  defaultVariants: { variant: "info" }
7027
7057
  });
7028
- var Toast = (0, import_react48.forwardRef)((allProps, ref) => {
7058
+ var Toast = (0, import_react49.forwardRef)((allProps, ref) => {
7029
7059
  const {
7030
7060
  className,
7031
7061
  variant,
@@ -7043,7 +7073,7 @@ var Toast = (0, import_react48.forwardRef)((allProps, ref) => {
7043
7073
  } = allProps;
7044
7074
  const severity = severityOf(variant);
7045
7075
  const SeverityIcon = ICONS2[severity];
7046
- const swipeDirection = (0, import_react48.useContext)(SwipeDirectionContext);
7076
+ const swipeDirection = (0, import_react49.useContext)(SwipeDirectionContext);
7047
7077
  if (process.env.NODE_ENV !== "production") {
7048
7078
  devValidate("Toast", ToastManifest.Toast.props, allProps);
7049
7079
  }
@@ -7077,7 +7107,7 @@ var Toast = (0, import_react48.forwardRef)((allProps, ref) => {
7077
7107
  /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex min-w-0 flex-1 select-text flex-col gap-1u oprt-wrap-anywhere", children: [
7078
7108
  /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(RadixToast.Title, { className: titleStyles({ variant: severity }), children: title }),
7079
7109
  description && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(RadixToast.Description, { className: "m-0 text-oprt-base normal-case text-oprt-text", children: [
7080
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: ". " }),
7110
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "data-radix-toast-announce-exclude": "", "data-radix-toast-announce-alt": ". " }),
7081
7111
  description
7082
7112
  ] })
7083
7113
  ] }),
@@ -7098,7 +7128,7 @@ Toast.displayName = "Toast";
7098
7128
  // src/Toggle/Toggle.tsx
7099
7129
  var import_react_aria_components15 = require("react-aria-components");
7100
7130
  var import_class_variance_authority20 = require("class-variance-authority");
7101
- var import_react49 = require("react");
7131
+ var import_react50 = require("react");
7102
7132
  var import_clsx33 = __toESM(require("clsx"), 1);
7103
7133
 
7104
7134
  // src/Toggle/Toggle.manifest.ts
@@ -7207,7 +7237,7 @@ var thumbStyles2 = (0, import_class_variance_authority20.cva)(
7207
7237
  defaultVariants: { size: "md" }
7208
7238
  }
7209
7239
  );
7210
- var Toggle = (0, import_react49.forwardRef)((allProps, ref) => {
7240
+ var Toggle = (0, import_react50.forwardRef)((allProps, ref) => {
7211
7241
  const {
7212
7242
  className,
7213
7243
  motion = "auto",
@@ -7247,7 +7277,7 @@ var Toggle = (0, import_react49.forwardRef)((allProps, ref) => {
7247
7277
  devValidate("Toggle", ToggleManifest.Toggle.props, { ...allProps });
7248
7278
  }
7249
7279
  const setInvalidNode = useAriaInvalidRef(ref, isInvalid);
7250
- const setNode = (0, import_react49.useCallback)(
7280
+ const setNode = (0, import_react50.useCallback)(
7251
7281
  (node) => {
7252
7282
  if (node) {
7253
7283
  if (isRequired) node.setAttribute("aria-required", "true");
@@ -7295,7 +7325,7 @@ Toggle.displayName = "Toggle";
7295
7325
  // src/Toolbar/Toolbar.tsx
7296
7326
  var import_react_aria_components16 = require("react-aria-components");
7297
7327
  var import_class_variance_authority21 = require("class-variance-authority");
7298
- var import_react50 = require("react");
7328
+ var import_react51 = require("react");
7299
7329
  var import_clsx34 = __toESM(require("clsx"), 1);
7300
7330
 
7301
7331
  // src/Toolbar/Toolbar.manifest.ts
@@ -7376,8 +7406,8 @@ var toolbarStyles = (0, import_class_variance_authority21.cva)("flex bg-oprt-sur
7376
7406
  },
7377
7407
  defaultVariants: { orientation: "horizontal" }
7378
7408
  });
7379
- var ToolbarOrientationContext = (0, import_react50.createContext)(void 0);
7380
- var Toolbar = (0, import_react50.forwardRef)((allProps, ref) => {
7409
+ var ToolbarOrientationContext = (0, import_react51.createContext)(void 0);
7410
+ var Toolbar = (0, import_react51.forwardRef)((allProps, ref) => {
7381
7411
  const {
7382
7412
  className,
7383
7413
  orientation = "horizontal",
@@ -7418,10 +7448,10 @@ var separatorStyles = (0, import_class_variance_authority21.cva)("bg-oprt-border
7418
7448
  },
7419
7449
  defaultVariants: { orientation: "horizontal" }
7420
7450
  });
7421
- var ToolbarSeparator = (0, import_react50.forwardRef)(
7451
+ var ToolbarSeparator = (0, import_react51.forwardRef)(
7422
7452
  (allProps, ref) => {
7423
7453
  const { className, orientation: given, ...props } = allProps;
7424
- const inherited = (0, import_react50.useContext)(ToolbarOrientationContext);
7454
+ const inherited = (0, import_react51.useContext)(ToolbarOrientationContext);
7425
7455
  const orientation = given ?? inherited ?? "horizontal";
7426
7456
  if (process.env.NODE_ENV !== "production") {
7427
7457
  devValidate("ToolbarSeparator", ToolbarManifest.ToolbarSeparator.props, { ...allProps });
@@ -7442,13 +7472,13 @@ ToolbarSeparator.displayName = "ToolbarSeparator";
7442
7472
 
7443
7473
  // src/Tooltip/Tooltip.tsx
7444
7474
  var import_react_aria_components17 = require("react-aria-components");
7445
- var import_react51 = require("react");
7475
+ var import_react52 = require("react");
7446
7476
  var import_clsx35 = __toESM(require("clsx"), 1);
7447
7477
 
7448
7478
  // src/Tooltip/Tooltip.manifest.ts
7449
7479
  var TooltipManifest = {
7450
7480
  Tooltip: {
7451
- description: "Supplementary text on hover or keyboard focus of a trigger, wrapping at about 20rem. A disabled Button trigger stays focusable and announced unavailable, so focus or a tap shows the explanation. Built on React Aria Components (TooltipTrigger + Tooltip), portal'd, with a bordered surface.",
7481
+ description: "Supplementary text on hover or keyboard focus of a trigger, wrapping at about 20rem. The pointer can move onto the tooltip without closing it; it closes 150 ms after the pointer has left both. A disabled Button trigger stays focusable and announced unavailable, so focus or a tap shows the explanation. Built on React Aria Components (TooltipTrigger + Tooltip), portal'd, with a bordered surface.",
7452
7482
  props: {
7453
7483
  side: { type: "enum", values: ["top", "right", "bottom", "left"], default: "top" },
7454
7484
  align: { type: "enum", values: ["start", "center", "end"], default: "center" },
@@ -7473,7 +7503,8 @@ var TooltipManifest = {
7473
7503
  // src/Tooltip/Tooltip.tsx
7474
7504
  var import_jsx_runtime36 = require("react/jsx-runtime");
7475
7505
  var PLAIN_TRIGGER = "inline-flex min-h-3u items-center border-0 bg-transparent p-0 [color:inherit] [font:inherit] [letter-spacing:inherit] underline decoration-dotted underline-offset-2 cursor-help outline-hidden focus-visible:shadow-oprt-focus";
7476
- var Tooltip = (0, import_react51.forwardRef)(
7506
+ var CLOSE_DELAY = 150;
7507
+ var Tooltip = (0, import_react52.forwardRef)(
7477
7508
  ({
7478
7509
  content,
7479
7510
  children,
@@ -7486,11 +7517,11 @@ var Tooltip = (0, import_react51.forwardRef)(
7486
7517
  className,
7487
7518
  ...contentProps
7488
7519
  }, ref) => {
7489
- const [localOpen, setLocalOpen] = (0, import_react51.useState)(defaultOpen ?? false);
7520
+ const [localOpen, setLocalOpen] = (0, import_react52.useState)(defaultOpen ?? false);
7490
7521
  const isOpen = open ?? localOpen;
7491
- const tapped = (0, import_react51.useRef)(null);
7492
- const [tapOpen, setTapOpen] = (0, import_react51.useState)(false);
7493
- const setOpen = (0, import_react51.useCallback)(
7522
+ const tapped = (0, import_react52.useRef)(null);
7523
+ const [tapOpen, setTapOpen] = (0, import_react52.useState)(false);
7524
+ const setOpen = (0, import_react52.useCallback)(
7494
7525
  (next) => {
7495
7526
  if (!next) setTapOpen(false);
7496
7527
  if (open === void 0) setLocalOpen(next);
@@ -7498,7 +7529,7 @@ var Tooltip = (0, import_react51.forwardRef)(
7498
7529
  },
7499
7530
  [open, onOpenChange]
7500
7531
  );
7501
- (0, import_react51.useEffect)(() => {
7532
+ (0, import_react52.useEffect)(() => {
7502
7533
  if (!tapOpen || !isOpen) return;
7503
7534
  const dismiss = (event) => {
7504
7535
  if (!tapped.current?.contains(event.target)) setOpen(false);
@@ -7512,7 +7543,7 @@ var Tooltip = (0, import_react51.forwardRef)(
7512
7543
  if (children === null || children === void 0 || typeof children === "boolean") return null;
7513
7544
  const element = isSingleElement(children) ? children : null;
7514
7545
  const unavailable = element !== null && (element.props.disabled === true || element.props.isDisabled === true);
7515
- const trigger = !element ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("button", { type: "button", className: PLAIN_TRIGGER, children }) : unavailable ? (0, import_react51.cloneElement)(element, {
7546
+ const trigger = !element ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("button", { type: "button", className: PLAIN_TRIGGER, children }) : unavailable ? (0, import_react52.cloneElement)(element, {
7516
7547
  onPointerUp: (event) => {
7517
7548
  element.props.onPointerUp?.(event);
7518
7549
  if (event.pointerType === "mouse") return;
@@ -7528,7 +7559,7 @@ var Tooltip = (0, import_react51.forwardRef)(
7528
7559
  isOpen,
7529
7560
  onOpenChange: setOpen,
7530
7561
  delay: delayDuration,
7531
- closeDelay: 0,
7562
+ closeDelay: CLOSE_DELAY,
7532
7563
  shouldCloseOnPress: !unavailable,
7533
7564
  children: [
7534
7565
  unavailable ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(FocusableWhenUnavailableProvider, { value: true, children: focusable }) : focusable,
@@ -7569,7 +7600,7 @@ var Tooltip = (0, import_react51.forwardRef)(
7569
7600
  Tooltip.displayName = "Tooltip";
7570
7601
 
7571
7602
  // src/Chart/Chart.tsx
7572
- var import_react53 = require("react");
7603
+ var import_react54 = require("react");
7573
7604
  var import_react_aria5 = require("react-aria");
7574
7605
  var import_class_variance_authority22 = require("class-variance-authority");
7575
7606
  var import_clsx37 = __toESM(require("clsx"), 1);
@@ -7683,7 +7714,7 @@ var ChartManifest = {
7683
7714
  };
7684
7715
 
7685
7716
  // src/Chart/ChartControls.tsx
7686
- var import_react52 = require("react");
7717
+ var import_react53 = require("react");
7687
7718
  var import_react_aria_components18 = require("react-aria-components");
7688
7719
  var import_clsx36 = __toESM(require("clsx"), 1);
7689
7720
 
@@ -7896,7 +7927,7 @@ function ChartInspection({
7896
7927
  inputRef
7897
7928
  }) {
7898
7929
  const hydration = useHydrationRoot();
7899
- (0, import_react52.useEffect)(() => {
7930
+ (0, import_react53.useEffect)(() => {
7900
7931
  inputRef.current?.setAttribute("aria-valuetext", describe(index));
7901
7932
  });
7902
7933
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
@@ -7914,7 +7945,7 @@ function ChartInspection({
7914
7945
  hydration.key
7915
7946
  );
7916
7947
  }
7917
- var ChartRangeSelector = (0, import_react52.memo)(function ChartRangeSelector2({
7948
+ var ChartRangeSelector = (0, import_react53.memo)(function ChartRangeSelector2({
7918
7949
  label,
7919
7950
  series,
7920
7951
  domain,
@@ -7925,15 +7956,15 @@ var ChartRangeSelector = (0, import_react52.memo)(function ChartRangeSelector2({
7925
7956
  onChange
7926
7957
  }) {
7927
7958
  const hydration = useHydrationRoot();
7928
- const startRef = (0, import_react52.useRef)(null);
7929
- const endRef = (0, import_react52.useRef)(null);
7930
- (0, import_react52.useEffect)(() => {
7959
+ const startRef = (0, import_react53.useRef)(null);
7960
+ const endRef = (0, import_react53.useRef)(null);
7961
+ (0, import_react53.useEffect)(() => {
7931
7962
  startRef.current?.setAttribute("aria-valuetext", format(range.start));
7932
7963
  endRef.current?.setAttribute("aria-valuetext", format(range.end));
7933
7964
  });
7934
7965
  const start = fraction(range.start, domain) * 1e3;
7935
7966
  const end = fraction(range.end, domain) * 1e3;
7936
- const overview = (0, import_react52.useMemo)(() => {
7967
+ const overview = (0, import_react53.useMemo)(() => {
7937
7968
  const overviewSeries = series.map((item) => ({
7938
7969
  ...item,
7939
7970
  data: item.data.filter(
@@ -8178,7 +8209,7 @@ function binLabel(data, index, formatNumber, separator) {
8178
8209
  const end = formatNumber(withoutFloatNoise(data.edges[index + 1]));
8179
8210
  return start === end ? start : `[${start}${separator}${end}${index === data.edges.length - 2 ? "]" : ")"}`;
8180
8211
  }
8181
- var DataView = (0, import_react53.memo)(function DataView2({
8212
+ var DataView = (0, import_react54.memo)(function DataView2({
8182
8213
  id,
8183
8214
  label,
8184
8215
  series,
@@ -8403,7 +8434,7 @@ function seriesMarks(item, seriesIndex, samples, context) {
8403
8434
  ) }, index))
8404
8435
  ] });
8405
8436
  }
8406
- var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8437
+ var Chart = (0, import_react54.forwardRef)((allProps, ref) => {
8407
8438
  const {
8408
8439
  label,
8409
8440
  series,
@@ -8432,43 +8463,43 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8432
8463
  if (process.env.NODE_ENV !== "production") {
8433
8464
  devValidate("Chart", ChartManifest.Chart.props, { ...allProps });
8434
8465
  }
8435
- const labelRef = (0, import_react53.useRef)(null);
8466
+ const labelRef = (0, import_react54.useRef)(null);
8436
8467
  const { locale } = (0, import_react_aria5.useLocale)();
8437
8468
  const numberFormat = (0, import_react_aria5.useNumberFormatter)(EXACT_NUMBER);
8438
- const separator = (0, import_react53.useMemo)(() => intervalSeparator(locale), [locale]);
8439
- const formatNumber = (0, import_react53.useCallback)(
8469
+ const separator = (0, import_react54.useMemo)(() => intervalSeparator(locale), [locale]);
8470
+ const formatNumber = (0, import_react54.useCallback)(
8440
8471
  (value) => numberFormat.format(value + 0),
8441
8472
  [numberFormat]
8442
8473
  );
8443
8474
  const cellFormat = (0, import_react_aria5.useNumberFormatter)(CELL_NUMBER);
8444
- const formatCell = (0, import_react53.useCallback)((value) => cellFormat.format(value + 0), [cellFormat]);
8475
+ const formatCell = (0, import_react54.useCallback)((value) => cellFormat.format(value + 0), [cellFormat]);
8445
8476
  const ids = usePartIds(["label", "description", "hatch", "data"], {
8446
8477
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
8447
8478
  });
8448
- const plotRef = (0, import_react53.useRef)(null);
8479
+ const plotRef = (0, import_react54.useRef)(null);
8449
8480
  const plotWidth = useElementWidth(plotRef, { initial: 640, min: 0 });
8450
- const [localHidden, setLocalHidden] = (0, import_react53.useState)([]);
8451
- const [showData, setShowData] = (0, import_react53.useState)(false);
8452
- const [localRange, setLocalRange] = (0, import_react53.useState)();
8453
- const [inspection, setInspection] = (0, import_react53.useState)(null);
8454
- const [pinned, setPinned] = (0, import_react53.useState)(false);
8455
- const [inspectionFocused, setInspectionFocused] = (0, import_react53.useState)(false);
8456
- const [emphasized, setEmphasized] = (0, import_react53.useState)(null);
8457
- const inspectionRef = (0, import_react53.useRef)(null);
8481
+ const [localHidden, setLocalHidden] = (0, import_react54.useState)([]);
8482
+ const [showData, setShowData] = (0, import_react54.useState)(false);
8483
+ const [localRange, setLocalRange] = (0, import_react54.useState)();
8484
+ const [inspection, setInspection] = (0, import_react54.useState)(null);
8485
+ const [pinned, setPinned] = (0, import_react54.useState)(false);
8486
+ const [inspectionFocused, setInspectionFocused] = (0, import_react54.useState)(false);
8487
+ const [emphasized, setEmphasized] = (0, import_react54.useState)(null);
8488
+ const inspectionRef = (0, import_react54.useRef)(null);
8458
8489
  const hiddenKey = JSON.stringify(hiddenSeries ?? localHidden);
8459
- const hidden = (0, import_react53.useMemo)(() => new Set(JSON.parse(hiddenKey)), [hiddenKey]);
8490
+ const hidden = (0, import_react54.useMemo)(() => new Set(JSON.parse(hiddenKey)), [hiddenKey]);
8460
8491
  const inspectable = variant === "line" || variant === "area" || variant === "bar";
8461
- const fullVisible = (0, import_react53.useMemo)(
8492
+ const fullVisible = (0, import_react54.useMemo)(
8462
8493
  () => series.filter((item) => !hidden.has(item.id)),
8463
8494
  [series, hidden]
8464
8495
  );
8465
- const dataDomain = (0, import_react53.useMemo)(
8496
+ const dataDomain = (0, import_react54.useMemo)(
8466
8497
  () => extent(series.flatMap((item) => item.data.map((point) => point.x))),
8467
8498
  [series]
8468
8499
  );
8469
8500
  const suppliedStart = suppliedXDomain?.start;
8470
8501
  const suppliedEnd = suppliedXDomain?.end;
8471
- const fullDomain = (0, import_react53.useMemo)(
8502
+ const fullDomain = (0, import_react54.useMemo)(
8472
8503
  () => inspectable && suppliedStart !== void 0 && suppliedEnd !== void 0 && Number.isFinite(suppliedStart) && Number.isFinite(suppliedEnd) && suppliedStart < suppliedEnd ? { min: suppliedStart, max: suppliedEnd } : dataDomain,
8473
8504
  [inspectable, suppliedStart, suppliedEnd, dataDomain]
8474
8505
  );
@@ -8476,7 +8507,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8476
8507
  const requestedStart = requested?.start;
8477
8508
  const requestedEnd = requested?.end;
8478
8509
  const controlledRange = range !== void 0;
8479
- const view = (0, import_react53.useMemo)(() => {
8510
+ const view = (0, import_react54.useMemo)(() => {
8480
8511
  const full = { start: fullDomain.min, end: fullDomain.max, valid: false };
8481
8512
  if (!inspectable || requestedStart === void 0 || requestedEnd === void 0) return full;
8482
8513
  if (!Number.isFinite(requestedStart) || !Number.isFinite(requestedEnd) || requestedStart >= requestedEnd)
@@ -8491,7 +8522,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8491
8522
  return controlledRange ? { start: requestedStart, end: requestedEnd, valid: true } : { ...full, valid: true };
8492
8523
  }, [inspectable, requestedStart, requestedEnd, controlledRange, fullDomain]);
8493
8524
  const narrowed = inspectable && (view.start > dataDomain.min || view.end < dataDomain.max);
8494
- const visible = (0, import_react53.useMemo)(
8525
+ const visible = (0, import_react54.useMemo)(
8495
8526
  () => narrowed ? fullVisible.map((item) => ({
8496
8527
  ...item,
8497
8528
  data: item.data.filter(
@@ -8500,20 +8531,20 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8500
8531
  })) : fullVisible,
8501
8532
  [narrowed, fullVisible, view.start, view.end]
8502
8533
  );
8503
- const samplesAt = (0, import_react53.useMemo)(
8534
+ const samplesAt = (0, import_react54.useMemo)(
8504
8535
  () => new Map(visible.map((item) => [item, indexByX(item.data)])),
8505
8536
  [visible]
8506
8537
  );
8507
- const finite2 = (0, import_react53.useMemo)(
8538
+ const finite2 = (0, import_react54.useMemo)(
8508
8539
  () => visible.flatMap((item) => item.data.filter(isFinitePoint)),
8509
8540
  [visible]
8510
8541
  );
8511
- const distribution = (0, import_react53.useMemo)(
8542
+ const distribution = (0, import_react54.useMemo)(
8512
8543
  () => variant === "histogram" ? histogram(visible, bins) : void 0,
8513
8544
  [variant, visible, bins]
8514
8545
  );
8515
8546
  const thresholdValue = variant !== "heatmap" && threshold && Number.isFinite(threshold.value) ? threshold.value : void 0;
8516
- const yAxis = (0, import_react53.useMemo)(() => {
8547
+ const yAxis = (0, import_react54.useMemo)(() => {
8517
8548
  const values = distribution ? [...distribution.counts.values()].flat() : finite2.map((point) => point.y);
8518
8549
  if (thresholdValue !== void 0) values.push(thresholdValue);
8519
8550
  return niceAxis(
@@ -8521,7 +8552,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8521
8552
  variant === "histogram"
8522
8553
  );
8523
8554
  }, [distribution, finite2, thresholdValue, variant]);
8524
- const xValues = (0, import_react53.useMemo)(
8555
+ const xValues = (0, import_react54.useMemo)(
8525
8556
  () => [
8526
8557
  ...new Set(
8527
8558
  visible.flatMap((item) => item.data.map((point) => point.x)).filter(Number.isFinite)
@@ -8530,19 +8561,19 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8530
8561
  [visible]
8531
8562
  );
8532
8563
  const windowedAxis = inspectable && (rangeSelection || view.valid || suppliedXDomain !== void 0);
8533
- const xDomain = (0, import_react53.useMemo)(
8564
+ const xDomain = (0, import_react54.useMemo)(
8534
8565
  () => windowedAxis ? { min: view.start, max: view.end } : distribution?.domain ?? (xValues.length > 0 ? { min: xValues[0], max: xValues[xValues.length - 1] } : extent([])),
8535
8566
  [windowedAxis, view.start, view.end, distribution, xValues]
8536
8567
  );
8537
- const heatDomain = (0, import_react53.useMemo)(
8568
+ const heatDomain = (0, import_react54.useMemo)(
8538
8569
  () => variant === "heatmap" ? extent(finite2.map((point) => point.y)) : dataDomain,
8539
8570
  [variant, finite2, dataDomain]
8540
8571
  );
8541
- const anyFiniteX = (0, import_react53.useMemo)(
8572
+ const anyFiniteX = (0, import_react54.useMemo)(
8542
8573
  () => series.some((item) => item.data.some((point) => Number.isFinite(point.x))),
8543
8574
  [series]
8544
8575
  );
8545
- const missing = (0, import_react53.useMemo)(
8576
+ const missing = (0, import_react54.useMemo)(
8546
8577
  () => visible.reduce(
8547
8578
  (total, item) => total + item.data.filter((point) => !isFinitePoint(point)).length,
8548
8579
  0
@@ -8550,22 +8581,22 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8550
8581
  [visible]
8551
8582
  );
8552
8583
  const histogramView = distribution !== void 0;
8553
- const xHeading = (0, import_react53.useMemo)(
8584
+ const xHeading = (0, import_react54.useMemo)(
8554
8585
  () => histogramView ? withUnit(xLabel ?? "Value", unit) : withUnit(xLabel ?? "Sample", xUnit),
8555
8586
  [histogramView, xLabel, xUnit, unit]
8556
8587
  );
8557
- const yHeading = (0, import_react53.useMemo)(
8588
+ const yHeading = (0, import_react54.useMemo)(
8558
8589
  () => histogramView ? yLabel ?? "Count" : withUnit(yLabel ?? "Value", unit),
8559
8590
  [histogramView, yLabel, unit]
8560
8591
  );
8561
8592
  const empty = series.length === 0 ? "No data to display." : visible.length === 0 ? "All series are hidden." : narrowed && xValues.length === 0 ? "No samples in this range." : finite2.length === 0 ? "No finite data to display." : void 0;
8562
- const yLabels = (0, import_react53.useMemo)(
8593
+ const yLabels = (0, import_react54.useMemo)(
8563
8594
  () => variant === "heatmap" ? [] : tickLabels(yAxis.ticks, locale),
8564
8595
  [variant, yAxis, locale]
8565
8596
  );
8566
8597
  const longestYLabel = Math.max(9, ...yLabels.map((label2) => label2.length));
8567
8598
  const left = Math.max(LEFT, Math.ceil(8 + longestYLabel * Y_LABEL_CHARACTER_WIDTH));
8568
- const geometry = (0, import_react53.useMemo)(() => {
8599
+ const geometry = (0, import_react54.useMemo)(() => {
8569
8600
  const right = Math.max(left + 1, plotWidth - 24);
8570
8601
  const width = right - left;
8571
8602
  const initialX = scale(xDomain, left, right);
@@ -8585,7 +8616,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8585
8616
  baseline: y2(0)
8586
8617
  };
8587
8618
  }, [left, plotWidth, xDomain, xValues, variant, yAxis]);
8588
- const xTickLabels = (0, import_react53.useMemo)(() => {
8619
+ const xTickLabels = (0, import_react54.useMemo)(() => {
8589
8620
  const { left: left2, width, x: x2 } = geometry;
8590
8621
  const textFor = (value, interpolated) => formatX && !histogramView ? formatX(value) : formatNumber(interpolated ? withoutFloatNoise(value) : value);
8591
8622
  const columnText = variant === "heatmap" && xValues.length <= 6 ? xValues.map((value) => textFor(value, false)) : [];
@@ -8623,7 +8654,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8623
8654
  });
8624
8655
  }, [geometry, histogramView, formatX, formatNumber, xValues, variant, xDomain, plotWidth]);
8625
8656
  const hatchId = ids.hatch;
8626
- const marksLayer = (0, import_react53.useMemo)(() => {
8657
+ const marksLayer = (0, import_react54.useMemo)(() => {
8627
8658
  const context = {
8628
8659
  variant,
8629
8660
  fill,
@@ -8656,11 +8687,11 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8656
8687
  separator,
8657
8688
  samplesAt
8658
8689
  ]);
8659
- const seriesNumber = (0, import_react53.useMemo)(
8690
+ const seriesNumber = (0, import_react54.useMemo)(
8660
8691
  () => new Map(series.map((item, index) => [item.id, index + 1])),
8661
8692
  [series]
8662
8693
  );
8663
- const yAxisLayer = (0, import_react53.useMemo)(() => {
8694
+ const yAxisLayer = (0, import_react54.useMemo)(() => {
8664
8695
  if (variant === "heatmap") {
8665
8696
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("g", { "aria-hidden": "true", children: visible.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8666
8697
  "text",
@@ -8719,7 +8750,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8719
8750
  )
8720
8751
  ] }, index)) });
8721
8752
  }, [variant, visible, yAxis, yLabels, geometry, seriesNumber, formatNumber]);
8722
- const xAxisLayer = (0, import_react53.useMemo)(
8753
+ const xAxisLayer = (0, import_react54.useMemo)(
8723
8754
  () => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("g", { "data-chart-x-axis": "", "aria-hidden": "true", children: xTickLabels.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
8724
8755
  "text",
8725
8756
  {
@@ -8736,14 +8767,14 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8736
8767
  )) }),
8737
8768
  [xTickLabels]
8738
8769
  );
8739
- const xIndex = (0, import_react53.useMemo)(
8770
+ const xIndex = (0, import_react54.useMemo)(
8740
8771
  () => new Map(xValues.map((value, index) => [value, index])),
8741
8772
  [xValues]
8742
8773
  );
8743
8774
  const activeIndex = inspection === null ? void 0 : xIndex.get(inspection);
8744
8775
  const activeX = activeIndex === void 0 ? null : inspection;
8745
8776
  const reviewCursor = inspectable && cursor != null && Number.isFinite(cursor) && cursor >= xDomain.min && cursor <= xDomain.max ? cursor : null;
8746
- (0, import_react53.useEffect)(() => {
8777
+ (0, import_react54.useEffect)(() => {
8747
8778
  if (activeX === null || !inspectable) {
8748
8779
  setInspection(null);
8749
8780
  setPinned(false);
@@ -8751,7 +8782,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8751
8782
  if (!inspectable || xValues.length === 0) setInspectionFocused(false);
8752
8783
  }, [activeX, inspectable, xValues.length]);
8753
8784
  const inspectIndex = activeIndex ?? Math.max(0, xValues.length - 1);
8754
- const formatPosition = (0, import_react53.useCallback)(
8785
+ const formatPosition = (0, import_react54.useCallback)(
8755
8786
  (value) => valueWithUnit(formatX?.(value) ?? formatNumber(value), xUnit),
8756
8787
  [formatX, formatNumber, xUnit]
8757
8788
  );
@@ -8782,7 +8813,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8782
8813
  if (px < geometry.left || px > geometry.right) return;
8783
8814
  setInspection(xValues[nearestIndex(xValues, px, geometry.x)] ?? null);
8784
8815
  }
8785
- const changeRange = (0, import_react53.useCallback)(
8816
+ const changeRange = (0, import_react54.useCallback)(
8786
8817
  (next) => {
8787
8818
  if (disabled) return;
8788
8819
  if (!controlledRange) setLocalRange(next);
@@ -8803,7 +8834,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8803
8834
  const firstX = xValues[0];
8804
8835
  const lastX = xValues[xValues.length - 1];
8805
8836
  const windowEnds = empty ? null : variant === "heatmap" ? firstX === void 0 || lastX === void 0 ? null : [firstX, lastX] : [xDomain.min, xDomain.max];
8806
- const renderPosition = (0, import_react53.useCallback)(
8837
+ const renderPosition = (0, import_react54.useCallback)(
8807
8838
  (value) => histogramView ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NumberText, { value: formatNumber(value), unit }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NumberText, { value: formatX?.(value) ?? formatNumber(value), unit: xUnit }),
8808
8839
  [histogramView, unit, formatX, formatNumber, xUnit]
8809
8840
  );
@@ -8887,7 +8918,15 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
8887
8918
  onBlur: () => setInspectionFocused(false)
8888
8919
  }
8889
8920
  ),
8890
- empty ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "m-0 py-6u text-oprt-base text-oprt-text-dim", role: "status", children: empty }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
8921
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8922
+ "p",
8923
+ {
8924
+ role: "status",
8925
+ className: empty ? "m-0 py-6u text-oprt-base text-oprt-text-dim" : "sr-only",
8926
+ children: empty
8927
+ }
8928
+ ),
8929
+ empty ? null : /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
8891
8930
  "svg",
8892
8931
  {
8893
8932
  role: "img",
@@ -9105,7 +9144,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
9105
9144
  variant: "ghost",
9106
9145
  size: "sm",
9107
9146
  className: "min-w-0 max-w-full oprt-wrap-anywhere",
9108
- "aria-label": variant === "heatmap" ? `${seriesNumber.get(item.id)} ${item.label}` : item.label,
9147
+ "aria-label": `${variant === "heatmap" ? `${seriesNumber.get(item.id)} ${item.label}` : item.label}${hidden.has(item.id) ? " Hidden" : ""}`,
9109
9148
  "aria-pressed": !hidden.has(item.id),
9110
9149
  disabled,
9111
9150
  onClick: () => {
@@ -9210,7 +9249,7 @@ var Chart = (0, import_react53.forwardRef)((allProps, ref) => {
9210
9249
  Chart.displayName = "Chart";
9211
9250
 
9212
9251
  // src/Sparkline/Sparkline.tsx
9213
- var import_react54 = require("react");
9252
+ var import_react55 = require("react");
9214
9253
  var import_class_variance_authority23 = require("class-variance-authority");
9215
9254
  var import_clsx38 = __toESM(require("clsx"), 1);
9216
9255
 
@@ -9255,12 +9294,12 @@ var sparklineStyles = (0, import_class_variance_authority23.cva)("inline-block w
9255
9294
  variants: { variant: { line: "", area: "" } },
9256
9295
  defaultVariants: { variant: "line" }
9257
9296
  });
9258
- var Sparkline = (0, import_react54.forwardRef)((allProps, ref) => {
9297
+ var Sparkline = (0, import_react55.forwardRef)((allProps, ref) => {
9259
9298
  const { label, data, unit, seriesId, color, variant = "line", className, ...props } = allProps;
9260
9299
  if (process.env.NODE_ENV !== "production") {
9261
9300
  devValidate("Sparkline", SparklineManifest.Sparkline.props, { ...allProps });
9262
9301
  }
9263
- const id = (0, import_react54.useId)();
9302
+ const id = (0, import_react55.useId)();
9264
9303
  const points = data.map((y2, x2) => ({ x: x2, y: y2 }));
9265
9304
  const finite2 = points.filter(isFinitePoint);
9266
9305
  const x = scale(extent(points.map((point) => point.x)), 4, 124);
@@ -9368,7 +9407,7 @@ var Sparkline = (0, import_react54.forwardRef)((allProps, ref) => {
9368
9407
  Sparkline.displayName = "Sparkline";
9369
9408
 
9370
9409
  // src/DataGrid/DataGrid.tsx
9371
- var import_react55 = require("react");
9410
+ var import_react56 = require("react");
9372
9411
  var import_clsx39 = __toESM(require("clsx"), 1);
9373
9412
 
9374
9413
  // src/DataGrid/DataGrid.manifest.ts
@@ -9552,8 +9591,8 @@ function ColumnWidthInput({
9552
9591
  label,
9553
9592
  onCommit
9554
9593
  }) {
9555
- const [draft, setDraft] = (0, import_react55.useState)(null);
9556
- (0, import_react55.useEffect)(() => setDraft(null), [value]);
9594
+ const [draft, setDraft] = (0, import_react56.useState)(null);
9595
+ (0, import_react56.useEffect)(() => setDraft(null), [value]);
9557
9596
  const text = draft?.base === value ? draft.text : String(value);
9558
9597
  const commit = (requested) => {
9559
9598
  setDraft(null);
@@ -9594,7 +9633,7 @@ function withoutPage(selection, pageIds) {
9594
9633
  const onPage = new Set(pageIds);
9595
9634
  return selection.filter((id) => !onPage.has(id));
9596
9635
  }
9597
- var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9636
+ var DataGrid = (0, import_react56.forwardRef)((allProps, ref) => {
9598
9637
  const {
9599
9638
  columns,
9600
9639
  data,
@@ -9629,18 +9668,18 @@ var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9629
9668
  if (process.env.NODE_ENV !== "production") {
9630
9669
  devValidate("DataGrid", DataGridManifest.DataGrid.props, allProps);
9631
9670
  }
9632
- const [localSelection, setLocalSelection] = (0, import_react55.useState)([]);
9633
- const [localSort, setLocalSort] = (0, import_react55.useState)(null);
9634
- const [localPage, setLocalPage] = (0, import_react55.useState)(1);
9635
- const [hiddenColumns, setHiddenColumns] = (0, import_react55.useState)([]);
9636
- const [columnsOpen, setColumnsOpen] = (0, import_react55.useState)(false);
9637
- const [localWidths, setLocalWidths] = (0, import_react55.useState)({});
9638
- const [localPinned, setLocalPinned] = (0, import_react55.useState)([]);
9639
- const [localView, setLocalView] = (0, import_react55.useState)("virtualized");
9640
- const columnsId = (0, import_react55.useId)();
9671
+ const [localSelection, setLocalSelection] = (0, import_react56.useState)([]);
9672
+ const [localSort, setLocalSort] = (0, import_react56.useState)(null);
9673
+ const [localPage, setLocalPage] = (0, import_react56.useState)(1);
9674
+ const [hiddenColumns, setHiddenColumns] = (0, import_react56.useState)([]);
9675
+ const [columnsOpen, setColumnsOpen] = (0, import_react56.useState)(false);
9676
+ const [localWidths, setLocalWidths] = (0, import_react56.useState)({});
9677
+ const [localPinned, setLocalPinned] = (0, import_react56.useState)([]);
9678
+ const [localView, setLocalView] = (0, import_react56.useState)("virtualized");
9679
+ const columnsId = (0, import_react56.useId)();
9641
9680
  const blocked = disabled || loading;
9642
9681
  const selection = selectedRowIds ?? localSelection;
9643
- const selectionSet = (0, import_react55.useMemo)(() => new Set(selection), [selection]);
9682
+ const selectionSet = (0, import_react56.useMemo)(() => new Set(selection), [selection]);
9644
9683
  const selectionEnabled = selectedRowIds !== void 0 || Boolean(onSelectionChange);
9645
9684
  const effectiveSort = sort === void 0 ? localSort : sort;
9646
9685
  const visibleKeys = visibleColumnKeys ?? columns.filter((column) => !hiddenColumns.includes(column.key)).map((column) => column.key);
@@ -9680,8 +9719,8 @@ var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9680
9719
  pageCount,
9681
9720
  Math.max(1, Number.isFinite(requestedPage) ? Math.floor(requestedPage) : 1)
9682
9721
  );
9683
- const correction = (0, import_react55.useRef)(null);
9684
- (0, import_react55.useEffect)(() => {
9722
+ const correction = (0, import_react56.useRef)(null);
9723
+ (0, import_react56.useEffect)(() => {
9685
9724
  if (requestedPage === currentPage) {
9686
9725
  correction.current = null;
9687
9726
  return;
@@ -9713,7 +9752,7 @@ var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9713
9752
  const sortKey = sortColumn?.key;
9714
9753
  const sortCompare = sortColumn?.compare;
9715
9754
  const direction = effectiveSort?.direction;
9716
- const sorted = (0, import_react55.useMemo)(() => {
9755
+ const sorted = (0, import_react56.useMemo)(() => {
9717
9756
  if (mode !== "client" || sortKey === void 0 || direction === void 0) return data;
9718
9757
  return sortedOrder(
9719
9758
  data.map((row) => row[sortKey]),
@@ -9723,17 +9762,17 @@ var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9723
9762
  }, [data, mode, sortKey, direction, sortCompare]);
9724
9763
  const pageStart = (currentPage - 1) * safePageSize;
9725
9764
  const paged = mode === "client" && !virtual;
9726
- const pageRows = (0, import_react55.useMemo)(
9765
+ const pageRows = (0, import_react56.useMemo)(
9727
9766
  () => paged ? sorted.slice(pageStart, pageStart + safePageSize) : sorted,
9728
9767
  [sorted, paged, pageStart, safePageSize]
9729
9768
  );
9730
- const latestGetRowId = (0, import_react55.useRef)(getRowId);
9769
+ const latestGetRowId = (0, import_react56.useRef)(getRowId);
9731
9770
  latestGetRowId.current = getRowId;
9732
- const pageIdsOf = (0, import_react55.useMemo)(() => {
9771
+ const pageIdsOf = (0, import_react56.useMemo)(() => {
9733
9772
  let ids = null;
9734
9773
  return () => ids ??= pageRows.map((row) => latestGetRowId.current(row));
9735
9774
  }, [pageRows]);
9736
- const { allSelected, someSelected } = (0, import_react55.useMemo)(() => {
9775
+ const { allSelected, someSelected } = (0, import_react56.useMemo)(() => {
9737
9776
  if (selectionSet.size === 0) return { allSelected: false, someSelected: false };
9738
9777
  const pageIds = pageIdsOf();
9739
9778
  let selected = 0;
@@ -9979,7 +10018,7 @@ var DataGrid = (0, import_react55.forwardRef)((allProps, ref) => {
9979
10018
  DataGrid.displayName = "DataGrid";
9980
10019
 
9981
10020
  // src/ComboBox/ComboBox.tsx
9982
- var import_react56 = require("react");
10021
+ var import_react57 = require("react");
9983
10022
  var import_class_variance_authority24 = require("class-variance-authority");
9984
10023
  var import_clsx40 = __toESM(require("clsx"), 1);
9985
10024
  var import_react_aria_components19 = require("react-aria-components");
@@ -10105,7 +10144,7 @@ function reportUnknownValue(received, options) {
10105
10144
  )
10106
10145
  );
10107
10146
  }
10108
- var ComboBox = (0, import_react56.forwardRef)((props, ref) => {
10147
+ var ComboBox = (0, import_react57.forwardRef)((props, ref) => {
10109
10148
  const {
10110
10149
  motion = "auto",
10111
10150
  options,
@@ -10130,7 +10169,7 @@ var ComboBox = (0, import_react56.forwardRef)((props, ref) => {
10130
10169
  className
10131
10170
  } = props;
10132
10171
  const motionState = useMotion(motion);
10133
- const editing = (0, import_react56.useRef)(false);
10172
+ const editing = (0, import_react57.useRef)(false);
10134
10173
  const {
10135
10174
  id: inputId,
10136
10175
  labelledBy,
@@ -10264,7 +10303,7 @@ ComboBox.displayName = "ComboBox";
10264
10303
  var import_icons16 = require("@oprt/icons");
10265
10304
  var import_class_variance_authority25 = require("class-variance-authority");
10266
10305
  var import_clsx41 = __toESM(require("clsx"), 1);
10267
- var import_react57 = require("react");
10306
+ var import_react58 = require("react");
10268
10307
 
10269
10308
  // src/SplitPane/SplitPane.manifest.ts
10270
10309
  var SplitPaneManifest = {
@@ -10370,8 +10409,8 @@ var paneStyles = "min-w-0 min-h-0 overflow-auto focus-visible:outline-hidden foc
10370
10409
  var BUTTON_STEP = 10;
10371
10410
  var clamp = (value, min, max) => Math.min(max, Math.max(min, value));
10372
10411
  function usePaneScrolls(pane) {
10373
- const [scrolls, setScrolls] = (0, import_react57.useState)(false);
10374
- (0, import_react57.useEffect)(() => {
10412
+ const [scrolls, setScrolls] = (0, import_react58.useState)(false);
10413
+ (0, import_react58.useEffect)(() => {
10375
10414
  const node = pane.current;
10376
10415
  if (!node) return;
10377
10416
  const measure = () => setScrolls(
@@ -10407,7 +10446,7 @@ function usePaneScrolls(pane) {
10407
10446
  }, [pane]);
10408
10447
  return scrolls;
10409
10448
  }
10410
- var SplitPane = (0, import_react57.forwardRef)(
10449
+ var SplitPane = (0, import_react58.forwardRef)(
10411
10450
  ({
10412
10451
  primary,
10413
10452
  secondary,
@@ -10433,15 +10472,15 @@ var SplitPane = (0, import_react57.forwardRef)(
10433
10472
  }
10434
10473
  const vertical = orientation === "vertical";
10435
10474
  const axis = vertical ? "vertical" : "horizontal";
10436
- const rootRef = (0, import_react57.useRef)(null);
10437
- const primaryRef = (0, import_react57.useRef)(null);
10438
- const secondaryRef = (0, import_react57.useRef)(null);
10439
- const separatorRef = (0, import_react57.useRef)(null);
10475
+ const rootRef = (0, import_react58.useRef)(null);
10476
+ const primaryRef = (0, import_react58.useRef)(null);
10477
+ const secondaryRef = (0, import_react58.useRef)(null);
10478
+ const separatorRef = (0, import_react58.useRef)(null);
10440
10479
  const ownChild = (selector) => () => Array.from(rootRef.current?.children ?? []).find((child) => child.matches(selector))?.id;
10441
10480
  const primaryId = useHydratedId(ownChild('[data-pane="primary"]'));
10442
10481
  const helpId = useHydratedId(ownChild("[data-oprt-split-help]"));
10443
- const [internalSize, setInternalSize] = (0, import_react57.useState)(defaultSize);
10444
- const drag = (0, import_react57.useRef)(null);
10482
+ const [internalSize, setInternalSize] = (0, import_react58.useState)(defaultSize);
10483
+ const drag = (0, import_react58.useRef)(null);
10445
10484
  const lower = clamp(Number.isFinite(minSize) ? minSize : 20, 0, 100);
10446
10485
  const upper = clamp(Number.isFinite(maxSize) ? maxSize : 80, lower, 100);
10447
10486
  const rawSize = size ?? internalSize;
@@ -10450,7 +10489,7 @@ var SplitPane = (0, import_react57.forwardRef)(
10450
10489
  const buttonStep = Math.max(BUTTON_STEP, increment);
10451
10490
  const threshold = Number.isFinite(stackBelow) ? Math.max(0, stackBelow) : 640;
10452
10491
  const setRef2 = useMergedRefs(rootRef, forwardedRef);
10453
- const isNarrow = (0, import_react57.useCallback)((width) => width < threshold, [threshold]);
10492
+ const isNarrow = (0, import_react58.useCallback)((width) => width < threshold, [threshold]);
10454
10493
  const narrow = useElementWidth(rootRef, {
10455
10494
  initial: false,
10456
10495
  select: isNarrow
@@ -10462,7 +10501,7 @@ var SplitPane = (0, import_react57.forwardRef)(
10462
10501
  track: (element) => element.closest("[data-oprt-split-divider]")?.parentElement === rootRef.current ? true : null,
10463
10502
  findTarget: () => separatorRef.current?.isConnected ? separatorRef.current : primaryRef.current
10464
10503
  });
10465
- (0, import_react57.useEffect)(() => {
10504
+ (0, import_react58.useEffect)(() => {
10466
10505
  drag.current = null;
10467
10506
  }, [disabled, stacked, orientation]);
10468
10507
  const resize = (next) => {
@@ -10642,7 +10681,7 @@ SplitPane.displayName = "SplitPane";
10642
10681
  // src/TimeRange/TimeRange.tsx
10643
10682
  var import_class_variance_authority26 = require("class-variance-authority");
10644
10683
  var import_clsx42 = __toESM(require("clsx"), 1);
10645
- var import_react58 = require("react");
10684
+ var import_react59 = require("react");
10646
10685
 
10647
10686
  // src/_internal/timestamp.ts
10648
10687
  var MAX_TIME = 864e13;
@@ -10712,7 +10751,7 @@ function describeRange(start, end) {
10712
10751
  const sameDay = from.slice(0, 10) === to.slice(0, 10);
10713
10752
  return `${from} to ${sameDay ? to.slice(11) : to}`;
10714
10753
  }
10715
- var TimeRange = (0, import_react58.forwardRef)(
10754
+ var TimeRange = (0, import_react59.forwardRef)(
10716
10755
  ({
10717
10756
  value,
10718
10757
  onValueChange,
@@ -10725,7 +10764,7 @@ var TimeRange = (0, import_react58.forwardRef)(
10725
10764
  className,
10726
10765
  ...props
10727
10766
  }, ref) => {
10728
- const root = (0, import_react58.useRef)(null);
10767
+ const root = (0, import_react59.useRef)(null);
10729
10768
  const setRoot = useMergedRefs(root, ref);
10730
10769
  const ids = usePartIds(
10731
10770
  ["start-date", "start-time", "end-date", "end-time", "error", "range", "status"],
@@ -10733,15 +10772,15 @@ var TimeRange = (0, import_react58.forwardRef)(
10733
10772
  );
10734
10773
  const base = `${value.start}|${value.end}`;
10735
10774
  const applied = draftOf(value);
10736
- const [draft, setDraft] = (0, import_react58.useState)(() => ({ base, ...applied }));
10775
+ const [draft, setDraft] = (0, import_react59.useState)(() => ({ base, ...applied }));
10737
10776
  const current = draft.base === base ? draft : applied;
10738
10777
  const parsed = { start: parseEndpoint(current.start), end: parseEndpoint(current.end) };
10739
10778
  const error = validate(parsed, min, max);
10740
10779
  const pending = !(unchanged(current.start, parsed.start, applied.start, value.start) && unchanged(current.end, parsed.end, applied.end, value.end));
10741
10780
  const valid = !error && !pending;
10742
- const callback = (0, import_react58.useRef)(onDraftValidityChange);
10781
+ const callback = (0, import_react59.useRef)(onDraftValidityChange);
10743
10782
  callback.current = onDraftValidityChange;
10744
- (0, import_react58.useEffect)(() => callback.current?.(valid, { pending }), [valid, pending]);
10783
+ (0, import_react59.useEffect)(() => callback.current?.(valid, { pending }), [valid, pending]);
10745
10784
  const readout = Number.isNaN(parsed.start) || Number.isNaN(parsed.end) ? null : describeRange(parsed.start, parsed.end);
10746
10785
  const unapplied = !error && pending;
10747
10786
  const edit = (part, field, next) => setDraft({ ...current, base, [part]: { ...current[part], [field]: next } });
@@ -10887,7 +10926,7 @@ var TimeRangeManifest = {
10887
10926
  // src/EventTimeline/EventTimeline.tsx
10888
10927
  var import_class_variance_authority27 = require("class-variance-authority");
10889
10928
  var import_clsx43 = __toESM(require("clsx"), 1);
10890
- var import_react59 = require("react");
10929
+ var import_react60 = require("react");
10891
10930
  var import_jsx_runtime45 = require("react/jsx-runtime");
10892
10931
  var timelineStyles = (0, import_class_variance_authority27.cva)("flex min-w-0 flex-col gap-2u font-sans text-oprt-text");
10893
10932
  var markStyles = (0, import_class_variance_authority27.cva)("fill-current", {
@@ -10907,7 +10946,7 @@ var eventValid = (event) => isValidTimestamp(event.start) && (event.end === void
10907
10946
  var laneOf = (event) => event.lane || "Events";
10908
10947
  var DEFAULT_WIDTH = 1e3;
10909
10948
  var MIN_WIDTH = 16;
10910
- var Marker2 = (0, import_react59.memo)(function Marker3({ id, severity, x, width, selected }) {
10949
+ var Marker2 = (0, import_react60.memo)(function Marker3({ id, severity, x, width, selected }) {
10911
10950
  const classes = (0, import_clsx43.default)(
10912
10951
  markStyles({ severity: severity ?? "neutral" }),
10913
10952
  selected && "stroke-oprt-text"
@@ -10933,7 +10972,7 @@ var Marker2 = (0, import_react59.memo)(function Marker3({ id, severity, x, width
10933
10972
  }
10934
10973
  );
10935
10974
  });
10936
- var TimelineRow = (0, import_react59.memo)(function TimelineRow2({
10975
+ var TimelineRow = (0, import_react60.memo)(function TimelineRow2({
10937
10976
  event,
10938
10977
  selected,
10939
10978
  selectable,
@@ -10987,7 +11026,7 @@ var TimelineRow = (0, import_react59.memo)(function TimelineRow2({
10987
11026
  }
10988
11027
  );
10989
11028
  });
10990
- var EventTimeline = (0, import_react59.forwardRef)(
11029
+ var EventTimeline = (0, import_react60.forwardRef)(
10991
11030
  ({
10992
11031
  events,
10993
11032
  start,
@@ -11000,21 +11039,21 @@ var EventTimeline = (0, import_react59.forwardRef)(
11000
11039
  className,
11001
11040
  ...props
11002
11041
  }, forwardedRef) => {
11003
- const id = (0, import_react59.useId)();
11004
- const rootRef = (0, import_react59.useRef)(null);
11042
+ const id = (0, import_react60.useId)();
11043
+ const rootRef = (0, import_react60.useRef)(null);
11005
11044
  const setRef2 = useMergedRefs(rootRef, forwardedRef);
11006
11045
  const observed = useElementWidth(rootRef, {
11007
11046
  initial: null,
11008
11047
  min: MIN_WIDTH
11009
11048
  });
11010
- const [firstWidth, setFirstWidth] = (0, import_react59.useState)(null);
11049
+ const [firstWidth, setFirstWidth] = (0, import_react60.useState)(null);
11011
11050
  useIsomorphicLayoutEffect(() => {
11012
11051
  const width = rootRef.current?.getBoundingClientRect().width;
11013
11052
  if (width !== void 0 && Number.isFinite(width) && width > MIN_WIDTH) setFirstWidth(width);
11014
11053
  }, []);
11015
11054
  const plotWidth = observed ?? firstWidth ?? DEFAULT_WIDTH;
11016
11055
  const validRange = isValidTimestamp(start) && isValidTimestamp(end) && start < end;
11017
- const { visible, omitted, lanes } = (0, import_react59.useMemo)(() => {
11056
+ const { visible, omitted, lanes } = (0, import_react60.useMemo)(() => {
11018
11057
  const validEvents = events.filter(eventValid);
11019
11058
  const inWindow = validRange ? validEvents.filter((event) => event.start <= end && (event.end ?? event.start) >= start).sort((a, b) => a.start - b.start) : [];
11020
11059
  const byLane = /* @__PURE__ */ new Map();
@@ -11026,11 +11065,11 @@ var EventTimeline = (0, import_react59.forwardRef)(
11026
11065
  }
11027
11066
  return { visible: inWindow, omitted: events.length - validEvents.length, lanes: byLane };
11028
11067
  }, [events, start, end, validRange]);
11029
- const selectionRef = (0, import_react59.useRef)(onSelectionChange);
11068
+ const selectionRef = (0, import_react60.useRef)(onSelectionChange);
11030
11069
  useIsomorphicLayoutEffect(() => {
11031
11070
  selectionRef.current = onSelectionChange;
11032
11071
  });
11033
- const select = (0, import_react59.useCallback)((eventId) => selectionRef.current?.(eventId), []);
11072
+ const select = (0, import_react60.useCallback)((eventId) => selectionRef.current?.(eventId), []);
11034
11073
  const extent2 = plotWidth - 16;
11035
11074
  const position = (time) => 8 + Math.max(0, Math.min(extent2, (time - start) / (end - start) * extent2));
11036
11075
  return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
@@ -11042,7 +11081,15 @@ var EventTimeline = (0, import_react59.forwardRef)(
11042
11081
  "aria-label": label,
11043
11082
  className: (0, import_clsx43.default)(timelineStyles(), className),
11044
11083
  children: [
11045
- !validRange ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { role: "status", className: "m-0 text-oprt-base text-oprt-text-dim", children: "Choose a valid time range with start before end." }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
11084
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
11085
+ "p",
11086
+ {
11087
+ role: "status",
11088
+ className: !validRange ? "m-0 text-oprt-base text-oprt-text-dim" : "sr-only",
11089
+ children: !validRange ? "Choose a valid time range with start before end." : ""
11090
+ }
11091
+ ),
11092
+ !validRange ? null : /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
11046
11093
  /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex flex-wrap justify-between gap-1u font-mono text-oprt-base text-oprt-text-dim", children: [
11047
11094
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("time", { dateTime: new Date(start).toISOString(), children: utc(start) }),
11048
11095
  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("time", { dateTime: new Date(end).toISOString(), children: utc(end) })
@@ -11171,7 +11218,7 @@ var EventTimelineManifest = {
11171
11218
  };
11172
11219
 
11173
11220
  // src/AppShell/AppShell.tsx
11174
- var import_react60 = require("react");
11221
+ var import_react61 = require("react");
11175
11222
  var import_class_variance_authority28 = require("class-variance-authority");
11176
11223
  var import_clsx44 = __toESM(require("clsx"), 1);
11177
11224
 
@@ -11254,7 +11301,7 @@ var connectionVariants = {
11254
11301
  function connectionVariant(connection) {
11255
11302
  return Object.prototype.hasOwnProperty.call(connectionVariants, connection) ? connectionVariants[connection] : "neutral";
11256
11303
  }
11257
- var AppShell = (0, import_react60.forwardRef)(
11304
+ var AppShell = (0, import_react61.forwardRef)(
11258
11305
  ({
11259
11306
  title = "Workspace",
11260
11307
  identity,
@@ -11269,7 +11316,7 @@ var AppShell = (0, import_react60.forwardRef)(
11269
11316
  className,
11270
11317
  ...props
11271
11318
  }, ref) => {
11272
- const id = (0, import_react60.useId)();
11319
+ const id = (0, import_react61.useId)();
11273
11320
  if (process.env.NODE_ENV !== "production") {
11274
11321
  devValidate("AppShell", AppShellManifest.AppShell.props, { mode, connection });
11275
11322
  }
@@ -11331,14 +11378,14 @@ var AppShell = (0, import_react60.forwardRef)(
11331
11378
  AppShell.displayName = "AppShell";
11332
11379
 
11333
11380
  // src/Inspector/Inspector.tsx
11334
- var import_react61 = require("react");
11381
+ var import_react62 = require("react");
11335
11382
  var import_class_variance_authority29 = require("class-variance-authority");
11336
11383
  var import_clsx45 = __toESM(require("clsx"), 1);
11337
11384
  var import_jsx_runtime47 = require("react/jsx-runtime");
11338
11385
  var inspectorStyles = (0, import_class_variance_authority29.cva)(
11339
11386
  "flex min-w-0 flex-col gap-2u break-words border border-oprt-border bg-oprt-surface-1 p-2u font-sans text-oprt-base normal-case text-oprt-text"
11340
11387
  );
11341
- var Inspector = (0, import_react61.forwardRef)(
11388
+ var Inspector = (0, import_react62.forwardRef)(
11342
11389
  ({
11343
11390
  open = true,
11344
11391
  title,
@@ -11350,7 +11397,7 @@ var Inspector = (0, import_react61.forwardRef)(
11350
11397
  "aria-describedby": describedBy,
11351
11398
  ...props
11352
11399
  }, ref) => {
11353
- const root = (0, import_react61.useRef)(null);
11400
+ const root = (0, import_react62.useRef)(null);
11354
11401
  const setRef2 = useMergedRefs(root, ref);
11355
11402
  const ids = usePartIds(["title", "description"], {
11356
11403
  readRendered: () => root.current?.getAttribute("data-oprt-ids")
@@ -11420,7 +11467,7 @@ var InspectorManifest = {
11420
11467
  };
11421
11468
 
11422
11469
  // src/TreeView/TreeView.tsx
11423
- var import_react62 = require("react");
11470
+ var import_react63 = require("react");
11424
11471
  var import_react_aria_components20 = require("react-aria-components");
11425
11472
  var import_icons17 = require("@oprt/icons");
11426
11473
  var import_class_variance_authority30 = require("class-variance-authority");
@@ -11449,7 +11496,7 @@ function aimAtLabel(tree, row) {
11449
11496
  row.style.scrollMarginLeft = `${Math.min(0, box.left - left)}px`;
11450
11497
  row.style.scrollMarginRight = `${Math.min(0, right - box.right)}px`;
11451
11498
  }
11452
- var TreeView = (0, import_react62.forwardRef)(
11499
+ var TreeView = (0, import_react63.forwardRef)(
11453
11500
  ({
11454
11501
  items,
11455
11502
  label = "Navigation",
@@ -11463,12 +11510,12 @@ var TreeView = (0, import_react62.forwardRef)(
11463
11510
  className,
11464
11511
  ...attributes
11465
11512
  }, ref) => {
11466
- const [localSelection, setLocalSelection] = (0, import_react62.useState)(null);
11467
- const [localExpanded, setLocalExpanded] = (0, import_react62.useState)(defaultExpandedIds);
11513
+ const [localSelection, setLocalSelection] = (0, import_react63.useState)(null);
11514
+ const [localExpanded, setLocalExpanded] = (0, import_react63.useState)(defaultExpandedIds);
11468
11515
  const selection = selectedId === void 0 ? localSelection : selectedId;
11469
- const treeRef = (0, import_react62.useRef)(null);
11516
+ const treeRef = (0, import_react63.useRef)(null);
11470
11517
  const setRef2 = useMergedRefs(treeRef, ref);
11471
- (0, import_react62.useEffect)(() => {
11518
+ (0, import_react63.useEffect)(() => {
11472
11519
  const tree = treeRef.current;
11473
11520
  if (!tree) return;
11474
11521
  const aim = (event) => {
@@ -11593,14 +11640,14 @@ var TreeViewManifest = {
11593
11640
  };
11594
11641
 
11595
11642
  // src/OperationalStatus/OperationalStatus.tsx
11596
- var import_react64 = require("react");
11643
+ var import_react65 = require("react");
11597
11644
  var import_class_variance_authority32 = require("class-variance-authority");
11598
11645
  var import_clsx48 = __toESM(require("clsx"), 1);
11599
11646
 
11600
11647
  // src/DescriptionList/DescriptionList.tsx
11601
11648
  var import_class_variance_authority31 = require("class-variance-authority");
11602
11649
  var import_clsx47 = __toESM(require("clsx"), 1);
11603
- var import_react63 = require("react");
11650
+ var import_react64 = require("react");
11604
11651
 
11605
11652
  // src/DescriptionList/DescriptionList.manifest.ts
11606
11653
  var DescriptionListManifest = {
@@ -11681,13 +11728,13 @@ var valueStyles2 = (0, import_class_variance_authority31.cva)(
11681
11728
  }
11682
11729
  );
11683
11730
  var isMissing = (value) => value === null || value === void 0 || value === "";
11684
- var DescriptionList = (0, import_react63.forwardRef)(
11731
+ var DescriptionList = (0, import_react64.forwardRef)(
11685
11732
  ({ items, layout = "stacked", className, ...props }, ref) => {
11686
11733
  if (process.env.NODE_ENV !== "production") {
11687
11734
  devValidate("DescriptionList", DescriptionListManifest.DescriptionList.props, { layout });
11688
11735
  }
11689
- const reported3 = (0, import_react63.useRef)(/* @__PURE__ */ new Set());
11690
- (0, import_react63.useEffect)(() => {
11736
+ const reported3 = (0, import_react64.useRef)(/* @__PURE__ */ new Set());
11737
+ (0, import_react64.useEffect)(() => {
11691
11738
  if (process.env.NODE_ENV === "production") return;
11692
11739
  const fresh = items.filter(({ id, value }) => isMissing(value) && !reported3.current.has(id)).map(({ id }) => id);
11693
11740
  if (fresh.length === 0) return;
@@ -11772,10 +11819,10 @@ var variants = {
11772
11819
  unavailable: "error",
11773
11820
  unknown: "neutral"
11774
11821
  };
11775
- var OperationalStatus = (0, import_react64.forwardRef)(
11822
+ var OperationalStatus = (0, import_react65.forwardRef)(
11776
11823
  (allProps, ref) => {
11777
11824
  const { state = "unknown", source, updatedAt, detail, className, ...props } = allProps;
11778
- const qualityId = `${(0, import_react64.useId)()}-quality`;
11825
+ const qualityId = `${(0, import_react65.useId)()}-quality`;
11779
11826
  if (process.env.NODE_ENV !== "production") {
11780
11827
  devValidate("OperationalStatus", OperationalStatusManifest.OperationalStatus.props, {
11781
11828
  ...allProps
@@ -11838,15 +11885,15 @@ var OperationalStatus = (0, import_react64.forwardRef)(
11838
11885
  OperationalStatus.displayName = "OperationalStatus";
11839
11886
 
11840
11887
  // src/ActionStatus/ActionStatus.tsx
11841
- var import_react66 = require("react");
11888
+ var import_react67 = require("react");
11842
11889
  var import_class_variance_authority33 = require("class-variance-authority");
11843
11890
  var import_clsx49 = __toESM(require("clsx"), 1);
11844
11891
 
11845
11892
  // src/_internal/useActionFocus.ts
11846
- var import_react65 = require("react");
11893
+ var import_react66 = require("react");
11847
11894
  function useActionFocus(ref, { onFocusCapture, onBlurCapture } = {}) {
11848
- const root = (0, import_react65.useRef)(null);
11849
- (0, import_react65.useImperativeHandle)(ref, () => root.current, []);
11895
+ const root = (0, import_react66.useRef)(null);
11896
+ (0, import_react66.useImperativeHandle)(ref, () => root.current, []);
11850
11897
  const restore = useRestoreFocusOnRemoval(root);
11851
11898
  return {
11852
11899
  ref: root,
@@ -11949,6 +11996,8 @@ function ActionStatusLine({
11949
11996
  requestId,
11950
11997
  children
11951
11998
  }) {
11999
+ const spoken = [`${label}, ${state}.`, requestId && `Request: ${requestId}.`, message].filter(Boolean).join(" ");
12000
+ const holdBack = useHoldBackNewText(true);
11952
12001
  return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
11953
12002
  "div",
11954
12003
  {
@@ -11957,19 +12006,27 @@ function ActionStatusLine({
11957
12006
  "aria-atomic": "true",
11958
12007
  className: "flex min-w-0 flex-col gap-1u",
11959
12008
  children: [
11960
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "min-w-0 oprt-wrap-anywhere font-medium uppercase tracking-oprt-caps", children: label }),
11961
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Badge, { variant: variants2[state], indicator: "dot", children: state }) }),
11962
- requestId && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "min-w-0 oprt-wrap-anywhere font-mono", children: [
12009
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "sr-only", children: holdBack ? null : spoken }),
12010
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
12011
+ "span",
12012
+ {
12013
+ "aria-hidden": "true",
12014
+ className: "min-w-0 oprt-wrap-anywhere font-medium uppercase tracking-oprt-caps",
12015
+ children: label
12016
+ }
12017
+ ),
12018
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Badge, { variant: variants2[state], indicator: "dot", children: state }) }),
12019
+ requestId && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { "aria-hidden": "true", className: "min-w-0 oprt-wrap-anywhere font-mono", children: [
11963
12020
  "Request: ",
11964
12021
  requestId
11965
12022
  ] }),
11966
- message && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "m-0 min-w-0 oprt-wrap-anywhere", children: message }),
12023
+ message && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { "aria-hidden": "true", className: "m-0 min-w-0 oprt-wrap-anywhere", children: message }),
11967
12024
  children
11968
12025
  ]
11969
12026
  }
11970
12027
  );
11971
12028
  }
11972
- var ActionStatus = (0, import_react66.forwardRef)((allProps, ref) => {
12029
+ var ActionStatus = (0, import_react67.forwardRef)((allProps, ref) => {
11973
12030
  const {
11974
12031
  state,
11975
12032
  label,
@@ -12015,7 +12072,7 @@ var ActionStatus = (0, import_react66.forwardRef)((allProps, ref) => {
12015
12072
  ActionStatus.displayName = "ActionStatus";
12016
12073
 
12017
12074
  // src/MultiSelect/MultiSelect.tsx
12018
- var import_react67 = require("react");
12075
+ var import_react68 = require("react");
12019
12076
  var import_class_variance_authority34 = require("class-variance-authority");
12020
12077
  var import_clsx50 = __toESM(require("clsx"), 1);
12021
12078
  var import_icons18 = require("@oprt/icons");
@@ -12024,7 +12081,7 @@ var styles = (0, import_class_variance_authority34.cva)("m-0 min-w-0 border p-2u
12024
12081
  variants: { invalid: { true: "border-oprt-error", false: "border-oprt-border" } },
12025
12082
  defaultVariants: { invalid: false }
12026
12083
  });
12027
- var MultiSelect = (0, import_react67.forwardRef)(
12084
+ var MultiSelect = (0, import_react68.forwardRef)(
12028
12085
  ({
12029
12086
  label,
12030
12087
  options,
@@ -12039,12 +12096,12 @@ var MultiSelect = (0, import_react67.forwardRef)(
12039
12096
  "aria-describedby": describedBy,
12040
12097
  ...props
12041
12098
  }, ref) => {
12042
- const fieldset = (0, import_react67.useRef)(null);
12099
+ const fieldset = (0, import_react68.useRef)(null);
12043
12100
  const fieldsetRef = useMergedRefs(fieldset, ref);
12044
12101
  const ids = usePartIds(["description", "error"], {
12045
12102
  readRendered: () => fieldset.current?.getAttribute("data-oprt-ids")
12046
12103
  });
12047
- const [local, setLocal] = (0, import_react67.useState)(defaultValue);
12104
+ const [local, setLocal] = (0, import_react68.useState)(defaultValue);
12048
12105
  const selected = value ?? local;
12049
12106
  const descriptions = joinIds(describedBy, description && ids.description, error && ids.error);
12050
12107
  return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
@@ -12171,7 +12228,7 @@ var MultiSelectManifest = {
12171
12228
  };
12172
12229
 
12173
12230
  // src/NumberInput/NumberInput.tsx
12174
- var import_react68 = require("react");
12231
+ var import_react69 = require("react");
12175
12232
  var import_class_variance_authority35 = require("class-variance-authority");
12176
12233
  var import_clsx51 = __toESM(require("clsx"), 1);
12177
12234
 
@@ -12277,7 +12334,7 @@ function validate2(text, unit, min, max, step, required) {
12277
12334
  function plainDecimal(value) {
12278
12335
  return value.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
12279
12336
  }
12280
- var NumberInput = (0, import_react68.forwardRef)((allProps, ref) => {
12337
+ var NumberInput = (0, import_react69.forwardRef)((allProps, ref) => {
12281
12338
  const {
12282
12339
  label,
12283
12340
  unit,
@@ -12304,22 +12361,22 @@ var NumberInput = (0, import_react68.forwardRef)((allProps, ref) => {
12304
12361
  if (process.env.NODE_ENV !== "production") {
12305
12362
  devValidate("NumberInput", NumberInputManifest.NumberInput.props, { ...allProps });
12306
12363
  }
12307
- const labelRef = (0, import_react68.useRef)(null);
12364
+ const labelRef = (0, import_react69.useRef)(null);
12308
12365
  const ids = usePartIds(["unit", "description", "error", "unknown"], {
12309
12366
  id,
12310
12367
  readRendered: () => labelRef.current?.htmlFor
12311
12368
  });
12312
12369
  const inputId = ids.base;
12313
- const inputRef = (0, import_react68.useRef)(null);
12370
+ const inputRef = (0, import_react69.useRef)(null);
12314
12371
  const mergedRef = useMergedRefs(inputRef, ref);
12315
- const [local, setLocal] = (0, import_react68.useState)(defaultValue);
12372
+ const [local, setLocal] = (0, import_react69.useState)(defaultValue);
12316
12373
  const numeric = value === void 0 ? local : value;
12317
- const [draft, setDraft] = (0, import_react68.useState)(null);
12374
+ const [draft, setDraft] = (0, import_react69.useState)(null);
12318
12375
  const text = draft && Object.is(draft.base, numeric) ? draft.text : numeric === null ? "" : String(numeric);
12319
12376
  const validation = error || validate2(text, unit, min, max, step, required);
12320
- const validationRef = (0, import_react68.useRef)(onValidationChange);
12377
+ const validationRef = (0, import_react69.useRef)(onValidationChange);
12321
12378
  validationRef.current = onValidationChange;
12322
- (0, import_react68.useEffect)(() => {
12379
+ (0, import_react69.useEffect)(() => {
12323
12380
  inputRef.current?.setCustomValidity(validation ?? "");
12324
12381
  validationRef.current?.(validation ?? null);
12325
12382
  }, [validation]);
@@ -12428,11 +12485,11 @@ var NumberInput = (0, import_react68.forwardRef)((allProps, ref) => {
12428
12485
  NumberInput.displayName = "NumberInput";
12429
12486
 
12430
12487
  // src/CoordinateInput/CoordinateInput.tsx
12431
- var import_react69 = require("react");
12488
+ var import_react70 = require("react");
12432
12489
  var import_clsx52 = __toESM(require("clsx"), 1);
12433
12490
  var import_jsx_runtime54 = require("react/jsx-runtime");
12434
12491
  var unknown = { latitude: null, longitude: null };
12435
- var CoordinateInput = (0, import_react69.forwardRef)(
12492
+ var CoordinateInput = (0, import_react70.forwardRef)(
12436
12493
  ({
12437
12494
  label = "Coordinates",
12438
12495
  value,
@@ -12448,18 +12505,18 @@ var CoordinateInput = (0, import_react69.forwardRef)(
12448
12505
  "aria-describedby": describedBy,
12449
12506
  ...props
12450
12507
  }, ref) => {
12451
- const fieldset = (0, import_react69.useRef)(null);
12508
+ const fieldset = (0, import_react70.useRef)(null);
12452
12509
  const fieldsetRef = useMergedRefs(fieldset, ref);
12453
12510
  const ids = usePartIds(["status", "description", "error"], {
12454
12511
  readRendered: () => fieldset.current?.getAttribute("data-oprt-ids")
12455
12512
  });
12456
- const [local, setLocal] = (0, import_react69.useState)(defaultValue);
12457
- const [invalidAxes, setInvalidAxes] = (0, import_react69.useState)({ latitude: false, longitude: false });
12513
+ const [local, setLocal] = (0, import_react70.useState)(defaultValue);
12514
+ const [invalidAxes, setInvalidAxes] = (0, import_react70.useState)({ latitude: false, longitude: false });
12458
12515
  const position = value ?? local;
12459
12516
  const invalid = Boolean(error) || invalidAxes.latitude || invalidAxes.longitude || position.latitude !== null && (!Number.isFinite(position.latitude) || Math.abs(position.latitude) > 90) || position.longitude !== null && (!Number.isFinite(position.longitude) || Math.abs(position.longitude) > 180);
12460
- const validationRef = (0, import_react69.useRef)(onValidationChange);
12517
+ const validationRef = (0, import_react70.useRef)(onValidationChange);
12461
12518
  validationRef.current = onValidationChange;
12462
- (0, import_react69.useEffect)(() => {
12519
+ (0, import_react70.useEffect)(() => {
12463
12520
  validationRef.current?.(invalid);
12464
12521
  }, [invalid]);
12465
12522
  const status = invalid ? "Position invalid" : position.latitude === null || position.longitude === null ? "Position unknown" : "Decimal degrees";
@@ -12598,7 +12655,7 @@ var CoordinateInputManifest = {
12598
12655
  // src/Link/Link.tsx
12599
12656
  var import_class_variance_authority36 = require("class-variance-authority");
12600
12657
  var import_clsx53 = __toESM(require("clsx"), 1);
12601
- var import_react70 = require("react");
12658
+ var import_react71 = require("react");
12602
12659
  var import_jsx_runtime55 = require("react/jsx-runtime");
12603
12660
  var linkStyles = (0, import_class_variance_authority36.cva)(
12604
12661
  "min-h-oprt-sm min-w-oprt-sm border border-transparent py-[calc((var(--oprt-height-sm)-2px-var(--oprt-line-base))/2)] box-decoration-clone font-sans text-oprt-base font-medium text-oprt-accent underline underline-offset-2 oprt-wrap-anywhere [&_svg]:inline-block hover:text-oprt-accent-hover aria-disabled:text-[color:inherit] aria-disabled:hover:text-[color:inherit] aria-disabled:no-underline aria-disabled:cursor-default focus-visible:outline-hidden focus-visible:border-oprt-border-focus focus-visible:shadow-oprt-focus forced-colors:focus-visible:outline-solid forced-colors:focus-visible:outline-2 forced-colors:focus-visible:outline-[CanvasText]",
@@ -12611,11 +12668,11 @@ var linkStyles = (0, import_class_variance_authority36.cva)(
12611
12668
  }
12612
12669
  );
12613
12670
  function isIconOnly(children) {
12614
- const parts = import_react70.Children.toArray(children).filter(
12671
+ const parts = import_react71.Children.toArray(children).filter(
12615
12672
  (part) => !(typeof part === "string" && part.trim() === "")
12616
12673
  );
12617
12674
  const [only] = parts;
12618
- if (parts.length !== 1 || !(0, import_react70.isValidElement)(only)) return false;
12675
+ if (parts.length !== 1 || !(0, import_react71.isValidElement)(only)) return false;
12619
12676
  const hidden = only.props["aria-hidden"];
12620
12677
  return only.type === "svg" || hidden === true || hidden === "true" || typeof only.type !== "string" && only.props.children == null;
12621
12678
  }
@@ -12652,7 +12709,7 @@ function reportUnsafeHref(destination) {
12652
12709
  )
12653
12710
  );
12654
12711
  }
12655
- var Link = (0, import_react70.forwardRef)(
12712
+ var Link = (0, import_react71.forwardRef)(
12656
12713
  ({ className, href, children, ...props }, ref) => {
12657
12714
  const safe = typeof href !== "string" || isSafeHref(href, props.download !== void 0 && props.download !== false);
12658
12715
  if (!safe) reportUnsafeHref(href);
@@ -12706,7 +12763,7 @@ var LinkManifest = {
12706
12763
  };
12707
12764
 
12708
12765
  // src/CopyButton/CopyButton.tsx
12709
- var import_react72 = require("react");
12766
+ var import_react73 = require("react");
12710
12767
  var import_class_variance_authority37 = require("class-variance-authority");
12711
12768
  var import_icons19 = require("@oprt/icons");
12712
12769
 
@@ -12723,7 +12780,7 @@ var CopyButtonManifest = {
12723
12780
  label: {
12724
12781
  type: "string",
12725
12782
  required: true,
12726
- description: 'Accessible action name identifying the value. Feedback reads this label, then the outcome: "Copy equipment ID: copied".'
12783
+ description: 'Accessible action name identifying the value. It must contain "Copy", the word the button shows. Feedback reads this label, then the outcome: "Copy equipment ID: copied".'
12727
12784
  },
12728
12785
  size: { type: "enum", values: ["sm", "md", "lg"], default: "md" },
12729
12786
  disabled: { type: "boolean", default: false },
@@ -12744,16 +12801,16 @@ var CopyButtonManifest = {
12744
12801
  };
12745
12802
 
12746
12803
  // src/_internal/useIsMounted.ts
12747
- var import_react71 = require("react");
12804
+ var import_react72 = require("react");
12748
12805
  function useIsMounted() {
12749
- const mounted = (0, import_react71.useRef)(false);
12806
+ const mounted = (0, import_react72.useRef)(false);
12750
12807
  useIsomorphicLayoutEffect(() => {
12751
12808
  mounted.current = true;
12752
12809
  return () => {
12753
12810
  mounted.current = false;
12754
12811
  };
12755
12812
  }, []);
12756
- return (0, import_react71.useCallback)(() => mounted.current, []);
12813
+ return (0, import_react72.useCallback)(() => mounted.current, []);
12757
12814
  }
12758
12815
 
12759
12816
  // src/CopyButton/CopyButton.tsx
@@ -12769,13 +12826,32 @@ var feedbackStyles = (0, import_class_variance_authority37.cva)("min-w-0 break-w
12769
12826
  }
12770
12827
  }
12771
12828
  });
12772
- var CopyButton = (0, import_react72.forwardRef)((allProps, ref) => {
12829
+ var reportedLabels = /* @__PURE__ */ new Set();
12830
+ function reportLabelWithoutVisibleText(label) {
12831
+ if (process.env.NODE_ENV === "production" || reportedLabels.has(label)) return;
12832
+ reportedLabels.add(label);
12833
+ console.error(
12834
+ JSON.stringify(
12835
+ {
12836
+ component: "CopyButton",
12837
+ error: "LABEL_OMITS_VISIBLE_TEXT",
12838
+ prop: "label",
12839
+ received: label,
12840
+ suggestion: 'The button shows the word "Copy", so its label must contain it (WCAG 2.5.3, Label in Name). Start the label with it: "Copy equipment ID".'
12841
+ },
12842
+ null,
12843
+ 2
12844
+ )
12845
+ );
12846
+ }
12847
+ var CopyButton = (0, import_react73.forwardRef)((allProps, ref) => {
12773
12848
  const { value, label, onCopy, onCopyError, disabled = false, size = "md", className } = allProps;
12774
- const [pending, setPending] = (0, import_react72.useState)(false);
12775
- const [feedback, setFeedback] = (0, import_react72.useState)(null);
12776
- const pendingRef = (0, import_react72.useRef)(false);
12849
+ const [pending, setPending] = (0, import_react73.useState)(false);
12850
+ if (!/copy/i.test(label)) reportLabelWithoutVisibleText(label);
12851
+ const [feedback, setFeedback] = (0, import_react73.useState)(null);
12852
+ const pendingRef = (0, import_react73.useRef)(false);
12777
12853
  const isMounted = useIsMounted();
12778
- const context = (0, import_react72.useRef)({ value, label, revision: 0 });
12854
+ const context = (0, import_react73.useRef)({ value, label, revision: 0 });
12779
12855
  if (process.env.NODE_ENV !== "production") {
12780
12856
  devValidate("CopyButton", CopyButtonManifest.CopyButton.props, { ...allProps });
12781
12857
  }
@@ -12856,7 +12932,7 @@ CopyButton.displayName = "CopyButton";
12856
12932
 
12857
12933
  // src/Popover/Popover.tsx
12858
12934
  var import_react_aria_components21 = require("react-aria-components");
12859
- var import_react73 = require("react");
12935
+ var import_react74 = require("react");
12860
12936
  var import_class_variance_authority38 = require("class-variance-authority");
12861
12937
  var import_clsx54 = __toESM(require("clsx"), 1);
12862
12938
 
@@ -12920,7 +12996,7 @@ function topSurface() {
12920
12996
  );
12921
12997
  return surfaces[surfaces.length - 1];
12922
12998
  }
12923
- var Popover2 = (0, import_react73.forwardRef)(
12999
+ var Popover2 = (0, import_react74.forwardRef)(
12924
13000
  ({
12925
13001
  children,
12926
13002
  content,
@@ -12940,37 +13016,37 @@ var Popover2 = (0, import_react73.forwardRef)(
12940
13016
  id: suppliedId,
12941
13017
  ...dialogProps
12942
13018
  }, ref) => {
12943
- const [localOpen, setLocalOpen] = (0, import_react73.useState)(defaultOpen);
13019
+ const [localOpen, setLocalOpen] = (0, import_react74.useState)(defaultOpen);
12944
13020
  const isOpen = open ?? localOpen;
12945
- const [positioning, setPositioning] = (0, import_react73.useState)(true);
12946
- const [tooltipOpen, setTooltipOpen] = (0, import_react73.useState)(false);
13021
+ const [positioning, setPositioning] = (0, import_react74.useState)(true);
13022
+ const [tooltipOpen, setTooltipOpen] = (0, import_react74.useState)(false);
12947
13023
  const motionState = useMotion(motion);
12948
13024
  if (process.env.NODE_ENV !== "production") {
12949
13025
  devValidate("Popover", PopoverManifest.Popover.props, { ...dialogProps, side, align });
12950
13026
  }
12951
- const generatedId = (0, import_react73.useId)();
13027
+ const generatedId = (0, import_react74.useId)();
12952
13028
  const id = suppliedId ?? `oprt-popover-${generatedId}`;
12953
- const trigger = (0, import_react73.useRef)(null);
12954
- const lastTrigger = (0, import_react73.useRef)(null);
12955
- const dialog = (0, import_react73.useRef)(null);
12956
- const lastDialog = (0, import_react73.useRef)(null);
12957
- const wasOpen = (0, import_react73.useRef)(false);
12958
- const focusFrame = (0, import_react73.useRef)();
12959
- const focusScrollClose = (0, import_react73.useRef)(false);
12960
- const current = (0, import_react73.useRef)({ isOpen, onCloseAutoFocus, returnFocusRef });
13029
+ const trigger = (0, import_react74.useRef)(null);
13030
+ const lastTrigger = (0, import_react74.useRef)(null);
13031
+ const dialog = (0, import_react74.useRef)(null);
13032
+ const lastDialog = (0, import_react74.useRef)(null);
13033
+ const wasOpen = (0, import_react74.useRef)(false);
13034
+ const focusFrame = (0, import_react74.useRef)();
13035
+ const focusScrollClose = (0, import_react74.useRef)(false);
13036
+ const current = (0, import_react74.useRef)({ isOpen, onCloseAutoFocus, returnFocusRef });
12961
13037
  current.current = { isOpen, onCloseAutoFocus, returnFocusRef };
12962
- const childRef = parseInt(import_react73.version, 10) < 19 ? children.ref : children.props.ref;
12963
- const rememberTrigger = (0, import_react73.useCallback)((node) => {
13038
+ const childRef = parseInt(import_react74.version, 10) < 19 ? children.ref : children.props.ref;
13039
+ const rememberTrigger = (0, import_react74.useCallback)((node) => {
12964
13040
  trigger.current = node;
12965
13041
  if (node) lastTrigger.current = node;
12966
13042
  }, []);
12967
13043
  const setTrigger = useMergedRefs(rememberTrigger, childRef);
12968
- const rememberDialog = (0, import_react73.useCallback)((node) => {
13044
+ const rememberDialog = (0, import_react74.useCallback)((node) => {
12969
13045
  dialog.current = node;
12970
13046
  if (node) lastDialog.current = node;
12971
13047
  }, []);
12972
13048
  const setDialog = useMergedRefs(rememberDialog, ref);
12973
- const restoreFocus = (0, import_react73.useCallback)(() => {
13049
+ const restoreFocus = (0, import_react74.useCallback)(() => {
12974
13050
  const event = new Event("popovercloseautofocus", { cancelable: true });
12975
13051
  current.current.onCloseAutoFocus?.(event);
12976
13052
  if (event.defaultPrevented) return;
@@ -12985,7 +13061,7 @@ var Popover2 = (0, import_react73.forwardRef)(
12985
13061
  if (target?.isConnected) target.focus({ preventScroll: true });
12986
13062
  });
12987
13063
  }, []);
12988
- (0, import_react73.useEffect)(() => {
13064
+ (0, import_react74.useEffect)(() => {
12989
13065
  if (isOpen && !wasOpen.current) {
12990
13066
  if (focusFrame.current !== void 0) cancelAnimationFrame(focusFrame.current);
12991
13067
  setTooltipOpen(false);
@@ -12994,13 +13070,13 @@ var Popover2 = (0, import_react73.forwardRef)(
12994
13070
  if (!isOpen && wasOpen.current) restoreFocus();
12995
13071
  wasOpen.current = isOpen;
12996
13072
  }, [isOpen, restoreFocus]);
12997
- (0, import_react73.useEffect)(
13073
+ (0, import_react74.useEffect)(
12998
13074
  () => () => {
12999
13075
  if (wasOpen.current && !dialog.current?.isConnected) restoreFocus();
13000
13076
  },
13001
13077
  [restoreFocus]
13002
13078
  );
13003
- const requestOpen = (0, import_react73.useCallback)(
13079
+ const requestOpen = (0, import_react74.useCallback)(
13004
13080
  (next) => {
13005
13081
  if (next && disabled) return;
13006
13082
  if (!next && focusScrollClose.current) return;
@@ -13068,7 +13144,7 @@ var Popover2 = (0, import_react73.forwardRef)(
13068
13144
  window.removeEventListener(event, interact, true);
13069
13145
  };
13070
13146
  }, [isOpen]);
13071
- (0, import_react73.useEffect)(() => {
13147
+ (0, import_react74.useEffect)(() => {
13072
13148
  if (!isOpen) return;
13073
13149
  let startedOutside = false;
13074
13150
  const start = (event) => {
@@ -13095,7 +13171,7 @@ var Popover2 = (0, import_react73.forwardRef)(
13095
13171
  document.removeEventListener("pointercancel", cancel, true);
13096
13172
  };
13097
13173
  }, [isOpen, requestOpen]);
13098
- const triggerElement = (0, import_react73.cloneElement)(children, {
13174
+ const triggerElement = (0, import_react74.cloneElement)(children, {
13099
13175
  ref: setTrigger,
13100
13176
  disabled: disabled || children.props.disabled,
13101
13177
  "aria-disabled": disabled || children.props["aria-disabled"],
@@ -13185,16 +13261,16 @@ var Popover2 = (0, import_react73.forwardRef)(
13185
13261
  Popover2.displayName = "Popover";
13186
13262
 
13187
13263
  // src/EntityPreview/EntityPreview.tsx
13188
- var import_react74 = require("react");
13264
+ var import_react75 = require("react");
13189
13265
  var import_class_variance_authority39 = require("class-variance-authority");
13190
13266
  var import_clsx55 = __toESM(require("clsx"), 1);
13191
13267
  var import_jsx_runtime58 = require("react/jsx-runtime");
13192
13268
  var previewStyles = (0, import_class_variance_authority39.cva)(
13193
13269
  "flex min-w-0 flex-col gap-2u font-sans text-oprt-base normal-case tracking-normal text-oprt-text"
13194
13270
  );
13195
- var EntityPreview = (0, import_react74.forwardRef)(
13271
+ var EntityPreview = (0, import_react75.forwardRef)(
13196
13272
  ({ entity, media, actions: actions2, headingLevel = 3, className, ...props }, ref) => {
13197
- const instanceId = (0, import_react74.useId)();
13273
+ const instanceId = (0, import_react75.useId)();
13198
13274
  const headingId = `${instanceId}-name`;
13199
13275
  const conditionId = `${instanceId}-condition`;
13200
13276
  const Heading5 = `h${headingLevel}`;
@@ -13299,16 +13375,16 @@ var EntityPreviewManifest = {
13299
13375
  };
13300
13376
 
13301
13377
  // src/FormSection/FormSection.tsx
13302
- var import_react75 = require("react");
13378
+ var import_react76 = require("react");
13303
13379
  var import_class_variance_authority40 = require("class-variance-authority");
13304
13380
  var import_clsx56 = __toESM(require("clsx"), 1);
13305
13381
  var import_jsx_runtime59 = require("react/jsx-runtime");
13306
13382
  var sectionStyles = (0, import_class_variance_authority40.cva)(
13307
13383
  "m-0 min-w-0 border border-oprt-border bg-oprt-surface-1 p-3u font-sans text-oprt-base normal-case tracking-normal text-oprt-text"
13308
13384
  );
13309
- var FormSection = (0, import_react75.forwardRef)(
13385
+ var FormSection = (0, import_react76.forwardRef)(
13310
13386
  ({ legend, description, children, className, "aria-describedby": describedBy, ...props }, ref) => {
13311
- const root = (0, import_react75.useRef)(null);
13387
+ const root = (0, import_react76.useRef)(null);
13312
13388
  const mergedRef = useMergedRefs(root, ref);
13313
13389
  const ids = usePartIds(["description"], {
13314
13390
  id: props.id,
@@ -13372,7 +13448,7 @@ var FormSectionManifest = {
13372
13448
  };
13373
13449
 
13374
13450
  // src/FormErrorSummary/FormErrorSummary.tsx
13375
- var import_react76 = require("react");
13451
+ var import_react77 = require("react");
13376
13452
  var import_class_variance_authority41 = require("class-variance-authority");
13377
13453
  var import_clsx57 = __toESM(require("clsx"), 1);
13378
13454
  var import_jsx_runtime60 = require("react/jsx-runtime");
@@ -13382,7 +13458,7 @@ var summaryStyles = (0, import_class_variance_authority41.cva)(
13382
13458
  var errorStyles = (0, import_class_variance_authority41.cva)(
13383
13459
  "inline-flex min-h-3u min-w-3u max-w-full items-center border border-transparent px-1u py-0.5u text-left text-oprt-base font-medium normal-case tracking-normal text-oprt-text underline underline-offset-2 hover:text-oprt-accent outline-hidden focus-visible:border-oprt-border-focus focus-visible:shadow-oprt-focus oprt-wrap-anywhere"
13384
13460
  );
13385
- var FormErrorSummary = (0, import_react76.forwardRef)(
13461
+ var FormErrorSummary = (0, import_react77.forwardRef)(
13386
13462
  ({
13387
13463
  errors,
13388
13464
  title = "Check these fields",
@@ -13392,7 +13468,7 @@ var FormErrorSummary = (0, import_react76.forwardRef)(
13392
13468
  "aria-labelledby": labelledBy,
13393
13469
  ...props
13394
13470
  }, ref) => {
13395
- const root = (0, import_react76.useRef)(null);
13471
+ const root = (0, import_react77.useRef)(null);
13396
13472
  const mergedRef = useMergedRefs(root, ref);
13397
13473
  const ids = usePartIds(["title"], {
13398
13474
  id: props.id,
@@ -13463,7 +13539,7 @@ var FormErrorSummaryManifest = {
13463
13539
  };
13464
13540
 
13465
13541
  // src/Calendar/Calendar.tsx
13466
- var import_react77 = require("react");
13542
+ var import_react78 = require("react");
13467
13543
  var import_date2 = require("@internationalized/date");
13468
13544
  var import_react_aria_components22 = require("react-aria-components");
13469
13545
  var import_class_variance_authority42 = require("class-variance-authority");
@@ -13649,7 +13725,7 @@ function CalendarContent() {
13649
13725
  ] })
13650
13726
  ] });
13651
13727
  }
13652
- var Calendar2 = (0, import_react77.forwardRef)(
13728
+ var Calendar2 = (0, import_react78.forwardRef)(
13653
13729
  ({
13654
13730
  label,
13655
13731
  value,
@@ -13662,10 +13738,10 @@ var Calendar2 = (0, import_react77.forwardRef)(
13662
13738
  id,
13663
13739
  className
13664
13740
  }, ref) => {
13665
- const generated = (0, import_react77.useId)();
13741
+ const generated = (0, import_react78.useId)();
13666
13742
  const errorId = `${id ?? generated}-error`;
13667
13743
  const hydration = useHydrationRoot(id);
13668
- const config = (0, import_react77.useMemo)(() => dateConfiguration(value, min, max), [value, min, max]);
13744
+ const config = (0, import_react78.useMemo)(() => dateConfiguration(value, min, max), [value, min, max]);
13669
13745
  const error = config.error ?? (required && value === null ? "A date is required." : null);
13670
13746
  return (
13671
13747
  // The key remounts the error with the calendar, so both take the client's ids when hydration
@@ -13740,7 +13816,7 @@ var CalendarManifest = {
13740
13816
  };
13741
13817
 
13742
13818
  // src/DatePicker/DatePicker.tsx
13743
- var import_react79 = require("react");
13819
+ var import_react80 = require("react");
13744
13820
  var import_react_aria_components23 = require("react-aria-components");
13745
13821
  var import_date4 = require("@internationalized/date");
13746
13822
  var import_icons21 = require("@oprt/icons");
@@ -13748,12 +13824,12 @@ var import_class_variance_authority43 = require("class-variance-authority");
13748
13824
  var import_clsx59 = __toESM(require("clsx"), 1);
13749
13825
 
13750
13826
  // src/_internal/segmentField.ts
13751
- var import_react78 = require("react");
13827
+ var import_react79 = require("react");
13752
13828
  function sameSnapshot(a, b) {
13753
13829
  return a.value === b.value && a.empty === b.empty && a.valid === b.valid;
13754
13830
  }
13755
13831
  function useReportSegments(segments2, read, report2) {
13756
- const last = (0, import_react78.useRef)(null);
13832
+ const last = (0, import_react79.useRef)(null);
13757
13833
  useIsomorphicLayoutEffect(() => {
13758
13834
  const snapshot = read(segments2);
13759
13835
  const previous = last.current;
@@ -13800,11 +13876,11 @@ function useSegmentDraft({
13800
13876
  rejected: false,
13801
13877
  rejection: null
13802
13878
  };
13803
- const [draft, setDraft] = (0, import_react78.useState)(initial);
13879
+ const [draft, setDraft] = (0, import_react79.useState)(initial);
13804
13880
  const current = draft.base === value ? draft : initial;
13805
- const raw = (0, import_react78.useRef)(current.snapshot);
13806
- const rejectBlur = (0, import_react78.useRef)(false);
13807
- const report2 = (0, import_react78.useCallback)(
13881
+ const raw = (0, import_react79.useRef)(current.snapshot);
13882
+ const rejectBlur = (0, import_react79.useRef)(false);
13883
+ const report2 = (0, import_react79.useCallback)(
13808
13884
  (snapshot) => {
13809
13885
  raw.current = snapshot;
13810
13886
  setDraft(
@@ -13851,7 +13927,7 @@ function useSegmentDraft({
13851
13927
  accept: () => setDraft((previous) => ({ ...previous, rejected: false, rejection: null }))
13852
13928
  };
13853
13929
  }
13854
- var SegmentGroupContext = (0, import_react78.createContext)(null);
13930
+ var SegmentGroupContext = (0, import_react79.createContext)(null);
13855
13931
 
13856
13932
  // src/DatePicker/DatePicker.tsx
13857
13933
  var import_jsx_runtime62 = require("react/jsx-runtime");
@@ -13860,11 +13936,11 @@ function ObservedYear({
13860
13936
  segment,
13861
13937
  report: report2
13862
13938
  }) {
13863
- const state = (0, import_react79.useContext)(import_react_aria_components23.DateFieldStateContext);
13939
+ const state = (0, import_react80.useContext)(import_react_aria_components23.DateFieldStateContext);
13864
13940
  useReportSegments(state.segments, readDateSegments, report2);
13865
13941
  return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_aria_components23.DateSegment, { segment, className: SEGMENT_STYLES });
13866
13942
  }
13867
- var DatePicker = (0, import_react79.forwardRef)(
13943
+ var DatePicker = (0, import_react80.forwardRef)(
13868
13944
  ({
13869
13945
  label,
13870
13946
  value,
@@ -13879,19 +13955,19 @@ var DatePicker = (0, import_react79.forwardRef)(
13879
13955
  className,
13880
13956
  motion = "auto"
13881
13957
  }, ref) => {
13882
- const generated = (0, import_react79.useId)();
13958
+ const generated = (0, import_react80.useId)();
13883
13959
  const inputId = id ?? `oprt-date-${generated}`;
13884
13960
  const hydration = useHydrationRoot(inputId);
13885
13961
  const { locale } = (0, import_react_aria_components23.useLocale)();
13886
- const gregorianLocale = (0, import_react79.useMemo)(
13962
+ const gregorianLocale = (0, import_react80.useMemo)(
13887
13963
  () => new Intl.Locale(locale, { calendar: "gregory" }).toString(),
13888
13964
  [locale]
13889
13965
  );
13890
- const config = (0, import_react79.useMemo)(() => dateConfiguration(value, min, max), [value, min, max]);
13966
+ const config = (0, import_react80.useMemo)(() => dateConfiguration(value, min, max), [value, min, max]);
13891
13967
  const displayedValue = config.date?.toString() ?? null;
13892
13968
  const motionState = useMotion(motion);
13893
- const calendarButton = (0, import_react79.useRef)(null);
13894
- const group = (0, import_react79.useContext)(SegmentGroupContext);
13969
+ const calendarButton = (0, import_react80.useRef)(null);
13970
+ const group = (0, import_react80.useContext)(SegmentGroupContext);
13895
13971
  const calendarMin = parseDateOnly(group?.calendar?.min);
13896
13972
  const calendarMax = parseDateOnly(group?.calendar?.max);
13897
13973
  const minValue = calendarMin && calendarMin.compare(config.min) > 0 ? calendarMin : config.min;
@@ -13908,10 +13984,10 @@ var DatePicker = (0, import_react79.forwardRef)(
13908
13984
  // The bound an edit crossed, named as for a supplied value (DatePicker-R6).
13909
13985
  draft.rejection ?? "Enter a complete, valid date within the allowed bounds."
13910
13986
  ) : null);
13911
- const validityCallback = (0, import_react79.useRef)(onDraftValidityChange);
13987
+ const validityCallback = (0, import_react80.useRef)(onDraftValidityChange);
13912
13988
  validityCallback.current = onDraftValidityChange;
13913
13989
  const pending = draft.pending;
13914
- (0, import_react79.useEffect)(() => validityCallback.current?.(!error, { pending }), [error, pending]);
13990
+ (0, import_react80.useEffect)(() => validityCallback.current?.(!error, { pending }), [error, pending]);
13915
13991
  return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_react_aria_components23.I18nProvider, { locale: gregorianLocale, children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
13916
13992
  import_react_aria_components23.DatePicker,
13917
13993
  {
@@ -14036,7 +14112,7 @@ var DatePickerManifest = {
14036
14112
  };
14037
14113
 
14038
14114
  // src/InlineEdit/InlineEdit.tsx
14039
- var import_react80 = require("react");
14115
+ var import_react81 = require("react");
14040
14116
  var import_class_variance_authority44 = require("class-variance-authority");
14041
14117
  var import_clsx60 = __toESM(require("clsx"), 1);
14042
14118
  var import_jsx_runtime63 = require("react/jsx-runtime");
@@ -14047,35 +14123,35 @@ function matchesAttempt(attempt, value, label) {
14047
14123
  const acceptedReplacement = value === attempt.submitted && value !== attempt.session.baseline;
14048
14124
  return (label === attempt.session.label || acceptedReplacement) && (value === attempt.session.baseline || value === attempt.submitted);
14049
14125
  }
14050
- var InlineEdit = (0, import_react80.forwardRef)(
14126
+ var InlineEdit = (0, import_react81.forwardRef)(
14051
14127
  ({ label, value, onSave, disabled = false, readOnly = false, validate: validate3, className, ...props }, ref) => {
14052
- const [editing, setEditing] = (0, import_react80.useState)(false);
14053
- const [draft, setDraft] = (0, import_react80.useState)(value);
14054
- const [error, setError] = (0, import_react80.useState)(null);
14055
- const [pending, setPending] = (0, import_react80.useState)(false);
14056
- const [multiline, setMultiline] = (0, import_react80.useState)(false);
14057
- const [returnFocus, setReturnFocus] = (0, import_react80.useState)(null);
14058
- const [changedTo, setChangedTo] = (0, import_react80.useState)(null);
14059
- const rootRef = (0, import_react80.useRef)(null);
14128
+ const [editing, setEditing] = (0, import_react81.useState)(false);
14129
+ const [draft, setDraft] = (0, import_react81.useState)(value);
14130
+ const [error, setError] = (0, import_react81.useState)(null);
14131
+ const [pending, setPending] = (0, import_react81.useState)(false);
14132
+ const [multiline, setMultiline] = (0, import_react81.useState)(false);
14133
+ const [returnFocus, setReturnFocus] = (0, import_react81.useState)(null);
14134
+ const [changedTo, setChangedTo] = (0, import_react81.useState)(null);
14135
+ const rootRef = (0, import_react81.useRef)(null);
14060
14136
  const mergedRef = useMergedRefs(rootRef, ref);
14061
- const inputRef = (0, import_react80.useRef)(null);
14062
- const editRef = (0, import_react80.useRef)(null);
14063
- const refocusInput = (0, import_react80.useRef)(false);
14064
- const session = (0, import_react80.useRef)(null);
14065
- const request = (0, import_react80.useRef)(null);
14066
- const composing = (0, import_react80.useRef)(false);
14137
+ const inputRef = (0, import_react81.useRef)(null);
14138
+ const editRef = (0, import_react81.useRef)(null);
14139
+ const refocusInput = (0, import_react81.useRef)(false);
14140
+ const session = (0, import_react81.useRef)(null);
14141
+ const request = (0, import_react81.useRef)(null);
14142
+ const composing = (0, import_react81.useRef)(false);
14067
14143
  const isMounted = useIsMounted();
14068
- const latest = (0, import_react80.useRef)({ label, value, disabled, readOnly });
14144
+ const latest = (0, import_react81.useRef)({ label, value, disabled, readOnly });
14069
14145
  latest.current = { label, value, disabled, readOnly };
14070
14146
  const ids = usePartIds(["error", "changed"]);
14071
- (0, import_react80.useEffect)(
14147
+ (0, import_react81.useEffect)(
14072
14148
  () => () => {
14073
14149
  session.current = null;
14074
14150
  request.current = null;
14075
14151
  },
14076
14152
  []
14077
14153
  );
14078
- (0, import_react80.useEffect)(() => {
14154
+ (0, import_react81.useEffect)(() => {
14079
14155
  const current = session.current;
14080
14156
  if (!current) return;
14081
14157
  const attempt = request.current;
@@ -14093,17 +14169,17 @@ var InlineEdit = (0, import_react80.forwardRef)(
14093
14169
  session.current = { baseline: value, label };
14094
14170
  if (current.baseline !== value) setChangedTo(value);
14095
14171
  }, [value, label, disabled, readOnly]);
14096
- (0, import_react80.useEffect)(() => {
14172
+ (0, import_react81.useEffect)(() => {
14097
14173
  if (editing) inputRef.current?.focus();
14098
14174
  }, [editing]);
14099
- (0, import_react80.useEffect)(() => {
14175
+ (0, import_react81.useEffect)(() => {
14100
14176
  if (pending || !refocusInput.current) return;
14101
14177
  refocusInput.current = false;
14102
14178
  const active = document.activeElement;
14103
14179
  if (active === null || active === document.body || rootRef.current?.contains(active))
14104
14180
  inputRef.current?.focus();
14105
14181
  }, [pending]);
14106
- (0, import_react80.useEffect)(() => {
14182
+ (0, import_react81.useEffect)(() => {
14107
14183
  if (!returnFocus || editing) return;
14108
14184
  if (!disabled && !readOnly && matchesAttempt(returnFocus, value, label))
14109
14185
  editRef.current?.focus();
@@ -14325,7 +14401,7 @@ var InlineEditManifest = {
14325
14401
  };
14326
14402
 
14327
14403
  // src/ContextMenu/ContextMenu.tsx
14328
- var import_react81 = require("react");
14404
+ var import_react82 = require("react");
14329
14405
  var import_react_aria_components24 = require("react-aria-components");
14330
14406
  var import_react_aria6 = require("react-aria");
14331
14407
  var import_class_variance_authority45 = require("class-variance-authority");
@@ -14344,7 +14420,7 @@ function ContextSurface({
14344
14420
  disabled,
14345
14421
  children
14346
14422
  }) {
14347
- const surfaceRef = (0, import_react81.useRef)(null);
14423
+ const surfaceRef = (0, import_react82.useRef)(null);
14348
14424
  const { pressProps } = (0, import_react_aria6.usePress)({ ref: surfaceRef, isDisabled: disabled });
14349
14425
  return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
14350
14426
  "div",
@@ -14381,7 +14457,7 @@ function ContextSurface({
14381
14457
  }
14382
14458
  );
14383
14459
  }
14384
- var ContextMenu = (0, import_react81.forwardRef)(
14460
+ var ContextMenu = (0, import_react82.forwardRef)(
14385
14461
  ({
14386
14462
  label,
14387
14463
  items,
@@ -14392,10 +14468,10 @@ var ContextMenu = (0, import_react81.forwardRef)(
14392
14468
  className,
14393
14469
  ...props
14394
14470
  }, ref) => {
14395
- const [open, setOpen] = (0, import_react81.useState)(null);
14471
+ const [open, setOpen] = (0, import_react82.useState)(null);
14396
14472
  const hydration = useHydrationRoot();
14397
14473
  const motionState = useMotion("auto", "ContextMenu");
14398
- (0, import_react81.useEffect)(() => {
14474
+ (0, import_react82.useEffect)(() => {
14399
14475
  if (disabled) setOpen(null);
14400
14476
  }, [disabled]);
14401
14477
  const menu = () => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
@@ -14531,18 +14607,18 @@ var ContextMenuManifest = {
14531
14607
  };
14532
14608
 
14533
14609
  // src/TimeField/TimeField.tsx
14534
- var import_react82 = require("react");
14610
+ var import_react83 = require("react");
14535
14611
  var import_react_aria_components25 = require("react-aria-components");
14536
14612
  var import_class_variance_authority46 = require("class-variance-authority");
14537
14613
  var import_clsx62 = __toESM(require("clsx"), 1);
14538
14614
  var import_jsx_runtime65 = require("react/jsx-runtime");
14539
14615
  var fieldStyles3 = (0, import_class_variance_authority46.cva)("flex min-w-0 flex-col gap-1u font-sans text-oprt-base text-oprt-text");
14540
14616
  function DraftObserver({ report: report2 }) {
14541
- const state = (0, import_react82.useContext)(import_react_aria_components25.TimeFieldStateContext);
14617
+ const state = (0, import_react83.useContext)(import_react_aria_components25.TimeFieldStateContext);
14542
14618
  useReportSegments(state.segments, readTimeSegments, report2);
14543
14619
  return null;
14544
14620
  }
14545
- var TimeField = (0, import_react82.forwardRef)(
14621
+ var TimeField = (0, import_react83.forwardRef)(
14546
14622
  ({
14547
14623
  label,
14548
14624
  value,
@@ -14556,12 +14632,12 @@ var TimeField = (0, import_react82.forwardRef)(
14556
14632
  id,
14557
14633
  className
14558
14634
  }, ref) => {
14559
- const generated = (0, import_react82.useId)();
14635
+ const generated = (0, import_react83.useId)();
14560
14636
  const inputId = id ?? `oprt-time-${generated}`;
14561
14637
  const hydration = useHydrationRoot(inputId);
14562
- const config = (0, import_react82.useMemo)(() => timeConfiguration(value, min, max), [value, min, max]);
14638
+ const config = (0, import_react83.useMemo)(() => timeConfiguration(value, min, max), [value, min, max]);
14563
14639
  const displayedValue = config.time ? formatTimeOnly(config.time) : null;
14564
- const group = (0, import_react82.useContext)(SegmentGroupContext);
14640
+ const group = (0, import_react83.useContext)(SegmentGroupContext);
14565
14641
  const draft = useSegmentDraft({
14566
14642
  value,
14567
14643
  displayed: displayedValue,
@@ -14574,10 +14650,10 @@ var TimeField = (0, import_react82.forwardRef)(
14574
14650
  // The bound an edit crossed, named as for a supplied value (TimeField-R1).
14575
14651
  draft.rejection ?? "Enter a complete, valid time within the allowed bounds."
14576
14652
  ) : null);
14577
- const callback = (0, import_react82.useRef)(onDraftValidityChange);
14653
+ const callback = (0, import_react83.useRef)(onDraftValidityChange);
14578
14654
  callback.current = onDraftValidityChange;
14579
14655
  const pending = draft.pending;
14580
- (0, import_react82.useEffect)(() => callback.current?.(!error, { pending }), [error, pending]);
14656
+ (0, import_react83.useEffect)(() => callback.current?.(!error, { pending }), [error, pending]);
14581
14657
  return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { ...draft.editProps, children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(
14582
14658
  import_react_aria_components25.TimeField,
14583
14659
  {
@@ -14662,14 +14738,14 @@ var TimeFieldManifest = {
14662
14738
  };
14663
14739
 
14664
14740
  // src/DateTimePicker/DateTimePicker.tsx
14665
- var import_react83 = require("react");
14741
+ var import_react84 = require("react");
14666
14742
  var import_class_variance_authority47 = require("class-variance-authority");
14667
14743
  var import_clsx63 = __toESM(require("clsx"), 1);
14668
14744
  var import_jsx_runtime66 = require("react/jsx-runtime");
14669
14745
  var pickerStyles = (0, import_class_variance_authority47.cva)(
14670
14746
  "flex min-w-0 flex-col gap-2u font-sans text-oprt-base text-oprt-text focus-visible:outline-hidden focus-visible:shadow-oprt-focus"
14671
14747
  );
14672
- var DateTimePicker = (0, import_react83.forwardRef)(
14748
+ var DateTimePicker = (0, import_react84.forwardRef)(
14673
14749
  ({
14674
14750
  label,
14675
14751
  value,
@@ -14684,7 +14760,7 @@ var DateTimePicker = (0, import_react83.forwardRef)(
14684
14760
  id,
14685
14761
  className
14686
14762
  }, ref) => {
14687
- const root = (0, import_react83.useRef)(null);
14763
+ const root = (0, import_react84.useRef)(null);
14688
14764
  const setRoot = useMergedRefs(root, ref);
14689
14765
  const ids = usePartIds(["label", "zone", "error", "status"], {
14690
14766
  id,
@@ -14692,7 +14768,7 @@ var DateTimePicker = (0, import_react83.forwardRef)(
14692
14768
  });
14693
14769
  const zoneName = typeof timeZone === "string" ? timeZone : "invalid";
14694
14770
  const base = `${String(value)}|${String(timeZone)}`;
14695
- const wall = (0, import_react83.useMemo)(() => instantWallTime(value, timeZone), [value, timeZone]);
14771
+ const wall = (0, import_react84.useMemo)(() => instantWallTime(value, timeZone), [value, timeZone]);
14696
14772
  const initial = {
14697
14773
  base,
14698
14774
  date: wall.date,
@@ -14702,7 +14778,7 @@ var DateTimePicker = (0, import_react83.forwardRef)(
14702
14778
  timeValid: true,
14703
14779
  dirty: false
14704
14780
  };
14705
- const [draft, setDraft] = (0, import_react83.useState)(initial);
14781
+ const [draft, setDraft] = (0, import_react84.useState)(initial);
14706
14782
  const current = draft.base === base ? draft : initial;
14707
14783
  const zoneValid = validTimeZone(timeZone);
14708
14784
  const boundsValid = (min === void 0 || validInstant(min)) && (max === void 0 || validInstant(max)) && !(min !== void 0 && max !== void 0 && min > max);
@@ -14712,11 +14788,11 @@ var DateTimePicker = (0, import_react83.forwardRef)(
14712
14788
  const empty = current.date === null && current.time === null;
14713
14789
  const checkedInstant = current.dirty ? candidate : value;
14714
14790
  const error = !zoneValid ? "Invalid time zone. Supply an IANA time zone." : !boundsValid ? "Invalid instant bounds. Supply finite epoch milliseconds in ascending order." : !current.dirty && wall.error ? wall.error : !current.dateValid || !current.timeValid ? "Complete the date and time before applying this change." : empty ? required ? "A date and time are required." : null : !current.date || !current.time ? "Enter both a date and a time." : resolution?.status === "invalid" ? resolution.error : ambiguous && current.occurrence === null ? "Choose the earlier or later occurrence of this repeated time." : checkedInstant !== null && min !== void 0 && checkedInstant < min ? `Choose an instant at or after ${formatUtcTimestamp(min)}.` : checkedInstant !== null && max !== void 0 && checkedInstant > max ? `Choose an instant at or before ${formatUtcTimestamp(max)}.` : null;
14715
- const group = (0, import_react83.useMemo)(() => {
14791
+ const group = (0, import_react84.useMemo)(() => {
14716
14792
  const dayOf = (bound) => bound !== void 0 && zoneValid && boundsValid ? instantWallTime(bound, timeZone).date ?? void 0 : void 0;
14717
14793
  return { required, calendar: { min: dayOf(min), max: dayOf(max) } };
14718
14794
  }, [required, min, max, timeZone, zoneValid, boundsValid]);
14719
- const restoring = (0, import_react83.useRef)(false);
14795
+ const restoring = (0, import_react84.useRef)(false);
14720
14796
  const restore = useRestoreFocusOnRemoval(root, {
14721
14797
  findTarget: () => {
14722
14798
  restoring.current = true;
@@ -14734,9 +14810,9 @@ var DateTimePicker = (0, import_react83.forwardRef)(
14734
14810
  const from = event.relatedTarget;
14735
14811
  return from instanceof Node && event.currentTarget.contains(from);
14736
14812
  };
14737
- const callback = (0, import_react83.useRef)(onDraftValidityChange);
14813
+ const callback = (0, import_react84.useRef)(onDraftValidityChange);
14738
14814
  callback.current = onDraftValidityChange;
14739
- (0, import_react83.useEffect)(
14815
+ (0, import_react84.useEffect)(
14740
14816
  () => callback.current?.(!error && !current.dirty, { pending: current.dirty }),
14741
14817
  [error, current.dirty]
14742
14818
  );
@@ -14898,7 +14974,7 @@ var DateTimePickerManifest = {
14898
14974
  };
14899
14975
 
14900
14976
  // src/DateRangePicker/DateRangePicker.tsx
14901
- var import_react84 = require("react");
14977
+ var import_react85 = require("react");
14902
14978
  var import_class_variance_authority48 = require("class-variance-authority");
14903
14979
  var import_clsx64 = __toESM(require("clsx"), 1);
14904
14980
  var import_jsx_runtime67 = require("react/jsx-runtime");
@@ -14907,7 +14983,7 @@ var rangeStyles3 = (0, import_class_variance_authority48.cva)(
14907
14983
  );
14908
14984
  var REQUIRED_GROUP = { required: true };
14909
14985
  var keyOf = (value) => value === null ? "null" : JSON.stringify([value.start, value.end]);
14910
- var DateRangePicker = (0, import_react84.forwardRef)(
14986
+ var DateRangePicker = (0, import_react85.forwardRef)(
14911
14987
  ({
14912
14988
  label,
14913
14989
  value,
@@ -14923,14 +14999,14 @@ var DateRangePicker = (0, import_react84.forwardRef)(
14923
14999
  id,
14924
15000
  className
14925
15001
  }, ref) => {
14926
- const root = (0, import_react84.useRef)(null);
15002
+ const root = (0, import_react85.useRef)(null);
14927
15003
  const setRoot = useMergedRefs(root, ref);
14928
15004
  const ids = usePartIds(["label", "error", "status"], {
14929
15005
  id,
14930
15006
  readRendered: () => root.current?.id
14931
15007
  });
14932
15008
  const base = keyOf(value);
14933
- const [replacement, setReplacement] = (0, import_react84.useState)({ base, generation: 0, requested: null });
15009
+ const [replacement, setReplacement] = (0, import_react85.useState)({ base, generation: 0, requested: null });
14934
15010
  if (replacement.base !== base) {
14935
15011
  setReplacement({
14936
15012
  base,
@@ -14952,7 +15028,7 @@ var DateRangePicker = (0, import_react84.forwardRef)(
14952
15028
  startPending: false,
14953
15029
  endPending: false
14954
15030
  };
14955
- const [draft, setDraft] = (0, import_react84.useState)(initial);
15031
+ const [draft, setDraft] = (0, import_react85.useState)(initial);
14956
15032
  const current = draft.base === base ? draft : initial;
14957
15033
  const start = parseDateOnly(current.start);
14958
15034
  const end = parseDateOnly(current.end);
@@ -14961,9 +15037,9 @@ var DateRangePicker = (0, import_react84.forwardRef)(
14961
15037
  const empty = current.start === null && current.end === null;
14962
15038
  const pending = current.startPending || current.endPending || current.start !== (value?.start ?? null) || current.end !== (value?.end ?? null);
14963
15039
  const error = startConfig.error || endConfig.error || (!current.startValid || !current.endValid ? "Complete both date fields before continuing." : empty ? required ? "A date range is required." : null : !start || !end ? "Enter both a start date and an end date." : start.compare(end) > 0 ? "Start date must be on or before end date." : null);
14964
- const callback = (0, import_react84.useRef)(onDraftValidityChange);
15040
+ const callback = (0, import_react85.useRef)(onDraftValidityChange);
14965
15041
  callback.current = onDraftValidityChange;
14966
- (0, import_react84.useEffect)(() => callback.current?.(!error && !pending, { pending }), [error, pending]);
15042
+ (0, import_react85.useEffect)(() => callback.current?.(!error && !pending, { pending }), [error, pending]);
14967
15043
  const setEndpoint = (part, next) => {
14968
15044
  if (disabled || readOnly) return;
14969
15045
  const nextDraft = { ...current, [part]: next };
@@ -15078,7 +15154,7 @@ var DateRangePickerManifest = {
15078
15154
  };
15079
15155
 
15080
15156
  // src/FileUpload/FileUpload.tsx
15081
- var import_react85 = require("react");
15157
+ var import_react86 = require("react");
15082
15158
  var import_react_aria_components26 = require("react-aria-components");
15083
15159
  var import_class_variance_authority49 = require("class-variance-authority");
15084
15160
  var import_clsx65 = __toESM(require("clsx"), 1);
@@ -15106,7 +15182,7 @@ var dropStyles = (0, import_class_variance_authority49.cva)(
15106
15182
  "flex min-w-0 flex-col items-start gap-2u border border-dashed border-oprt-border bg-oprt-surface-1 p-3u data-[drop-target]:border-oprt-accent data-[focus-visible]:border-oprt-border-focus data-[focus-visible]:shadow-oprt-focus"
15107
15183
  );
15108
15184
  var validAccept = (token) => /^\.[a-z0-9][a-z0-9._+-]*$/i.test(token) || /^(?:[a-z0-9!#$&^_.+-]+\/(?:[a-z0-9!#$&^_.+-]+|\*)|\*\/\*)$/i.test(token);
15109
- var FileUpload = (0, import_react85.forwardRef)(
15185
+ var FileUpload = (0, import_react86.forwardRef)(
15110
15186
  ({
15111
15187
  label,
15112
15188
  description,
@@ -15122,29 +15198,29 @@ var FileUpload = (0, import_react85.forwardRef)(
15122
15198
  "aria-describedby": describedBy,
15123
15199
  ...props
15124
15200
  }, ref) => {
15125
- const root = (0, import_react85.useRef)(null);
15201
+ const root = (0, import_react86.useRef)(null);
15126
15202
  const mergedRef = useMergedRefs(root, ref);
15127
15203
  const ids = usePartIds(["label", "description", "configuration"], {
15128
15204
  id: props.id,
15129
15205
  readRendered: () => root.current?.getAttribute("data-oprt-ids")
15130
15206
  });
15131
- const [issues, setIssues] = (0, import_react85.useState)([]);
15132
- const [reading, setReading] = (0, import_react85.useState)(false);
15133
- const [feedback, setFeedback] = (0, import_react85.useState)("");
15207
+ const [issues, setIssues] = (0, import_react86.useState)([]);
15208
+ const [reading, setReading] = (0, import_react86.useState)(false);
15209
+ const [feedback, setFeedback] = (0, import_react86.useState)("");
15134
15210
  const isMounted = useIsMounted();
15135
- const generation = (0, import_react85.useRef)(0);
15211
+ const generation = (0, import_react86.useRef)(0);
15136
15212
  const types = accept?.map((token) => token.trim().toLowerCase()) ?? [];
15137
15213
  const configurationError = accept?.some((token) => !validAccept(token.trim())) ? "Invalid accept configuration. Use file extensions or MIME types." : maxFiles !== void 0 && (!Number.isSafeInteger(maxFiles) || maxFiles < 1) ? "Invalid maxFiles configuration. Supply a positive integer." : maxFileSizeBytes !== void 0 && (!Number.isSafeInteger(maxFileSizeBytes) || maxFileSizeBytes < 0) ? "Invalid maxFileSizeBytes configuration. Supply a nonnegative integer." : "";
15138
15214
  const signature = JSON.stringify([types, multiple, String(maxFiles), String(maxFileSizeBytes)]);
15139
- const latest = (0, import_react85.useRef)({ disabled, configurationError, signature, onFiles, onReject });
15215
+ const latest = (0, import_react86.useRef)({ disabled, configurationError, signature, onFiles, onReject });
15140
15216
  latest.current = { disabled, configurationError, signature, onFiles, onReject };
15141
- (0, import_react85.useEffect)(() => {
15217
+ (0, import_react86.useEffect)(() => {
15142
15218
  const requests = generation;
15143
15219
  return () => {
15144
15220
  requests.current++;
15145
15221
  };
15146
15222
  }, []);
15147
- (0, import_react85.useEffect)(() => {
15223
+ (0, import_react86.useEffect)(() => {
15148
15224
  generation.current++;
15149
15225
  setReading(false);
15150
15226
  }, [signature, disabled]);
@@ -15341,7 +15417,7 @@ var FileUploadManifest = {
15341
15417
  };
15342
15418
 
15343
15419
  // src/UploadQueue/UploadQueue.tsx
15344
- var import_react86 = require("react");
15420
+ var import_react87 = require("react");
15345
15421
  var import_class_variance_authority50 = require("class-variance-authority");
15346
15422
  var import_clsx66 = __toESM(require("clsx"), 1);
15347
15423
  var import_jsx_runtime70 = require("react/jsx-runtime");
@@ -15423,7 +15499,7 @@ function describeChanges(before, after) {
15423
15499
  if (after.length === 0 && before.length > 0) parts.push("No files selected.");
15424
15500
  return parts.join(" ");
15425
15501
  }
15426
- var UploadQueue = (0, import_react86.forwardRef)(
15502
+ var UploadQueue = (0, import_react87.forwardRef)(
15427
15503
  ({
15428
15504
  label,
15429
15505
  items,
@@ -15437,13 +15513,13 @@ var UploadQueue = (0, import_react86.forwardRef)(
15437
15513
  "aria-labelledby": labelledBy,
15438
15514
  ...props
15439
15515
  }, ref) => {
15440
- const root = (0, import_react86.useRef)(null);
15516
+ const root = (0, import_react87.useRef)(null);
15441
15517
  const ids = usePartIds(["label"], {
15442
15518
  id: props.id,
15443
15519
  readRendered: () => root.current?.getAttribute("data-oprt-ids")
15444
15520
  });
15445
- const rows = (0, import_react86.useRef)(/* @__PURE__ */ new Map());
15446
- (0, import_react86.useImperativeHandle)(ref, () => root.current, []);
15521
+ const rows = (0, import_react87.useRef)(/* @__PURE__ */ new Map());
15522
+ (0, import_react87.useImperativeHandle)(ref, () => root.current, []);
15447
15523
  const invalidIdentity = hasInvalidIdentity(items);
15448
15524
  const restoreFocus = useRestoreFocusOnRemoval(root, {
15449
15525
  track: (element) => {
@@ -15458,17 +15534,17 @@ var UploadQueue = (0, import_react86.forwardRef)(
15458
15534
  }
15459
15535
  });
15460
15536
  const signature = JSON.stringify(rowsOf(items));
15461
- const announced = (0, import_react86.useRef)(null);
15462
- const [announcement, setAnnouncement] = (0, import_react86.useState)("");
15463
- const lastAnnouncement = (0, import_react86.useRef)("");
15464
- const repeatFrame = (0, import_react86.useRef)(null);
15465
- (0, import_react86.useEffect)(
15537
+ const announced = (0, import_react87.useRef)(null);
15538
+ const [announcement, setAnnouncement] = (0, import_react87.useState)("");
15539
+ const lastAnnouncement = (0, import_react87.useRef)("");
15540
+ const repeatFrame = (0, import_react87.useRef)(null);
15541
+ (0, import_react87.useEffect)(
15466
15542
  () => () => {
15467
15543
  if (repeatFrame.current !== null) cancelAnimationFrame(repeatFrame.current);
15468
15544
  },
15469
15545
  []
15470
15546
  );
15471
- (0, import_react86.useEffect)(() => {
15547
+ (0, import_react87.useEffect)(() => {
15472
15548
  const after = JSON.parse(signature);
15473
15549
  const before = announced.current;
15474
15550
  announced.current = after;
@@ -15492,7 +15568,7 @@ var UploadQueue = (0, import_react86.forwardRef)(
15492
15568
  }, [signature]);
15493
15569
  const unknownStates = items.filter((item) => !isKnownState(item.state)).map((item) => item.state);
15494
15570
  const unknownKey = JSON.stringify(unknownStates);
15495
- (0, import_react86.useEffect)(() => {
15571
+ (0, import_react87.useEffect)(() => {
15496
15572
  if (process.env.NODE_ENV === "production") return;
15497
15573
  for (const state of JSON.parse(unknownKey)) reportUnknownState(state);
15498
15574
  }, [unknownKey]);
@@ -15551,7 +15627,7 @@ var UploadQueue = (0, import_react86.forwardRef)(
15551
15627
  }
15552
15628
  )
15553
15629
  ] }),
15554
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: "m-0 text-oprt-text-dim", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ByteCountLabel, { value: item.sizeBytes }) }),
15630
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: "m-0 text-oprt-text-dim oprt-wrap-anywhere", children: /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(ByteCountLabel, { value: item.sizeBytes }) }),
15555
15631
  item.message && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: "m-0 oprt-wrap-anywhere", children: item.message }),
15556
15632
  transferring && (invalidProgress ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: "m-0 text-oprt-error", children: "Invalid progress counts." }) : item.totalBytes === 0 ? /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { className: "m-0 text-oprt-text-dim", children: `0${NUMBER_UNIT_SPACE}bytes total; no percentage available.` }) : /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
15557
15633
  /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
@@ -15561,7 +15637,7 @@ var UploadQueue = (0, import_react86.forwardRef)(
15561
15637
  ...item.totalBytes !== void 0 && validLoaded ? { value: item.loadedBytes, max: item.totalBytes } : {}
15562
15638
  }
15563
15639
  ),
15564
- /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("p", { className: "m-0 font-mono tabular-nums text-oprt-text-dim", children: [
15640
+ /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("p", { className: "m-0 font-mono tabular-nums text-oprt-text-dim oprt-wrap-anywhere", children: [
15565
15641
  validLoaded ? `${item.loadedBytes}${NUMBER_UNIT_SPACE}bytes transferred` : "Transferred byte count unavailable",
15566
15642
  item.totalBytes !== void 0 ? ` of ${item.totalBytes}${NUMBER_UNIT_SPACE}bytes` : "; total unknown",
15567
15643
  "."
@@ -15653,7 +15729,7 @@ var UploadQueueManifest = {
15653
15729
  };
15654
15730
 
15655
15731
  // src/AttachmentPreview/AttachmentPreview.tsx
15656
- var import_react87 = require("react");
15732
+ var import_react88 = require("react");
15657
15733
  var import_class_variance_authority51 = require("class-variance-authority");
15658
15734
  var import_clsx67 = __toESM(require("clsx"), 1);
15659
15735
  var import_jsx_runtime71 = require("react/jsx-runtime");
@@ -15676,7 +15752,7 @@ function safeImageSource(src) {
15676
15752
  return false;
15677
15753
  }
15678
15754
  }
15679
- var AttachmentPreview = (0, import_react87.forwardRef)(
15755
+ var AttachmentPreview = (0, import_react88.forwardRef)(
15680
15756
  ({
15681
15757
  label,
15682
15758
  attachment,
@@ -15688,14 +15764,14 @@ var AttachmentPreview = (0, import_react87.forwardRef)(
15688
15764
  "aria-labelledby": labelledBy,
15689
15765
  ...props
15690
15766
  }, ref) => {
15691
- const root = (0, import_react87.useRef)(null);
15767
+ const root = (0, import_react88.useRef)(null);
15692
15768
  const mergedRef = useMergedRefs(root, ref);
15693
15769
  const ids = usePartIds(["label"], {
15694
15770
  id: props.id,
15695
15771
  readRendered: () => root.current?.getAttribute("data-oprt-ids")
15696
15772
  });
15697
15773
  const imageKey = `${attachment.id}\0${preview.kind === "image" ? preview.src : ""}`;
15698
- const [imageState, setImageState] = (0, import_react87.useState)({ key: imageKey, failed: false });
15774
+ const [imageState, setImageState] = (0, import_react88.useState)({ key: imageKey, failed: false });
15699
15775
  if (imageState.key !== imageKey) setImageState({ key: imageKey, failed: false });
15700
15776
  const imageError = preview.kind === "image" ? !safeImageSource(preview.src) ? "Image preview source is not supported." : imageState.key === imageKey && imageState.failed ? "Image preview could not be loaded." : null : null;
15701
15777
  return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
@@ -15725,18 +15801,21 @@ var AttachmentPreview = (0, import_react87.forwardRef)(
15725
15801
  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "oprt-wrap-anywhere", children: attachment.mediaType })
15726
15802
  ] })
15727
15803
  ] }),
15728
- preview.kind === "image" && (imageError ? /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { role: "status", className: "m-0 text-oprt-error", children: imageError }) : /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15729
- "img",
15730
- {
15731
- src: preview.src,
15732
- alt: preview.alt,
15733
- onError: () => setImageState(
15734
- (current) => current.key === imageKey ? { key: imageKey, failed: true } : current
15735
- ),
15736
- className: (0, import_clsx67.default)(PREVIEW_HEIGHT, "max-w-full self-start object-contain")
15737
- },
15738
- imageKey
15739
- )),
15804
+ preview.kind === "image" && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
15805
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("p", { role: "status", className: imageError ? "m-0 text-oprt-error" : "sr-only", children: imageError }),
15806
+ !imageError && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15807
+ "img",
15808
+ {
15809
+ src: preview.src,
15810
+ alt: preview.alt,
15811
+ onError: () => setImageState(
15812
+ (current) => current.key === imageKey ? { key: imageKey, failed: true } : current
15813
+ ),
15814
+ className: (0, import_clsx67.default)(PREVIEW_HEIGHT, "max-w-full self-start object-contain")
15815
+ },
15816
+ imageKey
15817
+ )
15818
+ ] }),
15740
15819
  preview.kind === "text" && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
15741
15820
  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
15742
15821
  "pre",
@@ -15830,7 +15909,7 @@ var AttachmentPreviewManifest = {
15830
15909
  };
15831
15910
 
15832
15911
  // src/JobStatus/JobStatus.tsx
15833
- var import_react88 = require("react");
15912
+ var import_react89 = require("react");
15834
15913
  var import_class_variance_authority52 = require("class-variance-authority");
15835
15914
  var import_clsx68 = __toESM(require("clsx"), 1);
15836
15915
 
@@ -15890,7 +15969,7 @@ var import_jsx_runtime72 = require("react/jsx-runtime");
15890
15969
  var jobStyles = (0, import_class_variance_authority52.cva)(
15891
15970
  "flex min-w-0 flex-col gap-2u border border-oprt-border p-2u font-sans text-oprt-base normal-case text-oprt-text outline-hidden focus-visible:shadow-oprt-focus"
15892
15971
  );
15893
- var JobStatus = (0, import_react88.forwardRef)((allProps, ref) => {
15972
+ var JobStatus = (0, import_react89.forwardRef)((allProps, ref) => {
15894
15973
  const {
15895
15974
  jobId,
15896
15975
  label,
@@ -15916,8 +15995,8 @@ var JobStatus = (0, import_react88.forwardRef)((allProps, ref) => {
15916
15995
  const canRetry = !!onRetryRequest && ["failed", "partial", "canceled"].includes(state);
15917
15996
  const blocked = disabled || requestPending !== null;
15918
15997
  const pendingText = requestPending ? `${requestPending === "cancel" ? "Cancellation" : "Retry"} request pending. Awaiting an application update.` : "";
15919
- const [spokenText, setSpokenText] = (0, import_react88.useState)(pendingText);
15920
- (0, import_react88.useEffect)(() => {
15998
+ const [spokenText, setSpokenText] = (0, import_react89.useState)(pendingText);
15999
+ (0, import_react89.useEffect)(() => {
15921
16000
  let second = 0;
15922
16001
  const first = requestAnimationFrame(() => {
15923
16002
  second = requestAnimationFrame(() => setSpokenText(pendingText));
@@ -15991,7 +16070,7 @@ var JobStatus = (0, import_react88.forwardRef)((allProps, ref) => {
15991
16070
  JobStatus.displayName = "JobStatus";
15992
16071
 
15993
16072
  // src/BulkActionBar/BulkActionBar.tsx
15994
- var import_react89 = require("react");
16073
+ var import_react90 = require("react");
15995
16074
  var import_class_variance_authority53 = require("class-variance-authority");
15996
16075
  var import_clsx69 = __toESM(require("clsx"), 1);
15997
16076
 
@@ -16038,7 +16117,7 @@ var import_jsx_runtime73 = require("react/jsx-runtime");
16038
16117
  var barStyles2 = (0, import_class_variance_authority53.cva)(
16039
16118
  "flex min-w-0 flex-col gap-2u border border-oprt-border bg-oprt-surface-1 p-2u font-sans text-oprt-base text-oprt-text outline-hidden focus-visible:shadow-oprt-focus"
16040
16119
  );
16041
- var BulkActionBar = (0, import_react89.forwardRef)(
16120
+ var BulkActionBar = (0, import_react90.forwardRef)(
16042
16121
  ({
16043
16122
  label,
16044
16123
  selection,
@@ -16050,7 +16129,7 @@ var BulkActionBar = (0, import_react89.forwardRef)(
16050
16129
  headingLevel = 3,
16051
16130
  className
16052
16131
  }, ref) => {
16053
- const id = (0, import_react89.useId)();
16132
+ const id = (0, import_react90.useId)();
16054
16133
  const focus = useActionFocus(ref);
16055
16134
  const Heading5 = `h${headingLevel}`;
16056
16135
  const invalidSelection = selectionError(selection);
@@ -16211,7 +16290,7 @@ var BulkActionBarManifest = {
16211
16290
  };
16212
16291
 
16213
16292
  // src/BulkResults/BulkResults.tsx
16214
- var import_react90 = require("react");
16293
+ var import_react91 = require("react");
16215
16294
  var import_class_variance_authority54 = require("class-variance-authority");
16216
16295
  var import_clsx70 = __toESM(require("clsx"), 1);
16217
16296
  var import_jsx_runtime74 = require("react/jsx-runtime");
@@ -16234,7 +16313,7 @@ var COLUMNS = [
16234
16313
  { heading: "Details", width: "min-w-16u" },
16235
16314
  { heading: "Actions", width: "" }
16236
16315
  ];
16237
- var BulkResults = (0, import_react90.forwardRef)(
16316
+ var BulkResults = (0, import_react91.forwardRef)(
16238
16317
  ({
16239
16318
  label,
16240
16319
  selection,
@@ -16247,10 +16326,10 @@ var BulkResults = (0, import_react90.forwardRef)(
16247
16326
  className
16248
16327
  }, ref) => {
16249
16328
  const Heading5 = `h${headingLevel}`;
16250
- const root = (0, import_react90.useRef)(null);
16251
- (0, import_react90.useImperativeHandle)(ref, () => root.current, []);
16329
+ const root = (0, import_react91.useRef)(null);
16330
+ (0, import_react91.useImperativeHandle)(ref, () => root.current, []);
16252
16331
  const [box, scrolls] = useScrollsSideways();
16253
- const rows = (0, import_react90.useRef)(/* @__PURE__ */ new Map());
16332
+ const rows = (0, import_react91.useRef)(/* @__PURE__ */ new Map());
16254
16333
  const invalidSelection = selectionError(selection);
16255
16334
  const selected = new Set(invalidSelection ? [] : selection.ids);
16256
16335
  const invalidResults = idsError(items.map((item) => item.id)) || (items.some((item) => !selected.has(item.id)) ? "A result ID is outside the selection snapshot." : null) || (items.some(
@@ -16258,13 +16337,13 @@ var BulkResults = (0, import_react90.forwardRef)(
16258
16337
  ) ? "Every result needs a valid state, label, and message." : null);
16259
16338
  const invalidRetries = idsError(pendingRetryIds) || (pendingRetryIds.some((item) => !selected.has(item)) ? "A pending retry ID is outside the selection snapshot." : null);
16260
16339
  const resultMap = new Map((invalidResults ? [] : items).map((item) => [item.id, item]));
16261
- const pending = (0, import_react90.useMemo)(() => new Set(pendingRetryIds), [pendingRetryIds]);
16340
+ const pending = (0, import_react91.useMemo)(() => new Set(pendingRetryIds), [pendingRetryIds]);
16262
16341
  const missing = invalidSelection ? 0 : selection.ids.filter((item) => !resultMap.has(item)).length;
16263
16342
  const succeeded = invalidResults ? 0 : items.filter((item) => item.state === "succeeded").length;
16264
16343
  const ids = invalidSelection ? NO_IDS : selection.ids;
16265
16344
  const size = Number.isFinite(pageSize) && pageSize >= 1 ? Math.floor(pageSize) : DEFAULT_PAGE_SIZE;
16266
16345
  const pageCount = Math.max(1, Math.ceil(ids.length / size));
16267
- const [paging, setPaging] = (0, import_react90.useState)({ snapshot: selection.id, page: 1 });
16346
+ const [paging, setPaging] = (0, import_react91.useState)({ snapshot: selection.id, page: 1 });
16268
16347
  const requestedPage = paging.snapshot === selection.id ? paging.page : 1;
16269
16348
  const page = Math.min(pageCount, Math.max(1, requestedPage));
16270
16349
  const pageIds = ids.length > size ? ids.slice((page - 1) * size, page * size) : ids;
@@ -16282,14 +16361,14 @@ var BulkResults = (0, import_react90.forwardRef)(
16282
16361
  return next?.querySelector("button:not(:disabled)") ?? next?.querySelector("th") ?? root.current;
16283
16362
  }
16284
16363
  });
16285
- const [spoken, setSpoken] = (0, import_react90.useState)("");
16286
- const announced = (0, import_react90.useRef)(new Set(invalidRetries ? [] : pendingRetryIds));
16287
- const latest = (0, import_react90.useRef)({ results: resultMap, pending: pendingRetryIds });
16364
+ const [spoken, setSpoken] = (0, import_react91.useState)("");
16365
+ const announced = (0, import_react91.useRef)(new Set(invalidRetries ? [] : pendingRetryIds));
16366
+ const latest = (0, import_react91.useRef)({ results: resultMap, pending: pendingRetryIds });
16288
16367
  useIsomorphicLayoutEffect(() => {
16289
16368
  latest.current = { results: resultMap, pending: pendingRetryIds };
16290
16369
  });
16291
16370
  const pendingKey = JSON.stringify(pendingRetryIds);
16292
- (0, import_react90.useEffect)(() => {
16371
+ (0, import_react91.useEffect)(() => {
16293
16372
  const current = invalidRetries ? [] : latest.current.pending;
16294
16373
  for (const itemId of [...announced.current])
16295
16374
  if (!current.includes(itemId)) announced.current.delete(itemId);
@@ -16511,7 +16590,7 @@ var BulkResultsManifest = {
16511
16590
  };
16512
16591
 
16513
16592
  // src/MapControls/MapControls.tsx
16514
- var import_react91 = require("react");
16593
+ var import_react92 = require("react");
16515
16594
  var import_react_aria7 = require("react-aria");
16516
16595
  var import_class_variance_authority55 = require("class-variance-authority");
16517
16596
  var import_clsx71 = __toESM(require("clsx"), 1);
@@ -16531,7 +16610,7 @@ var actions = [
16531
16610
  { id: "reset-north", label: "Reset north" },
16532
16611
  { id: "fit", label: "Fit map" }
16533
16612
  ];
16534
- var MapControls = (0, import_react91.forwardRef)(
16613
+ var MapControls = (0, import_react92.forwardRef)(
16535
16614
  ({
16536
16615
  label = "Map controls",
16537
16616
  zoom = null,
@@ -16547,15 +16626,15 @@ var MapControls = (0, import_react91.forwardRef)(
16547
16626
  onBlurCapture,
16548
16627
  ...props
16549
16628
  }, ref) => {
16550
- const root = (0, import_react91.useRef)(null);
16551
- (0, import_react91.useImperativeHandle)(ref, () => root.current, []);
16552
- const labelRef = (0, import_react91.useRef)(null);
16629
+ const root = (0, import_react92.useRef)(null);
16630
+ (0, import_react92.useImperativeHandle)(ref, () => root.current, []);
16631
+ const labelRef = (0, import_react92.useRef)(null);
16553
16632
  const ids = usePartIds(["label"], {
16554
16633
  id,
16555
16634
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
16556
16635
  });
16557
16636
  const readout = (0, import_react_aria7.useNumberFormatter)(READOUT);
16558
- const buttons = (0, import_react91.useRef)(/* @__PURE__ */ new Map());
16637
+ const buttons = (0, import_react92.useRef)(/* @__PURE__ */ new Map());
16559
16638
  const limitsValid = Number.isFinite(minZoom) && Number.isFinite(maxZoom) && minZoom <= maxZoom;
16560
16639
  const validZoom = typeof zoom === "number" && Number.isFinite(zoom) && limitsValid && zoom >= minZoom && zoom <= maxZoom;
16561
16640
  const validBearing = typeof bearing === "number" && Number.isFinite(bearing) && bearing >= 0 && bearing < 360;
@@ -16655,7 +16734,7 @@ var MapControlsManifest = {
16655
16734
  };
16656
16735
 
16657
16736
  // src/LayerControl/LayerControl.tsx
16658
- var import_react92 = require("react");
16737
+ var import_react93 = require("react");
16659
16738
  var import_class_variance_authority56 = require("class-variance-authority");
16660
16739
  var import_clsx72 = __toESM(require("clsx"), 1);
16661
16740
  var import_jsx_runtime76 = require("react/jsx-runtime");
@@ -16665,7 +16744,7 @@ var controlStyles3 = (0, import_class_variance_authority56.cva)(
16665
16744
  var rowStyles = (0, import_class_variance_authority56.cva)(
16666
16745
  "flex min-w-0 flex-col gap-2u border border-oprt-border p-2u outline-hidden focus-visible:shadow-oprt-focus"
16667
16746
  );
16668
- var LayerControl = (0, import_react92.forwardRef)(
16747
+ var LayerControl = (0, import_react93.forwardRef)(
16669
16748
  ({
16670
16749
  label = "Map layers",
16671
16750
  layers,
@@ -16678,14 +16757,14 @@ var LayerControl = (0, import_react92.forwardRef)(
16678
16757
  "aria-labelledby": labelledBy,
16679
16758
  ...props
16680
16759
  }, ref) => {
16681
- const root = (0, import_react92.useRef)(null);
16682
- const labelRef = (0, import_react92.useRef)(null);
16760
+ const root = (0, import_react93.useRef)(null);
16761
+ const labelRef = (0, import_react93.useRef)(null);
16683
16762
  const ids = usePartIds(["label"], {
16684
16763
  id,
16685
16764
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
16686
16765
  });
16687
- const rows = (0, import_react92.useRef)(/* @__PURE__ */ new Map());
16688
- (0, import_react92.useImperativeHandle)(ref, () => root.current, []);
16766
+ const rows = (0, import_react93.useRef)(/* @__PURE__ */ new Map());
16767
+ (0, import_react93.useImperativeHandle)(ref, () => root.current, []);
16689
16768
  const invalidIds = layers.some(
16690
16769
  (item, index) => !item.id.trim() || layers.findIndex((other) => other.id === item.id) !== index
16691
16770
  );
@@ -16813,7 +16892,7 @@ var LayerControl = (0, import_react92.forwardRef)(
16813
16892
  {
16814
16893
  size: "sm",
16815
16894
  variant: "tertiary",
16816
- "aria-label": `Move ${item.label} up`,
16895
+ "aria-label": `Move up ${item.label}`,
16817
16896
  disabled: !canMove(index, -1),
16818
16897
  onClick: () => move(index, -1),
16819
16898
  children: "Move up"
@@ -16824,7 +16903,7 @@ var LayerControl = (0, import_react92.forwardRef)(
16824
16903
  {
16825
16904
  size: "sm",
16826
16905
  variant: "tertiary",
16827
- "aria-label": `Move ${item.label} down`,
16906
+ "aria-label": `Move down ${item.label}`,
16828
16907
  disabled: !canMove(index, 1),
16829
16908
  onClick: () => move(index, 1),
16830
16909
  children: "Move down"
@@ -16876,7 +16955,7 @@ var LayerControlManifest = {
16876
16955
  };
16877
16956
 
16878
16957
  // src/MapLegend/MapLegend.tsx
16879
- var import_react93 = require("react");
16958
+ var import_react94 = require("react");
16880
16959
  var import_class_variance_authority57 = require("class-variance-authority");
16881
16960
  var import_clsx73 = __toESM(require("clsx"), 1);
16882
16961
  var import_jsx_runtime77 = require("react/jsx-runtime");
@@ -16901,9 +16980,9 @@ var symbolStyles = (0, import_class_variance_authority57.cva)("block shrink-0 fo
16901
16980
  defaultVariants: { variant: "neutral", pattern: "solid" }
16902
16981
  });
16903
16982
  var kinds = { point: "Point", line: "Line", area: "Area" };
16904
- var MapLegend = (0, import_react93.forwardRef)(
16983
+ var MapLegend = (0, import_react94.forwardRef)(
16905
16984
  ({ label = "Map legend", items, className, id, "aria-labelledby": labelledBy, ...props }, ref) => {
16906
- const labelRef = (0, import_react93.useRef)(null);
16985
+ const labelRef = (0, import_react94.useRef)(null);
16907
16986
  const ids = usePartIds(["label"], {
16908
16987
  id,
16909
16988
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
@@ -16987,7 +17066,7 @@ var MapLegendManifest = {
16987
17066
  };
16988
17067
 
16989
17068
  // src/MapScale/MapScale.tsx
16990
- var import_react94 = require("react");
17069
+ var import_react95 = require("react");
16991
17070
  var import_react_aria8 = require("react-aria");
16992
17071
  var import_class_variance_authority58 = require("class-variance-authority");
16993
17072
  var import_clsx74 = __toESM(require("clsx"), 1);
@@ -17038,7 +17117,7 @@ function scale2(metersPerPixel, width, units) {
17038
17117
  if (!Number.isFinite(pixels) || pixels <= 0 || pixels > width) return null;
17039
17118
  return { pixels, distance, unit };
17040
17119
  }
17041
- var MapScale = (0, import_react94.forwardRef)((allProps, ref) => {
17120
+ var MapScale = (0, import_react95.forwardRef)((allProps, ref) => {
17042
17121
  const {
17043
17122
  label = "Map scale",
17044
17123
  metersPerPixel = null,
@@ -17052,13 +17131,13 @@ var MapScale = (0, import_react94.forwardRef)((allProps, ref) => {
17052
17131
  if (process.env.NODE_ENV !== "production") {
17053
17132
  devValidate("MapScale", MapScaleManifest.MapScale.props, { ...allProps });
17054
17133
  }
17055
- const labelRef = (0, import_react94.useRef)(null);
17134
+ const labelRef = (0, import_react95.useRef)(null);
17056
17135
  const ids = usePartIds(["label"], {
17057
17136
  id,
17058
17137
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
17059
17138
  });
17060
17139
  const format = (0, import_react_aria8.useNumberFormatter)(DISTANCE);
17061
- const available = (0, import_react94.useRef)(null);
17140
+ const available = (0, import_react95.useRef)(null);
17062
17141
  const measuredWidth = useElementWidth(available, {
17063
17142
  initial: null
17064
17143
  });
@@ -17105,7 +17184,7 @@ var MapScale = (0, import_react94.forwardRef)((allProps, ref) => {
17105
17184
  MapScale.displayName = "MapScale";
17106
17185
 
17107
17186
  // src/MediaFrame/MediaFrame.tsx
17108
- var import_react95 = require("react");
17187
+ var import_react96 = require("react");
17109
17188
  var import_react_aria9 = require("react-aria");
17110
17189
  var import_class_variance_authority59 = require("class-variance-authority");
17111
17190
  var import_clsx75 = __toESM(require("clsx"), 1);
@@ -17171,7 +17250,7 @@ var EXACT_NUMBER2 = { maximumSignificantDigits: 21 };
17171
17250
  var frameStyles = (0, import_class_variance_authority59.cva)(
17172
17251
  "flex min-w-0 flex-col border border-oprt-border bg-oprt-surface-1 font-sans text-oprt-base normal-case text-oprt-text"
17173
17252
  );
17174
- var MediaFrame = (0, import_react95.forwardRef)((allProps, ref) => {
17253
+ var MediaFrame = (0, import_react96.forwardRef)((allProps, ref) => {
17175
17254
  const {
17176
17255
  label,
17177
17256
  state,
@@ -17191,7 +17270,7 @@ var MediaFrame = (0, import_react95.forwardRef)((allProps, ref) => {
17191
17270
  if (process.env.NODE_ENV !== "production") {
17192
17271
  devValidate("MediaFrame", MediaFrameManifest.MediaFrame.props, { ...allProps });
17193
17272
  }
17194
- const labelRef = (0, import_react95.useRef)(null);
17273
+ const labelRef = (0, import_react96.useRef)(null);
17195
17274
  const ids = usePartIds(["label"], {
17196
17275
  id,
17197
17276
  readRendered: () => labelRef.current?.id.replace(/-label$/, "")
@@ -17267,7 +17346,7 @@ MediaFrame.displayName = "MediaFrame";
17267
17346
  // src/PlaybackControls/PlaybackControls.tsx
17268
17347
  var import_class_variance_authority60 = require("class-variance-authority");
17269
17348
  var import_clsx76 = __toESM(require("clsx"), 1);
17270
- var import_react96 = require("react");
17349
+ var import_react97 = require("react");
17271
17350
  var import_react_aria_components27 = require("react-aria-components");
17272
17351
  var import_jsx_runtime80 = require("react/jsx-runtime");
17273
17352
  var rootStyles8 = (0, import_class_variance_authority60.cva)(
@@ -17322,7 +17401,7 @@ function arrowDirection(key, rightToLeft) {
17322
17401
  if (key === "ArrowLeft" || key === "Left") return rightToLeft ? 1 : -1;
17323
17402
  return 0;
17324
17403
  }
17325
- var PlaybackControls = (0, import_react96.forwardRef)(
17404
+ var PlaybackControls = (0, import_react97.forwardRef)(
17326
17405
  ({
17327
17406
  start,
17328
17407
  end,
@@ -17346,12 +17425,12 @@ var PlaybackControls = (0, import_react96.forwardRef)(
17346
17425
  onBlurCapture,
17347
17426
  ...props
17348
17427
  }, ref) => {
17349
- const descriptionId = (0, import_react96.useId)();
17350
- const root = (0, import_react96.useRef)(null);
17351
- (0, import_react96.useImperativeHandle)(ref, () => root.current, []);
17352
- const previousRef = (0, import_react96.useRef)(null);
17353
- const playRef = (0, import_react96.useRef)(null);
17354
- const nextRef = (0, import_react96.useRef)(null);
17428
+ const descriptionId = (0, import_react97.useId)();
17429
+ const root = (0, import_react97.useRef)(null);
17430
+ (0, import_react97.useImperativeHandle)(ref, () => root.current, []);
17431
+ const previousRef = (0, import_react97.useRef)(null);
17432
+ const playRef = (0, import_react97.useRef)(null);
17433
+ const nextRef = (0, import_react97.useRef)(null);
17355
17434
  const { direction } = (0, import_react_aria_components27.useLocale)();
17356
17435
  const validBounds = validTime(start) && validTime(end);
17357
17436
  const validRange = validBounds && start < end;
@@ -17363,7 +17442,7 @@ var PlaybackControls = (0, import_react96.forwardRef)(
17363
17442
  const sliderEnd = validRange ? end : 1;
17364
17443
  const displayValue = validRange && validCursor ? Math.min(end, Math.max(start, value)) : sliderStart;
17365
17444
  const positionText = validRange && validCursor ? formatTime(displayValue) : validBounds && start === end ? formatTime(start) : "Unknown playback position";
17366
- const events = (0, import_react96.useMemo)(
17445
+ const events = (0, import_react97.useMemo)(
17367
17446
  () => [
17368
17447
  ...new Set(
17369
17448
  (eventTimes ?? []).filter((time) => validTime(time) && time >= start && time <= end)
@@ -17621,7 +17700,7 @@ var PlaybackControlsManifest = {
17621
17700
  };
17622
17701
 
17623
17702
  // package.json
17624
- var version3 = "0.1.0";
17703
+ var version3 = "0.2.1";
17625
17704
 
17626
17705
  // src/version.ts
17627
17706
  var VERSION = version3;