@wix/himalaya-cli 0.1167.0 → 0.1169.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/cli.mjs CHANGED
@@ -8265,6 +8265,8 @@ var init_a11y_contract = __esm({
8265
8265
  StepIndicator: { role: "group", name: "required", state: ["step N of M", "current"], decorative: false },
8266
8266
  // ---- Status, feedback, and overlays -------------------------------------------------
8267
8267
  ProgressBar: { role: "progressbar", name: "conditional", state: ["value/pct or indeterminate"], decorative: false },
8268
+ // The SPINNER's row: status + busy. A determinate ring (`value` / `valuePath`) is announced as a
8269
+ // progressbar with its value instead — RFC 0058 §3.3 "STATUS / PROGRESSBAR" (#3260).
8268
8270
  ActivityIndicator: { role: "status", name: "conditional", state: ["busy"], decorative: false },
8269
8271
  Gauge: { role: "progressbar", name: "required", state: ["value + unit"], decorative: false },
8270
8272
  Skeleton: { role: "decorative", name: "none", state: [], decorative: true },
@@ -27538,6 +27540,9 @@ function assertSitePage(page) {
27538
27540
  if (!page || typeof page.id !== "string" || !PAGE_ID.test(page.id)) {
27539
27541
  throw new Error(`site page id ${JSON.stringify(page?.id)} must match ${PAGE_ID}`);
27540
27542
  }
27543
+ if (page.id.startsWith("drawer_")) {
27544
+ throw new Error(`site page id ${JSON.stringify(page.id)} must not start with "drawer_" (reserved for drawer and native rows)`);
27545
+ }
27541
27546
  if (siteScreenId(page) === SITE_PAGE_SCREEN_ID) {
27542
27547
  throw new Error(`site page id "page" is reserved for the ${SITE_PAGE_SCREEN_ID} fallback screen`);
27543
27548
  }
@@ -27560,13 +27565,17 @@ function assertSiteShellConfig(site) {
27560
27565
  seen.add(page.id);
27561
27566
  sitePageUrl(site.origin, page.path);
27562
27567
  }
27568
+ if (site.layout !== void 0 && !SITE_LAYOUTS.includes(site.layout)) {
27569
+ throw new Error(`site layout ${JSON.stringify(site.layout)} must be one of ${SITE_LAYOUTS.join(", ")}`);
27570
+ }
27563
27571
  if (!site.pages.some((page) => (page.placement ?? "tab") === "tab")) {
27564
27572
  throw new Error('a site shell needs at least one page with placement "tab"');
27565
27573
  }
27566
27574
  }
27567
- var SITE_SHELL_MAX_TABS, SITE_SCREEN_PREFIX, SITE_PAGE_SCREEN_ID, PAGE_ID;
27575
+ var SITE_LAYOUTS, SITE_SHELL_MAX_TABS, SITE_SCREEN_PREFIX, SITE_PAGE_SCREEN_ID, PAGE_ID;
27568
27576
  var init_site_shell = __esm({
27569
27577
  "../../core/ts/src/site-shell.ts"() {
27578
+ SITE_LAYOUTS = ["auto", "tabs", "drawer", "sidebar", "single"];
27570
27579
  SITE_SHELL_MAX_TABS = 4;
27571
27580
  SITE_SCREEN_PREFIX = "site_";
27572
27581
  SITE_PAGE_SCREEN_ID = "site_page";
@@ -31809,7 +31818,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31809
31818
  onChange: (e) => setLink({ ...link, text: e.currentTarget.value })
31810
31819
  }
31811
31820
  ),
31812
- link.error && /* @__PURE__ */ jsx4("div", { role: "alert", style: { color: C("danger", "#E62214"), fontSize: 13 }, children: link.error }),
31821
+ link.error && /* @__PURE__ */ jsx4("div", { role: "alert", style: { color: C("danger", "#E62214"), fontSize: pxToRem(13) }, children: link.error }),
31813
31822
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
31814
31823
  /* @__PURE__ */ jsx4("button", { type: "button", "data-component-id": `${id}/link_apply`, onClick: applyLink, children: "Apply" }),
31815
31824
  /* @__PURE__ */ jsx4("button", { type: "button", "data-component-id": `${id}/link_cancel`, onClick: () => setLink(null), children: "Cancel" })
@@ -31839,7 +31848,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31839
31848
  onChange: onPickFile
31840
31849
  }
31841
31850
  ),
31842
- uploadError && /* @__PURE__ */ jsx4("div", { role: "status", "data-component-id": `${id}/upload_error`, style: { padding: "6px 8px", color: C("danger", "#E62214"), fontSize: 13 }, children: "Couldn't add the image. Try again." }),
31851
+ uploadError && /* @__PURE__ */ jsx4("div", { role: "status", "data-component-id": `${id}/upload_error`, style: { padding: "6px 8px", color: C("danger", "#E62214"), fontSize: pxToRem(13) }, children: "Couldn't add the image. Try again." }),
31843
31852
  status === "loading" && /* @__PURE__ */ jsx4(
31844
31853
  "div",
31845
31854
  {
@@ -31847,7 +31856,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31847
31856
  role: "progressbar",
31848
31857
  "aria-label": "Loading editor",
31849
31858
  "aria-busy": "true",
31850
- style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "none", fontSize: 13, color: C("textSecondary", "#636B78") },
31859
+ style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center", pointerEvents: "none", fontSize: pxToRem(13), color: C("textSecondary", "#636B78") },
31851
31860
  children: "Loading editor\u2026"
31852
31861
  }
31853
31862
  )
