@homebound/beam 3.52.0 → 3.54.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
@@ -136,7 +136,6 @@ __export(index_exports, {
136
136
  NavbarLayout: () => NavbarLayout,
137
137
  NumberField: () => NumberField,
138
138
  OpenModal: () => OpenModal,
139
- PageHeader: () => PageHeader2,
140
139
  PageHeaderLayout: () => PageHeaderLayout,
141
140
  Pagination: () => Pagination,
142
141
  Palette: () => Palette,
@@ -20415,6 +20414,27 @@ function invertSpacing(value) {
20415
20414
  var import_utils131 = require("@react-aria/utils");
20416
20415
  var import_react113 = __toESM(require("react"), 1);
20417
20416
 
20417
+ // src/components/Filters/utils.tsx
20418
+ function getActiveFilterCount(filter) {
20419
+ return safeKeys(filter).filter((key) => isDefined(filter[key])).length;
20420
+ }
20421
+ function updateFilter(currentFilter, key, value) {
20422
+ if (value === void 0) {
20423
+ return omitKey(key, currentFilter);
20424
+ } else {
20425
+ return { ...currentFilter, [key]: value };
20426
+ }
20427
+ }
20428
+ var filterTestIdPrefix = "filter";
20429
+
20430
+ // src/components/Layout/layoutTypes.ts
20431
+ function isGridTableProps(props) {
20432
+ return "rows" in props;
20433
+ }
20434
+
20435
+ // src/components/Layout/GridTableLayout/GridTableLayoutActions.tsx
20436
+ var import_react110 = require("react");
20437
+
20418
20438
  // src/components/ButtonMenu.tsx
20419
20439
  var import_react105 = require("react");
20420
20440
  var import_react_aria51 = require("react-aria");
@@ -20452,27 +20472,6 @@ function isSelectionButtonMenuProps(props) {
20452
20472
  return typeof props === "object" && "selectedItem" in props && "onChange" in props;
20453
20473
  }
20454
20474
 
20455
- // src/components/Filters/utils.tsx
20456
- function getActiveFilterCount(filter) {
20457
- return safeKeys(filter).filter((key) => isDefined(filter[key])).length;
20458
- }
20459
- function updateFilter(currentFilter, key, value) {
20460
- if (value === void 0) {
20461
- return omitKey(key, currentFilter);
20462
- } else {
20463
- return { ...currentFilter, [key]: value };
20464
- }
20465
- }
20466
- var filterTestIdPrefix = "filter";
20467
-
20468
- // src/components/Layout/layoutTypes.ts
20469
- function isGridTableProps(props) {
20470
- return "rows" in props;
20471
- }
20472
-
20473
- // src/components/Layout/GridTableLayout/GridTableLayoutActions.tsx
20474
- var import_react110 = require("react");
20475
-
20476
20475
  // src/components/CountBadge.tsx
20477
20476
  var import_runtime81 = require("@homebound/truss/runtime");
20478
20477
  var import_jsx_runtime140 = require("react/jsx-runtime");
@@ -21342,7 +21341,8 @@ function GridTableLayoutActionsComponent(props) {
21342
21341
  view,
21343
21342
  setView,
21344
21343
  clearFilters,
21345
- searchApi
21344
+ searchApi,
21345
+ actionMenu
21346
21346
  } = props;
21347
21347
  const testId = useTestIds(props, "gridTableLayoutActions");
21348
21348
  const {
@@ -21412,9 +21412,12 @@ function GridTableLayoutActionsComponent(props) {
21412
21412
  /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(Icon, { icon: showFilters ? "chevronUp" : "chevronDown" })
21413
21413
  ] }), variant: "secondaryBlack", onClick: () => setShowFilters(!showFilters), active: showFilters, ...testId.filterButton })
21414
21414
  ] }),
21415
- (hasHideableColumns || withCardView) && /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)("div", { className: "df gap_12px", children: [
21415
+ (hasHideableColumns || withCardView || actionMenu) && /* @__PURE__ */ (0, import_jsx_runtime156.jsxs)("div", { className: "df aic gap_12px", children: [
21416
21416
  hasHideableColumns && view === "list" && columns && api && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(EditColumnsButton, { columns, api, tooltip: "Display columns" }),
21417
- withCardView && view !== void 0 && setView && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(ViewToggleButton, { view, onChange: setView })
21417
+ withCardView && view !== void 0 && setView && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(ViewToggleButton, { view, onChange: setView }),
21418
+ actionMenu && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)(ButtonMenu, { ...actionMenu, trigger: {
21419
+ icon: "verticalDots"
21420
+ } })
21418
21421
  ] })
21419
21422
  ] }),
21420
21423
  sm && showSearch && /* @__PURE__ */ (0, import_jsx_runtime156.jsx)("div", { className: "pl3 pr3", children: searchTextField }),
@@ -21543,13 +21546,8 @@ var __maybeInc15 = (inc) => {
21543
21546
  };
21544
21547
  function GridTableLayoutComponent(props) {
21545
21548
  const {
21546
- pageTitle,
21547
- breadCrumb,
21548
21549
  tableProps,
21549
21550
  layoutState,
21550
- primaryAction,
21551
- secondaryAction,
21552
- tertiaryAction,
21553
21551
  actionMenu,
21554
21552
  hideEditColumns = false,
21555
21553
  withCardView,
@@ -21566,7 +21564,7 @@ function GridTableLayoutComponent(props) {
21566
21564
  const api = (0, import_react113.useMemo)(() => tableProps.api ?? new GridTableApiImpl(), [tableProps.api]);
21567
21565
  const [view, setView] = usePersistedTableView(defaultView, !!withCardView);
21568
21566
  const clientSearch = layoutState?.search === "client" ? layoutState.searchString : void 0;
21569
- const showTableActions = !!(layoutState?.filterDefs || layoutState?.search || hasHideableColumns || withCardView);
21567
+ const showTableActions = !!(layoutState?.filterDefs || layoutState?.search || hasHideableColumns || withCardView || actionMenu);
21570
21568
  const isVirtualized = tableProps.as === "virtual" || !!withCardView && view === "card";
21571
21569
  const inDocumentScrollLayout = useDocumentScrollLayout();
21572
21570
  const tableActionsRef = (0, import_react113.useRef)(null);
@@ -21588,7 +21586,7 @@ function GridTableLayoutComponent(props) {
21588
21586
  searchApiRef.current?.clear();
21589
21587
  }, [layoutState]);
21590
21588
  const emptyState = (0, import_react113.useMemo)(() => composeEmptyState(tableProps, layoutState, layoutEmptyFallback, clearFilters), [layoutEmptyFallback, layoutState, tableProps, clearFilters]);
21591
- const tableActionsEl = /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(_GridTableLayoutActions, { filterDefs: layoutState?.filterDefs, filter: layoutState?.filter, setFilter: layoutState?.setFilter, groupBy: layoutState?.groupBy, searchProps: filterSearchProps, hasHideableColumns, columns, api, withCardView, view, setView, clearFilters, searchApi: searchApiRef });
21589
+ const tableActionsEl = /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(_GridTableLayoutActions, { filterDefs: layoutState?.filterDefs, filter: layoutState?.filter, setFilter: layoutState?.setFilter, groupBy: layoutState?.groupBy, searchProps: filterSearchProps, hasHideableColumns, columns, api, withCardView, view, setView, clearFilters, searchApi: searchApiRef, actionMenu });
21592
21590
  const cardAs = withCardView && view === "card" ? "card" : void 0;
21593
21591
  const tableStyle = resolveGridTableLayoutStyle(tableProps.style, inDocumentScrollLayout);
21594
21592
  const tableBody = /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(import_jsx_runtime159.Fragment, { children: isGridTableProps(tableProps) ? /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(GridTable, { ...tableProps, ...cardAs ? {
@@ -21620,10 +21618,10 @@ function GridTableLayoutComponent(props) {
21620
21618
  }), ...tid.stickyContent, children: tableActionsEl }),
21621
21619
  inDocumentScrollLayout ? tableBody : /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(ScrollableContent, { virtualized: isVirtualized, children: tableBody })
21622
21620
  ] });
21623
- return /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)(import_jsx_runtime159.Fragment, { children: [
21624
- pageTitle && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Header2, { pageTitle, breadCrumb, primaryAction, secondaryAction, tertiaryAction, actionMenu }),
21621
+ return (
21622
+ /* Wrapper sets --beam-table-actions-height so GridTable's sticky header can read it. */
21625
21623
  /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("div", { ref: tableWrapperRef, className: "display_contents", ...tid.tableWrapper, children: tableScrollContent })
21626
- ] });
21624
+ );
21627
21625
  }
21628
21626
  var GridTableLayout = import_react113.default.memo(GridTableLayoutComponent);
21629
21627
  function validateColumns(columns) {
@@ -21711,43 +21709,6 @@ function useSetTableActionsHeight(tableWrapperRef, tableActionsRef, enabled) {
21711
21709
  };
21712
21710
  }, [tableWrapperRef, syncHeightVar]);
21713
21711
  }
21714
- function Header2(props) {
21715
- const {
21716
- pageTitle,
21717
- breadCrumb,
21718
- primaryAction,
21719
- secondaryAction,
21720
- tertiaryAction,
21721
- actionMenu
21722
- } = props;
21723
- const tids = useTestIds(props);
21724
- return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(FullBleed, { children: /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)("header", { ...(0, import_runtime88.trussProps)({
21725
- ...{
21726
- paddingTop: "pt3",
21727
- paddingBottom: "pb3",
21728
- paddingRight: "pr3",
21729
- paddingLeft: "pl3",
21730
- minHeight: "mh_50px",
21731
- backgroundColor: "bgWhite",
21732
- display: "df",
21733
- justifyContent: "jcsb",
21734
- alignItems: "aic"
21735
- }
21736
- }), ...tids.header, children: [
21737
- /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)("div", { children: [
21738
- breadCrumb && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(PageHeaderBreadcrumbs, { breadcrumb: breadCrumb }),
21739
- /* @__PURE__ */ (0, import_jsx_runtime159.jsx)("h1", { className: "fw6 fz_30px lh_36px mt1", ...tids.pageTitle, children: pageTitle })
21740
- ] }),
21741
- /* @__PURE__ */ (0, import_jsx_runtime159.jsxs)("div", { className: "df fwr jcfe gap1 aic", children: [
21742
- tertiaryAction && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Button, { ...tertiaryAction, variant: "tertiary" }),
21743
- secondaryAction && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Button, { ...secondaryAction, variant: "secondary" }),
21744
- primaryAction && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(Button, { ...primaryAction }),
21745
- actionMenu && /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(ButtonMenu, { ...actionMenu, trigger: {
21746
- icon: "verticalDots"
21747
- } })
21748
- ] })
21749
- ] }) });
21750
- }
21751
21712
  function resolveGridTableLayoutStyle(userStyle, inDocumentScrollLayout) {
21752
21713
  const layoutDefaults = {
21753
21714
  allWhite: true,
@@ -24130,409 +24091,91 @@ function NavbarUserMenu({
24130
24091
  }, placement: "right", ...tid }) });
24131
24092
  }
24132
24093
 
24133
- // src/components/Tabs.tsx
24134
- var import_change_case9 = require("change-case");
24135
- var import_react138 = require("react");
24136
- var import_react_aria62 = require("react-aria");
24137
- var import_react_router = require("react-router");
24138
- var import_react_router_dom8 = require("react-router-dom");
24139
- var import_runtime110 = require("@homebound/truss/runtime");
24094
+ // src/components/Pagination.tsx
24140
24095
  var import_jsx_runtime190 = require("react/jsx-runtime");
