@homebound/beam 3.90.1 → 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.js CHANGED
@@ -6139,6 +6139,9 @@ function documentScrollContentWidth() {
6139
6139
  function documentScrollRightPaneHeight() {
6140
6140
  return `calc(var(${beamLayoutViewportHeightVar}, 100vh) - ${stickyTableHeaderOffset()})`;
6141
6141
  }
6142
+ function documentScrollBodyMinHeight() {
6143
+ return `calc(var(${beamLayoutViewportHeightVar}, 100vh) - ${stickyNavAndHeaderOffset()} - var(${beamWorkflowLayoutFooterHeightVar}, 0px))`;
6144
+ }
6142
6145
  function documentScrollRightPaneWidth(maxPx) {
6143
6146
  return `min(${maxPx}px, ${documentScrollChromeWidth()})`;
6144
6147
  }
@@ -18902,50 +18905,91 @@ import { jsx as jsx107, jsxs as jsxs58 } from "react/jsx-runtime";
18902
18905
  function AiPanel(props) {
18903
18906
  const {
18904
18907
  rounded = false,
18905
- fullWidth = true,
18908
+ padding = "sm",
18906
18909
  children,
18907
18910
  ...others
18908
18911
  } = props;
18909
18912
  const tid = useTestIds(others, "aiPanel");
18910
18913
  return /* @__PURE__ */ jsx107("div", { ...trussProps72({
18911
- width: "w100",
18912
- paddingLeft: "pl3",
18913
- paddingRight: "pr3",
18914
- paddingTop: "pt2",
18915
- paddingBottom: "pb2",
18916
- backgroundImage: "aiBackground",
18917
- ...rounded ? {
18918
- borderRadius: "br12"
18919
- } : {}
18920
- }), ...others, ...tid, children: /* @__PURE__ */ jsxs58("div", { ...trussProps72({
18921
- display: "df",
18922
- flexDirection: "fdc",
18923
- alignItems: "aifs",
18924
- gap: "gap1",
18925
- width: "w100",
18926
- ...!fullWidth ? {
18927
- width: "wfc",
18928
- marginLeft: "mla",
18929
- marginRight: "mra"
18930
- } : {}
18914
+ ...{
18915
+ width: "w100",
18916
+ backgroundImage: "aiBackground",
18917
+ ...rounded ? {
18918
+ borderRadius: "br12"
18919
+ } : {}
18920
+ },
18921
+ ...aiBackgroundPaddingCss[padding]
18922
+ }), ...others, ...tid, children });
18923
+ }
18924
+ function AiCard(props) {
18925
+ const {
18926
+ fullWidth = true,
18927
+ size = "lg",
18928
+ children,
18929
+ ...others
18930
+ } = props;
18931
+ const {
18932
+ logoHeight,
18933
+ gapCss
18934
+ } = aiCardChrome[size];
18935
+ const tid = useTestIds(others, "aiCard");
18936
+ return /* @__PURE__ */ jsxs58("div", { ...trussProps72({
18937
+ ...{
18938
+ display: "df",
18939
+ flexDirection: "fdc",
18940
+ alignItems: "aifs",
18941
+ width: "w100",
18942
+ ...!fullWidth ? {
18943
+ width: "wfc",
18944
+ maxWidth: "maxw100",
18945
+ marginLeft: "mla",
18946
+ marginRight: "mra"
18947
+ } : {}
18948
+ },
18949
+ ...gapCss
18931
18950
  }), ...tid.column, children: [
18932
- /* @__PURE__ */ jsx107(BlueprintAiLogo, { height: 3 }),
18951
+ /* @__PURE__ */ jsx107(BlueprintAiLogo, { height: logoHeight }),
18933
18952
  /* @__PURE__ */ jsx107("div", { ...trussProps72({
18934
18953
  display: "df",
18935
18954
  flexDirection: "fdc",
18936
18955
  width: "w100",
18956
+ minWidth: "mw0",
18937
18957
  borderRadius: "br12",
18938
- paddingTop: "pt_12px",
18939
- paddingLeft: "pl2",
18940
- paddingRight: "pr2",
18941
- paddingBottom: "pb2",
18942
18958
  backgroundColor: ["bgColor_var", {
18943
18959
  "--backgroundColor": "var(--b-surface)"
18944
18960
  }],
18945
18961
  boxShadow: "bshBasic"
18946
18962
  }), ...tid.card, children })
18947
- ] }) });
18963
+ ] });
18948
18964
  }