@@ -31860,6 +31869,7 @@ var init_richContentEditor = __esm({
31860
31869
  init_formBag();
31861
31870
  init_modifiers();
31862
31871
  init_bindings2();
31872
+ init_tokens2();
31863
31873
  init_protocol();
31864
31874
  init_paths3();
31865
31875
  init_host_session();
@@ -31992,7 +32002,7 @@ var init_controls = __esm({
31992
32002
  } : void 0;
31993
32003
  const rowStretch = ctx.rowStretch === true;
31994
32004
  return /* @__PURE__ */ jsxs2("div", { style: rowShareFloor({ display: "flex", alignItems: "center", justifyContent: "space-between", width: rowStretch ? "auto" : "100%", flex: rowStretch ? "1 1 0" : void 0, ...wrap }, rowStretch, "min-content"), children: [
31995
- props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, color: C("textPrimary", "#111") }, children: labelText(props.label, ctx) }),
32005
+ props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111") }, children: labelText(props.label, ctx) }),
31996
32006
  /* @__PURE__ */ jsx5(
31997
32007
  "button",
31998
32008
  {
@@ -32193,7 +32203,7 @@ var init_controls = __esm({
32193
32203
  style: { all: "unset", display: "inline-flex", alignItems: "center", gap: 10, cursor: fire ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, outlineOffset: 2, ...wrap },
32194
32204
  children: [
32195
32205
  box,
32196
- props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: labelText(props.label, ctx) })
32206
+ props.label != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: labelText(props.label, ctx) })
32197
32207
  ]
32198
32208
  }
32199
32209
  );
@@ -32248,10 +32258,10 @@ var init_controls = __esm({
32248
32258
  "aria-selected": on3,
32249
32259
  tabIndex: on3 ? 0 : -1,
32250
32260
  onClick: () => select(i),
32251
- style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: 14, cursor: "pointer", color: on3 ? accentTextColor(ctx) : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${C("accentPrimary", "#116DFF")}` : "2px solid transparent", marginBottom: -1 },
32261
+ style: { all: "unset", display: "flex", gap: 6, alignItems: "center", minWidth: 44, minHeight: 44, padding: "10px 0", fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(14), cursor: "pointer", color: on3 ? accentTextColor(ctx) : C("textSecondary", "#777"), borderBottom: on3 ? `2px solid ${C("accentPrimary", "#116DFF")}` : "2px solid transparent", marginBottom: -1 },
32252
32262
  children: [
32253
32263
  asText2(t.label),
32254
- t.badge && /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { fontSize: 10, fontWeight: 700, background: C("surfaceTertiary", "#eee"), color: C("textSecondary", "#666"), padding: "1px 6px", borderRadius: 999 }, children: t.badge })
32264
+ t.badge && /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { fontSize: pxToRem(10), fontWeight: 700, background: C("surfaceTertiary", "#eee"), color: C("textSecondary", "#666"), padding: "1px 6px", borderRadius: 999 }, children: t.badge })
32255
32265
  ]
32256
32266
  },
32257
32267
  t.id ?? i
@@ -32297,7 +32307,7 @@ var init_controls = __esm({
32297
32307
  "aria-checked": on3,
32298
32308
  tabIndex: on3 || selId == null && i === 0 ? 0 : -1,
32299
32309
  onClick: () => select(i),
32300
- style: { all: "unset", flex: 1, minWidth: 44, minHeight: seg.height - 2 * seg.trackPadding, textAlign: "center", padding: "7px 4px", borderRadius: outerR, fontFamily: FONT(ctx), fontWeight: 600, fontSize: 13, cursor: "pointer", boxSizing: "border-box", background: on3 ? C("surfacePrimary", "#fff") : seg.outlined ? C(pickRole(ctx.tokens.colors, seg.roles.inactive), "#eee") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 && !seg.outlined ? "0 1px 3px rgba(0,0,0,.12)" : "none", ...outlinedShape },
32310
+ style: { all: "unset", flex: 1, minWidth: 44, minHeight: seg.height - 2 * seg.trackPadding, textAlign: "center", padding: "7px 4px", borderRadius: outerR, fontFamily: FONT(ctx), fontWeight: 600, fontSize: pxToRem(13), cursor: "pointer", boxSizing: "border-box", background: on3 ? C("surfacePrimary", "#fff") : seg.outlined ? C(pickRole(ctx.tokens.colors, seg.roles.inactive), "#eee") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 && !seg.outlined ? "0 1px 3px rgba(0,0,0,.12)" : "none", ...outlinedShape },
32301
32311
  children: [
32302
32312
  on3 && seg.selectedCheck ? /* @__PURE__ */ jsx5("span", { "aria-hidden": "true", children: "\u2713 " }) : null,
32303
32313
  asText2(o.label ?? o.title ?? o.id) || `Option ${i + 1}`
@@ -32328,8 +32338,8 @@ var init_controls = __esm({
32328
32338
  children: [
32329
32339
  /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { display: "inline-flex", alignItems: "center", transition: "transform .15s", transform: open ? "rotate(90deg)" : "none", color: C("textSecondary", "#888") }, children: iconSvg("chevron_right", { size: 16 }) }),
32330
32340
  /* @__PURE__ */ jsxs2("span", { style: { flex: 1, display: "flex", flexDirection: "column" }, children: [
32331
- /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(title) ?? "" }),
32332
- subtitle != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: 13, color: C("textSecondary", "#888") }, children: asText2(subtitle) })
32341
+ /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(title) ?? "" }),
32342
+ subtitle != null && /* @__PURE__ */ jsx5("span", { style: { fontFamily: FONT(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888") }, children: asText2(subtitle) })
32333
32343
  ] })
32334
32344
  ]
32335
32345
  }
@@ -32462,6 +32472,7 @@ var PULL_THRESHOLD, SWIPE_OPEN, PullToRefreshList, SwipeRow, DISMISS_THRESHOLD,
32462
32472
  var init_listGestures = __esm({
32463
32473
  "../../core/web-renderer/src/listGestures.tsx"() {
32464
32474
  "use strict";
32475
+ init_tokens2();
32465
32476
  PULL_THRESHOLD = 56;
32466
32477
  SWIPE_OPEN = 76;
32467
32478
  PullToRefreshList = ({ onRefresh, accent, fg, surface, label: label2 = "Pull to refresh", fontFamily = '"Wix Madefor Text", system-ui', style, children }) => {
@@ -32587,7 +32598,7 @@ var init_listGestures = __esm({
32587
32598
  cursor: "pointer",
32588
32599
  color: "#fff",
32589
32600
  fontWeight: 600,
32590
- fontSize: 13,
32601
+ fontSize: pxToRem(13),
32591
32602
  fontFamily,
32592
32603
  minWidth: SWIPE_OPEN,
32593
32604
  padding: "0 16px",
@@ -33661,7 +33672,7 @@ function hasInteractiveDescendant(node) {
33661
33672
  if (["MonthCalendar", "TimeGrid", "Agenda"].includes(nested.type) && (nested.props?.onSelect || nested.props?.onChange)) return true;
33662
33673
  if (nested.type === "ColorPicker" && nested.props?.onChange) return true;
33663
33674
  if (nested.type === "Fab" && nested.props?.onTap) return true;
33664
- const nestedModifierTap = nested.modifiers?.onTap ?? nested.modifiers?.on_tap;
33675
+ const nestedModifierTap = nested.modifiers?.onTap ?? nested.modifiers?.on_tap ?? nested.modifiers?.onDoubleTap ?? nested.modifiers?.on_double_tap;
33665
33676
  const nestedTapDisabled = nested.props?.disabled === true || nested.props?.loading === true || nested.modifiers?.disabled === true || nested.modifiers?.hitTestable === false || nested.modifiers?.hit_testable === false;
33666
33677
  if (nestedModifierTap && !nestedTapDisabled) return true;
33667
33678
  return Object.values(nested.props ?? {}).some(visit);
@@ -34243,7 +34254,7 @@ function actionTextButton(ctx, action, label2, color, extra) {
34243
34254
  {
34244
34255
  type: "button",
34245
34256
  onClick,
34246
- style: { display: "block", margin: 0, padding: 0, appearance: "none", WebkitAppearance: "none", background: "none", border: "none", textAlign: "left", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 13, color, cursor: onClick ? "pointer" : "default", ...extra },
34257
+ style: { display: "block", margin: 0, padding: 0, appearance: "none", WebkitAppearance: "none", background: "none", border: "none", textAlign: "left", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(13), color, cursor: onClick ? "pointer" : "default", ...extra },
34247
34258
  children: label2
34248
34259
  }
34249
34260
  );
@@ -34525,6 +34536,27 @@ function renderNodeInner(node, ctx) {
34525
34536
  const a11yHidden = extra["aria-hidden"] === "true";
34526
34537
  const tap = node?.modifiers?.onTap ?? node?.modifiers?.on_tap;
34527
34538
  const tapDisabled = normalize(node).props?.disabled === true || normalize(node).props?.loading === true || node?.modifiers?.disabled === true || node?.modifiers?.hitTestable === false || node?.modifiers?.hit_testable === false;
34539
+ const giveControlContract = (activate) => {
34540
+ if (a11yHidden || isNativeInteractiveElement(el) || hasInteractiveDescendant(node)) return;
34541
+ if (extra.role == null) {
34542
+ extra.role = "button";
34543
+ if (typeof el.type !== "string") extra[SYNTHETIC_TAP_ROLE] = true;
34544
+ }
34545
+ const defaultedTabIndex = extra.tabIndex == null || extra.tabIndex === -1 && extra[SYNTHETIC_TABINDEX] === true;
34546
+ if (defaultedTabIndex) {
34547
+ extra.tabIndex = 0;
34548
+ if (typeof el.type !== "string") extra[SYNTHETIC_TABINDEX] = true;
34549
+ }
34550
+ const prevOnKeyDown = el.props.onKeyDown;
34551
+ extra.onKeyDown = (e) => {
34552
+ prevOnKeyDown?.(e);
34553
+ if (e.defaultPrevented || e.target !== e.currentTarget || e.repeat) return;
34554
+ if (e.key !== "Enter" && e.key !== " ") return;
34555
+ e.preventDefault();
34556
+ e.stopPropagation();
34557
+ activate(e);
34558
+ };
34559
+ };
34528
34560
  if (tap && ctx.onAction && !tapDisabled) {
34529
34561
  const prevOnClick = el.props.onClick;
34530
34562
  extra.onClick = (e) => {
@@ -34532,27 +34564,10 @@ function renderNodeInner(node, ctx) {
34532
34564
  prevOnClick?.(e);
34533
34565
  ctx.onAction(resolveItemDeep2(tap, ctx));
34534
34566
  };
34535
- if (!a11yHidden && !isNativeInteractiveElement(el) && !hasInteractiveDescendant(node)) {
34536
- if (extra.role == null) {
34537
- extra.role = "button";
34538
- if (typeof el.type !== "string") extra[SYNTHETIC_TAP_ROLE] = true;
34539
- }
34540
- const defaultedTabIndex = extra.tabIndex == null || extra.tabIndex === -1 && extra[SYNTHETIC_TABINDEX] === true;
34541
- if (defaultedTabIndex) {
34542
- extra.tabIndex = 0;
34543
- if (typeof el.type !== "string") extra[SYNTHETIC_TABINDEX] = true;
34544
- }
34545
- const prevOnKeyDown = el.props.onKeyDown;
34546
- extra.onKeyDown = (e) => {
34547
- prevOnKeyDown?.(e);
34548
- if (e.defaultPrevented || e.target !== e.currentTarget || e.repeat) return;
34549
- if (e.key !== "Enter" && e.key !== " ") return;
34550
- e.preventDefault();
34551
- e.stopPropagation();
34552
- prevOnClick?.(e);
34553
- ctx.onAction(resolveItemDeep2(tap, ctx));
34554
- };
34555
- }
34567
+ giveControlContract((e) => {
34568
+ prevOnClick?.(e);
34569
+ ctx.onAction(resolveItemDeep2(tap, ctx));
34570
+ });
34556
34571
  ensurePressStyles();
34557
34572
  extra["data-himalaya-tap"] = "1";
34558
34573
  const idiomPressed = idiomPress(ctx, "tappable");
@@ -34564,6 +34579,16 @@ function renderNodeInner(node, ctx) {
34564
34579
  e.stopPropagation();
34565
34580
  ctx.onAction(resolveItemDeep2(dtap, ctx));
34566
34581
  };
34582
+ if (!tap && !tapDisabled) {
34583
+ giveControlContract(() => {
34584
+ ctx.onAction(resolveItemDeep2(dtap, ctx));
34585
+ });
34586
+ extra.onClick = (e) => {
34587
+ if (e.detail !== 0) return;
34588
+ e.stopPropagation();
34589
+ ctx.onAction(resolveItemDeep2(dtap, ctx));
34590
+ };
34591
+ }
34567
34592
  }
34568
34593
  const pf = node?.modifiers?.pressFeedback ?? node?.modifiers?.press_feedback;
34569
34594
  if (pf && pf !== "none" && !(ctx.reduceMotion() && (node?.modifiers?.respectReducedMotion ?? node?.modifiers?.respect_reduced_motion) !== false)) {
@@ -34894,7 +34919,7 @@ function renderInner(node, ctx) {
34894
34919
  ] });
34895
34920
  }
34896
34921
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 6, ...wrap }, children: [
34897
- !ctx.runtimeDegraded && /* @__PURE__ */ jsxs5("div", { style: { fontSize: 10, color: C("textSecondary", "#9aa2ad"), fontStyle: "italic" }, children: [
34922
+ !ctx.runtimeDegraded && /* @__PURE__ */ jsxs5("div", { style: { fontSize: pxToRem(10), color: C("textSecondary", "#9aa2ad"), fontStyle: "italic" }, children: [
34898
34923
  "dynamic list",
34899
34924
  itemsPath ? ` \xB7 ${itemsPath.replace(/^\$service:/, "")}` : ""
34900
34925
  ] }),
@@ -34933,8 +34958,8 @@ function renderInner(node, ctx) {
34933
34958
  case "EmptyState":
34934
34959
  return /* @__PURE__ */ jsxs5("div", { style: { textAlign: "center", width: "100%", padding: 12, boxSizing: "border-box", ...wrap }, children: [
34935
34960
  /* @__PURE__ */ jsx8("div", { style: { width: 46, height: 46, borderRadius: 13, background: C("surfaceTertiary", "#eee"), display: "grid", placeItems: "center", margin: "0 auto 12px", color: C("textSecondary", "#9aa2ad") }, children: iconSvg(props.icon, { size: 24 }) }),
34936
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 16, color: C("textPrimary", "#111") }, children: asBoundText(props.title, ctx) || "Empty" }),
34937
- props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#888"), marginTop: 3 }, children: txt(props.subtitle, ctx) }),
34961
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(16), color: C("textPrimary", "#111") }, children: asBoundText(props.title, ctx) || "Empty" }),
34962
+ props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888"), marginTop: 3 }, children: txt(props.subtitle, ctx) }),
34938
34963
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", accentTextColor(ctx), { margin: "12px auto 0", textAlign: "center" })
34939
34964
  ] });
34940
34965
  // ───────────── atoms ─────────────
@@ -34975,13 +35000,13 @@ function renderInner(node, ctx) {
34975
35000
  const badgeLabel = m?.accessibilityLabel ?? m?.accessibility_label;
34976
35001
  const badgeRole = roleDeclared ? void 0 : liveCount ? "status" : typeof badgeLabel === "string" && badgeLabel.trim() !== "" ? "img" : void 0;
34977
35002
  const fg = _bt ? c : sevTextColor(ctx, props.style ?? "info");
34978
- return /* @__PURE__ */ jsx8("span", { role: badgeRole, style: { display: "inline-flex", alignItems: "center", padding: "3px 9px", borderRadius: 999, fontSize: 12, fontWeight: 700, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 16%, ${C("surfacePrimary", "#fff")})`, color: fg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Badge" });
35003
+ return /* @__PURE__ */ jsx8("span", { role: badgeRole, style: { display: "inline-flex", alignItems: "center", padding: "3px 9px", borderRadius: 999, fontSize: pxToRem(12), fontWeight: 700, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 16%, ${C("surfacePrimary", "#fff")})`, color: fg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Badge" });
34979
35004
  }
34980
35005
  case "Tag": {
34981
35006
  const tagToken = boundTokenName(props.tokenPath, props.token, ctx);
34982
35007
  const c = C(tagToken ?? "accentPrimary", "#116DFF");
34983
35008
  const tagFg = tagToken ? c : accentTextColor(ctx);
34984
- return /* @__PURE__ */ jsx8("span", { style: { display: "inline-flex", alignItems: "center", padding: "5px 11px", borderRadius: 999, fontSize: 13, fontWeight: 600, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 14%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${c} 30%, transparent)`, color: tagFg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Tag" });
35009
+ return /* @__PURE__ */ jsx8("span", { style: { display: "inline-flex", alignItems: "center", padding: "5px 11px", borderRadius: 999, fontSize: pxToRem(13), fontWeight: 600, fontFamily: bodyFont(ctx), background: `color-mix(in srgb, ${c} 14%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${c} 30%, transparent)`, color: tagFg, ...wrap }, children: ctx.empty ? "" : txt(props.text, ctx) || "Tag" });
34985
35010
  }
34986
35011
  case "ProgressBar":
34987
35012
  return /* @__PURE__ */ jsx8(ProgressBarNode, { props, ctx, wrap });
@@ -35013,7 +35038,7 @@ function renderInner(node, ctx) {
35013
35038
  } : void 0;
35014
35039
  const leadingEl = props.leading && /* @__PURE__ */ jsx8("div", { style: { flex: "none", display: "flex" }, children: renderNode(props.leading, ctx) });
35015
35040
  const textEl = /* @__PURE__ */ jsxs5("div", { style: { flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: 2 }, children: [
35016
- props.overline != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C(props.overlineColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.overline, ctx) }),
35041
+ props.overline != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C(props.overlineColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.overline, ctx) }),
35017
35042
  /* @__PURE__ */ jsx8("span", { style: { fontFamily: fontStack(titleF.family, ctx.idiom), fontSize: titleF.remSize, fontWeight: titleF.weight, color: C(props.titleColor ?? "textPrimary", "#13171e"), ...ell }, children: txt(props.title, ctx) ?? (ctx.empty ? "" : "") }),
35018
35043
  props.subtitle != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: fontStack(subF.family, ctx.idiom), fontSize: subF.remSize, color: C(props.subtitleColor ?? "textSecondary", "#888"), ...ell }, children: txt(props.subtitle, ctx) })
35019
35044
  ] });
@@ -35037,7 +35062,7 @@ function renderInner(node, ctx) {
35037
35062
  // Menu popup renders inside this slot, menu-item clicks don't double-fire
35038
35063
  // the row either. Mirrors the Button node, which stops for the same reason.
35039
35064
  /* @__PURE__ */ jsx8("div", { onClick: (e) => e.stopPropagation(), style: { flex: "none", display: "flex", alignItems: "center" }, children: renderNode(props.trailing, ctx) })
35040
- ) : accessoryGlyph && /* @__PURE__ */ jsx8("span", { "aria-hidden": props.accessory === "chevron" ? true : void 0, style: { flex: "none", color: C("textTertiary", "#c0c4cc"), fontSize: 20, lineHeight: 1 }, children: accessoryGlyph })
35065
+ ) : accessoryGlyph && /* @__PURE__ */ jsx8("span", { "aria-hidden": props.accessory === "chevron" ? true : void 0, style: { flex: "none", color: C("textTertiary", "#c0c4cc"), fontSize: pxToRem(20), lineHeight: 1 }, children: accessoryGlyph })
35041
35066
  ] });
35042
35067
  }
35043
35068
  case "Slider":
@@ -35054,7 +35079,7 @@ function renderInner(node, ctx) {
35054
35079
  case "Tooltip": {
35055
35080
  const rich = props.title != null && props.title !== "";
35056
35081
  return /* @__PURE__ */ jsxs5("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "flex-start", gap: 6, ...wrap }, children: [
35057
- /* @__PURE__ */ jsxs5("div", { role: "tooltip", style: { maxWidth: 240, width: "fit-content", background: C("textPrimary", "#13171e"), color: C("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: 13, lineHeight: 1.35 }, children: [
35082
+ /* @__PURE__ */ jsxs5("div", { role: "tooltip", style: { maxWidth: 240, width: "fit-content", background: C("textPrimary", "#13171e"), color: C("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35 }, children: [
35058
35083
  rich && /* @__PURE__ */ jsx8("div", { style: { fontWeight: 700, marginBottom: 3 }, children: txt(props.title, ctx) }),
35059
35084
  txt(props.text, ctx)
35060
35085
  ] }),
@@ -35072,17 +35097,17 @@ function renderInner(node, ctx) {
35072
35097
  case "Section": {
35073
35098
  const inset = props.inset === true;
35074
35099
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", width: "100%", boxSizing: "border-box", ...wrap }, children: [
35075
- props.header != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C("textSecondary", "#888"), padding: inset ? "0 4px 6px" : "6px 16px" }, children: txt(props.header, ctx) }),
35100
+ props.header != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 600, letterSpacing: 0.4, textTransform: "uppercase", color: C("textSecondary", "#888"), padding: inset ? "0 4px 6px" : "6px 16px" }, children: txt(props.header, ctx) }),
35076
35101
  /* @__PURE__ */ jsx8("div", { style: inset ? { background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e8eaed")}`, borderRadius: 12, overflow: "hidden", padding: "2px 14px", boxSizing: "border-box" } : void 0, children: kids2(props.children, ctx) }),
35077
- props.footer != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888"), padding: inset ? "6px 4px 0" : "6px 16px" }, children: txt(props.footer, ctx) })
35102
+ props.footer != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888"), padding: inset ? "6px 4px 0" : "6px 16px" }, children: txt(props.footer, ctx) })
35078
35103
  ] });
35079
35104
  }
35080
35105
  case "DisclosureGroup":
35081
35106
  return /* @__PURE__ */ jsx8(DisclosureGroupNode, { props, ctx, wrap });
35082
35107
  case "LabeledContent": {
35083
35108
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 12, width: "100%", padding: "8px 2px", boxSizing: "border-box", ...wrap }, children: [
35084
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) ?? "" }),
35085
- props.content ? /* @__PURE__ */ jsx8("div", { style: { flex: "none" }, children: renderNode(props.content, ctx) }) : /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textSecondary", "#636b78"), textAlign: "right" }, children: txt(props.value, ctx) })
35109
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) ?? "" }),
35110
+ props.content ? /* @__PURE__ */ jsx8("div", { style: { flex: "none" }, children: renderNode(props.content, ctx) }) : /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textSecondary", "#636b78"), textAlign: "right" }, children: txt(props.value, ctx) })
35086
35111
  ] });
