@homebound/beam 3.102.0 → 3.104.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
@@ -162,6 +162,7 @@ __export(index_exports, {
162
162
  PinToggle: () => PinToggle,
163
163
  PresentationProvider: () => PresentationProvider,
164
164
  PreventBrowserScroll: () => PreventBrowserScroll,
165
+ ProposedValue: () => ProposedValue,
165
166
  RIGHT_SIDEBAR_MIN_WIDTH: () => RIGHT_SIDEBAR_MIN_WIDTH,
166
167
  RadioGroupField: () => RadioGroupField,
167
168
  ResponsiveGrid: () => ResponsiveGrid,
@@ -8670,6 +8671,34 @@ function InlineLabel({
8670
8671
  ] });
8671
8672
  }
8672
8673
 
8674
+ // src/components/ProposedValue.tsx
8675
+ var import_runtime21 = require("@homebound/truss/runtime");
8676
+ var import_jsx_runtime27 = require("react/jsx-runtime");
8677
+ function ProposedValue(props) {
8678
+ const {
8679
+ original,
8680
+ proposed
8681
+ } = props;
8682
+ const tid = useTestIds(props, "proposedValue");
8683
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { ...tid, children: [
8684
+ original && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
8685
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { ...(0, import_runtime21.trussProps)({
8686
+ textDecoration: "tdlt",
8687
+ color: ["color_var", {
8688
+ "--color": "var(--b-on-surface-muted)"
8689
+ }]
8690
+ }), ...tid.original, children: original }),
8691
+ " "
8692
+ ] }),
8693
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { ...(0, import_runtime21.trussProps)({
8694
+ fontWeight: "fw6",
8695
+ color: ["color_var", {
8696
+ "--color": "var(--b-ai-field-fg)"
8697
+ }]
8698
+ }), ...tid.proposed, children: proposed })
8699
+ ] });
8700
+ }
8701
+
8673
8702
  // src/components/Table/components/Row.tsx
8674
8703
  var import_mobx_react = require("mobx-react");
8675
8704
  var import_react33 = __toESM(require("react"), 1);
@@ -8677,11 +8706,11 @@ var import_react_aria6 = require("react-aria");
8677
8706
 
8678
8707
  // src/components/Table/components/cell.tsx
8679
8708
  var import_react_router_dom2 = require("react-router-dom");