18965
+ var aiBackgroundPaddingCss = {
18966
+ lg: {
18967
+ paddingTop: "pt3",
18968
+ paddingBottom: "pb3",
18969
+ paddingRight: "pr3",
18970
+ paddingLeft: "pl3"
18971
+ },
18972
+ sm: {
18973
+ paddingLeft: "pl3",
18974
+ paddingRight: "pr3",
18975
+ paddingTop: "pt2",
18976
+ paddingBottom: "pb2"
18977
+ }
18978
+ };
18979
+ var aiCardChrome = {
18980
+ lg: {
18981
+ logoHeight: 3,
18982
+ gapCss: {
18983
+ gap: "gap2"
18984
+ }
18985
+ },
18986
+ sm: {
18987
+ logoHeight: 2,
18988
+ gapCss: {
18989
+ gap: "gap_4px"
18990
+ }
18991
+ }
18992
+ };
18949
18993
 
18950
18994
  // src/components/AiBanner.tsx
18951
18995
  import { trussProps as trussProps73 } from "@homebound/truss/runtime";
@@ -18958,7 +19002,7 @@ function AiBanner(props) {
18958
19002
  secondaryAction
18959
19003
  } = props;
18960
19004
  const tid = useTestIds(props, "aiBanner");
18961
- return /* @__PURE__ */ jsx108(AiPanel, { ...tid, children: /* @__PURE__ */ jsxs59("div", { className: "df aic jcsb gap2 w100 fww", children: [
19005
+ return /* @__PURE__ */ jsx108(AiPanel, { padding: "sm", ...tid, children: /* @__PURE__ */ jsx108(AiCard, { size: "sm", ...tid, children: /* @__PURE__ */ jsxs59("div", { className: "df aic jcsb gap2 w100 fww pt_12px pb2 pl2 pr2", children: [
18962
19006
  /* @__PURE__ */ jsxs59("div", { className: "df fdc gap_4px fg1 fb_0 mw_240px", children: [
18963
19007
  /* @__PURE__ */ jsx108("span", { className: "fw6 fz_14px lh_20px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent", ...tid.title, children: title }),
18964
19008
  message && /* @__PURE__ */ jsx108("span", { ...trussProps73({
@@ -18974,7 +19018,7 @@ function AiBanner(props) {
18974
19018
  secondaryAction && /* @__PURE__ */ jsx108(Button, { ...secondaryAction, variant: "quaternary" }),
18975
19019
  primaryAction && /* @__PURE__ */ jsx108(Button, { ...primaryAction, variant: "ai" })
18976
19020
  ] })
18977
- ] }) });
19021
+ ] }) }) });
18978
19022
  }
18979
19023
 
18980
19024
  // src/components/AiLoader.tsx
@@ -19036,7 +19080,7 @@ function AiLoadingPanel(props) {
19036
19080
  return (
19037
19081
  // `status` rather than `alert` so assistive tech waits for a pause instead of interrupting, and
19038
19082
  // `aria-busy` so it knows the surrounding content is still settling.
19039
- /* @__PURE__ */ jsx110(AiPanel, { role: "status", "aria-busy": true, ...tid, children: /* @__PURE__ */ jsxs60("div", { className: "df fdc aic gap1 w100 pl1 pr1", children: [
19083
+ /* @__PURE__ */ jsx110(AiPanel, { role: "status", "aria-busy": true, padding: "lg", ...tid, children: /* @__PURE__ */ jsx110(AiCard, { size: "lg", ...tid, children: /* @__PURE__ */ jsxs60("div", { className: "df fdc aic gap1 w100 pt2 pb2 pl3 pr3", children: [
19040
19084
  /* @__PURE__ */ jsx110(AiLoader, {}),
19041
19085
  /* @__PURE__ */ jsx110("span", { className: "fw6 fz_18px lh_28px purple700 aiBoldBg bgcl_text WebkitBackgroundClip_text wktfc_transparent", ...tid.title, children: title }),
19042
19086
  /* @__PURE__ */ jsx110("span", { ...trussProps75({
@@ -19048,7 +19092,7 @@ function AiLoadingPanel(props) {
19048
19092
  }],
19049
19093
  textAlign: "tac"
19050
19094
  }), ...tid.message, children: message })
19051
- ] }) })
19095
+ ] }) }) })
19052
19096
  );
19053
19097
  }
19054
19098
  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.";
@@ -21252,6 +21296,7 @@ function ContentHeader(props) {
21252
21296
  actions,
21253
21297
  withAutoSave,
21254
21298
  level = 2,
21299
+ aiMode = false,
21255
21300
  startAdornment,
21256
21301
  xss
21257
21302
  } = props;
@@ -21260,6 +21305,16 @@ function ContentHeader(props) {
21260
21305
  tag: Heading,
21261
21306
  css: headingCss
21262
21307
  } = headingByLevel[level];
21308
+ const titleCss = aiMode ? {
21309
+ ...headingCss,
21310
+ ...{
21311
+ color: "purple700",
21312
+ backgroundImage: "aiBoldBg",
21313
+ backgroundClip: "bgcl_text",
21314
+ WebkitBackgroundClip: "WebkitBackgroundClip_text",
21315
+ WebkitTextFillColor: "wktfc_transparent"
21316
+ }
21317
+ } : headingCss;
21263
21318
  if (!title && !description && !actions && !withAutoSave) {
21264
21319
  return null;
21265
21320
  }
@@ -21289,7 +21344,7 @@ function ContentHeader(props) {
21289
21344
  /* @__PURE__ */ jsxs71("div", { className: "df aic jcsb mw0", children: [
21290
21345
  title ? /* @__PURE__ */ jsxs71("div", { className: "df aic gap1 mw0", children: [
21291
21346
  startAdornment,
21292
- /* @__PURE__ */ jsx146(Heading, { ...trussProps87(headingCss), ...tid.title, children: title })
21347
+ /* @__PURE__ */ jsx146(Heading, { ...trussProps87(titleCss), ...tid.title, children: title })
21293
21348
  ] }) : descriptionEl,
21294
21349
  (withAutoSave || actions) && /* @__PURE__ */ jsxs71("div", { className: "df gap1 fs0", ...tid.actions, children: [
21295
21350
  withAutoSave && /* @__PURE__ */ jsx146(AutoSaveIndicator, {}),
@@ -27528,6 +27583,7 @@ function EnvironmentBannerLayout(props) {
27528
27583
  }
27529
27584
 
27530
27585
  // src/layouts/FormSectionLayout/FormSectionLayout.tsx
27586
+ import { trussProps as trussProps129 } from "@homebound/truss/runtime";
27531
27587
  import { jsx as jsx225, jsxs as jsxs117 } from "react/jsx-runtime";
27532
27588
  function FormSectionLayout(props) {
27533
27589
  const {
@@ -27536,16 +27592,28 @@ function FormSectionLayout(props) {
27536
27592
  actions,
27537
27593
  withAutoSave,
27538
27594
  initialFields,
27539
- sections
27595
+ sections,
27596
+ aiMode = false
27540
27597
  } = props;
27541
27598
  const tid = useTestIds(props, "formSectionLayout");
27542
- return /* @__PURE__ */ jsx225(CenteredLayout, { size: "sm", children: /* @__PURE__ */ jsxs117("div", { className: "df fdc gap8 pt4", children: [
27599
+ const content = /* @__PURE__ */ jsxs117("div", { ...trussProps129({
27600
+ display: "df",
27601
+ flexDirection: "fdc",
27602
+ gap: "gap8",
27603
+ ...aiMode ? {
27604
+ paddingTop: "pt3",
27605
+ paddingBottom: "pb3",
27606
+ paddingRight: "pr3",
27607
+ paddingLeft: "pl3"
27608
+ } : {}
27609
+ }), children: [
27543
27610
  /* @__PURE__ */ jsxs117("div", { className: "df fdc gap3", children: [
27544
- /* @__PURE__ */ jsx225(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2 }),
27611
+ /* @__PURE__ */ jsx225(ContentHeader, { ...tid, title, description, actions, withAutoSave, level: 2, aiMode }),
27545
27612
  initialFields
27546
27613
  ] }),
27547
27614
  sections && /* @__PURE__ */ jsx225("div", { className: "df fdc gap8", children: sections.map((section, i) => /* @__PURE__ */ jsx225(FormSection, { ...section }, defaultTestId(section.title) || i)) })
27548
- ] }) });
27615
+ ] });
27616
+ return /* @__PURE__ */ jsx225(CenteredLayout, { size: "sm", children: aiMode ? /* @__PURE__ */ jsx225(AiCard, { size: "lg", ...tid, children: content }) : content });
27549
27617
  }
27550
27618
 
27551
27619
  // src/layouts/NavbarLayout/NavbarLayout.tsx
@@ -27745,7 +27813,7 @@ function NavbarLayout(props) {
27745
27813
  import { useCallback as useCallback41, useMemo as useMemo58, useRef as useRef69 } from "react";
27746
27814
 
27747
27815
  // src/components/Headers/BaseHeader.tsx
27748
- import { trussProps as trussProps129 } from "@homebound/truss/runtime";
27816
+ import { trussProps as trussProps130 } from "@homebound/truss/runtime";
27749
27817
  import { jsx as jsx228, jsxs as jsxs119 } from "react/jsx-runtime";
27750
27818
  function BaseHeader(props) {
27751
27819
  const {
@@ -27758,7 +27826,7 @@ function BaseHeader(props) {
27758
27826
  } = props;
27759
27827
  const tid = useTestIds(otherProps, "header");
27760
27828
  useDocumentTitle(title, documentTitleSuffix);
27761
- return /* @__PURE__ */ jsxs119("header", { ...tid, ...trussProps129({
27829
+ return /* @__PURE__ */ jsxs119("header", { ...tid, ...trussProps130({
27762
27830
  display: "df",
27763
27831
  flexDirection: "fdc",
27764
27832
  paddingTop: "pt3",
@@ -27772,7 +27840,7 @@ function BaseHeader(props) {
27772
27840
  "--backgroundColor": "var(--b-surface)"
27773
27841
  }]
27774
27842
  }), children: [
27775
- /* @__PURE__ */ jsxs119("div", { ...trussProps129({
27843
+ /* @__PURE__ */ jsxs119("div", { ...trussProps130({
27776
27844
  ...{
27777
27845
  display: "df",
27778
27846
  justifyContent: "jcsb",
@@ -27788,7 +27856,7 @@ function BaseHeader(props) {
27788
27856
  }), children: [
27789
27857
  /* @__PURE__ */ jsxs119("div", { className: "mw0", children: [
27790
27858
  breadcrumbs && /* @__PURE__ */ jsx228(Breadcrumbs, { ...breadcrumbs }),
27791
- /* @__PURE__ */ jsx228("h1", { ...tid.title, ...trussProps129({
27859
+ /* @__PURE__ */ jsx228("h1", { ...tid.title, ...trussProps130({
27792
27860
  fontWeight: "fw6",
27793
27861
  fontSize: "fz_20px",
27794
27862
  lineHeight: "lh_28px",
@@ -27804,7 +27872,7 @@ function BaseHeader(props) {
27804
27872
  }
27805
27873
 
27806
27874
  // src/components/Headers/PageHeader.tsx
27807
- import { trussProps as trussProps130 } from "@homebound/truss/runtime";
27875
+ import { trussProps as trussProps131 } from "@homebound/truss/runtime";
27808
27876
  import { jsx as jsx229 } from "react/jsx-runtime";
27809
27877
  function PageHeader2(props) {
27810
27878
  const {
@@ -27812,7 +27880,7 @@ function PageHeader2(props) {
27812
27880
  ...otherProps
27813
27881
  } = props;
27814
27882
  const tid = useTestIds(otherProps, "header");
27815
- return /* @__PURE__ */ jsx229(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ jsx229("div", { ...trussProps130(pageContentPaddingX), children: /* @__PURE__ */ jsx229(Tabs, { ...tabs, ...tid.tabs }) }) });
27883
+ return /* @__PURE__ */ jsx229(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ jsx229("div", { ...trussProps131(pageContentPaddingX), children: /* @__PURE__ */ jsx229(Tabs, { ...tabs, ...tid.tabs }) }) });
27816
27884
  }
27817
27885
 
27818
27886
  // src/layouts/useBannerAndNavbarHeight.ts
@@ -27962,20 +28030,22 @@ function WorkflowActions(props) {
27962
28030
  completeLabel,
27963
28031
  onComplete,
27964
28032
  onContinue,
27965
- primaryDisabled
28033
+ primaryDisabled,
28034
+ aiMode = false
27966
28035
  } = props;
28036
+ const primaryVariant = aiMode ? "ai" : "primary";
27967
28037
  return /* @__PURE__ */ jsxs121("div", { className: "df aic jcsb sm_w100", children: [
27968
28038
  /* @__PURE__ */ jsx233("div", { className: "df aic", children: !isFirstStep && isMobile && /* @__PURE__ */ jsx233(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) }),
27969
28039
  /* @__PURE__ */ jsxs121("div", { className: "df aic gap1", children: [
27970
28040
  /* @__PURE__ */ jsx233(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
27971
28041
  onSaveAndExit && /* @__PURE__ */ jsx233(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
27972
- isLastStep ? /* @__PURE__ */ jsx233(Button, { label: completeLabel, variant: "primary", onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ jsx233(Button, { label: "Continue", variant: "primary", onClick: onContinue, disabled: primaryDisabled })
28042
+ isLastStep ? /* @__PURE__ */ jsx233(Button, { label: completeLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ jsx233(Button, { label: "Continue", variant: primaryVariant, onClick: onContinue, disabled: primaryDisabled })
27973
28043
  ] })
27974
28044
  ] });
27975
28045
  }
27976
28046
 
27977
28047
  // src/layouts/WorkflowLayout/WorkflowLayout.tsx
27978
- import { trussProps as trussProps131, mergeProps as mergeProps41, maybeCssVar as maybeCssVar65 } from "@homebound/truss/runtime";
28048
+ import { trussProps as trussProps132, mergeProps as mergeProps41, maybeCssVar as maybeCssVar65 } from "@homebound/truss/runtime";
27979
28049
  import { jsx as jsx234, jsxs as jsxs122 } from "react/jsx-runtime";
27980
28050
  var __maybeInc32 = (inc) => {
27981
28051
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
@@ -27989,6 +28059,7 @@ function WorkflowLayout(props) {
27989
28059
  onComplete,
27990
28060
  onSaveAndExit,
27991
28061
  isDirty,
28062
+ aiMode = false,
27992
28063
  ...headerProps
27993
28064
  } = props;
27994
28065
  const stepTabs = steps.map((step) => ({
@@ -28018,7 +28089,7 @@ function WorkflowLayout(props) {
28018
28089
  const isFirstStep = currentIndex <= 0;
28019
28090
  const isLastStep = currentIndex === stepTabs.length - 1;
28020
28091
  const activeStep = stepTabs[currentIndex];
28021
- const buttons = /* @__PURE__ */ jsx234(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => setCurrentStep(stepTabs[currentIndex - 1].value), onCancel: onCancelClick, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !activeStep?.isValid, onContinue: async () => {
28092
+ const buttons = /* @__PURE__ */ jsx234(WorkflowActions, { isFirstStep, isLastStep, isMobile, onBack: () => setCurrentStep(stepTabs[currentIndex - 1].value), onCancel: onCancelClick, onSaveAndExit, completeLabel, onComplete, primaryDisabled: !activeStep?.isValid, aiMode, onContinue: async () => {
28022
28093
  const onContinue = activeStep?.onContinue;
28023
28094
  if (onContinue) {
28024
28095
  const allowed = await onContinue();
@@ -28058,7 +28129,7 @@ function WorkflowLayout(props) {
28058
28129
  flexDirection: "fdc",
28059
28130
  width: "w100"
28060
28131
  }), ...tid, children: [
28061
- /* @__PURE__ */ jsx234("div", { ref: headerMetricsRef, ...trussProps131({
28132
+ /* @__PURE__ */ jsx234("div", { ref: headerMetricsRef, ...trussProps132({
28062
28133
  position: "sticky",
28063
28134
  left: "left0",
28064
28135
  width: ["w_var", {
@@ -28071,14 +28142,29 @@ function WorkflowLayout(props) {
28071
28142
  "--top": maybeCssVar65(__maybeInc32(outerTop))
28072
28143
  }]
28073
28144
  }), ...tid.header, children: headerEl }),
28074
- /* @__PURE__ */ jsx234("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children: activeStep?.content }),
28075
- showFooter && /* @__PURE__ */ jsx234("div", { ...trussProps131({
28145
+ /* @__PURE__ */ jsx234("div", { ...trussProps132({
28146
+ ...{
28147
+ display: "df",
28148
+ flexDirection: "fdc",
28149
+ flexGrow: "fg1",
28150
+ minHeight: "mh0",
28151
+ width: "w100",
28152
+ paddingTop: "pt4 mdandup_pt6"
28153
+ },
28154
+ ...aiMode && {
28155
+ backgroundImage: "aiBackground",
28156
+ minHeight: ["mh_var", {
28157
+ "--minHeight": maybeCssVar65(documentScrollBodyMinHeight())
28158
+ }]
28159
+ }
28160
+ }), ...tid.body, children: activeStep?.content }),
28161
+ showFooter && /* @__PURE__ */ jsx234("div", { ...trussProps132({
28076
28162
  flexShrink: "fs0",
28077
28163
  width: "w100",
28078
28164
  height: ["h_var", {
28079
28165
  "--height": `${mobileFooterHeightPx}px`
28080
28166
  }]
28081
- }), children: /* @__PURE__ */ jsx234("div", { ...trussProps131({
28167
+ }), children: /* @__PURE__ */ jsx234("div", { ...trussProps132({
28082
28168
  ...{
28083
28169
  position: "fixed",
28084
28170
  bottom: "bottom0",
@@ -28122,6 +28208,7 @@ export {
28122
28208
  Accordion,
28123
28209
  AccordionList,
28124
28210
  AiBanner,
28211
+ AiCard,
28125
28212
  AiLoader,
28126
28213
  AiLoadingPanel,
28127
28214
  AiPanel,
@@ -28364,6 +28451,7 @@ export {
28364
28451
  defaultRenderFn,
28365
28452
  defaultStyle,
28366
28453
  defaultTestId,
28454
+ documentScrollBodyMinHeight,
28367
28455
  documentScrollChromeLeft,
28368
28456
  documentScrollChromeWidth,
28369
28457
  documentScrollContentLeft,