35087
35112
  }
35088
35113
  case "Label": {
@@ -35153,7 +35178,7 @@ function renderInner(node, ctx) {
35153
35178
  const onClick = ctx.onAction && props.action ? () => ctx.onAction(resolveItemDeep2(props.action, ctx)) : void 0;
35154
35179
  return /* @__PURE__ */ jsxs5("div", { onClick, style: { display: "inline-flex", alignItems: "center", justifyContent: "center", gap: extended ? 10 : 0, height: dim, width: extended ? void 0 : dim, padding: extended ? "0 20px" : 0, borderRadius: extended ? dim / 2 : "50%", background: bg, color: fg, boxShadow: "0 4px 12px rgba(0,0,0,.22)", cursor: onClick ? "pointer" : "default", ...wrap }, children: [
35155
35180
  props.icon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: isz, height: isz }, children: iconSvg(props.icon, { size: isz, color: fg }) }),
35156
- extended && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15 }, children: txt(props.label, ctx) })
35181
+ extended && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15) }, children: txt(props.label, ctx) })
35157
35182
  ] });
35158
35183
  }
35159
35184
  case "Map":
@@ -35209,13 +35234,13 @@ function renderInner(node, ctx) {
35209
35234
  const fieldLabel = asBoundText(props.label, ctx);
35210
35235
  const showOwnError = !isTextKind && props.errorMessage;
35211
35236
  return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", ...wrap }, children: [
35212
- (fieldLabel || props.required) && /* @__PURE__ */ jsxs5("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 13, color: C("textPrimary", "#111"), marginBottom: 6 }, children: [
35237
+ (fieldLabel || props.required) && /* @__PURE__ */ jsxs5("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(13), color: C("textPrimary", "#111"), marginBottom: 6 }, children: [
35213
35238
  fieldLabel,
35214
35239
  props.required && /* @__PURE__ */ jsx8("span", { style: { color: C("danger", "#e62214") }, children: " *" })
35215
35240
  ] }),
35216
35241
  renderNode(inner, ctx),
35217
- props.helpText && /* @__PURE__ */ jsx8("div", { style: { fontSize: 12, color: C("textSecondary", "#888"), marginTop: 4 }, children: txt(props.helpText, ctx) }),
35218
- showOwnError && /* @__PURE__ */ jsx8("div", { role: "alert", style: { fontSize: 12, color: C("danger", "#E62214"), marginTop: 4 }, children: txt(props.errorMessage, ctx) })
35242
+ props.helpText && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(12), color: C("textSecondary", "#888"), marginTop: 4 }, children: txt(props.helpText, ctx) }),
35243
+ showOwnError && /* @__PURE__ */ jsx8("div", { role: "alert", style: { fontSize: pxToRem(12), color: C("danger", "#E62214"), marginTop: 4 }, children: txt(props.errorMessage, ctx) })
35219
35244
  ] });
35220
35245
  }
35221
35246
  case "FieldError":
@@ -35229,8 +35254,8 @@ function renderInner(node, ctx) {
35229
35254
  const branch = isNodeLike(props.data) ? "data" : isNodeLike(props.loading) ? "loading" : isNodeLike(props.error) ? "error" : null;
35230
35255
  const cfg = !branch ? props.state === "error" ? props.error ?? props.empty : props.empty ?? props.error : null;
35231
35256
  return /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexDirection: "column", gap: 6, width: "100%", ...wrap }, children: branch ? renderNode(props[branch], ctx) : cfg && typeof cfg === "object" ? /* @__PURE__ */ jsxs5("div", { style: { textAlign: "center", padding: "24px 12px", color: C("textSecondary", "#9aa2ad") }, children: [
35232
- cfg.title && /* @__PURE__ */ jsx8("div", { style: { fontSize: 15, fontWeight: 600, color: C("textPrimary", "#111") }, children: asText2(cfg.title) }),
35233
- (cfg.subtitle ?? cfg.message) && /* @__PURE__ */ jsx8("div", { style: { fontSize: 13, marginTop: 4 }, children: asText2(cfg.subtitle ?? cfg.message) }),
35257
+ cfg.title && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#111") }, children: asText2(cfg.title) }),
35258
+ (cfg.subtitle ?? cfg.message) && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(13), marginTop: 4 }, children: asText2(cfg.subtitle ?? cfg.message) }),
35234
35259
  actionTextButton(ctx, cfg.retry ?? cfg.action, asText2(cfg.retryLabel) || asText2(cfg.actionLabel) || (cfg.retry != null ? "Retry" : "Take action"), accentTextColor(ctx), { margin: "12px auto 0", textAlign: "center" })
35235
35260
  ] }) : null });
35236
35261
  }
@@ -35284,15 +35309,15 @@ function renderInner(node, ctx) {
35284
35309
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 11, width: "100%", boxSizing: "border-box", borderRadius: ctx.radius("md", 10), padding: 13, background: `color-mix(in srgb, ${accent} 12%, ${C("surfacePrimary", "#fff")})`, border: `1px solid color-mix(in srgb, ${accent} 32%, transparent)`, ...wrap }, children: [
35285
35310
  /* @__PURE__ */ jsx8("div", { style: { width: 3, borderRadius: 3, background: accent, flex: "none" } }),
35286
35311
  /* @__PURE__ */ jsxs5("div", { children: [
35287
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 14, color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35288
- props.message && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, lineHeight: 1.4, color: C("textSecondary", "#666"), marginTop: 2 }, children: txt(props.message, ctx) }),
35312
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(14), color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35313
+ props.message && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.4, color: C("textSecondary", "#666"), marginTop: 2 }, children: txt(props.message, ctx) }),
35289
35314
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", C("textPrimary", "#111"), { marginTop: 7, textDecoration: "underline" })
35290
35315
  ] })
35291
35316
  ] });
35292
35317
  }
35293
35318
  case "Snackbar": {
35294
35319
  const dot = sevColor(ctx, props.severity ?? "info");
35295
- return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10, background: "#1c1f26", color: "#fff", borderRadius: ctx.radius("md", 10), padding: "12px 14px", width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: 14, ...wrap }, children: [
35320
+ return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10, background: "#1c1f26", color: "#fff", borderRadius: ctx.radius("md", 10), padding: "12px 14px", width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(14), ...wrap }, children: [
35296
35321
  /* @__PURE__ */ jsx8("span", { style: { width: 18, height: 18, borderRadius: "50%", background: dot, display: "grid", placeItems: "center", fontSize: 11, flex: "none" }, children: "\u2713" }),
35297
35322
  /* @__PURE__ */ jsx8("span", { style: { flex: 1, minWidth: 0 }, children: txt(props.message, ctx) }),
35298
35323
  actionTextButton(ctx, props.action, asBoundText(props.actionLabel, ctx) || "Take action", "#fff", { flex: "none", textDecoration: "underline" })
@@ -35308,11 +35333,11 @@ function renderInner(node, ctx) {
35308
35333
  // draws as its own modal dialog.
35309
35334
  case "AlertDialog":
35310
35335
  return /* @__PURE__ */ jsxs5("div", { role: "alertdialog", "aria-label": props.title != null ? asBoundText(props.title, ctx) : "Alert", style: { background: C("surfacePrimary", "#fff"), borderRadius: ctx.radius("lg", 14), padding: 18, width: "100%", boxSizing: "border-box", border: `1px solid ${C("border", "#e3e3e3")}`, boxShadow: "0 12px 30px -12px rgba(0,0,0,.4)", ...wrap }, children: [
35311
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 17, color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35312
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 14, lineHeight: 1.45, color: C("textSecondary", "#666"), margin: "6px 0 16px" }, children: txt(props.message, ctx) }),
35336
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(17), color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35337
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(14), lineHeight: 1.45, color: C("textSecondary", "#666"), margin: "6px 0 16px" }, children: txt(props.message, ctx) }),
35313
35338
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 10 }, children: [
35314
- props.cancelAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.cancelAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15, background: C("surfaceTertiary", "#eee"), color: C("textPrimary", "#111"), cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.cancelLabel, ctx) || "Cancel" }),
35315
- props.confirmAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.confirmAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 15, background: props.destructive ? C("danger", "#E62214") : C("accentPrimary", "#116DFF"), color: "#fff", cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.confirmLabel, ctx) || (props.destructive ? "Delete" : "Confirm") })
35339
+ props.cancelAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.cancelAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15), background: C("surfaceTertiary", "#eee"), color: C("textPrimary", "#111"), cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.cancelLabel, ctx) || "Cancel" }),
35340
+ props.confirmAction != null && /* @__PURE__ */ jsx8("button", { type: "button", onClick: actionClick(ctx, props.confirmAction), style: { flex: 1, textAlign: "center", padding: 11, borderRadius: ctx.radius("md", 8), appearance: "none", WebkitAppearance: "none", border: "none", fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(15), background: props.destructive ? C("danger", "#E62214") : C("accentPrimary", "#116DFF"), color: "#fff", cursor: ctx.onAction ? "pointer" : "default" }, children: asBoundText(props.confirmLabel, ctx) || (props.destructive ? "Delete" : "Confirm") })
35316
35341
  ] })
35317
35342
  ] });
35318
35343
  // ───────────── embeddable WebView ─────────────
@@ -35324,13 +35349,13 @@ function renderInner(node, ctx) {
35324
35349
  if (intent) return /* @__PURE__ */ jsx8("div", { style: { alignSelf: "stretch", ...wrap }, children: intent(props, ctx) });
35325
35350
  const childKeys = Object.entries(props).filter(([, v]) => isNodeLike(v) || Array.isArray(v) && v.some(isNodeLike));
35326
35351
  return /* @__PURE__ */ jsxs5("div", { "data-unknown-type": type, style: { display: "flex", flexDirection: "column", gap: 6, padding: 6, border: `1px dashed ${C("border", "#c5cdd6")}`, borderRadius: 6, ...wrap }, children: [
35327
- /* @__PURE__ */ jsx8("div", { style: { alignSelf: "flex-start", fontSize: 9, fontWeight: 700, letterSpacing: 0.4, padding: "1px 6px", borderRadius: 999, background: C("surfaceTertiary", "#f0f0f3"), color: C("textSecondary", "#9aa2ad"), fontFamily: "ui-monospace, monospace" }, children: type }),
35352
+ /* @__PURE__ */ jsx8("div", { style: { alignSelf: "flex-start", fontSize: pxToRem(9), fontWeight: 700, letterSpacing: 0.4, padding: "1px 6px", borderRadius: 999, background: C("surfaceTertiary", "#f0f0f3"), color: C("textSecondary", "#9aa2ad"), fontFamily: "ui-monospace, monospace" }, children: type }),
35328
35353
  childKeys.map(([k, v]) => /* @__PURE__ */ jsx8(React7.Fragment, { children: Array.isArray(v) ? kids2(v.filter(isNodeLike), ctx) : renderNode(v, ctx) }, k))
35329
35354
  ] });
35330
35355
  }
35331
35356
  }
35332
35357
  }
35333
- var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
35358
+ var useIsomorphicLayoutEffect, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, pressStylesInjected, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asBoundText, useBoundString, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, WorkerSubtreeNode, RichContentNode, resolveItemDeep2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, ReactiveDirectScalars, HiddenGate, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MenuNode, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, SYNTHETIC_TAP_ROLE, SYNTHETIC_TABINDEX, INFERRED_DECORATIVE, SELF_RENDERED_LEAF, ROLE_WHEN_NAMED, AUTHORED_ROLE, PENDING_RANGE, RANGE_ROLES, NODE_A11Y_ATTRS, INTERACTIVE_ROLES, ALWAYS_INTERACTIVE_COMPONENT_TYPES, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, ButtonNode, OtpInputNode, ProgressBarNode, ACTIVITY_DEFAULT_NAME, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, PRESENTED_OVERLAY_ATTR, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, LegendMarker, LegendNode, cellAlign, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, WheelPickerNode, ColorPickerNode, FilterChipsNode, TILE_PX, MAX_MERCATOR_LAT, DEFAULT_TILE_MAX_ZOOM, CIRCLE_SEGMENTS, METRES_PER_DEG_LAT, MARKER_HIT_RADIUS, SHAPE_HIT_RADIUS, MapNode, CollapsingHeaderNode, UnsupportedOnSurface, CALENDAR_DATE_ONLY_RE, CAL_DEFAULT_MAX_DOTS, CAL_AGENDA_INITIAL_DAYS, CAL_AGENDA_PAGE_DAYS, CAL_DEFAULT_SNAP_MINUTES, CAL_UNASSIGNED_LANE_ID, MonthCalendarNode, TimeGridNode, AgendaNode, ARIA_ROLE, initialFocusScheduled, PRESENTED_SCOPE, focusRoots, A11yHintDescription, WebRenderer;
35334
35359
  var init_renderNode = __esm({
35335
35360
  "../../core/web-renderer/src/renderNode.tsx"() {
35336
35361
  "use strict";
@@ -35875,7 +35900,7 @@ var init_renderNode = __esm({
35875
35900
  e.preventDefault();
35876
35901
  submit();
35877
35902
  };
35878
- const inputBase = { flex: 1, minWidth: 0, minHeight: multilineBox ? 44 : void 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: multilineBox ? 0 : "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e"), resize: "none" };
35903
+ const inputBase = { flex: 1, minWidth: 0, minHeight: multilineBox ? 44 : void 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: multilineBox ? 0 : "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e"), resize: "none" };
35879
35904
  const accIcon = (name) => /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, flex: "none" }, children: iconSvg(name, { size: 17, color: muted }) });
35880
35905
  const box = borderless ? { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", ...wrap } : { display: "flex", alignItems: "center", gap: 8, width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${errored ? C("danger", "#E62214") : C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: multilineBox ? "11px 14px" : "0 14px", boxSizing: "border-box", minHeight: multilineBox ? 48 : 44, ...wrap };
35881
35906
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 4, width: "100%" }, children: [
@@ -35890,7 +35915,7 @@ var init_renderNode = __esm({
35890
35915
  }, style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, borderRadius: "50%", background: C("surfaceTertiary", "#e3e6ea"), color: muted, fontSize: 12, flex: "none", cursor: "pointer" }, children: "\xD7" }),