8680
- var import_runtime21 = require("@homebound/truss/runtime");
8681
- var import_jsx_runtime27 = require("react/jsx-runtime");
8709
+ var import_runtime22 = require("@homebound/truss/runtime");
8710
+ var import_jsx_runtime28 = require("react/jsx-runtime");
8682
8711
  var defaultRenderFn = (as, colSpan) => (key, css2, content, row, rowStyle, classNames, onClick, tooltip) => {
8683
8712
  const Cell = as === "table" ? "td" : "div";
8684
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Cell, { ...(0, import_runtime21.mergeProps)(classNames, void 0, {
8713
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Cell, { ...(0, import_runtime22.mergeProps)(classNames, void 0, {
8685
8714
  ...css2,
8686
8715
  ...{
8687
8716
  cursor: "cursor_default"
@@ -8692,7 +8721,7 @@ var defaultRenderFn = (as, colSpan) => (key, css2, content, row, rowStyle, class
8692
8721
  };
8693
8722
  var headerRenderFn = (column2, as, colSpan) => (key, css2, content, row, rowStyle, classNames, onClick, tooltip) => {
8694
8723
  const Cell = as === "table" ? "th" : "div";
8695
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Cell, { ...(0, import_runtime21.mergeProps)(classNames, void 0, {
8724
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Cell, { ...(0, import_runtime22.mergeProps)(classNames, void 0, {
8696
8725
  ...css2
8697
8726
  }), ...as === "table" && {
8698
8727
  colSpan
@@ -8701,15 +8730,15 @@ var headerRenderFn = (column2, as, colSpan) => (key, css2, content, row, rowStyl
8701
8730
  var rowLinkRenderFn = (as, colSpan) => (key, css2, content, row, rowStyle, classNames, onClick, tooltip) => {
8702
8731
  const to = rowStyle.rowLink(row);
8703
8732
  if (as === "table") {
8704
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("td", { ...(0, import_runtime21.mergeProps)(classNames, void 0, {
8733
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("td", { ...(0, import_runtime22.mergeProps)(classNames, void 0, {
8705
8734
  ...css2
8706
- }), colSpan, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_router_dom2.Link, { to, ...(0, import_runtime21.mergeProps)(navLink, void 0, {
8735
+ }), colSpan, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_router_dom2.Link, { to, ...(0, import_runtime22.mergeProps)(navLink, void 0, {
8707
8736
  textDecoration: "tdn",
8708
8737
  color: "color_unset",
8709
8738
  display: "db"
8710
8739
  }), children: content }) }, key);
8711
8740
  }
8712
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_router_dom2.Link, { to, ...(0, import_runtime21.mergeProps)(`${navLink} ${classNames}`, void 0, {
8741
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_router_dom2.Link, { to, ...(0, import_runtime22.mergeProps)(`${navLink} ${classNames}`, void 0, {
8713
8742
  ...{
8714
8743
  textDecoration: "tdn",
8715
8744
  color: "color_unset"
@@ -8719,7 +8748,7 @@ var rowLinkRenderFn = (as, colSpan) => (key, css2, content, row, rowStyle, class
8719
8748
  };
8720
8749
  var rowClickRenderFn = (as, api, colSpan) => (key, css2, content, row, rowStyle, classNames, onClick, tooltip) => {
8721
8750
  const Cell = as === "table" ? "td" : "div";
8722
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Cell, { ...(0, import_runtime21.mergeProps)(classNames, void 0, {
8751
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Cell, { ...(0, import_runtime22.mergeProps)(classNames, void 0, {
8723
8752
  ...css2
8724
8753
  }), onClick: (e) => {
8725
8754
  rowStyle.onClick(row, api);
@@ -8731,8 +8760,8 @@ var rowClickRenderFn = (as, api, colSpan) => (key, css2, content, row, rowStyle,
8731
8760
 
8732
8761
  // src/components/Table/components/ColumnResizeHandle.tsx
8733
8762
  var import_react31 = require("react");
8734
- var import_runtime22 = require("@homebound/truss/runtime");
8735
- var import_jsx_runtime28 = require("react/jsx-runtime");
8763
+ var import_runtime23 = require("@homebound/truss/runtime");
8764
+ var import_jsx_runtime29 = require("react/jsx-runtime");
8736
8765
  function findScrollableParent(element) {
8737
8766
  if (!element) return null;
8738
8767
  let parent = element.parentElement;
@@ -8895,8 +8924,8 @@ function ColumnResizeHandle({
8895
8924
  document.body.style.userSelect = "";
8896
8925
  };
8897
8926
  }, []);
8898
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
8899
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ref: handleRef, onMouseDown: handleMouseDown, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => !isDragging && setIsHovering(false), ...(0, import_runtime22.trussProps)({
8927
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
8928
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: handleRef, onMouseDown: handleMouseDown, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => !isDragging && setIsHovering(false), ...(0, import_runtime23.trussProps)({
8900
8929
  position: "absolute",
8901
8930
  top: "top0",
8902
8931
  bottom: "bottom0",
@@ -8913,7 +8942,7 @@ function ColumnResizeHandle({
8913
8942
  }]
8914
8943
  } : {}
8915
8944
  }), ...tid.handle, "data-column-id": columnId, "data-column-index": columnIndex }),
8916
- isDragging && guideLineX !== null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ...(0, import_runtime22.trussProps)({
8945
+ isDragging && guideLineX !== null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ...(0, import_runtime23.trussProps)({
8917
8946
  position: "fixed",
8918
8947
  top: ["top_var", {
8919
8948
  "--top": `${guideLineTop}px`
@@ -8930,7 +8959,7 @@ function ColumnResizeHandle({
8930
8959
  }],
8931
8960
  pointerEvents: "pointerEvents_none",
8932
8961
  zIndex: ["z_var", {
8933
- "--zIndex": (0, import_runtime22.maybeCssVar)(zIndices.dragHandle)
8962
+ "--zIndex": (0, import_runtime23.maybeCssVar)(zIndices.dragHandle)
8934
8963
  }],
8935
8964
  transform: "transform_translateX_50"
8936
8965
  }), ...tid.guideLine })
@@ -8939,8 +8968,8 @@ function ColumnResizeHandle({
8939
8968
 
8940
8969
  // src/components/Table/components/KeptGroupRow.tsx
8941
8970
  var import_react32 = require("react");
8942
- var import_runtime23 = require("@homebound/truss/runtime");
8943
- var import_jsx_runtime29 = require("react/jsx-runtime");
8971
+ var import_runtime24 = require("@homebound/truss/runtime");
8972
+ var import_jsx_runtime30 = require("react/jsx-runtime");
8944
8973
  var __maybeInc5 = (inc) => {
8945
8974
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
8946
8975
  };
@@ -8958,7 +8987,7 @@ function KeptGroupRow(props) {
8958
8987
  tableState
8959
8988
  } = (0, import_react32.useContext)(TableStateContext);
8960
8989
  const numHiddenSelectedRows = useComputed(() => tableState.keptRows.length, [tableState]);
8961
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CellTag, { ...(0, import_runtime23.trussProps)({
8990
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CellTag, { ...(0, import_runtime24.trussProps)({
8962
8991
  ...style.cellCss,
8963
8992
  ...style.betweenRowsCss,
8964
8993
  ...isLastBodyRow && style.lastRowCellCss,
@@ -8968,22 +8997,22 @@ function KeptGroupRow(props) {
8968
8997
  ...{
8969
8998
  paddingLeft: "pl0",
8970
8999
  width: ["w_var", {
8971
- "--width": (0, import_runtime23.maybeCssVar)(__maybeInc5(`calc(${columnSizes.join(" + ")})`))
9000
+ "--width": (0, import_runtime24.maybeCssVar)(__maybeInc5(`calc(${columnSizes.join(" + ")})`))
8972
9001
  }]
8973
9002
  }
8974
9003
  }), ...as === "table" ? {
8975
9004
  colSpan
8976
- } : {}, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "df aic gap_12px", children: [
8977
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "w_38px df jcc", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapseToggle, { row, compact: true }) }),
8978
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "df aic gap1", children: [
8979
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { icon: "infoCircle", inc: 2 }),
9005
+ } : {}, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "df aic gap_12px", children: [
9006
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "w_38px df jcc", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CollapseToggle, { row, compact: true }) }),
9007
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "df aic gap1", children: [
9008
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon, { icon: "infoCircle", inc: 2 }),
8980
9009
  `${numHiddenSelectedRows} selected ${pluralize(numHiddenSelectedRows, "row")} hidden due to filters`
8981
9010
  ] })
8982
9011
  ] }) });
8983
9012
  }
8984
9013
 
8985
9014
  // src/components/Table/TableStyles.tsx
8986
- var import_runtime24 = require("@homebound/truss/runtime");
9015
+ var import_runtime25 = require("@homebound/truss/runtime");
8987
9016
  var __typography = {
8988
9017
  xs2: {
8989
9018
  fontWeight: "fw4",
@@ -9076,7 +9105,7 @@ function memoizedTableStyles() {
9076
9105
  "--backgroundColor": "var(--b-surface-hover)"
9077
9106
  }],
9078
9107
  boxShadow: ["boxShadow_var", {
9079
- "--boxShadow": (0, import_runtime24.maybeCssVar)(insetSeparator)
9108
+ "--boxShadow": (0, import_runtime25.maybeCssVar)(insetSeparator)
9080
9109
  }]
9081
9110
  },
9082
9111
  ...allWhite && {
@@ -9216,14 +9245,14 @@ function memoizedTableStyles() {
9216
9245
  paddingTop: "pt0",
9217
9246
  paddingBottom: "pb0",
9218
9247
  boxShadow: ["boxShadow_var", {
9219
- "--boxShadow": (0, import_runtime24.maybeCssVar)(insetSeparator)
9248
+ "--boxShadow": (0, import_runtime25.maybeCssVar)(insetSeparator)
9220
9249
  }]
9221
9250
  },
9222
9251
  // Draw a 1px divider inside the cell on the right edge and bottom edge.
9223
9252
  // Using `inset` keeps the line inside the cell so it doesn't change layout.
9224
9253
  expandableHeaderNonLastColumnCss: {
9225
9254
  boxShadow: ["boxShadow_var", {
9226
- "--boxShadow": (0, import_runtime24.maybeCssVar)(insetSeparatorCorner)
9255
+ "--boxShadow": (0, import_runtime25.maybeCssVar)(insetSeparatorCorner)
9227
9256
  }]
9228
9257
  },
9229
9258
  cellCss: {
@@ -9236,12 +9265,12 @@ function memoizedTableStyles() {
9236
9265
  "--backgroundColor": "var(--b-surface)"
9237
9266
  }],
9238
9267
  alignItems: ["ai_var", {
9239
- "--alignItems": (0, import_runtime24.maybeCssVar)(alignItems)
9268
+ "--alignItems": (0, import_runtime25.maybeCssVar)(alignItems)
9240
9269
  }],
9241
9270
  paddingLeft: "pl_12px",
9242
9271
  paddingRight: "pr_12px",
9243
9272
  boxShadow: ["boxShadow_var", {
9244
- "--boxShadow": (0, import_runtime24.maybeCssVar)(insetSeparator)
9273
+ "--boxShadow": (0, import_runtime25.maybeCssVar)(insetSeparator)
9245
9274
  }]
9246
9275
  },
9247
9276
  ...rowHeight === "flexible" ? {
@@ -9337,7 +9366,7 @@ function memoizedTableStyles() {
9337
9366
  // Pinned rows keep Blue50 until a selection-surface token exists.
9338
9367
  pinnedRowCss: {
9339
9368
  backgroundColor: ["bgColor_var", {
9340
- "--backgroundColor": (0, import_runtime24.maybeCssVar)("rgba(239, 246, 255, 1)" /* Blue50 */)
9369
+ "--backgroundColor": (0, import_runtime25.maybeCssVar)("rgba(239, 246, 255, 1)" /* Blue50 */)
9341
9370
  }]
9342
9371
  }
9343
9372
  };
@@ -9457,8 +9486,8 @@ function resolveStyles(style) {
9457
9486
 
9458
9487
  // src/components/Table/components/Row.tsx
9459
9488
  var import_use_debounce2 = require("use-debounce");
9460
- var import_runtime25 = require("@homebound/truss/runtime");
9461
- var import_jsx_runtime30 = require("react/jsx-runtime");
9489
+ var import_runtime26 = require("@homebound/truss/runtime");
9490
+ var import_jsx_runtime31 = require("react/jsx-runtime");
9462
9491
  var __maybeInc6 = (inc) => {
9463
9492
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
9464
9493
  };
@@ -9630,12 +9659,12 @@ function RowImpl(props) {
9630
9659
  const ref = (0, import_react33.useRef)(null);
9631
9660
  const dragOverCallback = (0, import_react33.useCallback)((row2, evt) => onDragOver?.(row2, evt), [onDragOver]);
9632
9661
  const onDragOverDebounced = (0, import_use_debounce2.useDebouncedCallback)(dragOverCallback, 100);
9633
- const RowContent = () => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(RowTag, { ...(0, import_runtime25.mergeProps)(`${BorderHoverParent}${showRowHoverColor ? ` ${RowHoverClass}` : ""}`, void 0, rowCss), ...others, "data-gridrow": true, ...getCount(row.id), ref, children: isKeptGroupRow ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(KeptGroupRow, { as, style, columnSizes, row, colSpan: columns.length, isLastBodyRow }) : columns.map((column2, columnIndex) => {
9662
+ const RowContent = () => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(RowTag, { ...(0, import_runtime26.mergeProps)(`${BorderHoverParent}${showRowHoverColor ? ` ${RowHoverClass}` : ""}`, void 0, rowCss), ...others, "data-gridrow": true, ...getCount(row.id), ref, children: isKeptGroupRow ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(KeptGroupRow, { as, style, columnSizes, row, colSpan: columns.length, isLastBodyRow }) : columns.map((column2, columnIndex) => {
9634
9663
  const maybeExpandedColumn = expandColumnHidden ? columns[columnIndex - 1] : column2;
9635
9664
  const isExpanded = tableState.isExpandedColumn(maybeExpandedColumn.id);
9636
9665
  if (column2.hideOnExpand && isExpanded) {
9637
9666
  expandColumnHidden = true;
9638
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, {});
9667
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, {});
9639
9668
  }
9640
9669
  const numExpandedColumns = isExpanded ? tableState.numberOfExpandedChildren(maybeExpandedColumn.id) ? (
9641
9670
  // Subtract 1 if the column is hidden on expand, since we're not rendering it.
@@ -9681,7 +9710,7 @@ function RowImpl(props) {
9681
9710
  ...{
9682
9711
  position: "sticky",
9683
9712
  zIndex: ["z_var", {
9684
- "--zIndex": (0, import_runtime25.maybeCssVar)(zIndices.tableStickyColumn)
9713
+ "--zIndex": (0, import_runtime26.maybeCssVar)(zIndices.tableStickyColumn)
9685
9714
  }],
9686
9715
  backgroundColor: ["bgColor_var", {
9687
9716
  "--backgroundColor": "var(--b-surface)"
@@ -9689,13 +9718,13 @@ function RowImpl(props) {
9689
9718
  },
9690
9719
  ...maybeSticky === "left" ? {
9691
9720
  left: ["left_var", {
9692
- "--left": (0, import_runtime25.maybeCssVar)(__maybeInc6(columnIndex === 0 ? `var(${beamSideNavLayoutWidthVar}, 0px)` : `calc(var(${beamSideNavLayoutWidthVar}, 0px) + (${columnSizes.slice(0, columnIndex).join(" + ")}))`))
9721
+ "--left": (0, import_runtime26.maybeCssVar)(__maybeInc6(columnIndex === 0 ? `var(${beamSideNavLayoutWidthVar}, 0px)` : `calc(var(${beamSideNavLayoutWidthVar}, 0px) + (${columnSizes.slice(0, columnIndex).join(" + ")}))`))
9693
9722
  }]
9694
9723
  } : {},
9695
9724
  // Offset by the open right pane so sticky-right cells pin to the clear edge, not under it (0 when closed).
9696
9725
  ...maybeSticky === "right" ? {
9697
9726
  right: ["right_var", {
9698
- "--right": (0, import_runtime25.maybeCssVar)(__maybeInc6(columnIndex + 1 === columnSizes.length ? `var(${beamRightPaneWidthVar}, 0px)` : `calc(var(${beamRightPaneWidthVar}, 0px) + (${columnSizes.slice(columnIndex + 1 - columnSizes.length).join(" + ")}))`))
9727
+ "--right": (0, import_runtime26.maybeCssVar)(__maybeInc6(columnIndex + 1 === columnSizes.length ? `var(${beamRightPaneWidthVar}, 0px)` : `calc(var(${beamRightPaneWidthVar}, 0px) + (${columnSizes.slice(columnIndex + 1 - columnSizes.length).join(" + ")}))`))
9699
9728
  }]
9700
9729
  } : {}
9701
9730
  } : {};
@@ -9741,7 +9770,7 @@ function RowImpl(props) {
9741
9770
  ...isTotals && style.totalsCellCss,
9742
9771
  ...isTotals && hasExpandableHeader && {
9743
9772
  boxShadow: ["boxShadow_var", {
9744
- "--boxShadow": (0, import_runtime25.maybeCssVar)(`inset 0 -1px 0 ${maybeCssVar("--b-surface-separator" /* SurfaceSeparator */)}`)
9773
+ "--boxShadow": (0, import_runtime26.maybeCssVar)(`inset 0 -1px 0 ${maybeCssVar("--b-surface-separator" /* SurfaceSeparator */)}`)
9745
9774
  }]
9746
9775
  },
9747
9776
  // Then apply any expandable header specific override
@@ -9752,7 +9781,7 @@ function RowImpl(props) {
9752
9781
  // Only apply if not the last column in the table AND when this column is the last column in the group of expandable column or not expanded AND
9753
9782
  ...hasExpandableHeader && columnIndex + currentColspan < columns.length && (isHeader || isTotals) && currentExpandedColumnCount === 0 && {
9754
9783
  boxShadow: ["boxShadow_var", {
9755
- "--boxShadow": (0, import_runtime25.maybeCssVar)(`inset -1px -1px 0 ${maybeCssVar("--b-surface-separator" /* SurfaceSeparator */)}`)
9784
+ "--boxShadow": (0, import_runtime26.maybeCssVar)(`inset -1px -1px 0 ${maybeCssVar("--b-surface-separator" /* SurfaceSeparator */)}`)
9756
9785
  }]
9757
9786
  },
9758
9787
  // Or level-specific styling
@@ -9766,7 +9795,7 @@ function RowImpl(props) {
9766
9795
  // Active/pinned blue selection fills have no semantic token yet — keep Blue50 default.
9767
9796
  ...isActive ? {
9768
9797
  backgroundColor: ["bgColor_var", {
9769
- "--backgroundColor": (0, import_runtime25.maybeCssVar)(style.activeBgColor ?? "rgba(239, 246, 255, 1)" /* Blue50 */)
9798
+ "--backgroundColor": (0, import_runtime26.maybeCssVar)(style.activeBgColor ?? "rgba(239, 246, 255, 1)" /* Blue50 */)
9770
9799
  }]
9771
9800
  } : {},
9772
9801
  // Add any cell specific style overrides
@@ -9790,7 +9819,7 @@ function RowImpl(props) {
9790
9819
  ...applyCellHighlight && isCellActive ? {
9791
9820
  borderRadius: "br4",
9792
9821
  boxShadow: ["boxShadow_var", {
9793
- "--boxShadow": (0, import_runtime25.maybeCssVar)(`inset 0 0 0 1px ${maybeCssVar("--b-focus-ring-inset" /* FocusRingInset */)}`)
9822
+ "--boxShadow": (0, import_runtime26.maybeCssVar)(`inset 0 0 0 1px ${maybeCssVar("--b-focus-ring-inset" /* FocusRingInset */)}`)
9794
9823
  }]
9795
9824
  } : {}
9796
9825
  },
@@ -9798,7 +9827,7 @@ function RowImpl(props) {
9798
9827
  // If we have a 'levelIndent' defined, then subtract that amount from the first content column's width to ensure all columns will still line up properly.
9799
9828
  ...{
9800
9829
  width: ["w_var", {
9801
- "--width": (0, import_runtime25.maybeCssVar)(__maybeInc6(`calc(${columnSizes.slice(columnIndex, columnIndex + currentColspan).join(" + ")}${applyFirstContentColumnStyles && levelIndent ? ` - ${levelIndent}px` : ""})`))
9830
+ "--width": (0, import_runtime26.maybeCssVar)(__maybeInc6(`calc(${columnSizes.slice(columnIndex, columnIndex + currentColspan).join(" + ")}${applyFirstContentColumnStyles && levelIndent ? ` - ${levelIndent}px` : ""})`))
9802
9831
  }]
9803
9832
  },
9804
9833
  // Gutter columns are budgeted at pageContentGutterPx; strip cell padding so flex min-content does not exceed that width.
@@ -9816,24 +9845,24 @@ function RowImpl(props) {
9816
9845
  const currentSizeStr = columnSizes[columnIndex];
9817
9846
  const minWidthPx = column2.mw ? parseInt(column2.mw.replace("px", ""), 10) : 100;
9818
9847
  const currentWidthPx = parseWidthToPx(currentSizeStr, void 0) ?? resizedWidths?.[column2.id] ?? minWidthPx;
9819
- const cellElementWithHandle = import_react33.default.cloneElement(cellElement, (0, import_react_aria6.mergeProps)(cellElement.props, (0, import_runtime25.trussProps)({
9848
+ const cellElementWithHandle = import_react33.default.cloneElement(cellElement, (0, import_react_aria6.mergeProps)(cellElement.props, (0, import_runtime26.trussProps)({
9820
9849
  ...!maybeSticky && {
9821
9850
  position: "relative"
9822
9851
  }
9823
9852
  }), {
9824
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
9853
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
9825
9854
  cellElement.props.children,
9826
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ColumnResizeHandle, { columnId: column2.id, columnIndex, currentWidth: currentWidthPx, minWidth: minWidthPx, onResize: (colId, width2) => setResizedWidth?.(colId, width2, columnIndex), calculatePreviewWidth })
9855
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ColumnResizeHandle, { columnId: column2.id, columnIndex, currentWidth: currentWidthPx, minWidth: minWidthPx, onResize: (colId, width2) => setResizedWidth?.(colId, width2, columnIndex), calculatePreviewWidth })
9827
9856
  ] })
9828
9857
  }));
9829
9858
  return cellElementWithHandle;
9830
9859
  }
9831
9860
  return cellElement;
9832
9861
  }) });
9833
- return row.draggable ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
9862
+ return row.draggable ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
9834
9863
  "div",
9835
9864
  {
9836
- ...(0, import_runtime25.trussProps)(containerCss),
9865
+ ...(0, import_runtime26.trussProps)(containerCss),
9837
9866
  onDrop: (evt) => onDrop?.(row, evt),
9838
9867
  onDragEnter: (evt) => onDragEnter?.(row, evt),
9839
9868
  onDragOver: (evt) => {
@@ -9842,7 +9871,7 @@ function RowImpl(props) {
9842
9871
  },
9843
9872
  children: RowContent()
9844
9873
  }
9845
- ) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_jsx_runtime30.Fragment, { children: RowContent() });
9874
+ ) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, { children: RowContent() });
9846
9875
  }
9847
9876
  var Row = (0, import_mobx_react.observer)(RowImpl);
9848
9877
  var BorderHoverParent = "beam-bhp";
@@ -9872,8 +9901,8 @@ function useLabelSuffix(required, readOnly) {
9872
9901
 
9873
9902
  // src/inputs/ErrorMessage.tsx
9874
9903
  var import_react_aria7 = require("react-aria");
9875
- var import_runtime26 = require("@homebound/truss/runtime");
9876
- var import_jsx_runtime31 = require("react/jsx-runtime");
9904
+ var import_runtime27 = require("@homebound/truss/runtime");
9905
+ var import_jsx_runtime32 = require("react/jsx-runtime");
9877
9906
  function ErrorMessage(props) {
9878
9907
  const {
9879
9908
  id,
@@ -9881,7 +9910,7 @@ function ErrorMessage(props) {
9881
9910
  hidden = false,
9882
9911
  ...others
9883
9912
  } = props;
9884
- const errorEl = errorMsg ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { ...(0, import_runtime26.trussProps)({
9913
+ const errorEl = errorMsg ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { ...(0, import_runtime27.trussProps)({
9885
9914
  color: ["color_var", {
9886
9915
  "--color": "var(--b-danger)"
9887
9916
  }],
@@ -9891,38 +9920,10 @@ function ErrorMessage(props) {
9891
9920
  display: "df",
9892
9921
  marginTop: "mt_4px"
9893
9922
  }), children: [
9894
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fs0", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { icon: "error" }) }),
9895
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id, className: "ml1 mt_2px", ...others, children: errorMsg })
9896
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_jsx_runtime31.Fragment, {});
9897
- return hidden ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria7.VisuallyHidden, { children: errorEl }) : errorEl;
9898
- }
9899
-
9900
- // src/inputs/internal/ProposedValue.tsx
9901
- var import_runtime27 = require("@homebound/truss/runtime");
9902
- var import_jsx_runtime32 = require("react/jsx-runtime");
9903
- function ProposedValue(props) {
9904
- const {
9905
- original,
9906
- proposed
9907
- } = props;
9908
- const tid = useTestIds(props, "proposedValue");
9909
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { ...tid, children: [
9910
- original && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
9911
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { ...(0, import_runtime27.trussProps)({
9912
- textDecoration: "tdlt",
9913
- color: ["color_var", {
9914
- "--color": "var(--b-on-surface-muted)"
9915
- }]
9916
- }), ...tid.original, children: original }),
9917
- " "
9918
- ] }),
9919
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { ...(0, import_runtime27.trussProps)({
9920
- fontWeight: "fw6",
9921
- color: ["color_var", {
9922
- "--color": "var(--b-ai-field-fg)"
9923
- }]
9924
- }), ...tid.proposed, children: proposed })
9925
- ] });
9923
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fs0", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { icon: "error" }) }),
9924
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { id, className: "ml1 mt_2px", ...others, children: errorMsg })
9925
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, {});
9926
+ return hidden ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria7.VisuallyHidden, { children: errorEl }) : errorEl;
9926
9927
  }
9927
9928
 
9928
9929
  // src/inputs/utils.ts
@@ -18108,6 +18109,7 @@ function TableCardView(props) {
18108
18109
  aiMode = false
18109
18110
  } = props;
18110
18111
  const tid = useTestIds(props, "tableCardView");
18112
+ const titleText = typeof title === "string" ? title : title.proposed;
18111
18113
  const action = to || onClick;
18112
18114
  const progressValue = (0, import_react89.useMemo)(() => progress !== void 0 ? clampProgress(progress) : 0, [progress]);
18113
18115
  const shownFooter = shownInteractiveFooter(interactiveFooter);
@@ -18120,7 +18122,7 @@ function TableCardView(props) {
18120
18122
  } = (0, import_react_aria48.useFocusRing)();
18121
18123
  const actionAttrs = {
18122
18124
  ...tid.action,
18123
- "aria-label": title,
18125
+ "aria-label": titleText,
18124
18126
  // `getButtonOrLink` renders its `<button>` without a type, which would default to submit inside a form.
18125
18127
  type: typeof action === "string" ? void 0 : "button",
18126
18128
  ...(0, import_runtime71.trussProps)(contentStyles),
@@ -18134,7 +18136,7 @@ function TableCardView(props) {
18134
18136
  borderBottomStyle: "bbs_solid",
18135
18137
  borderBottomWidth: "bbw_1px",
18136
18138
  borderColor: ["bc_var", {
18137
- "--borderColor": "var(--b-field-border-default)"
18139
+ "--borderColor": (0, import_runtime71.maybeCssVar)(aiMode ? "--b-ai-field-bg" /* AiFieldBg */ : "--b-field-border-default" /* FieldBorderDefault */)
18138
18140
  }],
18139
18141
  overflow: "oh",
18140
18142
  borderRadius: "borderRadius_12px_12px_0_0"
@@ -18145,7 +18147,7 @@ function TableCardView(props) {
18145
18147
  objectFit: ["objectFit_var", {
18146
18148
  "--objectFit": (0, import_runtime71.maybeCssVar)(imageFit)
18147
18149
  }]
18148
- }), src: imgSrc, alt: title, loading: "lazy", ...tid.image }),
18150
+ }), src: imgSrc, alt: titleText, loading: "lazy", ...tid.image }),
18149
18151
  status && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "absolute top1 left1 df", ...tid.status, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(Tag, { ...status }) })
18150
18152
  ] }),
18151
18153
  /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { ...(0, import_runtime71.trussProps)({
@@ -18169,8 +18171,8 @@ function TableCardView(props) {
18169
18171
  "--color": "var(--b-on-surface)"
18170
18172
  }]
18171
18173
  }), ...tid.eyebrow, children: [
18172
- /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "wsnw oh to_ellipsis", ...tid.leftEyebrow, children: leftEyebrow }),
18173
- rightEyebrow && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "fs0", ...tid.rightEyebrow, children: rightEyebrow })
18174
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "wsnw oh to_ellipsis", ...tid.leftEyebrow, children: renderMaybeProposed(leftEyebrow, tid.leftEyebrowProposal) }),
18175
+ rightEyebrow && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "fs0", ...tid.rightEyebrow, children: renderMaybeProposed(rightEyebrow, tid.rightEyebrowProposal) })
18174
18176
  ] }),
18175
18177
  /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "dif w100 jcsb aic", children: [
18176
18178
  /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("h4", { ...(0, import_runtime71.trussProps)({
@@ -18185,7 +18187,7 @@ function TableCardView(props) {
18185
18187
  color: ["color_var", {
18186
18188
  "--color": "var(--b-on-surface)"
18187
18189
  }]
18188
- }), ...tid.title, children: title }),
18190
+ }), ...tid.title, children: renderMaybeProposed(title, tid.titleProposal) }),
18189
18191
  (badge || badgeTags?.length) && /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "dif aic gap1 fs0", ...tid.badge, children: [
18190
18192
  badge && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "fw4 fz_14px lh_20px wsnw", children: badge }),
18191
18193
  badgeTags?.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(Tag, { ...tag }, tag.text))
@@ -18204,19 +18206,19 @@ function TableCardView(props) {
18204
18206
  } : {}
18205
18207
  }), children: [
18206
18208
  data.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("dl", { className: "df gap2 fw4 fz_14px lh_20px", children: [
18207
- /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "df fdc fg1", children: col1.map((d) => /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "df gap_4px", ...tid[defaultTestId(d.label)], children: [
18208
- /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("dt", { children: [
18209
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "df fdc fg1 fb2 mw0", children: col1.map((d) => /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "df gap_4px", ...tid[defaultTestId(d.label)], children: [
18210
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("dt", { className: "fs0", children: [
18209
18211
  d.label,
18210
18212
  ":"
18211
18213
  ] }),
18212
- /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("dd", { children: d.value })
18214
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("dd", { className: "mw0", children: d.value })
18213
18215
  ] }, d.label)) }),
18214
- /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "df fdc fg1", children: col2.map((d) => /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "df gap_4px", ...tid[defaultTestId(d.label)], children: [
18215
- /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("dt", { children: [
18216
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { className: "df fdc fg1 fb2 mw0", children: col2.map((d) => /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "df gap_4px", ...tid[defaultTestId(d.label)], children: [
18217
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("dt", { className: "fs0", children: [
18216
18218
  d.label,
18217
18219
  ":"
18218
18220
  ] }),
18219
- /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("dd", { children: d.value })
18221
+ /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("dd", { className: "mw0", children: d.value })
18220
18222
  ] }, d.label)) })
18221
18223
  ] }),
18222
18224
  progress !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "df aic gap1 fs_10px lh_14px", children: [
@@ -18225,16 +18227,16 @@ function TableCardView(props) {
18225
18227
  height: "h_8px",
18226
18228
  borderRadius: "br4",
18227
18229
  backgroundColor: ["bgColor_var", {
18228
- "--backgroundColor": "var(--b-surface-subtle)"
18230
+ "--backgroundColor": (0, import_runtime71.maybeCssVar)(aiMode ? "rgba(221, 214, 254, 1)" /* Purple200 */ : "--b-surface-subtle" /* SurfaceSubtle */)
18229
18231
  }]
18230
- }), children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { ...(0, import_runtime71.trussProps)({
18232
+ }), ...tid.progressTrack, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { ...(0, import_runtime71.trussProps)({
18231
18233
  height: "h100",
18232
18234
  borderRadius: "br4",
18233
18235
  backgroundColor: "bgBlue500",
18234
18236
  width: ["w_var", {
18235
18237
  "--width": (0, import_runtime71.maybeCssVar)(__maybeInc13(`${progressValue}%`))
18236
18238
  }]
18237
- }) }) }),
18239
+ }), ...tid.progressFill }) }),
18238
18240
  /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("span", { ...tid.progressValue, children: [
18239
18241
  progressValue,
18240
18242
  "%"
@@ -18267,6 +18269,13 @@ function TableCardView(props) {
18267
18269
  boxShadow: "bshFocus",
18268
18270
  borderStyle: "bss",
18269
18271
  borderWidth: "bw1"
18272
+ } : {},
18273
+ // Must follow the focus ring, whose `ba` would reset the AI border back to 1px.
18274
+ ...aiMode ? {
18275
+ borderWidth: "bw2",
18276
+ borderColor: ["bc_var", {
18277
+ "--borderColor": "var(--b-ai-field-fg)"
18278
+ }]
18270
18279
  } : {}
18271
18280
  }), ...tid, children: [
18272
18281
  action ? getButtonOrLink(content, action, actionAttrs) : (
@@ -18328,6 +18337,9 @@ function Thumbnail(props) {
18328
18337
  pointerEvents: "after_a_pointerEvents_none"
18329
18338
  }), children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("span", { className: "db w100 h100 oh br8", children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("img", { className: "w100 h100 objectFit_cover db", src: item.imgUrl, alt: "", loading: "lazy" }) }) }) });
