@homebound/beam 3.56.1 → 3.57.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/Css.json CHANGED
@@ -912,6 +912,7 @@
912
912
  "transitionTransform": {"kind":"static","defs":{"transition":"transform 200ms cubic-bezier(0.4, 0, 0.2, 1)"}},
913
913
  "transitionHeight": {"kind":"static","defs":{"transition":"height 200ms cubic-bezier(0.4, 0, 0.2, 1)"}},
914
914
  "transitionTop": {"kind":"static","defs":{"transition":"top 200ms cubic-bezier(0.4, 0, 0.2, 1)"}},
915
+ "transitionAll": {"kind":"static","defs":{"transition":"all 200ms cubic-bezier(0.4, 0, 0.2, 1)"}},
915
916
  "bsh0": {"kind":"static","defs":{"boxShadow":"none"}},
916
917
  "bshBasic": {"kind":"static","defs":{"boxShadow":"0px 4px 8px rgba(53, 53, 53, 0.08), 0px 2px 16px rgba(53, 53, 53, 0.03);"}},
917
918
  "bshHover": {"kind":"static","defs":{"boxShadow":"0px 4px 8px rgba(53, 53, 53, 0.1), 0px 2px 24px rgba(53, 53, 53, 0.08);"}},
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,6 +271,7 @@ __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,
@@ -4232,6 +4235,10 @@ var CssBuilder = class _CssBuilder {
4232
4235
  get transitionTop() {
4233
4236
  return this.add("transition", "top 200ms cubic-bezier(0.4, 0, 0.2, 1)");
4234
4237
  }
4238
+ /** Sets `transition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1)"`. */
4239
+ get transitionAll() {
4240
+ return this.add("transition", "all 200ms cubic-bezier(0.4, 0, 0.2, 1)");
4241
+ }
4235
4242
  // buttonBase
4236
4243
  /** 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
4244
  get buttonBase() {
@@ -6461,6 +6468,7 @@ var beamLayoutViewportWidthVar = "--beam-layout-viewport-width";
6461
6468
  var beamLayoutViewportHeightVar = "--beam-layout-viewport-height";
6462
6469
  var beamSideNavLayoutWidthVar = "--beam-side-nav-layout-width";
6463
6470
  var beamTableActionsHeightVar = "--beam-table-actions-height";
6471
+ var beamWorkflowLayoutFooterHeightVar = "--beam-workflow-layout-footer-height";
6464
6472
  function documentScrollChromeLeft() {
6465
6473
  return `var(${beamSideNavLayoutWidthVar}, 0px)`;
6466
6474
  }
@@ -6476,6 +6484,9 @@ function stickyNavAndHeaderOffset(basePx = 0) {
6476
6484
  function stickyTableHeaderOffset(basePx = 0) {
6477
6485
  return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamTableActionsHeightVar}, 0px))`;
6478
6486
  }
6487
+ function getFloatingBottomOffset(basePx = 0) {
6488
+ return `calc(${basePx}px + var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
6489
+ }
6479
6490
 
6480
6491
  // src/utils/zIndices.ts
6481
6492
  var zIndices = {
@@ -6492,6 +6503,8 @@ var zIndices = {
6492
6503
  superDrawerScrim: 55,
6493
6504
  modalUnderlay: 60,
6494
6505
  pageStickyHeader: 70,
6506
+ // Sticky mobile action footer (WorkflowLayout) — same tier as pageStickyHeader; header and footer never overlap on screen.
6507
+ pageStickyFooter: 70,
6495
6508
  dragHandle: 80,
6496
6509
  // Side-nav layer. Mobile rail overlays page content when expanded; sits below
6497
6510
  // snackbar so toasts still land on top.
@@ -16782,6 +16795,9 @@ var import_react83 = require("react");
16782
16795
  var import_react82 = require("react");
16783
16796
  var import_runtime60 = require("@homebound/truss/runtime");
16784
16797
  var import_jsx_runtime91 = require("react/jsx-runtime");
16798
+ var __maybeInc10 = (inc) => {
16799
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16800
+ };
16785
16801
  function DocumentScrollToTopButton({
16786
16802
  viewportHeight
16787
16803
  }) {
@@ -16810,7 +16826,7 @@ function DocumentScrollToTopButton({
16810
16826
  ...{
16811
16827
  position: "fixed",
16812
16828
  bottom: ["bottom_var", {
16813
- "--bottom": `${scrollToTopOffsetPx}px`
16829
+ "--bottom": (0, import_runtime60.maybeCssVar)(__maybeInc10(getFloatingBottomOffset(scrollToTopOffsetPx)))
16814
16830
  }],
16815
16831
  right: ["right_var", {
16816
16832
  "--right": `${scrollToTopOffsetPx}px`
@@ -16898,7 +16914,7 @@ var import_react84 = require("react");
16898
16914
  var import_react_router_dom4 = require("react-router-dom");
16899
16915
  var import_runtime62 = require("@homebound/truss/runtime");
16900
16916
  var import_jsx_runtime93 = require("react/jsx-runtime");
16901
- var __maybeInc10 = (inc) => {
16917
+ var __maybeInc11 = (inc) => {
16902
16918
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16903
16919
  };
16904
16920
  function TableCard(props) {
@@ -17029,7 +17045,7 @@ function TableCardView(props) {
17029
17045
  borderRadius: "br4",
17030
17046
  backgroundColor: "bgBlue500",
17031
17047
  width: ["w_var", {
17032
- "--width": (0, import_runtime62.maybeCssVar)(__maybeInc10(`${progressValue}%`))
17048
+ "--width": (0, import_runtime62.maybeCssVar)(__maybeInc11(`${progressValue}%`))
17033
17049
  }]
17034
17050
  }) }) }),
17035
17051
  /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { ...tid.progressValue, children: [
@@ -17068,7 +17084,7 @@ function GridTableEmptyState(props) {
17068
17084
  var import_runtime63 = require("@homebound/truss/runtime");
17069
17085
  var import_jsx_runtime95 = require("react/jsx-runtime");
17070
17086
  var import_react86 = require("react");
17071
- var __maybeInc11 = (inc) => {
17087
+ var __maybeInc12 = (inc) => {
17072
17088
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
17073
17089
  };
17074
17090
  var runningInJest = false;
@@ -17398,7 +17414,7 @@ function renderDiv(style, id, columns, visibleDataRows, keptSelectedRows, pinned
17398
17414
  position: "sticky",
17399
17415
  transition: "transitionTop",
17400
17416
  top: ["top_var", {
17401
- "--top": (0, import_runtime63.maybeCssVar)(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
17417
+ "--top": (0, import_runtime63.maybeCssVar)(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
17402
17418
  }],
17403
17419
  zIndex: ["z_var", {
17404
17420
  "--zIndex": (0, import_runtime63.maybeCssVar)(zIndices.tableStickyHeader)
@@ -17442,7 +17458,7 @@ function renderTable(style, id, columns, visibleDataRows, keptSelectedRows, pinn
17442
17458
  position: "sticky",
17443
17459
  transition: "transitionTop",
17444
17460
  top: ["top_var", {
17445
- "--top": (0, import_runtime63.maybeCssVar)(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
17461
+ "--top": (0, import_runtime63.maybeCssVar)(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
17446
17462
  }],
17447
17463
  zIndex: ["z_var", {
17448
17464
  "--zIndex": (0, import_runtime63.maybeCssVar)(zIndices.tableStickyHeader)
@@ -17786,7 +17802,7 @@ var import_react87 = require("react");
17786
17802
  var import_react_aria48 = require("react-aria");
17787
17803
  var import_runtime66 = require("@homebound/truss/runtime");
17788
17804
  var import_jsx_runtime98 = require("react/jsx-runtime");
17789
- var __maybeInc12 = (inc) => {
17805
+ var __maybeInc13 = (inc) => {
17790
17806
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
17791
17807
  };
17792
17808
  function Accordion(props) {
@@ -17933,7 +17949,7 @@ function Accordion(props) {
17933
17949
  /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { ...tid.details, id, "aria-hidden": !expanded, ...(0, import_runtime66.trussProps)({
17934
17950
  overflow: "oh",
17935
17951
  height: ["h_var", {
17936
- "--height": (0, import_runtime66.maybeCssVar)(__maybeInc12(contentHeight))
17952
+ "--height": (0, import_runtime66.maybeCssVar)(__maybeInc13(contentHeight))
17937
17953
  }],
17938
17954
  transition: "transition_height_250ms_ease_in_out"
17939
17955
  }), children: expanded && /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { ...(0, import_runtime66.trussProps)({
@@ -19445,7 +19461,7 @@ function BoundTreeSelectField(props) {
19445
19461
  var import_react96 = require("react");
19446
19462
  var import_runtime72 = require("@homebound/truss/runtime");
19447
19463
  var import_jsx_runtime127 = require("react/jsx-runtime");
19448
- var __maybeInc13 = (inc) => {
19464
+ var __maybeInc14 = (inc) => {
19449
19465
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
19450
19466
  };
19451
19467
  function FormLines(props) {
@@ -19483,13 +19499,13 @@ function FormLines(props) {
19483
19499
  display: "df",
19484
19500
  flexDirection: "fdc",
19485
19501
  gap: ["gap_var", {
19486
- "--gap": (0, import_runtime72.maybeCssVar)(__maybeInc13(gap))
19502
+ "--gap": (0, import_runtime72.maybeCssVar)(__maybeInc14(gap))
19487
19503
  }],
19488
19504
  paddingBottom: ["pb_var", {
19489
- "--paddingBottom": (0, import_runtime72.maybeCssVar)(__maybeInc13(gap))
19505
+ "--paddingBottom": (0, import_runtime72.maybeCssVar)(__maybeInc14(gap))
19490
19506
  }],
19491
19507
  width: ["w_var", {
19492
- "--width": (0, import_runtime72.maybeCssVar)(__maybeInc13(sizes[width2]))
19508
+ "--width": (0, import_runtime72.maybeCssVar)(__maybeInc14(sizes[width2]))
19493
19509
  }]
19494
19510
  }), children: import_react96.Children.map(children, (child) => {
19495
19511
  if (child && typeof child === "object" && "type" in child && child.type.isFormHeading) {
@@ -20369,7 +20385,7 @@ function useActiveSection(sectionsWithRefs) {
20369
20385
  // src/components/Layout/FullBleed.tsx
20370
20386
  var import_runtime80 = require("@homebound/truss/runtime");
20371
20387
  var import_react104 = require("react");
20372
- var __maybeInc14 = (inc) => {
20388
+ var __maybeInc15 = (inc) => {
20373
20389
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
20374
20390
  };
20375
20391
  function FullBleed({
@@ -20400,17 +20416,17 @@ function FullBleed({
20400
20416
  // inverts that padding with negative margins before re-applying it to the child.
20401
20417
  {
20402
20418
  marginLeft: ["ml_var", {
20403
- "--marginLeft": (0, import_runtime80.maybeCssVar)(__maybeInc14(invertSpacing(paddingLeft)))
20419
+ "--marginLeft": (0, import_runtime80.maybeCssVar)(__maybeInc15(invertSpacing(paddingLeft)))
20404
20420
  }],
20405
20421
  marginRight: ["mr_var", {
20406
- "--marginRight": (0, import_runtime80.maybeCssVar)(__maybeInc14(invertSpacing(paddingRight)))
20422
+ "--marginRight": (0, import_runtime80.maybeCssVar)(__maybeInc15(invertSpacing(paddingRight)))
20407
20423
  }],
20408
20424
  ...!omitPadding ? {
20409
20425
  paddingLeft: ["pl_var", {
20410
- "--paddingLeft": (0, import_runtime80.maybeCssVar)(__maybeInc14(paddingLeft))
20426
+ "--paddingLeft": (0, import_runtime80.maybeCssVar)(__maybeInc15(paddingLeft))
20411
20427
  }],
20412
20428
  paddingRight: ["pr_var", {
20413
- "--paddingRight": (0, import_runtime80.maybeCssVar)(__maybeInc14(paddingRight))
20429
+ "--paddingRight": (0, import_runtime80.maybeCssVar)(__maybeInc15(paddingRight))
20414
20430
  }]
20415
20431
  } : {}
20416
20432
  }
@@ -21580,7 +21596,7 @@ function parseStoredTableView(raw) {
21580
21596
  // src/components/Layout/GridTableLayout/GridTableLayout.tsx
21581
21597
  var import_runtime88 = require("@homebound/truss/runtime");
21582
21598
  var import_jsx_runtime160 = require("react/jsx-runtime");
21583
- var __maybeInc15 = (inc) => {
21599
+ var __maybeInc16 = (inc) => {
21584
21600
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21585
21601
  };
21586
21602
  function GridTableLayoutComponent(props) {
@@ -21639,13 +21655,13 @@ function GridTableLayoutComponent(props) {
21639
21655
  transition: "transitionTop",
21640
21656
  position: "sticky",
21641
21657
  top: ["top_var", {
21642
- "--top": (0, import_runtime88.maybeCssVar)(__maybeInc15(stickyNavAndHeaderOffset()))
21658
+ "--top": (0, import_runtime88.maybeCssVar)(__maybeInc16(stickyNavAndHeaderOffset()))
21643
21659
  }],
21644
21660
  left: ["left_var", {
21645
- "--left": (0, import_runtime88.maybeCssVar)(__maybeInc15(documentScrollChromeLeft()))
21661
+ "--left": (0, import_runtime88.maybeCssVar)(__maybeInc16(documentScrollChromeLeft()))
21646
21662
  }],
21647
21663
  width: ["w_var", {
21648
- "--width": (0, import_runtime88.maybeCssVar)(__maybeInc15(documentScrollChromeWidth()))
21664
+ "--width": (0, import_runtime88.maybeCssVar)(__maybeInc16(documentScrollChromeWidth()))
21649
21665
  }],
21650
21666
  zIndex: ["z_var", {
21651
21667
  "--zIndex": (0, import_runtime88.maybeCssVar)(zIndices.tableActions)
@@ -21818,7 +21834,7 @@ var import_framer_motion3 = require("framer-motion");
21818
21834
  var import_react115 = require("react");
21819
21835
  var import_runtime89 = require("@homebound/truss/runtime");
21820
21836
  var import_jsx_runtime163 = require("react/jsx-runtime");
21821
- var __maybeInc16 = (inc) => {
21837
+ var __maybeInc17 = (inc) => {
21822
21838
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21823
21839
  };
21824
21840
  function RightPaneLayout(props) {
@@ -21839,7 +21855,7 @@ function RightPaneLayout(props) {
21839
21855
  /* @__PURE__ */ (0, import_jsx_runtime163.jsx)("div", { ...(0, import_runtime89.trussProps)({
21840
21856
  ...{
21841
21857
  width: ["w_var", {
21842
- "--width": (0, import_runtime89.maybeCssVar)(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21858
+ "--width": (0, import_runtime89.maybeCssVar)(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21843
21859
  }],
21844
21860
  transition: "transition_width_2s_linear",
21845
21861
  height: "h100",
@@ -21855,7 +21871,7 @@ function RightPaneLayout(props) {
21855
21871
  ...{
21856
21872
  ...!!defaultPaneContent ? {
21857
21873
  width: ["w_var", {
21858
- "--width": (0, import_runtime89.maybeCssVar)(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21874
+ "--width": (0, import_runtime89.maybeCssVar)(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21859
21875
  }],
21860
21876
  marginRight: "mr3"
21861
21877
  } : {}
@@ -23210,7 +23226,7 @@ function ResponsiveGridItem(props) {
23210
23226
  // src/components/Grid/useResponsiveGrid.ts
23211
23227
  var import_react128 = require("react");
23212
23228
  var import_runtime101 = require("@homebound/truss/runtime");
23213
- var __maybeInc17 = (inc) => {
23229
+ var __maybeInc18 = (inc) => {
23214
23230
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23215
23231
  };
23216
23232
  function useResponsiveGrid(props) {
@@ -23232,7 +23248,7 @@ function useResponsiveGrid(props) {
23232
23248
  }],
23233
23249
  containerType: "ctis",
23234
23250
  gap: ["gap_var", {
23235
- "--gap": (0, import_runtime101.maybeCssVar)(__maybeInc17(gridGap))
23251
+ "--gap": (0, import_runtime101.maybeCssVar)(__maybeInc18(gridGap))
23236
23252
  }]
23237
23253
  };
23238
23254
  }, [minColumnWidth, gap, columns]);
@@ -23357,7 +23373,7 @@ function HbSpinnerProvider({
23357
23373
  // src/components/HomeboundLogo.tsx
23358
23374
  var import_runtime102 = require("@homebound/truss/runtime");
23359
23375
  var import_jsx_runtime180 = require("react/jsx-runtime");
23360
- var __maybeInc18 = (inc) => {
23376
+ var __maybeInc19 = (inc) => {
23361
23377
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23362
23378
  };
23363
23379
  function HomeboundLogo(props) {
@@ -23371,10 +23387,10 @@ function HomeboundLogo(props) {
23371
23387
  "--fill": (0, import_runtime102.maybeCssVar)(fill)
23372
23388
  }],
23373
23389
  width: ["w_var", {
23374
- "--width": (0, import_runtime102.maybeCssVar)(__maybeInc18(width2))
23390
+ "--width": (0, import_runtime102.maybeCssVar)(__maybeInc19(width2))
23375
23391
  }],
23376
23392
  height: ["h_var", {
23377
- "--height": (0, import_runtime102.maybeCssVar)(__maybeInc18(height))
23393
+ "--height": (0, import_runtime102.maybeCssVar)(__maybeInc19(height))
23378
23394
  }]
23379
23395
  }), 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
23396
  }
@@ -23739,7 +23755,7 @@ function useAppNavGroupExpanded(linkGroup) {
23739
23755
  // src/components/AppNav/AppNavGroup.tsx
23740
23756
  var import_runtime106 = require("@homebound/truss/runtime");
23741
23757
  var import_jsx_runtime184 = require("react/jsx-runtime");
23742
- var __maybeInc19 = (inc) => {
23758
+ var __maybeInc20 = (inc) => {
23743
23759
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23744
23760
  };
23745
23761
  function AppNavGroupView(props) {
@@ -23786,7 +23802,7 @@ function AppNavGroupDisclosure(props) {
23786
23802
  overflow: "oh",
23787
23803
  transition: "transitionHeight",
23788
23804
  height: ["h_var", {
23789
- "--height": (0, import_runtime106.maybeCssVar)(__maybeInc19(contentHeight))
23805
+ "--height": (0, import_runtime106.maybeCssVar)(__maybeInc20(contentHeight))
23790
23806
  }]
23791
23807
  }), ...tid.panel, ...!expanded ? {
23792
23808
  inert: "true"
@@ -24519,7 +24535,7 @@ var import_react_aria62 = require("react-aria");
24519
24535
  var import_runtime112 = require("@homebound/truss/runtime");
24520
24536
  var import_jsx_runtime195 = require("react/jsx-runtime");
24521
24537
  var import_react142 = require("react");
24522
- var __maybeInc20 = (inc) => {
24538
+ var __maybeInc21 = (inc) => {
24523
24539
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
24524
24540
  };
24525
24541
  function Stepper(props) {
@@ -24575,7 +24591,7 @@ function Stepper(props) {
24575
24591
  transition: "transition_width_200ms",
24576
24592
  height: "h100",
24577
24593
  width: ["w_var", {
24578
- "--width": (0, import_runtime112.maybeCssVar)(__maybeInc20(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24594
+ "--width": (0, import_runtime112.maybeCssVar)(__maybeInc21(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24579
24595
  }]
24580
24596
  }) }) })
24581
24597
  ] });
@@ -24796,7 +24812,9 @@ var stepperTabStyles = {
24796
24812
  fontSize: "fz_14px",
24797
24813
  lineHeight: "lh_20px",
24798
24814
  overflow: "oh",
24799
- textAlign: "tal"
24815
+ textAlign: "tal",
24816
+ height: "h_48px",
24817
+ transition: "transitionAll"
24800
24818
  },
24801
24819
  hoverStyles: {
24802
24820
  backgroundColor: "bgGray100"
@@ -24821,12 +24839,14 @@ function StepperTabs(props) {
24821
24839
  const {
24822
24840
  steps,
24823
24841
  currentStep,
24824
- onChange
24842
+ onChange,
24843
+ collapsed: forceCollapsed
24825
24844
  } = props;
24826
24845
  const tid = useTestIds(props, "stepperTabs");
24827
24846
  const {
24828
- sm: collapsed
24847
+ sm: isMobile
24829
24848
  } = useBreakpoint();
24849
+ const collapsed = isMobile || !!forceCollapsed;
24830
24850
  const capWidth = steps.length <= 3;
24831
24851
  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
24852
  padding: "p_0",
@@ -25463,7 +25483,7 @@ function useToast() {
25463
25483
  // src/layouts/SideNavLayout/SideNavLayout.tsx
25464
25484
  var import_runtime118 = require("@homebound/truss/runtime");
25465
25485
  var import_jsx_runtime204 = require("react/jsx-runtime");
25466
- var __maybeInc21 = (inc) => {
25486
+ var __maybeInc22 = (inc) => {
25467
25487
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25468
25488
  };
25469
25489
  function SideNavLayout(props) {
@@ -25518,11 +25538,11 @@ function SideNavLayoutContent(props) {
25518
25538
  "--zIndex": (0, import_runtime118.maybeCssVar)(zIndices.sideNav)
25519
25539
  }],
25520
25540
  top: ["top_var", {
25521
- "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25541
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc22(navTop))
25522
25542
  }],
25523
25543
  alignSelf: "asfs",
25524
25544
  height: ["h_var", {
25525
- "--height": (0, import_runtime118.maybeCssVar)(__maybeInc21(railViewportHeight))
25545
+ "--height": (0, import_runtime118.maybeCssVar)(__maybeInc22(railViewportHeight))
25526
25546
  }],
25527
25547
  width: ["w_var", {
25528
25548
  "--width": `${collapsed ? railCollapsedWidthPx : railWidthPx}px`
@@ -25532,7 +25552,7 @@ function SideNavLayoutContent(props) {
25532
25552
  position: "fixed",
25533
25553
  left: "left0",
25534
25554
  top: ["top_var", {
25535
- "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25555
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc22(navTop))
25536
25556
  }],
25537
25557
  bottom: "bottom0",
25538
25558
  zIndex: ["z_var", {
@@ -25577,7 +25597,7 @@ function SideNavLayoutContent(props) {
25577
25597
  // src/layouts/EnvironmentBannerLayout/EnvironmentBannerLayout.tsx
25578
25598
  var import_runtime119 = require("@homebound/truss/runtime");
25579
25599
  var import_jsx_runtime205 = require("react/jsx-runtime");
25580
- var __maybeInc22 = (inc) => {
25600
+ var __maybeInc23 = (inc) => {
25581
25601
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25582
25602
  };
25583
25603
  function EnvironmentBannerLayout(props) {
@@ -25611,7 +25631,7 @@ function EnvironmentBannerLayout(props) {
25611
25631
  "--zIndex": (0, import_runtime119.maybeCssVar)(zIndices.environmentBanner)
25612
25632
  }],
25613
25633
  width: ["w_var", {
25614
- "--width": (0, import_runtime119.maybeCssVar)(__maybeInc22(innerWidth))
25634
+ "--width": (0, import_runtime119.maybeCssVar)(__maybeInc23(innerWidth))
25615
25635
  }]
25616
25636
  }), ...tid.bannerSticky, children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(EnvironmentBanner, { ...environmentBanner, ...tid.environmentBanner }) }) }),
25617
25637
  children
@@ -25742,7 +25762,7 @@ function useNavbarLayoutHeight() {
25742
25762
 
25743
25763
  // src/layouts/NavbarLayout/NavbarLayout.tsx
25744
25764
  var import_jsx_runtime207 = require("react/jsx-runtime");
25745
- var __maybeInc23 = (inc) => {
25765
+ var __maybeInc24 = (inc) => {
25746
25766
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25747
25767
  };
25748
25768
  function NavbarLayout(props) {
@@ -25773,7 +25793,7 @@ function NavbarLayout(props) {
25773
25793
  "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25774
25794
  }],
25775
25795
  width: ["w_var", {
25776
- "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25796
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc24(innerWidth))
25777
25797
  }]
25778
25798
  }
25779
25799
  ) : (
@@ -25785,7 +25805,7 @@ function NavbarLayout(props) {
25785
25805
  "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25786
25806
  }],
25787
25807
  width: ["w_var", {
25788
- "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25808
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc24(innerWidth))
25789
25809
  }],
25790
25810
  transition: "transitionTop"
25791
25811
  }
@@ -25886,7 +25906,7 @@ function useBannerAndNavbarHeight() {
25886
25906
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
25887
25907
  var import_runtime122 = require("@homebound/truss/runtime");
25888
25908
  var import_jsx_runtime210 = require("react/jsx-runtime");
25889
- var __maybeInc24 = (inc) => {
25909
+ var __maybeInc25 = (inc) => {
25890
25910
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25891
25911
  };
25892
25912
  function PageHeaderLayout(props) {
@@ -25916,10 +25936,10 @@ function PageHeaderLayout(props) {
25916
25936
  const innerCss = autoHideState === "static" ? {
25917
25937
  position: "sticky",
25918
25938
  left: ["left_var", {
25919
- "--left": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerLeft))
25939
+ "--left": (0, import_runtime122.maybeCssVar)(__maybeInc25(headerLeft))
25920
25940
  }],
25921
25941
  width: ["w_var", {
25922
- "--width": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerWidth))
25942
+ "--width": (0, import_runtime122.maybeCssVar)(__maybeInc25(headerWidth))
25923
25943
  }],
25924
25944
  zIndex: ["z_var", {
25925
25945
  "--zIndex": (0, import_runtime122.maybeCssVar)(zIndices.pageStickyHeader)
@@ -25927,10 +25947,10 @@ function PageHeaderLayout(props) {
25927
25947
  } : {
25928
25948
  position: "fixed",
25929
25949
  left: ["left_var", {
25930
- "--left": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerLeft))
25950
+ "--left": (0, import_runtime122.maybeCssVar)(__maybeInc25(headerLeft))
25931
25951
  }],
25932
25952
  width: ["w_var", {
25933
- "--width": (0, import_runtime122.maybeCssVar)(__maybeInc24(headerWidth))
25953
+ "--width": (0, import_runtime122.maybeCssVar)(__maybeInc25(headerWidth))
25934
25954
  }],
25935
25955
  zIndex: ["z_var", {
25936
25956
  "--zIndex": (0, import_runtime122.maybeCssVar)(zIndices.pageStickyHeader)
@@ -25955,6 +25975,166 @@ function PageHeaderLayout(props) {
25955
25975
  /* @__PURE__ */ (0, import_jsx_runtime210.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
25956
25976
  ] }) });
25957
25977
  }
25978
+
25979
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
25980
+ var import_react153 = require("react");
25981
+
25982
+ // src/components/Headers/WorkflowHeader.tsx
25983
+ var import_jsx_runtime211 = require("react/jsx-runtime");
25984
+ function WorkflowHeader(props) {
25985
+ const { stepperTabs, ...otherProps } = props;
25986
+ const tid = useTestIds(otherProps, "header");
25987
+ return /* @__PURE__ */ (0, import_jsx_runtime211.jsx)(BaseHeader, { ...otherProps, bottomSlot: /* @__PURE__ */ (0, import_jsx_runtime211.jsx)(StepperTabs, { ...stepperTabs, ...tid.stepperTabs }) });
25988
+ }
25989
+
25990
+ // src/layouts/WorkflowLayout/WorkflowActions.tsx
25991
+ var import_jsx_runtime212 = require("react/jsx-runtime");
25992
+ function WorkflowActions(props) {
25993
+ const {
25994
+ isFirstStep,
25995
+ isLastStep,
25996
+ isMobile,
25997
+ onBack,
25998
+ onCancel,
25999
+ onSaveAndExit,
26000
+ completeLabel,
26001
+ onComplete,
26002
+ onContinue
26003
+ } = props;
26004
+ return /* @__PURE__ */ (0, import_jsx_runtime212.jsxs)("div", { className: "df aic jcsb sm_w100", children: [
26005
+ /* @__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 })) }),
26006
+ /* @__PURE__ */ (0, import_jsx_runtime212.jsxs)("div", { className: "df aic gap1", children: [
26007
+ /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
26008
+ onSaveAndExit && /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
26009
+ isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: completeLabel, variant: "primary", onClick: onComplete }) : /* @__PURE__ */ (0, import_jsx_runtime212.jsx)(Button, { label: "Continue", variant: "primary", onClick: onContinue })
26010
+ ] })
26011
+ ] });
26012
+ }
26013
+
26014
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
26015
+ var import_runtime123 = require("@homebound/truss/runtime");
26016
+ var import_jsx_runtime213 = require("react/jsx-runtime");
26017
+ var __maybeInc26 = (inc) => {
26018
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
26019
+ };
26020
+ function WorkflowLayout(props) {
26021
+ const {
26022
+ children
26023
+ } = props;
26024
+ const {
26025
+ stepperTabs,
26026
+ onCancel,
26027
+ completeLabel,
26028
+ onComplete,
26029
+ onSaveAndExit,
26030
+ ...headerProps
26031
+ } = props.workflowHeader;
26032
+ const tid = useTestIds(props, "workflowLayout");
26033
+ const {
26034
+ sm: isMobile
26035
+ } = useBreakpoint();
26036
+ const bannerAndNavbarHeight = useBannerAndNavbarHeight();
26037
+ const bannerAndNavbarHeightRef = (0, import_react153.useRef)(bannerAndNavbarHeight);
26038
+ bannerAndNavbarHeightRef.current = bannerAndNavbarHeight;
26039
+ const getBannerAndNavbarHeight = (0, import_react153.useCallback)(() => bannerAndNavbarHeightRef.current, []);
26040
+ const headerMetricsRef = (0, import_react153.useRef)(null);
26041
+ const spacerRef = (0, import_react153.useRef)(null);
26042
+ const headerHeight = useMeasuredHeight(headerMetricsRef, true);
26043
+ const {
26044
+ state: scrollState
26045
+ } = useAutoHideOnScroll(spacerRef, true, getBannerAndNavbarHeight);
26046
+ const collapsed = scrollState === "hidden";
26047
+ const headerWidth = documentScrollChromeWidth();
26048
+ const outerTop = bannerAndNavbarChromeTop();
26049
+ const cssVars = headerHeight > 0 ? {
26050
+ [beamPageHeaderLayoutHeightVar]: `${headerHeight}px`
26051
+ } : void 0;
26052
+ const {
26053
+ steps,
26054
+ currentStep,
26055
+ onChange
26056
+ } = stepperTabs;
26057
+ const currentIndex = steps.findIndex((step) => step.value === currentStep);
26058
+ const isFirstStep = currentIndex <= 0;
26059
+ const isLastStep = currentIndex === steps.length - 1;
26060
+ const buttons = /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => onChange(steps[currentIndex - 1].value), onCancel, onSaveAndExit, completeLabel, onComplete, onContinue: () => onChange(steps[currentIndex + 1].value) });
26061
+ const showFooter = isMobile;
26062
+ (0, import_react153.useLayoutEffect)(() => {
26063
+ const root = document.documentElement;
26064
+ const previous = root.style.getPropertyValue(beamWorkflowLayoutFooterHeightVar);
26065
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, showFooter ? `${mobileFooterHeightPx}px` : "0px");
26066
+ return () => {
26067
+ if (previous) {
26068
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, previous);
26069
+ } else {
26070
+ root.style.removeProperty(beamWorkflowLayoutFooterHeightVar);
26071
+ }
26072
+ };
26073
+ }, [showFooter]);
26074
+ const headerEl = /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(WorkflowHeader, { ...headerProps, rightSlot: isMobile ? void 0 : buttons, stepperTabs: {
26075
+ ...stepperTabs,
26076
+ collapsed
26077
+ } });
26078
+ return /* @__PURE__ */ (0, import_jsx_runtime213.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime213.jsxs)("div", { ...(0, import_runtime123.mergeProps)(void 0, cssVars, {
26079
+ display: "df",
26080
+ flexDirection: "fdc",
26081
+ width: "w100"
26082
+ }), ...tid, children: [
26083
+ /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ref: spacerRef, ...(0, import_runtime123.mergeProps)(void 0, {
26084
+ height: headerHeight
26085
+ }, {
26086
+ flexShrink: "fs0",
26087
+ width: "w100"
26088
+ }), ...tid.spacer, children: /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime123.trussProps)({
26089
+ position: "fixed",
26090
+ width: ["w_var", {
26091
+ "--width": (0, import_runtime123.maybeCssVar)(__maybeInc26(headerWidth))
26092
+ }],
26093
+ zIndex: ["z_var", {
26094
+ "--zIndex": (0, import_runtime123.maybeCssVar)(zIndices.pageStickyHeader)
26095
+ }],
26096
+ top: ["top_var", {
26097
+ "--top": (0, import_runtime123.maybeCssVar)(__maybeInc26(outerTop))
26098
+ }]
26099
+ }), ...tid.header, children: headerEl }) }),
26100
+ /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children }),
26101
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ...(0, import_runtime123.trussProps)({
26102
+ flexShrink: "fs0",
26103
+ width: "w100",
26104
+ height: ["h_var", {
26105
+ "--height": `${mobileFooterHeightPx}px`
26106
+ }]
26107
+ }) }),
26108
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime213.jsx)("div", { ...(0, import_runtime123.trussProps)({
26109
+ position: "fixed",
26110
+ bottom: "bottom0",
26111
+ width: ["w_var", {
26112
+ "--width": (0, import_runtime123.maybeCssVar)(__maybeInc26(headerWidth))
26113
+ }],
26114
+ height: ["h_var", {
26115
+ "--height": `${mobileFooterHeightPx}px`
26116
+ }],
26117
+ zIndex: ["z_var", {
26118
+ "--zIndex": (0, import_runtime123.maybeCssVar)(zIndices.pageStickyFooter)
26119
+ }],
26120
+ display: "df",
26121
+ alignItems: "aic",
26122
+ justifyContent: "jcfe",
26123
+ gap: "gap1",
26124
+ paddingLeft: "pl3",
26125
+ paddingRight: "pr3",
26126
+ borderTopStyle: "bts_solid",
26127
+ borderTopWidth: "btw_1px",
26128
+ borderColor: ["bc_var", {
26129
+ "--borderColor": "var(--b-surface-separator)"
26130
+ }],
26131
+ backgroundColor: ["bgColor_var", {
26132
+ "--backgroundColor": "var(--b-surface)"
26133
+ }]
26134
+ }), ...tid.footer, children: buttons })
26135
+ ] }) });
26136
+ }
26137
+ var mobileFooterHeightPx = 80;
25958
26138
  // Annotate the CommonJS export names for ESM import in node:
25959
26139
  0 && (module.exports = {
25960
26140
  ASC,
@@ -26123,6 +26303,7 @@ function PageHeaderLayout(props) {
26123
26303
  Tooltip,
26124
26304
  TreeSelectField,
26125
26305
  ViewToggleButton,
26306
+ WorkflowLayout,
26126
26307
  actionColumn,
26127
26308
  applyRowFn,
26128
26309
  assignDefaultColumnIds,
@@ -26134,6 +26315,7 @@ function PageHeaderLayout(props) {
26134
26315
  beamPageHeaderLayoutHeightVar,
26135
26316
  beamSideNavLayoutWidthVar,
26136
26317
  beamTableActionsHeightVar,
26318
+ beamWorkflowLayoutFooterHeightVar,
26137
26319
  booleanFilter,
26138
26320
  boundCheckboxField,
26139
26321
  boundCheckboxGroupField,
@@ -26196,6 +26378,7 @@ function PageHeaderLayout(props) {
26196
26378
  getColumnBorderCss,
26197
26379
  getDateFormat,
26198
26380
  getFirstOrLastCellCss,
26381
+ getFloatingBottomOffset,
26199
26382
  getJustification,
26200
26383
  getNavLinkStyles,
26201
26384
  getTableRefWidthStyles,