@homebound/beam 3.56.1 → 3.58.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
@@ -196,6 +196,7 @@ __export(index_exports, {
196
196
  Tooltip: () => Tooltip,
197
197
  TreeSelectField: () => TreeSelectField,
198
198
  ViewToggleButton: () => ViewToggleButton,
199
+ WorkflowLayout: () => WorkflowLayout,
199
200
  actionColumn: () => actionColumn,
200
201
  applyRowFn: () => applyRowFn,
201
202
  assignDefaultColumnIds: () => assignDefaultColumnIds,
@@ -207,6 +208,7 @@ __export(index_exports, {
207
208
  beamPageHeaderLayoutHeightVar: () => beamPageHeaderLayoutHeightVar,
208
209
  beamSideNavLayoutWidthVar: () => beamSideNavLayoutWidthVar,
209
210
  beamTableActionsHeightVar: () => beamTableActionsHeightVar,
211
+ beamWorkflowLayoutFooterHeightVar: () => beamWorkflowLayoutFooterHeightVar,
210
212
  booleanFilter: () => booleanFilter,
211
213
  boundCheckboxField: () => boundCheckboxField,
212
214
  boundCheckboxGroupField: () => boundCheckboxGroupField,
@@ -269,10 +271,12 @@ __export(index_exports, {
269
271
  getColumnBorderCss: () => getColumnBorderCss,
270
272
  getDateFormat: () => getDateFormat,
271
273
  getFirstOrLastCellCss: () => getFirstOrLastCellCss,
274
+ getFloatingBottomOffset: () => getFloatingBottomOffset,
272
275
  getJustification: () => getJustification,
273
276
  getNavLinkStyles: () => getNavLinkStyles,
274
277
  getTableRefWidthStyles: () => getTableRefWidthStyles,
275
278
  getTableStyles: () => getTableStyles,
279
+ headerContentPaddingX: () => headerContentPaddingX,
276
280
  headerRenderFn: () => headerRenderFn,
277
281
  hoverStyles: () => hoverStyles,
278
282
  increment: () => increment,
@@ -302,6 +306,8 @@ __export(index_exports, {
302
306
  nonKindGridColumnKeys: () => nonKindGridColumnKeys,
303
307
  numberRangeFilter: () => numberRangeFilter,
304
308
  numericColumn: () => numericColumn,
309
+ pageContentGutterPx: () => pageContentGutterPx,
310
+ pageContentPaddingX: () => pageContentPaddingX,
305
311
  parseDate: () => parseDate,
306
312
  parseDateRange: () => parseDateRange,
307
313
  parseWidthToPx: () => parseWidthToPx,
@@ -4232,6 +4238,10 @@ var CssBuilder = class _CssBuilder {
4232
4238
  get transitionTop() {
4233
4239
  return this.add("transition", "top 200ms cubic-bezier(0.4, 0, 0.2, 1)");
4234
4240
  }
4241
+ /** Sets `transition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1)"`. */
4242
+ get transitionAll() {
4243
+ return this.add("transition", "all 200ms cubic-bezier(0.4, 0, 0.2, 1)");
4244
+ }
4235
4245
  // buttonBase
4236
4246
  /** Sets `fontWeight: 600; fontSize: "14px"; lineHeight: "20px"; outline: 0; borderRadius: "8px"; display: "inline-flex"; alignItems: "center"; whiteSpace: "nowrap"; transition: "background-color 200ms cubic-bezier(0.4, 0, 0.2, 1), border-color 200ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1), left 200ms cubic-bezier(0.4, 0, 0.2, 1), right 200ms cubic-bezier(0.4, 0, 0.2, 1), margin 200ms cubic-bezier(0.4, 0, 0.2, 1), width 200ms cubic-bezier(0.4, 0, 0.2, 1), opacity 200ms cubic-bezier(0.4, 0, 0.2, 1)"`. */
4237
4247
  get buttonBase() {
@@ -6461,6 +6471,7 @@ var beamLayoutViewportWidthVar = "--beam-layout-viewport-width";
6461
6471
  var beamLayoutViewportHeightVar = "--beam-layout-viewport-height";
6462
6472
  var beamSideNavLayoutWidthVar = "--beam-side-nav-layout-width";
6463
6473
  var beamTableActionsHeightVar = "--beam-table-actions-height";
6474
+ var beamWorkflowLayoutFooterHeightVar = "--beam-workflow-layout-footer-height";
6464
6475
  function documentScrollChromeLeft() {
6465
6476
  return `var(${beamSideNavLayoutWidthVar}, 0px)`;
6466
6477
  }
@@ -6476,6 +6487,9 @@ function stickyNavAndHeaderOffset(basePx = 0) {
6476
6487
  function stickyTableHeaderOffset(basePx = 0) {
6477
6488
  return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamTableActionsHeightVar}, 0px))`;
6478
6489
  }
6490
+ function getFloatingBottomOffset(basePx = 0) {
6491
+ return `calc(${basePx}px + var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
6492
+ }
6479
6493
 
6480
6494
  // src/utils/zIndices.ts
6481
6495
  var zIndices = {
@@ -6492,6 +6506,8 @@ var zIndices = {
6492
6506
  superDrawerScrim: 55,
6493
6507
  modalUnderlay: 60,
6494
6508
  pageStickyHeader: 70,
6509
+ // Sticky mobile action footer (WorkflowLayout) — same tier as pageStickyHeader; header and footer never overlap on screen.
6510
+ pageStickyFooter: 70,
6495
6511
  dragHandle: 80,
6496
6512
  // Side-nav layer. Mobile rail overlays page content when expanded; sits below
6497
6513
  // snackbar so toasts still land on top.
@@ -9422,7 +9438,7 @@ function RowImpl(props) {
9422
9438
  "--width": (0, import_runtime21.maybeCssVar)(__maybeInc6(`calc(${columnSizes.slice(columnIndex, columnIndex + currentColspan).join(" + ")}${applyFirstContentColumnStyles && levelIndent ? ` - ${levelIndent}px` : ""})`))
9423
9439
  }]
9424
9440
  },
9425
- // Gutter columns are budgeted at 12px; strip cell padding so flex min-content does not exceed that width.
9441
+ // Gutter columns are budgeted at pageContentGutterPx; strip cell padding so flex min-content does not exceed that width.
9426
9442
  ...column2.isLayoutGutter && {
9427
9443
  paddingLeft: "pl0",
9428
9444
  paddingRight: "pr0",
@@ -15886,6 +15902,22 @@ function SelectToggle({ id, disabled }) {
15886
15902
  );
15887
15903
  }
15888
15904
 
15905
+ // src/layouts/layoutSpacing.ts
15906
+ var pageContentGutterPx = 12;
15907
+ var pageContentPaddingX = {
15908
+ paddingLeft: "pl3",
15909
+ paddingRight: "pr3"
15910
+ };
15911
+ function headerContentPaddingX(compact = false) {
15912
+ return compact ? {
15913
+ paddingLeft: "pl1",
15914
+ paddingRight: "pr1"
15915
+ } : {
15916
+ paddingLeft: "pl1 mdandup_pl5",
15917
+ paddingRight: "pr1 mdandup_pr5"
15918
+ };
15919
+ }
15920
+
15889
15921
  // src/components/Table/utils/columns.tsx
15890
15922
  var import_jsx_runtime90 = require("react/jsx-runtime");
15891
15923
  function column(columnDef) {
@@ -15992,7 +16024,6 @@ function pinColumn(columnDef) {
15992
16024
  });
15993
16025
  });
15994
16026
  }
15995
- var columnGutterPx = 12;
15996
16027
  var layoutGutterLeftColumnId = "beamLayoutGutterLeft";
15997
16028
  var layoutGutterRightColumnId = "beamLayoutGutterRight";
15998
16029
  function isContentColumn(column2) {
@@ -16004,7 +16035,7 @@ function layoutGutterColumn(side) {
16004
16035
  ...nonKindDefaults(),
16005
16036
  id,
16006
16037
  clientSideSort: false,
16007
- w: `${columnGutterPx}px`,
16038
+ w: `${pageContentGutterPx}px`,
16008
16039
  wrapAction: false,
16009
16040
  isLayoutGutter: true,
16010
16041
  canHide: false,
@@ -16782,6 +16813,9 @@ var import_react83 = require("react");
16782
16813
  var import_react82 = require("react");
16783
16814
  var import_runtime60 = require("@homebound/truss/runtime");
16784
16815
  var import_jsx_runtime91 = require("react/jsx-runtime");
16816
+ var __maybeInc10 = (inc) => {
16817
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16818
+ };
16785
16819
  function DocumentScrollToTopButton({
16786
16820
  viewportHeight
16787
16821
  }) {
@@ -16810,7 +16844,7 @@ function DocumentScrollToTopButton({
16810
16844
  ...{
16811
16845
  position: "fixed",
16812
16846
  bottom: ["bottom_var", {
16813
- "--bottom": `${scrollToTopOffsetPx}px`
16847
+ "--bottom": (0, import_runtime60.maybeCssVar)(__maybeInc10(getFloatingBottomOffset(scrollToTopOffsetPx)))
16814
16848
  }],
16815
16849
  right: ["right_var", {
16816
16850
  "--right": `${scrollToTopOffsetPx}px`
@@ -16898,7 +16932,7 @@ var import_react84 = require("react");
16898
16932
  var import_react_router_dom4 = require("react-router-dom");
16899
16933
  var import_runtime62 = require("@homebound/truss/runtime");
16900
16934
  var import_jsx_runtime93 = require("react/jsx-runtime");
16901
- var __maybeInc10 = (inc) => {
16935
+ var __maybeInc11 = (inc) => {
16902
16936
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16903
16937
  };
16904
16938
  function TableCard(props) {
@@ -17029,7 +17063,7 @@ function TableCardView(props) {
17029
17063
  borderRadius: "br4",
17030
17064
  backgroundColor: "bgBlue500",
17031
17065
  width: ["w_var", {
17032
- "--width": (0, import_runtime62.maybeCssVar)(__maybeInc10(`${progressValue}%`))
17066
+ "--width": (0, import_runtime62.maybeCssVar)(__maybeInc11(`${progressValue}%`))
17033
17067
  }]
17034
17068
  }) }) }),
17035
17069
  /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { ...tid.progressValue, children: [
@@ -17068,7 +17102,7 @@ function GridTableEmptyState(props) {
17068
17102
  var import_runtime63 = require("@homebound/truss/runtime");
17069
17103
  var import_jsx_runtime95 = require("react/jsx-runtime");
17070
17104
  var import_react86 = require("react");
17071
- var __maybeInc11 = (inc) => {
17105
+ var __maybeInc12 = (inc) => {
17072
17106
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
17073
17107
  };
17074
17108
  var runningInJest = false;
@@ -17398,7 +17432,7 @@ function renderDiv(style, id, columns, visibleDataRows, keptSelectedRows, pinned
17398
17432
  position: "sticky",
17399
17433
  transition: "transitionTop",
17400
17434
  top: ["top_var", {
17401
- "--top": (0, import_runtime63.maybeCssVar)(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
17435
+ "--top": (0, import_runtime63.maybeCssVar)(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
17402
17436
  }],
17403
17437
  zIndex: ["z_var", {
17404
17438
  "--zIndex": (0, import_runtime63.maybeCssVar)(zIndices.tableStickyHeader)
@@ -17442,7 +17476,7 @@ function renderTable(style, id, columns, visibleDataRows, keptSelectedRows, pinn
17442
17476
  position: "sticky",
17443
17477
  transition: "transitionTop",
17444
17478
  top: ["top_var", {
17445
- "--top": (0, import_runtime63.maybeCssVar)(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
17479
+ "--top": (0, import_runtime63.maybeCssVar)(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
17446
17480
  }],
17447
17481
  zIndex: ["z_var", {
17448
17482
  "--zIndex": (0, import_runtime63.maybeCssVar)(zIndices.tableStickyHeader)
@@ -17786,7 +17820,7 @@ var import_react87 = require("react");
17786
17820
  var import_react_aria48 = require("react-aria");
17787
17821
  var import_runtime66 = require("@homebound/truss/runtime");
17788
17822
  var import_jsx_runtime98 = require("react/jsx-runtime");
17789
- var __maybeInc12 = (inc) => {
17823
+ var __maybeInc13 = (inc) => {
17790
17824
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
17791
17825
  };
17792
17826
  function Accordion(props) {
@@ -17933,7 +17967,7 @@ function Accordion(props) {
17933
17967
  /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { ...tid.details, id, "aria-hidden": !expanded, ...(0, import_runtime66.trussProps)({
17934
17968
  overflow: "oh",
17935
17969
  height: ["h_var", {
17936
- "--height": (0, import_runtime66.maybeCssVar)(__maybeInc12(contentHeight))
17970
+ "--height": (0, import_runtime66.maybeCssVar)(__maybeInc13(contentHeight))
17937
17971
  }],
17938
17972
  transition: "transition_height_250ms_ease_in_out"
17939
17973
  }), children: expanded && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { ...(0, import_runtime66.trussProps)({
@@ -19445,7 +19479,7 @@ function BoundTreeSelectField(props) {
19445
19479
  var import_react96 = require("react");
19446
19480
  var import_runtime72 = require("@homebound/truss/runtime");
19447
19481
  var import_jsx_runtime127 = require("react/jsx-runtime");
19448
- var __maybeInc13 = (inc) => {
19482
+ var __maybeInc14 = (inc) => {
19449
19483
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
19450
19484
  };
19451
19485
  function FormLines(props) {
@@ -19483,13 +19517,13 @@ function FormLines(props) {
19483
19517
  display: "df",
19484
19518
  flexDirection: "fdc",
19485
19519
  gap: ["gap_var", {
19486
- "--gap": (0, import_runtime72.maybeCssVar)(__maybeInc13(gap))
19520
+ "--gap": (0, import_runtime72.maybeCssVar)(__maybeInc14(gap))
19487
19521
  }],
19488
19522
  paddingBottom: ["pb_var", {
19489
- "--paddingBottom": (0, import_runtime72.maybeCssVar)(__maybeInc13(gap))
19523
+ "--paddingBottom": (0, import_runtime72.maybeCssVar)(__maybeInc14(gap))
19490
19524
  }],
19491
19525
  width: ["w_var", {
19492
- "--width": (0, import_runtime72.maybeCssVar)(__maybeInc13(sizes[width2]))
19526
+ "--width": (0, import_runtime72.maybeCssVar)(__maybeInc14(sizes[width2]))
19493
19527
  }]
19494
19528
  }), children: import_react96.Children.map(children, (child) => {
19495
19529
  if (child && typeof child === "object" && "type" in child && child.type.isFormHeading) {
@@ -20369,7 +20403,7 @@ function useActiveSection(sectionsWithRefs) {
20369
20403
  // src/components/Layout/FullBleed.tsx
20370
20404
  var import_runtime80 = require("@homebound/truss/runtime");
20371
20405
  var import_react104 = require("react");
20372
- var __maybeInc14 = (inc) => {
20406
+ var __maybeInc15 = (inc) => {
20373
20407
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
20374
20408
  };
20375
20409
  function FullBleed({
@@ -20400,17 +20434,17 @@ function FullBleed({
20400
20434
  // inverts that padding with negative margins before re-applying it to the child.
20401
20435
  {
20402
20436
  marginLeft: ["ml_var", {
20403
- "--marginLeft": (0, import_runtime80.maybeCssVar)(__maybeInc14(invertSpacing(paddingLeft)))
20437
+ "--marginLeft": (0, import_runtime80.maybeCssVar)(__maybeInc15(invertSpacing(paddingLeft)))
20404
20438
  }],
20405
20439
  marginRight: ["mr_var", {
20406
- "--marginRight": (0, import_runtime80.maybeCssVar)(__maybeInc14(invertSpacing(paddingRight)))
20440
+ "--marginRight": (0, import_runtime80.maybeCssVar)(__maybeInc15(invertSpacing(paddingRight)))
20407
20441
  }],
20408
20442
  ...!omitPadding ? {
20409
20443
  paddingLeft: ["pl_var", {
20410
- "--paddingLeft": (0, import_runtime80.maybeCssVar)(__maybeInc14(paddingLeft))
20444
+ "--paddingLeft": (0, import_runtime80.maybeCssVar)(__maybeInc15(paddingLeft))
20411
20445
  }],
20412
20446
  paddingRight: ["pr_var", {
20413
- "--paddingRight": (0, import_runtime80.maybeCssVar)(__maybeInc14(paddingRight))
20447
+ "--paddingRight": (0, import_runtime80.maybeCssVar)(__maybeInc15(paddingRight))
20414
20448
  }]
20415
20449
  } : {}
20416
20450
  }
@@ -21294,12 +21328,7 @@ function FilterPanelOpen({
21294
21328
  ...{
21295
21329
  flexWrap: "mdandup_fww"
21296
21330
  },
21297
- ...{
21298
- ...inDocumentScrollLayout ? {
21299
- paddingLeft: "pl3",
21300
- paddingRight: "pr3"
21301
- } : {}
21302
- }
21331
+ ...inDocumentScrollLayout ? pageContentPaddingX : void 0
21303
21332
  }), children: [
21304
21333
  groupBy && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(GroupByField, { ...groupBy }),
21305
21334
  filterControls,
@@ -21432,14 +21461,13 @@ function GridTableLayoutActionsComponent(props) {
21432
21461
  } : {}
21433
21462
  }), children: [
21434
21463
  /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { ...(0, import_runtime86.trussProps)({
21435
- display: "df",
21436
- gap: "gap1",
21437
- justifyContent: "jcsb",
21438
- paddingTop: "pt3",
21439
- ...inDocumentScrollLayout ? {
21440
- paddingLeft: "pl3",
21441
- paddingRight: "pr3"
21442
- } : {}
21464
+ ...{
21465
+ display: "df",
21466
+ gap: "gap1",
21467
+ justifyContent: "jcsb",
21468
+ paddingTop: "pt3"
21469
+ },
21470
+ ...inDocumentScrollLayout ? pageContentPaddingX : void 0
21443
21471
  }), children: [
21444
21472
  /* @__PURE__ */ (0, import_jsx_runtime157.jsxs)("div", { className: "df gap_12px aic", children: [
21445
21473
  !sm && hasSearch && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { className: "w_244px", children: searchTextField }),
@@ -21459,7 +21487,7 @@ function GridTableLayoutActionsComponent(props) {
21459
21487
  } })
21460
21488
  ] })
21461
21489
  ] }),
21462
- sm && showSearch && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { className: "pl3 pr3", children: searchTextField }),
21490
+ sm && showSearch && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)("div", { ...(0, import_runtime86.trussProps)(pageContentPaddingX), children: searchTextField }),
21463
21491
  hasFilterControls && !showInlineControl && /* @__PURE__ */ (0, import_jsx_runtime157.jsx)(FilterPanel, { isOpen: showFilters, groupBy, filterImpls, filter, setFilter, onClear: clearFilters })
21464
21492
  ] });
21465
21493
  }
@@ -21580,7 +21608,7 @@ function parseStoredTableView(raw) {
21580
21608
  // src/components/Layout/GridTableLayout/GridTableLayout.tsx
21581
21609
  var import_runtime88 = require("@homebound/truss/runtime");
21582
21610
  var import_jsx_runtime160 = require("react/jsx-runtime");
21583
- var __maybeInc15 = (inc) => {
21611
+ var __maybeInc16 = (inc) => {
21584
21612
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21585
21613
  };
21586
21614
  function GridTableLayoutComponent(props) {
@@ -21639,13 +21667,13 @@ function GridTableLayoutComponent(props) {
21639
21667
  transition: "transitionTop",
21640
21668
  position: "sticky",
21641
21669
  top: ["top_var", {
21642
- "--top": (0, import_runtime88.maybeCssVar)(__maybeInc15(stickyNavAndHeaderOffset()))
21670
+ "--top": (0, import_runtime88.maybeCssVar)(__maybeInc16(stickyNavAndHeaderOffset()))
21643
21671
  }],
21644
21672
  left: ["left_var", {
21645
- "--left": (0, import_runtime88.maybeCssVar)(__maybeInc15(documentScrollChromeLeft()))
21673
+ "--left": (0, import_runtime88.maybeCssVar)(__maybeInc16(documentScrollChromeLeft()))
21646
21674
  }],
21647
21675
  width: ["w_var", {
21648
- "--width": (0, import_runtime88.maybeCssVar)(__maybeInc15(documentScrollChromeWidth()))
21676
+ "--width": (0, import_runtime88.maybeCssVar)(__maybeInc16(documentScrollChromeWidth()))
21649
21677
  }],
21650
21678
  zIndex: ["z_var", {
21651
21679
  "--zIndex": (0, import_runtime88.maybeCssVar)(zIndices.tableActions)
@@ -21818,7 +21846,7 @@ var import_framer_motion3 = require("framer-motion");
21818
21846
  var import_react115 = require("react");
21819
21847
  var import_runtime89 = require("@homebound/truss/runtime");
21820
21848
  var import_jsx_runtime163 = require("react/jsx-runtime");
21821
- var __maybeInc16 = (inc) => {
21849
+ var __maybeInc17 = (inc) => {
21822
21850
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21823
21851
  };
21824
21852
  function RightPaneLayout(props) {
@@ -21839,7 +21867,7 @@ function RightPaneLayout(props) {
21839
21867
  /* @__PURE__ */ (0, import_jsx_runtime163.jsx)("div", { ...(0, import_runtime89.trussProps)({
21840
21868
  ...{
21841
21869
  width: ["w_var", {
21842
- "--width": (0, import_runtime89.maybeCssVar)(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21870
+ "--width": (0, import_runtime89.maybeCssVar)(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21843
21871
  }],
21844
21872
  transition: "transition_width_2s_linear",
21845
21873
  height: "h100",
@@ -21855,7 +21883,7 @@ function RightPaneLayout(props) {
21855
21883
  ...{
21856
21884
  ...!!defaultPaneContent ? {
21857
21885
  width: ["w_var", {
21858
- "--width": (0, import_runtime89.maybeCssVar)(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21886
+ "--width": (0, import_runtime89.maybeCssVar)(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21859
21887
  }],
21860
21888
  marginRight: "mr3"
21861
21889
  } : {}
@@ -23021,7 +23049,17 @@ function EnvironmentBanner(props) {
23021
23049
  }), role: "banner", ...tid, children: [
23022
23050
  getInvertedCorner("left", bgColorVar),
23023
23051
  getInvertedCorner("right", bgColorVar),
23024
- /* @__PURE__ */ (0, import_jsx_runtime176.jsxs)("div", { className: "relative z2 df aic jcsb h100 pl1 mdandup_pl5 pr1 mdandup_pr5", ...tid.content, children: [
23052
+ /* @__PURE__ */ (0, import_jsx_runtime176.jsxs)("div", { ...(0, import_runtime98.trussProps)({
23053
+ ...{
23054
+ position: "relative",
23055
+ zIndex: "z2",
23056
+ display: "df",
23057
+ alignItems: "aic",
23058
+ justifyContent: "jcsb",
23059
+ height: "h100"
23060
+ },
23061
+ ...headerContentPaddingX()
23062
+ }), ...tid.content, children: [
23025
23063
  /* @__PURE__ */ (0, import_jsx_runtime176.jsxs)("span", { className: "df aic gap2 fg1 mh0 oh", ...tid.left, children: [
23026
23064
  /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(Tag, { text: badgeLabel, xss: {
23027
23065
  backgroundColor: "bgColor_FFFFFF90"
@@ -23210,7 +23248,7 @@ function ResponsiveGridItem(props) {
23210
23248
  // src/components/Grid/useResponsiveGrid.ts
23211
23249
  var import_react128 = require("react");
23212
23250
  var import_runtime101 = require("@homebound/truss/runtime");
23213
- var __maybeInc17 = (inc) => {
23251
+ var __maybeInc18 = (inc) => {
23214
23252
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23215
23253
  };
23216
23254
  function useResponsiveGrid(props) {
@@ -23232,7 +23270,7 @@ function useResponsiveGrid(props) {
23232
23270
  }],
23233
23271
  containerType: "ctis",
23234
23272
  gap: ["gap_var", {
23235
- "--gap": (0, import_runtime101.maybeCssVar)(__maybeInc17(gridGap))
23273
+ "--gap": (0, import_runtime101.maybeCssVar)(__maybeInc18(gridGap))
23236
23274
  }]
23237
23275
  };
23238
23276
  }, [minColumnWidth, gap, columns]);
@@ -23357,7 +23395,7 @@ function HbSpinnerProvider({
23357
23395
  // src/components/HomeboundLogo.tsx
23358
23396
  var import_runtime102 = require("@homebound/truss/runtime");
23359
23397
  var import_jsx_runtime180 = require("react/jsx-runtime");
23360
- var __maybeInc18 = (inc) => {
23398
+ var __maybeInc19 = (inc) => {
23361
23399
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23362
23400
  };
23363
23401
  function HomeboundLogo(props) {
@@ -23371,10 +23409,10 @@ function HomeboundLogo(props) {
23371
23409
  "--fill": (0, import_runtime102.maybeCssVar)(fill)
23372
23410
  }],
23373
23411
  width: ["w_var", {
23374
- "--width": (0, import_runtime102.maybeCssVar)(__maybeInc18(width2))
23412
+ "--width": (0, import_runtime102.maybeCssVar)(__maybeInc19(width2))
23375
23413
  }],
23376
23414
  height: ["h_var", {
23377
- "--height": (0, import_runtime102.maybeCssVar)(__maybeInc18(height))
23415
+ "--height": (0, import_runtime102.maybeCssVar)(__maybeInc19(height))
23378
23416
  }]
23379
23417
  }), children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)("path", { d: "M158.1,97.6H0.2L0,39.7L76.8,0l68,38.7l-3.1,5.3l-65-37L6.2,43.4l0.2,48h151.7V97.6z" }) });
23380
23418
  }
@@ -23739,7 +23777,7 @@ function useAppNavGroupExpanded(linkGroup) {
23739
23777
  // src/components/AppNav/AppNavGroup.tsx
23740
23778
  var import_runtime106 = require("@homebound/truss/runtime");
23741
23779
  var import_jsx_runtime184 = require("react/jsx-runtime");
23742
- var __maybeInc19 = (inc) => {
23780
+ var __maybeInc20 = (inc) => {
23743
23781
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23744
23782
  };
23745
23783
  function AppNavGroupView(props) {
@@ -23786,7 +23824,7 @@ function AppNavGroupDisclosure(props) {
23786
23824
  overflow: "oh",
23787
23825
  transition: "transitionHeight",
23788
23826
  height: ["h_var", {
23789
- "--height": (0, import_runtime106.maybeCssVar)(__maybeInc19(contentHeight))
23827
+ "--height": (0, import_runtime106.maybeCssVar)(__maybeInc20(contentHeight))
23790
23828
  }]
23791
23829
  }), ...tid.panel, ...!expanded ? {
23792
23830
  inert: "true"
@@ -24018,24 +24056,36 @@ function NavbarMobileDrawer({
24018
24056
  duration: 0.2
24019
24057
  }, onClick: (e) => e.stopPropagation(), ...tid.mobileMenuDrawer, children: [
24020
24058
  /* @__PURE__ */ (0, import_jsx_runtime189.jsx)("div", { ...(0, import_runtime108.trussProps)({
24021
- display: "df",
24022
- alignItems: "aic",
24023
- justifyContent: "jcfe",
24024
- paddingLeft: "pl3",
24025
- paddingRight: "pr3",
24026
- paddingTop: "pt_12px",
24027
- paddingBottom: "pb_12px",
24028
- flexShrink: "fs0",
24029
- borderBottomStyle: "bbs_solid",
24030
- borderBottomWidth: "bbw_1px",
24031
- borderColor: ["bc_var", {
24032
- "--borderColor": "var(--b-surface-separator)"
24033
- }]
24059
+ ...{
24060
+ display: "df",
24061
+ alignItems: "aic",
24062
+ justifyContent: "jcfe",
24063
+ paddingTop: "pt_12px",
24064
+ paddingBottom: "pb_12px",
24065
+ flexShrink: "fs0",
24066
+ borderBottomStyle: "bbs_solid",
24067
+ borderBottomWidth: "bbw_1px",
24068
+ borderColor: ["bc_var", {
24069
+ "--borderColor": "var(--b-surface-separator)"
24070
+ }]
24071
+ },
24072
+ ...pageContentPaddingX
24034
24073
  }), children: /* @__PURE__ */ (0, import_jsx_runtime189.jsx)(IconButton, { icon: "x", color: "--b-on-surface-muted" /* OnSurfaceMuted */, label: "Close navigation", onClick: onClose, ...tid.mobileMenuClose }) }),
24035
24074
  /* @__PURE__ */ (0, import_jsx_runtime189.jsx)(
24036
24075
  "nav",
24037
24076
  {
24038
- className: "fg1 oya pl3 pr3 pb3 pt2 df fdc gap_4px",
24077
+ ...(0, import_runtime108.trussProps)({
24078
+ ...{
24079
+ flexGrow: "fg1",
24080
+ overflowY: "oya",
24081
+ paddingBottom: "pb3",
24082
+ paddingTop: "pt2",
24083
+ display: "df",
24084
+ flexDirection: "fdc",
24085
+ gap: "gap_4px"
24086
+ },
24087
+ ...pageContentPaddingX
24088
+ }),
24039
24089
  onClickCapture: (e) => {
24040
24090
  if (e.target.closest("a")) {
24041
24091
  onClose();
@@ -24071,23 +24121,20 @@ function Navbar(props) {
24071
24121
  } = useContentOverflow(!sm);
24072
24122
  const showMobile = sm || overflows;
24073
24123
  return /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(ContrastScope, { children: /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("nav", { ...(0, import_runtime109.trussProps)({
24074
- backgroundColor: ["bgColor_var", {
24075
- "--backgroundColor": "var(--b-surface-raised)"
24076
- }],
24077
- flexShrink: "fs0",
24078
- display: "df",
24079
- alignItems: "aic",
24080
- justifyContent: "jcsb",
24081
- whiteSpace: "wsnw",
24082
- paddingLeft: "pl1",
24083
- paddingRight: "pr1",
24084
- paddingTop: "pt1",
24085
- paddingBottom: "pb1",
24086
- gap: "gap2",
24087
- ...!showMobile ? {
24088
- paddingLeft: "pl5",
24089
- paddingRight: "pr5"
24090
- } : {}
24124
+ ...{
24125
+ backgroundColor: ["bgColor_var", {
24126
+ "--backgroundColor": "var(--b-surface-raised)"
24127
+ }],
24128
+ flexShrink: "fs0",
24129
+ display: "df",
24130
+ alignItems: "aic",
24131
+ justifyContent: "jcsb",
24132
+ whiteSpace: "wsnw",
24133
+ paddingTop: "pt1",
24134
+ paddingBottom: "pb1",
24135
+ gap: "gap2"
24136
+ },
24137
+ ...headerContentPaddingX(showMobile)
24091
24138
  }), ...tid, children: [
24092
24139
  /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { className: "df aic gap3 fg1 mw0", children: [
24093
24140
  /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { className: "df aic fs0 gap2", children: [
@@ -24519,7 +24566,7 @@ var import_react_aria62 = require("react-aria");
24519
24566
  var import_runtime112 = require("@homebound/truss/runtime");
24520
24567
  var import_jsx_runtime195 = require("react/jsx-runtime");
24521
24568
  var import_react142 = require("react");
24522
- var __maybeInc20 = (inc) => {
24569
+ var __maybeInc21 = (inc) => {
24523
24570
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
24524
24571
  };
24525
24572
  function Stepper(props) {
@@ -24575,7 +24622,7 @@ function Stepper(props) {
24575
24622
  transition: "transition_width_200ms",
24576
24623
  height: "h100",
24577
24624
  width: ["w_var", {
24578
- "--width": (0, import_runtime112.maybeCssVar)(__maybeInc20(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24625
+ "--width": (0, import_runtime112.maybeCssVar)(__maybeInc21(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24579
24626
  }]
24580
24627
  }) }) })
24581
24628
  ] });
@@ -24796,7 +24843,9 @@ var stepperTabStyles = {
24796
24843
  fontSize: "fz_14px",
24797
24844
  lineHeight: "lh_20px",
24798
24845
  overflow: "oh",
24799
- textAlign: "tal"
24846
+ textAlign: "tal",
24847
+ height: "h_48px",
24848
+ transition: "transitionAll"
24800
24849
  },
24801
24850
  hoverStyles: {
24802
24851
  backgroundColor: "bgGray100"
@@ -24821,12 +24870,14 @@ function StepperTabs(props) {
24821
24870
  const {
24822
24871
  steps,
24823
24872
  currentStep,
24824
- onChange
24873
+ onChange,
24874
+ collapsed: forceCollapsed
24825
24875
  } = props;
24826
24876
  const tid = useTestIds(props, "stepperTabs");
24827
24877
  const {
24828
- sm: collapsed
24878
+ sm: isMobile
24829
24879
  } = useBreakpoint();
24880
+ const collapsed = isMobile || !!forceCollapsed;
24830
24881
  const capWidth = steps.length <= 3;
24831
24882
  return /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("nav", { "aria-label": "steps", className: "w100", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("ol", { ...(0, import_runtime114.trussProps)({
24832
24883
  padding: "p_0",
@@ -25463,7 +25514,7 @@ function useToast() {
25463
25514
  // src/layouts/SideNavLayout/SideNavLayout.tsx
25464
25515
  var import_runtime118 = require("@homebound/truss/runtime");
25465
25516
  var import_jsx_runtime204 = require("react/jsx-runtime");
25466
- var __maybeInc21 = (inc) => {
25517
+ var __maybeInc22 = (inc) => {
25467
25518
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25468
25519
  };
25469
25520
  function SideNavLayout(props) {
@@ -25518,11 +25569,11 @@ function SideNavLayoutContent(props) {
25518
25569
  "--zIndex": (0, import_runtime118.maybeCssVar)(zIndices.sideNav)
25519
25570
  }],
25520
25571
  top: ["top_var", {
25521
- "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25572
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc22(navTop))
25522
25573
  }],
25523
25574
  alignSelf: "asfs",
25524
25575
  height: ["h_var", {
25525
- "--height": (0, import_runtime118.maybeCssVar)(__maybeInc21(railViewportHeight))
25576
+ "--height": (0, import_runtime118.maybeCssVar)(__maybeInc22(railViewportHeight))
25526
25577
  }],
25527
25578
  width: ["w_var", {
25528
25579
  "--width": `${collapsed ? railCollapsedWidthPx : railWidthPx}px`
@@ -25532,7 +25583,7 @@ function SideNavLayoutContent(props) {
25532
25583
  position: "fixed",
25533
25584
  left: "left0",
25534
25585
  top: ["top_var", {
25535
- "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25586
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc22(navTop))
25536
25587
  }],
25537
25588
  bottom: "bottom0",
25538
25589
  zIndex: ["z_var", {
@@ -25577,7 +25628,7 @@ function SideNavLayoutContent(props) {
25577
25628
  // src/layouts/EnvironmentBannerLayout/EnvironmentBannerLayout.tsx
25578
25629
  var import_runtime119 = require("@homebound/truss/runtime");
25579
25630
  var import_jsx_runtime205 = require("react/jsx-runtime");
25580
- var __maybeInc22 = (inc) => {
25631
+ var __maybeInc23 = (inc) => {
25581
25632
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25582
25633
  };
25583
25634
  function EnvironmentBannerLayout(props) {
@@ -25611,7 +25662,7 @@ function EnvironmentBannerLayout(props) {
25611
25662
  "--zIndex": (0, import_runtime119.maybeCssVar)(zIndices.environmentBanner)
25612
25663
  }],
25613
25664
  width: ["w_var", {
25614
- "--width": (0, import_runtime119.maybeCssVar)(__maybeInc22(innerWidth))
25665
+ "--width": (0, import_runtime119.maybeCssVar)(__maybeInc23(innerWidth))
25615
25666
  }]
25616
25667
  }), ...tid.bannerSticky, children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(EnvironmentBanner, { ...environmentBanner, ...tid.environmentBanner }) }) }),
25617
25668
  children
@@ -25742,7 +25793,7 @@ function useNavbarLayoutHeight() {
25742
25793
 
25743
25794
  // src/layouts/NavbarLayout/NavbarLayout.tsx
25744
25795
  var import_jsx_runtime207 = require("react/jsx-runtime");
25745
- var __maybeInc23 = (inc) => {
25796
+ var __maybeInc24 = (inc) => {
25746
25797
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25747
25798
  };
25748
25799
  function NavbarLayout(props) {
@@ -25773,7 +25824,7 @@ function NavbarLayout(props) {
25773
25824
  "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25774
25825
  }],
25775
25826
  width: ["w_var", {
25776
- "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25827
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc24(innerWidth))
25777
25828
  }]
25778
25829
  }
25779
25830
  ) : (
@@ -25785,7 +25836,7 @@ function NavbarLayout(props) {
25785
25836
  "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25786
25837
  }],
25787
25838
  width: ["w_var", {
25788
- "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25839
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc24(innerWidth))
25789
25840
  }],
25790
25841
  transition: "transitionTop"
25791
25842
  }
@@ -25847,10 +25898,9 @@ function BaseHeader(props) {
25847
25898
  display: "df",
25848
25899
  justifyContent: "jcsb",
25849
25900
  width: "w100",
25850
- gap: "gap1",
25851
- paddingLeft: "pl3",
25852
- paddingRight: "pr3"
25901
+ gap: "gap1"
25853
25902
  },
25903
+ ...pageContentPaddingX,
25854
25904
  ...{
25855
25905
  ...!bottomSlot ? {
25856
25906
  marginBottom: "mb2"
@@ -25868,6 +25918,7 @@ function BaseHeader(props) {
25868
25918
  }
25869
25919
 
25870
25920
  // src/components/Headers/PageHeader.tsx
25921
+ var import_runtime122 = require("@homebound/truss/runtime");
25871
25922
  var import_jsx_runtime209 = require("react/jsx-runtime");
25872
25923
  function PageHeader2(props) {
25873
25924
  const {
@@ -25875,7 +25926,7 @@ function PageHeader2(props) {
25875
25926
  ...otherProps
25876
25927
  } = props;
25877
25928
  const tid = useTestIds(otherProps, "header");
25878
- return /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime209.jsx)("div", { className: "pl3 pr3", children: /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
25929
+ return /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime209.jsx)("div", { ...(0, import_runtime122.trussProps)(pageContentPaddingX), children: /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
25879
25930
  }
25880
25931
 
25881
25932
  // src/layouts/useBannerAndNavbarHeight.ts
@@ -25884,9 +25935,9 @@ function useBannerAndNavbarHeight() {
25884
25935
  }
25885
25936
 
25886
25937
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
25887
- var import_runtime122 = require("@homebound/truss/runtime");
25938
+ var import_runtime123 = require("@homebound/truss/runtime");
25888
25939
  var import_jsx_runtime210 = require("react/jsx-runtime");
25889
- var __maybeInc24 = (inc) => {
25940
+ var __maybeInc25 = (inc) => {
25890
25941
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25891
25942
  };
25892
25943
  function PageHeaderLayout(props) {
@@ -25916,24 +25967,24 @@ function PageHeaderLayout(props) {
25916
25967
  const innerCss = autoHideState === "static" ? {
25917
25968
  position: "sticky",
25918
25969
  left: ["left_var", {
25919
- "--left": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerLeft))
25970
+ "--left": (0, import_runtime123.maybeCssVar)(__maybeInc25(headerLeft))
25920
25971
  }],
25921
25972
  width: ["w_var", {
25922
- "--width": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerWidth))
25973
+ "--width": (0, import_runtime123.maybeCssVar)(__maybeInc25(headerWidth))
25923
25974
  }],
25924
25975
  zIndex: ["z_var", {
25925
- "--zIndex": (0, import_runtime122.maybeCssVar)(zIndices.pageStickyHeader)
25976
+ "--zIndex": (0, import_runtime123.maybeCssVar)(zIndices.pageStickyHeader)
25926
25977
  }]
25927
25978
  } : {
25928
25979
  position: "fixed",
25929
25980
  left: ["left_var", {
25930
- "--left": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerLeft))
25981
+ "--left": (0, import_runtime123.maybeCssVar)(__maybeInc25(headerLeft))
25931
25982
  }],
25932
25983
  width: ["w_var", {
25933
- "--width": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerWidth))
25984
+ "--width": (0, import_runtime123.maybeCssVar)(__maybeInc25(headerWidth))
25934
25985
  }],
25935
25986
  zIndex: ["z_var", {
25936
- "--zIndex": (0, import_runtime122.maybeCssVar)(zIndices.pageStickyHeader)
25987
+ "--zIndex": (0, import_runtime123.maybeCssVar)(zIndices.pageStickyHeader)
25937
25988
  }],
25938
25989
  transition: "transitionTop"
25939
25990
  };
@@ -25941,20 +25992,189 @@ function PageHeaderLayout(props) {
25941
25992
  top: autoHideState === "revealed" ? outerTop : `calc(${outerTop} - ${headerHeight}px)`
25942
25993
  } : void 0;
25943
25994
  const pageHeaderEl = (0, import_react152.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime210.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
25944
- return /* @__PURE__ */ (0, import_jsx_runtime210.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime210.jsxs)("div", { ...(0, import_runtime122.mergeProps)(void 0, cssVars, {
25995
+ return /* @__PURE__ */ (0, import_jsx_runtime210.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime210.jsxs)("div", { ...(0, import_runtime123.mergeProps)(void 0, cssVars, {
25945
25996
  display: "df",
25946
25997
  flexDirection: "fdc",
25947
25998
  width: "w100"
25948
25999
  }), ...tid, children: [
25949
- /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { ref: spacerRef, ...(0, import_runtime122.mergeProps)(void 0, {
26000
+ /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { ref: spacerRef, ...(0, import_runtime123.mergeProps)(void 0, {
25950
26001
  height: headerHeight
25951
26002
  }, {
25952
26003
  flexShrink: "fs0",
25953
26004
  width: "w100"
25954
- }), children: /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime122.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
26005
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime123.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
25955
26006
  /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
25956
26007
  ] }) });
25957
26008
  }
26009
+
26010
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
26011
+ var import_react153 = require("react");
26012
+
26013
+ // src/components/Headers/WorkflowHeader.tsx
26014
+ var import_jsx_runtime211 = require("react/jsx-runtime");
26015
+ function WorkflowHeader(props) {
26016
+ const { stepperTabs, ...otherProps } = props;
26017
+ const tid = useTestIds(otherProps, "header");
26018
+ return /* @__PURE__ */ (0, import_jsx_runtime211.jsx)(BaseHeader, { ...otherProps, bottomSlot: /* @__PURE__ */ (0, import_jsx_runtime211.jsx)(StepperTabs, { ...stepperTabs, ...tid.stepperTabs }) });
26019
+ }
26020
+
26021
+ // src/layouts/WorkflowLayout/WorkflowActions.tsx
26022
+ var import_jsx_runtime212 = require("react/jsx-runtime");
26023
+ function WorkflowActions(props) {
26024
+ const {
26025
+ isFirstStep,
26026
+ isLastStep,
26027
+ isMobile,
26028
+ onBack,
26029
+ onCancel,
26030
+ onSaveAndExit,
26031
+ completeLabel,
26032
+ onComplete,
26033
+ onContinue,
26034
+ primaryDisabled
26035
+ } = props;
26036
+ return /* @__PURE__ */ (0, import_jsx_runtime212.jsxs)("div", { className: "df aic jcsb sm_w100", children: [
26037
+ /* @__PURE__ */ (0, import_jsx_runtime212.jsx)("div", { className: "df aic", children: !isFirstStep && (isMobile ? /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) : /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: onBack })) }),
26038
+ /* @__PURE__ */ (0, import_jsx_runtime212.jsxs)("div", { className: "df aic gap1", children: [
26039
+ /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
26040
+ onSaveAndExit && /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
26041
+ isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: completeLabel, variant: "primary", onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Continue", variant: "primary", onClick: onContinue, disabled: primaryDisabled })
26042
+ ] })
26043
+ ] });
26044
+ }
26045
+
26046
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
26047
+ var import_runtime124 = require("@homebound/truss/runtime");
26048
+ var import_jsx_runtime213 = require("react/jsx-runtime");
26049
+ var __maybeInc26 = (inc) => {
26050
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
26051
+ };
26052
+ function WorkflowLayout(props) {
26053
+ const {
26054
+ steps,
26055
+ defaultStep,
26056
+ onCancel,
26057
+ completeLabel,
26058
+ onComplete,
26059
+ onSaveAndExit,
26060
+ ...headerProps
26061
+ } = props;
26062
+ const tabSteps = steps.map((step) => ({
26063
+ ...step,
26064
+ value: defaultTestId(step.label)
26065
+ }));
26066
+ const [currentStep, setCurrentStep] = (0, import_react153.useState)(() => getInitialStep(tabSteps, defaultStep));
26067
+ const tid = useTestIds(props, "workflowLayout");
26068
+ const {
26069
+ sm: isMobile
26070
+ } = useBreakpoint();
26071
+ const bannerAndNavbarHeight = useBannerAndNavbarHeight();
26072
+ const bannerAndNavbarHeightRef = (0, import_react153.useRef)(bannerAndNavbarHeight);
26073
+ bannerAndNavbarHeightRef.current = bannerAndNavbarHeight;
26074
+ const getBannerAndNavbarHeight = (0, import_react153.useCallback)(() => bannerAndNavbarHeightRef.current, []);
26075
+ const headerMetricsRef = (0, import_react153.useRef)(null);
26076
+ const spacerRef = (0, import_react153.useRef)(null);
26077
+ const headerHeight = useMeasuredHeight(headerMetricsRef, true);
26078
+ const {
26079
+ state: scrollState
26080
+ } = useAutoHideOnScroll(spacerRef, true, getBannerAndNavbarHeight);
26081
+ const collapsed = scrollState === "hidden";
26082
+ const headerWidth = documentScrollChromeWidth();
26083
+ const outerTop = bannerAndNavbarChromeTop();
26084
+ const cssVars = headerHeight > 0 ? {
26085
+ [beamPageHeaderLayoutHeightVar]: `${headerHeight}px`
26086
+ } : void 0;
26087
+ const currentIndex = isValidStep(tabSteps, currentStep) ? tabSteps.findIndex((step) => step.value === currentStep) : 0;
26088
+ const isFirstStep = currentIndex <= 0;
26089
+ const isLastStep = currentIndex === tabSteps.length - 1;
26090
+ const activeStep = tabSteps[currentIndex];
26091
+ const buttons = /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => setCurrentStep(tabSteps[currentIndex - 1].value), onCancel, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !activeStep?.completed, onContinue: () => setCurrentStep(tabSteps[currentIndex + 1].value) });
26092
+ const showFooter = isMobile;
26093
+ (0, import_react153.useLayoutEffect)(() => {
26094
+ const root = document.documentElement;
26095
+ const previous = root.style.getPropertyValue(beamWorkflowLayoutFooterHeightVar);
26096
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, showFooter ? `${mobileFooterHeightPx}px` : "0px");
26097
+ return () => {
26098
+ if (previous) {
26099
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, previous);
26100
+ } else {
26101
+ root.style.removeProperty(beamWorkflowLayoutFooterHeightVar);
26102
+ }
26103
+ };
26104
+ }, [showFooter]);
26105
+ const headerEl = /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(WorkflowHeader, { ...headerProps, rightSlot: isMobile ? void 0 : buttons, stepperTabs: {
26106
+ steps: tabSteps,
26107
+ currentStep,
26108
+ onChange: setCurrentStep,
26109
+ collapsed
26110
+ } });
26111
+ return /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime213.jsxs)("div", { ...(0, import_runtime124.mergeProps)(void 0, cssVars, {
26112
+ display: "df",
26113
+ flexDirection: "fdc",
26114
+ width: "w100"
26115
+ }), ...tid, children: [
26116
+ /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ref: spacerRef, ...(0, import_runtime124.mergeProps)(void 0, {
26117
+ height: headerHeight
26118
+ }, {
26119
+ flexShrink: "fs0",
26120
+ width: "w100"
26121
+ }), ...tid.spacer, children: /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime124.trussProps)({
26122
+ position: "fixed",
26123
+ width: ["w_var", {
26124
+ "--width": (0, import_runtime124.maybeCssVar)(__maybeInc26(headerWidth))
26125
+ }],
26126
+ zIndex: ["z_var", {
26127
+ "--zIndex": (0, import_runtime124.maybeCssVar)(zIndices.pageStickyHeader)
26128
+ }],
26129
+ top: ["top_var", {
26130
+ "--top": (0, import_runtime124.maybeCssVar)(__maybeInc26(outerTop))
26131
+ }]
26132
+ }), ...tid.header, children: headerEl }) }),
26133
+ /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children: activeStep?.content }),
26134
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ...(0, import_runtime124.trussProps)({
26135
+ flexShrink: "fs0",
26136
+ width: "w100",
26137
+ height: ["h_var", {
26138
+ "--height": `${mobileFooterHeightPx}px`
26139
+ }]
26140
+ }) }),
26141
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ...(0, import_runtime124.trussProps)({
26142
+ ...{
26143
+ position: "fixed",
26144
+ bottom: "bottom0",
26145
+ width: ["w_var", {
26146
+ "--width": (0, import_runtime124.maybeCssVar)(__maybeInc26(headerWidth))
26147
+ }],
26148
+ height: ["h_var", {
26149
+ "--height": `${mobileFooterHeightPx}px`
26150
+ }],
26151
+ zIndex: ["z_var", {
26152
+ "--zIndex": (0, import_runtime124.maybeCssVar)(zIndices.pageStickyFooter)
26153
+ }],
26154
+ display: "df",
26155
+ alignItems: "aic",
26156
+ justifyContent: "jcfe",
26157
+ gap: "gap1",
26158
+ borderTopStyle: "bts_solid",
26159
+ borderTopWidth: "btw_1px",
26160
+ borderColor: ["bc_var", {
26161
+ "--borderColor": "var(--b-surface-separator)"
26162
+ }],
26163
+ backgroundColor: ["bgColor_var", {
26164
+ "--backgroundColor": "var(--b-surface)"
26165
+ }]
26166
+ },
26167
+ ...pageContentPaddingX
26168
+ }), ...tid.footer, children: buttons })
26169
+ ] }) });
26170
+ }
26171
+ var mobileFooterHeightPx = 80;
26172
+ function isValidStep(steps, value) {
26173
+ return steps.some((step) => step.value === value);
26174
+ }
26175
+ function getInitialStep(steps, defaultStep) {
26176
+ return defaultStep !== void 0 && isValidStep(steps, defaultStep) ? defaultStep : steps[0]?.value;
26177
+ }
25958
26178
  // Annotate the CommonJS export names for ESM import in node:
25959
26179
  0 && (module.exports = {
25960
26180
  ASC,
@@ -26123,6 +26343,7 @@ function PageHeaderLayout(props) {
26123
26343
  Tooltip,
26124
26344
  TreeSelectField,
26125
26345
  ViewToggleButton,
26346
+ WorkflowLayout,
26126
26347
  actionColumn,
26127
26348
  applyRowFn,
26128
26349
  assignDefaultColumnIds,
@@ -26134,6 +26355,7 @@ function PageHeaderLayout(props) {
26134
26355
  beamPageHeaderLayoutHeightVar,
26135
26356
  beamSideNavLayoutWidthVar,
26136
26357
  beamTableActionsHeightVar,
26358
+ beamWorkflowLayoutFooterHeightVar,
26137
26359
  booleanFilter,
26138
26360
  boundCheckboxField,
26139
26361
  boundCheckboxGroupField,
@@ -26196,10 +26418,12 @@ function PageHeaderLayout(props) {
26196
26418
  getColumnBorderCss,
26197
26419
  getDateFormat,
26198
26420
  getFirstOrLastCellCss,
26421
+ getFloatingBottomOffset,
26199
26422
  getJustification,
26200
26423
  getNavLinkStyles,
26201
26424
  getTableRefWidthStyles,
26202
26425
  getTableStyles,
26426
+ headerContentPaddingX,
26203
26427
  headerRenderFn,
26204
26428
  hoverStyles,
26205
26429
  increment,
@@ -26229,6 +26453,8 @@ function PageHeaderLayout(props) {
26229
26453
  nonKindGridColumnKeys,
26230
26454
  numberRangeFilter,
26231
26455
  numericColumn,
26456
+ pageContentGutterPx,
26457
+ pageContentPaddingX,
26232
26458
  parseDate,
26233
26459
  parseDateRange,
26234
26460
  parseWidthToPx,