35891
35916
  props.trailingIcon && accIcon(props.trailingIcon)
35892
35917
  ] }),
35893
- revealed ? /* @__PURE__ */ jsx8("span", { id: errorId, role: "alert", style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("danger", "#E62214"), paddingLeft: 2 }, children: message }) : (props.helperText ?? cfg.helperText) != null ? /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: errored ? C("danger", "#E62214") : muted, paddingLeft: 2 }, children: txt(props.helperText ?? cfg.helperText, ctx) }) : null
35918
+ revealed ? /* @__PURE__ */ jsx8("span", { id: errorId, role: "alert", style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("danger", "#E62214"), paddingLeft: 2 }, children: message }) : (props.helperText ?? cfg.helperText) != null ? /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: errored ? C("danger", "#E62214") : muted, paddingLeft: 2 }, children: txt(props.helperText ?? cfg.helperText, ctx) }) : null
35894
35919
  ] });
35895
35920
  };
35896
35921
  MenuNode = withExtras("MenuNode", ({ props, ctx, wrap }) => {
@@ -36003,7 +36028,7 @@ var init_renderNode = __esm({
36003
36028
  setOpen(false);
36004
36029
  ctx.onAction(resolveItemDeep2(it.action, ctx));
36005
36030
  } : void 0,
36006
- style: { display: "flex", alignItems: "center", gap: 10, padding: "9px 10px", borderRadius: 8, cursor: it?.disabled ? "default" : "pointer", opacity: it?.disabled ? 0.4 : 1, color: it?.destructive ? C("danger", "#E62214") : C("textPrimary", "#13171e"), fontFamily: bodyFont(ctx), fontSize: 15 },
36031
+ style: { display: "flex", alignItems: "center", gap: 10, padding: "9px 10px", borderRadius: 8, cursor: it?.disabled ? "default" : "pointer", opacity: it?.disabled ? 0.4 : 1, color: it?.destructive ? C("danger", "#E62214") : C("textPrimary", "#13171e"), fontFamily: bodyFont(ctx), fontSize: pxToRem(15) },
36007
36032
  children: [
36008
36033
  it?.icon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 20, height: 20 }, children: iconSvg(it.icon, { size: 18, color: it?.destructive ? C("danger", "#E62214") : C("textSecondary", "#636b78") }) }),
36009
36034
  /* @__PURE__ */ jsx8("span", { children: asText2(it?.label) || "Item" })
@@ -36046,7 +36071,7 @@ var init_renderNode = __esm({
36046
36071
  if (props.visible === false) return null;
36047
36072
  if (isBoundText && !text8) return null;
36048
36073
  const c = (props.severity ?? "error") === "warning" ? C("warning", "#E89F00") : C("danger", "#E62214");
36049
- return /* @__PURE__ */ jsxs5("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c, fontSize: 13, fontFamily: bodyFont(ctx), ...wrap }, children: [
36074
+ return /* @__PURE__ */ jsxs5("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c, fontSize: pxToRem(13), fontFamily: bodyFont(ctx), ...wrap }, children: [
36050
36075
  /* @__PURE__ */ jsx8("span", { "aria-hidden": "true", children: "\u26A0" }),
36051
36076
  text8
36052
36077
  ] });
@@ -36446,15 +36471,15 @@ var init_renderNode = __esm({
36446
36471
  return `${Math.floor(safe / 60)}:${String(Math.floor(safe % 60)).padStart(2, "0")}`;
36447
36472
  };
36448
36473
  const builtInControls = /* @__PURE__ */ jsxs5("div", { "data-media-controls": "builtIn", style: { display: "grid", gridTemplateColumns: "auto auto 1fr auto auto", gap: 10, alignItems: "center", width: "100%", padding: "10px 12px", boxSizing: "border-box", color: foreground, background: "linear-gradient(transparent,rgba(0,0,0,.82))" }, children: [
36449
- items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Previous", onClick: () => select(index - 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u25C0\u25C0" }),
36474
+ items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Previous", onClick: () => select(index - 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u25C0\u25C0" }),
36450
36475
  /* @__PURE__ */ jsx8("button", { "aria-label": status === "playing" ? "Pause" : "Play", onClick: () => status === "playing" ? pause() : void play(), style: { width: 38, height: 38, borderRadius: "50%", color: background, background: foreground, border: 0, fontSize: 18 }, children: status === "playing" ? "\u275A\u275A" : "\u25B6" }),
36451
36476
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 8, minWidth: 0 }, children: [
36452
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 11, whiteSpace: "nowrap" }, children: time(position) }),
36477
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(11), whiteSpace: "nowrap" }, children: time(position) }),
36453
36478
  /* @__PURE__ */ jsx8("input", { "aria-label": "Media position", type: "range", min: 0, max: Math.max(duration2, 1), step: 0.1, value: Math.min(position, Math.max(duration2, 1)), onChange: (event) => seek(Number(event.currentTarget.value)), style: { width: "100%", accentColor: accent } }),
36454
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 11, whiteSpace: "nowrap" }, children: time(duration2) })
36479
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(11), whiteSpace: "nowrap" }, children: time(duration2) })
36455
36480
  ] }),
36456
- items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Next", onClick: () => select(index + 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u25B6\u25B6" }),
36457
- props.fullscreen !== "disabled" && /* @__PURE__ */ jsx8("button", { "aria-label": "Fullscreen", onClick: () => void toggleFullscreen(), style: { color: "inherit", background: "transparent", border: 0, fontSize: 18 }, children: "\u26F6" })
36481
+ items.length > 1 && /* @__PURE__ */ jsx8("button", { "aria-label": "Next", onClick: () => select(index + 1), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u25B6\u25B6" }),
36482
+ props.fullscreen !== "disabled" && /* @__PURE__ */ jsx8("button", { "aria-label": "Fullscreen", onClick: () => void toggleFullscreen(), style: { color: "inherit", background: "transparent", border: 0, fontSize: pxToRem(18) }, children: "\u26F6" })
36458
36483
  ] });
36459
36484
  const customControls = chrome === "custom" ? slot("controls") : null;
36460
36485
  const showBuiltIn = chrome === "builtIn";
