@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/index.js CHANGED
@@ -3870,6 +3870,10 @@ var CssBuilder = class _CssBuilder {
3870
3870
  get transitionTop() {
3871
3871
  return this.add("transition", "top 200ms cubic-bezier(0.4, 0, 0.2, 1)");
3872
3872
  }
3873
+ /** Sets `transition: "all 200ms cubic-bezier(0.4, 0, 0.2, 1)"`. */
3874
+ get transitionAll() {
3875
+ return this.add("transition", "all 200ms cubic-bezier(0.4, 0, 0.2, 1)");
3876
+ }
3873
3877
  // buttonBase
3874
3878
  /** 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)"`. */
3875
3879
  get buttonBase() {
@@ -5995,6 +5999,7 @@ var beamLayoutViewportWidthVar = "--beam-layout-viewport-width";
5995
5999
  var beamLayoutViewportHeightVar = "--beam-layout-viewport-height";
5996
6000
  var beamSideNavLayoutWidthVar = "--beam-side-nav-layout-width";
5997
6001
  var beamTableActionsHeightVar = "--beam-table-actions-height";
6002
+ var beamWorkflowLayoutFooterHeightVar = "--beam-workflow-layout-footer-height";
5998
6003
  function documentScrollChromeLeft() {
5999
6004
  return `var(${beamSideNavLayoutWidthVar}, 0px)`;
6000
6005
  }
@@ -6010,6 +6015,9 @@ function stickyNavAndHeaderOffset(basePx = 0) {
6010
6015
  function stickyTableHeaderOffset(basePx = 0) {
6011
6016
  return `calc(${basePx}px + var(${beamEnvironmentBannerLayoutHeightVar}, 0px) + var(${beamNavbarLayoutHeightVar}, 0px) + var(${beamPageHeaderLayoutHeightVar}, 0px) + var(${beamTableActionsHeightVar}, 0px))`;
6012
6017
  }
6018
+ function getFloatingBottomOffset(basePx = 0) {
6019
+ return `calc(${basePx}px + var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
6020
+ }
6013
6021
 
6014
6022
  // src/utils/zIndices.ts
6015
6023
  var zIndices = {
@@ -6026,6 +6034,8 @@ var zIndices = {
6026
6034
  superDrawerScrim: 55,
6027
6035
  modalUnderlay: 60,
6028
6036
  pageStickyHeader: 70,
6037
+ // Sticky mobile action footer (WorkflowLayout) — same tier as pageStickyHeader; header and footer never overlap on screen.
6038
+ pageStickyFooter: 70,
6029
6039
  dragHandle: 80,
6030
6040
  // Side-nav layer. Mobile rail overlays page content when expanded; sits below
6031
6041
  // snackbar so toasts still land on top.
@@ -16316,6 +16326,9 @@ import { createContext as createContext6, useCallback as useCallback20, useConte
16316
16326
  import { useCallback as useCallback19, useEffect as useEffect19, useState as useState30 } from "react";
16317
16327
  import { trussProps as trussProps55, maybeCssVar as maybeCssVar30 } from "@homebound/truss/runtime";
16318
16328
  import { jsx as jsx91 } from "react/jsx-runtime";
16329
+ var __maybeInc10 = (inc) => {
16330
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16331
+ };
16319
16332
  function DocumentScrollToTopButton({
16320
16333
  viewportHeight
16321
16334
  }) {
@@ -16344,7 +16357,7 @@ function DocumentScrollToTopButton({
16344
16357
  ...{
16345
16358
  position: "fixed",
16346
16359
  bottom: ["bottom_var", {
16347
- "--bottom": `${scrollToTopOffsetPx}px`
16360
+ "--bottom": maybeCssVar30(__maybeInc10(getFloatingBottomOffset(scrollToTopOffsetPx)))
16348
16361
  }],
16349
16362
  right: ["right_var", {
16350
16363
  "--right": `${scrollToTopOffsetPx}px`
@@ -16432,7 +16445,7 @@ import { useMemo as useMemo27 } from "react";
16432
16445
  import { Link as Link4 } from "react-router-dom";
16433
16446
  import { trussProps as trussProps56, mergeProps as mergeProps20, maybeCssVar as maybeCssVar31 } from "@homebound/truss/runtime";
16434
16447
  import { jsx as jsx93, jsxs as jsxs50 } from "react/jsx-runtime";
16435
- var __maybeInc10 = (inc) => {
16448
+ var __maybeInc11 = (inc) => {
16436
16449
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16437
16450
  };
16438
16451
  function TableCard(props) {
@@ -16563,7 +16576,7 @@ function TableCardView(props) {
16563
16576
  borderRadius: "br4",
16564
16577
  backgroundColor: "bgBlue500",
16565
16578
  width: ["w_var", {
16566
- "--width": maybeCssVar31(__maybeInc10(`${progressValue}%`))
16579
+ "--width": maybeCssVar31(__maybeInc11(`${progressValue}%`))
16567
16580
  }]
16568
16581
  }) }) }),
16569
16582
  /* @__PURE__ */ jsxs50("span", { ...tid.progressValue, children: [
@@ -16602,7 +16615,7 @@ function GridTableEmptyState(props) {
16602
16615
  import { trussProps as trussProps57, mergeProps as mergeProps21, maybeCssVar as maybeCssVar32 } from "@homebound/truss/runtime";
16603
16616
  import { jsx as jsx95, jsxs as jsxs52 } from "react/jsx-runtime";
16604
16617
  import { createElement as createElement2 } from "react";
16605
- var __maybeInc11 = (inc) => {
16618
+ var __maybeInc12 = (inc) => {
16606
16619
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
16607
16620
  };
16608
16621
  var runningInJest = false;
@@ -16932,7 +16945,7 @@ function renderDiv(style, id, columns, visibleDataRows, keptSelectedRows, pinned
16932
16945
  position: "sticky",
16933
16946
  transition: "transitionTop",
16934
16947
  top: ["top_var", {
16935
- "--top": maybeCssVar32(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
16948
+ "--top": maybeCssVar32(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
16936
16949
  }],
16937
16950
  zIndex: ["z_var", {
16938
16951
  "--zIndex": maybeCssVar32(zIndices.tableStickyHeader)
@@ -16976,7 +16989,7 @@ function renderTable(style, id, columns, visibleDataRows, keptSelectedRows, pinn
16976
16989
  position: "sticky",
16977
16990
  transition: "transitionTop",
16978
16991
  top: ["top_var", {
16979
- "--top": maybeCssVar32(__maybeInc11(stickyTableHeaderOffset(stickyOffset)))
16992
+ "--top": maybeCssVar32(__maybeInc12(stickyTableHeaderOffset(stickyOffset)))
16980
16993
  }],
16981
16994
  zIndex: ["z_var", {
16982
16995
  "--zIndex": maybeCssVar32(zIndices.tableStickyHeader)
@@ -17320,7 +17333,7 @@ import { useCallback as useCallback21, useEffect as useEffect21, useMemo as useM
17320
17333
  import { useFocusRing as useFocusRing11 } from "react-aria";
17321
17334
  import { trussProps as trussProps60, maybeCssVar as maybeCssVar33 } from "@homebound/truss/runtime";
17322
17335
  import { jsx as jsx98, jsxs as jsxs54 } from "react/jsx-runtime";
17323
- var __maybeInc12 = (inc) => {
17336
+ var __maybeInc13 = (inc) => {
17324
17337
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
17325
17338
  };
17326
17339
  function Accordion(props) {
@@ -17467,7 +17480,7 @@ function Accordion(props) {
17467
17480
  /* @__PURE__ */ jsx98("div", { ...tid.details, id, "aria-hidden": !expanded, ...trussProps60({
17468
17481
  overflow: "oh",
17469
17482
  height: ["h_var", {
17470
- "--height": maybeCssVar33(__maybeInc12(contentHeight))
17483
+ "--height": maybeCssVar33(__maybeInc13(contentHeight))
17471
17484
  }],
17472
17485
  transition: "transition_height_250ms_ease_in_out"
17473
17486
  }), children: expanded && /* @__PURE__ */ jsx98("div", { ...trussProps60({
@@ -18979,7 +18992,7 @@ function BoundTreeSelectField(props) {
18979
18992
  import { Children, cloneElement } from "react";
18980
18993
  import { trussProps as trussProps66, maybeCssVar as maybeCssVar37 } from "@homebound/truss/runtime";
18981
18994
  import { jsx as jsx127 } from "react/jsx-runtime";
18982
- var __maybeInc13 = (inc) => {
18995
+ var __maybeInc14 = (inc) => {
18983
18996
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
18984
18997
  };
18985
18998
  function FormLines(props) {
@@ -19017,13 +19030,13 @@ function FormLines(props) {
19017
19030
  display: "df",
19018
19031
  flexDirection: "fdc",
19019
19032
  gap: ["gap_var", {
19020
- "--gap": maybeCssVar37(__maybeInc13(gap))
19033
+ "--gap": maybeCssVar37(__maybeInc14(gap))
19021
19034
  }],
19022
19035
  paddingBottom: ["pb_var", {
19023
- "--paddingBottom": maybeCssVar37(__maybeInc13(gap))
19036
+ "--paddingBottom": maybeCssVar37(__maybeInc14(gap))
19024
19037
  }],
19025
19038
  width: ["w_var", {
19026
- "--width": maybeCssVar37(__maybeInc13(sizes[width2]))
19039
+ "--width": maybeCssVar37(__maybeInc14(sizes[width2]))
19027
19040
  }]
19028
19041
  }), children: Children.map(children, (child) => {
19029
19042
  if (child && typeof child === "object" && "type" in child && child.type.isFormHeading) {
@@ -19903,7 +19916,7 @@ function useActiveSection(sectionsWithRefs) {
19903
19916
  // src/components/Layout/FullBleed.tsx
19904
19917
  import { mergeProps as mergeProps23, maybeCssVar as maybeCssVar41 } from "@homebound/truss/runtime";
19905
19918
  import { cloneElement as cloneElement3 } from "react";
19906
- var __maybeInc14 = (inc) => {
19919
+ var __maybeInc15 = (inc) => {
19907
19920
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
19908
19921
  };
19909
19922
  function FullBleed({
@@ -19934,17 +19947,17 @@ function FullBleed({
19934
19947
  // inverts that padding with negative margins before re-applying it to the child.
19935
19948
  {
19936
19949
  marginLeft: ["ml_var", {
19937
- "--marginLeft": maybeCssVar41(__maybeInc14(invertSpacing(paddingLeft)))
19950
+ "--marginLeft": maybeCssVar41(__maybeInc15(invertSpacing(paddingLeft)))
19938
19951
  }],
19939
19952
  marginRight: ["mr_var", {
19940
- "--marginRight": maybeCssVar41(__maybeInc14(invertSpacing(paddingRight)))
19953
+ "--marginRight": maybeCssVar41(__maybeInc15(invertSpacing(paddingRight)))
19941
19954
  }],
19942
19955
  ...!omitPadding ? {
19943
19956
  paddingLeft: ["pl_var", {
19944
- "--paddingLeft": maybeCssVar41(__maybeInc14(paddingLeft))
19957
+ "--paddingLeft": maybeCssVar41(__maybeInc15(paddingLeft))
19945
19958
  }],
19946
19959
  paddingRight: ["pr_var", {
19947
- "--paddingRight": maybeCssVar41(__maybeInc14(paddingRight))
19960
+ "--paddingRight": maybeCssVar41(__maybeInc15(paddingRight))
19948
19961
  }]
19949
19962
  } : {}
19950
19963
  }
@@ -21114,7 +21127,7 @@ function parseStoredTableView(raw) {
21114
21127
  // src/components/Layout/GridTableLayout/GridTableLayout.tsx
21115
21128
  import { trussProps as trussProps80, maybeCssVar as maybeCssVar44 } from "@homebound/truss/runtime";
21116
21129
  import { Fragment as Fragment36, jsx as jsx160, jsxs as jsxs77 } from "react/jsx-runtime";
21117
- var __maybeInc15 = (inc) => {
21130
+ var __maybeInc16 = (inc) => {
21118
21131
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21119
21132
  };
21120
21133
  function GridTableLayoutComponent(props) {
@@ -21173,13 +21186,13 @@ function GridTableLayoutComponent(props) {
21173
21186
  transition: "transitionTop",
21174
21187
  position: "sticky",
21175
21188
  top: ["top_var", {
21176
- "--top": maybeCssVar44(__maybeInc15(stickyNavAndHeaderOffset()))
21189
+ "--top": maybeCssVar44(__maybeInc16(stickyNavAndHeaderOffset()))
21177
21190
  }],
21178
21191
  left: ["left_var", {
21179
- "--left": maybeCssVar44(__maybeInc15(documentScrollChromeLeft()))
21192
+ "--left": maybeCssVar44(__maybeInc16(documentScrollChromeLeft()))
21180
21193
  }],
21181
21194
  width: ["w_var", {
21182
- "--width": maybeCssVar44(__maybeInc15(documentScrollChromeWidth()))
21195
+ "--width": maybeCssVar44(__maybeInc16(documentScrollChromeWidth()))
21183
21196
  }],
21184
21197
  zIndex: ["z_var", {
21185
21198
  "--zIndex": maybeCssVar44(zIndices.tableActions)
@@ -21352,7 +21365,7 @@ import { AnimatePresence as AnimatePresence3, motion as motion3 } from "framer-m
21352
21365
  import { useEffect as useEffect29 } from "react";
21353
21366
  import { trussProps as trussProps81, maybeCssVar as maybeCssVar45 } from "@homebound/truss/runtime";
21354
21367
  import { Fragment as Fragment37, jsx as jsx163, jsxs as jsxs78 } from "react/jsx-runtime";
21355
- var __maybeInc16 = (inc) => {
21368
+ var __maybeInc17 = (inc) => {
21356
21369
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
21357
21370
  };
21358
21371
  function RightPaneLayout(props) {
@@ -21373,7 +21386,7 @@ function RightPaneLayout(props) {
21373
21386
  /* @__PURE__ */ jsx163("div", { ...trussProps81({
21374
21387
  ...{
21375
21388
  width: ["w_var", {
21376
- "--width": maybeCssVar45(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21389
+ "--width": maybeCssVar45(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21377
21390
  }],
21378
21391
  transition: "transition_width_2s_linear",
21379
21392
  height: "h100",
@@ -21389,7 +21402,7 @@ function RightPaneLayout(props) {
21389
21402
  ...{
21390
21403
  ...!!defaultPaneContent ? {
21391
21404
  width: ["w_var", {
21392
- "--width": maybeCssVar45(__maybeInc16(`calc(100% - ${paneWidth + 24}px)`))
21405
+ "--width": maybeCssVar45(__maybeInc17(`calc(100% - ${paneWidth + 24}px)`))
21393
21406
  }],
21394
21407
  marginRight: "mr3"
21395
21408
  } : {}
@@ -22744,7 +22757,7 @@ function ResponsiveGridItem(props) {
22744
22757
  // src/components/Grid/useResponsiveGrid.ts
22745
22758
  import { useMemo as useMemo47 } from "react";
22746
22759
  import { maybeCssVar as maybeCssVar48 } from "@homebound/truss/runtime";
22747
- var __maybeInc17 = (inc) => {
22760
+ var __maybeInc18 = (inc) => {
22748
22761
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
22749
22762
  };
22750
22763
  function useResponsiveGrid(props) {
@@ -22766,7 +22779,7 @@ function useResponsiveGrid(props) {
22766
22779
  }],
22767
22780
  containerType: "ctis",
22768
22781
  gap: ["gap_var", {
22769
- "--gap": maybeCssVar48(__maybeInc17(gridGap))
22782
+ "--gap": maybeCssVar48(__maybeInc18(gridGap))
22770
22783
  }]
22771
22784
  };
22772
22785
  }, [minColumnWidth, gap, columns]);
@@ -22891,7 +22904,7 @@ function HbSpinnerProvider({
22891
22904
  // src/components/HomeboundLogo.tsx
22892
22905
  import { trussProps as trussProps92, maybeCssVar as maybeCssVar49 } from "@homebound/truss/runtime";
22893
22906
  import { jsx as jsx180 } from "react/jsx-runtime";
22894
- var __maybeInc18 = (inc) => {
22907
+ var __maybeInc19 = (inc) => {
22895
22908
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
22896
22909
  };
22897
22910
  function HomeboundLogo(props) {
@@ -22905,10 +22918,10 @@ function HomeboundLogo(props) {
22905
22918
  "--fill": maybeCssVar49(fill)
22906
22919
  }],
22907
22920
  width: ["w_var", {
22908
- "--width": maybeCssVar49(__maybeInc18(width2))
22921
+ "--width": maybeCssVar49(__maybeInc19(width2))
22909
22922
  }],
22910
22923
  height: ["h_var", {
22911
- "--height": maybeCssVar49(__maybeInc18(height))
22924
+ "--height": maybeCssVar49(__maybeInc19(height))
22912
22925
  }]
22913
22926
  }), children: /* @__PURE__ */ jsx180("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" }) });
22914
22927
  }
@@ -23273,7 +23286,7 @@ function useAppNavGroupExpanded(linkGroup) {
23273
23286
  // src/components/AppNav/AppNavGroup.tsx
23274
23287
  import { trussProps as trussProps96, maybeCssVar as maybeCssVar51 } from "@homebound/truss/runtime";
23275
23288
  import { Fragment as Fragment41, jsx as jsx184, jsxs as jsxs90 } from "react/jsx-runtime";
23276
- var __maybeInc19 = (inc) => {
23289
+ var __maybeInc20 = (inc) => {
23277
23290
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
23278
23291
  };
23279
23292
  function AppNavGroupView(props) {
@@ -23320,7 +23333,7 @@ function AppNavGroupDisclosure(props) {
23320
23333
  overflow: "oh",
23321
23334
  transition: "transitionHeight",
23322
23335
  height: ["h_var", {
23323
- "--height": maybeCssVar51(__maybeInc19(contentHeight))
23336
+ "--height": maybeCssVar51(__maybeInc20(contentHeight))
23324
23337
  }]
23325
23338
  }), ...tid.panel, ...!expanded ? {
23326
23339
  inert: "true"
@@ -24061,7 +24074,7 @@ import { useButton as useButton12, useFocusRing as useFocusRing17, useHover as u
24061
24074
  import { trussProps as trussProps102, maybeCssVar as maybeCssVar54 } from "@homebound/truss/runtime";
24062
24075
  import { jsx as jsx195, jsxs as jsxs97 } from "react/jsx-runtime";
24063
24076
  import { createElement as createElement5 } from "react";
24064
- var __maybeInc20 = (inc) => {
24077
+ var __maybeInc21 = (inc) => {
24065
24078
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
24066
24079
  };
24067
24080
  function Stepper(props) {
@@ -24117,7 +24130,7 @@ function Stepper(props) {
24117
24130
  transition: "transition_width_200ms",
24118
24131
  height: "h100",
24119
24132
  width: ["w_var", {
24120
- "--width": maybeCssVar54(__maybeInc20(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24133
+ "--width": maybeCssVar54(__maybeInc21(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24121
24134
  }]
24122
24135
  }) }) })
24123
24136
  ] });
@@ -24338,7 +24351,9 @@ var stepperTabStyles = {
24338
24351
  fontSize: "fz_14px",
24339
24352
  lineHeight: "lh_20px",
24340
24353
  overflow: "oh",
24341
- textAlign: "tal"
24354
+ textAlign: "tal",
24355
+ height: "h_48px",
24356
+ transition: "transitionAll"
24342
24357
  },
24343
24358
  hoverStyles: {
24344
24359
  backgroundColor: "bgGray100"
@@ -24363,12 +24378,14 @@ function StepperTabs(props) {
24363
24378
  const {
24364
24379
  steps,
24365
24380
  currentStep,
24366
- onChange
24381
+ onChange,
24382
+ collapsed: forceCollapsed
24367
24383
  } = props;
24368
24384
  const tid = useTestIds(props, "stepperTabs");
24369
24385
  const {
24370
- sm: collapsed
24386
+ sm: isMobile
24371
24387
  } = useBreakpoint();
24388
+ const collapsed = isMobile || !!forceCollapsed;
24372
24389
  const capWidth = steps.length <= 3;
24373
24390
  return /* @__PURE__ */ jsx197("nav", { "aria-label": "steps", className: "w100", ...tid, children: /* @__PURE__ */ jsx197("ol", { ...trussProps104({
24374
24391
  padding: "p_0",
@@ -25005,7 +25022,7 @@ function useToast() {
25005
25022
  // src/layouts/SideNavLayout/SideNavLayout.tsx
25006
25023
  import { trussProps as trussProps107, mergeProps as mergeProps33, maybeCssVar as maybeCssVar57 } from "@homebound/truss/runtime";
25007
25024
  import { jsx as jsx204, jsxs as jsxs104 } from "react/jsx-runtime";
25008
- var __maybeInc21 = (inc) => {
25025
+ var __maybeInc22 = (inc) => {
25009
25026
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25010
25027
  };
25011
25028
  function SideNavLayout(props) {
@@ -25060,11 +25077,11 @@ function SideNavLayoutContent(props) {
25060
25077
  "--zIndex": maybeCssVar57(zIndices.sideNav)
25061
25078
  }],
25062
25079
  top: ["top_var", {
25063
- "--top": maybeCssVar57(__maybeInc21(navTop))
25080
+ "--top": maybeCssVar57(__maybeInc22(navTop))
25064
25081
  }],
25065
25082
  alignSelf: "asfs",
25066
25083
  height: ["h_var", {
25067
- "--height": maybeCssVar57(__maybeInc21(railViewportHeight))
25084
+ "--height": maybeCssVar57(__maybeInc22(railViewportHeight))
25068
25085
  }],
25069
25086
  width: ["w_var", {
25070
25087
  "--width": `${collapsed ? railCollapsedWidthPx : railWidthPx}px`
@@ -25074,7 +25091,7 @@ function SideNavLayoutContent(props) {
25074
25091
  position: "fixed",
25075
25092
  left: "left0",
25076
25093
  top: ["top_var", {
25077
- "--top": maybeCssVar57(__maybeInc21(navTop))
25094
+ "--top": maybeCssVar57(__maybeInc22(navTop))
25078
25095
  }],
25079
25096
  bottom: "bottom0",
25080
25097
  zIndex: ["z_var", {
@@ -25119,7 +25136,7 @@ function SideNavLayoutContent(props) {
25119
25136
  // src/layouts/EnvironmentBannerLayout/EnvironmentBannerLayout.tsx
25120
25137
  import { trussProps as trussProps108, mergeProps as mergeProps34, maybeCssVar as maybeCssVar58 } from "@homebound/truss/runtime";
25121
25138
  import { jsx as jsx205, jsxs as jsxs105 } from "react/jsx-runtime";
25122
- var __maybeInc22 = (inc) => {
25139
+ var __maybeInc23 = (inc) => {
25123
25140
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25124
25141
  };
25125
25142
  function EnvironmentBannerLayout(props) {
@@ -25153,7 +25170,7 @@ function EnvironmentBannerLayout(props) {
25153
25170
  "--zIndex": maybeCssVar58(zIndices.environmentBanner)
25154
25171
  }],
25155
25172
  width: ["w_var", {
25156
- "--width": maybeCssVar58(__maybeInc22(innerWidth))
25173
+ "--width": maybeCssVar58(__maybeInc23(innerWidth))
25157
25174
  }]
25158
25175
  }), ...tid.bannerSticky, children: /* @__PURE__ */ jsx205(EnvironmentBanner, { ...environmentBanner, ...tid.environmentBanner }) }) }),
25159
25176
  children
@@ -25284,7 +25301,7 @@ function useNavbarLayoutHeight() {
25284
25301
 
25285
25302
  // src/layouts/NavbarLayout/NavbarLayout.tsx
25286
25303
  import { jsx as jsx207, jsxs as jsxs106 } from "react/jsx-runtime";
25287
- var __maybeInc23 = (inc) => {
25304
+ var __maybeInc24 = (inc) => {
25288
25305
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25289
25306
  };
25290
25307
  function NavbarLayout(props) {
@@ -25315,7 +25332,7 @@ function NavbarLayout(props) {
25315
25332
  "--zIndex": maybeCssVar59(zIndices.navbar)
25316
25333
  }],
25317
25334
  width: ["w_var", {
25318
- "--width": maybeCssVar59(__maybeInc23(innerWidth))
25335
+ "--width": maybeCssVar59(__maybeInc24(innerWidth))
25319
25336
  }]
25320
25337
  }
25321
25338
  ) : (
@@ -25327,7 +25344,7 @@ function NavbarLayout(props) {
25327
25344
  "--zIndex": maybeCssVar59(zIndices.navbar)
25328
25345
  }],
25329
25346
  width: ["w_var", {
25330
- "--width": maybeCssVar59(__maybeInc23(innerWidth))
25347
+ "--width": maybeCssVar59(__maybeInc24(innerWidth))
25331
25348
  }],
25332
25349
  transition: "transitionTop"
25333
25350
  }
@@ -25428,7 +25445,7 @@ function useBannerAndNavbarHeight() {
25428
25445
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
25429
25446
  import { mergeProps as mergeProps36, maybeCssVar as maybeCssVar60 } from "@homebound/truss/runtime";
25430
25447
  import { jsx as jsx210, jsxs as jsxs108 } from "react/jsx-runtime";
25431
- var __maybeInc24 = (inc) => {
25448
+ var __maybeInc25 = (inc) => {
25432
25449
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25433
25450
  };
25434
25451
  function PageHeaderLayout(props) {
@@ -25458,10 +25475,10 @@ function PageHeaderLayout(props) {
25458
25475
  const innerCss = autoHideState === "static" ? {
25459
25476
  position: "sticky",
25460
25477
  left: ["left_var", {
25461
- "--left": maybeCssVar60(__maybeInc24(headerLeft))
25478
+ "--left": maybeCssVar60(__maybeInc25(headerLeft))
25462
25479
  }],
25463
25480
  width: ["w_var", {
25464
- "--width": maybeCssVar60(__maybeInc24(headerWidth))
25481
+ "--width": maybeCssVar60(__maybeInc25(headerWidth))
25465
25482
  }],
25466
25483
  zIndex: ["z_var", {
25467
25484
  "--zIndex": maybeCssVar60(zIndices.pageStickyHeader)
@@ -25469,10 +25486,10 @@ function PageHeaderLayout(props) {
25469
25486
  } : {
25470
25487
  position: "fixed",
25471
25488
  left: ["left_var", {
25472
- "--left": maybeCssVar60(__maybeInc24(headerLeft))
25489
+ "--left": maybeCssVar60(__maybeInc25(headerLeft))
25473
25490
  }],
25474
25491
  width: ["w_var", {
25475
- "--width": maybeCssVar60(__maybeInc24(headerWidth))
25492
+ "--width": maybeCssVar60(__maybeInc25(headerWidth))
25476
25493
  }],
25477
25494
  zIndex: ["z_var", {
25478
25495
  "--zIndex": maybeCssVar60(zIndices.pageStickyHeader)
@@ -25497,6 +25514,166 @@ function PageHeaderLayout(props) {
25497
25514
  /* @__PURE__ */ jsx210("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
25498
25515
  ] }) });
25499
25516
  }
25517
+
25518
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
25519
+ import { useCallback as useCallback40, useLayoutEffect as useLayoutEffect10, useRef as useRef67 } from "react";
25520
+
25521
+ // src/components/Headers/WorkflowHeader.tsx
25522
+ import { jsx as jsx211 } from "react/jsx-runtime";
25523
+ function WorkflowHeader(props) {
25524
+ const { stepperTabs, ...otherProps } = props;
25525
+ const tid = useTestIds(otherProps, "header");
25526
+ return /* @__PURE__ */ jsx211(BaseHeader, { ...otherProps, bottomSlot: /* @__PURE__ */ jsx211(StepperTabs, { ...stepperTabs, ...tid.stepperTabs }) });
25527
+ }
25528
+
25529
+ // src/layouts/WorkflowLayout/WorkflowActions.tsx
25530
+ import { jsx as jsx212, jsxs as jsxs109 } from "react/jsx-runtime";
25531
+ function WorkflowActions(props) {
25532
+ const {
25533
+ isFirstStep,
25534
+ isLastStep,
25535
+ isMobile,
25536
+ onBack,
25537
+ onCancel,
25538
+ onSaveAndExit,
25539
+ completeLabel,
25540
+ onComplete,
25541
+ onContinue
25542
+ } = props;
25543
+ return /* @__PURE__ */ jsxs109("div", { className: "df aic jcsb sm_w100", children: [
25544
+ /* @__PURE__ */ jsx212("div", { className: "df aic", children: !isFirstStep && (isMobile ? /* @__PURE__ */ jsx212(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) : /* @__PURE__ */ jsx212(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: onBack })) }),
25545
+ /* @__PURE__ */ jsxs109("div", { className: "df aic gap1", children: [
25546
+ /* @__PURE__ */ jsx212(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
25547
+ onSaveAndExit && /* @__PURE__ */ jsx212(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
25548
+ isLastStep ? /* @__PURE__ */ jsx212(Button, { label: completeLabel, variant: "primary", onClick: onComplete }) : /* @__PURE__ */ jsx212(Button, { label: "Continue", variant: "primary", onClick: onContinue })
25549
+ ] })
25550
+ ] });
25551
+ }
25552
+
25553
+ // src/layouts/WorkflowLayout/WorkflowLayout.tsx
25554
+ import { trussProps as trussProps110, mergeProps as mergeProps37, maybeCssVar as maybeCssVar61 } from "@homebound/truss/runtime";
25555
+ import { jsx as jsx213, jsxs as jsxs110 } from "react/jsx-runtime";
25556
+ var __maybeInc26 = (inc) => {
25557
+ return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25558
+ };
25559
+ function WorkflowLayout(props) {
25560
+ const {
25561
+ children
25562
+ } = props;
25563
+ const {
25564
+ stepperTabs,
25565
+ onCancel,
25566
+ completeLabel,
25567
+ onComplete,
25568
+ onSaveAndExit,
25569
+ ...headerProps
25570
+ } = props.workflowHeader;
25571
+ const tid = useTestIds(props, "workflowLayout");
25572
+ const {
25573
+ sm: isMobile
25574
+ } = useBreakpoint();
25575
+ const bannerAndNavbarHeight = useBannerAndNavbarHeight();
25576
+ const bannerAndNavbarHeightRef = useRef67(bannerAndNavbarHeight);
25577
+ bannerAndNavbarHeightRef.current = bannerAndNavbarHeight;
25578
+ const getBannerAndNavbarHeight = useCallback40(() => bannerAndNavbarHeightRef.current, []);
25579
+ const headerMetricsRef = useRef67(null);
25580
+ const spacerRef = useRef67(null);
25581
+ const headerHeight = useMeasuredHeight(headerMetricsRef, true);
25582
+ const {
25583
+ state: scrollState
25584
+ } = useAutoHideOnScroll(spacerRef, true, getBannerAndNavbarHeight);
25585
+ const collapsed = scrollState === "hidden";
25586
+ const headerWidth = documentScrollChromeWidth();
25587
+ const outerTop = bannerAndNavbarChromeTop();
25588
+ const cssVars = headerHeight > 0 ? {
25589
+ [beamPageHeaderLayoutHeightVar]: `${headerHeight}px`
25590
+ } : void 0;
25591
+ const {
25592
+ steps,
25593
+ currentStep,
25594
+ onChange
25595
+ } = stepperTabs;
25596
+ const currentIndex = steps.findIndex((step) => step.value === currentStep);
25597
+ const isFirstStep = currentIndex <= 0;
25598
+ const isLastStep = currentIndex === steps.length - 1;
25599
+ const buttons = /* @__PURE__ */ jsx213(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => onChange(steps[currentIndex - 1].value), onCancel, onSaveAndExit, completeLabel, onComplete, onContinue: () => onChange(steps[currentIndex + 1].value) });
25600
+ const showFooter = isMobile;
25601
+ useLayoutEffect10(() => {
25602
+ const root = document.documentElement;
25603
+ const previous = root.style.getPropertyValue(beamWorkflowLayoutFooterHeightVar);
25604
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, showFooter ? `${mobileFooterHeightPx}px` : "0px");
25605
+ return () => {
25606
+ if (previous) {
25607
+ root.style.setProperty(beamWorkflowLayoutFooterHeightVar, previous);
25608
+ } else {
25609
+ root.style.removeProperty(beamWorkflowLayoutFooterHeightVar);
25610
+ }
25611
+ };
25612
+ }, [showFooter]);
25613
+ const headerEl = /* @__PURE__ */ jsx213(WorkflowHeader, { ...headerProps, rightSlot: isMobile ? void 0 : buttons, stepperTabs: {
25614
+ ...stepperTabs,
25615
+ collapsed
25616
+ } });
25617
+ return /* @__PURE__ */ jsx213(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ jsxs110("div", { ...mergeProps37(void 0, cssVars, {
25618
+ display: "df",
25619
+ flexDirection: "fdc",
25620
+ width: "w100"
25621
+ }), ...tid, children: [
25622
+ /* @__PURE__ */ jsx213("div", { ref: spacerRef, ...mergeProps37(void 0, {
25623
+ height: headerHeight
25624
+ }, {
25625
+ flexShrink: "fs0",
25626
+ width: "w100"
25627
+ }), ...tid.spacer, children: /* @__PURE__ */ jsx213("div", { ref: headerMetricsRef, ...trussProps110({
25628
+ position: "fixed",
25629
+ width: ["w_var", {
25630
+ "--width": maybeCssVar61(__maybeInc26(headerWidth))
25631
+ }],
25632
+ zIndex: ["z_var", {
25633
+ "--zIndex": maybeCssVar61(zIndices.pageStickyHeader)
25634
+ }],
25635
+ top: ["top_var", {
25636
+ "--top": maybeCssVar61(__maybeInc26(outerTop))
25637
+ }]
25638
+ }), ...tid.header, children: headerEl }) }),
25639
+ /* @__PURE__ */ jsx213("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children }),
25640
+ showFooter && /* @__PURE__ */ jsx213("div", { ...trussProps110({
25641
+ flexShrink: "fs0",
25642
+ width: "w100",
25643
+ height: ["h_var", {
25644
+ "--height": `${mobileFooterHeightPx}px`
25645
+ }]
25646
+ }) }),
25647
+ showFooter && /* @__PURE__ */ jsx213("div", { ...trussProps110({
25648
+ position: "fixed",
25649
+ bottom: "bottom0",
25650
+ width: ["w_var", {
25651
+ "--width": maybeCssVar61(__maybeInc26(headerWidth))
25652
+ }],
25653
+ height: ["h_var", {
25654
+ "--height": `${mobileFooterHeightPx}px`
25655
+ }],
25656
+ zIndex: ["z_var", {
25657
+ "--zIndex": maybeCssVar61(zIndices.pageStickyFooter)
25658
+ }],
25659
+ display: "df",
25660
+ alignItems: "aic",
25661
+ justifyContent: "jcfe",
25662
+ gap: "gap1",
25663
+ paddingLeft: "pl3",
25664
+ paddingRight: "pr3",
25665
+ borderTopStyle: "bts_solid",
25666
+ borderTopWidth: "btw_1px",
25667
+ borderColor: ["bc_var", {
25668
+ "--borderColor": "var(--b-surface-separator)"
25669
+ }],
25670
+ backgroundColor: ["bgColor_var", {
25671
+ "--backgroundColor": "var(--b-surface)"
25672
+ }]
25673
+ }), ...tid.footer, children: buttons })
25674
+ ] }) });
25675
+ }
25676
+ var mobileFooterHeightPx = 80;
25500
25677
  export {
25501
25678
  ASC,
25502
25679
  Accordion,
@@ -25664,6 +25841,7 @@ export {
25664
25841
  Tooltip,
25665
25842
  TreeSelectField,
25666
25843
  ViewToggleButton,
25844
+ WorkflowLayout,
25667
25845
  actionColumn,
25668
25846
  applyRowFn,
25669
25847
  assignDefaultColumnIds,
@@ -25675,6 +25853,7 @@ export {
25675
25853
  beamPageHeaderLayoutHeightVar,
25676
25854
  beamSideNavLayoutWidthVar,
25677
25855
  beamTableActionsHeightVar,
25856
+ beamWorkflowLayoutFooterHeightVar,
25678
25857
  booleanFilter,
25679
25858
  boundCheckboxField,
25680
25859
  boundCheckboxGroupField,
@@ -25737,6 +25916,7 @@ export {
25737
25916
  getColumnBorderCss,
25738
25917
  getDateFormat,
25739
25918
  getFirstOrLastCellCss,
25919
+ getFloatingBottomOffset,
25740
25920
  getJustification,
25741
25921
  getNavLinkStyles,
25742
25922
  getTableRefWidthStyles,