@homebound/beam 4.55.1 → 4.56.1

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.d.cts CHANGED
@@ -5678,8 +5678,6 @@ type SelectedState = "checked" | "unchecked" | "partial";
5678
5678
  declare class TableState<R extends Kinded> {
5679
5679
  private persistCollapse;
5680
5680
  private rows;
5681
- /** Deepest data-row level, set with the rows. `0` when the table has a single level. Every row's type is chosen from this. */
5682
- maxNestingLevel: number;
5683
5681
  columns: GridColumnWithId<R>[];
5684
5682
  readonly api: GridTableApi<R>;
5685
5683
  private readonly rowStates;
@@ -5780,8 +5778,6 @@ declare class RowStates<R extends Kinded> {
5780
5778
  private keptGroupRow;
5781
5779
  /** The first level of rows, i.e. not the header (or kept group), but the totals + top-level children. */
5782
5780
  private topRows;
5783
- /** Deepest data-row level from the latest `setRows`. `0` when every body row is top-level. */
5784
- maxNestingLevel: number;
5785
5781
  constructor(table: TableState<R>);
5786
5782
  /** Returns a flat list of all of our RowStates. */
5787
5783
  get allStates(): RowState<R>[];
@@ -10268,6 +10264,7 @@ type WorkflowDestructiveAction = {
10268
10264
  confirmTitle?: ReactNode;
10269
10265
  confirmMessage?: ReactNode;
10270
10266
  };
10267
+ type WorkflowCompleteLabel = "Create" | "Save" | "Publish";
10271
10268
  type WorkflowActionsProps = {
10272
10269
  /** Leaves the workflow without saving. Always shown. */
10273
10270
  onCancel: (e: PressEvent) => void;
@@ -10275,10 +10272,12 @@ type WorkflowActionsProps = {
10275
10272
  onSaveAndExit?: (e: PressEvent) => void | Promise<void>;
10276
10273
  /** Destructive action on the workflow, rendered as a `danger` button before Continue/Complete. */
10277
10274
  destructiveAction?: WorkflowDestructiveAction;
10278
- /** Label for the completion button shown on the last step (or when there is no next step). */
10279
- completeLabel: "Create" | "Save";
10280
10275
  /** Called when the completion button is clicked. */
10281
10276
  onComplete: (e: PressEvent) => void | Promise<void>;
10277
+ /** `"Create"`, `"Save"`, or `"Publish"`. Defaults to `"Save"`. */
10278
+ completeLabel?: WorkflowCompleteLabel;
10279
+ /** One-off label. Wins over `completeLabel`. Confirm with product and/or design first. */
10280
+ nonStandardCompleteLabel?: string;
10282
10281
  /** Continue/Complete is disabled. A ReactNode is shown in Beam's tooltip. */
10283
10282
  primaryDisabled?: boolean | ReactNode;
10284
10283
  /** When true, Continue/Complete use the `ai` button variant instead of `primary`. */
@@ -11640,14 +11639,14 @@ type RightPaneTrigger = {
11640
11639
  /** The pending in-app navigation, as React Router reports it (pathnames are basename-stripped). */
11641
11640
  type AllowNavigationArgs = Parameters<BlockerFunction>[0];
11642
11641
 
11643
- type FocusedFormLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "completeLabel" | "onComplete" | "onSaveAndExit" | "destructiveAction"> & {
11644
- /** Create/Save is disabled. A ReactNode is shown in Beam's tooltip. */
11642
+ type FocusedFormLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "onComplete" | "onSaveAndExit" | "destructiveAction" | "completeLabel" | "nonStandardCompleteLabel"> & {
11643
+ /** Create/Save/Publish is disabled. A ReactNode is shown in Beam's tooltip. */
11645
11644
  primaryDisabled?: WorkflowActionsProps["primaryDisabled"];
11646
11645
  /** Read on Cancel / leave — a callback so flipping dirty does not re-render. */
11647
11646
  isDirty?: () => boolean;
11648
11647
  /** Consulted only while dirty — return true to allow a route change that stays on this form. */
11649
11648
  allowNavigation?: (args: AllowNavigationArgs) => boolean;
11650
- /** Full-bleed AI wash on the body and the `ai` Create/Save variant. Pair with body `aiMode` (e.g. FormSectionLayout). */
11649
+ /** Full-bleed AI wash on the body and the `ai` Create/Save/Publish variant. Pair with body `aiMode` (e.g. FormSectionLayout). */
11651
11650
  aiMode?: boolean;
11652
11651
  /** Icon triggers that open the document-scroll right pane. Hosts the pane — do not also set `withRightPane` on the body. */
11653
11652
  rightPaneTriggers?: RightPaneTrigger[];
@@ -11676,7 +11675,7 @@ type StepperLayoutStep = Omit<StepperTabsStep, "value" | "disabled"> & {
11676
11675
  /** Icon triggers for this step. Chrome is rendered by the workflow; the pane closes on step change. */
11677
11676
  rightPaneTriggers?: RightPaneTrigger[];
11678
11677
  };
11679
- type StepperLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "completeLabel" | "onComplete" | "onSaveAndExit" | "destructiveAction"> & {
11678
+ type StepperLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "onComplete" | "onSaveAndExit" | "destructiveAction" | "completeLabel" | "nonStandardCompleteLabel"> & {
11680
11679
  /** The workflow's steps; the active step's `content` is the body, and it drives the header's tab strip. */
11681
11680
  steps: StepperLayoutStep[];
11682
11681
  /** The step shown initially (matched against `defaultTestId(step.label)`); falls back to the first step if omitted or if it doesn't match any step. Uncontrolled — the layout owns step navigation from here. */
package/dist/index.d.ts CHANGED
@@ -5678,8 +5678,6 @@ type SelectedState = "checked" | "unchecked" | "partial";
5678
5678
  declare class TableState<R extends Kinded> {
5679
5679
  private persistCollapse;
5680
5680
  private rows;
5681
- /** Deepest data-row level, set with the rows. `0` when the table has a single level. Every row's type is chosen from this. */
5682
- maxNestingLevel: number;
5683
5681
  columns: GridColumnWithId<R>[];
5684
5682
  readonly api: GridTableApi<R>;
5685
5683
  private readonly rowStates;
@@ -5780,8 +5778,6 @@ declare class RowStates<R extends Kinded> {
5780
5778
  private keptGroupRow;
5781
5779
  /** The first level of rows, i.e. not the header (or kept group), but the totals + top-level children. */
5782
5780
  private topRows;
5783
- /** Deepest data-row level from the latest `setRows`. `0` when every body row is top-level. */
5784
- maxNestingLevel: number;
5785
5781
  constructor(table: TableState<R>);
5786
5782
  /** Returns a flat list of all of our RowStates. */
5787
5783
  get allStates(): RowState<R>[];
@@ -10268,6 +10264,7 @@ type WorkflowDestructiveAction = {
10268
10264
  confirmTitle?: ReactNode;
10269
10265
  confirmMessage?: ReactNode;
10270
10266
  };
10267
+ type WorkflowCompleteLabel = "Create" | "Save" | "Publish";
10271
10268
  type WorkflowActionsProps = {
10272
10269
  /** Leaves the workflow without saving. Always shown. */
10273
10270
  onCancel: (e: PressEvent) => void;
@@ -10275,10 +10272,12 @@ type WorkflowActionsProps = {
10275
10272
  onSaveAndExit?: (e: PressEvent) => void | Promise<void>;
10276
10273
  /** Destructive action on the workflow, rendered as a `danger` button before Continue/Complete. */
10277
10274
  destructiveAction?: WorkflowDestructiveAction;
10278
- /** Label for the completion button shown on the last step (or when there is no next step). */
10279
- completeLabel: "Create" | "Save";
10280
10275
  /** Called when the completion button is clicked. */
10281
10276
  onComplete: (e: PressEvent) => void | Promise<void>;
10277
+ /** `"Create"`, `"Save"`, or `"Publish"`. Defaults to `"Save"`. */
10278
+ completeLabel?: WorkflowCompleteLabel;
10279
+ /** One-off label. Wins over `completeLabel`. Confirm with product and/or design first. */
10280
+ nonStandardCompleteLabel?: string;
10282
10281
  /** Continue/Complete is disabled. A ReactNode is shown in Beam's tooltip. */
10283
10282
  primaryDisabled?: boolean | ReactNode;
10284
10283
  /** When true, Continue/Complete use the `ai` button variant instead of `primary`. */
@@ -11640,14 +11639,14 @@ type RightPaneTrigger = {
11640
11639
  /** The pending in-app navigation, as React Router reports it (pathnames are basename-stripped). */
11641
11640
  type AllowNavigationArgs = Parameters<BlockerFunction>[0];
11642
11641
 
11643
- type FocusedFormLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "completeLabel" | "onComplete" | "onSaveAndExit" | "destructiveAction"> & {
11644
- /** Create/Save is disabled. A ReactNode is shown in Beam's tooltip. */
11642
+ type FocusedFormLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "onComplete" | "onSaveAndExit" | "destructiveAction" | "completeLabel" | "nonStandardCompleteLabel"> & {
11643
+ /** Create/Save/Publish is disabled. A ReactNode is shown in Beam's tooltip. */
11645
11644
  primaryDisabled?: WorkflowActionsProps["primaryDisabled"];
11646
11645
  /** Read on Cancel / leave — a callback so flipping dirty does not re-render. */
11647
11646
  isDirty?: () => boolean;
11648
11647
  /** Consulted only while dirty — return true to allow a route change that stays on this form. */
11649
11648
  allowNavigation?: (args: AllowNavigationArgs) => boolean;
11650
- /** Full-bleed AI wash on the body and the `ai` Create/Save variant. Pair with body `aiMode` (e.g. FormSectionLayout). */
11649
+ /** Full-bleed AI wash on the body and the `ai` Create/Save/Publish variant. Pair with body `aiMode` (e.g. FormSectionLayout). */
11651
11650
  aiMode?: boolean;
11652
11651
  /** Icon triggers that open the document-scroll right pane. Hosts the pane — do not also set `withRightPane` on the body. */
11653
11652
  rightPaneTriggers?: RightPaneTrigger[];
@@ -11676,7 +11675,7 @@ type StepperLayoutStep = Omit<StepperTabsStep, "value" | "disabled"> & {
11676
11675
  /** Icon triggers for this step. Chrome is rendered by the workflow; the pane closes on step change. */
11677
11676
  rightPaneTriggers?: RightPaneTrigger[];
11678
11677
  };
11679
- type StepperLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "completeLabel" | "onComplete" | "onSaveAndExit" | "destructiveAction"> & {
11678
+ type StepperLayoutProps = Pick<BaseHeaderProps, "title" | "documentTitleSuffix" | "breadcrumbs"> & Pick<WorkflowActionsProps, "onCancel" | "onComplete" | "onSaveAndExit" | "destructiveAction" | "completeLabel" | "nonStandardCompleteLabel"> & {
11680
11679
  /** The workflow's steps; the active step's `content` is the body, and it drives the header's tab strip. */
11681
11680
  steps: StepperLayoutStep[];
11682
11681
  /** The step shown initially (matched against `defaultTestId(step.label)`); falls back to the first step if omitted or if it doesn't match any step. Uncontrolled — the layout owns step navigation from here. */
package/dist/index.js CHANGED
@@ -6762,13 +6762,13 @@ function hierarchyFirstContentCss(opts) {
6762
6762
  const {
6763
6763
  level,
6764
6764
  skipIndent,
6765
- maxLevel
6765
+ hasChildren
6766
6766
  } = opts;
6767
6767
  const paddingLeft = skipIndent ? void 0 : hierarchyIndentPaddingPx(level);
6768
- const type = hierarchyLevelType(level, maxLevel);
6769
- if (!type && paddingLeft === void 0) return void 0;
6768
+ const typeStyle = hierarchyLevelType(level, hasChildren);
6769
+ if (!typeStyle && paddingLeft === void 0) return void 0;
6770
6770
  return {
6771
- ...type ?? {},
6771
+ ...typeStyle ?? {},
6772
6772
  ...paddingLeft !== void 0 ? {
6773
6773
  paddingLeft: ["pl_var", {
6774
6774
  "--paddingLeft": `${paddingLeft}px`
@@ -6776,16 +6776,20 @@ function hierarchyFirstContentCss(opts) {
6776
6776
  } : {}
6777
6777
  };
6778
6778
  }
6779
- function hierarchyLevelType(level, maxLevel) {
6780
- if (level >= maxLevel) return void 0;
6781
- return level === 0 ? {
6779
+ function hierarchyLevelType(level, hasChildren) {
6780
+ if (level === 0) return hasChildren ? {
6782
6781
  fontWeight: "fw6",
6783
6782
  fontSize: "fz_14px",
6784
6783
  lineHeight: "lh_20px"
6785
- } : {
6784
+ } : void 0;
6785
+ return hasChildren ? {
6786
6786
  fontWeight: "fw6",
6787
6787
  fontSize: "fz_12px",
6788
6788
  lineHeight: "lh_16px"
6789
+ } : {
6790
+ fontWeight: "fw4",
6791
+ fontSize: "fz_12px",
6792
+ lineHeight: "lh_16px"
6789
6793
  };
6790
6794
  }
6791
6795
  var loadingTableCss = {
@@ -8316,8 +8320,6 @@ var RowStates = class {
8316
8320
  keptGroupRow;
8317
8321
  /** The first level of rows, i.e. not the header (or kept group), but the totals + top-level children. */
8318
8322
  topRows = [];
8319
- /** Deepest data-row level from the latest `setRows`. `0` when every body row is top-level. */
8320
- maxNestingLevel = 0;
8321
8323
  constructor(table) {
8322
8324
  this.table = table;
8323
8325
  this.header = this.createHeaderRow();
@@ -8345,8 +8347,7 @@ var RowStates = class {
8345
8347
  const map = this.map;
8346
8348
  const seenIds = /* @__PURE__ */ new Set();
8347
8349
  const maybeKept = new Set(this.map.values());
8348
- let maxNestingLevel = 0;
8349
- function addRowAndChildren(parent, row, level) {
8350
+ function addRowAndChildren(parent, row) {
8350
8351
  const key = row.id;
8351
8352
  if (seenIds.has(key)) {
8352
8353
  throw new Error(`Duplicate row id ${key}`);
@@ -8363,15 +8364,12 @@ var RowStates = class {
8363
8364
  state.removed = false;
8364
8365
  maybeKept.delete(state);
8365
8366
  }
8366
- const reserved = reservedRowKinds.includes(row.kind);
8367
- if (!reserved && level > maxNestingLevel) maxNestingLevel = level;
8368
- state.children = row.children?.map((child) => addRowAndChildren(state, child, reserved ? level : level + 1));
8367
+ state.children = row.children?.map((child) => addRowAndChildren(state, child));
8369
8368
  return state;
8370
8369
  }
8371
8370
  const headerRow = rows.find((r) => r.kind === HEADER);
8372
8371
  this.header.row = headerRow || missingHeader;
8373
- this.topRows = rows.filter((row) => row !== headerRow).map((row) => addRowAndChildren(this.header, row, 0));
8374
- this.maxNestingLevel = maxNestingLevel;
8372
+ this.topRows = rows.filter((row) => row !== headerRow).map((row) => addRowAndChildren(this.header, row));
8375
8373
  this.header.children = [this.keptGroupRow, ...this.topRows];
8376
8374
  for (const state of maybeKept) state.markRemoved();
8377
8375
  if (this.topRows.some((rs) => !reservedRowKinds.includes(rs.row.kind))) {
@@ -8573,8 +8571,6 @@ var TableState = class {
8573
8571
  persistCollapse;
8574
8572
  // The current list of rows, basically a useRef.current. Only shallow reactive.
8575
8573
  rows = [];
8576
- /** Deepest data-row level, set with the rows. `0` when the table has a single level. Every row's type is chosen from this. */
8577
- maxNestingLevel = 0;
8578
8574
  // The current list of columns, basically a useRef.current. Only ref reactive.
8579
8575
  columns = [];
8580
8576
  api;
@@ -8672,7 +8668,6 @@ var TableState = class {
8672
8668
  setRows(rows) {
8673
8669
  this.rowStates.setRows(rows);
8674
8670
  this.rows = rows;
8675
- this.maxNestingLevel = this.rowStates.maxNestingLevel;
8676
8671
  }
8677
8672
  setColumns(columns, visibleColumnsStorageKey) {
8678
8673
  if (columns !== this.columns) {
@@ -10866,7 +10861,7 @@ function RowImpl(props) {
10866
10861
  ...isBodyRow && applyFirstContentColumnStyles && hierarchyFirstContentCss({
10867
10862
  level,
10868
10863
  skipIndent: levelIndent !== void 0 || !hasCollapseColumn,
10869
- maxLevel: tableState.maxNestingLevel
10864
+ hasChildren: !!row.children?.length
10870
10865
  }),
10871
10866
  // Apply any declarative column border styling after header/body defaults.
10872
10867
  ...getColumnBorderCss(column2.border, style),
@@ -33945,26 +33940,28 @@ function WorkflowActions(props) {
33945
33940
  onCancel,
33946
33941
  onSaveAndExit,
33947
33942
  destructiveAction,
33948
- completeLabel,
33949
33943
  onComplete,
33950
33944
  primaryDisabled,
33951
33945
  aiMode = false,
33952
33946
  isFirstStep = true,
33953
33947
  isLastStep = true,
33954
33948
  onBack,
33955
- onContinue
33949
+ onContinue,
33950
+ completeLabel,
33951
+ nonStandardCompleteLabel
33956
33952
  } = props;
33957
33953
  const {
33958
33954
  sm: isMobile
33959
33955
  } = useBreakpoint();
33960
33956
  const primaryVariant = aiMode ? "ai" : "primary";
33957
+ const completeButtonLabel = nonStandardCompleteLabel ?? completeLabel ?? "Save";
33961
33958
  return /* @__PURE__ */ jsxs147("div", { className: "df aic jcsb sm_w100", children: [
33962
33959
  /* @__PURE__ */ jsx273("div", { className: "df aic", children: !isFirstStep && isMobile && onBack && /* @__PURE__ */ jsx273(IconButton, { icon: "arrowBack", label: "Back", onClick: onBack }) }),
33963
33960
  /* @__PURE__ */ jsxs147("div", { className: "df aic g_1", children: [
33964
33961
  /* @__PURE__ */ jsx273(Button, { label: "Cancel", variant: "quaternary", onClick: onCancel }),
33965
33962
  onSaveAndExit && /* @__PURE__ */ jsx273(Button, { label: "Save & Exit", variant: "secondary", onClick: onSaveAndExit }),
33966
33963
  destructiveAction && /* @__PURE__ */ jsx273(Button, { label: destructiveAction.label ?? "Remove", variant: "danger", onClick: destructiveAction.onConfirm }),
33967
- isLastStep ? /* @__PURE__ */ jsx273(Button, { label: completeLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ jsx273(Button, { label: "Continue", variant: primaryVariant, onClick: async () => {
33964
+ isLastStep ? /* @__PURE__ */ jsx273(Button, { label: completeButtonLabel, variant: primaryVariant, onClick: onComplete, disabled: primaryDisabled }) : /* @__PURE__ */ jsx273(Button, { label: "Continue", variant: primaryVariant, onClick: async () => {
33968
33965
  await onContinue?.();
33969
33966
  }, disabled: primaryDisabled })
33970
33967
  ] })
@@ -33992,7 +33989,15 @@ function WorkflowPageLayout(props) {
33992
33989
  destructiveAction,
33993
33990
  rightPaneTriggers,
33994
33991
  banner: bannerProp,
33995
- ...actionProps
33992
+ onSaveAndExit,
33993
+ onComplete,
33994
+ primaryDisabled,
33995
+ isFirstStep,
33996
+ isLastStep,
33997
+ onBack,
33998
+ onContinue,
33999
+ completeLabel,
34000
+ nonStandardCompleteLabel
33996
34001
  } = props;
33997
34002
  const tid = useTestIds(props, "workflowPageLayout");
33998
34003
  const {
@@ -34012,7 +34017,7 @@ function WorkflowPageLayout(props) {
34012
34017
  onCancel,
34013
34018
  destructiveAction
34014
34019
  });
34015
- const actions = /* @__PURE__ */ jsx274(WorkflowActions, { ...actionProps, aiMode, onCancel: onCancelClick, destructiveAction: destructiveAction && {
34020
+ const actions = /* @__PURE__ */ jsx274(WorkflowActions, { completeLabel, nonStandardCompleteLabel, onSaveAndExit, onComplete, primaryDisabled, isFirstStep, isLastStep, onBack, onContinue, aiMode, onCancel: onCancelClick, destructiveAction: destructiveAction && {
34016
34021
  ...destructiveAction,
34017
34022
  onConfirm: onDestructiveActionClick
34018
34023
  } });
@@ -34140,7 +34145,6 @@ import { jsx as jsx275 } from "react/jsx-runtime";
34140
34145
  function FocusedFormLayout(props) {
34141
34146
  const {
34142
34147
  onCancel,
34143
- completeLabel,
34144
34148
  onComplete,
34145
34149
  onSaveAndExit,
34146
34150
  destructiveAction,
@@ -34151,14 +34155,20 @@ function FocusedFormLayout(props) {
34151
34155
  rightPaneTriggers,
34152
34156
  banner,
34153
34157
  children,
34154
- ...headerProps
34158
+ title,
34159
+ documentTitleSuffix,
34160
+ breadcrumbs,
34161
+ completeLabel,
34162
+ nonStandardCompleteLabel
34155
34163
  } = props;
34156
34164
  const tid = useTestIds(props, "focusedFormLayout");
34157
34165
  return /* @__PURE__ */ jsx275(
34158
34166
  WorkflowPageLayout,
34159
34167
  {
34160
34168
  ...tid,
34161
- ...headerProps,
34169
+ title,
34170
+ documentTitleSuffix,
34171
+ breadcrumbs,
34162
34172
  banner,
34163
34173
  aiMode,
34164
34174
  isDirty,
@@ -34167,6 +34177,7 @@ function FocusedFormLayout(props) {
34167
34177
  onSaveAndExit,
34168
34178
  destructiveAction,
34169
34179
  completeLabel,
34180
+ nonStandardCompleteLabel,
34170
34181
  onComplete,
34171
34182
  primaryDisabled,
34172
34183
  rightPaneTriggers,
@@ -34183,7 +34194,6 @@ function StepperLayout(props) {
34183
34194
  steps,
34184
34195
  defaultStep,
34185
34196
  onCancel,
34186
- completeLabel,
34187
34197
  onComplete,
34188
34198
  onSaveAndExit,
34189
34199
  destructiveAction,
@@ -34191,7 +34201,11 @@ function StepperLayout(props) {
34191
34201
  allowNavigation,
34192
34202
  aiMode,
34193
34203
  banner,
34194
- ...headerProps
34204
+ title,
34205
+ documentTitleSuffix,
34206
+ breadcrumbs,
34207
+ completeLabel,
34208
+ nonStandardCompleteLabel
34195
34209
  } = props;
34196
34210
  const stepTabs = steps.map((step) => ({ ...step, value: defaultTestId(step.label) }));
34197
34211
  const [currentStep, setCurrentStep] = useState72(() => getInitialStep(stepTabs, defaultStep));
@@ -34208,7 +34222,9 @@ function StepperLayout(props) {
34208
34222
  WorkflowPageLayout,
34209
34223
  {
34210
34224
  ...tid,
34211
- ...headerProps,
34225
+ title,
34226
+ documentTitleSuffix,
34227
+ breadcrumbs,
34212
34228
  banner,
34213
34229
  aiMode,
34214
34230
  stepperTabs: { steps: stepTabs, currentStep, onChange: goToStep },
@@ -34224,6 +34240,7 @@ function StepperLayout(props) {
34224
34240
  onSaveAndExit,
34225
34241
  destructiveAction,
34226
34242
  completeLabel,
34243
+ nonStandardCompleteLabel,
34227
34244
  onComplete,
34228
34245
  primaryDisabled: activeStep?.primaryDisabled,
34229
34246
  rightPaneTriggers: activeStep?.rightPaneTriggers,