@@ -36513,7 +36538,7 @@ var init_renderNode = __esm({
36513
36538
  slot("audioBackground"),
36514
36539
  isUnsupportedProvider ? /* @__PURE__ */ jsxs5("div", { role: "status", style: { flex: 1, minHeight: 0, display: "grid", placeItems: "center", gap: 8, padding: 24, textAlign: "center", background: "#17191f", color: foreground }, children: [
36515
36540
  /* @__PURE__ */ jsx8("div", { style: { fontWeight: 700 }, children: "Provider playback unavailable" }),
36516
- /* @__PURE__ */ jsxs5("div", { style: { opacity: 0.75, fontSize: 13 }, children: [
36541
+ /* @__PURE__ */ jsxs5("div", { style: { opacity: 0.75, fontSize: pxToRem(13) }, children: [
36517
36542
  "This course uses an unsupported provider adapter: ",
36518
36543
  provider,
36519
36544
  "."
@@ -36651,7 +36676,7 @@ var init_renderNode = __esm({
36651
36676
  const bandColor = typeof props.coverBandColor === "string" && props.coverBandColor.length > 0 ? props.coverBandColor : void 0;
36652
36677
  return /* @__PURE__ */ jsxs5("div", { style: { width: "100%", position: "relative", ...bandColor ? { background: bandColor, borderRadius: ctx.radius("md", 8), overflow: "hidden" } : {}, ...wrap }, children: [
36653
36678
  bandColor ? /* @__PURE__ */ jsx8("div", { "data-testid": "webview-cover-band", style: { height: 8, background: bandColor } }) : null,
36654
- htmlStr ? /* @__PURE__ */ jsx8("iframe", { title: "webview", srcDoc: htmlStr, sandbox: "allow-scripts", style: frameStyle }) : urlFrame ? /* @__PURE__ */ jsx8("iframe", { title: "webview", src: urlFrame.src, sandbox: urlFrame.sandbox, style: frameStyle }) : /* @__PURE__ */ jsx8("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: 11, border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" })
36679
+ htmlStr ? /* @__PURE__ */ jsx8("iframe", { title: "webview", srcDoc: htmlStr, sandbox: "allow-scripts", style: frameStyle }) : urlFrame ? /* @__PURE__ */ jsx8("iframe", { title: "webview", src: urlFrame.src, sandbox: urlFrame.sandbox, style: frameStyle }) : /* @__PURE__ */ jsx8("div", { style: { ...frameStyle, display: "grid", placeItems: "center", color: "#999", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), border: "1px dashed #ccc" }, children: urlStr ? "WebView (url not allowed)" : "WebView (no url)" })
36655
36680
  ] });
36656
36681
  });
36657
36682
  InteractivePicker = withExtras("InteractivePicker", ({ props, ctx, wrap }) => {
@@ -36682,7 +36707,7 @@ var init_renderNode = __esm({
36682
36707
  const staticSel = ctx.empty ? null : selectedId;
36683
36708
  return /* @__PURE__ */ jsx8("div", { style: { display: "flex", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 8), padding: 3, width: "100%", boxSizing: "border-box", ...wrap }, children: opts.map((o, i) => {
36684
36709
  const on3 = o.id === staticSel;
36685
- return /* @__PURE__ */ jsx8("span", { style: { flex: 1, textAlign: "center", padding: "8px 4px", borderRadius: ctx.radius("sm", 6), fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: 14, background: on3 ? C("surfacePrimary", "#fff") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 ? "0 1px 3px rgba(0,0,0,.12)" : "none" }, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i);
36710
+ return /* @__PURE__ */ jsx8("span", { style: { flex: 1, textAlign: "center", padding: "8px 4px", borderRadius: ctx.radius("sm", 6), fontFamily: bodyFont(ctx), fontWeight: 600, fontSize: pxToRem(14), background: on3 ? C("surfacePrimary", "#fff") : "transparent", color: on3 ? C("textPrimary", "#111") : C("textSecondary", "#777"), boxShadow: on3 ? "0 1px 3px rgba(0,0,0,.12)" : "none" }, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i);
36686
36711
  }) });
36687
36712
  }
36688
36713
  const emit = (id) => {
@@ -36697,7 +36722,7 @@ var init_renderNode = __esm({
36697
36722
  value: sel,
36698
36723
  onChange: (e) => emit(e.currentTarget.value),
36699
36724
  "aria-label": String(placeholderText || "Select"),
36700
- style: { width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "11px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap },
36725
+ style: { width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "11px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap },
36701
36726
  children: [
36702
36727
  props.placeholder && /* @__PURE__ */ jsx8("option", { value: "", disabled: true, children: placeholderText }),
36703
36728
  opts.map((o, i) => /* @__PURE__ */ jsx8("option", { value: o.id, children: asText2(o.label ?? o.title ?? o.id) }, o.id ?? i))
@@ -36749,9 +36774,9 @@ var init_renderNode = __esm({
36749
36774
  const d = new Date(props.valueUnix * 1e3);
36750
36775
  label2 = timeMode ? d.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
36751
36776
  }
36752
- return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap }, children: [
36777
+ return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap }, children: [
36753
36778
  /* @__PURE__ */ jsx8("span", { children: label2 }),
36754
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 18 }, children: "\u{1F4C5}" })
36779
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(18) }, children: "\u{1F4C5}" })
36755
36780
  ] });
36756
36781
  }
36757
36782
  const onChange = props.onChange;
@@ -36779,7 +36804,7 @@ var init_renderNode = __esm({
36779
36804
  value: val,
36780
36805
  onChange: (e) => emit(e.currentTarget.value),
36781
36806
  "aria-label": timeMode ? "Select time" : "Select date",
36782
- style: { width: "100%", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#111"), ...wrap }
36807
+ style: { width: "100%", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), padding: "12px 14px", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#111"), ...wrap }
36783
36808
  }
36784
36809
  );
36785
36810
  });
@@ -36791,7 +36816,7 @@ var init_renderNode = __esm({
36791
36816
  /* @__PURE__ */ jsx8("circle", { cx: "11", cy: "11", r: "7" }),
36792
36817
  /* @__PURE__ */ jsx8("path", { d: "m21 21-4.3-4.3" })
36793
36818
  ] });
36794
- const box = { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 10), padding: "0 14px", minHeight: 44, color: muted, fontFamily: bodyFont(ctx), fontSize: 15, ...wrap };
36819
+ const box = { display: "flex", alignItems: "center", gap: 8, width: "100%", boxSizing: "border-box", background: C("surfaceTertiary", "#eee"), borderRadius: ctx.radius("md", 10), padding: "0 14px", minHeight: 44, color: muted, fontFamily: bodyFont(ctx), fontSize: pxToRem(15), ...wrap };
36795
36820
  if (!ctx.onAction) {
36796
36821
  return /* @__PURE__ */ jsxs5("div", { style: box, children: [
36797
36822
  icon,
@@ -36834,7 +36859,7 @@ var init_renderNode = __esm({
36834
36859
  },
36835
36860
  placeholder: String(placeholderText || "Search\u2026"),
36836
36861
  "aria-label": String(placeholderText || "Search"),
36837
- style: { flex: 1, minWidth: 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }
36862
+ style: { flex: 1, minWidth: 0, alignSelf: "stretch", border: "none", outline: "none", background: "transparent", padding: "11px 0", margin: 0, width: "100%", boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }
36838
36863
  }
36839
36864
  ),
36840
36865
  local && /* @__PURE__ */ jsx8("span", { onClick: () => onInput(""), style: { display: "inline-grid", placeItems: "center", width: 18, height: 18, borderRadius: "50%", background: C("surfaceTertiary", "#e3e6ea"), color: muted, fontSize: 12, flex: "none", cursor: "pointer" }, children: "\xD7" })
@@ -36911,7 +36936,7 @@ var init_renderNode = __esm({
36911
36936
  background: C("surfacePrimary", "#fff"),
36912
36937
  display: "grid",
36913
36938
  placeItems: "center",
36914
- fontSize: 18,
36939
+ fontSize: pxToRem(18),
36915
36940
  color: accentTextColor(ctx),
36916
36941
  // #3275 — a glyph on a neutral key
36917
36942
  border: `1px solid ${C("border", "#e3e3e3")}`,
@@ -36929,20 +36954,20 @@ var init_renderNode = __esm({
36929
36954
  if (ctx.empty) {
36930
36955
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36931
36956
  /* @__PURE__ */ jsx8("span", { style: btn("min"), children: "\u2212" }),
36932
- /* @__PURE__ */ jsx8("b", { ...valueA11y, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
36957
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: "\u2014" }),
36933
36958
  /* @__PURE__ */ jsx8("span", { style: btn("max"), children: "+" })
36934
36959
  ] });
36935
36960
  }
36936
36961
  if (!ctx.onAction) {
36937
36962
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36938
36963
  /* @__PURE__ */ jsx8("span", { style: btn("min"), children: "\u2212" }),
36939
- /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, "aria-readonly": "true", style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
36964
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, "aria-readonly": "true", style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111") }, children: value }),
36940
36965
  /* @__PURE__ */ jsx8("span", { style: btn("max"), children: "+" })
36941
36966
  ] });
36942
36967
  }
36943
36968
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36944
36969
  /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Decrease", disabled: disabled("min"), onClick: () => press(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
36945
- /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, tabIndex: 0, onKeyDown: onValueKeyDown, style: { fontSize: 16, minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
36970
+ /* @__PURE__ */ jsx8("b", { ...valueA11y, "aria-valuenow": value, tabIndex: 0, onKeyDown: onValueKeyDown, style: { fontSize: pxToRem(16), minWidth: 24, textAlign: "center", color: C("textPrimary", "#111"), fontVariantNumeric: "tabular-nums" }, children: value }),
36946
36971
  /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Increase", disabled: disabled("max"), onClick: () => press(step), style: { ...btn("max"), font: "inherit" }, children: "+" }),
36947
36972
  /* @__PURE__ */ jsx8("span", { "aria-live": "polite", style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }, children: pressed.text + (pressed.count % 2 ? "\xA0" : "") })
36948
36973
  ] });
@@ -37146,7 +37171,7 @@ var init_renderNode = __esm({
37146
37171
  const side2 = typeof w === "number" ? w : 40;
37147
37172
  return /* @__PURE__ */ jsx8("div", { style: { width: side2, height: side2, borderRadius: "50%", background: ph ?? C("surfaceTertiary", "#e6e6e6"), display: "grid", placeItems: "center", flex: "none", ...wrap }, children: iconSvg(props.icon, { size: Math.max(14, Math.round(side2 * 0.5)), color: accentTextColor(ctx) }) });
37148
37173
  }
37149
- return /* @__PURE__ */ jsx8("div", { style: { width: w, height: boxHeight, aspectRatio: ar, borderRadius: r, background: ph ?? (hasSource ? `linear-gradient(135deg, ${C("surfaceTertiary", "#e6e6e6")}, ${C("surfaceSecondary", "#f2f2f2")})` : "transparent"), color: C("textSecondary", "#999"), display: "flex", alignItems: "center", justifyContent: "center", fontFamily: "ui-monospace, monospace", fontSize: 11, flex: "none", ...wrap }, children: banner || !hasSource ? "" : "\u2022" });
37174
+ return /* @__PURE__ */ jsx8("div", { style: { width: w, height: boxHeight, aspectRatio: ar, borderRadius: r, background: ph ?? (hasSource ? `linear-gradient(135deg, ${C("surfaceTertiary", "#e6e6e6")}, ${C("surfaceSecondary", "#f2f2f2")})` : "transparent"), color: C("textSecondary", "#999"), display: "flex", alignItems: "center", justifyContent: "center", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(11), flex: "none", ...wrap }, children: banner || !hasSource ? "" : "\u2022" });
37150
37175
  });
37151
37176
  ANIMATION_LEAF = { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [SELF_RENDERED_LEAF]: true, [ROLE_WHEN_NAMED]: "img" };
37152
37177
  LottieNode = withExtras("LottieNode", ({ props, ctx, wrap }) => {
@@ -37341,6 +37366,7 @@ var init_renderNode = __esm({
37341
37366
  };
37342
37367
  return /* @__PURE__ */ jsx8("div", { ...a11y, style: { width: "100%", height: 6, borderRadius: 999, background: C(boundTokenName(props.trackColorPath, props.trackColor, ctx) ?? "surfaceTertiary", "#eee"), overflow: "hidden", ...wrap }, children: /* @__PURE__ */ jsx8("div", { style: { width: `${Math.round((p ?? 0.4) * 100)}%`, height: "100%", borderRadius: 999, background: C(boundTokenName(props.tintPath, props.tint, ctx) ?? "accentPrimary", "#116DFF"), opacity: p == null ? 0.45 : 1, ...animatedFill ? { transition: ctx.motionTransition(ctx.kit?.motion) } : {} } }) });
37343
37368
  });
37369
+ ACTIVITY_DEFAULT_NAME = "Loading";
37344
37370
  ActivityIndicatorNode = withExtras("ActivityIndicatorNode", ({ props, ctx, wrap }) => {
37345
37371
  const C = ctx.color;
37346
37372
  const size = props.size ?? 24;
@@ -37355,10 +37381,10 @@ var init_renderNode = __esm({
37355
37381
  const pct = Math.max(0, Math.min(1, aiNum));
37356
37382
  const ringMask = `radial-gradient(farthest-side, transparent calc(100% - ${thick}px), #000 calc(100% - ${thick}px))`;
37357
37383
  const a11y = { "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(pct * 100) };
37358
- return /* @__PURE__ */ jsx8("div", { role: "progressbar", ...a11y, style: { width: size, height: size, borderRadius: "50%", flex: "none", background: `conic-gradient(${tint} ${pct * 360}deg, ${track} 0deg)`, WebkitMask: ringMask, mask: ringMask, ...wrap } });
37384
+ return /* @__PURE__ */ jsx8("div", { role: "progressbar", "aria-label": ACTIVITY_DEFAULT_NAME, ...a11y, style: { width: size, height: size, borderRadius: "50%", flex: "none", background: `conic-gradient(${tint} ${pct * 360}deg, ${track} 0deg)`, WebkitMask: ringMask, mask: ringMask, ...wrap } });
37359
37385
  }
37360
37386
  ensureSpinKeyframes();
37361
- return /* @__PURE__ */ jsx8("div", { role: "progressbar", style: { width: size, height: size, borderRadius: "50%", border: `${thick}px solid ${track}`, borderTopColor: tint, boxSizing: "border-box", flex: "none", animation: ctx.empty ? void 0 : "himalaya-spin 0.8s linear infinite", ...wrap } });
37387
+ return /* @__PURE__ */ jsx8("div", { role: "status", "aria-busy": "true", "aria-label": ACTIVITY_DEFAULT_NAME, style: { width: size, height: size, borderRadius: "50%", border: `${thick}px solid ${track}`, borderTopColor: tint, boxSizing: "border-box", flex: "none", animation: ctx.empty ? void 0 : "himalaya-spin 0.8s linear infinite", ...wrap } });
37362
37388
  });
37363
37389
  NATIVELY_TABBABLE = 'a[href], area[href], button, input:not([type="hidden"]), select, textarea, iframe, object, embed, audio[controls], video[controls], summary, [contenteditable]:not([contenteditable="false"]), [tabindex]';
37364
37390
  BottomSheetNode = withExtras("BottomSheetNode", ({ props, ctx, wrap }) => {
@@ -37442,11 +37468,11 @@ var init_renderNode = __esm({
37442
37468
  const raw = props.valuesPath != null ? bound : props.values;
37443
37469
  const values = Array.isArray(raw) ? raw : [];
37444
37470
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexWrap: "wrap", alignItems: "center", gap: 6, width: "100%", minHeight: 44, padding: "8px 10px", boxSizing: "border-box", background: C("surfacePrimary", "#fff"), border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: ctx.radius("md", 8), opacity: props.disabled ? 0.5 : 1, ...wrap }, children: [
37445
- values.map((v, i) => /* @__PURE__ */ jsxs5("span", { style: { display: "inline-flex", alignItems: "center", gap: 5, padding: "4px 9px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: 13, background: C("surfaceTertiary", "#eef0f3"), color: C("textPrimary", "#13171e") }, children: [
37471
+ values.map((v, i) => /* @__PURE__ */ jsxs5("span", { style: { display: "inline-flex", alignItems: "center", gap: 5, padding: "4px 9px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: pxToRem(13), background: C("surfaceTertiary", "#eef0f3"), color: C("textPrimary", "#13171e") }, children: [
37446
37472
  asText2(v),
37447
- /* @__PURE__ */ jsx8("span", { onClick: ctx.onAction && props.onRemove ? () => ctx.onAction(resolveItemDeep2(props.onRemove, ctx)) : void 0, style: { opacity: 0.6, cursor: "pointer", fontSize: 13 }, children: "\xD7" })
37473
+ /* @__PURE__ */ jsx8("span", { onClick: ctx.onAction && props.onRemove ? () => ctx.onAction(resolveItemDeep2(props.onRemove, ctx)) : void 0, style: { opacity: 0.6, cursor: "pointer", fontSize: pxToRem(13) }, children: "\xD7" })
37448
37474
  ] }, i)),
37449
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 14, color: C("textSecondary", "#888") }, children: values.length ? "" : placeholderText || "Add\u2026" })
37475
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C("textSecondary", "#888") }, children: values.length ? "" : placeholderText || "Add\u2026" })
37450
37476
  ] });
37451
37477
  });
37452
37478
  ChipNode = withExtras("ChipNode", ({ props, ctx, wrap }) => {
@@ -37457,7 +37483,7 @@ var init_renderNode = __esm({
37457
37483
  const accent = C(boundTokenName(props.tokenPath, props.token, ctx) ?? "accentPrimary", "#116DFF");
37458
37484
  const onClick = ctx.onAction && props.onTap && !props.disabled ? () => ctx.onAction(resolveItemDeep2(props.onTap, ctx)) : void 0;
37459
37485
  const fg = selected ? C("textOnAccent", "#fff") : C("textPrimary", "#13171e");
37460
- return /* @__PURE__ */ jsxs5("span", { onClick, style: { display: "inline-flex", alignItems: "center", gap: 6, padding: "6px 12px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: 14, cursor: onClick ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, color: fg, background: selected ? accent : C("surfaceSecondary", "#f2f3f5"), border: `1px solid ${selected ? accent : C("border", "#d8dce2")}`, boxShadow: props.elevated ? "0 1px 4px rgba(0,0,0,.14)" : "none", ...wrap }, children: [
37486
+ return /* @__PURE__ */ jsxs5("span", { onClick, style: { display: "inline-flex", alignItems: "center", gap: 6, padding: "6px 12px", borderRadius: 999, fontFamily: bodyFont(ctx), fontSize: pxToRem(14), cursor: onClick ? "pointer" : "default", opacity: props.disabled ? 0.5 : 1, color: fg, background: selected ? accent : C("surfaceSecondary", "#f2f3f5"), border: `1px solid ${selected ? accent : C("border", "#d8dce2")}`, boxShadow: props.elevated ? "0 1px 4px rgba(0,0,0,.14)" : "none", ...wrap }, children: [
37461
37487
  props.leadingAvatarUrl && !isBinding(props.leadingAvatarUrl) && /* @__PURE__ */ jsx8("img", { src: String(props.leadingAvatarUrl), alt: "", style: { width: 20, height: 20, borderRadius: "50%", objectFit: "cover", margin: "-2px 0 -2px -4px" } }),
37462
37488
  props.leadingIcon && /* @__PURE__ */ jsx8("span", { style: { display: "inline-grid", placeItems: "center", width: 16, height: 16 }, children: iconSvg(props.leadingIcon, { size: 15, color: fg }) }),
37463
37489
  /* @__PURE__ */ jsx8("span", { children: txt(props.label, ctx) }),
@@ -37473,7 +37499,7 @@ var init_renderNode = __esm({
37473
37499
  const cols = Array.isArray(props.columns) ? props.columns : [];
37474
37500
  const rawRows = props.rowsPath != null ? bound : props.rows;
37475
37501
  const rows = Array.isArray(rawRows) ? rawRows : [];
37476
- const cellStyle = (head) => ({ padding: "8px 12px", fontFamily: bodyFont(ctx), fontSize: 14, textAlign: "left", borderBottom: `1px solid ${C("border", "#eceef1")}`, color: head ? C("textSecondary", "#636b78") : C("textPrimary", "#13171e"), fontWeight: head ? 600 : 400, whiteSpace: "nowrap" });
37502
+ const cellStyle = (head) => ({ padding: "8px 12px", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), textAlign: "left", borderBottom: `1px solid ${C("border", "#eceef1")}`, color: head ? C("textSecondary", "#636b78") : C("textPrimary", "#13171e"), fontWeight: head ? 600 : 400, whiteSpace: "nowrap" });
37477
37503
  return /* @__PURE__ */ jsx8("div", { style: { width: "100%", boxSizing: "border-box", overflowX: "auto", border: `1px solid ${C("border", "#e8eaed")}`, borderRadius: 10, ...wrap }, children: /* @__PURE__ */ jsxs5("table", { style: { width: "100%", borderCollapse: "collapse" }, children: [
37478
37504
  cols.length > 0 && /* @__PURE__ */ jsx8("thead", { children: /* @__PURE__ */ jsx8("tr", { children: cols.map((c, i) => /* @__PURE__ */ jsx8("th", { style: cellStyle(true), children: asText2(c) }, i)) }) }),
37479
37505
  /* @__PURE__ */ jsx8("tbody", { children: rows.map((r, ri) => {
@@ -37513,7 +37539,7 @@ var init_renderNode = __esm({
37513
37539
  }
37514
37540
  if (props.kind === "linear") {
37515
37541
  return /* @__PURE__ */ jsxs5("div", { ...a11y, style: { width: "100%", ...wrap }, children: [
37516
- props.label != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78"), marginBottom: 4 }, children: txt(props.label, ctx) }),
37542
+ props.label != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78"), marginBottom: 4 }, children: txt(props.label, ctx) }),
37517
37543
  /* @__PURE__ */ jsx8("div", { style: { width: "100%", height: 8, borderRadius: 999, background: track, overflow: "hidden" }, children: /* @__PURE__ */ jsx8("div", { style: { width: `${pct * 100}%`, height: "100%", background: tint, ...gaugeAnim } }) })
37518
37544
  ] });
37519
37545
  }
@@ -37585,7 +37611,7 @@ var init_renderNode = __esm({
37585
37611
  overflow
37586
37612
  ] }) })
37587
37613
  ] }),
37588
- props.caption && /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "derived-name" }, style: { fontSize: 13, color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
37614
+ props.caption && /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "derived-name" }, style: { fontSize: pxToRem(13), color: C("textSecondary", "#888"), marginTop: 8 }, children: txt(props.caption, ctx) })
37589
37615
  ] });
37590
37616
  });
37591
37617
  CHART_STROKE_CYCLE = ["solid", "dashed", "dotted"];
@@ -37737,8 +37763,8 @@ var init_renderNode = __esm({
37737
37763
  gap: 2,
37738
37764
  pointerEvents: "none"
37739
37765
  }, children: [
37740
- props.centerTitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 20, fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(props.centerTitle, ctx) }),
37741
- props.centerSubtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 12, color: C("textSecondary", "#888") }, children: txt(props.centerSubtitle, ctx) })
37766
+ props.centerTitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(20), fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(props.centerTitle, ctx) }),
37767
+ props.centerSubtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: txt(props.centerSubtitle, ctx) })
37742
37768
  ] })
37743
37769
  ] }) });
