@homebound/beam 3.107.0 → 3.108.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.d.cts CHANGED
@@ -7562,6 +7562,7 @@ declare function AiLoader<X extends Only<Xss<Margin>, X>>(props: AiLoaderProps<X
7562
7562
  type AiLoadingPanelProps = {
7563
7563
  title?: string;
7564
7564
  message?: ReactNode;
7565
+ omitBg?: boolean;
7565
7566
  };
7566
7567
  /**
7567
7568
  * Tells the user AI work is running, and that they're free to go do something else.
@@ -7576,8 +7577,6 @@ type AiPanelProps = {
7576
7577
  /** Background padding. `lg` = 24 all around; `sm` = 24 horizontal, 16 vertical. */
7577
7578
  padding?: AiPanelPadding;
7578
7579
  children?: ReactNode;
7579
- } & AriaAttributes & {
7580
- role?: AriaRole;
7581
7580
  };
7582
7581
  /**
7583
7582
  * Escape hatch for one-off AI chrome — prefer a pre-composed component. See {@link AiBanner}, {@link AiLoadingPanel}, {@link AiSlimBanner}, or `aiMode` on {@link FormSectionLayout} / {@link StepperLayout} / {@link FocusedFormLayout} / {@link Modal}.
@@ -7590,6 +7589,8 @@ type AiCardProps = {
7590
7589
  /** Logo height and logo-to-card gap. */
7591
7590
  size?: AiCardSize;
7592
7591
  children?: ReactNode;
7592
+ } & AriaAttributes & {
7593
+ role?: AriaRole;
7593
7594
  };
7594
7595
  /**
7595
7596
  * Escape hatch for one-off AI chrome — prefer a pre-composed component. See {@link AiBanner}, {@link AiLoadingPanel}, {@link AiSlimBanner}, or `aiMode` on {@link FormSectionLayout} / {@link StepperLayout} / {@link FocusedFormLayout} / {@link Modal}.
@@ -7917,6 +7918,8 @@ type DnDGridProps = {
7917
7918
  gridStyles?: GridStyles;
7918
7919
  /** Defines the styling for the GridItem that is actively being moved */
7919
7920
  activeItemStyles?: Properties;
7921
+ /** Restrict drag movement to one axis. Omit to allow free 2D movement. */
7922
+ lockAxis?: "x" | "y";
7920
7923
  /** Returns the new order of the GridItems. */
7921
7924
  onReorder: (items: string[]) => void;
7922
7925
  };
package/dist/index.d.ts CHANGED
@@ -7562,6 +7562,7 @@ declare function AiLoader<X extends Only<Xss<Margin>, X>>(props: AiLoaderProps<X
7562
7562
  type AiLoadingPanelProps = {
7563
7563
  title?: string;
7564
7564
  message?: ReactNode;
7565
+ omitBg?: boolean;
7565
7566
  };
7566
7567
  /**
7567
7568
  * Tells the user AI work is running, and that they're free to go do something else.
@@ -7576,8 +7577,6 @@ type AiPanelProps = {
7576
7577
  /** Background padding. `lg` = 24 all around; `sm` = 24 horizontal, 16 vertical. */
7577
7578
  padding?: AiPanelPadding;
7578
7579
  children?: ReactNode;
7579
- } & AriaAttributes & {
7580
- role?: AriaRole;
7581
7580
  };
7582
7581
  /**
7583
7582
  * Escape hatch for one-off AI chrome — prefer a pre-composed component. See {@link AiBanner}, {@link AiLoadingPanel}, {@link AiSlimBanner}, or `aiMode` on {@link FormSectionLayout} / {@link StepperLayout} / {@link FocusedFormLayout} / {@link Modal}.
@@ -7590,6 +7589,8 @@ type AiCardProps = {
7590
7589
  /** Logo height and logo-to-card gap. */
7591
7590
  size?: AiCardSize;
7592
7591
  children?: ReactNode;
7592
+ } & AriaAttributes & {
7593
+ role?: AriaRole;
7593
7594
  };
