@homebound/beam 4.24.0 → 4.25.0

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
@@ -163,6 +163,7 @@ __export(index_exports, {
163
163
  NavbarLayout: () => NavbarLayout,
164
164
  NumberField: () => NumberField,
165
165
  OpenModal: () => OpenModal,
166
+ PageBanner: () => PageBanner,
166
167
  PageHeaderLayout: () => PageHeaderLayout,
167
168
  Pagination: () => Pagination,
168
169
  Palette: () => Palette,
@@ -233,19 +234,20 @@ __export(index_exports, {
233
234
  actionColumn: () => actionColumn,
234
235
  applyRowFn: () => applyRowFn,
235
236
  assignDefaultColumnIds: () => assignDefaultColumnIds,
236
- bannerAndNavbarChromeTop: () => bannerAndNavbarChromeTop,
237
237
  beamEnvironmentBannerLayoutHeightVar: () => beamEnvironmentBannerLayoutHeightVar,
238
238
  beamFloatingRightOffsetVar: () => beamFloatingRightOffsetVar,
239
239
  beamLayoutContentPaddingXVar: () => beamLayoutContentPaddingXVar,
240
240
  beamLayoutViewportHeightVar: () => beamLayoutViewportHeightVar,
241
241
  beamLayoutViewportWidthVar: () => beamLayoutViewportWidthVar,
242
242
  beamNavbarLayoutHeightVar: () => beamNavbarLayoutHeightVar,
243
+ beamPageBannerHeightVar: () => beamPageBannerHeightVar,
243
244
  beamPageHeaderLayoutHeightVar: () => beamPageHeaderLayoutHeightVar,
244
245
  beamRightPaneContentMinVar: () => beamRightPaneContentMinVar,
245
246
  beamRightPaneWidthVar: () => beamRightPaneWidthVar,
246
247
  beamSideNavLayoutWidthVar: () => beamSideNavLayoutWidthVar,
247
248
  beamTableActionsHeightVar: () => beamTableActionsHeightVar,
248
249
  beamWorkflowLayoutFooterHeightVar: () => beamWorkflowLayoutFooterHeightVar,
250
+ belowNavbarOffset: () => belowNavbarOffset,
249
251
  booleanFilter: () => booleanFilter,
250
252
  boundCheckboxField: () => boundCheckboxField,
251
253
  boundCheckboxGroupField: () => boundCheckboxGroupField,
@@ -359,6 +361,7 @@ __export(index_exports, {
359
361
  nonKindGridColumnKeys: () => nonKindGridColumnKeys,
360
362
  numberRangeFilter: () => numberRangeFilter,
361
363
  numericColumn: () => numericColumn,
364
+ pageBannerOffset: () => pageBannerOffset,
362
365
  pageContentGutterPx: () => pageContentGutterPx,
363
366
  pageContentPaddingX: () => pageContentPaddingX,
364
367
  parseDate: () => parseDate,
@@ -422,6 +425,7 @@ __export(index_exports, {
422
425
  useHasSideNavLayoutProvider: () => useHasSideNavLayoutProvider,
423
426
  useHover: () => useHover2,
424
427
  useModal: () => useModal,
428
+ usePageBanner: () => usePageBanner,
425
429
  usePersistedFilter: () => usePersistedFilter,
426
430
  useQueryState: () => useQueryState,
427
431
  useResponsiveGrid: () => useResponsiveGrid,
@@ -7377,17 +7381,17 @@ function useComputed(fn, deps) {
7377
7381
  hasRan: false
7378
7382
  });
7379
7383
  (0, import_react9.useMemo)(() => {
7380
- const { current } = ref;
7381
- if (current.runner) {
7382
- current.runner();
7384
+ const { current: current2 } = ref;
7385
+ if (current2.runner) {
7386
+ current2.runner();
7383
7387
  }
7384
- current.hasRan = false;
7385
- current.runner = (0, import_mobx2.autorun)(() => {
7386
- const { value: oldValue, hasRan } = current;
7388
+ current2.hasRan = false;
7389
+ current2.runner = (0, import_mobx2.autorun)(() => {
7390
+ const { value: oldValue, hasRan } = current2;
7387
7391
  const newValue = fn(oldValue);
7388
7392
  if (hasRan && shallowEqual(newValue, oldValue)) return;
7389
- current.value = newValue;
7390
- current.hasRan = true;
7393
+ current2.value = newValue;
7394
+ current2.hasRan = true;
7391
7395
  if (hasRan) {
7392
7396
  setTick((tick) => tick + 1);
7393
7397
  }
@@ -7413,6 +7417,7 @@ function useHover2(props) {
7413
7417
  var beamEnvironmentBannerLayoutHeightVar = "--beam-environment-banner-height";
7414
7418
  var beamNavbarLayoutHeightVar = "--beam-navbar-layout-height";
7415
7419
  var beamPageHeaderLayoutHeightVar = "--beam-page-header-layout-height";
7420
+ var beamPageBannerHeightVar = "--beam-page-banner-height";
7416
7421
  var beamLayoutViewportWidthVar = "--beam-layout-viewport-width";
7417
7422
  var beamLayoutViewportHeightVar = "--beam-layout-viewport-height";
7418
7423
  var beamSideNavLayoutWidthVar = "--beam-side-nav-layout-width";
@@ -7446,24 +7451,27 @@ function documentScrollBodyMinHeight() {
7446
7451
  function documentScrollRightPaneWidthCss(maxPx) {
7447
7452
  return `min(${maxPx}px, ${documentScrollChromeWidth()})`;
7448
7453
  }
7449
- function bannerAndNavbarChromeTop() {
7454
+ function belowNavbarOffset() {
7450
7455
  return `calc(var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px))`;
7451
7456
  }
7457
+ function pageBannerOffset() {
7458
+ return `calc(var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px))`;
7459
+ }
7452
7460
  function stickyNavAndHeaderOffset(basePx = 0) {
7453
- return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px))`;
7461
+ return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamPageBannerHeightVar}, 0px))`;
7454
7462
  }
7455
7463
  function stickyNavAndHeaderOffsetPx(el) {
7456
7464
  const styles = getComputedStyle(el);
7457
7465
  const read = (name) => parseFloat(styles.getPropertyValue(name)) || 0;
7458
- return read(beamEnvironmentBannerLayoutHeightVar) + read(beamNavbarLayoutHeightVar) + read(beamPageHeaderLayoutHeightVar);
7466
+ return read(beamEnvironmentBannerLayoutHeightVar) + read(beamNavbarLayoutHeightVar) + read(beamPageHeaderLayoutHeightVar) + read(beamPageBannerHeightVar);
7459
7467
  }
7460
7468
  function stickyTableHeaderOffsetPx(el) {
7461
7469
  const styles = getComputedStyle(el);
7462
7470
  const read = (name) => parseFloat(styles.getPropertyValue(name)) || 0;
7463
- return read(beamEnvironmentBannerLayoutHeightVar) + read(beamNavbarLayoutHeightVar) + read(beamPageHeaderLayoutHeightVar) + read(beamTableActionsHeightVar);
7471
+ return read(beamEnvironmentBannerLayoutHeightVar) + read(beamNavbarLayoutHeightVar) + read(beamPageHeaderLayoutHeightVar) + read(beamPageBannerHeightVar) + read(beamTableActionsHeightVar);
7464
7472
  }
7465
7473
  function stickyTableHeaderOffset(basePx = 0) {
7466
- return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamTableActionsHeightVar}, 0px))`;
7474
+ return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamPageBannerHeightVar}, 0px) + var(${beamTableActionsHeightVar}, 0px))`;
7467
7475
  }
7468
7476
  function getFloatingBottomOffset(basePx = 0) {
7469
7477
  return `calc(${basePx}px + var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
@@ -7493,6 +7501,9 @@ var zIndices = {
7493
7501
  rightPane: 60,
7494
7502
  // Workflow floating right-pane triggers — above the pane, below sticky headers.
7495
7503
  rightPaneTriggers: 65,
7504
+ // Stay-pinned page banner under the header — above the floating triggers it pins above, and below
7505
+ // pageStickyHeader so the auto-hiding header paints over it during the slide.
7506
+ pageBanner: 68,
7496
7507
  pageStickyHeader: 70,
7497
7508
  // Sticky mobile action footer (workflow layouts) — same tier as pageStickyHeader; header and footer never overlap on screen.
7498
7509
  pageStickyFooter: 70,
@@ -7646,8 +7657,8 @@ function SortHeader(props) {
7646
7657
  const {
7647
7658
  tableState
7648
7659
  } = (0, import_react11.useContext)(TableStateContext);
7649
- const current = useComputed(() => tableState.sortState?.current, [tableState]);
7650
- const sorted = sortKey === current?.columnId ? current?.direction : void 0;
7660
+ const current2 = useComputed(() => tableState.sortState?.current, [tableState]);
7661
+ const sorted = sortKey === current2?.columnId ? current2?.direction : void 0;
7651
7662
  const toggleSort = (0, import_react11.useCallback)(() => tableState.setSortKey(sortKey), [sortKey, tableState]);
7652
7663
  const sortVisible = isHovered || sorted !== void 0;
7653
7664
  const tid = useTestIds(props, "sortHeader");
@@ -8840,8 +8851,8 @@ function sortRows(columns, rows, sortState, caseSensitive) {
8840
8851
  return sorted;
8841
8852
  }
8842
8853
  function sortFn(columns, sortState, caseSensitive) {
8843
- const { current, persistent } = sortState ?? {};
8844
- const { columnId, direction } = current ?? {};
8854
+ const { current: current2, persistent } = sortState ?? {};
8855
+ const { columnId, direction } = current2 ?? {};
8845
8856
  const { columnId: persistentSortColumnId, direction: persistentSortDirection } = persistent ?? {};
8846
8857
  const column2 = columns.find((c) => c.id === columnId);
8847
8858
  const invert = direction === "DESC";
@@ -20402,18 +20413,18 @@ function initializeOptions(optionsOrLoad, getOptionValue, getOptionLabel, unsetL
20402
20413
  } else {
20403
20414
  const {
20404
20415
  options,
20405
- current
20416
+ current: current2
20406
20417
  } = optionsOrLoad;
20407
20418
  if (options) {
20408
20419
  userOptions.push(...options);
20409
20420
  }
20410
- if (current) {
20411
- const toCheck = Array.isArray(current) ? current : [current];
20412
- toCheck.forEach((current2) => {
20413
- const value = getOptionValue(current2);
20421
+ if (current2) {
20422
+ const toCheck = Array.isArray(current2) ? current2 : [current2];
20423
+ toCheck.forEach((current3) => {
20424
+ const value = getOptionValue(current3);
20414
20425
  const found = options && options.find((o) => getOptionValue(o) === value);
20415
20426
  if (!found) {
20416
- userOptions.push(current2);
20427
+ userOptions.push(current3);
20417
20428
  }
20418
20429
  });
20419
20430
  }
@@ -30026,7 +30037,7 @@ function SideNavLayoutContent(props) {
30026
30037
  const collapsed = navState === "collapse";
30027
30038
  const showRail = navState !== "hidden" && !showMobileSubNav;
30028
30039
  const railOffsetPx = !showRail ? 0 : !bp.mdAndUp || collapsed ? railCollapsedWidthPx : railWidthPx;
30029
- const navTop = bannerAndNavbarChromeTop();
30040
+ const navTop = belowNavbarOffset();
30030
30041
  const railViewportHeight = `calc(var(${beamLayoutViewportHeightVar}, 100vh) - var(${beamEnvironmentBannerLayoutHeightVar}, 0px) - var(${beamNavbarLayoutHeightVar}, 0px))`;
30031
30042
  const rail = showRail && /* @__PURE__ */ (0, import_jsx_runtime236.jsxs)("div", { ...(0, import_runtime153.trussProps)({
30032
30043
  ...{
@@ -30348,14 +30359,14 @@ function useActiveJumpLink(sectionIds) {
30348
30359
  const first = ids.map((id) => document.getElementById(id)).find((el) => el !== null);
30349
30360
  if (!first) return;
30350
30361
  const headerOffset = stickyNavAndHeaderOffsetPx(first);
30351
- let current = ids[0];
30362
+ let current2 = ids[0];
30352
30363
  for (const id of ids) {
30353
30364
  const el = document.getElementById(id);
30354
30365
  if (el && el.getBoundingClientRect().top - headerOffset <= activationLeadPx) {
30355
- current = id;
30366
+ current2 = id;
30356
30367
  }
30357
30368
  }
30358
- setActiveId(current);
30369
+ setActiveId(current2);
30359
30370
  };
30360
30371
  update();
30361
30372
  window.addEventListener("scroll", update, { passive: true });
@@ -30442,12 +30453,66 @@ function FormSectionLayout(props) {
30442
30453
  return /* @__PURE__ */ (0, import_jsx_runtime242.jsx)(DocumentScrollOverlayRightPaneLayout, { paneWidth: rightPane.width, children: body });
30443
30454
  }
30444
30455
 
30456
+ // src/layouts/PageBanner/usePageBanner.tsx
30457
+ var import_react163 = require("react");
30458
+
30459
+ // src/layouts/PageBanner/pageBannerStore.ts
30460
+ var current;
30461
+ var listeners = /* @__PURE__ */ new Set();
30462
+ var pageBannerStore = {
30463
+ subscribe: (listener) => {
30464
+ listeners.add(listener);
30465
+ return () => {
30466
+ listeners.delete(listener);
30467
+ };
30468
+ },
30469
+ getSnapshot: () => current?.banner
30470
+ };
30471
+ function notify() {
30472
+ listeners.forEach((listener) => listener());
30473
+ }
30474
+ function hasPageBannerSubscriber() {
30475
+ return listeners.size > 0;
30476
+ }
30477
+ function setPageBanner(id, banner) {
30478
+ const previous = current;
30479
+ if (previous?.id === id && previous.banner === banner) return;
30480
+ if (previous && previous.id !== id && process.env.NODE_ENV !== "production") {
30481
+ console.warn("[usePageBanner] A second page banner replaced the first; a layout shows one at a time.");
30482
+ }
30483
+ current = { id, banner };
30484
+ notify();
30485
+ }
30486
+ function clearPageBanner(id) {
30487
+ if (current?.id !== id) return;
30488
+ current = void 0;
30489
+ notify();
30490
+ }
30491
+
30492
+ // src/layouts/PageBanner/usePageBanner.tsx
30493
+ function usePageBanner(banner) {
30494
+ const id = (0, import_react163.useId)();
30495
+ (0, import_react163.useLayoutEffect)(() => {
30496
+ if (!banner) return;
30497
+ setPageBanner(id, banner);
30498
+ return () => clearPageBanner(id);
30499
+ }, [id, banner]);
30500
+ (0, import_react163.useEffect)(() => {
30501
+ if (!banner || hasPageBannerSubscriber() || process.env.NODE_ENV === "production") return;
30502
+ console.warn("[usePageBanner] No page layout above this component; the banner will not render.");
30503
+ }, [banner]);
30504
+ }
30505
+ function PageBanner(props) {
30506
+ usePageBanner(props);
30507
+ return null;
30508
+ }
30509
+
30445
30510
  // src/layouts/NavbarLayout/NavbarLayout.tsx
30446
- var import_react167 = require("react");
30511
+ var import_react168 = require("react");
30447
30512
  var import_runtime160 = require("@homebound/truss/runtime");
30448
30513
 
30449
30514
  // src/layouts/useAutoHideOnScroll.ts
30450
- var import_react163 = require("react");
30515
+ var import_react164 = require("react");
30451
30516
  var THRESHOLD = 80;
30452
30517
  function getInitialAutoHideState() {
30453
30518
  if (typeof window === "undefined" || window.scrollY <= 0) {
@@ -30457,13 +30522,13 @@ function getInitialAutoHideState() {
30457
30522
  }
30458
30523
  function useAutoHideOnScroll(spacerRef, enabled, getTopOffset) {
30459
30524
  const initial = getInitialAutoHideState();
30460
- const [state, setState] = (0, import_react163.useState)(initial);
30461
- const stateRef = (0, import_react163.useRef)(initial);
30462
- const getTopOffsetRef = (0, import_react163.useRef)(getTopOffset);
30525
+ const [state, setState] = (0, import_react164.useState)(initial);
30526
+ const stateRef = (0, import_react164.useRef)(initial);
30527
+ const getTopOffsetRef = (0, import_react164.useRef)(getTopOffset);
30463
30528
  getTopOffsetRef.current = getTopOffset;
30464
- const lastScrollY = (0, import_react163.useRef)(Number.POSITIVE_INFINITY);
30465
- const lastScrollHeight = (0, import_react163.useRef)(0);
30466
- (0, import_react163.useLayoutEffect)(() => {
30529
+ const lastScrollY = (0, import_react164.useRef)(Number.POSITIVE_INFINITY);
30530
+ const lastScrollHeight = (0, import_react164.useRef)(0);
30531
+ (0, import_react164.useLayoutEffect)(() => {
30467
30532
  if (!enabled) {
30468
30533
  stateRef.current = "resting";
30469
30534
  lastScrollY.current = Number.POSITIVE_INFINITY;
@@ -30529,25 +30594,25 @@ function useAutoHideOnScroll(spacerRef, enabled, getTopOffset) {
30529
30594
 
30530
30595
  // src/layouts/useMeasuredHeight.ts
30531
30596
  var import_utils50 = require("@react-aria/utils");
30532
- var import_react164 = require("react");
30597
+ var import_react165 = require("react");
30533
30598
  function useMeasuredHeight(ref, enabled) {
30534
- const [height, setHeight] = (0, import_react164.useState)(0);
30535
- const syncElementHeight = (0, import_react164.useCallback)(() => {
30599
+ const [height, setHeight] = (0, import_react165.useState)(0);
30600
+ const syncElementHeight = (0, import_react165.useCallback)(() => {
30536
30601
  const el = ref.current;
30537
30602
  const next = el ? Math.round(el.getBoundingClientRect().height) : 0;
30538
30603
  setHeight((prev) => prev === next ? prev : next);
30539
30604
  }, [ref]);
30540
30605
  (0, import_utils50.useResizeObserver)({ ref, onResize: syncElementHeight });
30541
- (0, import_react164.useLayoutEffect)(() => {
30606
+ (0, import_react165.useLayoutEffect)(() => {
30542
30607
  syncElementHeight();
30543
30608
  }, [enabled, syncElementHeight]);
30544
30609
  return height;
30545
30610
  }
30546
30611
 
30547
30612
  // src/layouts/useTransitionAfterPaint.ts
30548
- var import_react165 = require("react");
30613
+ var import_react166 = require("react");
30549
30614
  function useTransitionAfterPaint(ref, transition) {
30550
- (0, import_react165.useLayoutEffect)(() => {
30615
+ (0, import_react166.useLayoutEffect)(() => {
30551
30616
  const el = ref.current;
30552
30617
  if (!el) return;
30553
30618
  const id = requestAnimationFrame(() => {
@@ -30558,14 +30623,14 @@ function useTransitionAfterPaint(ref, transition) {
30558
30623
  }
30559
30624
 
30560
30625
  // src/layouts/NavbarLayout/NavbarLayoutHeightContext.tsx
30561
- var import_react166 = require("react");
30626
+ var import_react167 = require("react");
30562
30627
  var import_jsx_runtime243 = require("react/jsx-runtime");
30563
- var NavbarLayoutHeightContext = (0, import_react166.createContext)(0);
30628
+ var NavbarLayoutHeightContext = (0, import_react167.createContext)(0);
30564
30629
  function NavbarLayoutHeightProvider({ value, children }) {
30565
30630
  return /* @__PURE__ */ (0, import_jsx_runtime243.jsx)(NavbarLayoutHeightContext.Provider, { value, children });
30566
30631
  }
30567
30632
  function useNavbarLayoutHeight() {
30568
- return (0, import_react166.useContext)(NavbarLayoutHeightContext);
30633
+ return (0, import_react167.useContext)(NavbarLayoutHeightContext);
30569
30634
  }
30570
30635
 
30571
30636
  // src/layouts/NavbarLayout/NavbarLayout.tsx
@@ -30579,8 +30644,8 @@ function NavbarLayout(props) {
30579
30644
  children
30580
30645
  } = props;
30581
30646
  const tid = useTestIds(props, "navbarLayout");
30582
- const navMetricsRef = (0, import_react167.useRef)(null);
30583
- const spacerRef = (0, import_react167.useRef)(null);
30647
+ const navMetricsRef = (0, import_react168.useRef)(null);
30648
+ const spacerRef = (0, import_react168.useRef)(null);
30584
30649
  const navHeight = useMeasuredHeight(navMetricsRef, true);
30585
30650
  const {
30586
30651
  state: autoHideState
@@ -30606,7 +30671,7 @@ function NavbarLayout(props) {
30606
30671
  const innerStyle = {
30607
30672
  top: autoHideState === "hidden" ? `calc(${bannerTop} - ${navHeight}px)` : bannerTop
30608
30673
  };
30609
- const navbarEl = (0, import_react167.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime244.jsx)(Navbar, { ...navbar }), [navbar]);
30674
+ const navbarEl = (0, import_react168.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime244.jsx)(Navbar, { ...navbar }), [navbar]);
30610
30675
  return /* @__PURE__ */ (0, import_jsx_runtime244.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime244.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime244.jsx)(MobileSubNavProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime244.jsxs)("div", { ...(0, import_runtime160.mergeProps)(void 0, cssVars, {
30611
30676
  display: "df",
30612
30677
  flexDirection: "fdc",
@@ -30624,14 +30689,14 @@ function NavbarLayout(props) {
30624
30689
  }
30625
30690
 
30626
30691
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
30627
- var import_react169 = require("react");
30692
+ var import_react171 = require("react");
30628
30693
 
30629
30694
  // src/hooks/useDocumentTitle.tsx
30630
- var import_react168 = require("react");
30695
+ var import_react169 = require("react");
30631
30696
  function useDocumentTitle(...titleSegments) {
30632
30697
  const config = useDocumentTitleConfig();
30633
30698
  const pageTitle = joinDocumentTitleSegments(...titleSegments);
30634
- (0, import_react168.useLayoutEffect)(() => {
30699
+ (0, import_react169.useLayoutEffect)(() => {
30635
30700
  if (!config || !pageTitle || typeof document === "undefined") {
30636
30701
  return;
30637
30702
  }
@@ -30736,94 +30801,162 @@ function PageHeader2(props) {
30736
30801
  ] }) });
30737
30802
  }
30738
30803
 
30804
+ // src/layouts/PageBanner/internal/usePageBannerSlot.tsx
30805
+ var import_react170 = require("react");
30806
+
30807
+ // src/layouts/PageBanner/internal/PageBannerSlot.tsx
30808
+ var import_runtime163 = require("@homebound/truss/runtime");
30809
+ var import_jsx_runtime247 = require("react/jsx-runtime");
30810
+ var __maybeInc34 = (inc) => {
30811
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
30812
+ };
30813
+ function PageBannerSlot(props) {
30814
+ const {
30815
+ banner,
30816
+ metricsRef
30817
+ } = props;
30818
+ const tid = useTestIds(props, "pageBannerSlot");
30819
+ return /* @__PURE__ */ (0, import_jsx_runtime247.jsx)("div", { ref: metricsRef, ...(0, import_runtime163.trussProps)({
30820
+ flexShrink: "fs0",
30821
+ width: ["w_var", {
30822
+ "--width": (0, import_runtime163.maybeCssVar)(__maybeInc34(`min(100%, ${documentScrollChromeWidth()})`))
30823
+ }],
30824
+ transition: "transitionTop",
30825
+ position: "sticky",
30826
+ top: ["top_var", {
30827
+ "--top": (0, import_runtime163.maybeCssVar)(__maybeInc34(pageBannerOffset()))
30828
+ }],
30829
+ left: ["left_var", {
30830
+ "--left": (0, import_runtime163.maybeCssVar)(__maybeInc34(documentScrollChromeLeft()))
30831
+ }],
30832
+ zIndex: ["z_var", {
30833
+ "--zIndex": (0, import_runtime163.maybeCssVar)(zIndices.pageBanner)
30834
+ }]
30835
+ }), ...tid.bannerSticky, children: /* @__PURE__ */ (0, import_jsx_runtime247.jsx)(StatusBanner, { ...banner, sticky: true, ...tid.banner }) });
30836
+ }
30837
+
30838
+ // src/layouts/PageBanner/internal/usePageBannerSlot.tsx
30839
+ var import_jsx_runtime248 = require("react/jsx-runtime");
30840
+ function usePageBannerSlot(bannerProp, testIds) {
30841
+ const publishedBanner = usePublishedPageBanner();
30842
+ const banner = publishedBanner ?? bannerProp;
30843
+ const metricsRef = (0, import_react170.useRef)(null);
30844
+ const height = useMeasuredHeight(metricsRef, banner != null);
30845
+ const slot = banner ? /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(PageBannerSlot, { ...testIds, banner, metricsRef }) : null;
30846
+ return { slot, height };
30847
+ }
30848
+ function usePublishedPageBanner() {
30849
+ const [banner, setBanner] = (0, import_react170.useState)(pageBannerStore.getSnapshot);
30850
+ const sync = (0, import_react170.useCallback)(() => {
30851
+ const next = pageBannerStore.getSnapshot();
30852
+ setBanner((prev) => prev === next ? prev : next);
30853
+ }, []);
30854
+ (0, import_react170.useLayoutEffect)(() => {
30855
+ sync();
30856
+ return pageBannerStore.subscribe(sync);
30857
+ }, [sync]);
30858
+ return banner;
30859
+ }
30860
+
30739
30861
  // src/layouts/useBannerAndNavbarHeight.ts
30740
30862
  function useBannerAndNavbarHeight() {
30741
30863
  return useEnvironmentBannerLayoutHeight() + useNavbarLayoutHeight();
30742
30864
  }
30743
30865
 
30744
30866
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
30745
- var import_runtime163 = require("@homebound/truss/runtime");
30746
- var import_jsx_runtime247 = require("react/jsx-runtime");
30747
- var __maybeInc34 = (inc) => {
30867
+ var import_runtime164 = require("@homebound/truss/runtime");
30868
+ var import_jsx_runtime249 = require("react/jsx-runtime");
30869
+ var __maybeInc35 = (inc) => {
30748
30870
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
30749
30871
  };
30750
30872
  function PageHeaderLayout(props) {
30751
30873
  const {
30752
30874
  pageHeader,
30875
+ banner: bannerProp,
30753
30876
  children
30754
30877
  } = props;
30755
30878
  const tid = useTestIds(props, "pageHeaderLayout");
30879
+ const {
30880
+ slot: bannerSlot,
30881
+ height: bannerHeight
30882
+ } = usePageBannerSlot(bannerProp, tid);
30756
30883
  const bannerAndNavbarHeight = useBannerAndNavbarHeight();
30757
- const bannerAndNavbarHeightRef = (0, import_react169.useRef)(bannerAndNavbarHeight);
30884
+ const bannerAndNavbarHeightRef = (0, import_react171.useRef)(bannerAndNavbarHeight);
30758
30885
  bannerAndNavbarHeightRef.current = bannerAndNavbarHeight;
30759
- const getBannerAndNavbarHeight = (0, import_react169.useCallback)(() => bannerAndNavbarHeightRef.current, []);
30760
- const headerMetricsRef = (0, import_react169.useRef)(null);
30761
- const spacerRef = (0, import_react169.useRef)(null);
30886
+ const getBannerAndNavbarHeight = (0, import_react171.useCallback)(() => bannerAndNavbarHeightRef.current, []);
30887
+ const headerMetricsRef = (0, import_react171.useRef)(null);
30888
+ const spacerRef = (0, import_react171.useRef)(null);
30762
30889
  const headerHeight = useMeasuredHeight(headerMetricsRef, true);
30763
30890
  const {
30764
30891
  state: autoHideState
30765
30892
  } = useAutoHideOnScroll(spacerRef, true, getBannerAndNavbarHeight);
30766
30893
  const headerOccupiesPosition = autoHideState !== "hidden";
30767
- const cssVars = headerHeight > 0 && headerOccupiesPosition ? {
30768
- [beamPageHeaderLayoutHeightVar]: `${headerHeight}px`
30769
- } : void 0;
30894
+ const cssVars = {};
30895
+ if (headerHeight > 0 && headerOccupiesPosition) {
30896
+ cssVars[beamPageHeaderLayoutHeightVar] = `${headerHeight}px`;
30897
+ }
30898
+ if (bannerHeight > 0) {
30899
+ cssVars[beamPageBannerHeightVar] = `${bannerHeight}px`;
30900
+ }
30901
+ const style = Object.keys(cssVars).length > 0 ? cssVars : void 0;
30770
30902
  const headerLeft = documentScrollChromeLeft();
30771
30903
  const headerWidth = documentScrollChromeWidth();
30772
- const outerTop = bannerAndNavbarChromeTop();
30904
+ const outerTop = belowNavbarOffset();
30773
30905
  const innerCss = {
30774
30906
  position: "fixed",
30775
30907
  left: ["left_var", {
30776
- "--left": (0, import_runtime163.maybeCssVar)(__maybeInc34(headerLeft))
30908
+ "--left": (0, import_runtime164.maybeCssVar)(__maybeInc35(headerLeft))
30777
30909
  }],
30778
30910
  width: ["w_var", {
30779
- "--width": (0, import_runtime163.maybeCssVar)(__maybeInc34(headerWidth))
30911
+ "--width": (0, import_runtime164.maybeCssVar)(__maybeInc35(headerWidth))
30780
30912
  }],
30781
30913
  zIndex: ["z_var", {
30782
- "--zIndex": (0, import_runtime163.maybeCssVar)(zIndices.pageStickyHeader)
30914
+ "--zIndex": (0, import_runtime164.maybeCssVar)(zIndices.pageStickyHeader)
30783
30915
  }]
30784
30916
  };
30785
30917
  useTransitionAfterPaint(headerMetricsRef, "all 200ms cubic-bezier(0.4, 0, 0.2, 1)");
30786
30918
  const innerStyle = {
30787
30919
  top: autoHideState === "hidden" ? `calc(${outerTop} - ${headerHeight}px)` : outerTop
30788
30920
  };
30789
- const pageHeaderEl = (0, import_react169.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime247.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
30790
- return /* @__PURE__ */ (0, import_jsx_runtime247.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime247.jsxs)("div", { ...(0, import_runtime163.mergeProps)(void 0, cssVars, {
30921
+ const pageHeaderEl = (0, import_react171.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
30922
+ return /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime249.jsxs)("div", { ...(0, import_runtime164.mergeProps)(void 0, style, {
30791
30923
  display: "df",
30792
30924
  flexDirection: "fdc",
30793
30925
  width: "w100"
30794
30926
  }), ...tid, children: [
30795
- /* @__PURE__ */ (0, import_jsx_runtime247.jsx)("div", { ref: spacerRef, ...(0, import_runtime163.mergeProps)(void 0, {
30927
+ /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("div", { ref: spacerRef, ...(0, import_runtime164.mergeProps)(void 0, {
30796
30928
  height: headerHeight
30797
30929
  }, {
30798
30930
  flexShrink: "fs0",
30799
30931
  width: "w100"
30800
- }), children: /* @__PURE__ */ (0, import_jsx_runtime247.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime163.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
30801
- /* @__PURE__ */ (0, import_jsx_runtime247.jsx)("div", { className: "df fdc fg1 mh0 w100 n_has_data_self_top_spaced_first_child_pt3", ...tid.body, children })
30932
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime164.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
30933
+ bannerSlot,
30934
+ /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("div", { className: "df fdc fg1 mh0 w100 n_has_data_self_top_spaced_first_child_pt3", ...tid.body, children })
30802
30935
  ] }) });
30803
30936
  }
30804
30937
 
30805
30938
  // src/layouts/Workflow/WorkflowPageLayout.tsx
30806
- var import_react172 = require("react");
30939
+ var import_react174 = require("react");
30807
30940
 
30808
30941
  // src/components/Headers/WorkflowHeader.tsx
30809
- var import_jsx_runtime248 = require("react/jsx-runtime");
30942
+ var import_jsx_runtime250 = require("react/jsx-runtime");
30810
30943
  function WorkflowHeader(props) {
30811
30944
  const { stepperTabs, ...otherProps } = props;
30812
30945
  const tid = useTestIds(otherProps, "header");
30813
- return /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(
30946
+ return /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(
30814
30947
  BaseHeader,
30815
30948
  {
30816
30949
  ...otherProps,
30817
- bottomSlot: stepperTabs ? /* @__PURE__ */ (0, import_jsx_runtime248.jsx)(StepperTabs, { ...stepperTabs, ...tid.stepperTabs }) : void 0
30950
+ bottomSlot: stepperTabs ? /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(StepperTabs, { ...stepperTabs, ...tid.stepperTabs }) : void 0
30818
30951
  }
30819
30952
  );
30820
30953
  }
30821
30954
 
30822
30955
  // src/layouts/Workflow/RightPaneTriggers.tsx
30823
- var import_react170 = require("react");
30824
- var import_runtime164 = require("@homebound/truss/runtime");
30825
- var import_jsx_runtime249 = require("react/jsx-runtime");
30826
- var __maybeInc35 = (inc) => {
30956
+ var import_react172 = require("react");
30957
+ var import_runtime165 = require("@homebound/truss/runtime");
30958
+ var import_jsx_runtime251 = require("react/jsx-runtime");
30959
+ var __maybeInc36 = (inc) => {
30827
30960
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
30828
30961
  };
30829
30962
  function WorkflowPageRightPaneTriggers(props) {
@@ -30841,14 +30974,14 @@ function WorkflowPageRightPaneTriggers(props) {
30841
30974
  } = useRightPaneActions();
30842
30975
  const tid = useTestIds(props, "rightPaneTriggers");
30843
30976
  const pageTriggerInsetPx = 24;
30844
- const onClick = (0, import_react170.useCallback)((trigger) => {
30977
+ const onClick = (0, import_react172.useCallback)((trigger) => {
30845
30978
  openRightPane({
30846
- content: /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(RightPanePanel, { title: trigger.label, children: trigger.content })
30979
+ content: /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(RightPanePanel, { title: trigger.label, children: trigger.content })
30847
30980
  });
30848
30981
  }, [openRightPane]);
30849
- return /* @__PURE__ */ (0, import_jsx_runtime249.jsx)("div", { ...tid, "aria-hidden": isRightPaneOpen, ...isRightPaneOpen ? {
30982
+ return /* @__PURE__ */ (0, import_jsx_runtime251.jsx)("div", { ...tid, "aria-hidden": isRightPaneOpen, ...isRightPaneOpen ? {
30850
30983
  inert: true
30851
- } : {}, ...(0, import_runtime164.trussProps)({
30984
+ } : {}, ...(0, import_runtime165.trussProps)({
30852
30985
  ...{
30853
30986
  display: "df",
30854
30987
  alignItems: "aic",
@@ -30862,40 +30995,40 @@ function WorkflowPageRightPaneTriggers(props) {
30862
30995
  ...!isMobile && {
30863
30996
  position: "fixed",
30864
30997
  top: ["top_var", {
30865
- "--top": (0, import_runtime164.maybeCssVar)(__maybeInc35(stickyNavAndHeaderOffset(pageTriggerInsetPx)))
30998
+ "--top": (0, import_runtime165.maybeCssVar)(__maybeInc36(stickyNavAndHeaderOffset(pageTriggerInsetPx)))
30866
30999
  }],
30867
31000
  right: ["right_var", {
30868
31001
  "--right": `${pageTriggerInsetPx}px`
30869
31002
  }],
30870
31003
  zIndex: ["z_var", {
30871
- "--zIndex": (0, import_runtime164.maybeCssVar)(zIndices.rightPaneTriggers)
31004
+ "--zIndex": (0, import_runtime165.maybeCssVar)(zIndices.rightPaneTriggers)
30872
31005
  }]
30873
31006
  },
30874
31007
  // Desktop only — on `sm` the full-bleed pane covers the header slot.
30875
31008
  ...!isMobile && (isRightPaneOpen ? {
30876
31009
  transform: ["transform_var", {
30877
- "--transform": (0, import_runtime164.maybeCssVar)(`translateX(calc(100% + ${pageTriggerInsetPx}px))`)
31010
+ "--transform": (0, import_runtime165.maybeCssVar)(`translateX(calc(100% + ${pageTriggerInsetPx}px))`)
30878
31011
  }],
30879
31012
  pointerEvents: "pen"
30880
31013
  } : {
30881
31014
  transform: "tf_translateX_0"
30882
31015
  })
30883
- }), children: triggers.map((trigger) => /* @__PURE__ */ (0, import_jsx_runtime249.jsx)(IconButton, { icon: trigger.icon, label: trigger.label, variant: "circle", compact: isMobile, onClick: () => onClick(trigger), ...tid[trigger.icon] }, trigger.label)) });
31016
+ }), children: triggers.map((trigger) => /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(IconButton, { icon: trigger.icon, label: trigger.label, variant: "circle", compact: isMobile, onClick: () => onClick(trigger), ...tid[trigger.icon] }, trigger.label)) });
30884
31017
  }
30885
31018
 
30886
31019
  // src/layouts/Workflow/useUnsavedChangesGuard.tsx
30887
- var import_react171 = require("react");
31020
+ var import_react173 = require("react");
30888
31021
  var import_react_router_dom9 = require("react-router-dom");
30889
- var import_jsx_runtime250 = require("react/jsx-runtime");
31022
+ var import_jsx_runtime252 = require("react/jsx-runtime");
30890
31023
  function useUnsavedChangesGuard(options) {
30891
31024
  const { isDirty, allowNavigation, onCancel } = options;
30892
31025
  const { openModal } = useModal();
30893
- const isDirtyRef = (0, import_react171.useRef)(isDirty);
31026
+ const isDirtyRef = (0, import_react173.useRef)(isDirty);
30894
31027
  isDirtyRef.current = isDirty;
30895
- const allowNavigationRef = (0, import_react171.useRef)(allowNavigation);
31028
+ const allowNavigationRef = (0, import_react173.useRef)(allowNavigation);
30896
31029
  allowNavigationRef.current = allowNavigation;
30897
- const allowCancelNavigationRef = (0, import_react171.useRef)(false);
30898
- (0, import_react171.useEffect)(() => {
31030
+ const allowCancelNavigationRef = (0, import_react173.useRef)(false);
31031
+ (0, import_react173.useEffect)(() => {
30899
31032
  const onBeforeUnload = (e) => {
30900
31033
  if (isDirtyRef.current?.()) {
30901
31034
  e.preventDefault();
@@ -30922,7 +31055,7 @@ function useUnsavedChangesGuard(options) {
30922
31055
  }
30923
31056
  openModal({
30924
31057
  allowClosing: false,
30925
- content: /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(ConfirmCloseModal, { onClose: () => confirmCancel(e) })
31058
+ content: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(ConfirmCloseModal, { onClose: () => confirmCancel(e) })
30926
31059
  });
30927
31060
  };
30928
31061
  const navigationBlocker = blocker.state === "blocked" ? { proceed: () => blocker.proceed?.(), cancelNavigation: () => blocker.reset?.() } : void 0;
@@ -30931,10 +31064,10 @@ function useUnsavedChangesGuard(options) {
30931
31064
  function UnsavedChangesNavigationModal(props) {
30932
31065
  const { proceed, cancelNavigation } = props;
30933
31066
  const { openModal, closeModal } = useModal();
30934
- (0, import_react171.useEffect)(() => {
31067
+ (0, import_react173.useEffect)(() => {
30935
31068
  openModal({
30936
31069
  allowClosing: false,
30937
- content: /* @__PURE__ */ (0, import_jsx_runtime250.jsx)(ConfirmCloseModal, { title: "Leave page?", onClose: proceed, onContinue: cancelNavigation })
31070
+ content: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(ConfirmCloseModal, { title: "Leave page?", onClose: proceed, onContinue: cancelNavigation })
30938
31071
  });
30939
31072
  return () => closeModal();
30940
31073
  }, []);
@@ -30942,7 +31075,7 @@ function UnsavedChangesNavigationModal(props) {
30942
31075
  }
30943
31076
 
30944
31077
  // src/layouts/Workflow/WorkflowActions.tsx
30945
- var import_jsx_runtime251 = require("react/jsx-runtime");
31078
+ var import_jsx_runtime253 = require("react/jsx-runtime");
30946
31079
  function WorkflowActions(props) {
30947
31080
  const {
30948
31081
  onCancel,
@@ -30960,12 +31093,12 @@ function WorkflowActions(props) {
30960
31093
  sm: isMobile
30961
31094
  } = useBreakpoint();
30962
31095
  const primaryVariant = aiMode ? "ai" : "primary";
30963
- return /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)("div", { className: "df aic jcsb sm_w100", children: [
30964
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)("div", { className: "df aic", children: !isFirstStep && isMobile && onBack && /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) }),
30965
- /* @__PURE__ */ (0, import_jsx_runtime251.jsxs)("div", { className: "df aic g_1", children: [
30966
- /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
30967
- onSaveAndExit && /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
30968
- isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Button, { label: completeLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ (0, import_jsx_runtime251.jsx)(Button, { label: "Continue", variant: primaryVariant, onClick: async () => {
31096
+ return /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)("div", { className: "df aic jcsb sm_w100", children: [
31097
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)("div", { className: "df aic", children: !isFirstStep && isMobile && onBack && /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) }),
31098
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsxs)("div", { className: "df aic g_1", children: [
31099
+ /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
31100
+ onSaveAndExit && /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
31101
+ isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Button, { label: completeLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(Button, { label: "Continue", variant: primaryVariant, onClick: async () => {
30969
31102
  await onContinue?.();
30970
31103
  }, disabled: primaryDisabled })
30971
31104
  ] })
@@ -30973,9 +31106,9 @@ function WorkflowActions(props) {
30973
31106
  }
30974
31107
 
30975
31108
  // src/layouts/Workflow/WorkflowPageLayout.tsx
30976
- var import_runtime165 = require("@homebound/truss/runtime");
30977
- var import_jsx_runtime252 = require("react/jsx-runtime");
30978
- var __maybeInc36 = (inc) => {
31109
+ var import_runtime166 = require("@homebound/truss/runtime");
31110
+ var import_jsx_runtime254 = require("react/jsx-runtime");
31111
+ var __maybeInc37 = (inc) => {
30979
31112
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
30980
31113
  };
30981
31114
  var mobileFooterHeightPx = 80;
@@ -30991,9 +31124,14 @@ function WorkflowPageLayout(props) {
30991
31124
  breadcrumbs,
30992
31125
  onCancel,
30993
31126
  rightPaneTriggers,
31127
+ banner: bannerProp,
30994
31128
  ...actionProps
30995
31129
  } = props;
30996
31130
  const tid = useTestIds(props, "workflowPageLayout");
31131
+ const {
31132
+ slot: bannerSlot,
31133
+ height: bannerHeight
31134
+ } = usePageBannerSlot(bannerProp, tid);
30997
31135
  const {
30998
31136
  sm: isMobile
30999
31137
  } = useBreakpoint();
@@ -31005,18 +31143,23 @@ function WorkflowPageLayout(props) {
31005
31143
  allowNavigation,
31006
31144
  onCancel
31007
31145
  });
31008
- const actions = /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(WorkflowActions, { ...actionProps, aiMode, onCancel: onCancelClick });
31146
+ const actions = /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(WorkflowActions, { ...actionProps, aiMode, onCancel: onCancelClick });
31009
31147
  const triggers = rightPaneTriggers ?? [];
31010
- const pageTriggers = triggers.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(WorkflowPageRightPaneTriggers, { triggers }) : void 0;
31011
- const headerMetricsRef = (0, import_react172.useRef)(null);
31148
+ const pageTriggers = triggers.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(WorkflowPageRightPaneTriggers, { triggers }) : void 0;
31149
+ const headerMetricsRef = (0, import_react174.useRef)(null);
31012
31150
  const headerHeight = useMeasuredHeight(headerMetricsRef, true);
31013
31151
  const headerWidth = documentScrollChromeWidth();
31014
- const outerTop = bannerAndNavbarChromeTop();
31015
- const cssVars = headerHeight > 0 ? {
31016
- [beamPageHeaderLayoutHeightVar]: `${headerHeight}px`
31017
- } : void 0;
31152
+ const outerTop = belowNavbarOffset();
31153
+ const cssVars = {};
31154
+ if (headerHeight > 0) {
31155
+ cssVars[beamPageHeaderLayoutHeightVar] = `${headerHeight}px`;
31156
+ }
31157
+ if (bannerHeight > 0) {
31158
+ cssVars[beamPageBannerHeightVar] = `${bannerHeight}px`;
31159
+ }
31160
+ const style = Object.keys(cssVars).length > 0 ? cssVars : void 0;
31018
31161
  const showFooter = isMobile;
31019
- (0, import_react172.useLayoutEffect)(() => {
31162
+ (0, import_react174.useLayoutEffect)(() => {
31020
31163
  const root = document.documentElement;
31021
31164
  const previous = root.style.getPropertyValue(beamWorkflowLayoutFooterHeightVar);
31022
31165
  root.style.setProperty(beamWorkflowLayoutFooterHeightVar, showFooter ? `${mobileFooterHeightPx}px` : "0px");
@@ -31028,32 +31171,33 @@ function WorkflowPageLayout(props) {
31028
31171
  }
31029
31172
  };
31030
31173
  }, [showFooter]);
31031
- return /* @__PURE__ */ (0, import_jsx_runtime252.jsxs)(DocumentScrollLayoutProvider, { children: [
31032
- /* @__PURE__ */ (0, import_jsx_runtime252.jsxs)("div", { ...(0, import_runtime165.mergeProps)(void 0, cssVars, {
31174
+ return /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)(DocumentScrollLayoutProvider, { children: [
31175
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsxs)("div", { ...(0, import_runtime166.mergeProps)(void 0, style, {
31033
31176
  display: "df",
31034
31177
  flexDirection: "fdc",
31035
31178
  width: "w100"
31036
31179
  }), ...tid, children: [
31037
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)("div", { ...(0, import_runtime165.mergeProps)(void 0, {
31180
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsx)("div", { ...(0, import_runtime166.mergeProps)(void 0, {
31038
31181
  height: headerHeight
31039
31182
  }, {
31040
31183
  flexShrink: "fs0",
31041
31184
  width: "w100"
31042
- }), children: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime165.trussProps)({
31185
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime254.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime166.trussProps)({
31043
31186
  position: "fixed",
31044
31187
  left: "l_0",
31045
31188
  width: ["w_var", {
31046
- "--width": (0, import_runtime165.maybeCssVar)(__maybeInc36(headerWidth))
31189
+ "--width": (0, import_runtime166.maybeCssVar)(__maybeInc37(headerWidth))
31047
31190
  }],
31048
31191
  zIndex: ["z_var", {
31049
- "--zIndex": (0, import_runtime165.maybeCssVar)(zIndices.pageStickyHeader)
31192
+ "--zIndex": (0, import_runtime166.maybeCssVar)(zIndices.pageStickyHeader)
31050
31193
  }],
31051
31194
  top: ["top_var", {
31052
- "--top": (0, import_runtime165.maybeCssVar)(__maybeInc36(outerTop))
31195
+ "--top": (0, import_runtime166.maybeCssVar)(__maybeInc37(outerTop))
31053
31196
  }],
31054
31197
  transition: "transitionAll"
31055
- }), ...tid.header, children: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(WorkflowHeader, { title, documentTitleSuffix, breadcrumbs, rightSlot: isMobile ? pageTriggers : actions, stepperTabs }) }) }),
31056
- /* @__PURE__ */ (0, import_jsx_runtime252.jsx)("div", { ...(0, import_runtime165.trussProps)({
31198
+ }), ...tid.header, children: /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(WorkflowHeader, { title, documentTitleSuffix, breadcrumbs, rightSlot: isMobile ? pageTriggers : actions, stepperTabs }) }) }),
31199
+ bannerSlot,
31200
+ /* @__PURE__ */ (0, import_jsx_runtime254.jsx)("div", { ...(0, import_runtime166.trussProps)({
31057
31201
  ...{
31058
31202
  display: "df",
31059
31203
  flexDirection: "fdc",
@@ -31065,29 +31209,29 @@ function WorkflowPageLayout(props) {
31065
31209
  ...aiMode && {
31066
31210
  backgroundImage: "aiBackground",
31067
31211
  minHeight: ["mh_var", {
31068
- "--minHeight": (0, import_runtime165.maybeCssVar)(documentScrollBodyMinHeight())
31212
+ "--minHeight": (0, import_runtime166.maybeCssVar)(documentScrollBodyMinHeight())
31069
31213
  }]
31070
31214
  }
31071
- }), ...tid.body, children: triggers.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(DocumentScrollOverlayRightPaneLayout, { children }) : children }),
31215
+ }), ...tid.body, children: triggers.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(DocumentScrollOverlayRightPaneLayout, { children }) : children }),
31072
31216
  !isMobile && pageTriggers,
31073
- showFooter && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)("div", { ...(0, import_runtime165.trussProps)({
31217
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime254.jsx)("div", { ...(0, import_runtime166.trussProps)({
31074
31218
  flexShrink: "fs0",
31075
31219
  width: "w100",
31076
31220
  height: ["h_var", {
31077
31221
  "--height": `${mobileFooterHeightPx}px`
31078
31222
  }]
31079
- }), children: /* @__PURE__ */ (0, import_jsx_runtime252.jsx)("div", { ...(0, import_runtime165.trussProps)({
31223
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime254.jsx)("div", { ...(0, import_runtime166.trussProps)({
31080
31224
  ...{
31081
31225
  position: "fixed",
31082
31226
  bottom: "bot_0",
31083
31227
  width: ["w_var", {
31084
- "--width": (0, import_runtime165.maybeCssVar)(__maybeInc36(headerWidth))
31228
+ "--width": (0, import_runtime166.maybeCssVar)(__maybeInc37(headerWidth))
31085
31229
  }],
31086
31230
  height: ["h_var", {
31087
31231
  "--height": `${mobileFooterHeightPx}px`
31088
31232
  }],
31089
31233
  zIndex: ["z_var", {
31090
- "--zIndex": (0, import_runtime165.maybeCssVar)(zIndices.pageStickyFooter)
31234
+ "--zIndex": (0, import_runtime166.maybeCssVar)(zIndices.pageStickyFooter)
31091
31235
  }],
31092
31236
  display: "df",
31093
31237
  alignItems: "aic",
@@ -31105,12 +31249,12 @@ function WorkflowPageLayout(props) {
31105
31249
  ...pageContentPaddingX
31106
31250
  }), ...tid.footer, children: actions }) })
31107
31251
  ] }),
31108
- navigationBlocker && /* @__PURE__ */ (0, import_jsx_runtime252.jsx)(UnsavedChangesNavigationModal, { ...navigationBlocker })
31252
+ navigationBlocker && /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(UnsavedChangesNavigationModal, { ...navigationBlocker })
31109
31253
  ] });
31110
31254
  }
31111
31255
 
31112
31256
  // src/layouts/Workflow/FocusedFormLayout.tsx
31113
- var import_jsx_runtime253 = require("react/jsx-runtime");
31257
+ var import_jsx_runtime255 = require("react/jsx-runtime");
31114
31258
  function FocusedFormLayout(props) {
31115
31259
  const {
31116
31260
  onCancel,
@@ -31122,15 +31266,17 @@ function FocusedFormLayout(props) {
31122
31266
  allowNavigation,
31123
31267
  aiMode,
31124
31268
  rightPaneTriggers,
31269
+ banner,
31125
31270
  children,
31126
31271
  ...headerProps
31127
31272
  } = props;
31128
31273
  const tid = useTestIds(props, "focusedFormLayout");
31129
- return /* @__PURE__ */ (0, import_jsx_runtime253.jsx)(
31274
+ return /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(
31130
31275
  WorkflowPageLayout,
31131
31276
  {
31132
31277
  ...tid,
31133
31278
  ...headerProps,
31279
+ banner,
31134
31280
  aiMode,
31135
31281
  isDirty,
31136
31282
  allowNavigation,
@@ -31146,8 +31292,8 @@ function FocusedFormLayout(props) {
31146
31292
  }
31147
31293
 
31148
31294
  // src/layouts/Workflow/StepperLayout.tsx
31149
- var import_react173 = require("react");
31150
- var import_jsx_runtime254 = require("react/jsx-runtime");
31295
+ var import_react175 = require("react");
31296
+ var import_jsx_runtime256 = require("react/jsx-runtime");
31151
31297
  function StepperLayout(props) {
31152
31298
  const {
31153
31299
  steps,
@@ -31159,10 +31305,11 @@ function StepperLayout(props) {
31159
31305
  isDirty,
31160
31306
  allowNavigation,
31161
31307
  aiMode,
31308
+ banner,
31162
31309
  ...headerProps
31163
31310
  } = props;
31164
31311
  const stepTabs = steps.map((step) => ({ ...step, value: defaultTestId(step.label) }));
31165
- const [currentStep, setCurrentStep] = (0, import_react173.useState)(() => getInitialStep(stepTabs, defaultStep));
31312
+ const [currentStep, setCurrentStep] = (0, import_react175.useState)(() => getInitialStep(stepTabs, defaultStep));
31166
31313
  const tid = useTestIds(props, "stepperLayout");
31167
31314
  const { closeRightPane } = useRightPaneActions();
31168
31315
  const currentIndex = hasStep(stepTabs, currentStep) ? stepTabs.findIndex((step) => step.value === currentStep) : 0;
@@ -31174,11 +31321,12 @@ function StepperLayout(props) {
31174
31321
  closeRightPane();
31175
31322
  setCurrentStep(value);
31176
31323
  }
31177
- return /* @__PURE__ */ (0, import_jsx_runtime254.jsx)(
31324
+ return /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
31178
31325
  WorkflowPageLayout,
31179
31326
  {
31180
31327
  ...tid,
31181
31328
  ...headerProps,
31329
+ banner,
31182
31330
  aiMode,
31183
31331
  stepperTabs: { steps: stepTabs, currentStep, onChange: goToStep },
31184
31332
  isDirty,
@@ -31217,7 +31365,7 @@ function getInitialStep(steps, defaultStep) {
31217
31365
 
31218
31366
  // src/forms/BoundChipSelectField.tsx
31219
31367
  var import_mobx_react23 = require("mobx-react");
31220
- var import_jsx_runtime255 = require("react/jsx-runtime");
31368
+ var import_jsx_runtime257 = require("react/jsx-runtime");
31221
31369
  function BoundChipSelectField(props) {
31222
31370
  const {
31223
31371
  field,
@@ -31233,7 +31381,7 @@ function BoundChipSelectField(props) {
31233
31381
  ...others
31234
31382
  } = props;
31235
31383
  const testId = useTestIds(props, field.key);
31236
- return /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(import_mobx_react23.Observer, { children: () => /* @__PURE__ */ (0, import_jsx_runtime255.jsx)(
31384
+ return /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(import_mobx_react23.Observer, { children: () => /* @__PURE__ */ (0, import_jsx_runtime257.jsx)(
31237
31385
  ChipSelectField,
31238
31386
  {
31239
31387
  label,
@@ -31263,12 +31411,12 @@ function BoundChipSelectField(props) {
31263
31411
  }
31264
31412
 
31265
31413
  // src/forms/BoundSelectAndTextField.tsx
31266
- var import_jsx_runtime256 = require("react/jsx-runtime");
31414
+ var import_jsx_runtime258 = require("react/jsx-runtime");
31267
31415
  function BoundSelectAndTextField(props) {
31268
31416
  const { selectFieldProps, textFieldProps, compact = true } = props;
31269
31417
  const tid = useTestIds(props);
31270
- return /* @__PURE__ */ (0, import_jsx_runtime256.jsxs)(CompoundField, { children: [
31271
- /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
31418
+ return /* @__PURE__ */ (0, import_jsx_runtime258.jsxs)(CompoundField, { children: [
31419
+ /* @__PURE__ */ (0, import_jsx_runtime258.jsx)(
31272
31420
  BoundSelectField,
31273
31421
  {
31274
31422
  ...tid[defaultTestId(selectFieldProps.label ?? selectFieldProps.field.key)],
@@ -31277,7 +31425,7 @@ function BoundSelectAndTextField(props) {
31277
31425
  compact
31278
31426
  }
31279
31427
  ),
31280
- /* @__PURE__ */ (0, import_jsx_runtime256.jsx)(
31428
+ /* @__PURE__ */ (0, import_jsx_runtime258.jsx)(
31281
31429
  BoundTextField,
31282
31430
  {
31283
31431
  ...tid[defaultTestId(textFieldProps.label ?? textFieldProps.field.key)],
@@ -31289,8 +31437,8 @@ function BoundSelectAndTextField(props) {
31289
31437
  }
31290
31438
 
31291
31439
  // src/forms/FormHeading.tsx
31292
- var import_runtime166 = require("@homebound/truss/runtime");
31293
- var import_jsx_runtime257 = (
31440
+ var import_runtime167 = require("@homebound/truss/runtime");
31441
+ var import_jsx_runtime259 = (
31294
31442
  // Add space before the heading, but only if it's not first.
31295
31443
  require("react/jsx-runtime")
31296
31444
  );
@@ -31301,7 +31449,7 @@ function FormHeading(props) {
31301
31449
  isFirst = false,
31302
31450
  ...others
31303
31451
  } = props;
31304
- return /* @__PURE__ */ (0, import_jsx_runtime257.jsx)("h3", { ...(0, import_runtime166.trussProps)({
31452
+ return /* @__PURE__ */ (0, import_jsx_runtime259.jsx)("h3", { ...(0, import_runtime167.trussProps)({
31305
31453
  ...{
31306
31454
  fontWeight: "fw4",
31307
31455
  fontSize: "fz_16px",
@@ -31317,8 +31465,8 @@ FormHeading.isFormHeading = true;
31317
31465
 
31318
31466
  // src/forms/StaticField.tsx
31319
31467
  var import_utils51 = require("@react-aria/utils");
31320
- var import_runtime167 = require("@homebound/truss/runtime");
31321
- var import_jsx_runtime258 = require("react/jsx-runtime");
31468
+ var import_runtime168 = require("@homebound/truss/runtime");
31469
+ var import_jsx_runtime260 = require("react/jsx-runtime");
31322
31470
  function StaticField(props) {
31323
31471
  const {
31324
31472
  fieldProps
@@ -31331,14 +31479,14 @@ function StaticField(props) {
31331
31479
  } = props;
31332
31480
  const tid = useTestIds(props, typeof label === "string" ? defaultTestId(label) : "staticField");
31333
31481
  const id = (0, import_utils51.useId)();
31334
- return /* @__PURE__ */ (0, import_jsx_runtime258.jsxs)("div", { ...(0, import_runtime167.trussProps)({
31482
+ return /* @__PURE__ */ (0, import_jsx_runtime260.jsxs)("div", { ...(0, import_runtime168.trussProps)({
31335
31483
  ...labelStyle === "left" ? {
31336
31484
  display: "df",
31337
31485
  justifyContent: "jcsb",
31338
31486
  maxWidth: "maxw100"
31339
31487
  } : {}
31340
31488
  }), ...tid.container, children: [
31341
- /* @__PURE__ */ (0, import_jsx_runtime258.jsx)("label", { ...(0, import_runtime167.trussProps)({
31489
+ /* @__PURE__ */ (0, import_jsx_runtime260.jsx)("label", { ...(0, import_runtime168.trussProps)({
31342
31490
  display: "db",
31343
31491
  fontWeight: "fw4",
31344
31492
  fontSize: "fz_14px",
@@ -31348,7 +31496,7 @@ function StaticField(props) {
31348
31496
  }],
31349
31497
  marginBottom: "mb_4px"
31350
31498
  }), htmlFor: id, ...tid.label, children: label }),
31351
- /* @__PURE__ */ (0, import_jsx_runtime258.jsx)("div", { id, ...(0, import_runtime167.trussProps)({
31499
+ /* @__PURE__ */ (0, import_jsx_runtime260.jsx)("div", { id, ...(0, import_runtime168.trussProps)({
31352
31500
  fontWeight: "fw4",
31353
31501
  fontSize: "fz_14px",
31354
31502
  lineHeight: "lh_20px",
@@ -31365,9 +31513,9 @@ function StaticField(props) {
31365
31513
  }
31366
31514
 
31367
31515
  // src/hooks/useFilter.ts
31368
- var import_react174 = require("react");
31516
+ var import_react176 = require("react");
31369
31517
  function useFilter4({ filterDefs }) {
31370
- const [filter, setFilter] = (0, import_react174.useState)(
31518
+ const [filter, setFilter] = (0, import_react176.useState)(
31371
31519
  Object.fromEntries(
31372
31520
  safeEntries(filterDefs).filter(([key, def]) => def(key).defaultValue !== void 0).map(([key, def]) => [key, def(key).defaultValue])
31373
31521
  )
@@ -31376,10 +31524,10 @@ function useFilter4({ filterDefs }) {
31376
31524
  }
31377
31525
 
31378
31526
  // src/inputs/Autocomplete.tsx
31379
- var import_react175 = require("react");
31527
+ var import_react177 = require("react");
31380
31528
  var import_react_aria69 = require("react-aria");
31381
31529
  var import_react_stately18 = require("react-stately");
31382
- var import_jsx_runtime259 = require("react/jsx-runtime");
31530
+ var import_jsx_runtime261 = require("react/jsx-runtime");
31383
31531
  function Autocomplete(props) {
31384
31532
  const {
31385
31533
  onSelect,
@@ -31396,8 +31544,8 @@ function Autocomplete(props) {
31396
31544
  } = props;
31397
31545
  const { effectiveValue, proposalProps } = useAiProposal(value, proposedValue);
31398
31546
  const disabledOptionsWithReasons = Object.fromEntries(disabledOptions?.map(disabledOptionToKeyedTuple) ?? []);
31399
- const comboBoxChildren = (0, import_react175.useCallback)(
31400
- (item) => /* @__PURE__ */ (0, import_jsx_runtime259.jsx)(import_react_stately18.Item, { textValue: getOptionLabel(item), children: getOptionMenuLabel ? getOptionMenuLabel(item) : getOptionLabel(item) }, getOptionValue(item)),
31547
+ const comboBoxChildren = (0, import_react177.useCallback)(
31548
+ (item) => /* @__PURE__ */ (0, import_jsx_runtime261.jsx)(import_react_stately18.Item, { textValue: getOptionLabel(item), children: getOptionMenuLabel ? getOptionMenuLabel(item) : getOptionLabel(item) }, getOptionValue(item)),
31401
31549
  [getOptionValue, getOptionLabel, getOptionMenuLabel]
31402
31550
  );
31403
31551
  const comboBoxProps = {
@@ -31421,10 +31569,10 @@ function Autocomplete(props) {
31421
31569
  ...others
31422
31570
  };
31423
31571
  const state = (0, import_react_stately18.useComboBoxState)(comboBoxProps);
31424
- const inputWrapRef = (0, import_react175.useRef)(null);
31425
- const inputRef = (0, import_react175.useRef)(null);
31426
- const listBoxRef = (0, import_react175.useRef)(null);
31427
- const popoverRef = (0, import_react175.useRef)(null);
31572
+ const inputWrapRef = (0, import_react177.useRef)(null);
31573
+ const inputRef = (0, import_react177.useRef)(null);
31574
+ const listBoxRef = (0, import_react177.useRef)(null);
31575
+ const popoverRef = (0, import_react177.useRef)(null);
31428
31576
  const { inputProps, listBoxProps, labelProps } = (0, import_react_aria69.useComboBox)(
31429
31577
  {
31430
31578
  ...comboBoxProps,
@@ -31450,8 +31598,8 @@ function Autocomplete(props) {
31450
31598
  // Ensures the menu never gets too small.
31451
31599
  minWidth: 200
31452
31600
  };
31453
- return /* @__PURE__ */ (0, import_jsx_runtime259.jsxs)(import_jsx_runtime259.Fragment, { children: [
31454
- /* @__PURE__ */ (0, import_jsx_runtime259.jsx)(
31601
+ return /* @__PURE__ */ (0, import_jsx_runtime261.jsxs)(import_jsx_runtime261.Fragment, { children: [
31602
+ /* @__PURE__ */ (0, import_jsx_runtime261.jsx)(
31455
31603
  TextFieldBase,
31456
31604
  {
31457
31605
  inputRef,
@@ -31461,11 +31609,11 @@ function Autocomplete(props) {
31461
31609
  onChange: onInputChange,
31462
31610
  ...proposalProps,
31463
31611
  clearable: true,
31464
- startAdornment: "startAdornment" in props ? props.startAdornment : /* @__PURE__ */ (0, import_jsx_runtime259.jsx)(Icon, { icon: "search" }),
31612
+ startAdornment: "startAdornment" in props ? props.startAdornment : /* @__PURE__ */ (0, import_jsx_runtime261.jsx)(Icon, { icon: "search" }),
31465
31613
  ...others
31466
31614
  }
31467
31615
  ),
31468
- state.isOpen && /* @__PURE__ */ (0, import_jsx_runtime259.jsx)(
31616
+ state.isOpen && /* @__PURE__ */ (0, import_jsx_runtime261.jsx)(
31469
31617
  Popover,
31470
31618
  {
31471
31619
  triggerRef: inputRef,
@@ -31474,7 +31622,7 @@ function Autocomplete(props) {
31474
31622
  onClose: () => state.close(),
31475
31623
  isOpen: state.isOpen,
31476
31624
  minWidth: 200,
31477
- children: /* @__PURE__ */ (0, import_jsx_runtime259.jsx)(
31625
+ children: /* @__PURE__ */ (0, import_jsx_runtime261.jsx)(
31478
31626
  ListBox,
31479
31627
  {
31480
31628
  ...listBoxProps,
@@ -31492,11 +31640,11 @@ function Autocomplete(props) {
31492
31640
  }
31493
31641
 
31494
31642
  // src/inputs/ToggleButton.tsx
31495
- var import_react176 = require("react");
31643
+ var import_react178 = require("react");
31496
31644
  var import_react_aria70 = require("react-aria");
31497
31645
  var import_react_stately19 = require("react-stately");
31498
- var import_runtime168 = require("@homebound/truss/runtime");
31499
- var import_jsx_runtime260 = require("react/jsx-runtime");
31646
+ var import_runtime169 = require("@homebound/truss/runtime");
31647
+ var import_jsx_runtime262 = require("react/jsx-runtime");
31500
31648
  function ToggleButton(props) {
31501
31649
  const {
31502
31650
  selected: isSelected = false,
@@ -31507,7 +31655,7 @@ function ToggleButton(props) {
31507
31655
  __storyState,
31508
31656
  ...otherProps
31509
31657
  } = props;
31510
- const [asyncInProgress, setAsyncInProgress] = (0, import_react176.useState)(false);
31658
+ const [asyncInProgress, setAsyncInProgress] = (0, import_react178.useState)(false);
31511
31659
  const isDisabled = !!disabled || asyncInProgress;
31512
31660
  const ariaProps = {
31513
31661
  "aria-label": label,
@@ -31526,8 +31674,8 @@ function ToggleButton(props) {
31526
31674
  return result;
31527
31675
  }
31528
31676
  });
31529
- const labelRef = (0, import_react176.useRef)(null);
31530
- const ref = (0, import_react176.useRef)(null);
31677
+ const labelRef = (0, import_react178.useRef)(null);
31678
+ const ref = (0, import_react178.useRef)(null);
31531
31679
  const tid = useTestIds(otherProps, label);
31532
31680
  const {
31533
31681
  isPressed: isPressedFromEvents,
@@ -31560,7 +31708,7 @@ function ToggleButton(props) {
31560
31708
  ...focusProps,
31561
31709
  ...hoverProps,
31562
31710
  ...pressProps,
31563
- ...(0, import_runtime168.trussProps)({
31711
+ ...(0, import_runtime169.trussProps)({
31564
31712
  // Gray500 off-state has no semantic match — keep palette (OnSurfaceMuted is Gray700).
31565
31713
  ...{
31566
31714
  borderRadius: "br4",
@@ -31600,10 +31748,10 @@ function ToggleButton(props) {
31600
31748
  return maybeTooltip({
31601
31749
  title: tooltip,
31602
31750
  placement: "top",
31603
- children: /* @__PURE__ */ (0, import_jsx_runtime260.jsxs)("label", { ...labelAttrs, children: [
31604
- icon && /* @__PURE__ */ (0, import_jsx_runtime260.jsx)(Icon, { icon }),
31751
+ children: /* @__PURE__ */ (0, import_jsx_runtime262.jsxs)("label", { ...labelAttrs, children: [
31752
+ icon && /* @__PURE__ */ (0, import_jsx_runtime262.jsx)(Icon, { icon }),
31605
31753
  label,
31606
- /* @__PURE__ */ (0, import_jsx_runtime260.jsx)(import_react_aria70.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime260.jsx)("input", { ref, ...inputProps, ...tid.value }) })
31754
+ /* @__PURE__ */ (0, import_jsx_runtime262.jsx)(import_react_aria70.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime262.jsx)("input", { ref, ...inputProps, ...tid.value }) })
31607
31755
  ] })
31608
31756
  });
31609
31757
  }
@@ -31755,6 +31903,7 @@ var togglePressStyles = {
31755
31903
  NavbarLayout,
31756
31904
  NumberField,
31757
31905
  OpenModal,
31906
+ PageBanner,
31758
31907
  PageHeaderLayout,
31759
31908
  Pagination,
31760
31909
  Palette,
@@ -31825,19 +31974,20 @@ var togglePressStyles = {
31825
31974
  actionColumn,
31826
31975
  applyRowFn,
31827
31976
  assignDefaultColumnIds,
31828
- bannerAndNavbarChromeTop,
31829
31977
  beamEnvironmentBannerLayoutHeightVar,
31830
31978
  beamFloatingRightOffsetVar,
31831
31979
  beamLayoutContentPaddingXVar,
31832
31980
  beamLayoutViewportHeightVar,
31833
31981
  beamLayoutViewportWidthVar,
31834
31982
  beamNavbarLayoutHeightVar,
31983
+ beamPageBannerHeightVar,
31835
31984
  beamPageHeaderLayoutHeightVar,
31836
31985
  beamRightPaneContentMinVar,
31837
31986
  beamRightPaneWidthVar,
31838
31987
  beamSideNavLayoutWidthVar,
31839
31988
  beamTableActionsHeightVar,
31840
31989
  beamWorkflowLayoutFooterHeightVar,
31990
+ belowNavbarOffset,
31841
31991
  booleanFilter,
31842
31992
  boundCheckboxField,
31843
31993
  boundCheckboxGroupField,
@@ -31951,6 +32101,7 @@ var togglePressStyles = {
31951
32101
  nonKindGridColumnKeys,
31952
32102
  numberRangeFilter,
31953
32103
  numericColumn,
32104
+ pageBannerOffset,
31954
32105
  pageContentGutterPx,
31955
32106
  pageContentPaddingX,
31956
32107
  parseDate,
@@ -32014,6 +32165,7 @@ var togglePressStyles = {
32014
32165
  useHasSideNavLayoutProvider,
32015
32166
  useHover,
32016
32167
  useModal,
32168
+ usePageBanner,
32017
32169
  usePersistedFilter,
32018
32170
  useQueryState,
32019
32171
  useResponsiveGrid,