37744
37770
  });
@@ -37778,8 +37804,8 @@ var init_renderNode = __esm({
37778
37804
  ...wrap
37779
37805
  }, children: items.map((it, i) => /* @__PURE__ */ jsxs5("li", { style: { display: "flex", alignItems: "center", gap: 6, minWidth: 0 }, children: [
37780
37806
  /* @__PURE__ */ jsx8(LegendMarker, { marker: it.marker, color: it.color ? C(it.color, "#116DFF") : C("accentPrimary", "#116DFF") }),
37781
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 13, color: C("textSecondary", "#888"), minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: txt(it.label, ctx) }),
37782
- it.value && /* @__PURE__ */ jsx8("span", { style: { fontSize: 13, fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(it.value, ctx) })
37807
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(13), color: C("textSecondary", "#888"), minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: txt(it.label, ctx) }),
37808
+ it.value && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(13), fontWeight: 600, color: C("textPrimary", "#111") }, children: txt(it.value, ctx) })
37783
37809
  ] }, i)) });
37784
37810
  });
37785
37811
  cellAlign = (align) => align === "center" ? "center" : align === "trailing" ? "right" : "left";
@@ -37794,8 +37820,8 @@ var init_renderNode = __esm({
37794
37820
  const totalsRow = props.totalsPath != null ? boundTotals : props.totals;
37795
37821
  if (columns.length === 0) return /* @__PURE__ */ jsx8("div", { style: { ...wrap } });
37796
37822
  const totalWeight = columns.reduce((a, c) => a + c.weight, 0) || 1;
37797
- const th = { fontSize: 12, fontWeight: 600, color: C("textSecondary", "#888"), padding: "8px 10px", borderBottom: `1px solid ${C("border", "#e5e5e5")}` };
37798
- const td = { fontSize: 14, color: C("textPrimary", "#111"), padding: "8px 10px" };
37823
+ const th = { fontSize: pxToRem(12), fontWeight: 600, color: C("textSecondary", "#888"), padding: "8px 10px", borderBottom: `1px solid ${C("border", "#e5e5e5")}` };
37824
+ const td = { fontSize: pxToRem(14), color: C("textPrimary", "#111"), padding: "8px 10px" };
37799
37825
  return (
37800
37826
  // Tables are the one shape allowed to exceed the content width, in their own
37801
37827
  // scroller — the page body must not scroll horizontally because of one.
@@ -38007,9 +38033,9 @@ var init_renderNode = __esm({
38007
38033
  }
38008
38034
  ),
38009
38035
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 8, fontFamily: bodyFont(ctx) }, children: [
38010
- /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, fontWeight: 500, fontVariantNumeric: "tabular-nums", color: isFailed ? danger : secondary }, children: voiceNoteClock(clockMs) }),
38011
- isUploading && /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, color: secondary }, children: "Sending\u2026" }),
38012
- isFailed && /* @__PURE__ */ jsx8("span", { style: { fontSize: 12, color: danger }, children: "Not sent" }),
38036
+ /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), fontWeight: 500, fontVariantNumeric: "tabular-nums", color: isFailed ? danger : secondary }, children: voiceNoteClock(clockMs) }),
38037
+ isUploading && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), color: secondary }, children: "Sending\u2026" }),
38038
+ isFailed && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(12), color: danger }, children: "Not sent" }),
38013
38039
  /* @__PURE__ */ jsx8("span", { style: { flex: 1 } }),
38014
38040
  rates.length > 0 && isPlayable && /* @__PURE__ */ jsx8(
38015
38041
  "button",
@@ -38025,7 +38051,7 @@ var init_renderNode = __esm({
38025
38051
  style: {
38026
38052
  border: "none",
38027
38053
  cursor: "pointer",
38028
- fontSize: 11,
38054
+ fontSize: pxToRem(11),
38029
38055
  fontWeight: 600,
38030
38056
  fontFamily: "inherit",
38031
38057
  color: accentLabel,
@@ -38056,10 +38082,10 @@ var init_renderNode = __esm({
38056
38082
  ] }),
38057
38083
  /* @__PURE__ */ jsxs5("div", { style: { paddingBottom: last ? 0 : 14, minWidth: 0 }, children: [
38058
38084
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 8, alignItems: "baseline" }, children: [
38059
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(e?.title) }),
38060
- e?.time && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888") }, children: asText2(e.time) })
38085
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e") }, children: asText2(e?.title) }),
38086
+ e?.time && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: asText2(e.time) })
38061
38087
  ] }),
38062
- e?.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(e.subtitle) })
38088
+ e?.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(e.subtitle) })
38063
38089
  ] })
38064
38090
  ] }, i);
38065
38091
  }) });
@@ -38072,7 +38098,7 @@ var init_renderNode = __esm({
38072
38098
  const opts = Array.isArray(rawOpts) ? rawOpts : [];
38073
38099
  const selectedId = isBinding(props.selectedId) ? boundSel : props.selectedId;
38074
38100
  const selIdx = Math.max(0, opts.findIndex((o) => o?.id === selectedId));
38075
- const row = (o, dist) => /* @__PURE__ */ jsx8("div", { style: { height: 32, display: "flex", alignItems: "center", justifyContent: "center", fontFamily: bodyFont(ctx), fontSize: 16, fontWeight: dist === 0 ? 700 : 400, color: dist === 0 ? C("textPrimary", "#13171e") : C("textSecondary", "#9aa3ad"), opacity: 1 - Math.min(0.7, Math.abs(dist) * 0.35) }, children: asText2(o?.label) ?? asText2(o?.id) }, o?.id);
38101
+ const row = (o, dist) => /* @__PURE__ */ jsx8("div", { style: { height: 32, display: "flex", alignItems: "center", justifyContent: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(16), fontWeight: dist === 0 ? 700 : 400, color: dist === 0 ? C("textPrimary", "#13171e") : C("textSecondary", "#9aa3ad"), opacity: 1 - Math.min(0.7, Math.abs(dist) * 0.35) }, children: asText2(o?.label) ?? asText2(o?.id) }, o?.id);
38076
38102
  const window_ = [-2, -1, 0, 1, 2].map((d) => ({ o: opts[selIdx + d], d })).filter((x) => x.o);
38077
38103
  return /* @__PURE__ */ jsxs5("div", { style: { position: "relative", width: "100%", maxWidth: 220, height: 160, overflow: "hidden", background: C("surfaceSecondary", "#f5f7fa"), borderRadius: 12, ...wrap }, children: [
38078
38104
  /* @__PURE__ */ jsx8("div", { style: { position: "absolute", top: "50%", left: 8, right: 8, transform: "translateY(-50%)", height: 32, background: C("surfacePrimary", "#fff"), borderRadius: 8, boxShadow: "inset 0 0 0 1px rgba(0,0,0,.06)" } }),
@@ -38089,8 +38115,8 @@ var init_renderNode = __esm({
38089
38115
  return /* @__PURE__ */ jsxs5("div", { style: { display: "flex", flexDirection: "column", gap: 8, ...wrap }, children: [
38090
38116
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", alignItems: "center", gap: 10 }, children: [
38091
38117
  /* @__PURE__ */ jsx8("span", { style: { width: 28, height: 28, borderRadius: 8, background: C(cur, cur), border: `1px solid ${C("border", "#e3e3e3")}`, flex: "none" } }),
38092
- props.label != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: 15, color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) }),
38093
- /* @__PURE__ */ jsx8("span", { style: { marginLeft: "auto", fontFamily: "ui-monospace, monospace", fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(cur) })
38118
+ props.label != null && /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: txt(props.label, ctx) }),
38119
+ /* @__PURE__ */ jsx8("span", { style: { marginLeft: "auto", fontFamily: "ui-monospace, monospace", fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(cur) })
38094
38120
  ] }),
38095
38121
  /* @__PURE__ */ jsx8("div", { style: { display: "flex", flexWrap: "wrap", gap: 8 }, children: swatches.map((s, i) => /* @__PURE__ */ jsx8("span", { onClick: onPick(s), style: { width: 26, height: 26, borderRadius: "50%", background: C(s, s), cursor: onPick(s) ? "pointer" : "default", boxShadow: s === cur ? `0 0 0 2px ${C("surfacePrimary", "#fff")}, 0 0 0 4px ${C(s, s)}` : "inset 0 0 0 1px rgba(0,0,0,.08)" } }, i)) })
38096
38122
  ] });
@@ -38121,12 +38147,12 @@ var init_renderNode = __esm({
38121
38147
  // pushed a sibling count onto two lines (#3080, #3004).
38122
38148
  /* @__PURE__ */ jsx8("div", { role: "group", style: { display: "flex", gap: 8, flexWrap: "nowrap", overflowX: "auto", scrollbarWidth: "none", width: "100%", minWidth: 0, ...wrap }, children: chips.map((c, i) => {
38123
38149
  const on3 = selected.includes(c.id);
38124
- const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: 13, border: `1px solid ${on3 ? "transparent" : C("border", "#ddd")}`, background: on3 ? C("accentPrimary", "#116DFF") : "transparent", color: on3 ? C("textOnAccent", "#fff") : C("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
38150
+ const chipStyle = { display: "flex", flex: "none", whiteSpace: "nowrap", gap: 6, alignItems: "center", fontFamily: bodyFont(ctx), fontWeight: 500, fontSize: pxToRem(13), border: `1px solid ${on3 ? "transparent" : C("border", "#ddd")}`, background: on3 ? C("accentPrimary", "#116DFF") : "transparent", color: on3 ? C("textOnAccent", "#fff") : C("textSecondary", "#666"), padding: "6px 12px", borderRadius: 999 };
38125
38151
  const inner = /* @__PURE__ */ jsxs5(Fragment4, { children: [
38126
38152
  asText2(c.label),
38127
38153
  c.count != null && /* @__PURE__ */ jsxs5(Fragment4, { children: [
38128
38154
  " ",
38129
- /* @__PURE__ */ jsx8("span", { style: { ...on3 ? {} : { opacity: 0.7 }, fontSize: 11 }, children: c.count })
38155
+ /* @__PURE__ */ jsx8("span", { style: { ...on3 ? {} : { opacity: 0.7 }, fontSize: pxToRem(11) }, children: c.count })
38130
38156
  ] })
38131
38157
  ] });
38132
38158
  return interactive ? /* @__PURE__ */ jsx8("button", { type: "button", "aria-pressed": on3, onClick: () => toggle(c.id), style: { all: "unset", cursor: "pointer", boxSizing: "border-box", ...chipStyle }, children: inner }, c.id ?? i) : /* @__PURE__ */ jsx8("span", { style: chipStyle, children: inner }, c.id ?? i);
@@ -38413,8 +38439,8 @@ var init_renderNode = __esm({
38413
38439
  /* @__PURE__ */ jsxs5("div", { style: { position: "relative", height: Math.min(props.expandedHeight ?? 120, 160), borderRadius: ctx.radius("md", 10), overflow: "hidden", background: imageUrl ? void 0 : `linear-gradient(135deg, ${C("accentPrimary", "#116DFF")}, ${C("accentSecondary", "#0E5FE3")})` }, children: [
38414
38440
  imageUrl && /* @__PURE__ */ jsx8("img", { src: imageUrl, alt: "", style: { width: "100%", height: "100%", objectFit: "cover" } }),
38415
38441
  /* @__PURE__ */ jsxs5("div", { style: { position: "absolute", left: 14, bottom: 12, color: "#fff", textShadow: "0 1px 4px rgba(0,0,0,.5)" }, children: [
38416
- /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "node" }, role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: 20 }, children: txt(props.title, ctx) }),
38417
- props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: 13, opacity: 0.9 }, children: txt(props.subtitle, ctx) })
38442
+ /* @__PURE__ */ jsx8("div", { ...{ [A11Y_PART]: "node" }, role: "heading", "aria-level": 2, style: { fontFamily: ctx.font("title1").family || ctx.idiom && ctx.idiom !== "base" ? fontStack(ctx.font("title1").family, ctx.idiom) : '"Wix Madefor Display", system-ui', fontWeight: 700, fontSize: pxToRem(20) }, children: txt(props.title, ctx) }),
38443
+ props.subtitle && /* @__PURE__ */ jsx8("div", { style: { fontSize: pxToRem(13), opacity: 0.9 }, children: txt(props.subtitle, ctx) })
38418
38444
  ] })
38419
38445
  ] }),
38420
38446
  items.length > 0 && /* @__PURE__ */ jsx8("div", { style: { paddingTop: 12 }, children: kids2(items, ctx) })
@@ -38548,11 +38574,11 @@ var init_renderNode = __esm({
38548
38574
  "aria-label": "Previous month",
38549
38575
  onClick: () => changeMonth(-1),
38550
38576
  disabled: !canPage,
38551
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, padding: 6, opacity: canPage ? 1 : 0.4 },
38577
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), padding: 6, opacity: canPage ? 1 : 0.4 },
38552
38578
  children: "\u2039"
38553
38579
  }
38554
38580
  ),
