@homebound/beam 3.90.0 → 3.91.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
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  Accordion: () => Accordion,
35
35
  AccordionList: () => AccordionList,
36
36
  AiBanner: () => AiBanner,
37
+ AiCard: () => AiCard,
37
38
  AiLoader: () => AiLoader,
38
39
  AiLoadingPanel: () => AiLoadingPanel,
39
40
  AiPanel: () => AiPanel,
@@ -276,6 +277,7 @@ __export(index_exports, {
276
277
  defaultRenderFn: () => defaultRenderFn,
277
278
  defaultStyle: () => defaultStyle,
278
279
  defaultTestId: () => defaultTestId,
280
+ documentScrollBodyMinHeight: () => documentScrollBodyMinHeight,
279
281
  documentScrollChromeLeft: () => documentScrollChromeLeft,
280
282
  documentScrollChromeWidth: () => documentScrollChromeWidth,
281
283
  documentScrollContentLeft: () => documentScrollContentLeft,
@@ -6638,6 +6640,9 @@ function documentScrollContentWidth() {
6638
6640
  function documentScrollRightPaneHeight() {
6639
6641
  return `calc(var(${beamLayoutViewportHeightVar}, 100vh) - ${stickyTableHeaderOffset()})`;
6640
6642
  }
6643
+ function documentScrollBodyMinHeight() {
6644
+ return `calc(var(${beamLayoutViewportHeightVar}, 100vh) - ${stickyNavAndHeaderOffset()} - var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
6645
+ }
6641
6646
  function documentScrollRightPaneWidth(maxPx) {
6642
6647
  return `min(${maxPx}px, ${documentScrollChromeWidth()})`;
6643
6648
  }
@@ -19401,50 +19406,91 @@ var import_jsx_runtime107 = require("react/jsx-runtime");
19401
19406
  function AiPanel(props) {
19402
19407
  const {
19403
19408
  rounded = false,
19404
- fullWidth = true,
19409
+ padding = "sm",
19405
19410
  children,
19406
19411
  ...others
19407
19412
  } = props;
19408
19413
  const tid = useTestIds(others, "aiPanel");
19409
19414
  return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { ...(0, import_runtime80.trussProps)({
19410
- width: "w100",
19411
- paddingLeft: "pl3",
19412
- paddingRight: "pr3",
19413
- paddingTop: "pt2",
19414
- paddingBottom: "pb2",
19415
- backgroundImage: "aiBackground",
19416
- ...rounded ? {
19417
- borderRadius: "br12"
19418
- } : {}
19419
- }), ...others, ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { ...(0, import_runtime80.trussProps)({
19420
- display: "df",
19421
- flexDirection: "fdc",
19422
- alignItems: "aifs",
19423
- gap: "gap1",
19424
- width: "w100",
19425
- ...!fullWidth ? {
19426
- width: "wfc",
19427
- marginLeft: "mla",
19428
- marginRight: "mra"
19429
- } : {}
19415
+ ...{
19416
+ width: "w100",
19417
+ backgroundImage: "aiBackground",
19418
+ ...rounded ? {
19419
+ borderRadius: "br12"
19420
+ } : {}
19421
+ },
19422
+ ...aiBackgroundPaddingCss[padding]
19423
+ }), ...others, ...tid, children });
19424
+ }
19425
+ function AiCard(props) {
19426
+ const {
19427
+ fullWidth = true,
19428
+ size = "lg",
19429
+ children,
19430
+ ...others
19431
+ } = props;
19432
+ const {
19433
+ logoHeight,
19434
+ gapCss
19435
+ } = aiCardChrome[size];
19436
+ const tid = useTestIds(others, "aiCard");
19437
+ return /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { ...(0, import_runtime80.trussProps)({
19438
+ ...{
19439
+ display: "df",
19440
+ flexDirection: "fdc",
19441
+ alignItems: "aifs",
19442
+ width: "w100",
19443
+ ...!fullWidth ? {
19444
+ width: "wfc",
19445
+ maxWidth: "maxw100",
19446
+ marginLeft: "mla",
19447
+ marginRight: "mra"
19448
+ } : {}
19449
+ },
19450
+ ...gapCss
19430
19451
  }), ...tid.column, children: [
19431
- /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(BlueprintAiLogo, { height: 3 }),
19452
+ /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(BlueprintAiLogo, { height: logoHeight }),
19432
19453
  /* @__PURE__ */ (0, import_jsx_runtime107.jsx)("div", { ...(0, import_runtime80.trussProps)({
19433
19454
  display: "df",
19434
19455
  flexDirection: "fdc",
19435
19456
  width: "w100",
19457
+ minWidth: "mw0",
19436
19458
  borderRadius: "br12",
19437
- paddingTop: "pt_12px",
19438
- paddingLeft: "pl2",
19439
- paddingRight: "pr2",
19440
- paddingBottom: "pb2",
19441
19459
  backgroundColor: ["bgColor_var", {
19442
19460
  "--backgroundColor": "var(--b-surface)"
19443
19461
  }],
19444
19462
  boxShadow: "bshBasic"
19445
19463
  }), ...tid.card, children })
19446
- ] }) });
19464
+ ] });
19447
19465
  }
19466
+ var aiBackgroundPaddingCss = {
19467
+ lg: {
19468
+ paddingTop: "pt3",
19469
+ paddingBottom: "pb3",
19470
+ paddingRight: "pr3",
19471
+ paddingLeft: "pl3"
19472
+ },
19473
+ sm: {
19474
+ paddingLeft: "pl3",
19475
+ paddingRight: "pr3",
19476
+ paddingTop: "pt2",
19477
+ paddingBottom: "pb2"
19478
+ }
19479
+ };
19480
+ var aiCardChrome = {
19481
+ lg: {
19482
+ logoHeight: 3,
19483
+ gapCss: {
19484
+ gap: "gap2"
19485
+ }
19486
+ },
19487
+ sm: {
19488
+ logoHeight: 2,
19489
+ gapCss: {
19490
+ gap: "gap_4px"
19491
+ }
19492
+ }
19493
+ };
19448
19494
 
19449
19495
  // src/components/AiBanner.tsx
19450
19496
  var import_runtime81 = require("@homebound/truss/runtime");
@@ -19457,7 +19503,7 @@ function AiBanner(props) {
19457
19503
  secondaryAction
19458
19504
  } = props;
19459
19505
  const tid = useTestIds(props, "aiBanner");
19460
- return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(AiPanel, { ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "df aic jcsb gap2 w100 fww", children: [
19506
+ return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(AiPanel, { padding: "sm", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(AiCard, { size: "sm", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "df aic jcsb gap2 w100 fww pt_12px pb2 pl2 pr2", children: [
19461
19507
  /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "df fdc gap_4px fg1 fb_0 mw_240px", children: [
19462
19508
  /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "fw6 fz_14px lh_20px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent", ...tid.title, children: title }),
19463
19509
  message && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { ...(0, import_runtime81.trussProps)({
@@ -19473,7 +19519,7 @@ function AiBanner(props) {
19473
19519
  secondaryAction && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Button, { ...secondaryAction, variant: "quaternary" }),
19474
19520
  primaryAction && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(Button, { ...primaryAction, variant: "ai" })
19475
19521
  ] })
19476
- ] }) });
19522
+ ] }) }) });
19477
19523
  }
19478
19524
 
19479
19525
  // src/components/AiLoader.tsx
@@ -19535,7 +19581,7 @@ function AiLoadingPanel(props) {
19535
19581
  return (
19536
19582
  // `status` rather than `alert` so assistive tech waits for a pause instead of interrupting, and
19537
19583
  // `aria-busy` so it knows the surrounding content is still settling.
19538
- /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(AiPanel, { role: "status", "aria-busy": true, ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "df fdc aic gap1 w100", children: [
19584
+ /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(AiPanel, { role: "status", "aria-busy": true, padding: "lg", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(AiCard, { size: "lg", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "df fdc aic gap1 w100 pt2 pb2 pl3 pr3", children: [
19539
19585
  /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(AiLoader, {}),
19540
19586
  /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("span", { className: "fw6 fz_18px lh_28px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent", ...tid.title, children: title }),
19541
19587
  /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("span", { ...(0, import_runtime83.trussProps)({
@@ -19547,7 +19593,7 @@ function AiLoadingPanel(props) {
19547
19593
  }],
19548
19594
  textAlign: "tac"
19549
19595
  }), ...tid.message, children: message })
19550
- ] }) })
19596
+ ] }) }) })
19551
19597
  );
19552
19598
  }
19553
19599
  var defaultMessage = "This process can take a few minutes. Feel free to keep working in another tab. Once imported, you may edit or add to content before saving.";
@@ -19560,10 +19606,8 @@ function AiSlimBanner(props) {
19560
19606
  action
19561
19607
  } = props;
19562
19608
  const tid = useTestIds(props, "aiSlimBanner");
19563
- return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "df aic gap_4px w100 pl2 pr2 fw4 fz_12px lh_16px aiBackground", ...tid, children: [
19564
- /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Icon, { icon: "aiStar", inc: 1.5, xss: {
19565
- flexShrink: "fs0"
19566
- } }),
19609
+ return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "df ais gap2 w100 pl2 pr2 fw4 fz_12px lh_16px aiBackground", ...tid, children: [
19610
+ /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { className: "df aic fs0 pt1 pb1 h_32px", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Icon, { icon: "aiStar", inc: 1.5 }) }),
19567
19611
  /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)("div", { className: "df aic jcsb gap2 fg1 mw0", children: [
19568
19612
  /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("span", { className: "fw6 fz_12px lh_16px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent pt1 pb1 mw0", ...tid.title, children: title }),
19569
19613
  action && /* @__PURE__ */ (0, import_jsx_runtime111.jsx)("div", { className: "fs0", children: /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(Button, { ...action, variant: "text" }) })
@@ -21753,6 +21797,7 @@ function ContentHeader(props) {
21753
21797
  actions,
21754
21798
  withAutoSave,
21755
21799
  level = 2,
21800
+ aiMode = false,
21756
21801
  startAdornment,
21757
21802
  xss
21758
21803
  } = props;
@@ -21761,6 +21806,16 @@ function ContentHeader(props) {
21761
21806
  tag: Heading,
21762
21807
  css: headingCss
21763
21808
  } = headingByLevel[level];
21809
+ const titleCss = aiMode ? {
21810
+ ...headingCss,
21811
+ ...{
21812
+ color: "purple700",
21813
+ backgroundImage: "aiBoldBg",
21814
+ backgroundClip: "bgcl_text",
21815
+ WebkitBackgroundClip: "WebkitBackgroundClip_text",
21816
+ WebkitTextFillColor: "wktfc_transparent"
21817
+ }
21818
+ } : headingCss;
21764
21819
  if (!title && !description && !actions && !withAutoSave) {
21765
21820
  return null;
21766
21821
  }
@@ -21790,7 +21845,7 @@ function ContentHeader(props) {
21790
21845
  /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { className: "df aic jcsb mw0", children: [
21791
21846
  title ? /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { className: "df aic gap1 mw0", children: [
21792
21847
  startAdornment,
21793
- /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Heading, { ...(0, import_runtime95.trussProps)(headingCss), ...tid.title, children: title })
21848
+ /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(Heading, { ...(0, import_runtime95.trussProps)(titleCss), ...tid.title, children: title })
21794
21849
  ] }) : descriptionEl,
21795
21850
  (withAutoSave || actions) && /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)("div", { className: "df gap1 fs0", ...tid.actions, children: [
21796
21851
  withAutoSave && /* @__PURE__ */ (0, import_jsx_runtime146.jsx)(AutoSaveIndicator, {}),
@@ -28021,6 +28076,7 @@ function EnvironmentBannerLayout(props) {
28021
28076
  }
28022
28077
 
28023
28078
  // src/layouts/FormSectionLayout/FormSectionLayout.tsx
28079
+ var import_runtime143 = require("@homebound/truss/runtime");
28024
28080
  var import_jsx_runtime225 = require("react/jsx-runtime");
28025
28081
  function FormSectionLayout(props) {
28026
28082
  const {
@@ -28029,21 +28085,33 @@ function FormSectionLayout(props) {
28029
28085
  actions,
28030
28086
  withAutoSave,
28031
28087
  initialFields,
28032
- sections
28088
+ sections,
28089
+ aiMode = false
28033
28090
  } = props;
28034
28091
  const tid = useTestIds(props, "formSectionLayout");
28035
- return /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(CenteredLayout, { size: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime225.jsxs)("div", { className: "df fdc gap8 pt4", children: [
28092
+ const content = /* @__PURE__ */ (0, import_jsx_runtime225.jsxs)("div", { ...(0, import_runtime143.trussProps)({
28093
+ display: "df",
28094
+ flexDirection: "fdc",
28095
+ gap: "gap8",
28096
+ ...aiMode ? {
28097
+ paddingTop: "pt3",
28098
+ paddingBottom: "pb3",
28099
+ paddingRight: "pr3",
28100
+ paddingLeft: "pl3"
28101
+ } : {}
28102
+ }), children: [
28036
28103
  /* @__PURE__ */ (0, import_jsx_runtime225.jsxs)("div", { className: "df fdc gap3", children: [
28037
- /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2 }),
28104
+ /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2, aiMode }),
28038
28105
  initialFields
28039
28106
  ] }),
28040
28107
  sections && /* @__PURE__ */ (0, import_jsx_runtime225.jsx)("div", { className: "df fdc gap8", children: sections.map((section, i) => /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(FormSection, { ...section }, defaultTestId(section.title) || i)) })
28041
- ] }) });
28108
+ ] });
28109
+ return /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(CenteredLayout, { size: "sm", children: aiMode ? /* @__PURE__ */ (0, import_jsx_runtime225.jsx)(AiCard, { size: "lg", ...tid, children: content }) : content });
28042
28110
  }
28043
28111
 
28044
28112
  // src/layouts/NavbarLayout/NavbarLayout.tsx
28045
28113
  var import_react160 = require("react");
28046
- var import_runtime143 = require("@homebound/truss/runtime");
28114
+ var import_runtime144 = require("@homebound/truss/runtime");
28047
28115
 
28048
28116
  // src/layouts/useAutoHideOnScroll.ts
28049
28117
  var import_react157 = require("react");
@@ -28193,10 +28261,10 @@ function NavbarLayout(props) {
28193
28261
  position: "sticky",
28194
28262
  left: "left0",
28195
28263
  zIndex: ["z_var", {
28196
- "--zIndex": (0, import_runtime143.maybeCssVar)(zIndices.navbar)
28264
+ "--zIndex": (0, import_runtime144.maybeCssVar)(zIndices.navbar)
28197
28265
  }],
28198
28266
  width: ["w_var", {
28199
- "--width": (0, import_runtime143.maybeCssVar)(__maybeInc30(innerWidth))
28267
+ "--width": (0, import_runtime144.maybeCssVar)(__maybeInc30(innerWidth))
28200
28268
  }]
28201
28269
  }
28202
28270
  ) : (
@@ -28205,10 +28273,10 @@ function NavbarLayout(props) {
28205
28273
  position: "fixed",
28206
28274
  left: "left0",
28207
28275
  zIndex: ["z_var", {
28208
- "--zIndex": (0, import_runtime143.maybeCssVar)(zIndices.navbar)
28276
+ "--zIndex": (0, import_runtime144.maybeCssVar)(zIndices.navbar)
28209
28277
  }],
28210
28278
  width: ["w_var", {
28211
- "--width": (0, import_runtime143.maybeCssVar)(__maybeInc30(innerWidth))
28279
+ "--width": (0, import_runtime144.maybeCssVar)(__maybeInc30(innerWidth))
28212
28280
  }],
28213
28281
  transition: "transitionTop"
28214
28282
  }
@@ -28218,18 +28286,18 @@ function NavbarLayout(props) {
28218
28286
  top: autoHideState === "revealed" ? bannerTop : `calc(${bannerTop} - ${navHeight}px)`
28219
28287
  } : void 0;
28220
28288
  const navbarEl = (0, import_react160.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(Navbar, { ...navbar }), [navbar]);
28221
- return /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(MobileSubNavProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime227.jsxs)("div", { ...(0, import_runtime143.mergeProps)(void 0, cssVars, {
28289
+ return /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)(MobileSubNavProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime227.jsxs)("div", { ...(0, import_runtime144.mergeProps)(void 0, cssVars, {
28222
28290
  display: "df",
28223
28291
  flexDirection: "fdc",
28224
28292
  width: "wfc",
28225
28293
  minWidth: "mw100"
28226
28294
  }), ...tid, children: [
28227
- /* @__PURE__ */ (0, import_jsx_runtime227.jsx)("div", { ref: spacerRef, ...(0, import_runtime143.mergeProps)(void 0, {
28295
+ /* @__PURE__ */ (0, import_jsx_runtime227.jsx)("div", { ref: spacerRef, ...(0, import_runtime144.mergeProps)(void 0, {
28228
28296
  height: navHeight
28229
28297
  }, {
28230
28298
  flexShrink: "fs0",
28231
28299
  width: "w100"
28232
- }), children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime143.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
28300
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime227.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime144.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
28233
28301
  /* @__PURE__ */ (0, import_jsx_runtime227.jsx)("div", { className: "df fdc mh0 mw100 w100", ...tid.body, children })
28234
28302
  ] }) }) }) });
28235
28303
  }
@@ -28238,7 +28306,7 @@ function NavbarLayout(props) {
28238
28306
  var import_react161 = require("react");
28239
28307
 
28240
28308
  // src/components/Headers/BaseHeader.tsx
28241
- var import_runtime144 = require("@homebound/truss/runtime");
28309
+ var import_runtime145 = require("@homebound/truss/runtime");
28242
28310
  var import_jsx_runtime228 = require("react/jsx-runtime");
28243
28311
  function BaseHeader(props) {
28244
28312
  const {
@@ -28251,7 +28319,7 @@ function BaseHeader(props) {
28251
28319
  } = props;
28252
28320
  const tid = useTestIds(otherProps, "header");
28253
28321
  useDocumentTitle(title, documentTitleSuffix);
28254
- return /* @__PURE__ */ (0, import_jsx_runtime228.jsxs)("header", { ...tid, ...(0, import_runtime144.trussProps)({
28322
+ return /* @__PURE__ */ (0, import_jsx_runtime228.jsxs)("header", { ...tid, ...(0, import_runtime145.trussProps)({
28255
28323
  display: "df",
28256
28324
  flexDirection: "fdc",
28257
28325
  paddingTop: "pt3",
@@ -28265,7 +28333,7 @@ function BaseHeader(props) {
28265
28333
  "--backgroundColor": "var(--b-surface)"
28266
28334
  }]
28267
28335
  }), children: [
28268
- /* @__PURE__ */ (0, import_jsx_runtime228.jsxs)("div", { ...(0, import_runtime144.trussProps)({
28336
+ /* @__PURE__ */ (0, import_jsx_runtime228.jsxs)("div", { ...(0, import_runtime145.trussProps)({
28269
28337
  ...{
28270
28338
  display: "df",
28271
28339
  justifyContent: "jcsb",
@@ -28281,7 +28349,7 @@ function BaseHeader(props) {
28281
28349
  }), children: [
28282
28350
  /* @__PURE__ */ (0, import_jsx_runtime228.jsxs)("div", { className: "mw0", children: [
28283
28351
  breadcrumbs && /* @__PURE__ */ (0, import_jsx_runtime228.jsx)(Breadcrumbs, { ...breadcrumbs }),
28284
- /* @__PURE__ */ (0, import_jsx_runtime228.jsx)("h1", { ...tid.title, ...(0, import_runtime144.trussProps)({
28352
+ /* @__PURE__ */ (0, import_jsx_runtime228.jsx)("h1", { ...tid.title, ...(0, import_runtime145.trussProps)({
28285
28353
  fontWeight: "fw6",
28286
28354
  fontSize: "fz_20px",
28287
28355
  lineHeight: "lh_28px",
@@ -28297,7 +28365,7 @@ function BaseHeader(props) {
28297
28365
  }
28298
28366
 
28299
28367
  // src/components/Headers/PageHeader.tsx
28300
- var import_runtime145 = require("@homebound/truss/runtime");
28368
+ var import_runtime146 = require("@homebound/truss/runtime");
28301
28369
  var import_jsx_runtime229 = require("react/jsx-runtime");
28302
28370
  function PageHeader2(props) {
28303
28371
  const {
@@ -28305,7 +28373,7 @@ function PageHeader2(props) {
28305
28373
  ...otherProps
28306
28374
  } = props;
28307
28375
  const tid = useTestIds(otherProps, "header");
28308
- return /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime229.jsx)("div", { ...(0, import_runtime145.trussProps)(pageContentPaddingX), children: /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
28376
+ return /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime229.jsx)("div", { ...(0, import_runtime146.trussProps)(pageContentPaddingX), children: /* @__PURE__ */ (0, import_jsx_runtime229.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
28309
28377
  }
28310
28378
 
28311
28379
  // src/layouts/useBannerAndNavbarHeight.ts
@@ -28314,7 +28382,7 @@ function useBannerAndNavbarHeight() {
28314
28382
  }
28315
28383
 
28316
28384
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
28317
- var import_runtime146 = require("@homebound/truss/runtime");
28385
+ var import_runtime147 = require("@homebound/truss/runtime");
28318
28386
  var import_jsx_runtime230 = require("react/jsx-runtime");
28319
28387
  var __maybeInc31 = (inc) => {
28320
28388
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
@@ -28346,24 +28414,24 @@ function PageHeaderLayout(props) {
28346
28414
  const innerCss = autoHideState === "static" ? {
28347
28415
  position: "sticky",
28348
28416
  left: ["left_var", {
28349
- "--left": (0, import_runtime146.maybeCssVar)(__maybeInc31(headerLeft))
28417
+ "--left": (0, import_runtime147.maybeCssVar)(__maybeInc31(headerLeft))
28350
28418
  }],
28351
28419
  width: ["w_var", {
28352
- "--width": (0, import_runtime146.maybeCssVar)(__maybeInc31(headerWidth))
28420
+ "--width": (0, import_runtime147.maybeCssVar)(__maybeInc31(headerWidth))
28353
28421
  }],
28354
28422
  zIndex: ["z_var", {
28355
- "--zIndex": (0, import_runtime146.maybeCssVar)(zIndices.pageStickyHeader)
28423
+ "--zIndex": (0, import_runtime147.maybeCssVar)(zIndices.pageStickyHeader)
28356
28424
  }]
28357
28425
  } : {
28358
28426
  position: "fixed",
28359
28427
  left: ["left_var", {
28360
- "--left": (0, import_runtime146.maybeCssVar)(__maybeInc31(headerLeft))
28428
+ "--left": (0, import_runtime147.maybeCssVar)(__maybeInc31(headerLeft))
28361
28429
  }],
28362
28430
  width: ["w_var", {
28363
- "--width": (0, import_runtime146.maybeCssVar)(__maybeInc31(headerWidth))
28431
+ "--width": (0, import_runtime147.maybeCssVar)(__maybeInc31(headerWidth))
28364
28432
  }],
28365
28433
  zIndex: ["z_var", {
28366
- "--zIndex": (0, import_runtime146.maybeCssVar)(zIndices.pageStickyHeader)
28434
+ "--zIndex": (0, import_runtime147.maybeCssVar)(zIndices.pageStickyHeader)
28367
28435
  }],
28368
28436
  transition: "transitionTop"
28369
28437
  };
@@ -28371,17 +28439,17 @@ function PageHeaderLayout(props) {
28371
28439
  top: autoHideState === "revealed" ? outerTop : `calc(${outerTop} - ${headerHeight}px)`
28372
28440
  } : void 0;
28373
28441
  const pageHeaderEl = (0, import_react161.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
28374
- return /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime230.jsxs)("div", { ...(0, import_runtime146.mergeProps)(void 0, cssVars, {
28442
+ return /* @__PURE__ */ (0, import_jsx_runtime230.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime230.jsxs)("div", { ...(0, import_runtime147.mergeProps)(void 0, cssVars, {
28375
28443
  display: "df",
28376
28444
  flexDirection: "fdc",
28377
28445
  width: "w100"
28378
28446
  }), ...tid, children: [
28379
- /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { ref: spacerRef, ...(0, import_runtime146.mergeProps)(void 0, {
28447
+ /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { ref: spacerRef, ...(0, import_runtime147.mergeProps)(void 0, {
28380
28448
  height: headerHeight
28381
28449
  }, {
28382
28450
  flexShrink: "fs0",
28383
28451
  width: "w100"
28384
- }), children: /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime146.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
28452
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime147.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
28385
28453
  /* @__PURE__ */ (0, import_jsx_runtime230.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
28386
28454
  ] }) });
28387
28455
  }
@@ -28455,20 +28523,22 @@ function WorkflowActions(props) {
28455
28523
  completeLabel,
28456
28524
  onComplete,
28457
28525
  onContinue,
28458
- primaryDisabled
28526
+ primaryDisabled,
28527
+ aiMode = false
28459
28528
  } = props;
28529
+ const primaryVariant = aiMode ? "ai" : "primary";
28460
28530
  return /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)("div", { className: "df aic jcsb sm_w100", children: [
28461
28531
  /* @__PURE__ */ (0, import_jsx_runtime233.jsx)("div", { className: "df aic", children: !isFirstStep && isMobile && /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) }),
28462
28532
  /* @__PURE__ */ (0, import_jsx_runtime233.jsxs)("div", { className: "df aic gap1", children: [
28463
28533
  /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
28464
28534
  onSaveAndExit && /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
28465
- isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: completeLabel, variant: "primary", onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: "Continue", variant: "primary", onClick: onContinue, disabled: primaryDisabled })
28535
+ isLastStep ? /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: completeLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ (0, import_jsx_runtime233.jsx)(Button, { label: "Continue", variant: primaryVariant, onClick: onContinue, disabled: primaryDisabled })
28466
28536
  ] })
28467
28537
  ] });
28468
28538
  }
28469
28539
 
28470
28540
  // src/layouts/WorkflowLayout/WorkflowLayout.tsx
28471
- var import_runtime147 = require("@homebound/truss/runtime");
28541
+ var import_runtime148 = require("@homebound/truss/runtime");
28472
28542
  var import_jsx_runtime234 = require("react/jsx-runtime");
28473
28543
  var __maybeInc32 = (inc) => {
28474
28544
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
@@ -28482,6 +28552,7 @@ function WorkflowLayout(props) {
28482
28552
  onComplete,
28483
28553
  onSaveAndExit,
28484
28554
  isDirty,
28555
+ aiMode = false,
28485
28556
  ...headerProps
28486
28557
  } = props;
28487
28558
  const stepTabs = steps.map((step) => ({
@@ -28511,7 +28582,7 @@ function WorkflowLayout(props) {
28511
28582
  const isFirstStep = currentIndex <= 0;
28512
28583
  const isLastStep = currentIndex === stepTabs.length - 1;
28513
28584
  const activeStep = stepTabs[currentIndex];
28514
- const buttons = /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => setCurrentStep(stepTabs[currentIndex - 1].value), onCancel: onCancelClick, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !activeStep?.isValid, onContinue: async () => {
28585
+ const buttons = /* @__PURE__ */ (0, import_jsx_runtime234.jsx)(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => setCurrentStep(stepTabs[currentIndex - 1].value), onCancel: onCancelClick, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !activeStep?.isValid, aiMode, onContinue: async () => {
28515
28586
  const onContinue = activeStep?.onContinue;
28516
28587
  if (onContinue) {
28517
28588
  const allowed = await onContinue();
@@ -28546,43 +28617,58 @@ function WorkflowLayout(props) {
28546
28617
  }
28547
28618
  );
28548
28619
  return /* @__PURE__ */ (0, import_jsx_runtime234.jsxs)(DocumentScrollLayoutProvider, { children: [
28549
- /* @__PURE__ */ (0, import_jsx_runtime234.jsxs)("div", { ...(0, import_runtime147.mergeProps)(void 0, cssVars, {
28620
+ /* @__PURE__ */ (0, import_jsx_runtime234.jsxs)("div", { ...(0, import_runtime148.mergeProps)(void 0, cssVars, {
28550
28621
  display: "df",
28551
28622
  flexDirection: "fdc",
28552
28623
  width: "w100"
28553
28624
  }), ...tid, children: [
28554
- /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime147.trussProps)({
28625
+ /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime148.trussProps)({
28555
28626
  position: "sticky",
28556
28627
  left: "left0",
28557
28628
  width: ["w_var", {
28558
- "--width": (0, import_runtime147.maybeCssVar)(__maybeInc32(headerWidth))
28629
+ "--width": (0, import_runtime148.maybeCssVar)(__maybeInc32(headerWidth))
28559
28630
  }],
28560
28631
  zIndex: ["z_var", {
28561
- "--zIndex": (0, import_runtime147.maybeCssVar)(zIndices.pageStickyHeader)
28632
+ "--zIndex": (0, import_runtime148.maybeCssVar)(zIndices.pageStickyHeader)
28562
28633
  }],
28563
28634
  top: ["top_var", {
28564
- "--top": (0, import_runtime147.maybeCssVar)(__maybeInc32(outerTop))
28635
+ "--top": (0, import_runtime148.maybeCssVar)(__maybeInc32(outerTop))
28565
28636
  }]
28566
28637
  }), ...tid.header, children: headerEl }),
28567
- /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children: activeStep?.content }),
28568
- showFooter && /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime147.trussProps)({
28638
+ /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime148.trussProps)({
28639
+ ...{
28640
+ display: "df",
28641
+ flexDirection: "fdc",
28642
+ flexGrow: "fg1",
28643
+ minHeight: "mh0",
28644
+ width: "w100",
28645
+ paddingTop: "pt4 mdandup_pt6"
28646
+ },
28647
+ ...aiMode && {
28648
+ backgroundImage: "aiBackground",
28649
+ minHeight: ["mh_var", {
28650
+ "--minHeight": (0, import_runtime148.maybeCssVar)(documentScrollBodyMinHeight())
28651
+ }]
28652
+ }
28653
+ }), ...tid.body, children: activeStep?.content }),
28654
+ showFooter && /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime148.trussProps)({
28569
28655
  flexShrink: "fs0",
28570
28656
  width: "w100",
28571
28657
  height: ["h_var", {
28572
28658
  "--height": `${mobileFooterHeightPx}px`
28573
28659
  }]
28574
- }), children: /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime147.trussProps)({
28660
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime234.jsx)("div", { ...(0, import_runtime148.trussProps)({
28575
28661
  ...{
28576
28662
  position: "fixed",
28577
28663
  bottom: "bottom0",
28578
28664
  width: ["w_var", {
28579
- "--width": (0, import_runtime147.maybeCssVar)(__maybeInc32(headerWidth))
28665
+ "--width": (0, import_runtime148.maybeCssVar)(__maybeInc32(headerWidth))
28580
28666
  }],
28581
28667
  height: ["h_var", {
28582
28668
  "--height": `${mobileFooterHeightPx}px`
28583
28669
  }],
28584
28670
  zIndex: ["z_var", {
28585
- "--zIndex": (0, import_runtime147.maybeCssVar)(zIndices.pageStickyFooter)
28671
+ "--zIndex": (0, import_runtime148.maybeCssVar)(zIndices.pageStickyFooter)
28586
28672
  }],
28587
28673
  display: "df",
28588
28674
  alignItems: "aic",
@@ -28616,6 +28702,7 @@ function getInitialStep(steps, defaultStep) {
28616
28702
  Accordion,
28617
28703
  AccordionList,
28618
28704
  AiBanner,
28705
+ AiCard,
28619
28706
  AiLoader,
28620
28707
  AiLoadingPanel,
28621
28708
  AiPanel,
@@ -28858,6 +28945,7 @@ function getInitialStep(steps, defaultStep) {
28858
28945
  defaultRenderFn,
28859
28946
  defaultStyle,
28860
28947
  defaultTestId,
28948
+ documentScrollBodyMinHeight,
28861
28949
  documentScrollChromeLeft,
28862
28950
  documentScrollChromeWidth,
28863
28951
  documentScrollContentLeft,