24141
- function TabsWithContent(props) {
24142
- const styles = hideTabs(props) ? {} : {
24143
- paddingTop: "pt3"
24144
- };
24145
- return /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)(import_jsx_runtime190.Fragment, { children: [
24146
- /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(Tabs, { ...props }),
24147
- /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(TabContent, { ...props, contentXss: {
24148
- ...styles,
24149
- ...props.contentXss
24150
- } })
24151
- ] });
24152
- }
24153
- function TabContent(props) {
24154
- const tid = useTestIds(props, "tab");
24155
- const {
24156
- tabs,
24157
- contentXss = {},
24158
- omitFullBleedPadding = false
24159
- } = props;
24160
- const location = (0, import_react_router_dom8.useLocation)();
24161
- const selectedTab = isRouteTabs(props) ? props.tabs.find((t) => {
24162
- const paths = Array.isArray(t.path) ? t.path : [t.path];
24163
- return paths.some((p) => !!(0, import_react_router.matchPath)({
24164
- path: p,
24165
- end: true
24166
- }, location.pathname));
24167
- }) || tabs[0] : props.tabs.find((tab) => tab.value === props.selected) || tabs[0];
24168
- const uniqueValue = uniqueTabValue(selectedTab);
24169
- return (
24170
- // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.
24171
- // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.
24172
- /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(FullBleed, { omitPadding: omitFullBleedPadding, children: /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { "aria-labelledby": `${uniqueValue}-tab`, id: `${uniqueValue}-tabPanel`, role: "tabpanel", tabIndex: 0, ...tid.panel, ...(0, import_runtime110.trussProps)(contentXss), children: selectedTab.render() }) })
24173
- );
24174
- }
24175
- function Tabs(props) {
24096
+ var defaultPage = {
24097
+ offset: 0,
24098
+ limit: 100
24099
+ };
24100
+ function Pagination(props) {
24176
24101
  const {
24177
- ariaLabel,
24178
- tabs,
24179
- includeBottomBorder,
24180
- right,
24181
- ...others
24102
+ totalCount,
24103
+ pageSizes = [100, 500, 1e3]
24182
24104
  } = props;
24183
- const location = (0, import_react_router_dom8.useLocation)();
24184
- const selected = isRouteTabs(props) ? uniqueTabValue(props.tabs.find((t) => {
24185
- const paths = Array.isArray(t.path) ? t.path : [t.path];
24186
- return paths.some((p) => !!(0, import_react_router.matchPath)({
24187
- path: p,
24188
- end: true
24189
- }, location.pathname));
24190
- }) || props.tabs[0]) : props.selected;
24105
+ const [page, setPage] = props.page;
24191
24106
  const {
24192
- isFocusVisible,
24193
- focusProps
24194
- } = (0, import_react_aria62.useFocusRing)();
24195
- const tid = useTestIds(others, "tabs");
24196
- const [active, setActive] = (0, import_react138.useState)(selected);
24197
- const ref = (0, import_react138.useRef)(null);
24198
- (0, import_react138.useEffect)(() => setActive(selected), [selected]);
24199
- function onKeyUp(e) {
24200
- if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
24201
- const nextTabValue = getNextTabValue(active, e.key, tabs);
24202
- setActive(nextTabValue);
24203
- document.getElementById(`${nextTabValue}-tab`)?.focus();
24204
- }
24205
- }
24206
- function onClick(value) {
24207
- !isRouteTabs(props) && props.onChange(value);
24208
- }
24209
- function onBlur(e) {
24210
- if (!(ref.current && ref.current.contains(e.relatedTarget))) {
24211
- setActive(selected);
24107
+ pageSize,
24108
+ pageNumber
24109
+ } = toPageNumberSize(page);
24110
+ const pageOptions = pageSizes.map((size) => ({
24111
+ id: size,
24112
+ name: String(size)
24113
+ }));
24114
+ const hasPrevPage = pageNumber > 1;
24115
+ const hasNextPage = pageNumber < totalCount / pageSize;
24116
+ const first = pageSize * (pageNumber - 1) + (totalCount ? 1 : 0);
24117
+ const last = Math.min(pageSize * pageNumber, totalCount);
24118
+ const showLast = totalCount > 0;
24119
+ function set(newPage) {
24120
+ if ("pageNumber" in props.page[0]) {
24121
+ setPage(newPage);
24122
+ } else {
24123
+ setPage(toLimitAndOffset(newPage));
24212
24124
  }
24213
24125
  }
24214
- return /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { ...(0, import_runtime110.trussProps)({
24215
- ...{
24216
- display: "df",
24217
- alignItems: "aic",
24218
- overflow: "oa",
24219
- whiteSpace: "wsnw",
24220
- gap: "gap1"
24221
- },
24222
- ...includeBottomBorder ? {
24223
- ...{
24224
- borderBottomStyle: "bbs_solid",
24225
- borderBottomWidth: "bbw_1px",
24226
- borderColor: "bcGray200"
24227
- }
24228
- } : {}
24229
- }), children: [
24230
- !hideTabs(props) && /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { ref, className: "dif gap1 asfe", "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
24231
- const uniqueValue = uniqueTabValue(tab);
24232
- return /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(TabImpl, { active: active === uniqueValue, focusProps, isFocusVisible, onClick, onKeyUp, onBlur, tab, ...tid[defaultTestId(uniqueValue)] }, uniqueValue);
24233
- }) }),
24234
- right && /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { className: "mla df aic gap1 pb1", children: right })
24126
+ const tid = useTestIds(props, "pagination");
24127
+ return /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { className: "df bcGray200 bts_solid btw_1px fw4 fz_12px lh_16px gray500 pl2 pr2 pt2", ...tid, children: [
24128
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { className: "df mta mba mr2", ...tid.pageSizeLabel, children: "Page size:" }),
24129
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { className: "w_78px", children: /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(SelectField, { compact: true, label: "Page Size", labelStyle: "hidden", options: pageOptions, value: pageSize, onSelect: (val) => set({
24130
+ pageNumber: 1,
24131
+ pageSize: val
24132
+ }), autoSort: false, ...tid.pageSize }) }),
24133
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { className: "mla mta mba df", children: [
24134
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)("div", { className: "df mta mba mr2", ...tid.pageInfoLabel, children: [
24135
+ first,
24136
+ " ",
24137
+ showLast ? `- ${last}` : "",
24138
+ " of ",
24139
+ totalCount
24140
+ ] }),
24141
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(IconButton, { icon: "chevronLeft", color: hasPrevPage ? "rgba(29, 78, 216, 1)" /* Blue700 */ : "rgba(236, 235, 235, 1)" /* Gray200 */, onClick: () => set({
24142
+ pageNumber: pageNumber - 1,
24143
+ pageSize
24144
+ }), disabled: !hasPrevPage, ...tid.previousIcon }),
24145
+ /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(IconButton, { icon: "chevronRight", color: hasNextPage ? "rgba(29, 78, 216, 1)" /* Blue700 */ : "rgba(236, 235, 235, 1)" /* Gray200 */, onClick: () => set({
24146
+ pageNumber: pageNumber + 1,
24147
+ pageSize
24148
+ }), disabled: !hasNextPage, ...tid.nextIcon })
24149
+ ] })
24235
24150
  ] });
24236
24151
  }