38555
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 15, color: C("textPrimary", "#13171e") }, children: monthLabel }),
38581
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(15), color: C("textPrimary", "#13171e") }, children: monthLabel }),
38556
38582
  /* @__PURE__ */ jsx8(
38557
38583
  "button",
38558
38584
  {
@@ -38560,12 +38586,12 @@ var init_renderNode = __esm({
38560
38586
  "aria-label": "Next month",
38561
38587
  onClick: () => changeMonth(1),
38562
38588
  disabled: !canPage,
38563
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, padding: 6, opacity: canPage ? 1 : 0.4 },
38589
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), padding: 6, opacity: canPage ? 1 : 0.4 },
38564
38590
  children: "\u203A"
38565
38591
  }
38566
38592
  )
38567
38593
  ] }),
38568
- /* @__PURE__ */ jsx8("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, marginBottom: 4 }, children: heads.map((h, i) => /* @__PURE__ */ jsx8("div", { style: { textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, color: C("textSecondary", "#888"), textTransform: "uppercase" }, children: h }, i)) }),
38594
+ /* @__PURE__ */ jsx8("div", { style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, marginBottom: 4 }, children: heads.map((h, i) => /* @__PURE__ */ jsx8("div", { style: { textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, color: C("textSecondary", "#888"), textTransform: "uppercase" }, children: h }, i)) }),
38569
38595
  /* @__PURE__ */ jsx8("div", { ref: gridRef, role: "grid", "aria-label": monthLabel, style: { display: "grid", gridTemplateColumns: "repeat(7, minmax(0, 1fr))", gap: 2, width: "100%" }, children: rows.flatMap(
38570
38596
  (row, ri) => row.map((cell, ci) => {
38571
38597
  if (!cell.inMonth && !showAdjacent) return /* @__PURE__ */ jsx8("div", { "aria-hidden": "true" }, `${ri}-${ci}`);
@@ -38606,14 +38632,14 @@ var init_renderNode = __esm({
38606
38632
  opacity: disabled ? 0.4 : 1,
38607
38633
  cursor: disabled ? "default" : "pointer",
38608
38634
  fontFamily: bodyFont(ctx),
38609
- fontSize: 14,
38635
+ fontSize: pxToRem(14),
38610
38636
  fontWeight: cell.isToday ? 700 : 400,
38611
38637
  boxShadow: cell.isToday && !selected ? `inset 0 0 0 1.5px ${C("accentPrimary", "#116DFF")}` : "none"
38612
38638
  },
38613
38639
  children: [
38614
38640
  /* @__PURE__ */ jsx8("span", { children: cell.day }),
38615
38641
  dotCount > 0 && /* @__PURE__ */ jsx8("span", { style: { display: "flex", gap: 2 }, children: Array.from({ length: dotCount }).map((_, i) => /* @__PURE__ */ jsx8("span", { style: { width: 4, height: 4, borderRadius: "50%", background: selected ? C("textOnAccent", "#fff") : dotColor } }, i)) }),
38616
- dec?.badge != null && /* @__PURE__ */ jsx8("span", { style: { fontSize: 9, lineHeight: 1, maxWidth: "100%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: selected ? C("textOnAccent", "#fff") : C("textSecondary", "#888") }, children: asText2(dec.badge) })
38642
+ dec?.badge != null && /* @__PURE__ */ jsx8("span", { style: { fontSize: pxToRem(9), lineHeight: 1, maxWidth: "100%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: selected ? C("textOnAccent", "#fff") : C("textSecondary", "#888") }, children: asText2(dec.badge) })
38617
38643
  ]
38618
38644
  },
38619
38645
  cell.date
@@ -38685,11 +38711,11 @@ var init_renderNode = __esm({
38685
38711
  "aria-label": "Previous",
38686
38712
  onClick: () => shiftRange(-rangeStep),
38687
38713
  disabled: !canPage,
38688
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, opacity: canPage ? 1 : 0.4 },
38714
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), opacity: canPage ? 1 : 0.4 },
38689
38715
  children: "\u2039"
38690
38716
  }
38691
38717
  ),
38692
- /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 14, color: C("textPrimary", "#13171e") }, children: rangeLabel }),
38718
+ /* @__PURE__ */ jsx8("span", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: pxToRem(14), color: C("textPrimary", "#13171e") }, children: rangeLabel }),
38693
38719
  /* @__PURE__ */ jsx8(
38694
38720
  "button",
38695
38721
  {
@@ -38697,12 +38723,12 @@ var init_renderNode = __esm({
38697
38723
  "aria-label": "Next",
38698
38724
  onClick: () => shiftRange(rangeStep),
38699
38725
  disabled: !canPage,
38700
- style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: 18, opacity: canPage ? 1 : 0.4 },
38726
+ style: { border: "none", background: "none", cursor: canPage ? "pointer" : "default", color: C("textSecondary", "#636b78"), fontSize: pxToRem(18), opacity: canPage ? 1 : 0.4 },
38701
38727
  children: "\u203A"
38702
38728
  }
38703
38729
  )
38704
38730
  ] }),
38705
- /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, minWidth: days.length * 90 }, children: laneMode ? laneCols.map((lane) => /* @__PURE__ */ jsx8("div", { "data-lane": lane.id, style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 600, color: C("textSecondary", "#888"), padding: "4px 2px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: laneTitle(lane.id) }, lane.id)) : days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, color: dayKeys[i] === nowKey ? accentTextColor(ctx) : C("textSecondary", "#888") }, children: d.toLocaleDateString(void 0, { weekday: "short", day: "numeric" }) }, i)) }),
38731
+ /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, minWidth: days.length * 90 }, children: laneMode ? laneCols.map((lane) => /* @__PURE__ */ jsx8("div", { "data-lane": lane.id, style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 600, color: C("textSecondary", "#888"), padding: "4px 2px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: laneTitle(lane.id) }, lane.id)) : days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, color: dayKeys[i] === nowKey ? accentTextColor(ctx) : C("textSecondary", "#888") }, children: d.toLocaleDateString(void 0, { weekday: "short", day: "numeric" }) }, i)) }),
38706
38732
  days.some((_, i) => (byDay.get(dayKeys[i])?.allDay.length ?? 0) > 0) && /* @__PURE__ */ jsx8("div", { style: { display: "flex", marginLeft: 44, gap: 2, marginBottom: 4, minWidth: days.length * 90 }, children: days.map((d, i) => /* @__PURE__ */ jsx8("div", { style: { flex: "1 1 0", minWidth: 0, display: "flex", flexDirection: "column", gap: 2, padding: "0 1px" }, children: (byDay.get(dayKeys[i])?.allDay ?? []).map((ev, j) => {
38707
38733
  const tappable = !!(ev?.onTap || props.onSelectEvent);
38708
38734
  return /* @__PURE__ */ jsx8(
@@ -38712,14 +38738,14 @@ var init_renderNode = __esm({
38712
38738
  onKeyDown: calKeyActivate(!!ctx.onAction && tappable, () => onSelect(ev)),
38713
38739
  role: tappable ? "button" : void 0,
38714
38740
  tabIndex: ctx.onAction && tappable ? 0 : void 0,
38715
- style: { fontFamily: bodyFont(ctx), fontSize: 11, fontWeight: 600, padding: "2px 6px", borderRadius: 4, background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), color: C("textOnAccent", "#fff"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38741
+ style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(11), fontWeight: 600, padding: "2px 6px", borderRadius: 4, background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), color: C("textOnAccent", "#fff"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38716
38742
  children: asText2(ev?.title)
38717
38743
  },
38718
38744
  j
38719
38745
  );
38720
38746
  }) }, i)) }),
38721
38747
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", position: "relative", minWidth: 44 + days.length * 90 }, children: [
38722
- /* @__PURE__ */ jsx8("div", { style: { width: 44, flex: "none" }, children: Array.from({ length: Math.max(0, endHour - startHour) }).map((_, i) => /* @__PURE__ */ jsxs5("div", { style: { height: HOUR_PX, boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: 10, color: C("textTertiary", "#aab2bd"), textAlign: "right", paddingRight: 6 }, children: [
38748
+ /* @__PURE__ */ jsx8("div", { style: { width: 44, flex: "none" }, children: Array.from({ length: Math.max(0, endHour - startHour) }).map((_, i) => /* @__PURE__ */ jsxs5("div", { style: { height: HOUR_PX, boxSizing: "border-box", fontFamily: bodyFont(ctx), fontSize: pxToRem(10), color: C("textTertiary", "#aab2bd"), textAlign: "right", paddingRight: 6 }, children: [
38723
38749
  String(startHour + i).padStart(2, "0"),
38724
38750
  ":00"
38725
38751
  ] }, i)) }),
@@ -38798,7 +38824,7 @@ var init_renderNode = __esm({
38798
38824
  borderRadius: 6,
38799
38825
  padding: "2px 5px",
38800
38826
  fontFamily: bodyFont(ctx),
38801
- fontSize: 11,
38827
+ fontSize: pxToRem(11),
38802
38828
  overflow: "hidden",
38803
38829
  cursor: ctx.onAction && tappable ? "pointer" : "default",
38804
38830
  boxSizing: "border-box"
@@ -38907,7 +38933,7 @@ var init_renderNode = __esm({
38907
38933
  return () => io.disconnect();
38908
38934
  }, [hasMore, windowEnd]);
38909
38935
  if (groups.length === 0) {
38910
- return /* @__PURE__ */ jsx8("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 14, color: C("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
38936
+ return /* @__PURE__ */ jsx8("div", { style: { width: "100%", padding: "28px 16px", boxSizing: "border-box", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(14), color: C("textSecondary", "#888"), ...wrap }, children: emptyLabel || "No events" });
38911
38937
  }
38912
38938
  const sticky = props.stickyHeaders === true;
38913
38939
  const todayKey = localDayKey(/* @__PURE__ */ new Date());
@@ -38920,7 +38946,7 @@ var init_renderNode = __esm({
38920
38946
  };
38921
38947
  return /* @__PURE__ */ jsxs5("div", { ref: containerRef, "data-agenda-days": shown2.length, style: { width: "100%", boxSizing: "border-box", ...wrap }, children: [
38922
38948
  shown2.map((g) => /* @__PURE__ */ jsxs5("div", { "data-daygroup": g.key, children: [
38923
- /* @__PURE__ */ jsx8("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C("surfacePrimary", "#fff"), fontFamily: bodyFont(ctx), fontSize: 12, fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: C("textSecondary", "#888"), padding: "8px 4px" }, children: dayHeaderLabel(g.key) }),
38949
+ /* @__PURE__ */ jsx8("div", { style: { position: sticky ? "sticky" : "static", top: 0, zIndex: 1, background: C("surfacePrimary", "#fff"), fontFamily: bodyFont(ctx), fontSize: pxToRem(12), fontWeight: 700, textTransform: "uppercase", letterSpacing: 0.4, color: C("textSecondary", "#888"), padding: "8px 4px" }, children: dayHeaderLabel(g.key) }),
38924
38950
  g.items.map((ev, i) => {
38925
38951
  const start = parseLocalDate(ev.start);
38926
38952
  const timeStr = ev.allDay === true ? "All day" : start ? localTimeLabel(start) : "";
@@ -38951,10 +38977,10 @@ var init_renderNode = __esm({
38951
38977
  style: { display: "flex", alignItems: "center", gap: 10, padding: "10px 4px", cursor: ctx.onAction && tappable ? "pointer" : "default" },
38952
38978
  children: [
38953
38979
  /* @__PURE__ */ jsx8("div", { style: { width: 6, height: 6, borderRadius: "50%", background: C(ev?.colorToken ?? "accentPrimary", "#116DFF"), flex: "none" } }),
38954
- /* @__PURE__ */ jsx8("div", { style: { width: 52, flex: "none", fontFamily: bodyFont(ctx), fontSize: 12, color: C("textSecondary", "#888") }, children: timeStr }),
38980
+ /* @__PURE__ */ jsx8("div", { style: { width: 52, flex: "none", fontFamily: bodyFont(ctx), fontSize: pxToRem(12), color: C("textSecondary", "#888") }, children: timeStr }),
38955
38981
  /* @__PURE__ */ jsxs5("div", { style: { flex: 1, minWidth: 0 }, children: [
38956
- /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 15, fontWeight: 600, color: C("textPrimary", "#13171e"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: asText2(ev?.title) }),
38957
- ev?.subtitle != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#636b78") }, children: asText2(ev.subtitle) })
38982
+ /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(15), fontWeight: 600, color: C("textPrimary", "#13171e"), whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: asText2(ev?.title) }),
38983
+ ev?.subtitle != null && /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#636b78") }, children: asText2(ev.subtitle) })
38958
38984
  ] })
38959
38985
  ]
38960
38986
  },
@@ -38971,7 +38997,7 @@ var init_renderNode = __esm({
38971
38997
  ref: sentinelRef,
38972
38998
  "data-agenda-more": groups.length - shown2.length,
38973
38999
  onClick: () => setVisibleDays((n) => n + CAL_AGENDA_PAGE_DAYS),
38974
- style: { padding: "12px 4px", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: 13, color: C("textSecondary", "#888"), cursor: "pointer" },
39000
+ style: { padding: "12px 4px", textAlign: "center", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), color: C("textSecondary", "#888"), cursor: "pointer" },
38975
39001
  children: `${groups.length - shown2.length} more ${groups.length - shown2.length === 1 ? "day" : "days"}`
38976
39002
  }
38977
39003
  )
@@ -60216,21 +60242,21 @@ var init_preview_assets_generated = __esm({
60216
60242
  "../../packages/serve/src/preview-assets.generated.ts"() {
60217
60243
  init_preview_assets_format();
60218
60244
  PREVIEW_ASSET_MANIFEST = [
60219
- { key: "assets/index-CgEMkQNe.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1131220, sha256: "d0b5be86126447265c936cd40214f202c42599ced51615dc63f3fd997168c11f" },
60220
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1131228, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
60221
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1135838, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
60222
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1624422, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
60223
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1715346, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
60224
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1806330, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
60225
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1897310, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
60226
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1988182, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
60227
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2079162, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
60228
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2187798, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
60229
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2296882, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
60230
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2405930, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
60231
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2513630, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
60232
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2601738, length: 4947, sha256: "bbb6379db6e3a9fee982a074008d4a860210436259db9f6f4d441d842fc7f74f" },
60233
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2606685, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
60245
+ { key: "assets/index-B1fE1B9T.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1131811, sha256: "ead747f6e5d3d289965dc0d3486f678d999616cec487643300b3103983bc9462" },
60246
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1131819, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
60247
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1136429, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
60248
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1625013, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
60249
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1715937, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
60250
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1806921, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
60251
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1897901, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
60252
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1988773, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
60253
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2079753, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
60254
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2188389, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
60255
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2297473, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
60256
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2406521, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
60257
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2514221, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
60258
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2602329, length: 4947, sha256: "4c3de9771721e41385e297f5e97c0ecd9a76e557a3584d3e6e7820e4bc615c96" },
60259
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2607276, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
60234
60260
  ];
60235
60261
  }
60236
60262
  });
@@ -68128,9 +68154,143 @@ function parsePublishedHtml2(html, base) {
68128
68154
  }
68129
68155
  return out2;
68130
68156
  }
68157
+ function codeMask(js) {
68158
+ const code = new Uint8Array(js.length);
68159
+ const templates = [];
68160
+ let i = 0;
68161
+ const inHole = () => templates.length > 0 && templates[templates.length - 1] >= 0;
68162
+ let prev = "";
68163
+ let word = "";
68164
+ const regexMayStart = () => prev === "" || "(,=:[!&|?{};+-*%<>~^".includes(prev) || /^(?:return|typeof|case|do|else|in|of|new|delete|void|throw|instanceof|yield|await)$/.test(word);
68165
+ while (i < js.length) {
68166
+ const c = js[i];
68167
+ if (templates.length > 0 && !inHole()) {
68168
+ if (c === "\\") {
68169
+ i += 2;
68170
+ continue;
68171
+ }
68172
+ if (c === "`") {
68173
+ templates.pop();
68174
+ i++;
68175
+ continue;
68176
+ }
68177
+ if (c === "$" && js[i + 1] === "{") {
68178
+ templates[templates.length - 1] = 0;
68179
+ i += 2;
68180
+ continue;
68181
+ }
68182
+ i++;
68183
+ continue;
68184
+ }
68185
+ if (c === '"' || c === "'") {
68186
+ let j = i + 1;
68187
+ while (j < js.length && js[j] !== c && js[j] !== "\n") j += js[j] === "\\" ? 2 : 1;
68188
+ i = j + 1;
68189
+ prev = c;
68190
+ word = "";
68191
+ continue;
68192
+ }
68193
+ if (c === "`") {
68194
+ templates.push(-1);
68195
+ i++;
68196
+ prev = c;
68197
+ word = "";
68198
+ continue;
68199
+ }
68200
+ if (c === "/" && js[i + 1] === "*") {
68201
+ const e = js.indexOf("*/", i + 2);
68202
+ i = e < 0 ? js.length : e + 2;
68203
+ continue;
68204
+ }
68205
+ if (c === "/" && js[i + 1] === "/") {
68206
+ const e = js.indexOf("\n", i + 2);
68207
+ i = e < 0 ? js.length : e;
68208
+ continue;
68209
+ }
68210
+ if (c === "/" && regexMayStart()) {
68211
+ let j = i + 1, cls = false;
68212
+ for (; j < js.length && js[j] !== "\n"; j++) {
68213
+ const r = js[j];
68214
+ if (r === "\\") {
68215
+ j++;
68216
+ continue;
68217
+ }
68218
+ if (r === "[") cls = true;
68219
+ else if (r === "]") cls = false;
68220
+ else if (r === "/" && !cls) break;
68221
+ }
68222
+ i = j + 1;
68223
+ prev = "/";
68224
+ word = "";
68225
+ continue;
68226
+ }
68227
+ if (inHole()) {
68228
+ const t = templates.length - 1;
68229
+ if (c === "{") templates[t]++;
68230
+ else if (c === "}") {
68231
+ if (templates[t] === 0) {
68232
+ templates[t] = -1;
68233
+ i++;
68234
+ continue;
68235
+ }
68236
+ templates[t]--;
68237
+ }
68238
+ }
68239
+ code[i] = 1;
68240
+ if (!/\s/.test(c)) {
68241
+ word = /[A-Za-z0-9_$]/.test(c) ? /[A-Za-z0-9_$]/.test(prev) ? word + c : c : "";
68242
+ prev = c;
68243
+ }
68244
+ i++;
68245
+ }
68246
+ return code;
68247
+ }
68248
+ function enclosingObject(js, at2, code) {
68249
+ let depth = 0;
68250
+ let start = -1;
68251
+ for (let i = at2; i >= Math.max(0, at2 - OBJECT_SCAN); i--) {
68252
+ if (!code[i]) continue;
68253
+ const c = js[i];
68254
+ if (c === "}") depth++;
68255
+ else if (c === "{") {
68256
+ if (depth === 0) {
68257
+ start = i;
68258
+ break;
68259
+ }
68260
+ depth--;
68261
+ }
68262
+ }
68263
+ if (start < 0) return void 0;
68264
+ let out2 = "";
68265
+ depth = 0;
68266
+ for (let i = start; i < Math.min(js.length, start + 2 * OBJECT_SCAN); i++) {
68267
+ const c = js[i];
68268
+ if (code[i] && c === "{") {
68269
+ depth++;
68270
+ if (depth === 1) out2 += c;
68271
+ else if (depth === 2) out2 += "{}";
68272
+ continue;
68273
+ }
68274
+ if (code[i] && c === "}") {
68275
+ depth--;
68276
+ if (depth === 0) return out2 + c;
68277
+ continue;
68278
+ }
68279
+ if (depth === 1) {
68280
+ if (code[i]) out2 += c;
68281
+ else if (code[i - 1]) out2 += '""';
68282
+ }
68283
+ }
68284
+ return void 0;
68285
+ }
68131
68286
  function routesFromBundle(js) {
68132
68287
  const out2 = /* @__PURE__ */ new Set();
68288
+ const code = codeMask(js);
68133
68289
  for (const m of js.matchAll(/\bpath\s*:\s*["'`](\/[A-Za-z0-9_\-/:.*]*|\*)["'`]/g)) {
68290
+ if (!code[m.index]) continue;
68291
+ const own3 = enclosingObject(js, m.index, code);
68292
+ const before = js.slice(Math.max(0, m.index - 80), m.index);
68293
+ if (!(own3 && ROUTE_KEY.test(own3)) && !NAV_LABEL_BEFORE.test(before)) continue;
68134
68294
  out2.add(m[1]);
68135
68295
  if (out2.size >= MAX_ROUTES) break;
68136
68296
  }
@@ -68207,7 +68367,7 @@ async function visitorPass(url, siteFetch) {
68207
68367
  }
68208
68368
  return { identity, routes: routes.slice(0, MAX_ROUTES), gaps };
68209
68369
  }
68210
- var MAX_HTML_BYTES, MAX_BUNDLE_BYTES, MAX_BUNDLES, MAX_ROUTES, APP_ID2, attr2, decodeEntities;
68370
+ var MAX_HTML_BYTES, MAX_BUNDLE_BYTES, MAX_BUNDLES, MAX_ROUTES, APP_ID2, attr2, decodeEntities, ROUTE_KEY, OBJECT_SCAN, NAV_LABEL_BEFORE;
68211
68371
  var init_visitor = __esm({
68212
68372
  "src/base44-analyze/visitor.ts"() {
68213
68373
  init_write_artifacts();
@@ -68221,6 +68381,9 @@ var init_visitor = __esm({
68221
68381
  return m ? m[2] ?? m[3] : void 0;
68222
68382
  };
68223
68383
  decodeEntities = (s) => s.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").trim();
68384
+ ROUTE_KEY = /[{,]\s*(?:element|Component|lazy|loader|children|errorElement|ErrorBoundary|index|action|handle)\s*:/;
68385
+ OBJECT_SCAN = 1200;
68386
+ NAV_LABEL_BEFORE = /\blabel\s*:\s*["'`][^"'`]*["'`]\s*,\s*$/;
68224
68387
  }
68225
68388
  });
68226
68389
 
@@ -73297,6 +73460,12 @@ function assertNotCommitted(path2, forbidden) {
73297
73460
  );
73298
73461
  }
73299
73462
  }
73463
+ function keepSiteLayout(prev, next) {
73464
+ if (!next || typeof next !== "object" || Array.isArray(next)) return next;
73465
+ const layout = prev && typeof prev === "object" ? prev.layout : void 0;
73466
+ if (layout === void 0 || next.layout !== void 0) return next;
73467
+ return { ...next, layout };
73468
+ }
73300
73469
  function mergeCustomerOwned(committed, overlay) {
73301
73470
  const CUSTOMER_OWNED = [
73302
73471
  "version",
@@ -73320,6 +73489,7 @@ function mergeCustomerOwned(committed, overlay) {
73320
73489
  if (value !== void 0) customer[key2] = value;
73321
73490
  }
73322
73491
  if (committed.site === void 0) delete customer.site;
73492
+ customer.site = keepSiteLayout(committed.site, customer.site);
73323
73493
  const overlayBranding = { ...customer.branding ?? {} };
73324
73494
  delete overlayBranding.appIconPath;
73325
73495
  delete overlayBranding.fonts;
@@ -73708,8 +73878,9 @@ function isHomePage(page, mainPageId) {
73708
73878
  function pageId(c, used) {
73709
73879
  const fromPath = (c.path.split("/").filter(Boolean).pop() ?? "").toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
73710
73880
  const base = c.role !== "other" && c.role !== "home" && !used.has(c.role) ? c.role : fromPath || "page_1";
73711
- let id = base === "page" ? "page_1" : base;
73712
- for (let n = 2; used.has(id); n++) id = `${base}_${n}`;
73881
+ const safe = base === "page" ? "page_1" : base.startsWith("drawer_") ? `page_${base}` : base;
73882
+ let id = safe;
73883
+ for (let n = 2; used.has(id); n++) id = `${safe}_${n}`;
73713
73884
  used.add(id);
73714
73885
  return id;
73715
73886
  }
@@ -73792,6 +73963,14 @@ function deriveSiteShell(input) {
73792
73963
  }
73793
73964
  }
73794
73965
  }
73966
+ for (const p of placed) {
73967
+ if (p.placement === "overflow" || !RESERVED_PAGE_IDS.has(p.id)) continue;
73968
+ used.delete(p.id);
73969
+ let id = `page_${p.id}`;
73970
+ for (let n = 2; used.has(id); n++) id = `page_${p.id}_${n}`;
73971
+ used.add(id);
73972
+ p.id = id;
73973
+ }
73795
73974
  const pages = [
73796
73975
  { id: "home", title: homeTitle, path: "/", icon: "home" },
73797
73976
  ...placed.map(({ c, id, placement }) => ({
@@ -73835,7 +74014,7 @@ function routeTitle(r) {
73835
74014
  const seg = r.path.split("/").filter(Boolean).pop() ?? r.path;
73836
74015
  return seg.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
73837
74016
  }
73838
- var DERIVED_SITE_MAX_PAGES, SITE_PAGE_TITLE_MAX, ROLE_ICON, TAB_ROLES, SYSTEM_SEGMENT, SYSTEM_TITLE, HOME_WORD, oneLine2;
74017
+ var DERIVED_SITE_MAX_PAGES, SITE_PAGE_TITLE_MAX, ROLE_ICON, TAB_ROLES, SYSTEM_SEGMENT, SYSTEM_TITLE, HOME_WORD, oneLine2, RESERVED_PAGE_IDS;
73839
74018
  var init_site_shell_derive = __esm({
73840
74019
  "src/site-analyze/site-shell-derive.ts"() {
73841
74020
  init_site_shell();
@@ -73863,6 +74042,7 @@ var init_site_shell_derive = __esm({
73863
74042
  SYSTEM_TITLE = /\b(thank you|\(popup\)|leave (a )?review|notifications|followers|side cart|order error|pending approval|my (rewards|subscriptions|bookings|orders|groups|wallet))\b|\b(group|service|product|project|collection|category|cart|payment request) pages?$|\b(event|experience|reservation|item) details\b/i;
73864
74043
  HOME_WORD = /^(home|home ?page|main|start|accueil|inicio|início|startseite|home ?sweet ?home|בית|דף הבית|ראשי|الرئيسية|ホーム|首页|홈)$/i;
73865
74044
  oneLine2 = (s) => s.replace(/[\u0000-\u001F\u007F\s]+/g, " ").trim();
74045
+ RESERVED_PAGE_IDS = /* @__PURE__ */ new Set(["account", "notifications"]);
73866
74046
  }
73867
74047
  });
73868
74048
 
@@ -74554,7 +74734,15 @@ async function runSiteAnalyze(opts) {
74554
74734
  const routes = book?.routes;
74555
74735
  if (book?.skipped) result.warnings = [...result.warnings ?? [], book.skipped];
74556
74736
  const derived = deriveSiteShell({ siteUrl: result.book.input.siteUrl, look: result.book.look, kind, routes });
74557
- result.provisioningOverlay.site = derived.site;
74737
+ const prevOverlayPath = resolve55(outDir, "provisioning.overlay.json");
74738
+ const prevSite = existsSync71(prevOverlayPath) ? (() => {
74739
+ try {
74740
+ return JSON.parse(readFileSync88(prevOverlayPath, "utf8")).site;
74741
+ } catch {
74742
+ return void 0;
74743
+ }
74744
+ })() : void 0;
74745
+ result.provisioningOverlay.site = keepSiteLayout(prevSite, derived.site);
74558
74746
  const warnings2 = (result.warnings ?? []).map(
74559
74747
  (w) => !opts.clientId?.trim() && w.startsWith("no --client-id:") ? `no --client-id: fine for --shell ${opts.shell} \u2014 a site shell binds no client, so --apply works without one. Only the vertical probes were skipped, so the catalog has no counts.` : w
74560
74748
  );