7594
7595
  /**
7595
7596
  * Escape hatch for one-off AI chrome — prefer a pre-composed component. See {@link AiBanner}, {@link AiLoadingPanel}, {@link AiSlimBanner}, or `aiMode` on {@link FormSectionLayout} / {@link StepperLayout} / {@link FocusedFormLayout} / {@link Modal}.
@@ -7917,6 +7918,8 @@ type DnDGridProps = {
7917
7918
  gridStyles?: GridStyles;
7918
7919
  /** Defines the styling for the GridItem that is actively being moved */
7919
7920
  activeItemStyles?: Properties;
7921
+ /** Restrict drag movement to one axis. Omit to allow free 2D movement. */
7922
+ lockAxis?: "x" | "y";
7920
7923
  /** Returns the new order of the GridItems. */
7921
7924
  onReorder: (items: string[]) => void;
7922
7925
  };
package/dist/index.js CHANGED
@@ -19033,7 +19033,7 @@ function AiCard(props) {
19033
19033
  "--backgroundColor": "var(--b-surface)"
19034
19034
  }],
19035
19035
  boxShadow: "bshBasic"
19036
- }), ...tid.card, children })
19036
+ }), ...others, ...tid.card, children })
19037
19037
  ] });
19038
19038
  }
19039
19039
  var aiBackgroundPaddingCss = {
@@ -19219,13 +19219,14 @@ import { jsx as jsx113, jsxs as jsxs62 } from "react/jsx-runtime";
19219
19219
  function AiLoadingPanel(props) {
19220
19220
  const {
19221
19221
  title = "Importing Details...",
19222
- message = defaultMessage
19222
+ message = defaultMessage,
19223
+ omitBg = false
19223
19224
  } = props;
19224
19225
  const tid = useTestIds(props, "aiLoadingPanel");
19225
- return (
19226
+ const card = (
19226
19227
  // `status` rather than `alert` so assistive tech waits for a pause instead of interrupting, and
19227
19228
  // `aria-busy` so it knows the surrounding content is still settling.
19228
- /* @__PURE__ */ jsx113(AiPanel, { role: "status", "aria-busy": true, padding: "lg", ...tid, children: /* @__PURE__ */ jsx113(AiCard, { size: "lg", ...tid, children: /* @__PURE__ */ jsxs62("div", { className: "df fdc aic gap1 w100 pt2 pb2 pl3 pr3", children: [
19229
+ /* @__PURE__ */ jsx113(AiCard, { role: "status", "aria-busy": true, size: "lg", ...tid, children: /* @__PURE__ */ jsxs62("div", { className: "df fdc aic gap1 w100 pt2 pb2 pl3 pr3", children: [
19229
19230
  /* @__PURE__ */ jsx113(AiLoader, {}),
19230
19231
  /* @__PURE__ */ jsx113("span", { className: "fw6 fz_18px lh_28px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent", ...tid.title, children: title }),
19231
19232
  /* @__PURE__ */ jsx113("span", { ...trussProps77({
@@ -19237,8 +19238,9 @@ function AiLoadingPanel(props) {
19237
19238
  }],
19238
19239
  textAlign: "tac"
19239
19240
  }), ...tid.message, children: message })
19240
- ] }) }) })
19241
+ ] }) })
19241
19242
  );
19243
+ return omitBg ? card : /* @__PURE__ */ jsx113(AiPanel, { padding: "lg", ...tid, children: card });
19242
19244
  }
19243
19245
  var defaultMessage = "This process can take a few minutes. Feel free to keep working in another tab. Once imported, you may edit or add to content before saving.";
19244
19246
 
@@ -20061,7 +20063,7 @@ function SuperDrawer() {
20061
20063
  }
20062
20064
 
20063
20065
  // src/components/Layout/FormPageLayout.tsx
20064
- import React19, { createRef, useCallback as useCallback29, useEffect as useEffect26, useMemo as useMemo37, useRef as useRef53, useState as useState44 } from "react";
20066
+ import React19, { createRef, useCallback as useCallback29, useEffect as useEffect27, useMemo as useMemo37, useRef as useRef53, useState as useState44 } from "react";
20065
20067
  import { useButton as useButton9, useFocusRing as useFocusRing14 } from "react-aria";
20066
20068
 
20067
20069
  // src/forms/BoundCheckboxField.tsx
@@ -21245,7 +21247,7 @@ FormHeading.isFormHeading = true;
21245
21247
 
21246
21248
  // src/components/DnDGrid/DnDGrid.tsx
21247
21249
  import equal2 from "fast-deep-equal";
21248
- import { useCallback as useCallback27, useRef as useRef50 } from "react";
21250
+ import { useCallback as useCallback27, useEffect as useEffect26, useRef as useRef50 } from "react";
21249
21251
 
21250
21252
  // src/components/DnDGrid/DnDGridContext.tsx
21251
21253
  import { createContext as createContext9, useContext as useContext19 } from "react";
@@ -21266,7 +21268,8 @@ function DnDGrid(props) {
21266
21268
  children,
21267
21269
  gridStyles,
21268
21270
  onReorder,
21269
- activeItemStyles
21271
+ activeItemStyles,
21272
+ lockAxis
21270
21273
  } = props;
21271
21274
  const gridEl = useRef50(null);
21272
21275
  const dragEl = useRef50();
@@ -21333,15 +21336,15 @@ function DnDGrid(props) {
21333
21336
  const clientY = "clientY" in e ? e.clientY : e.touches[0].clientY;
21334
21337
  const left = dragEl.current.style.left ? parseInt(dragEl.current.style.left) : 0;
21335
21338
  const top = dragEl.current.style.top ? parseInt(dragEl.current.style.top) : 0;
21336
- const x = clientX - transformFrom.current.x - left;
21337
- const y = clientY - transformFrom.current.y - top;
21339
+ const x = lockAxis === "y" ? 0 : clientX - transformFrom.current.x - left;
21340
+ const y = lockAxis === "x" ? 0 : clientY - transformFrom.current.y - top;
21338
21341
  dragEl.current.style.transform = `translate(${x}px, ${y}px)`;
21339
21342
  const maybeTarget = "touches" in e ? document.elementFromPoint(clientX, clientY) : e.target;
21340
21343
  const target = maybeTarget instanceof HTMLElement ? maybeTarget?.closest(`[${gridItemIdKey}]`) : void 0;
21341
21344
  if (target instanceof HTMLElement && target !== cloneEl.current && target !== dragEl.current) {
21342
21345
  const targetPos = target.getBoundingClientRect();
21343
21346
  const clonePos = cloneEl.current.getBoundingClientRect();
21344
- const useYAxis = Math.abs(targetPos.top - clonePos.top) >= Math.abs(targetPos.left - clonePos.left);
21347
+ const useYAxis = lockAxis === "y" ? true : lockAxis === "x" ? false : Math.abs(targetPos.top - clonePos.top) >= Math.abs(targetPos.left - clonePos.left);
21345
21348
  const isHalfwayPassedTarget = useYAxis ? (clientY - targetPos.top) / (targetPos.bottom - targetPos.top) > 0.5 : (clientX - targetPos.left) / (targetPos.right - targetPos.left) > 0.5;
21346
21349
  const shouldInsert = isHalfwayPassedTarget && target.nextSibling !== cloneEl.current || !isHalfwayPassedTarget && target.previousSibling !== cloneEl.current;
21347
21350
  if (shouldInsert) {
@@ -21349,7 +21352,18 @@ function DnDGrid(props) {
21349
21352
  }
21350
21353
  }
21351
21354
  }
21352
- }, []);
21355
+ }, [lockAxis]);
21356
+ const onDragEnd = useCallback27((e) => {
21357
+ if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
21358
+ e.preventDefault();
21359
+ cloneEl.current.replaceWith(dragEl.current);
21360
+ gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
21361
+ gridEl.current.style.cursor = "auto";
21362
+ cloneEl.current = void 0;
21363
+ commitReorder();
21364
+ removePointerDragListeners(onMove, onDragEnd);
21365
+ }
21366
+ }, [commitReorder, onMove]);
21353
21367
  const onDragStart = useCallback27((e) => {
21354
21368
  if (!reorderViaKeyboard.current && dragEl.current && gridEl.current) {
21355
21369
  const rect = dragEl.current.getBoundingClientRect();
@@ -21375,22 +21389,12 @@ function DnDGrid(props) {
21375
21389
  dragEl.current.style.width = `${rect.width}px`;
21376
21390
  dragEl.current.style.height = `${rect.height}px`;
21377
21391
  gridEl.current.style.cursor = "grabbing";
21378
- gridEl.current.addEventListener("mousemove", onMove);
21379
- gridEl.current.addEventListener("touchmove", onMove);
21380
- }
21381
- }, [initReorder, onMove]);
21382
- const onDragEnd = useCallback27((e) => {
21383
- if (!reorderViaKeyboard.current && dragEl.current && cloneEl.current && gridEl.current) {
21384
- e.preventDefault();
21385
- cloneEl.current.replaceWith(dragEl.current);
21386
- gridEl.current.querySelectorAll(`[${gridCloneKey}]`).forEach((el) => el.remove());
21387
- gridEl.current.style.cursor = "auto";
21388
- cloneEl.current = void 0;
21389
- commitReorder();
21390
- gridEl.current.removeEventListener("mousemove", onMove);
21391
- gridEl.current.removeEventListener("touchmove", onMove);
21392
+ addPointerDragListeners(onMove, onDragEnd);
21392
21393
  }
21393
- }, [commitReorder, onMove]);
21394
+ }, [initReorder, onMove, onDragEnd]);
21395
+ useEffect26(() => {
21396
+ return () => removePointerDragListeners(onMove, onDragEnd);
21397
+ }, [onMove, onDragEnd]);
21394
21398
  const onDragHandleKeyDown = useCallback27((e) => {
21395
21399
  const moveHandle = e.target;
21396
21400
  if (dragEl.current instanceof HTMLElement && moveHandle instanceof HTMLElement && gridEl.current) {
@@ -21424,8 +21428,8 @@ function DnDGrid(props) {
21424
21428
  document.removeEventListener("pointerdown", cancelReorder);
21425
21429
  return;
21426
21430
  }
21427
- const movingLeft = ["ArrowLeft", "ArrowUp"].includes(e.key);
21428
- const movingRight = ["ArrowRight", "ArrowDown"].includes(e.key);
21431
+ const movingLeft = lockAxis !== "x" && e.key === "ArrowUp" || lockAxis !== "y" && e.key === "ArrowLeft";
21432
+ const movingRight = lockAxis !== "x" && e.key === "ArrowDown" || lockAxis !== "y" && e.key === "ArrowRight";
21429
21433
  if (movingLeft || movingRight) {
21430
21434
  e.preventDefault();
21431
21435
  const gridItems = getGridItems();
@@ -21438,7 +21442,7 @@ function DnDGrid(props) {
21438
21442
  moveHandle.focus();
21439
21443
  }
21440
21444
  }
21441
- }, [cancelReorder, commitReorder, initReorder, getGridItems]);
21445
+ }, [cancelReorder, commitReorder, initReorder, getGridItems, lockAxis]);
21442
21446
  return /* @__PURE__ */ jsx147(DnDGridContext.Provider, { value: {
21443
21447
  dragEl,
21444
21448
  onDragHandleKeyDown
@@ -21452,6 +21456,22 @@ function DnDGrid(props) {
21452
21456
  }
21453
21457
  var gridItemIdKey = "dndgrid-itemid";
21454
21458
  var gridCloneKey = "dndgrid-clone";
21459
+ function addPointerDragListeners(onMove, onEnd) {
21460
+ document.addEventListener("mousemove", onMove);
21461
+ document.addEventListener("touchmove", onMove);
21462
+ document.addEventListener("mouseup", onEnd);
21463
+ document.addEventListener("touchend", onEnd);
21464
+ document.addEventListener("pointercancel", onEnd);
21465
+ document.addEventListener("touchcancel", onEnd);
21466
+ }
21467
+ function removePointerDragListeners(onMove, onEnd) {
21468
+ document.removeEventListener("mousemove", onMove);
21469
+ document.removeEventListener("touchmove", onMove);
21470
+ document.removeEventListener("mouseup", onEnd);
21471
+ document.removeEventListener("touchend", onEnd);
21472
+ document.removeEventListener("pointercancel", onEnd);
21473
+ document.removeEventListener("touchcancel", onEnd);
21474
+ }
21455
21475
  function applyActiveStyles(el, activeStyles3) {
21456
21476
  const {
21457
21477
  className,
@@ -21840,7 +21860,7 @@ function DraggableChildren(props) {
21840
21860
  }
21841
21861
  });
21842
21862
  };
21843
- return /* @__PURE__ */ jsx153(DnDGrid, { onReorder: handleReorder, gridStyles: {
21863
+ return /* @__PURE__ */ jsx153(DnDGrid, { onReorder: handleReorder, lockAxis: "y", gridStyles: {
21844
21864
  gridTemplateColumns: "gtc_minmax_0_1fr",
21845
21865
  gap: "gap3"
21846
21866
  }, children: sorted.map((child) => /* @__PURE__ */ jsx153(FormSectionChild, { ...child, ...tid }, child.id)) });
@@ -22404,7 +22424,7 @@ function useActiveSection(sectionsWithRefs) {
22404
22424
  }, 200, {
22405
22425
  maxWait: 500
22406
22426
  });
22407
- useEffect26(() => {
22427
+ useEffect27(() => {
22408
22428
  if (!("IntersectionObserver" in window)) return;
22409
22429
  const observer3 = new IntersectionObserver((entries) => debouncedIntersectionCallback(entries), {
22410
22430
  /**
@@ -22497,7 +22517,7 @@ function invertSpacing(value) {
22497
22517
 
22498
22518
  // src/components/Layout/GridTableLayout/GridTableLayout.tsx
22499
22519
  import { useResizeObserver as useResizeObserver7 } from "@react-aria/utils";
22500
- import React21, { useCallback as useCallback33, useEffect as useEffect29, useLayoutEffect as useLayoutEffect9, useMemo as useMemo43, useRef as useRef55, useState as useState49 } from "react";
22520
+ import React21, { useCallback as useCallback33, useEffect as useEffect30, useLayoutEffect as useLayoutEffect9, useMemo as useMemo43, useRef as useRef55, useState as useState49 } from "react";
22501
22521
 
22502
22522
  // src/components/Filters/utils.tsx
22503
22523
  function getActiveFilterCount(filter) {
@@ -22523,7 +22543,7 @@ import { mergeProps as mergeProps27 } from "@homebound/truss/runtime";
22523
22543
 
22524
22544
  // src/components/Layout/RightPaneLayout/DocumentScrollRightPane.tsx
22525
22545
  import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-motion";
22526
- import { useEffect as useEffect27 } from "react";
22546
+ import { useEffect as useEffect28 } from "react";
22527
22547
  import { usePreventScroll as usePreventScroll2 } from "react-aria";
22528
22548
  import { createPortal as createPortal6 } from "react-dom";
22529
22549
 
@@ -22597,7 +22617,7 @@ function DocumentScrollRightPane({
22597
22617
  usePreventScroll2({
22598
22618
  isDisabled: !isMobileOverlay
22599
22619
  });
22600
- useEffect27(() => closePane, [closePane]);
22620
+ useEffect28(() => closePane, [closePane]);
22601
22621
  const slideX = sm ? "100%" : paneWidth;
22602
22622
  const pane = /* @__PURE__ */ jsx163(AnimatePresence3, { children: isRightPaneOpen && /* @__PURE__ */ jsx163(motion3.div, { ...tid, ...mergeProps26(void 0, sm ? {
22603
22623
  top: bannerHeightPx
@@ -23259,12 +23279,12 @@ function ConfirmCloseModal(props) {
23259
23279
  }
23260
23280
 
23261
23281
  // src/components/Modal/OpenModal.tsx
23262
- import { useEffect as useEffect28 } from "react";
23282
+ import { useEffect as useEffect29 } from "react";
23263
23283
  import { jsx as jsx175 } from "react/jsx-runtime";
23264
23284
  function OpenModal(props) {
23265
23285
  const { openModal } = useModal();
23266
23286
  const { size, children, keepOpen, aiMode } = props;
23267
- useEffect28(() => {
23287
+ useEffect29(() => {
23268
23288
  if (!keepOpen) {
23269
23289
  openModal({ size, content: children, aiMode });
23270
23290
  }
@@ -23886,7 +23906,7 @@ function GridTableLayoutComponent(props) {
23886
23906
  const tableWrapperRef = useRef55(null);
23887
23907
  useSetTableActionsHeight(tableWrapperRef, tableActionsRef, inDocumentScrollLayout && showTableActions);
23888
23908
  const visibleColumnIds = useComputed(() => api.getVisibleColumnIds(), [api]);
23889
- useEffect29(() => {
23909
+ useEffect30(() => {
23890
23910
  if (layoutState?.setVisibleColumnIds) {
23891
23911
  layoutState.setVisibleColumnIds(visibleColumnIds);
23892
23912
  }
@@ -24059,7 +24079,7 @@ function PreventBrowserScroll({
24059
24079
 
24060
24080
  // src/components/Layout/RightPaneLayout/RightPaneLayout.tsx
24061
24081
  import { AnimatePresence as AnimatePresence4, motion as motion4 } from "framer-motion";
24062
- import { useEffect as useEffect30 } from "react";
24082
+ import { useEffect as useEffect31 } from "react";
24063
24083
  import { trussProps as trussProps105, maybeCssVar as maybeCssVar52 } from "@homebound/truss/runtime";
24064
24084
  import { Fragment as Fragment41, jsx as jsx188, jsxs as jsxs92 } from "react/jsx-runtime";
24065
24085
  var __maybeInc24 = (inc) => {
@@ -24078,7 +24098,7 @@ function RightPaneLayout(props) {
24078
24098
  clearPane,
24079
24099
  closePane
24080
24100
  } = useRightPaneContext();
24081
- useEffect30(() => closePane, [closePane]);
24101
+ useEffect31(() => closePane, [closePane]);
24082
24102
  return /* @__PURE__ */ jsx188("div", { className: "h100 df oxh", children: /* @__PURE__ */ jsxs92(Fragment41, { children: [
24083
24103
  /* @__PURE__ */ jsx188("div", { ...trussProps105({
24084
24104
  ...{
@@ -24190,7 +24210,7 @@ function ScrollableFooter(props) {
24190
24210
 
24191
24211
  // src/components/Layout/TableReviewLayout/TableReviewLayout.tsx
24192
24212
  import { AnimatePresence as AnimatePresence5, motion as motion5 } from "framer-motion";
24193
- import { useEffect as useEffect31, useState as useState50 } from "react";
24213
+ import { useEffect as useEffect32, useState as useState50 } from "react";
24194
24214
 
24195
24215
  // src/components/Layout/TableReviewLayout/SidePanel.tsx
24196
24216
  import { jsx as jsx190, jsxs as jsxs93 } from "react/jsx-runtime";
@@ -24231,7 +24251,7 @@ function TableReviewLayout(props) {
24231
24251
  } = props;
24232
24252
  const tid = useTestIds(props, "tableReviewLayout");
24233
24253
  const [isPanelVisible, setIsPanelVisible] = useState50(!!panelContent);
24234
- useEffect31(() => {
24254
+ useEffect32(() => {
24235
24255
  setIsPanelVisible(!!panelContent);
24236
24256
  }, [panelContent]);
24237
24257
  function handleClosePanel() {
@@ -25316,7 +25336,7 @@ function useResponsiveGrid(props) {
25316
25336
  }
25317
25337
 
25318
25338
  // src/components/Grid/useResponsiveGridItem.ts
25319
- import { useContext as useContext24, useEffect as useEffect32, useMemo as useMemo48 } from "react";
25339
+ import { useContext as useContext24, useEffect as useEffect33, useMemo as useMemo48 } from "react";
25320
25340
  var injectedResponsiveGridClasses = /* @__PURE__ */ new Set();
25321
25341
  var responsiveGridStyleEl;
25322
25342
  function useResponsiveGridItem(props) {
@@ -25346,7 +25366,7 @@ function useResponsiveGridItem(props) {
25346
25366
  };
25347
25367
  }
25348
25368
  function useResponsiveGridItemStyle(className, cssText) {
25349
- useEffect32(
25369
+ useEffect33(
25350
25370
  function() {
25351
25371
  if (!className || !cssText || typeof document === "undefined") return;
25352
25372
  if (!responsiveGridStyleEl) {
@@ -25608,7 +25628,7 @@ var jumpLinkStyles = {
25608
25628
 
25609
25629
  // src/components/MaxLines.tsx
25610
25630
  import { useLayoutEffect as useLayoutEffect10, useResizeObserver as useResizeObserver9 } from "@react-aria/utils";
25611
- import { useCallback as useCallback34, useEffect as useEffect33, useRef as useRef61, useState as useState53 } from "react";
25631
+ import { useCallback as useCallback34, useEffect as useEffect34, useRef as useRef61, useState as useState53 } from "react";
25612
25632
  import { trussProps as trussProps116, maybeCssVar as maybeCssVar57 } from "@homebound/truss/runtime";
25613
25633
  import { jsx as jsx205, jsxs as jsxs103 } from "react/jsx-runtime";
25614
25634
  function MaxLines({
@@ -25622,7 +25642,7 @@ function MaxLines({
25622
25642
  if (!elRef.current) return;
25623
25643
  setHasMore(elRef.current.scrollHeight > elRef.current.clientHeight);
25624
25644
  }, []);
25625
- useEffect33(() => {
25645
+ useEffect34(() => {
25626
25646
  setExpanded(false);
25627
25647
  }, [children]);
25628
25648
  const onResize = useCallback34(() => {
@@ -25655,7 +25675,7 @@ import { camelCase as camelCase6 } from "change-case";
25655
25675
  // src/components/AppNav/AppNavGroup.tsx
25656
25676
  import { useResizeObserver as useResizeObserver10 } from "@react-aria/utils";
25657
25677
  import { camelCase as camelCase5, kebabCase } from "change-case";
25658
- import { useCallback as useCallback36, useEffect as useEffect34, useMemo as useMemo51, useState as useState55 } from "react";
25678
+ import { useCallback as useCallback36, useEffect as useEffect35, useMemo as useMemo51, useState as useState55 } from "react";
25659
25679
 
25660
25680
  // src/components/AppNav/AppNavGroupTrigger.tsx
25661
25681
  import { useMemo as useMemo50, useRef as useRef62 } from "react";
@@ -25895,7 +25915,7 @@ function AppNavGroupDisclosure(props) {
25895
25915
  current: contentEl
25896
25916
  }), [contentEl]);
25897
25917
  const [contentHeight, setContentHeight] = useState55(expanded ? "auto" : "0");
25898
- useEffect34(() => {
25918
+ useEffect35(() => {
25899
25919
  setContentHeight(expanded && contentEl ? `${contentEl.scrollHeight}px` : "0");
25900
25920
  }, [expanded, contentEl]);
25901
25921
  const onResize = useCallback36(() => {
@@ -26045,7 +26065,7 @@ function AppNavItems(props) {
26045
26065
 
26046
26066
  // src/components/Navbar/NavbarMobileMenu.tsx
26047
26067
  import { AnimatePresence as AnimatePresence6, motion as motion6 } from "framer-motion";
26048
- import { useEffect as useEffect35, useState as useState57 } from "react";
26068
+ import { useEffect as useEffect36, useState as useState57 } from "react";
26049
26069
  import { FocusScope as FocusScope5, usePreventScroll as usePreventScroll3 } from "react-aria";
26050
26070
  import { createPortal as createPortal8 } from "react-dom";
26051
26071
  import { useLocation } from "react-router-dom";
@@ -26097,7 +26117,7 @@ function NavbarMobileMenu(props) {
26097
26117
  isDisabled: !isOpen
26098
26118
  });
26099
26119
  const close = () => setIsOpen(false);
26100
- useEffect35(() => {
26120
+ useEffect36(() => {
26101
26121
  close();
26102
26122
  }, [pathname, search]);
26103
26123
  return /* @__PURE__ */ jsxs107(Fragment47, { children: [
@@ -26554,7 +26574,7 @@ import {
26554
26574
  createContext as createContext15,
26555
26575
  useCallback as useCallback38,
26556
26576
  useContext as useContext27,
26557
- useEffect as useEffect36,
26577
+ useEffect as useEffect37,
26558
26578
  useMemo as useMemo54,
26559
26579
  useRef as useRef64,
26560
26580
  useState as useState59
@@ -26588,7 +26608,7 @@ function SideNavLayoutProvider(props) {
26588
26608
  );
26589
26609
  const bp = useBreakpoint();
26590
26610
  const prevMdAndUp = useRef64(bp.mdAndUp);
26591
- useEffect36(() => {
26611
+ useEffect37(() => {
26592
26612
  if (prevMdAndUp.current && !bp.mdAndUp) {
26593
26613
  setNavStateInternal((prev) => prev === "expanded" ? "collapse" : prev);
26594
26614
  }
@@ -26675,7 +26695,7 @@ function SideNav(props) {
26675
26695
  }
26676
26696
 
26677
26697
  // src/components/Snackbar/useSnackbar.tsx
26678
- import { useCallback as useCallback39, useEffect as useEffect37 } from "react";
26698
+ import { useCallback as useCallback39, useEffect as useEffect38 } from "react";
26679
26699
  function useSnackbar() {
26680
26700
  const { setNotices, setOffset } = useSnackbarContext();
26681
26701
  const onClose = useCallback39(
@@ -26725,7 +26745,7 @@ function useSnackbar() {
26725
26745
  [onClose, setNotices]
26726
26746
  );
26727
26747
  const closeNotice = useCallback39((id) => onClose(id), [onClose]);
26728
- const useSnackbarOffset = ({ bottom }) => useEffect37(() => {
26748
+ const useSnackbarOffset = ({ bottom }) => useEffect38(() => {
26729
26749
  setOffset({ bottom });
26730
26750
  return () => setOffset({});
26731
26751
  }, [bottom]);
@@ -27445,7 +27465,7 @@ function visit(rows, fn) {
27445
27465
 
27446
27466
  // src/components/Tabs.tsx
27447
27467
  import { camelCase as camelCase7 } from "change-case";
27448
- import { useEffect as useEffect38, useMemo as useMemo56, useRef as useRef67, useState as useState60 } from "react";
27468
+ import { useEffect as useEffect39, useMemo as useMemo56, useRef as useRef67, useState as useState60 } from "react";
27449
27469
  import { mergeProps as mergeProps35, useFocusRing as useFocusRing20, useHover as useHover23 } from "react-aria";
27450
27470
  import { matchPath } from "react-router";
27451
27471
  import { Link as Link7, useLocation as useLocation2 } from "react-router-dom";
@@ -27508,7 +27528,7 @@ function Tabs(props) {
27508
27528
  const tid = useTestIds(others, "tabs");
27509
27529
  const [active, setActive] = useState60(selected);
27510
27530
  const ref = useRef67(null);
27511
- useEffect38(() => setActive(selected), [selected]);
27531
+ useEffect39(() => setActive(selected), [selected]);
27512
27532
  function onKeyUp(e) {
27513
27533
  if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
27514
27534
  const nextTabValue = getNextTabValue(active, e.key, tabs);
@@ -28459,7 +28479,7 @@ function WorkflowHeader(props) {
28459
28479
  }
28460
28480
 
28461
28481
  // src/layouts/Workflow/useUnsavedChangesGuard.tsx
28462
- import { useEffect as useEffect39, useRef as useRef71 } from "react";
28482
+ import { useEffect as useEffect40, useRef as useRef71 } from "react";
28463
28483
  import { useBlocker } from "react-router-dom";
28464
28484
  import { jsx as jsx237 } from "react/jsx-runtime";
28465
28485
  function useUnsavedChangesGuard(options) {
@@ -28467,7 +28487,7 @@ function useUnsavedChangesGuard(options) {
28467
28487
  const { openModal } = useModal();
28468
28488
  const isDirtyRef = useRef71(isDirty);
28469
28489
  isDirtyRef.current = isDirty;
28470
- useEffect39(() => {
28490
+ useEffect40(() => {
28471
28491
  const onBeforeUnload = (e) => {
28472
28492
  if (isDirtyRef.current?.()) {
28473
28493
  e.preventDefault();
@@ -28493,7 +28513,7 @@ function useUnsavedChangesGuard(options) {
28493
28513
  function UnsavedChangesNavigationModal(props) {
28494
28514
  const { proceed, cancelNavigation } = props;
28495
28515
  const { openModal, closeModal } = useModal();
28496
- useEffect39(() => {
28516
+ useEffect40(() => {
28497
28517
  openModal({
28498
28518
  allowClosing: false,
28499
28519
  content: /* @__PURE__ */ jsx237(ConfirmCloseModal, { title: "Leave page?", onClose: proceed, onContinue: cancelNavigation })