24237
- function TabImpl(props) {
24152
+ function toLimitAndOffset(page) {
24153
+ return "limit" in page ? page : {
24154
+ // E.g. on first page the offset is 0, second page the offset is 100, then 200, etc.
24155
+ offset: (page.pageNumber - 1) * page.pageSize,
24156
+ limit: page.pageSize
24157
+ };
24158
+ }
24159
+ function toPageNumberSize(page) {
24160
+ return "pageNumber" in page ? page : {
24161
+ pageNumber: Math.floor(page.offset / page.limit) + 1,
24162
+ pageSize: page.limit
24163
+ };
24164
+ }
24165
+
24166
+ // src/components/ScrollShadows.tsx
24167
+ var import_utils158 = require("@react-aria/utils");
24168
+ var import_react138 = require("react");
24169
+ var import_runtime110 = require("@homebound/truss/runtime");
24170
+ var import_jsx_runtime191 = require("react/jsx-runtime");
24171
+ function ScrollShadows(props) {
24238
24172
  const {
24239
- tab,
24240
- onClick,
24241
- active,
24242
- onKeyUp,
24243
- onBlur,
24244
- focusProps,
24245
- isFocusVisible = false,
24246
- ...others
24173
+ children,
24174
+ xss,
24175
+ horizontal = false,
24176
+ bgColor = "rgba(255, 255, 255, 1)" /* White */
24247
24177
  } = props;
24248
- const {
24249
- disabled = false,
24250
- name: label,
24251
- icon,
24252
- endAdornment
24253
- } = tab;
24254
- const isDisabled = !!disabled;
24255
- const {
24256
- hoverProps,
24257
- isHovered
24258
- } = (0, import_react_aria62.useHover)({
24259
- isDisabled
24260
- });
24261
- const {
24262
- baseStyles: baseStyles4,
24263
- activeStyles: activeStyles3,
24264
- focusRingStyles: focusRingStyles2,
24265
- hoverStyles: hoverStyles4,
24266
- disabledStyles: disabledStyles3,
24267
- activeHoverStyles
24268
- } = (0, import_react138.useMemo)(() => getTabStyles(), []);
24269
- const uniqueValue = uniqueTabValue(tab);
24270
- const tabProps = {
24271
- "aria-controls": `${uniqueValue}-tabPanel`,
24272
- "aria-selected": active,
24273
- "aria-disabled": isDisabled || void 0,
24274
- id: `${uniqueValue}-tab`,
24275
- role: "tab",
24276
- tabIndex: active ? 0 : -1,
24277
- ...others,
24278
- ...(0, import_runtime110.trussProps)({
24279
- ...baseStyles4,
24280
- ...active && activeStyles3,
24281
- ...isDisabled && disabledStyles3,
24282
- ...isHovered && hoverStyles4,
24283
- ...isHovered && active && activeHoverStyles,
24284
- ...isFocusVisible && active && focusRingStyles2
24285
- })
24286
- };
24287
- const interactiveProps = (0, import_react_aria62.mergeProps)(focusProps, hoverProps, {
24288
- onKeyUp,
24289
- onBlur,
24290
- ...isRouteTab(tab) ? {} : {
24291
- onClick: () => onClick(tab.value)
24292
- }
24293
- });
24294
- const tabLabel = /* @__PURE__ */ (0, import_jsx_runtime190.jsxs)(import_jsx_runtime190.Fragment, { children: [
24295
- label,
24296
- (icon || endAdornment) && /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("span", { className: "ml1", children: icon ? /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(Icon, { icon }) : endAdornment })
24297
- ] });
24298
- return isDisabled ? maybeTooltip({
24299
- title: resolveTooltip(disabled),
24300
- placement: "top",
24301
- children: /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("div", { ...tabProps, children: tabLabel })
24302
- }) : isRouteTab(tab) ? /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(import_react_router_dom8.Link, { ...(0, import_react_aria62.mergeProps)(tabProps, interactiveProps, {
24303
- className: "navLink"
24304
- }), to: tab.href, children: tabLabel }) : /* @__PURE__ */ (0, import_jsx_runtime190.jsx)("button", { ...{
24305
- ...tabProps,
24306
- ...interactiveProps
24307
- }, children: tabLabel });
24308
- }
24309
- function getTabStyles() {
24310
- const borderBottomWidthPx = 4;
24311
- const verticalPaddingPx = 6;
24312
- const borderBottomStyles = {
24313
- borderBottomStyle: "bbs_solid",
24314
- borderBottomWidth: ["borderBottomWidth_var", {
24315
- "--borderBottomWidth": (0, import_runtime110.maybeCssVar)(`${borderBottomWidthPx}px`)
24316
- }],
24317
- paddingBottom: ["pb_var", {
24318
- "--paddingBottom": `${verticalPaddingPx - borderBottomWidthPx}px`
24319
- }]
24320
- };
24321
- return {
24322
- baseStyles: {
24323
- display: "df",
24324
- alignItems: "aic",
24325
- height: "h_32px",
24326
- paddingTop: ["py_var", {
24327
- "--paddingTop": `${verticalPaddingPx}px`
24328
- }],
24329
- paddingBottom: ["py_var", {
24330
- "--paddingBottom": `${verticalPaddingPx}px`
24331
- }],
24332
- paddingLeft: "pl1",
24333
- paddingRight: "pr1",
24334
- outline: "outline0",
24335
- color: "gray700",
24336
- width: "width_fit_content",
24337
- cursor: "cursorPointer",
24338
- fontWeight: "fw4",
24339
- fontSize: "fz_14px",
24340
- lineHeight: "lh_20px"
24341
- },
24342
- activeStyles: {
24343
- ...{
24344
- borderColor: "bcBlue700",
24345
- fontWeight: "fw6",
24346
- fontSize: "fz_14px",
24347
- lineHeight: "lh_20px",
24348
- color: "gray900"
24349
- },
24350
- ...borderBottomStyles
24351
- },
24352
- disabledStyles: {
24353
- color: "gray400",
24354
- cursor: "cursorNotAllowed"
24355
- },
24356
- focusRingStyles: {
24357
- backgroundColor: "bgBlue50",
24358
- boxShadow: "bshFocus"
24359
- },
24360
- hoverStyles: {
24361
- ...{
24362
- borderColor: "bcGray400"
24363
- },
24364
- ...borderBottomStyles
24365
- },
24366
- activeHoverStyles: {
24367
- ...{
24368
- backgroundColor: "bgBlue50",
24369
- borderColor: "bcBlue700"
24370
- },
24371
- ...borderBottomStyles
24372
- }
24373
- };
24374
- }
24375
- function getNextTabValue(selected, key, tabs) {
24376
- const enabledTabs = tabs.filter((tab) => tab.disabled !== true);
24377
- const tabsToScan = key === "ArrowRight" ? enabledTabs : enabledTabs.reverse();
24378
- const currentIndex = tabsToScan.findIndex((tab) => uniqueTabValue(tab) === selected);
24379
- const nextIndex = currentIndex === tabsToScan.length - 1 ? 0 : currentIndex + 1;
24380
- return uniqueTabValue(tabsToScan[nextIndex]);
24381
- }
24382
- function isRouteTabs(props) {
24383
- const {
24384
- tabs
24385
- } = props;
24386
- return tabs.length > 0 && isRouteTab(tabs[0]);
24387
- }
24388
- function isRouteTab(tab) {
24389
- return "path" in tab;
24390
- }
24391
- function uniqueTabValue(tab) {
24392
- return isRouteTab(tab) ? (0, import_change_case9.camelCase)(tab.name) : tab.value;
24393
- }
24394
- function hideTabs(props) {
24395
- return props.alwaysShowAllTabs ? false : props.tabs.filter((t) => !t.disabled).length === 1;
24396
- }
24397
-
24398
- // src/components/PageHeader.tsx
24399
- var import_runtime111 = require("@homebound/truss/runtime");
24400
- var import_jsx_runtime191 = require("react/jsx-runtime");
24401
- function PageHeader2(props) {
24402
- const {
24403
- title,
24404
- documentTitleSuffix,
24405
- rightSlot,
24406
- tabs,
24407
- breadcrumbs,
24408
- ...otherProps
24409
- } = props;
24410
- const tid = useTestIds(otherProps, "pageHeader");
24411
- useDocumentTitle(title, documentTitleSuffix);
24412
- return /* @__PURE__ */ (0, import_jsx_runtime191.jsxs)("header", { ...tid, ...(0, import_runtime111.trussProps)({
24413
- display: "df",
24414
- flexDirection: "fdc",
24415
- paddingTop: "pt3",
24416
- paddingLeft: "pl3",
24417
- paddingRight: "pr3",
24418
- borderBottomStyle: "bbs_solid",
24419
- borderBottomWidth: "bbw_1px",
24420
- gap: "gap2",
24421
- borderColor: ["bc_var", {
24422
- "--borderColor": "var(--b-surface-separator)"
24423
- }],
24424
- backgroundColor: ["bgColor_var", {
24425
- "--backgroundColor": "var(--b-surface)"
24426
- }]
24427
- }), children: [
24428
- /* @__PURE__ */ (0, import_jsx_runtime191.jsxs)("div", { ...(0, import_runtime111.trussProps)({
24429
- ...{
24430
- display: "df",
24431
- justifyContent: "jcsb",
24432
- width: "w100",
24433
- gap: "gap1"
24434
- },
24435
- ...{
24436
- ...!tabs ? {
24437
- marginBottom: "mb2"
24438
- } : {}
24439
- }
24440
- }), children: [
24441
- /* @__PURE__ */ (0, import_jsx_runtime191.jsxs)("div", { className: "mw0", children: [
24442
- breadcrumbs && /* @__PURE__ */ (0, import_jsx_runtime191.jsx)(Breadcrumbs, { ...breadcrumbs }),
24443
- /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("h1", { ...tid.title, className: "fw6 fz_20px lh_28px", children: title })
24444
- ] }),
24445
- /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("div", { className: "fs0", children: rightSlot })
24446
- ] }),
24447
- tabs && /* @__PURE__ */ (0, import_jsx_runtime191.jsx)(Tabs, { ...tabs })
24448
- ] });
24449
- }
24450
-
24451
- // src/components/Pagination.tsx
24452
- var import_jsx_runtime192 = require("react/jsx-runtime");
24453
- var defaultPage = {
24454
- offset: 0,
24455
- limit: 100
24456
- };
24457
- function Pagination(props) {
24458
- const {
24459
- totalCount,
24460
- pageSizes = [100, 500, 1e3]
24461
- } = props;
24462
- const [page, setPage] = props.page;
24463
- const {
24464
- pageSize,
24465
- pageNumber
24466
- } = toPageNumberSize(page);
24467
- const pageOptions = pageSizes.map((size) => ({
24468
- id: size,
24469
- name: String(size)
24470
- }));
24471
- const hasPrevPage = pageNumber > 1;
24472
- const hasNextPage = pageNumber < totalCount / pageSize;
24473
- const first = pageSize * (pageNumber - 1) + (totalCount ? 1 : 0);
24474
- const last = Math.min(pageSize * pageNumber, totalCount);
24475
- const showLast = totalCount > 0;
24476
- function set(newPage) {
24477
- if ("pageNumber" in props.page[0]) {
24478
- setPage(newPage);
24479
- } else {
24480
- setPage(toLimitAndOffset(newPage));
24481
- }
24482
- }
24483
- const tid = useTestIds(props, "pagination");
24484
- return /* @__PURE__ */ (0, import_jsx_runtime192.jsxs)("div", { className: "df bcGray200 bts_solid btw_1px fw4 fz_12px lh_16px gray500 pl2 pr2 pt2", ...tid, children: [
24485
- /* @__PURE__ */ (0, import_jsx_runtime192.jsx)("div", { className: "df mta mba mr2", ...tid.pageSizeLabel, children: "Page size:" }),
24486
- /* @__PURE__ */ (0, import_jsx_runtime192.jsx)("div", { className: "w_78px", children: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(SelectField, { compact: true, label: "Page Size", labelStyle: "hidden", options: pageOptions, value: pageSize, onSelect: (val) => set({
24487
- pageNumber: 1,
24488
- pageSize: val
24489
- }), autoSort: false, ...tid.pageSize }) }),
24490
- /* @__PURE__ */ (0, import_jsx_runtime192.jsxs)("div", { className: "mla mta mba df", children: [
24491
- /* @__PURE__ */ (0, import_jsx_runtime192.jsxs)("div", { className: "df mta mba mr2", ...tid.pageInfoLabel, children: [
24492
- first,
24493
- " ",
24494
- showLast ? `- ${last}` : "",
24495
- " of ",
24496
- totalCount
24497
- ] }),
24498
- /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(IconButton, { icon: "chevronLeft", color: hasPrevPage ? "rgba(29, 78, 216, 1)" /* Blue700 */ : "rgba(236, 235, 235, 1)" /* Gray200 */, onClick: () => set({
24499
- pageNumber: pageNumber - 1,
24500
- pageSize
24501
- }), disabled: !hasPrevPage, ...tid.previousIcon }),
24502
- /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(IconButton, { icon: "chevronRight", color: hasNextPage ? "rgba(29, 78, 216, 1)" /* Blue700 */ : "rgba(236, 235, 235, 1)" /* Gray200 */, onClick: () => set({
24503
- pageNumber: pageNumber + 1,
24504
- pageSize
24505
- }), disabled: !hasNextPage, ...tid.nextIcon })
24506
- ] })
24507
- ] });
24508
- }
24509
- function toLimitAndOffset(page) {
24510
- return "limit" in page ? page : {
24511
- // E.g. on first page the offset is 0, second page the offset is 100, then 200, etc.
24512
- offset: (page.pageNumber - 1) * page.pageSize,
24513
- limit: page.pageSize
24514
- };
24515
- }
24516
- function toPageNumberSize(page) {
24517
- return "pageNumber" in page ? page : {
24518
- pageNumber: Math.floor(page.offset / page.limit) + 1,
24519
- pageSize: page.limit
24520
- };
24521
- }
24522
-
24523
- // src/components/ScrollShadows.tsx
24524
- var import_utils160 = require("@react-aria/utils");
24525
- var import_react139 = require("react");
24526
- var import_runtime112 = require("@homebound/truss/runtime");
24527
- var import_jsx_runtime193 = require("react/jsx-runtime");
24528
- function ScrollShadows(props) {
24529
- const {
24530
- children,
24531
- xss,
24532
- horizontal = false,
24533
- bgColor = "rgba(255, 255, 255, 1)" /* White */
24534
- } = props;
24535
- const tid = useTestIds(props);
24178
+ const tid = useTestIds(props);
24536
24179
  const {
24537
24180
  height,
24538
24181
  width: width2
@@ -24540,15 +24183,15 @@ function ScrollShadows(props) {
24540
24183
  if (!bgColor.includes("rgba")) {
24541
24184
  throw new Error("ScrollShadows: bgColor prop must be in the format 'rgba(255, 255, 255, 1)'");
24542
24185
  }
24543
- const [showStartShadow, setShowStartShadow] = (0, import_react139.useState)(false);
24544
- const [showEndShadow, setShowEndShadow] = (0, import_react139.useState)(false);
24545
- const scrollRef = (0, import_react139.useRef)(null);
24546
- const [startShadowStyles, endShadowStyles] = (0, import_react139.useMemo)(() => {
24186
+ const [showStartShadow, setShowStartShadow] = (0, import_react138.useState)(false);
24187
+ const [showEndShadow, setShowEndShadow] = (0, import_react138.useState)(false);
24188
+ const scrollRef = (0, import_react138.useRef)(null);
24189
+ const [startShadowStyles, endShadowStyles] = (0, import_react138.useMemo)(() => {
24547
24190
  const transparentBgColor = bgColor.replace(/,1\)$/, ",0)");
24548
24191
  const commonStyles = {
24549
24192
  position: "absolute",
24550
24193
  zIndex: ["z_var", {
24551
- "--zIndex": (0, import_runtime112.maybeCssVar)(zIndices.scrollShadow)
24194
+ "--zIndex": (0, import_runtime110.maybeCssVar)(zIndices.scrollShadow)
24552
24195
  }],
24553
24196
  pointerEvents: "pointerEvents_none"
24554
24197
  };
@@ -24581,7 +24224,7 @@ function ScrollShadows(props) {
24581
24224
  ...startShadowStyles2,
24582
24225
  ...{
24583
24226
  background: ["background_var", {
24584
- "--background": (0, import_runtime112.maybeCssVar)(startGradient)
24227
+ "--background": (0, import_runtime110.maybeCssVar)(startGradient)
24585
24228
  }]
24586
24229
  }
24587
24230
  }, {
@@ -24589,12 +24232,12 @@ function ScrollShadows(props) {
24589
24232
  ...endShadowStyles2,
24590
24233
  ...{
24591
24234
  background: ["background_var", {
24592
- "--background": (0, import_runtime112.maybeCssVar)(endGradient)
24235
+ "--background": (0, import_runtime110.maybeCssVar)(endGradient)
24593
24236
  }]
24594
24237
  }
24595
24238
  }];
24596
24239
  }, [horizontal, bgColor]);
24597
- const updateScrollProps = (0, import_react139.useCallback)((el) => {
24240
+ const updateScrollProps = (0, import_react138.useCallback)((el) => {
24598
24241
  const {
24599
24242
  scrollTop,
24600
24243
  scrollHeight,
@@ -24609,15 +24252,15 @@ function ScrollShadows(props) {
24609
24252
  setShowStartShadow(start > 0);
24610
24253
  setShowEndShadow(start + boxSize < end);
24611
24254
  }, [horizontal]);
24612
- const onResize = (0, import_react139.useCallback)(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
24613
- (0, import_utils160.useResizeObserver)({
24255
+ const onResize = (0, import_react138.useCallback)(() => scrollRef.current && updateScrollProps(scrollRef.current), [updateScrollProps]);
24256
+ (0, import_utils158.useResizeObserver)({
24614
24257
  ref: scrollRef,
24615
24258
  onResize
24616
24259
  });
24617
- return /* @__PURE__ */ (0, import_jsx_runtime193.jsxs)("div", { ...(0, import_runtime112.trussProps)({
24260
+ return /* @__PURE__ */ (0, import_jsx_runtime191.jsxs)("div", { ...(0, import_runtime110.trussProps)({
24618
24261
  display: "df",
24619
24262
  flexDirection: ["fd_var", {
24620
- "--flexDirection": (0, import_runtime112.maybeCssVar)(!horizontal ? "column" : "row")
24263
+ "--flexDirection": (0, import_runtime110.maybeCssVar)(!horizontal ? "column" : "row")
24621
24264
  }],
24622
24265
  position: "relative",
24623
24266
  overflow: "oh",
@@ -24630,23 +24273,23 @@ function ScrollShadows(props) {
24630
24273
  width: width2
24631
24274
  }
24632
24275
  }), ...tid, children: [
24633
- /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime112.trussProps)({
24276
+ /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("div", { ...(0, import_runtime110.trussProps)({
24634
24277
  ...startShadowStyles,
24635
24278
  ...{
24636
24279
  opacity: ["o_var", {
24637
- "--opacity": (0, import_runtime112.maybeCssVar)(showStartShadow ? 1 : 0)
24280
+ "--opacity": (0, import_runtime110.maybeCssVar)(showStartShadow ? 1 : 0)
24638
24281
  }]
24639
24282
  }
24640
24283
  }), "data-chromatic": "ignore" }),
24641
- /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime112.trussProps)({
24284
+ /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("div", { ...(0, import_runtime110.trussProps)({
24642
24285
  ...endShadowStyles,
24643
24286
  ...{
24644
24287
  opacity: ["o_var", {
24645
- "--opacity": (0, import_runtime112.maybeCssVar)(showEndShadow ? 1 : 0)
24288
+ "--opacity": (0, import_runtime110.maybeCssVar)(showEndShadow ? 1 : 0)
24646
24289
  }]
24647
24290
  }
24648
24291
  }), "data-chromatic": "ignore" }),
24649
- /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime112.trussProps)({
24292
+ /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("div", { ...(0, import_runtime110.trussProps)({
24650
24293
  ...xss,
24651
24294
  ...{
24652
24295
  overflow: "oa",
@@ -24658,8 +24301,8 @@ function ScrollShadows(props) {
24658
24301
  }
24659
24302
 
24660
24303
  // src/layouts/SideNavLayout/SideNavLayoutContext.tsx
24661
- var import_react140 = require("react");
24662
- var import_jsx_runtime194 = require("react/jsx-runtime");
24304
+ var import_react139 = require("react");
24305
+ var import_jsx_runtime192 = require("react/jsx-runtime");
24663
24306
  var SIDE_NAV_LAYOUT_STATE_STORAGE_KEY = "beam.sideNavLayout.navState";
24664
24307
  function loadStoredNavState() {
24665
24308
  try {
@@ -24681,20 +24324,20 @@ function resolveInitialNavState(defaultNavState) {
24681
24324
  }
24682
24325
  return loadStoredNavState() ?? defaultNavState ?? "expanded";
24683
24326
  }
24684
- var SideNavLayoutContext = (0, import_react140.createContext)(void 0);
24327
+ var SideNavLayoutContext = (0, import_react139.createContext)(void 0);
24685
24328
  function SideNavLayoutProvider(props) {
24686
- const [navState, setNavStateInternal] = (0, import_react140.useState)(
24329
+ const [navState, setNavStateInternal] = (0, import_react139.useState)(
24687
24330
  () => resolveInitialNavState(props.defaultNavState)
24688
24331
  );
24689
24332
  const bp = useBreakpoint();
24690
- const prevMdAndUp = (0, import_react140.useRef)(bp.mdAndUp);
24691
- (0, import_react140.useEffect)(() => {
24333
+ const prevMdAndUp = (0, import_react139.useRef)(bp.mdAndUp);
24334
+ (0, import_react139.useEffect)(() => {
24692
24335
  if (prevMdAndUp.current && !bp.mdAndUp) {
24693
24336
  setNavStateInternal((prev) => prev === "expanded" ? "collapse" : prev);
24694
24337
  }
24695
24338
  prevMdAndUp.current = bp.mdAndUp;
24696
24339
  }, [bp.mdAndUp]);
24697
- const setNavState = (0, import_react140.useCallback)((value2) => {
24340
+ const setNavState = (0, import_react139.useCallback)((value2) => {
24698
24341
  setNavStateInternal((prev) => {
24699
24342
  const next = typeof value2 === "function" ? value2(prev) : value2;
24700
24343
  if (next === "expanded" || next === "collapse") {
@@ -24706,20 +24349,20 @@ function SideNavLayoutProvider(props) {
24706
24349
  return next;
24707
24350
  });
24708
24351
  }, []);
24709
- const value = (0, import_react140.useMemo)(() => ({ navState, setNavState }), [navState, setNavState]);
24710
- return /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(SideNavLayoutContext.Provider, { value, children: props.children });
24352
+ const value = (0, import_react139.useMemo)(() => ({ navState, setNavState }), [navState, setNavState]);
24353
+ return /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(SideNavLayoutContext.Provider, { value, children: props.children });
24711
24354
  }
24712
24355
  function useSideNavLayoutContext() {
24713
- return (0, import_react140.useContext)(SideNavLayoutContext) ?? { navState: "expanded", setNavState: () => {
24356
+ return (0, import_react139.useContext)(SideNavLayoutContext) ?? { navState: "expanded", setNavState: () => {
24714
24357
  } };
24715
24358
  }
24716
24359
  function useHasSideNavLayoutProvider() {
24717
- return (0, import_react140.useContext)(SideNavLayoutContext) !== void 0;
24360
+ return (0, import_react139.useContext)(SideNavLayoutContext) !== void 0;
24718
24361
  }
24719
24362
 
24720
24363
  // src/components/SideNav/SideNav.tsx
24721
- var import_runtime113 = require("@homebound/truss/runtime");
24722
- var import_jsx_runtime195 = require("react/jsx-runtime");
24364
+ var import_runtime111 = require("@homebound/truss/runtime");
24365
+ var import_jsx_runtime193 = require("react/jsx-runtime");
24723
24366
  function SideNav(props) {
24724
24367
  const {
24725
24368
  top,
@@ -24732,8 +24375,8 @@ function SideNav(props) {
24732
24375
  const tid = useTestIds(props, "sideNav");
24733
24376
  const panelCollapsed = navState === "collapse";
24734
24377
  const hideOnCollapse = panelCollapsed && !allItemsHaveIcons(items);
24735
- return /* @__PURE__ */ (0, import_jsx_runtime195.jsxs)("nav", { className: "df fdc h100 fs0", ...tid, children: [
24736
- top !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime195.jsx)("div", { ...(0, import_runtime113.trussProps)({
24378
+ return /* @__PURE__ */ (0, import_jsx_runtime193.jsxs)("nav", { className: "df fdc h100 fs0", ...tid, children: [
24379
+ top !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime111.trussProps)({
24737
24380
  flexShrink: "fs0",
24738
24381
  paddingLeft: "pl2",
24739
24382
  paddingRight: "pr2",
@@ -24744,7 +24387,7 @@ function SideNav(props) {
24744
24387
  paddingBottom: "pb4"
24745
24388
  } : {}
24746
24389
  }), ...tid.top, children: top }),
24747
- /* @__PURE__ */ (0, import_jsx_runtime195.jsx)("div", { ...(0, import_runtime113.trussProps)({
24390
+ /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime111.trussProps)({
24748
24391
  flexGrow: "fg1",
24749
24392
  overflowY: "oya",
24750
24393
  display: "df",
@@ -24756,8 +24399,8 @@ function SideNav(props) {
24756
24399
  ...top === void 0 ? {
24757
24400
  paddingTop: "pt5"
24758
24401
  } : {}
24759
- }), ...tid.items, children: !hideOnCollapse && /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(AppNavItems, { items, panelCollapsed }) }),
24760
- footer !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime195.jsx)("div", { ...(0, import_runtime113.trussProps)({
24402
+ }), ...tid.items, children: !hideOnCollapse && /* @__PURE__ */ (0, import_jsx_runtime193.jsx)(AppNavItems, { items, panelCollapsed }) }),
24403
+ footer !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime193.jsx)("div", { ...(0, import_runtime111.trussProps)({
24761
24404
  flexShrink: "fs0",
24762
24405
  paddingLeft: "pl2",
24763
24406
  paddingRight: "pr2",
@@ -24773,10 +24416,10 @@ function SideNav(props) {
24773
24416
  }
24774
24417
 
24775
24418
  // src/components/Snackbar/useSnackbar.tsx
24776
- var import_react141 = require("react");
24419
+ var import_react140 = require("react");
24777
24420
  function useSnackbar() {
24778
24421
  const { setNotices, setOffset } = useSnackbarContext();
24779
- const onClose = (0, import_react141.useCallback)(
24422
+ const onClose = (0, import_react140.useCallback)(
24780
24423
  (noticeId) => {
24781
24424
  setNotices((prev) => {
24782
24425
  let returnValue = prev;
@@ -24793,7 +24436,7 @@ function useSnackbar() {
24793
24436
  // eslint-disable-next-line react-hooks/exhaustive-deps
24794
24437
  []
24795
24438
  );
24796
- const triggerNotice = (0, import_react141.useCallback)(
24439
+ const triggerNotice = (0, import_react140.useCallback)(
24797
24440
  (props) => {
24798
24441
  const noticeId = props.id ?? `beamSnackbar:${snackbarId++}`;
24799
24442
  let maybeTimeout;
@@ -24822,8 +24465,8 @@ function useSnackbar() {
24822
24465
  },
24823
24466
  [onClose, setNotices]
24824
24467
  );
24825
- const closeNotice = (0, import_react141.useCallback)((id) => onClose(id), [onClose]);
24826
- const useSnackbarOffset = ({ bottom }) => (0, import_react141.useEffect)(() => {
24468
+ const closeNotice = (0, import_react140.useCallback)((id) => onClose(id), [onClose]);
24469
+ const useSnackbarOffset = ({ bottom }) => (0, import_react140.useEffect)(() => {
24827
24470
  setOffset({ bottom });
24828
24471
  return () => setOffset({});
24829
24472
  }, [bottom]);
@@ -24832,11 +24475,11 @@ function useSnackbar() {
24832
24475
  var snackbarId = 1;
24833
24476
 
24834
24477
  // src/components/Stepper.tsx
24478
+ var import_react141 = require("react");
24479
+ var import_react_aria62 = require("react-aria");
24480
+ var import_runtime112 = require("@homebound/truss/runtime");
24481
+ var import_jsx_runtime194 = require("react/jsx-runtime");
24835
24482
  var import_react142 = require("react");
24836
- var import_react_aria63 = require("react-aria");
24837
- var import_runtime114 = require("@homebound/truss/runtime");
24838
- var import_jsx_runtime196 = require("react/jsx-runtime");
24839
- var import_react143 = require("react");
24840
24483
  var __maybeInc20 = (inc) => {
24841
24484
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
24842
24485
  };
@@ -24854,8 +24497,8 @@ function Stepper(props) {
24854
24497
  const maxStepWidth = 200;
24855
24498
  const minStepWidth = 100;
24856
24499
  const gap = 8;
24857
- return /* @__PURE__ */ (0, import_jsx_runtime196.jsxs)("nav", { "aria-label": "steps", className: "df fdc w100", ...tid, children: [
24858
- /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("ol", { ...(0, import_runtime114.trussProps)({
24500
+ return /* @__PURE__ */ (0, import_jsx_runtime194.jsxs)("nav", { "aria-label": "steps", className: "df fdc w100", ...tid, children: [
24501
+ /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("ol", { ...(0, import_runtime112.trussProps)({
24859
24502
  padding: "p_0",
24860
24503
  margin: "m_0",
24861
24504
  listStyle: "lis_none",
@@ -24865,7 +24508,7 @@ function Stepper(props) {
24865
24508
  }]
24866
24509
  }), children: steps.map((step) => {
24867
24510
  const isCurrent = currentStep === step.value;
24868
- return /* @__PURE__ */ (0, import_react143.createElement)("li", { ...(0, import_runtime114.trussProps)({
24511
+ return /* @__PURE__ */ (0, import_react142.createElement)("li", { ...(0, import_runtime112.trussProps)({
24869
24512
  display: "df",
24870
24513
  flexGrow: "fg1",
24871
24514
  flexDirection: "fdc",
@@ -24875,9 +24518,9 @@ function Stepper(props) {
24875
24518
  minWidth: ["mw_var", {
24876
24519
  "--minWidth": `${minStepWidth}px`
24877
24520
  }]
24878
- }), key: step.label, "aria-current": isCurrent, ...tid.step }, /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton }));
24521
+ }), key: step.label, "aria-current": isCurrent, ...tid.step }, /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(StepButton, { ...step, onClick: () => onChange(step.value), isCurrent, ...tid.stepButton }));
24879
24522
  }) }),
24880
- /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("div", { ...(0, import_runtime114.trussProps)({
24523
+ /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("div", { ...(0, import_runtime112.trussProps)({
24881
24524
  marginTop: "mt1",
24882
24525
  backgroundColor: "bgGray300",
24883
24526
  height: "h_4px",
@@ -24888,12 +24531,12 @@ function Stepper(props) {
24888
24531
  "--minWidth": `${steps.length * minStepWidth + (steps.length - 1) * gap}px`
24889
24532
  }],
24890
24533
  width: "w100"
24891
- }), children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("div", { ...(0, import_runtime114.trussProps)({
24534
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("div", { ...(0, import_runtime112.trussProps)({
24892
24535
  backgroundColor: "bgBlue600",
24893
24536
  transition: "transition_width_200ms",
24894
24537
  height: "h100",
24895
24538
  width: ["w_var", {
24896
- "--width": (0, import_runtime114.maybeCssVar)(__maybeInc20(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24539
+ "--width": (0, import_runtime112.maybeCssVar)(__maybeInc20(`${(lastCompletedStep + 1) / steps.length * 100}%`))
24897
24540
  }]
24898
24541
  }) }) })
24899
24542
  ] });
@@ -24910,26 +24553,26 @@ function StepButton(props) {
24910
24553
  onPress: onClick,
24911
24554
  isDisabled: disabled
24912
24555
  };
24913
- const ref = (0, import_react142.useRef)(null);
24556
+ const ref = (0, import_react141.useRef)(null);
24914
24557
  const {
24915
24558
  buttonProps,
24916
24559
  isPressed
24917
- } = (0, import_react_aria63.useButton)(ariaProps, ref);
24560
+ } = (0, import_react_aria62.useButton)(ariaProps, ref);
24918
24561
  const {
24919
24562
  isFocusVisible,
24920
24563
  focusProps
24921
- } = (0, import_react_aria63.useFocusRing)();
24564
+ } = (0, import_react_aria62.useFocusRing)();
24922
24565
  const {
24923
24566
  hoverProps,
24924
24567
  isHovered
24925
- } = (0, import_react_aria63.useHover)(ariaProps);
24568
+ } = (0, import_react_aria62.useHover)(ariaProps);
24926
24569
  const focusRingStyles2 = state === "error" ? {
24927
24570
  boxShadow: "bshDanger"
24928
24571
  } : {
24929
24572
  boxShadow: "bshFocus"
24930
24573
  };
24931
24574
  const tid = useTestIds(props, "stepButton");
24932
- return /* @__PURE__ */ (0, import_jsx_runtime196.jsxs)("button", { ref, ...buttonProps, ...focusProps, ...hoverProps, ...(0, import_runtime114.trussProps)({
24575
+ return /* @__PURE__ */ (0, import_jsx_runtime194.jsxs)("button", { ref, ...buttonProps, ...focusProps, ...hoverProps, ...(0, import_runtime112.trussProps)({
24933
24576
  ...{
24934
24577
  fontWeight: "fw6",
24935
24578
  fontSize: "fz_14px",
@@ -24981,7 +24624,7 @@ function StepButton(props) {
24981
24624
  } : {},
24982
24625
  ...isFocusVisible ? focusRingStyles2 : {}
24983
24626
  }), ...tid[defaultTestId(label)], children: [
24984
- /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("span", { className: "fs0 mr_4px", children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
24627
+ /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("span", { className: "fs0 mr_4px", children: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(StepIcon, { state, isHovered, isPressed, isCurrent }) }),
24985
24628
  label
24986
24629
  ] });
24987
24630
  }
@@ -24992,12 +24635,12 @@ function StepIcon({
24992
24635
  isCurrent = false
24993
24636
  }) {
24994
24637
  if (state === "error") {
24995
- return /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(Icon, { icon: "errorCircle" });
24638
+ return /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(Icon, { icon: "errorCircle" });
24996
24639
  }
24997
24640
  if (state === "complete") {
24998
- return /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(Icon, { icon: "check" });
24641
+ return /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(Icon, { icon: "check" });
24999
24642
  }
25000
- return /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("div", { className: "w_24px h_24px df aic jcc", children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("div", { ...(0, import_runtime114.trussProps)({
24643
+ return /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("div", { className: "w_24px h_24px df aic jcc", children: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)("div", { ...(0, import_runtime112.trussProps)({
25001
24644
  width: "w_10px",
25002
24645
  height: "h_10px",
25003
24646
  borderStyle: "bss",
@@ -25011,10 +24654,10 @@ function StepIcon({
25011
24654
  }
25012
24655
 
25013
24656
  // src/components/StepperTabs/StepperTab.tsx
25014
- var import_react144 = require("react");
25015
- var import_react_aria64 = require("react-aria");
25016
- var import_runtime115 = require("@homebound/truss/runtime");
25017
- var import_jsx_runtime197 = require("react/jsx-runtime");
24657
+ var import_react143 = require("react");
24658
+ var import_react_aria63 = require("react-aria");
24659
+ var import_runtime113 = require("@homebound/truss/runtime");
24660
+ var import_jsx_runtime195 = require("react/jsx-runtime");
25018
24661
  function StepperTab(props) {
25019
24662
  const {
25020
24663
  label,
@@ -25029,20 +24672,20 @@ function StepperTab(props) {
25029
24672
  onPress: () => onClick(value),
25030
24673
  isDisabled: disabled || collapsed
25031
24674
  };
25032
- const ref = (0, import_react144.useRef)(null);
24675
+ const ref = (0, import_react143.useRef)(null);
25033
24676
  const {
25034
24677
  buttonProps
25035
- } = (0, import_react_aria64.useButton)(ariaProps, ref);
24678
+ } = (0, import_react_aria63.useButton)(ariaProps, ref);
25036
24679
  const {
25037
24680
  isFocusVisible,
25038
24681
  focusProps
25039
- } = (0, import_react_aria64.useFocusRing)();
24682
+ } = (0, import_react_aria63.useFocusRing)();
25040
24683
  const {
25041
24684
  hoverProps,
25042
24685
  isHovered
25043
- } = (0, import_react_aria64.useHover)(ariaProps);
24686
+ } = (0, import_react_aria63.useHover)(ariaProps);
25044
24687
  const tid = useTestIds(props, "stepperTab");
25045
- return /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)("button", { ref, ...(0, import_react_aria64.mergeProps)(buttonProps, focusProps, hoverProps), "aria-label": label, ...(0, import_runtime115.trussProps)({
24688
+ return /* @__PURE__ */ (0, import_jsx_runtime195.jsxs)("button", { ref, ...(0, import_react_aria63.mergeProps)(buttonProps, focusProps, hoverProps), "aria-label": label, ...(0, import_runtime113.trussProps)({
25046
24689
  ...stepperTabStyles.baseStyles,
25047
24690
  ...getStateStyles(active, completed),
25048
24691
  ...isHovered && !disabled ? stepperTabStyles.hoverStyles : {},
@@ -25050,9 +24693,9 @@ function StepperTab(props) {
25050
24693
  ...disabled ? stepperTabStyles.disabledStyles : {},
25051
24694
  ...isFocusVisible ? stepperTabStyles.focusRingStyles : {}
25052
24695
  }), ...tid[defaultTestId(value)], children: [
25053
- /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("span", { className: "oh d_negwebkit_box wbo_vertical to_ellipsis wlc_1", children: label }),
25054
- completed && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("span", { className: "fs0 ml1", children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(Icon, { icon: "check", inc: 2.5, ...tid.check }) }),
25055
- /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_react_aria64.VisuallyHidden, { children: completed ? "Complete" : "Not Complete" })
24696
+ /* @__PURE__ */ (0, import_jsx_runtime195.jsx)("span", { className: "oh d_negwebkit_box wbo_vertical to_ellipsis wlc_1", children: label }),
24697
+ completed && /* @__PURE__ */ (0, import_jsx_runtime195.jsx)("span", { className: "fs0 ml1", children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(Icon, { icon: "check", inc: 2.5, ...tid.check }) }),
24698
+ /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_react_aria63.VisuallyHidden, { children: completed ? "Complete" : "Not Complete" })
25056
24699
  ] });
25057
24700
  }
25058
24701
  function withBorderBottom(color) {
@@ -25060,7 +24703,7 @@ function withBorderBottom(color) {
25060
24703
  ...{
25061
24704
  borderBottomStyle: "bbs_solid",
25062
24705
  borderBottomWidth: ["borderBottomWidth_var", {
25063
- "--borderBottomWidth": (0, import_runtime115.maybeCssVar)(`3px`)
24706
+ "--borderBottomWidth": (0, import_runtime113.maybeCssVar)(`3px`)
25064
24707
  }]
25065
24708
  },
25066
24709
  ...color
@@ -25132,9 +24775,9 @@ var stepperTabStyles = {
25132
24775
  };
25133
24776
 
25134
24777
  // src/components/StepperTabs/StepperTabs.tsx
25135
- var import_runtime116 = require("@homebound/truss/runtime");
25136
- var import_jsx_runtime198 = require("react/jsx-runtime");
25137
- var import_react145 = require("react");
24778
+ var import_runtime114 = require("@homebound/truss/runtime");
24779
+ var import_jsx_runtime196 = require("react/jsx-runtime");
24780
+ var import_react144 = require("react");
25138
24781
  function StepperTabs(props) {
25139
24782
  const {
25140
24783
  steps,
@@ -25146,7 +24789,7 @@ function StepperTabs(props) {
25146
24789
  sm: collapsed
25147
24790
  } = useBreakpoint();
25148
24791
  const capWidth = steps.length <= 3;
25149
- return /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("nav", { "aria-label": "steps", className: "w100", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("ol", { ...(0, import_runtime116.trussProps)({
24792
+ return /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("nav", { "aria-label": "steps", className: "w100", ...tid, children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("ol", { ...(0, import_runtime114.trussProps)({
25150
24793
  padding: "p_0",
25151
24794
  margin: "m_0",
25152
24795
  listStyle: "lis_none",
@@ -25160,7 +24803,7 @@ function StepperTabs(props) {
25160
24803
  borderColor: "bcGray400"
25161
24804
  }), children: steps.map((step) => {
25162
24805
  const isCurrent = step.value === currentStep;
25163
- return /* @__PURE__ */ (0, import_react145.createElement)("li", { ...(0, import_runtime116.trussProps)({
24806
+ return /* @__PURE__ */ (0, import_react144.createElement)("li", { ...(0, import_runtime114.trussProps)({
25164
24807
  display: "df",
25165
24808
  flexGrow: "fg1",
25166
24809
  flexBasis: "fb_0",
@@ -25172,7 +24815,7 @@ function StepperTabs(props) {
25172
24815
  "--maxWidth": `${maxStepWidthPx}px`
25173
24816
  }]
25174
24817
  } : {}
25175
- }), key: step.value, "aria-current": isCurrent, ...tid.step }, /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(StepperTab, { label: step.label, value: step.value, active: isCurrent, completed: step.completed, disabled: step.disabled, collapsed, onClick: onChange, ...tid.tab }));
24818
+ }), key: step.value, "aria-current": isCurrent, ...tid.step }, /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(StepperTab, { label: step.label, value: step.value, active: isCurrent, completed: step.completed, disabled: step.disabled, collapsed, onClick: onChange, ...tid.tab }));
25176
24819
  }) }) });
25177
24820
  }
25178
24821
  var maxStepWidthPx = 280;
@@ -25180,8 +24823,8 @@ var gapPx = 6;
25180
24823
 
25181
24824
  // src/components/SuperDrawer/components/SuperDrawerHeader.tsx
25182
24825
  var import_react_dom7 = require("react-dom");
25183
- var import_runtime117 = require("@homebound/truss/runtime");
25184
- var import_jsx_runtime199 = require("react/jsx-runtime");
24826
+ var import_runtime115 = require("@homebound/truss/runtime");
24827
+ var import_jsx_runtime197 = require("react/jsx-runtime");
25185
24828
  function SuperDrawerHeader(props) {
25186
24829
  const {
25187
24830
  hideControls
@@ -25198,20 +24841,20 @@ function SuperDrawerHeader(props) {
25198
24841
  const currentContent = contentStack.current[contentStack.current.length - 1]?.opts;
25199
24842
  const isDetail = currentContent !== firstContent;
25200
24843
  const tid = useTestIds({}, "superDrawerHeader");
25201
- return (0, import_react_dom7.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime199.jsxs)("div", { className: "df aic jcsb gap3", ...tid, children: [
25202
- isStructuredProps(props) ? /* @__PURE__ */ (0, import_jsx_runtime199.jsxs)("div", { className: "df jcsb aic gap2 fg1", children: [
25203
- /* @__PURE__ */ (0, import_jsx_runtime199.jsxs)("div", { className: "fg1 df aic gap2", children: [
25204
- /* @__PURE__ */ (0, import_jsx_runtime199.jsx)("h1", { className: "fw6 fz_30px lh_36px", children: props.title }),
24844
+ return (0, import_react_dom7.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime197.jsxs)("div", { className: "df aic jcsb gap3", ...tid, children: [
24845
+ isStructuredProps(props) ? /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)("div", { className: "df jcsb aic gap2 fg1", children: [
24846
+ /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)("div", { className: "fg1 df aic gap2", children: [
24847
+ /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("h1", { className: "fw6 fz_30px lh_36px", children: props.title }),
25205
24848
  props.left
25206
24849
  ] }),
25207
- props.right && /* @__PURE__ */ (0, import_jsx_runtime199.jsx)("div", { className: "fs0", children: props.right })
25208
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime199.jsx)("div", { className: "fg1", children: props.children }),
25209
- !hideControls && /* @__PURE__ */ (0, import_jsx_runtime199.jsx)("div", { ...(0, import_runtime117.trussProps)({
24850
+ props.right && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("div", { className: "fs0", children: props.right })
24851
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("div", { className: "fg1", children: props.children }),
24852
+ !hideControls && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("div", { ...(0, import_runtime115.trussProps)({
25210
24853
  flexShrink: "fs0",
25211
24854
  ...isDetail ? {
25212
24855
  visibility: "vh"
25213
24856
  } : {}
25214
- }), children: /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(ButtonGroup, { buttons: [{
24857
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(ButtonGroup, { buttons: [{
25215
24858
  icon: "chevronLeft",
25216
24859
  onClick: () => onPrevClick && onPrevClick(),
25217
24860
  disabled: !onPrevClick
@@ -25227,18 +24870,18 @@ function isStructuredProps(props) {
25227
24870
  }
25228
24871
 
25229
24872
  // src/components/SuperDrawer/ConfirmCloseModal.tsx
25230
- var import_jsx_runtime200 = require("react/jsx-runtime");
24873
+ var import_jsx_runtime198 = require("react/jsx-runtime");
25231
24874
  function ConfirmCloseModal(props) {
25232
24875
  const { onClose, discardText = "Discard Changes", continueText = "Continue Editing" } = props;
25233
24876
  const { modalState } = useBeamContext();
25234
24877
  function closeModal() {
25235
24878
  modalState.current = void 0;
25236
24879
  }
25237
- return /* @__PURE__ */ (0, import_jsx_runtime200.jsxs)(import_jsx_runtime200.Fragment, { children: [
25238
- /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(ModalHeader, { children: "Are you sure you want to cancel?" }),
25239
- /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)("p", { children: "Any changes you've made so far will be lost." }) }),
25240
- /* @__PURE__ */ (0, import_jsx_runtime200.jsxs)(ModalFooter, { children: [
25241
- /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(
24880
+ return /* @__PURE__ */ (0, import_jsx_runtime198.jsxs)(import_jsx_runtime198.Fragment, { children: [
24881
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(ModalHeader, { children: "Are you sure you want to cancel?" }),
24882
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(ModalBody, { children: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("p", { children: "Any changes you've made so far will be lost." }) }),
24883
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsxs)(ModalFooter, { children: [
24884
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(
25242
24885
  Button,
25243
24886
  {
25244
24887
  variant: "quaternary",
@@ -25249,7 +24892,7 @@ function ConfirmCloseModal(props) {
25249
24892
  }
25250
24893
  }
25251
24894
  ),
25252
- /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(Button, { label: continueText, onClick: closeModal })
24895
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(Button, { label: continueText, onClick: closeModal })
25253
24896
  ] })
25254
24897
  ] });
25255
24898
  }
@@ -25258,8 +24901,8 @@ function ConfirmCloseModal(props) {
25258
24901
  var import_framer_motion6 = require("framer-motion");
25259
24902
 
25260
24903
  // src/components/SuperDrawer/useSuperDrawer.tsx
25261
- var import_react146 = require("react");
25262
- var import_jsx_runtime201 = require("react/jsx-runtime");
24904
+ var import_react145 = require("react");
24905
+ var import_jsx_runtime199 = require("react/jsx-runtime");
25263
24906
  function useSuperDrawer() {
25264
24907
  const {
25265
24908
  drawerContentStack: contentStack,
@@ -25271,7 +24914,7 @@ function useSuperDrawer() {
25271
24914
  function canCloseDrawerDetails(i, doChange) {
25272
24915
  for (const canCloseDrawerDetail of canCloseDetailsChecks.current[i] ?? []) {
25273
24916
  if (!canClose(canCloseDrawerDetail)) {
25274
- openModal({ content: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
24917
+ openModal({ content: /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawerDetail }) });
25275
24918
  return false;
25276
24919
  }
25277
24920
  }
@@ -25291,14 +24934,14 @@ function useSuperDrawer() {
25291
24934
  for (const canCloseDrawer of canCloseChecks.current) {
25292
24935
  if (!canClose(canCloseDrawer)) {
25293
24936
  openModal({
25294
- content: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
24937
+ content: /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(ConfirmCloseModal, { onClose: doChange, ...canCloseDrawer })
25295
24938
  });
25296
24939
  return;
25297
24940
  }
25298
24941
  }
25299
24942
  doChange();
25300
24943
  }
25301
- const closeActions = (0, import_react146.useMemo)(
24944
+ const closeActions = (0, import_react145.useMemo)(
25302
24945
  () => {
25303
24946
  return {
25304
24947
  /** Attempts to close the drawer. If any checks fail, a confirmation modal will appear */
@@ -25333,7 +24976,7 @@ function useSuperDrawer() {
25333
24976
  // eslint-disable-next-line react-hooks/exhaustive-deps
25334
24977
  [canCloseChecks, canCloseDetailsChecks, contentStack, modalState, openModal]
25335
24978
  );
25336
- const actions = (0, import_react146.useMemo)(
24979
+ const actions = (0, import_react145.useMemo)(
25337
24980
  () => {
25338
24981
  return {
25339
24982
  // TODO: Maybe we should rename to openDrawer as a breaking change (to match openDrawerDetail)
@@ -25386,8 +25029,8 @@ function canClose(canCloseCheck) {
25386
25029
  }
25387
25030
 
25388
25031
  // src/components/SuperDrawer/SuperDrawerContent.tsx
25389
- var import_runtime118 = require("@homebound/truss/runtime");
25390
- var import_jsx_runtime202 = require("react/jsx-runtime");
25032
+ var import_runtime116 = require("@homebound/truss/runtime");
25033
+ var import_jsx_runtime200 = require("react/jsx-runtime");
25391
25034
  var SuperDrawerContent = ({
25392
25035
  children,
25393
25036
  actions
@@ -25403,95 +25046,360 @@ var SuperDrawerContent = ({
25403
25046
  } = contentStack.current[contentStack.current.length - 1] ?? {};
25404
25047
  const firstContent = contentStack.current[0]?.opts;
25405
25048
  const {
25406
- width: width2 = 1040 /* Normal */
25407
- } = firstContent ?? {};
25408
- function wrapWithMotionAndMaybeBack(children2) {
25409
- if (kind === "open") {
25410
- return /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_framer_motion6.motion.div, { className: "pt3 pb3 pr3 pl3 fg1 oa", children: children2 }, "content");
25411
- } else if (kind === "detail") {
25412
- return /* @__PURE__ */ (0, import_jsx_runtime202.jsxs)(import_framer_motion6.motion.div, { className: "pl3 pr3 pt2 pb3 fg1", animate: {
25413
- overflow: "auto"
25414
- }, transition: {
25415
- overflow: {
25416
- delay: 0.3
25417
- }
25418
- }, children: [
25419
- /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
25420
- /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_framer_motion6.motion.div, { initial: {
25421
- x: width2,
25422
- opacity: 0
25423
- }, animate: {
25424
- x: 0,
25425
- opacity: 1
25426
- }, transition: {
25427
- ease: "linear",
25428
- duration: 0.3,
25429
- opacity: {
25430
- delay: 0.15
25431
- }
25432
- }, exit: {
25433
- x: width2,
25434
- opacity: 0
25435
- }, className: "pt2", children: children2 })
25436
- ] }, "content");
25437
- } else {
25438
- return /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_framer_motion6.motion.div, { ...(0, import_runtime118.mergeProps)(void 0, {
25439
- overflow: "auto"
25440
- }, {
25441
- paddingTop: "pt3",
25442
- paddingBottom: "pb3",
25443
- paddingRight: "pr3",
25444
- paddingLeft: "pl3",
25445
- flexGrow: "fg1"
25446
- }) }, "content");
25049
+ width: width2 = 1040 /* Normal */
25050
+ } = firstContent ?? {};
25051
+ function wrapWithMotionAndMaybeBack(children2) {
25052
+ if (kind === "open") {
25053
+ return /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_framer_motion6.motion.div, { className: "pt3 pb3 pr3 pl3 fg1 oa", children: children2 }, "content");
25054
+ } else if (kind === "detail") {
25055
+ return /* @__PURE__ */ (0, import_jsx_runtime200.jsxs)(import_framer_motion6.motion.div, { className: "pl3 pr3 pt2 pb3 fg1", animate: {
25056
+ overflow: "auto"
25057
+ }, transition: {
25058
+ overflow: {
25059
+ delay: 0.3
25060
+ }
25061
+ }, children: [
25062
+ /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(Button, { label: "Back", icon: "chevronLeft", variant: "tertiary", onClick: closeDrawerDetail }),
25063
+ /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_framer_motion6.motion.div, { initial: {
25064
+ x: width2,
25065
+ opacity: 0
25066
+ }, animate: {
25067
+ x: 0,
25068
+ opacity: 1
25069
+ }, transition: {
25070
+ ease: "linear",
25071
+ duration: 0.3,
25072
+ opacity: {
25073
+ delay: 0.15
25074
+ }
25075
+ }, exit: {
25076
+ x: width2,
25077
+ opacity: 0
25078
+ }, className: "pt2", children: children2 })
25079
+ ] }, "content");
25080
+ } else {
25081
+ return /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_framer_motion6.motion.div, { ...(0, import_runtime116.mergeProps)(void 0, {
25082
+ overflow: "auto"
25083
+ }, {
25084
+ paddingTop: "pt3",
25085
+ paddingBottom: "pb3",
25086
+ paddingRight: "pr3",
25087
+ paddingLeft: "pl3",
25088
+ flexGrow: "fg1"
25089
+ }) }, "content");
25090
+ }
25091
+ }
25092
+ return /* @__PURE__ */ (0, import_jsx_runtime200.jsxs)(import_jsx_runtime200.Fragment, { children: [
25093
+ wrapWithMotionAndMaybeBack(children),
25094
+ actions && /* @__PURE__ */ (0, import_jsx_runtime200.jsx)("footer", { className: "bts_solid btw_1px bcGray200 pt3 pb3 pr3 pl3 df aic jcfe", children: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)("div", { className: "df gap1", children: actions.map((buttonProps, i) => /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(Button, { ...buttonProps }, i)) }) })
25095
+ ] });
25096
+ };
25097
+
25098
+ // src/components/Table/cardSlots.ts
25099
+ function cardTitleSlot(text) {
25100
+ return { kind: "title", text };
25101
+ }
25102
+ function cardEyebrowSlot(text) {
25103
+ return { kind: "eyebrow", text };
25104
+ }
25105
+ function cardBadgeSlot(text, tags) {
25106
+ return { kind: "badge", text, tags };
25107
+ }
25108
+ function cardStatusSlot(tag) {
25109
+ return { kind: "status", tag };
25110
+ }
25111
+ function cardDataBlockSlot(props) {
25112
+ return { kind: "dataBlock", ...props };
25113
+ }
25114
+ function cardProgressSlot(value) {
25115
+ return { kind: "progress", value };
25116
+ }
25117
+
25118
+ // src/components/Table/utils/simpleHelpers.ts
25119
+ var simpleHeader = { kind: "header", id: "header", data: void 0 };
25120
+ function simpleDataRows(data = []) {
25121
+ return [simpleHeader, ...data.map((data2) => ({ kind: "data", data: data2, id: data2.id }))];
25122
+ }
25123
+
25124
+ // src/components/Table/utils/visitor.ts
25125
+ function visit(rows, fn) {
25126
+ const todo = [...rows];
25127
+ while (todo.length > 0) {
25128
+ const row = todo.pop();
25129
+ fn(row);
25130
+ if (row.children) {
25131
+ todo.push(...row.children);
25132
+ }
25133
+ }
25134
+ }
25135
+
25136
+ // src/components/Tabs.tsx
25137
+ var import_change_case9 = require("change-case");
25138
+ var import_react146 = require("react");
25139
+ var import_react_aria64 = require("react-aria");
25140
+ var import_react_router = require("react-router");
25141
+ var import_react_router_dom8 = require("react-router-dom");
25142
+ var import_runtime117 = require("@homebound/truss/runtime");
25143
+ var import_jsx_runtime201 = require("react/jsx-runtime");
25144
+ function TabsWithContent(props) {
25145
+ const styles = hideTabs(props) ? {} : {
25146
+ paddingTop: "pt3"
25147
+ };
25148
+ return /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)(import_jsx_runtime201.Fragment, { children: [
25149
+ /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(Tabs, { ...props }),
25150
+ /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(TabContent, { ...props, contentXss: {
25151
+ ...styles,
25152
+ ...props.contentXss
25153
+ } })
25154
+ ] });
25155
+ }
25156
+ function TabContent(props) {
25157
+ const tid = useTestIds(props, "tab");
25158
+ const {
25159
+ tabs,
25160
+ contentXss = {},
25161
+ omitFullBleedPadding = false
25162
+ } = props;
25163
+ const location = (0, import_react_router_dom8.useLocation)();
25164
+ const selectedTab = isRouteTabs(props) ? props.tabs.find((t) => {
25165
+ const paths = Array.isArray(t.path) ? t.path : [t.path];
25166
+ return paths.some((p) => !!(0, import_react_router.matchPath)({
25167
+ path: p,
25168
+ end: true
25169
+ }, location.pathname));
25170
+ }) || tabs[0] : props.tabs.find((tab) => tab.value === props.selected) || tabs[0];
25171
+ const uniqueValue = uniqueTabValue(selectedTab);
25172
+ return (
25173
+ // Using FullBleed to allow the tab's bgColor to extend to the edges of the <ScrollableContent /> element.
25174
+ // Omit the padding from `FullBleed` if the caller passes in the `paddingLeft/Right` styles.
25175
+ /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(FullBleed, { omitPadding: omitFullBleedPadding, children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { "aria-labelledby": `${uniqueValue}-tab`, id: `${uniqueValue}-tabPanel`, role: "tabpanel", tabIndex: 0, ...tid.panel, ...(0, import_runtime117.trussProps)(contentXss), children: selectedTab.render() }) })
25176
+ );
25177
+ }
25178
+ function Tabs(props) {
25179
+ const {
25180
+ ariaLabel,
25181
+ tabs,
25182
+ includeBottomBorder,
25183
+ right,
25184
+ ...others
25185
+ } = props;
25186
+ const location = (0, import_react_router_dom8.useLocation)();
25187
+ const selected = isRouteTabs(props) ? uniqueTabValue(props.tabs.find((t) => {
25188
+ const paths = Array.isArray(t.path) ? t.path : [t.path];
25189
+ return paths.some((p) => !!(0, import_react_router.matchPath)({
25190
+ path: p,
25191
+ end: true
25192
+ }, location.pathname));
25193
+ }) || props.tabs[0]) : props.selected;
25194
+ const {
25195
+ isFocusVisible,
25196
+ focusProps
25197
+ } = (0, import_react_aria64.useFocusRing)();
25198
+ const tid = useTestIds(others, "tabs");
25199
+ const [active, setActive] = (0, import_react146.useState)(selected);
25200
+ const ref = (0, import_react146.useRef)(null);
25201
+ (0, import_react146.useEffect)(() => setActive(selected), [selected]);
25202
+ function onKeyUp(e) {
25203
+ if (e.key === "ArrowLeft" || e.key === "ArrowRight") {
25204
+ const nextTabValue = getNextTabValue(active, e.key, tabs);
25205
+ setActive(nextTabValue);
25206
+ document.getElementById(`${nextTabValue}-tab`)?.focus();
25207
+ }
25208
+ }
25209
+ function onClick(value) {
25210
+ !isRouteTabs(props) && props.onChange(value);
25211
+ }
25212
+ function onBlur(e) {
25213
+ if (!(ref.current && ref.current.contains(e.relatedTarget))) {
25214
+ setActive(selected);
25215
+ }
25216
+ }
25217
+ return /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)("div", { ...(0, import_runtime117.trussProps)({
25218
+ ...{
25219
+ display: "df",
25220
+ alignItems: "aic",
25221
+ overflow: "oa",
25222
+ whiteSpace: "wsnw",
25223
+ gap: "gap1"
25224
+ },
25225
+ ...includeBottomBorder ? {
25226
+ ...{
25227
+ borderBottomStyle: "bbs_solid",
25228
+ borderBottomWidth: "bbw_1px",
25229
+ borderColor: "bcGray200"
25230
+ }
25231
+ } : {}
25232
+ }), children: [
25233
+ !hideTabs(props) && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { ref, className: "dif gap1 asfe", "aria-label": ariaLabel, role: "tablist", ...tid, children: tabs.map((tab) => {
25234
+ const uniqueValue = uniqueTabValue(tab);
25235
+ return /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(TabImpl, { active: active === uniqueValue, focusProps, isFocusVisible, onClick, onKeyUp, onBlur, tab, ...tid[defaultTestId(uniqueValue)] }, uniqueValue);
25236
+ }) }),
25237
+ right && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: "mla df aic gap1 pb1", children: right })
25238
+ ] });
25239
+ }
25240
+ function TabImpl(props) {
25241
+ const {
25242
+ tab,
25243
+ onClick,
25244
+ active,
25245
+ onKeyUp,
25246
+ onBlur,
25247
+ focusProps,
25248
+ isFocusVisible = false,
25249
+ ...others
25250
+ } = props;
25251
+ const {
25252
+ disabled = false,
25253
+ name: label,
25254
+ icon,
25255
+ endAdornment
25256
+ } = tab;
25257
+ const isDisabled = !!disabled;
25258
+ const {
25259
+ hoverProps,
25260
+ isHovered
25261
+ } = (0, import_react_aria64.useHover)({
25262
+ isDisabled
25263
+ });
25264
+ const {
25265
+ baseStyles: baseStyles4,
25266
+ activeStyles: activeStyles3,
25267
+ focusRingStyles: focusRingStyles2,
25268
+ hoverStyles: hoverStyles4,
25269
+ disabledStyles: disabledStyles3,
25270
+ activeHoverStyles
25271
+ } = (0, import_react146.useMemo)(() => getTabStyles(), []);
25272
+ const uniqueValue = uniqueTabValue(tab);
25273
+ const tabProps = {
25274
+ "aria-controls": `${uniqueValue}-tabPanel`,
25275
+ "aria-selected": active,
25276
+ "aria-disabled": isDisabled || void 0,
25277
+ id: `${uniqueValue}-tab`,
25278
+ role: "tab",
25279
+ tabIndex: active ? 0 : -1,
25280
+ ...others,
25281
+ ...(0, import_runtime117.trussProps)({
25282
+ ...baseStyles4,
25283
+ ...active && activeStyles3,
25284
+ ...isDisabled && disabledStyles3,
25285
+ ...isHovered && hoverStyles4,
25286
+ ...isHovered && active && activeHoverStyles,
25287
+ ...isFocusVisible && active && focusRingStyles2
25288
+ })
25289
+ };
25290
+ const interactiveProps = (0, import_react_aria64.mergeProps)(focusProps, hoverProps, {
25291
+ onKeyUp,
25292
+ onBlur,
25293
+ ...isRouteTab(tab) ? {} : {
25294
+ onClick: () => onClick(tab.value)
25447
25295
  }
25448
- }
25449
- return /* @__PURE__ */ (0, import_jsx_runtime202.jsxs)(import_jsx_runtime202.Fragment, { children: [
25450
- wrapWithMotionAndMaybeBack(children),
25451
- actions && /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("footer", { className: "bts_solid btw_1px bcGray200 pt3 pb3 pr3 pl3 df aic jcfe", children: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("div", { className: "df gap1", children: actions.map((buttonProps, i) => /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(Button, { ...buttonProps }, i)) }) })
25296
+ });
25297
+ const tabLabel = /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)(import_jsx_runtime201.Fragment, { children: [
25298
+ label,
25299
+ (icon || endAdornment) && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("span", { className: "ml1", children: icon ? /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(Icon, { icon }) : endAdornment })
25452
25300
  ] });
25453
- };
25454
-
25455
- // src/components/Table/cardSlots.ts
25456
- function cardTitleSlot(text) {
25457
- return { kind: "title", text };
25458
- }
25459
- function cardEyebrowSlot(text) {
25460
- return { kind: "eyebrow", text };
25301
+ return isDisabled ? maybeTooltip({
25302
+ title: resolveTooltip(disabled),
25303
+ placement: "top",
25304
+ children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { ...tabProps, children: tabLabel })
25305
+ }) : isRouteTab(tab) ? /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(import_react_router_dom8.Link, { ...(0, import_react_aria64.mergeProps)(tabProps, interactiveProps, {
25306
+ className: "navLink"
25307
+ }), to: tab.href, children: tabLabel }) : /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("button", { ...{
25308
+ ...tabProps,
25309
+ ...interactiveProps
25310
+ }, children: tabLabel });
25461
25311
  }
25462
- function cardBadgeSlot(text, tags) {
25463
- return { kind: "badge", text, tags };
25312
+ function getTabStyles() {
25313
+ const borderBottomWidthPx = 4;
25314
+ const verticalPaddingPx = 6;
25315
+ const borderBottomStyles = {
25316
+ borderBottomStyle: "bbs_solid",
25317
+ borderBottomWidth: ["borderBottomWidth_var", {
25318
+ "--borderBottomWidth": (0, import_runtime117.maybeCssVar)(`${borderBottomWidthPx}px`)
25319
+ }],
25320
+ paddingBottom: ["pb_var", {
25321
+ "--paddingBottom": `${verticalPaddingPx - borderBottomWidthPx}px`
25322
+ }]
25323
+ };
25324
+ return {
25325
+ baseStyles: {
25326
+ display: "df",
25327
+ alignItems: "aic",
25328
+ height: "h_32px",
25329
+ paddingTop: ["py_var", {
25330
+ "--paddingTop": `${verticalPaddingPx}px`
25331
+ }],
25332
+ paddingBottom: ["py_var", {
25333
+ "--paddingBottom": `${verticalPaddingPx}px`
25334
+ }],
25335
+ paddingLeft: "pl1",
25336
+ paddingRight: "pr1",
25337
+ outline: "outline0",
25338
+ color: "gray700",
25339
+ width: "width_fit_content",
25340
+ cursor: "cursorPointer",
25341
+ fontWeight: "fw4",
25342
+ fontSize: "fz_14px",
25343
+ lineHeight: "lh_20px"
25344
+ },
25345
+ activeStyles: {
25346
+ ...{
25347
+ borderColor: "bcBlue700",
25348
+ fontWeight: "fw6",
25349
+ fontSize: "fz_14px",
25350
+ lineHeight: "lh_20px",
25351
+ color: "gray900"
25352
+ },
25353
+ ...borderBottomStyles
25354
+ },
25355
+ disabledStyles: {
25356
+ color: "gray400",
25357
+ cursor: "cursorNotAllowed"
25358
+ },
25359
+ focusRingStyles: {
25360
+ backgroundColor: "bgBlue50",
25361
+ boxShadow: "bshFocus"
25362
+ },
25363
+ hoverStyles: {
25364
+ ...{
25365
+ borderColor: "bcGray400"
25366
+ },
25367
+ ...borderBottomStyles
25368
+ },
25369
+ activeHoverStyles: {
25370
+ ...{
25371
+ backgroundColor: "bgBlue50",
25372
+ borderColor: "bcBlue700"
25373
+ },
25374
+ ...borderBottomStyles
25375
+ }
25376
+ };
25464
25377
  }
25465
- function cardStatusSlot(tag) {
25466
- return { kind: "status", tag };
25378
+ function getNextTabValue(selected, key, tabs) {
25379
+ const enabledTabs = tabs.filter((tab) => tab.disabled !== true);
25380
+ const tabsToScan = key === "ArrowRight" ? enabledTabs : enabledTabs.reverse();
25381
+ const currentIndex = tabsToScan.findIndex((tab) => uniqueTabValue(tab) === selected);
25382
+ const nextIndex = currentIndex === tabsToScan.length - 1 ? 0 : currentIndex + 1;
25383
+ return uniqueTabValue(tabsToScan[nextIndex]);
25467
25384
  }
25468
- function cardDataBlockSlot(props) {
25469
- return { kind: "dataBlock", ...props };
25385
+ function isRouteTabs(props) {
25386
+ const {
25387
+ tabs
25388
+ } = props;
25389
+ return tabs.length > 0 && isRouteTab(tabs[0]);
25470
25390
  }
25471
- function cardProgressSlot(value) {
25472
- return { kind: "progress", value };
25391
+ function isRouteTab(tab) {
25392
+ return "path" in tab;
25473
25393
  }
25474
-
25475
- // src/components/Table/utils/simpleHelpers.ts
25476
- var simpleHeader = { kind: "header", id: "header", data: void 0 };
25477
- function simpleDataRows(data = []) {
25478
- return [simpleHeader, ...data.map((data2) => ({ kind: "data", data: data2, id: data2.id }))];
25394
+ function uniqueTabValue(tab) {
25395
+ return isRouteTab(tab) ? (0, import_change_case9.camelCase)(tab.name) : tab.value;
25479
25396
  }
25480
-
25481
- // src/components/Table/utils/visitor.ts
25482
- function visit(rows, fn) {
25483
- const todo = [...rows];
25484
- while (todo.length > 0) {
25485
- const row = todo.pop();
25486
- fn(row);
25487
- if (row.children) {
25488
- todo.push(...row.children);
25489
- }
25490
- }
25397
+ function hideTabs(props) {
25398
+ return props.alwaysShowAllTabs ? false : props.tabs.filter((t) => !t.disabled).length === 1;
25491
25399
  }
25492
25400
 
25493
25401
  // src/components/TagGroup.tsx
25494
- var import_jsx_runtime203 = require("react/jsx-runtime");
25402
+ var import_jsx_runtime202 = require("react/jsx-runtime");
25495
25403
  function TagGroup(props) {
25496
25404
  const {
25497
25405
  tags,
@@ -25499,9 +25407,9 @@ function TagGroup(props) {
25499
25407
  ...otherProps
25500
25408
  } = props;
25501
25409
  const tid = useTestIds(otherProps, "tagGroup");
25502
- return /* @__PURE__ */ (0, import_jsx_runtime203.jsxs)("div", { ...tid, className: "df aic fww gap1", children: [
25503
- tags.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(Tag, { ...tag, variant: "secondary" }, tag.text)),
25504
- onEdit && /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("span", { className: "ml1 fw4 fz_14px lh_20px", children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(Button, { label: "Edit", variant: "text", onClick: onEdit, ...tid.edit }) })
25410
+ return /* @__PURE__ */ (0, import_jsx_runtime202.jsxs)("div", { ...tid, className: "df aic fww gap1", children: [
25411
+ tags.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(Tag, { ...tag, variant: "secondary" }, tag.text)),
25412
+ onEdit && /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("span", { className: "ml1 fw4 fz_14px lh_20px", children: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(Button, { label: "Edit", variant: "text", onClick: onEdit, ...tid.edit }) })
25505
25413
  ] });
25506
25414
  }
25507
25415
 
@@ -25514,15 +25422,15 @@ function useToast() {
25514
25422
  }
25515
25423
 
25516
25424
  // src/layouts/SideNavLayout/SideNavLayout.tsx
25517
- var import_runtime119 = require("@homebound/truss/runtime");
25518
- var import_jsx_runtime204 = require("react/jsx-runtime");
25425
+ var import_runtime118 = require("@homebound/truss/runtime");
25426
+ var import_jsx_runtime203 = require("react/jsx-runtime");
25519
25427
  var __maybeInc21 = (inc) => {
25520
25428
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25521
25429
  };
25522
25430
  function SideNavLayout(props) {
25523
25431
  const hasProvider = useHasSideNavLayoutProvider();
25524
- if (hasProvider) return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(SideNavLayoutContent, { ...props });
25525
- return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(SideNavLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(SideNavLayoutContent, { ...props }) });
25432
+ if (hasProvider) return /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(SideNavLayoutContent, { ...props });
25433
+ return /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(SideNavLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(SideNavLayoutContent, { ...props }) });
25526
25434
  }
25527
25435
  function SideNavLayoutContent(props) {
25528
25436
  const {
@@ -25544,7 +25452,7 @@ function SideNavLayoutContent(props) {
25544
25452
  const railOffsetPx = !showRail ? 0 : !bp.mdAndUp || collapsed ? railCollapsedWidthPx : railWidthPx;
25545
25453
  const navTop = bannerAndNavbarChromeTop();
25546
25454
  const railViewportHeight = `calc(var(${beamLayoutViewportHeightVar}, 100vh) - var(${beamEnvironmentBannerLayoutHeightVar}, 0px) - var(${beamNavbarLayoutHeightVar}, 0px))`;
25547
- const rail = showRail && /* @__PURE__ */ (0, import_jsx_runtime204.jsxs)("div", { ...(0, import_runtime119.trussProps)({
25455
+ const rail = showRail && /* @__PURE__ */ (0, import_jsx_runtime203.jsxs)("div", { ...(0, import_runtime118.trussProps)({
25548
25456
  ...{
25549
25457
  display: "df",
25550
25458
  flexDirection: "fdc",
@@ -25568,14 +25476,14 @@ function SideNavLayoutContent(props) {
25568
25476
  position: "sticky",
25569
25477
  left: "left0",
25570
25478
  zIndex: ["z_var", {
25571
- "--zIndex": (0, import_runtime119.maybeCssVar)(zIndices.sideNav)
25479
+ "--zIndex": (0, import_runtime118.maybeCssVar)(zIndices.sideNav)
25572
25480
  }],
25573
25481
  top: ["top_var", {
25574
- "--top": (0, import_runtime119.maybeCssVar)(__maybeInc21(navTop))
25482
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25575
25483
  }],
25576
25484
  alignSelf: "asfs",
25577
25485
  height: ["h_var", {
25578
- "--height": (0, import_runtime119.maybeCssVar)(__maybeInc21(railViewportHeight))
25486
+ "--height": (0, import_runtime118.maybeCssVar)(__maybeInc21(railViewportHeight))
25579
25487
  }],
25580
25488
  width: ["w_var", {
25581
25489
  "--width": `${collapsed ? railCollapsedWidthPx : railWidthPx}px`
@@ -25585,11 +25493,11 @@ function SideNavLayoutContent(props) {
25585
25493
  position: "fixed",
25586
25494
  left: "left0",
25587
25495
  top: ["top_var", {
25588
- "--top": (0, import_runtime119.maybeCssVar)(__maybeInc21(navTop))
25496
+ "--top": (0, import_runtime118.maybeCssVar)(__maybeInc21(navTop))
25589
25497
  }],
25590
25498
  bottom: "bottom0",
25591
25499
  zIndex: ["z_var", {
25592
- "--zIndex": (0, import_runtime119.maybeCssVar)(zIndices.sideNav)
25500
+ "--zIndex": (0, import_runtime118.maybeCssVar)(zIndices.sideNav)
25593
25501
  }]
25594
25502
  },
25595
25503
  ...collapsed ? {
@@ -25601,18 +25509,18 @@ function SideNavLayoutContent(props) {
25601
25509
  }
25602
25510
  }
25603
25511
  }), ...tid.sideNav, children: [
25604
- showCollapseToggle && /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { className: "absolute right2 top2 z2", children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(IconButton, { icon: collapsed ? "menuOpen" : "menuClose", label: collapsed ? "Expand navigation" : "Collapse navigation", onClick: () => setNavState(collapsed ? "expanded" : "collapse"), ...tid.toggle }) }),
25605
- /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { className: "fg1 mh0 df fdc", ...tid.sideNavContent, children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(SideNav, { ...sideNav }) })
25512
+ showCollapseToggle && /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("div", { className: "absolute right2 top2 z2", children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(IconButton, { icon: collapsed ? "menuOpen" : "menuClose", label: collapsed ? "Expand navigation" : "Collapse navigation", onClick: () => setNavState(collapsed ? "expanded" : "collapse"), ...tid.toggle }) }),
25513
+ /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("div", { className: "fg1 mh0 df fdc", ...tid.sideNavContent, children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(SideNav, { ...sideNav }) })
25606
25514
  ] });
25607
- return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime204.jsxs)("div", { ...(0, import_runtime119.mergeProps)(void 0, {
25515
+ return /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime203.jsxs)("div", { ...(0, import_runtime118.mergeProps)(void 0, {
25608
25516
  [beamSideNavLayoutWidthVar]: `${railOffsetPx}px`
25609
25517
  }, {
25610
25518
  display: "df",
25611
25519
  flexDirection: "fdr",
25612
25520
  width: "w100"
25613
25521
  }), ...tid, children: [
25614
- contrastRail ? /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(ContrastScope, { children: rail }) : rail,
25615
- /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { ...(0, import_runtime119.trussProps)({
25522
+ contrastRail ? /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(ContrastScope, { children: rail }) : rail,
25523
+ /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("div", { ...(0, import_runtime118.trussProps)({
25616
25524
  display: "df",
25617
25525
  flexDirection: "fdc",
25618
25526
  flexGrow: "fg1",
@@ -25628,8 +25536,8 @@ function SideNavLayoutContent(props) {
25628
25536
  }
25629
25537
 
25630
25538
  // src/layouts/EnvironmentBannerLayout/EnvironmentBannerLayout.tsx
25631
- var import_runtime120 = require("@homebound/truss/runtime");
25632
- var import_jsx_runtime205 = require("react/jsx-runtime");
25539
+ var import_runtime119 = require("@homebound/truss/runtime");
25540
+ var import_jsx_runtime204 = require("react/jsx-runtime");
25633
25541
  var __maybeInc22 = (inc) => {
25634
25542
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25635
25543
  };
@@ -25645,35 +25553,35 @@ function EnvironmentBannerLayout(props) {
25645
25553
  [beamEnvironmentBannerLayoutHeightVar]: `${bannerHeightPx}px`
25646
25554
  };
25647
25555
  const innerWidth = `var(${beamLayoutViewportWidthVar}, 100vw)`;
25648
- return /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(EnvironmentBannerLayoutHeightProvider, { value: bannerHeightPx, children: /* @__PURE__ */ (0, import_jsx_runtime205.jsxs)("div", { ...(0, import_runtime120.mergeProps)(void 0, style, {
25556
+ return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(EnvironmentBannerLayoutHeightProvider, { value: bannerHeightPx, children: /* @__PURE__ */ (0, import_jsx_runtime204.jsxs)("div", { ...(0, import_runtime119.mergeProps)(void 0, style, {
25649
25557
  display: "df",
25650
25558
  flexDirection: "fdc",
25651
25559
  width: "wfc",
25652
25560
  minWidth: "mw100"
25653
25561
  }), ...tid, children: [
25654
- showBanner && environmentBanner && /* @__PURE__ */ (0, import_jsx_runtime205.jsx)("div", { ...(0, import_runtime120.mergeProps)(void 0, {
25562
+ showBanner && environmentBanner && /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { ...(0, import_runtime119.mergeProps)(void 0, {
25655
25563
  height: environmentBannerSizePx
25656
25564
  }, {
25657
25565
  flexShrink: "fs0",
25658
25566
  width: "w100"
25659
- }), children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)("div", { ...(0, import_runtime120.trussProps)({
25567
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { ...(0, import_runtime119.trussProps)({
25660
25568
  position: "fixed",
25661
25569
  top: "top0",
25662
25570
  left: "left0",
25663
25571
  zIndex: ["z_var", {
25664
- "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.environmentBanner)
25572
+ "--zIndex": (0, import_runtime119.maybeCssVar)(zIndices.environmentBanner)
25665
25573
  }],
25666
25574
  width: ["w_var", {
25667
- "--width": (0, import_runtime120.maybeCssVar)(__maybeInc22(innerWidth))
25575
+ "--width": (0, import_runtime119.maybeCssVar)(__maybeInc22(innerWidth))
25668
25576
  }]
25669
- }), ...tid.bannerSticky, children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(EnvironmentBanner, { ...environmentBanner, ...tid.environmentBanner }) }) }),
25577
+ }), ...tid.bannerSticky, children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(EnvironmentBanner, { ...environmentBanner, ...tid.environmentBanner }) }) }),
25670
25578
  children
25671
25579
  ] }) }) });
25672
25580
  }
25673
25581
 
25674
25582
  // src/layouts/NavbarLayout/NavbarLayout.tsx
25675
25583
  var import_react151 = require("react");
25676
- var import_runtime121 = require("@homebound/truss/runtime");
25584
+ var import_runtime120 = require("@homebound/truss/runtime");
25677
25585
 
25678
25586
  // src/layouts/useAutoHideOnScroll.ts
25679
25587
  var import_react148 = require("react");
@@ -25766,7 +25674,7 @@ function useAutoHideOnScroll(spacerRef, enabled, getTopOffset) {
25766
25674
  }
25767
25675
 
25768
25676
  // src/layouts/useMeasuredHeight.ts
25769
- var import_utils171 = require("@react-aria/utils");
25677
+ var import_utils170 = require("@react-aria/utils");
25770
25678
  var import_react149 = require("react");
25771
25679
  function useMeasuredHeight(ref, enabled) {
25772
25680
  const [height, setHeight] = (0, import_react149.useState)(0);
@@ -25775,7 +25683,7 @@ function useMeasuredHeight(ref, enabled) {
25775
25683
  const next = el ? Math.round(el.getBoundingClientRect().height) : 0;
25776
25684
  setHeight((prev) => prev === next ? prev : next);
25777
25685
  }, [ref]);
25778
- (0, import_utils171.useResizeObserver)({ ref, onResize: syncElementHeight });
25686
+ (0, import_utils170.useResizeObserver)({ ref, onResize: syncElementHeight });
25779
25687
  (0, import_react149.useLayoutEffect)(() => {
25780
25688
  syncElementHeight();
25781
25689
  }, [enabled, syncElementHeight]);
@@ -25784,17 +25692,17 @@ function useMeasuredHeight(ref, enabled) {
25784
25692
 
25785
25693
  // src/layouts/NavbarLayout/NavbarLayoutHeightContext.tsx
25786
25694
  var import_react150 = require("react");
25787
- var import_jsx_runtime206 = require("react/jsx-runtime");
25695
+ var import_jsx_runtime205 = require("react/jsx-runtime");
25788
25696
  var NavbarLayoutHeightContext = (0, import_react150.createContext)(0);
25789
25697
  function NavbarLayoutHeightProvider({ value, children }) {
25790
- return /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(NavbarLayoutHeightContext.Provider, { value, children });
25698
+ return /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(NavbarLayoutHeightContext.Provider, { value, children });
25791
25699
  }
25792
25700
  function useNavbarLayoutHeight() {
25793
25701
  return (0, import_react150.useContext)(NavbarLayoutHeightContext);
25794
25702
  }
25795
25703
 
25796
25704
  // src/layouts/NavbarLayout/NavbarLayout.tsx
25797
- var import_jsx_runtime207 = require("react/jsx-runtime");
25705
+ var import_jsx_runtime206 = require("react/jsx-runtime");
25798
25706
  var __maybeInc23 = (inc) => {
25799
25707
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25800
25708
  };
@@ -25823,10 +25731,10 @@ function NavbarLayout(props) {
25823
25731
  position: "sticky",
25824
25732
  left: "left0",
25825
25733
  zIndex: ["z_var", {
25826
- "--zIndex": (0, import_runtime121.maybeCssVar)(zIndices.navbar)
25734
+ "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25827
25735
  }],
25828
25736
  width: ["w_var", {
25829
- "--width": (0, import_runtime121.maybeCssVar)(__maybeInc23(innerWidth))
25737
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25830
25738
  }]
25831
25739
  }
25832
25740
  ) : (
@@ -25835,10 +25743,10 @@ function NavbarLayout(props) {
25835
25743
  position: "fixed",
25836
25744
  left: "left0",
25837
25745
  zIndex: ["z_var", {
25838
- "--zIndex": (0, import_runtime121.maybeCssVar)(zIndices.navbar)
25746
+ "--zIndex": (0, import_runtime120.maybeCssVar)(zIndices.navbar)
25839
25747
  }],
25840
25748
  width: ["w_var", {
25841
- "--width": (0, import_runtime121.maybeCssVar)(__maybeInc23(innerWidth))
25749
+ "--width": (0, import_runtime120.maybeCssVar)(__maybeInc23(innerWidth))
25842
25750
  }],
25843
25751
  transition: "transitionTop"
25844
25752
  }
@@ -25847,26 +25755,90 @@ function NavbarLayout(props) {
25847
25755
  const innerStyle = autoHideState !== "static" ? {
25848
25756
  top: autoHideState === "revealed" ? bannerTop : `calc(${bannerTop} - ${navHeight}px)`
25849
25757
  } : void 0;
25850
- const navbarEl = (0, import_react151.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime207.jsx)(Navbar, { ...navbar }), [navbar]);
25851
- return /* @__PURE__ */ (0, import_jsx_runtime207.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime207.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime207.jsxs)("div", { ...(0, import_runtime121.mergeProps)(void 0, cssVars, {
25758
+ const navbarEl = (0, import_react151.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(Navbar, { ...navbar }), [navbar]);
25759
+ return /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(NavbarLayoutHeightProvider, { value: navbarOffsetPx, children: /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)("div", { ...(0, import_runtime120.mergeProps)(void 0, cssVars, {
25852
25760
  display: "df",
25853
25761
  flexDirection: "fdc",
25854
25762
  width: "wfc",
25855
25763
  minWidth: "mw100"
25856
25764
  }), ...tid, children: [
25857
- /* @__PURE__ */ (0, import_jsx_runtime207.jsx)("div", { ref: spacerRef, ...(0, import_runtime121.mergeProps)(void 0, {
25765
+ /* @__PURE__ */ (0, import_jsx_runtime206.jsx)("div", { ref: spacerRef, ...(0, import_runtime120.mergeProps)(void 0, {
25858
25766
  height: navHeight
25859
25767
  }, {
25860
25768
  flexShrink: "fs0",
25861
25769
  width: "w100"
25862
- }), children: /* @__PURE__ */ (0, import_jsx_runtime207.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime121.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
25863
- /* @__PURE__ */ (0, import_jsx_runtime207.jsx)("div", { className: "df fdc mh0 mw100 w100", ...tid.body, children })
25770
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime206.jsx)("div", { ref: navMetricsRef, ...(0, import_runtime120.mergeProps)(void 0, innerStyle, innerCss), ...tid.navbar, children: navbarEl }) }),
25771
+ /* @__PURE__ */ (0, import_jsx_runtime206.jsx)("div", { className: "df fdc mh0 mw100 w100", ...tid.body, children })
25864
25772
  ] }) }) });
25865
25773
  }
25866
25774
 
25867
25775
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
25868
25776
  var import_react152 = require("react");
25869
25777
 
25778
+ // src/components/Headers/BaseHeader.tsx
25779
+ var import_runtime121 = require("@homebound/truss/runtime");
25780
+ var import_jsx_runtime207 = require("react/jsx-runtime");
25781
+ function BaseHeader(props) {
25782
+ const {
25783
+ title,
25784
+ documentTitleSuffix,
25785
+ rightSlot,
25786
+ breadcrumbs,
25787
+ bottomSlot,
25788
+ ...otherProps
25789
+ } = props;
25790
+ const tid = useTestIds(otherProps, "header");
25791
+ useDocumentTitle(title, documentTitleSuffix);
25792
+ return /* @__PURE__ */ (0, import_jsx_runtime207.jsxs)("header", { ...tid, ...(0, import_runtime121.trussProps)({
25793
+ display: "df",
25794
+ flexDirection: "fdc",
25795
+ paddingTop: "pt3",
25796
+ borderBottomStyle: "bbs_solid",
25797
+ borderBottomWidth: "bbw_1px",
25798
+ gap: "gap2",
25799
+ borderColor: ["bc_var", {
25800
+ "--borderColor": "var(--b-surface-separator)"
25801
+ }],
25802
+ backgroundColor: ["bgColor_var", {
25803
+ "--backgroundColor": "var(--b-surface)"
25804
+ }]
25805
+ }), children: [
25806
+ /* @__PURE__ */ (0, import_jsx_runtime207.jsxs)("div", { ...(0, import_runtime121.trussProps)({
25807
+ ...{
25808
+ display: "df",
25809
+ justifyContent: "jcsb",
25810
+ width: "w100",
25811
+ gap: "gap1",
25812
+ paddingLeft: "pl3",
25813
+ paddingRight: "pr3"
25814
+ },
25815
+ ...{
25816
+ ...!bottomSlot ? {
25817
+ marginBottom: "mb2"
25818
+ } : {}
25819
+ }
25820
+ }), children: [
25821
+ /* @__PURE__ */ (0, import_jsx_runtime207.jsxs)("div", { className: "mw0", children: [
25822
+ breadcrumbs && /* @__PURE__ */ (0, import_jsx_runtime207.jsx)(Breadcrumbs, { ...breadcrumbs }),
25823
+ /* @__PURE__ */ (0, import_jsx_runtime207.jsx)("h1", { ...tid.title, className: "fw6 fz_20px lh_28px", children: title })
25824
+ ] }),
25825
+ /* @__PURE__ */ (0, import_jsx_runtime207.jsx)("div", { className: "fs0", children: rightSlot })
25826
+ ] }),
25827
+ bottomSlot
25828
+ ] });
25829
+ }
25830
+
25831
+ // src/components/Headers/PageHeader.tsx
25832
+ var import_jsx_runtime208 = require("react/jsx-runtime");
25833
+ function PageHeader2(props) {
25834
+ const {
25835
+ tabs,
25836
+ ...otherProps
25837
+ } = props;
25838
+ const tid = useTestIds(otherProps, "header");
25839
+ return /* @__PURE__ */ (0, import_jsx_runtime208.jsx)(BaseHeader, { ...otherProps, bottomSlot: tabs && /* @__PURE__ */ (0, import_jsx_runtime208.jsx)("div", { className: "pl3 pr3", children: /* @__PURE__ */ (0, import_jsx_runtime208.jsx)(Tabs, { ...tabs, ...tid.tabs }) }) });
25840
+ }
25841
+
25870
25842
  // src/layouts/useBannerAndNavbarHeight.ts
25871
25843
  function useBannerAndNavbarHeight() {
25872
25844
  return useEnvironmentBannerLayoutHeight() + useNavbarLayoutHeight();
@@ -25874,7 +25846,7 @@ function useBannerAndNavbarHeight() {
25874
25846
 
25875
25847
  // src/layouts/PageHeaderLayout/PageHeaderLayout.tsx
25876
25848
  var import_runtime122 = require("@homebound/truss/runtime");
25877
- var import_jsx_runtime208 = require("react/jsx-runtime");
25849
+ var import_jsx_runtime209 = require("react/jsx-runtime");
25878
25850
  var __maybeInc24 = (inc) => {
25879
25851
  return typeof inc === "string" ? inc : `calc(var(--t-spacing) * ${inc})`;
25880
25852
  };
@@ -25929,19 +25901,19 @@ function PageHeaderLayout(props) {
25929
25901
  const innerStyle = autoHideState !== "static" ? {
25930
25902
  top: autoHideState === "revealed" ? outerTop : `calc(${outerTop} - ${headerHeight}px)`
25931
25903
  } : void 0;
25932
- const pageHeaderEl = (0, import_react152.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime208.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
25933
- return /* @__PURE__ */ (0, import_jsx_runtime208.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime208.jsxs)("div", { ...(0, import_runtime122.mergeProps)(void 0, cssVars, {
25904
+ const pageHeaderEl = (0, import_react152.useMemo)(() => /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(PageHeader2, { ...pageHeader }), [pageHeader]);
25905
+ return /* @__PURE__ */ (0, import_jsx_runtime209.jsx)(DocumentScrollLayoutProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime209.jsxs)("div", { ...(0, import_runtime122.mergeProps)(void 0, cssVars, {
25934
25906
  display: "df",
25935
25907
  flexDirection: "fdc",
25936
25908
  width: "w100"
25937
25909
  }), ...tid, children: [
25938
- /* @__PURE__ */ (0, import_jsx_runtime208.jsx)("div", { ref: spacerRef, ...(0, import_runtime122.mergeProps)(void 0, {
25910
+ /* @__PURE__ */ (0, import_jsx_runtime209.jsx)("div", { ref: spacerRef, ...(0, import_runtime122.mergeProps)(void 0, {
25939
25911
  height: headerHeight
25940
25912
  }, {
25941
25913
  flexShrink: "fs0",
25942
25914
  width: "w100"
25943
- }), children: /* @__PURE__ */ (0, import_jsx_runtime208.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime122.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
25944
- /* @__PURE__ */ (0, import_jsx_runtime208.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
25915
+ }), children: /* @__PURE__ */ (0, import_jsx_runtime209.jsx)("div", { ref: headerMetricsRef, ...(0, import_runtime122.mergeProps)(void 0, innerStyle, innerCss), ...tid.pageHeader, children: pageHeaderEl }) }),
25916
+ /* @__PURE__ */ (0, import_jsx_runtime209.jsx)("div", { className: "df fdc fg1 mh0 w100", ...tid.body, children })
25945
25917
  ] }) });
25946
25918
  }
25947
25919
  // Annotate the CommonJS export names for ESM import in node:
@@ -26052,7 +26024,6 @@ function PageHeaderLayout(props) {
26052
26024
  NavbarLayout,
26053
26025
  NumberField,
26054
26026
  OpenModal,
26055
- PageHeader,
26056
26027
  PageHeaderLayout,
26057
26028
  Pagination,
26058
26029
  Palette,