18330
18339
  }
18340
+ function renderMaybeProposed(value, tid) {
18341
+ return typeof value === "string" || value === void 0 ? value : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(ProposedValue, { ...value, ...tid });
18342
+ }
18331
18343
  function clampProgress(value) {
18332
18344
  if (process.env.NODE_ENV !== "production" && (value < 0 || value > 100)) {
18333
18345
  console.warn(`[TableCard] progress value ${value} is outside the expected range [0, 100] and will be clamped.`);
@@ -28422,8 +28434,72 @@ function EnvironmentBannerLayout(props) {
28422
28434
  }
28423
28435
 
28424
28436
  // src/layouts/FormSectionLayout/FormSectionLayout.tsx
28437
+ var import_runtime148 = require("@homebound/truss/runtime");
28438
+
28439
+ // src/layouts/FormSectionLayout/JumpLinksRail.tsx
28425
28440
  var import_runtime147 = require("@homebound/truss/runtime");
28426
28441
  var import_jsx_runtime229 = require("react/jsx-runtime");
28442
+ var __maybeInc31 = (inc) => {
28443
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28444
+ };
28445
+ function JumpLinksRail(props) {
28446
+ const {
28447
+ links,
28448
+ activeId
28449
+ } = props;
28450
+ const tid = useTestIds(props, "jumpLinks");
28451
+ return /* @__PURE__ */ (0, import_jsx_runtime229.jsx)("nav", { ...(0, import_runtime147.trussProps)({
28452
+ display: "df",
28453
+ flexDirection: "fdc",
28454
+ flexShrink: "fs0",
28455
+ width: ["w_var", {
28456
+ "--width": `${jumpLinksRailWidthPx}px`
28457
+ }],
28458
+ position: "sticky",
28459
+ alignSelf: "asfs",
28460
+ top: ["top_var", {
28461
+ "--top": (0, import_runtime147.maybeCssVar)(__maybeInc31(stickyNavAndHeaderOffset()))
28462
+ }]
28463
+ }), ...tid, children: links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(JumpLink, { label: link.label, href: `#${link.id}`, active: link.id === activeId, ...tid.link }, link.id)) });
28464
+ }
28465
+ var jumpLinksRailWidthPx = 192;
28466
+ var railAndShellPx = centeredShellMaxPx.sm + jumpLinksRailWidthPx;
28467
+ var jumpLinksRailReservation = `clamp(0px, 100% - ${railAndShellPx}px, ${jumpLinksRailWidthPx}px)`;
28468
+
28469
+ // src/layouts/FormSectionLayout/useActiveJumpLink.ts
28470
+ var import_react158 = require("react");
28471
+ var activationLeadPx = 120;
28472
+ function useActiveJumpLink(sectionIds) {
28473
+ const idsKey = sectionIds.join("\0");
28474
+ const [activeId, setActiveId] = (0, import_react158.useState)(sectionIds[0]);
28475
+ (0, import_react158.useLayoutEffect)(() => {
28476
+ const ids = idsKey.length === 0 ? [] : idsKey.split("\0");
28477
+ if (ids.length === 0) return;
28478
+ const update = () => {
28479
+ const first = ids.map((id) => document.getElementById(id)).find((el) => el !== null);
28480
+ if (!first) return;
28481
+ const headerOffset = stickyNavAndHeaderOffsetPx(first);
28482
+ let current = ids[0];
28483
+ for (const id of ids) {
28484
+ const el = document.getElementById(id);
28485
+ if (el && el.getBoundingClientRect().top - headerOffset <= activationLeadPx) {
28486
+ current = id;
28487
+ }
28488
+ }
28489
+ setActiveId(current);
28490
+ };
28491
+ update();
28492
+ window.addEventListener("scroll", update, { passive: true });
28493
+ return () => window.removeEventListener("scroll", update);
28494
+ }, [idsKey]);
28495
+ return sectionIds.includes(activeId ?? "") ? activeId : sectionIds[0];
28496
+ }
28497
+
28498
+ // src/layouts/FormSectionLayout/FormSectionLayout.tsx
28499
+ var import_jsx_runtime230 = require("react/jsx-runtime");
28500
+ var __maybeInc32 = (inc) => {
28501
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28502
+ };
28427
28503
  function FormSectionLayout(props) {
28428
28504
  const {
28429
28505
  title,
@@ -28432,10 +28508,23 @@ function FormSectionLayout(props) {
28432
28508
  withAutoSave,
28433
28509
  initialFields,
28434
28510
  sections,
28435
- aiMode = false
28511
+ aiMode = false,
28512
+ withJumpLinks = false
28436
28513
  } = props;
28437
28514
  const tid = useTestIds(props, "formSectionLayout");
28438
- const content = /* @__PURE__ */ (0, import_jsx_runtime229.jsxs)("div", { ...(0, import_runtime147.trussProps)({
28515
+ const {
28516
+ sm: isMobile
28517
+ } = useBreakpoint();
28518
+ const jumpLinks = (sections ?? []).filter((section) => !section.excludeJumpLink).map((section) => {
28519
+ const id = defaultTestId(section.title);
28520
+ return {
28521
+ id,
28522
+ label: section.title
28523
+ };
28524
+ });
28525
+ const showRail = withJumpLinks && jumpLinks.length >= 2 && !isMobile;
28526
+ const activeId = useActiveJumpLink(showRail ? jumpLinks.map((link) => link.id) : []);
28527
+ const content = /* @__PURE__ */ (0, import_jsx_runtime230.jsxs)("div", { ...(0, import_runtime148.trussProps)({
28439
28528
  display: "df",
28440
28529
  flexDirection: "fdc",
28441
28530
  gap: "gap8",
@@ -28446,21 +28535,34 @@ function FormSectionLayout(props) {
28446
28535
  paddingLeft: "pl3"
28447
28536
  } : {}
28448
28537
  }), children: [
28449
- /* @__PURE__ */ (0, import_jsx_runtime229.jsxs)("div", { className: "df fdc gap3", children: [
28450
- /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2, aiMode }),
28538
+ /* @__PURE__ */ (0, import_jsx_runtime230.jsxs)("div", { className: "df fdc gap3", children: [
28539
+ /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2, aiMode }),
28451
28540
  initialFields
28452
28541
  ] }),
28453
- sections && /* @__PURE__ */ (0, import_jsx_runtime229.jsx)("div", { className: "df fdc gap8", children: sections.map((section, i) => /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(FormSection, { ...section }, defaultTestId(section.title) || i)) })
28542
+ sections && /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { className: "df fdc gap8", children: sections.map((section, i) => /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(FormSection, { ...section }, defaultTestId(section.title) || i)) })
28543
+ ] });
28544
+ const form = /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(CenteredLayout, { size: "sm", children: aiMode ? /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(AiCard, { size: "lg", ...tid, children: content }) : content });
28545
+ if (!showRail) {
28546
+ return /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { className: "mb4", children: form });
28547
+ }
28548
+ return /* @__PURE__ */ (0, import_jsx_runtime230.jsxs)("div", { className: "df w100 mb4", children: [
28549
+ /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(JumpLinksRail, { links: jumpLinks, activeId, ...tid.jumpLinks }),
28550
+ /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { ...(0, import_runtime148.trussProps)({
28551
+ flexGrow: "fg1",
28552
+ minWidth: "mw0",
28553
+ marginRight: ["mr_var", {
28554
+ "--marginRight": (0, import_runtime148.maybeCssVar)(__maybeInc32(jumpLinksRailReservation))
28555
+ }]
28556
+ }), ...tid.column, children: form })
28454
28557
  ] });
28455
- return /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(CenteredLayout, { size: "sm", children: aiMode ? /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(AiCard, { size: "lg", ...tid, children: content }) : content });
28456
28558
  }
28457
28559
 
28458
28560
  // src/layouts/NavbarLayout/NavbarLayout.tsx
28459
- var import_react161 = require("react");
28460
- var import_runtime148 = require("@homebound/truss/runtime");
28561
+ var import_react162 = require("react");
28562
+ var import_runtime149 = require("@homebound/truss/runtime");
28461
28563
 
28462
28564
  // src/layouts/useAutoHideOnScroll.ts
28463
- var import_react158 = require("react");
28565
+ var import_react159 = require("react");
28464
28566
  var THRESHOLD = 80;
28465
28567
  function getInitialAutoHideState() {
28466
28568
  if (typeof window === "undefined" || window.scrollY <= 0) {
@@ -28470,15 +28572,15 @@ function getInitialAutoHideState() {
28470
28572
  }
28471
28573
  function useAutoHideOnScroll(spacerRef, enabled, getTopOffset) {
28472
28574
  const initial = getInitialAutoHideState();
28473
- const [state, setState] = (0, import_react158.useState)(initial.state);
28474
- const stateRef = (0, import_react158.useRef)(initial.state);
28475
- const [atTop, setAtTop] = (0, import_react158.useState)(initial.atTop);
28476
- const atTopRef = (0, import_react158.useRef)(initial.atTop);
28477
- const getTopOffsetRef = (0, import_react158.useRef)(getTopOffset);
28575
+ const [state, setState] = (0, import_react159.useState)(initial.state);
28576
+ const stateRef = (0, import_react159.useRef)(initial.state);
28577
+ const [atTop, setAtTop] = (0, import_react159.useState)(initial.atTop);
28578
+ const atTopRef = (0, import_react159.useRef)(initial.atTop);
28579
+ const getTopOffsetRef = (0, import_react159.useRef)(getTopOffset);
28478
28580
  getTopOffsetRef.current = getTopOffset;
28479
- const lastScrollY = (0, import_react158.useRef)(Number.POSITIVE_INFINITY);
28480
- const lastScrollHeight = (0, import_react158.useRef)(0);
28481
- (0, import_react158.useLayoutEffect)(() => {
28581
+ const lastScrollY = (0, import_react159.useRef)(Number.POSITIVE_INFINITY);
28582
+ const lastScrollHeight = (0, import_react159.useRef)(0);
28583
+ (0, import_react159.useLayoutEffect)(() => {
28482
28584
  if (!enabled) {
28483
28585
  stateRef.current = "static";
28484
28586
  atTopRef.current = true;
@@ -28550,36 +28652,36 @@ function useAutoHideOnScroll(spacerRef, enabled, getTopOffset) {
28550
28652
  }
28551
28653
 
28552
28654
  // src/layouts/useMeasuredHeight.ts
28553
- var import_utils193 = require("@react-aria/utils");
28554
- var import_react159 = require("react");
28655
+ var import_utils194 = require("@react-aria/utils");
28656
+ var import_react160 = require("react");
28555
28657
  function useMeasuredHeight(ref, enabled) {
28556
- const [height, setHeight] = (0, import_react159.useState)(0);
28557
- const syncElementHeight = (0, import_react159.useCallback)(() => {
28658
+ const [height, setHeight] = (0, import_react160.useState)(0);
28659
+ const syncElementHeight = (0, import_react160.useCallback)(() => {
28558
28660
  const el = ref.current;
28559
28661
  const next = el ? Math.round(el.getBoundingClientRect().height) : 0;
28560
28662
  setHeight((prev) => prev === next ? prev : next);
28561
28663
  }, [ref]);
28562
- (0, import_utils193.useResizeObserver)({ ref, onResize: syncElementHeight });
28563
- (0, import_react159.useLayoutEffect)(() => {
28664
+ (0, import_utils194.useResizeObserver)({ ref, onResize: syncElementHeight });
28665
+ (0, import_react160.useLayoutEffect)(() => {
28564
28666
  syncElementHeight();
28565
28667
  }, [enabled, syncElementHeight]);
28566
28668
  return height;
28567
28669
  }
28568
28670
 
28569
28671
  // src/layouts/NavbarLayout/NavbarLayoutHeightContext.tsx
28570
- var import_react160 = require("react");
28571
- var import_jsx_runtime230 = require("react/jsx-runtime");
28572
- var NavbarLayoutHeightContext = (0, import_react160.createContext)(0);
28672
+ var import_react161 = require("react");
28673
+ var import_jsx_runtime231 = require("react/jsx-runtime");
28674
+ var NavbarLayoutHeightContext = (0, import_react161.createContext)(0);
28573
28675
  function NavbarLayoutHeightProvider({ value, children }) {
28574
- return /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(NavbarLayoutHeightContext.Provider, { value, children });
28676
+ return /* @__PURE__ */ (0, import_jsx_runtime231.jsx)(NavbarLayoutHeightContext.Provider, { value, children });
28575
28677
  }
28576
28678
  function useNavbarLayoutHeight() {
28577
- return (0, import_react160.useContext)(NavbarLayoutHeightContext);
28679
+ return (0, import_react161.useContext)(NavbarLayoutHeightContext);
28578
28680
  }
28579
28681
 
28580
28682
  // src/layouts/NavbarLayout/NavbarLayout.tsx
28581
- var import_jsx_runtime231 = require("react/jsx-runtime");
28582
- var __maybeInc31 = (inc) => {
28683
+ var import_jsx_runtime232 = require("react/jsx-runtime");
28684
+ var __maybeInc33 = (inc) => {
28583
28685
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28584
28686
  };
28585
28687
  function NavbarLayout(props) {
@@ -28588,8 +28690,8 @@ function NavbarLayout(props) {
28588
28690
  children
28589
28691
  } = props;
28590
28692
  const tid = useTestIds(props, "navbarLayout");
28591
- const navMetricsRef = (0, import_react161.useRef)(null);
28592
- const spacerRef = (0, import_react161.useRef)(null);
28693
+ const navMetricsRef = (0, import_react162.useRef)(null);
28694
+ const spacerRef = (0, import_react162.useRef)(null);
28593
28695
  const navHeight = useMeasuredHeight(navMetricsRef, true);
28594
28696
  const {
28595
28697
  state: autoHideState,
@@ -28607,10 +28709,10 @@ function NavbarLayout(props) {
28607
28709
  position: "sticky",
28608
28710
  left: "left0",
28609
28711
  zIndex: ["z_var", {
28610
- "--zIndex": (0, import_runtime148.maybeCssVar)(zIndices.navbar)
28712
+ "--zIndex": (0, import_runtime149.maybeCssVar)(zIndices.navbar)
28611
28713
  }],
28612
28714
  width: ["w_var", {
28613
- "--width": (0, import_runtime148.maybeCssVar)(__maybeInc31(innerWidth))
28715
+ "--width": (0, import_runtime149.maybeCssVar)(__maybeInc33(innerWidth))
28614
28716
  }]
28615
28717
  }
28616
28718
  ) : (
@@ -28619,10 +28721,10 @@ function NavbarLayout(props) {
28619
28721
  position: "fixed",
28620
28722
  left: "left0",
28621
28723
  zIndex: ["z_var", {
28622
- "--zIndex": (0, import_runtime148.maybeCssVar)(zIndices.navbar)
28724
+ "--zIndex": (0, import_runtime149.maybeCssVar)(zIndices.navbar)
28623
28725
  }],
28624
28726
  width: ["w_var", {
28625
- "--width": (0, import_runtime148.maybeCssVar)(__maybeInc31(innerWidth))
28727
+ "--width": (0, import_runtime149.maybeCssVar)(__maybeInc33(innerWidth))
28626
28728
  }],
28627
28729
  transition: "transitionTop"
28628
28730
  }
@@ -28631,29 +28733,29 @@ function NavbarLayout(props) {
28631
28733
  const innerStyle = autoHideState !== "static" ? {
28632
28734
  top: autoHideState === "revealed" ? bannerTop : `calc(${bannerTop} - ${navHeight}px)`
28633
28735
  } : void 0;
28634
- const navbarEl = (0, import_react161.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime231.jsx)(Navbar, { ...navbar }), [navbar]);
28635
- return /* @__PURE__ */ (0, import_jsx_runtime231.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime231.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime231.jsx)(MobileSubNavProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime231.jsxs)("div", { ...(0, import_runtime148.mergeProps)(void 0, cssVars, {
28736
+ const navbarEl = (0, import_react162.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime232.jsx)(Navbar, { ...navbar }), [navbar]);
28737
+ return /* @__PURE__ */ (0, import_jsx_runtime232.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime232.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime232.jsx)(MobileSubNavProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime232.jsxs)("div", { ...(0, import_runtime149.mergeProps)(void 0, cssVars, {
28636
28738
  display: "df",
28637
28739
  flexDirection: "fdc",
28638
28740
  width: "wfc",
28639
28741
  minWidth: "mw100"
28640
28742
  }), ...tid, children: [
28641
- /* @__PURE__ */ (0, import_jsx_runtime231.jsx)("div", { ref: spacerRef, ...(0, import_runtime148.mergeProps)(void 0, {
28743
+ /* @__PURE__ */ (0, import_jsx_runtime232.jsx)("div", { ref: spacerRef, ...(0, import_runtime149.mergeProps)(void 0, {
28642
28744
  height: navHeight
28643
28745
  }, {
28644
28746
  flexShrink: "fs0",
28645
28747
  width: "w100"
28646
- }), children: /* @__PURE__ */ (0, import_jsx_runtime231.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime148.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
28647
- /* @__PURE__ */ (0, import_jsx_runtime231.jsx)("div", { className: "df fdc mh0 mw100 w100", ...tid.body, children })
28748
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime232.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime149.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
28749
+ /* @__PURE__ */ (0, import_jsx_runtime232.jsx)("div", { className: "df fdc mh0 mw100 w100", ...tid.body, children })
28648
28750
  ] }) }) }) });
28649
28751
  }
28650
28752
 
28651
28753
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
28652
- var import_react162 = require("react");
28754
+ var import_react163 = require("react");
28653
28755
 
28654
28756
  // src/components/Headers/BaseHeader.tsx
28655
- var import_runtime149 = require("@homebound/truss/runtime");
28656
- var import_jsx_runtime232 = require("react/jsx-runtime");
28757
+ var import_runtime150 = require("@homebound/truss/runtime");
28758
+ var import_jsx_runtime233 = require("react/jsx-runtime");
28657
28759
  function BaseHeader(props) {
28658
28760
  const {
28659
28761
  title,
@@ -28665,7 +28767,7 @@ function BaseHeader(props) {
28665
28767
  } = props;
28666
28768
  const tid = useTestIds(otherProps, "header");
28667
28769
  useDocumentTitle(title, documentTitleSuffix);
28668
- return /* @__PURE__ */ (0, import_jsx_runtime232.jsxs)("header", { ...tid, ...(0, import_runtime149.trussProps)({
28770
+ return /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)("header", { ...tid, ...(0, import_runtime150.trussProps)({
28669
28771
  display: "df",
28670
28772
  flexDirection: "fdc",
28671
28773
  paddingTop: "pt3",
@@ -28679,7 +28781,7 @@ function BaseHeader(props) {
28679
28781
  "--backgroundColor": "var(--b-surface)"
28680
28782
  }]
28681
28783
  }), children: [
28682
- /* @__PURE__ */ (0, import_jsx_runtime232.jsxs)("div", { ...(0, import_runtime149.trussProps)({
28784
+ /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)("div", { ...(0, import_runtime150.trussProps)({
28683
28785
  ...{
28684
28786
  display: "df",
28685
28787
  justifyContent: "jcsb",
@@ -28693,9 +28795,9 @@ function BaseHeader(props) {
28693
28795
  } : {}
28694
28796
  }
28695
28797
  }), children: [
28696
- /* @__PURE__ */ (0, import_jsx_runtime232.jsxs)("div", { className: "mw0", children: [
28697
- breadcrumbs && /* @__PURE__ */ (0, import_jsx_runtime232.jsx)(Breadcrumbs, { ...breadcrumbs }),
28698
- /* @__PURE__ */ (0, import_jsx_runtime232.jsx)("h1", { ...tid.title, ...(0, import_runtime149.trussProps)({
28798
+ /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)("div", { className: "mw0", children: [
28799
+ breadcrumbs && /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Breadcrumbs, { ...breadcrumbs }),
28800
+ /* @__PURE__ */ (0, import_jsx_runtime233.jsx)("h1", { ...tid.title, ...(0, import_runtime150.trussProps)({
28699
28801
  fontWeight: "fw6",
28700
28802
  fontSize: "fz_20px",
28701
28803
  lineHeight: "lh_28px",
@@ -28704,15 +28806,15 @@ function BaseHeader(props) {
28704
28806
  }]
28705
28807
  }), children: title })
28706
28808
  ] }),
28707
- /* @__PURE__ */ (0, import_jsx_runtime232.jsx)("div", { className: "fs0", children: rightSlot })
28809
+ /* @__PURE__ */ (0, import_jsx_runtime233.jsx)("div", { className: "fs0", children: rightSlot })
28708
28810
  ] }),
28709
28811
  bottomSlot
28710
28812
  ] });
28711
28813
  }
28712
28814
 
28713
28815
  // src/components/Headers/PageHeader.tsx
28714
- var import_runtime150 = require("@homebound/truss/runtime");
28715
- var import_jsx_runtime233 = require("react/jsx-runtime");
28816
+ var import_runtime151 = require("@homebound/truss/runtime");
28817
+ var import_jsx_runtime234 = require("react/jsx-runtime");
28716
28818
  function PageHeader2(props) {
28717
28819
  const {
28718
28820
  tabs,
@@ -28721,10 +28823,10 @@ function PageHeader2(props) {
28721
28823
  ...otherProps
28722
28824
  } = props;
28723
28825
  const tid = useTestIds(otherProps, "header");
28724
- return /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(BaseHeader, { ...otherProps, rightSlot: /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)(import_jsx_runtime233.Fragment, { children: [
28826
+ return /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(BaseHeader, { ...otherProps, rightSlot: /* @__PURE__ */ (0, import_jsx_runtime234.jsxs)(import_jsx_runtime234.Fragment, { children: [
28725
28827
  rightSlot,
28726
- actions && actions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(HeaderActions, { actions, collapseOnSm: true })
28727
- ] }), bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime233.jsx)("div", { ...(0, import_runtime150.trussProps)(pageContentPaddingX), children: /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
28828
+ actions && actions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(HeaderActions, { actions, collapseOnSm: true })
28829
+ ] }), bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime151.trussProps)(pageContentPaddingX), children: /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
28728
28830
  }
28729
28831
 
28730
28832
  // src/layouts/useBannerAndNavbarHeight.ts
@@ -28733,9 +28835,9 @@ function useBannerAndNavbarHeight() {
28733
28835
  }
28734
28836
 
28735
28837
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
28736
- var import_runtime151 = require("@homebound/truss/runtime");
28737
- var import_jsx_runtime234 = require("react/jsx-runtime");
28738
- var __maybeInc32 = (inc) => {
28838
+ var import_runtime152 = require("@homebound/truss/runtime");
28839
+ var import_jsx_runtime235 = require("react/jsx-runtime");
28840
+ var __maybeInc34 = (inc) => {
28739
28841
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28740
28842
  };
28741
28843
  function PageHeaderLayout(props) {
@@ -28745,11 +28847,11 @@ function PageHeaderLayout(props) {
28745
28847
  } = props;
28746
28848
  const tid = useTestIds(props, "pageHeaderLayout");
28747
28849
  const bannerAndNavbarHeight = useBannerAndNavbarHeight();
28748
- const bannerAndNavbarHeightRef = (0, import_react162.useRef)(bannerAndNavbarHeight);
28850
+ const bannerAndNavbarHeightRef = (0, import_react163.useRef)(bannerAndNavbarHeight);
28749
28851
  bannerAndNavbarHeightRef.current = bannerAndNavbarHeight;
28750
- const getBannerAndNavbarHeight = (0, import_react162.useCallback)(() => bannerAndNavbarHeightRef.current, []);
28751
- const headerMetricsRef = (0, import_react162.useRef)(null);
28752
- const spacerRef = (0, import_react162.useRef)(null);
28852
+ const getBannerAndNavbarHeight = (0, import_react163.useCallback)(() => bannerAndNavbarHeightRef.current, []);
28853
+ const headerMetricsRef = (0, import_react163.useRef)(null);
28854
+ const spacerRef = (0, import_react163.useRef)(null);
28753
28855
  const headerHeight = useMeasuredHeight(headerMetricsRef, true);
28754
28856
  const {
28755
28857
  state: autoHideState,
@@ -28765,103 +28867,46 @@ function PageHeaderLayout(props) {
28765
28867
  const innerCss = autoHideState === "static" ? {
28766
28868
  position: "sticky",
28767
28869
  left: ["left_var", {
28768
- "--left": (0, import_runtime151.maybeCssVar)(__maybeInc32(headerLeft))
28870
+ "--left": (0, import_runtime152.maybeCssVar)(__maybeInc34(headerLeft))
28769
28871
  }],
28770
28872
  width: ["w_var", {
28771
- "--width": (0, import_runtime151.maybeCssVar)(__maybeInc32(headerWidth))
28873
+ "--width": (0, import_runtime152.maybeCssVar)(__maybeInc34(headerWidth))
28772
28874
  }],
28773
28875
  zIndex: ["z_var", {
28774
- "--zIndex": (0, import_runtime151.maybeCssVar)(zIndices.pageStickyHeader)
28876
+ "--zIndex": (0, import_runtime152.maybeCssVar)(zIndices.pageStickyHeader)
28775
28877
  }]
28776
28878
  } : {
28777
28879
  position: "fixed",
28778
28880
  left: ["left_var", {
28779
- "--left": (0, import_runtime151.maybeCssVar)(__maybeInc32(headerLeft))
28881
+ "--left": (0, import_runtime152.maybeCssVar)(__maybeInc34(headerLeft))
28780
28882
  }],
28781
28883
  width: ["w_var", {
28782
- "--width": (0, import_runtime151.maybeCssVar)(__maybeInc32(headerWidth))
28884
+ "--width": (0, import_runtime152.maybeCssVar)(__maybeInc34(headerWidth))
28783
28885
  }],
28784
28886
  zIndex: ["z_var", {
28785
- "--zIndex": (0, import_runtime151.maybeCssVar)(zIndices.pageStickyHeader)
28887
+ "--zIndex": (0, import_runtime152.maybeCssVar)(zIndices.pageStickyHeader)
28786
28888
  }],
28787
28889
  transition: "transitionTop"
28788
28890
  };
28789
28891
  const innerStyle = autoHideState !== "static" ? {
28790
28892
  top: autoHideState === "revealed" ? outerTop : `calc(${outerTop} - ${headerHeight}px)`
28791
28893
  } : void 0;
28792
- const pageHeaderEl = (0, import_react162.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
28793
- return /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime234.jsxs)("div", { ...(0, import_runtime151.mergeProps)(void 0, cssVars, {
28894
+ const pageHeaderEl = (0, import_react163.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime235.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
28895
+ return /* @__PURE__ */ (0, import_jsx_runtime235.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime235.jsxs)("div", { ...(0, import_runtime152.mergeProps)(void 0, cssVars, {
28794
28896
  display: "df",
28795
28897
  flexDirection: "fdc",
28796
28898
  width: "w100"
28797
28899
  }), ...tid, children: [
28798
- /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ref: spacerRef, ...(0, import_runtime151.mergeProps)(void 0, {
28900
+ /* @__PURE__ */ (0, import_jsx_runtime235.jsx)("div", { ref: spacerRef, ...(0, import_runtime152.mergeProps)(void 0, {
28799
28901
  height: headerHeight
28800
28902
  }, {
28801
28903
  flexShrink: "fs0",
28802
28904
  width: "w100"
28803
- }), children: /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime151.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
28804
- /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
28905
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime235.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime152.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
28906
+ /* @__PURE__ */ (0, import_jsx_runtime235.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
28805
28907
  ] }) });
28806
28908
  }
28807
28909
 
28808
- // src/layouts/Workflow/JumpLinksRail.tsx
28809
- var import_runtime152 = require("@homebound/truss/runtime");
28810
- var import_jsx_runtime235 = require("react/jsx-runtime");
28811
- var __maybeInc33 = (inc) => {
28812
- return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28813
- };
28814
- var jumpLinksRailWidthPx = 180;
28815
- function JumpLinksRail(props) {
28816
- const {
28817
- links,
28818
- activeId
28819
- } = props;
28820
- const tid = useTestIds(props, "jumpLinks");
28821
- return /* @__PURE__ */ (0, import_jsx_runtime235.jsx)("nav", { ...(0, import_runtime152.trussProps)({
28822
- display: "df",
28823
- flexDirection: "fdc",
28824
- flexShrink: "fs0",
28825
- width: ["w_var", {
28826
- "--width": `${jumpLinksRailWidthPx}px`
28827
- }],
28828
- position: "sticky",
28829
- alignSelf: "asfs",
28830
- top: ["top_var", {
28831
- "--top": (0, import_runtime152.maybeCssVar)(__maybeInc33(stickyNavAndHeaderOffset()))
28832
- }]
28833
- }), ...tid, children: links.map((link) => /* @__PURE__ */ (0, import_jsx_runtime235.jsx)(JumpLink, { label: link.label, href: `#${link.id}`, active: link.id === activeId, ...tid.link }, link.id)) });
28834
- }
28835
-
28836
- // src/layouts/Workflow/useActiveJumpLink.ts
28837
- var import_react163 = require("react");
28838
- var activationLeadPx = 120;
28839
- function useActiveJumpLink(sectionIds) {
28840
- const idsKey = sectionIds.join("\0");
28841
- const [activeId, setActiveId] = (0, import_react163.useState)(sectionIds[0]);
28842
- (0, import_react163.useLayoutEffect)(() => {
28843
- const ids = idsKey.length === 0 ? [] : idsKey.split("\0");
28844
- if (ids.length === 0) return;
28845
- const update = () => {
28846
- const first = ids.map((id) => document.getElementById(id)).find((el) => el !== null);
28847
- if (!first) return;
28848
- const headerOffset = stickyNavAndHeaderOffsetPx(first);
28849
- let current = ids[0];
28850
- for (const id of ids) {
28851
- const el = document.getElementById(id);
28852
- if (el && el.getBoundingClientRect().top - headerOffset <= activationLeadPx) {
28853
- current = id;
28854
- }
28855
- }
28856
- setActiveId(current);
28857
- };
28858
- update();
28859
- window.addEventListener("scroll", update, { passive: true });
28860
- return () => window.removeEventListener("scroll", update);
28861
- }, [idsKey]);
28862
- return sectionIds.includes(activeId ?? "") ? activeId : sectionIds[0];
28863
- }
28864
-
28865
28910
  // src/layouts/Workflow/WorkflowPageLayout.tsx
28866
28911
  var import_react165 = require("react");
28867
28912
 
@@ -28958,7 +29003,7 @@ function WorkflowActions(props) {
28958
29003
  // src/layouts/Workflow/WorkflowPageLayout.tsx
28959
29004
  var import_runtime153 = require("@homebound/truss/runtime");
28960
29005
  var import_jsx_runtime239 = require("react/jsx-runtime");
28961
- var __maybeInc34 = (inc) => {
29006
+ var __maybeInc35 = (inc) => {
28962
29007
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
28963
29008
  };
28964
29009
  var mobileFooterHeightPx = 80;
@@ -29016,13 +29061,13 @@ function WorkflowPageLayout(props) {
29016
29061
  position: "sticky",
29017
29062
  left: "left0",
29018
29063
  width: ["w_var", {
29019
- "--width": (0, import_runtime153.maybeCssVar)(__maybeInc34(headerWidth))
29064
+ "--width": (0, import_runtime153.maybeCssVar)(__maybeInc35(headerWidth))
29020
29065
  }],
29021
29066
  zIndex: ["z_var", {
29022
29067
  "--zIndex": (0, import_runtime153.maybeCssVar)(zIndices.pageStickyHeader)
29023
29068
  }],
29024
29069
  top: ["top_var", {
29025
- "--top": (0, import_runtime153.maybeCssVar)(__maybeInc34(outerTop))
29070
+ "--top": (0, import_runtime153.maybeCssVar)(__maybeInc35(outerTop))
29026
29071
  }]
29027
29072
  }), ...tid.header, children: /* @__PURE__ */ (0, import_jsx_runtime239.jsx)(WorkflowHeader, { title, documentTitleSuffix, breadcrumbs, rightSlot: isMobile ? void 0 : actions, stepperTabs }) }),
29028
29073
  /* @__PURE__ */ (0, import_jsx_runtime239.jsx)("div", { ...(0, import_runtime153.trussProps)({
@@ -29052,7 +29097,7 @@ function WorkflowPageLayout(props) {
29052
29097
  position: "fixed",
29053
29098
  bottom: "bottom0",
29054
29099
  width: ["w_var", {
29055
- "--width": (0, import_runtime153.maybeCssVar)(__maybeInc34(headerWidth))
29100
+ "--width": (0, import_runtime153.maybeCssVar)(__maybeInc35(headerWidth))
29056
29101
  }],
29057
29102
  height: ["h_var", {
29058
29103
  "--height": `${mobileFooterHeightPx}px`
@@ -29083,35 +29128,23 @@ function WorkflowPageLayout(props) {
29083
29128
  // src/layouts/Workflow/FocusedFormLayout.tsx
29084
29129
  var import_jsx_runtime240 = require("react/jsx-runtime");
29085
29130
  function FocusedFormLayout(props) {
29086
- const {
29087
- onCancel,
29088
- completeLabel,
29089
- onComplete,
29090
- onSaveAndExit,
29091
- isValid,
29092
- isDirty,
29093
- withJumpLinks = true,
29094
- aiMode,
29095
- form,
29096
- ...headerProps
29097
- } = props;
29131
+ const { onCancel, completeLabel, onComplete, onSaveAndExit, isValid, isDirty, aiMode, children, ...headerProps } = props;
29098
29132
  const tid = useTestIds(props, "focusedFormLayout");
29099
- const {
29100
- sm: isMobile
29101
- } = useBreakpoint();
29102
- const jumpLinks = (form.sections ?? []).filter((section) => !section.excludeJumpLink).map((section) => {
29103
- const id = defaultTestId(section.title);
29104
- return {
29105
- id,
29106
- label: section.title
29107
- };
29108
- });
29109
- const activeId = useActiveJumpLink(jumpLinks.map((link) => link.id));
29110
- const showRail = withJumpLinks && jumpLinks.length >= 2 && !isMobile;
29111
- return /* @__PURE__ */ (0, import_jsx_runtime240.jsx)(WorkflowPageLayout, { ...tid, ...headerProps, aiMode, isDirty, onCancel, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !isValid, children: /* @__PURE__ */ (0, import_jsx_runtime240.jsxs)("div", { className: "df w100", children: [
29112
- showRail && /* @__PURE__ */ (0, import_jsx_runtime240.jsx)(JumpLinksRail, { links: jumpLinks, activeId, ...tid.jumpLinks }),
29113
- /* @__PURE__ */ (0, import_jsx_runtime240.jsx)("div", { className: "fg1 mw0 mb4", children: /* @__PURE__ */ (0, import_jsx_runtime240.jsx)(FormSectionLayout, { ...form, aiMode }) })
29114
- ] }) });
29133
+ return /* @__PURE__ */ (0, import_jsx_runtime240.jsx)(
29134
+ WorkflowPageLayout,
29135
+ {
29136
+ ...tid,
29137
+ ...headerProps,
29138
+ aiMode,
29139
+ isDirty,
29140
+ onCancel,
29141
+ onSaveAndExit,
29142
+ completeLabel,
29143
+ onComplete,
29144
+ primaryDisabled: !isValid,
29145
+ children
29146
+ }
29147
+ );
29115
29148
  }
29116
29149
 
29117
29150
  // src/layouts/Workflow/StepperLayout.tsx
@@ -29298,6 +29331,7 @@ function getInitialStep(steps, defaultStep) {
29298
29331
  PinToggle,
29299
29332
  PresentationProvider,
29300
29333
  PreventBrowserScroll,
29334
+ ProposedValue,
29301
29335
  RIGHT_SIDEBAR_MIN_WIDTH,
29302
29336
  RadioGroupField,
29303
29337
  ResponsiveGrid,