@wix/himalaya-cli 0.1160.0 → 0.1161.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
@@ -505,8 +505,8 @@ async function readWip(store, app) {
505
505
  if (!wipSupported(store)) return "unsupported";
506
506
  const { wip, promoted } = normalizeWipRecord(await store.getWipRecord(app));
507
507
  if (!wip || promoted.some((p) => p.id === wip.releaseId)) return null;
508
- const live2 = await store.getManifest(app);
509
- return live2?.releaseId === wip.releaseId ? null : wip;
508
+ const live3 = await store.getManifest(app);
509
+ return live3?.releaseId === wip.releaseId ? null : wip;
510
510
  }
511
511
  var storedTime;
512
512
  var init_wip_pointer = __esm({
@@ -8255,7 +8255,10 @@ var init_a11y_contract = __esm({
8255
8255
  ListItem: { role: "listitem", name: "required", state: ["selected", "disabled", "position"], decorative: false },
8256
8256
  // ---- Navigation and progress structures ---------------------------------------------
8257
8257
  DisclosureGroup: { role: "button", name: "required", state: ["expanded/collapsed"], decorative: false },
8258
- CollapsingHeader: { role: "heading", name: "required", state: ["expanded/collapsed"], decorative: false },
8258
+ // NO state (#3433): the header collapses as the content under it scrolls, not because the user
8259
+ // toggled it — it is not a disclosure, and "collapsed" would describe a scroll offset as if it
8260
+ // were a control's setting. Every arm exposes the title as a heading and nothing more.
8261
+ CollapsingHeader: { role: "heading", name: "required", state: [], decorative: false },
8259
8262
  Carousel: { role: "list", name: "required", state: ["item N of M"], decorative: false },
8260
8263
  Pager: { role: "list", name: "required", state: ["item N of M"], decorative: false },
8261
8264
  PageControl: { role: "adjustable", name: "required", state: ["page N of M"], decorative: false },
@@ -11897,7 +11900,7 @@ function inputJson(input) {
11897
11900
  const json6 = JSON.stringify(input ?? {});
11898
11901
  return json6 === void 0 ? "{}" : json6;
11899
11902
  }
11900
- function timerGlobals(hide, live2) {
11903
+ function timerGlobals(hide, live3) {
11901
11904
  const hidden = new Set(hide ?? []);
11902
11905
  const stubs = {
11903
11906
  setTimeout: " globalThis.setTimeout = function () { return 0; };",
@@ -11923,7 +11926,7 @@ function timerGlobals(hide, live2) {
11923
11926
  setInterval: " globalThis.setInterval = function () { return 0; };",
11924
11927
  clearInterval: " globalThis.clearInterval = function () {};"
11925
11928
  };
11926
- const decls = live2 ? real : stubs;
11929
+ const decls = live3 ? real : stubs;
11927
11930
  return Object.entries(decls).filter(([name]) => !hidden.has(name)).map(([, src]) => src).join("\n");
11928
11931
  }
11929
11932
  function preludeFor(opts) {
@@ -13253,6 +13256,7 @@ function resolveIdiom(tokens2, ctx = {}) {
13253
13256
  var IDIOM_CONTEXTS, UNSAFE_KEYS;
13254
13257
  var init_idiom = __esm({
13255
13258
  "../../core/ts/src/idiom.ts"() {
13259
+ "use strict";
13256
13260
  IDIOM_CONTEXTS = {
13257
13261
  ios: { native: ["ios"] },
13258
13262
  android: { native: ["material"] },
@@ -18223,12 +18227,12 @@ function genNativeConfig(app, opts = {}) {
18223
18227
  const embedManaged = hasMarkers(project, "yaml", LABEL_LIVE_EMBED);
18224
18228
  if (targetManaged !== embedManaged) throw new Error(`${app}: Live Activity target and embedding markers must be installed together`);
18225
18229
  const drainsWidgetActions = hostAppliesDeferredWidgetActions(app);
18226
- const live2 = targetManaged ? liveActivityPlan(project, ids.includes("live_activity"), drainsWidgetActions) : void 0;
18227
- if (live2?.appGroupId) {
18230
+ const live3 = targetManaged ? liveActivityPlan(project, ids.includes("live_activity"), drainsWidgetActions) : void 0;
18231
+ if (live3?.appGroupId) {
18228
18232
  const key2 = "com.apple.security.application-groups";
18229
18233
  const existing = ios.entitlements[key2];
18230
18234
  const groups = Array.isArray(existing) ? [...existing] : existing === void 0 ? [] : [existing];
18231
- if (!groups.includes(live2.appGroupId)) groups.push(live2.appGroupId);
18235
+ if (!groups.includes(live3.appGroupId)) groups.push(live3.appGroupId);
18232
18236
  ios.entitlements[key2] = groups;
18233
18237
  }
18234
18238
  const files = [
@@ -18276,7 +18280,7 @@ function genNativeConfig(app, opts = {}) {
18276
18280
  files.push(r);
18277
18281
  }
18278
18282
  if (targetManaged) {
18279
- const plan = live2;
18283
+ const plan = live3;
18280
18284
  files.push(applyToFile(iosYml, "yaml", LABEL_LIVE_TARGET, (i) => plan.target.map((line) => i + line), check));
18281
18285
  files.push(applyToFile(iosYml, "yaml", LABEL_LIVE_EMBED, (i) => plan.embed.map((line) => i + line), check));
18282
18286
  const source = join29(dirname16(iosYml), LIVE_SOURCE_PATH);
@@ -31594,7 +31598,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31594
31598
  const C = ctx.color;
31595
31599
  const name = typeof props.name === "string" && props.name ? props.name : void 0;
31596
31600
  const bag = React3.useContext(FormValuesContext);
31597
- const live2 = !!ctx.onAction;
31601
+ const live3 = !!ctx.onAction;
31598
31602
  const toolsKey = JSON.stringify(props.tools ?? null);
31599
31603
  const tools = React3.useMemo(() => effectiveTools(props.tools, props.uploadService), [toolsKey, props.uploadService]);
31600
31604
  const seedMode = typeof props.documentJson === "string" ? "literal" : typeof props.documentPath === "string" && props.documentPath ? "binding" : "none";
@@ -31633,11 +31637,11 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31633
31637
  const fireOnChangeRef = React3.useRef(fireOnChange);
31634
31638
  fireOnChangeRef.current = fireOnChange;
31635
31639
  React3.useEffect(() => {
31636
- if (live2) setSrc(new URL(ENGINE_PAGE_PATH, document.baseURI).toString());
31637
- }, [live2]);
31640
+ if (live3) setSrc(new URL(ENGINE_PAGE_PATH, document.baseURI).toString());
31641
+ }, [live3]);
31638
31642
  React3.useEffect(() => {
31639
31643
  const frame = iframeRef.current;
31640
- if (!live2 || !src || !frame) return;
31644
+ if (!live3 || !src || !frame) return;
31641
31645
  const t = ricosEditorWebTimings;
31642
31646
  const session = createRicosHostSession({
31643
31647
  send: (msg) => frame.contentWindow?.postMessage({ ricos: 1, msg }, "*"),
@@ -31682,7 +31686,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31682
31686
  session.dispose();
31683
31687
  sessionRef.current = null;
31684
31688
  };
31685
- }, [live2, src]);
31689
+ }, [live3, src]);
31686
31690
  React3.useEffect(() => {
31687
31691
  sessionRef.current?.setSeed(seedMode === "literal" ? props.documentJson : seedMode === "binding" ? boundSeed : "");
31688
31692
  }, [seedMode, props.documentJson, boundSeed, src]);
@@ -31738,7 +31742,7 @@ function RichContentEditorView({ props, ctx, wrap, nodeId, renderChild, ...dom }
31738
31742
  setLink(null);
31739
31743
  };
31740
31744
  const root = { position: "relative", display: "flex", flexDirection: "column", width: "100%", ...fill ? { flex: "1 1 auto", minHeight: 0 } : { minHeight }, ...wrap };
31741
- if (!live2) {
31745
+ if (!live3) {
31742
31746
  const { paddingTop: _t, paddingBottom: _b, paddingLeft: _l, paddingRight: _r, ...rootNoSides } = root;
31743
31747
  const own3 = { ...rootNoSides, border: `1px solid ${C("border", "#e3e3e3")}`, borderRadius: 8, padding: 12, boxSizing: "border-box" };
31744
31748
  return /* @__PURE__ */ jsx4("div", { ...dom, style: addIntrinsicPadding(own3, wrap) ?? own3, children: /* @__PURE__ */ jsx4("span", { style: { color: C("textSecondary", "#636B78") }, children: placeholder2 || "Rich text editor" }) });
@@ -31908,7 +31912,17 @@ function labelText(label2, ctx) {
31908
31912
  }
31909
31913
  return asText2(label2);
31910
31914
  }
31911
- var useResolvedId, FONT, rowShareFloor, A11ySwitch, A11ySlider, A11ySelectionControl, actOf, withSelection, resolveItemDeep, A11yTabs, A11ySegmented, disclosureSeq, A11yDisclosure;
31915
+ function resolveRowAction(action, ctx) {
31916
+ const resolved2 = resolveItemDeep(action, ctx);
31917
+ if (!resolved2 || typeof resolved2 !== "object" || Array.isArray(resolved2)) return resolved2;
31918
+ const params = resolved2.params;
31919
+ if (!params || typeof params !== "object" || Array.isArray(params)) return resolved2;
31920
+ return {
31921
+ ...resolved2,
31922
+ params: Object.fromEntries(Object.entries(params).map(([k, v]) => [k, typeof v === "number" || typeof v === "boolean" ? String(v) : v]))
31923
+ };
31924
+ }
31925
+ var useResolvedId, FONT, rowShareFloor, A11ySwitch, A11Y_PART, A11ySlider, A11ySelectionControl, actOf, withSelection, resolveItemDeep, A11yTabs, A11ySegmented, disclosureSeq, A11yDisclosure;
31912
31926
  var init_controls = __esm({
31913
31927
  "../../core/web-renderer/src/a11y/controls.tsx"() {
31914
31928
  "use strict";
@@ -31975,7 +31989,7 @@ var init_controls = __esm({
31975
31989
  }
31976
31990
  const toggleAct = act;
31977
31991
  if (ctx.onAction && toggleAct) {
31978
- const resolved3 = resolveItemDeep(toggleAct, ctx);
31992
+ const resolved3 = resolveRowAction(toggleAct, ctx);
31979
31993
  ctx.onAction({ ...resolved3, args: { ...resolved3.args ?? {}, value: next } });
31980
31994
  }
31981
31995
  } : void 0;
@@ -31997,6 +32011,7 @@ var init_controls = __esm({
31997
32011
  )
31998
32012
  ] });
31999
32013
  };
32014
+ A11Y_PART = "data-hm-a11y-part";
32000
32015
  A11ySlider = ({ props, ctx, wrap }) => {
32001
32016
  const C = ctx.color;
32002
32017
  const min = props.min ?? 0, max = props.max ?? 1;
@@ -32010,13 +32025,72 @@ var init_controls = __esm({
32010
32025
  React4.useEffect(() => {
32011
32026
  setVal(bound);
32012
32027
  }, [bound]);
32013
- const fire = ctx.onAction && props.onChange && !props.disabled ? () => ctx.onAction(props.onChange) : void 0;
32028
+ const dragging = React4.useRef(false);
32029
+ const canFire = !!(ctx.onAction && props.onChange && !props.disabled);
32030
+ const commit = (nv) => {
32031
+ setVal(nv);
32032
+ if (!canFire) return;
32033
+ const act = resolveRowAction(props.onChange, ctx);
32034
+ ctx.onAction({ ...act, args: { ...act.args ?? {}, value: nv } });
32035
+ };
32014
32036
  const clampPct = (n) => max > min ? Math.max(0, Math.min(1, (n - min) / (max - min))) : 0;
32037
+ const [pair, setPair] = React4.useState(() => [Math.min(bound, props.upperValue ?? bound), Math.max(bound, props.upperValue ?? bound)]);
32038
+ React4.useEffect(() => {
32039
+ if (range) setPair([Math.min(bound, props.upperValue), Math.max(bound, props.upperValue)]);
32040
+ }, [range, bound, props.upperValue]);
32015
32041
  if (range) {
32016
- const lo = Math.min(bound, props.upperValue), hi = Math.max(bound, props.upperValue);
32017
- return /* @__PURE__ */ jsx5("div", { style: { width: "100%", padding: "12px 9px", boxSizing: "border-box", opacity: props.disabled ? 0.5 : 1, ...wrap }, children: /* @__PURE__ */ jsxs2("div", { style: { position: "relative", height: 4, borderRadius: 999, background: C("surfaceTertiary", "#e3e6ea") }, children: [
32042
+ const [lo, hi] = pair;
32043
+ const thumbKey = (which) => (e) => {
32044
+ if (props.disabled) return;
32045
+ const at2 = pair[which];
32046
+ const floor = which === 0 ? min : lo, ceil = which === 0 ? hi : max;
32047
+ let nv = at2;
32048
+ switch (e.key) {
32049
+ case "ArrowRight":
32050
+ case "ArrowUp":
32051
+ nv = Math.min(ceil, at2 + step);
32052
+ break;
32053
+ case "ArrowLeft":
32054
+ case "ArrowDown":
32055
+ nv = Math.max(floor, at2 - step);
32056
+ break;
32057
+ case "Home":
32058
+ nv = floor;
32059
+ break;
32060
+ case "End":
32061
+ nv = ceil;
32062
+ break;
32063
+ default:
32064
+ return;
32065
+ }
32066
+ e.preventDefault();
32067
+ const next = which === 0 ? [nv, hi] : [lo, nv];
32068
+ setPair(next);
32069
+ if (canFire) {
32070
+ const act = resolveRowAction(props.onChange, ctx);
32071
+ ctx.onAction({ ...act, args: { ...act.args ?? {}, value: next[0], upperValue: next[1] } });
32072
+ }
32073
+ };
32074
+ const groupName = labelText(props.label, ctx) || void 0;
32075
+ return /* @__PURE__ */ jsx5("div", { ...{ [A11Y_PART]: "root" }, role: "group", "aria-label": groupName, style: { width: "100%", padding: "12px 9px", boxSizing: "border-box", opacity: props.disabled ? 0.5 : 1, ...wrap }, children: /* @__PURE__ */ jsxs2("div", { style: { position: "relative", height: 4, borderRadius: 999, background: C("surfaceTertiary", "#e3e6ea") }, children: [
32018
32076
  /* @__PURE__ */ jsx5("div", { style: { position: "absolute", left: `${clampPct(lo) * 100}%`, right: `${(1 - clampPct(hi)) * 100}%`, top: 0, bottom: 0, borderRadius: 999, background: tint } }),
32019
- [lo, hi].map((p, i) => /* @__PURE__ */ jsx5("span", { role: "slider", "aria-valuenow": p, "aria-valuemin": min, "aria-valuemax": max, "aria-orientation": "horizontal", style: { position: "absolute", left: `${clampPct(p) * 100}%`, top: "50%", width: 18, height: 18, borderRadius: "50%", background: "#fff", border: `2px solid ${tint}`, transform: "translate(-50%, -50%)", boxShadow: "0 1px 3px rgba(0,0,0,.25)" } }, i))
32077
+ [lo, hi].map((p, i) => /* @__PURE__ */ jsx5(
32078
+ "span",
32079
+ {
32080
+ ...i === 0 ? { [A11Y_PART]: "focus" } : {},
32081
+ role: "slider",
32082
+ tabIndex: props.disabled ? -1 : 0,
32083
+ "aria-label": i === 0 ? "Minimum" : "Maximum",
32084
+ "aria-valuenow": p,
32085
+ "aria-valuemin": i === 0 ? min : lo,
32086
+ "aria-valuemax": i === 0 ? hi : max,
32087
+ "aria-orientation": "horizontal",
32088
+ "aria-disabled": props.disabled ? true : void 0,
32089
+ onKeyDown: thumbKey(i),
32090
+ style: { position: "absolute", left: `${clampPct(p) * 100}%`, top: "50%", width: 18, height: 18, borderRadius: "50%", background: "#fff", border: `2px solid ${tint}`, transform: "translate(-50%, -50%)", boxShadow: "0 1px 3px rgba(0,0,0,.25)", outlineOffset: 3, cursor: props.disabled ? "default" : "pointer" }
32091
+ },
32092
+ i
32093
+ ))
32020
32094
  ] }) });
32021
32095
  }
32022
32096
  const pct = clampPct(val);
@@ -32042,12 +32116,38 @@ var init_controls = __esm({
32042
32116
  return;
32043
32117
  }
32044
32118
  e.preventDefault();
32119
+ commit(nv);
32120
+ };
32121
+ const valueAt = (e) => {
32122
+ const r = e.currentTarget.getBoundingClientRect();
32123
+ if (!(r.width > 0)) return void 0;
32124
+ const f = Math.max(0, Math.min(1, (e.clientX - r.left) / r.width));
32125
+ const raw2 = min + f * (max - min);
32126
+ const grid = Math.max(min, Math.min(max, Number((min + Math.round((raw2 - min) / step) * step).toFixed(10))));
32127
+ return Math.abs(max - raw2) < Math.abs(grid - raw2) ? max : grid;
32128
+ };
32129
+ const onPointerDown = (e) => {
32130
+ if (props.disabled) return;
32131
+ const nv = valueAt(e);
32132
+ if (nv === void 0) return;
32133
+ dragging.current = true;
32134
+ e.currentTarget.setPointerCapture?.(e.pointerId);
32045
32135
  setVal(nv);
32046
- if (fire) fire();
32047
32136
  };
32048
- return /* @__PURE__ */ jsx5("div", { style: { width: "100%", padding: "12px 9px", boxSizing: "border-box", opacity: props.disabled ? 0.5 : 1, ...wrap }, children: /* @__PURE__ */ jsx5(
32137
+ const onPointerMove = (e) => {
32138
+ if (!dragging.current) return;
32139
+ const nv = valueAt(e);
32140
+ if (nv !== void 0) setVal(nv);
32141
+ };
32142
+ const onPointerUp = (e) => {
32143
+ if (!dragging.current) return;
32144
+ dragging.current = false;
32145
+ commit(valueAt(e) ?? val);
32146
+ };
32147
+ return /* @__PURE__ */ jsx5("div", { ...{ [A11Y_PART]: "root" }, style: { width: "100%", padding: "12px 9px", boxSizing: "border-box", opacity: props.disabled ? 0.5 : 1, ...wrap }, children: /* @__PURE__ */ jsx5(
32049
32148
  "div",
32050
32149
  {
32150
+ ...{ [A11Y_PART]: "node" },
32051
32151
  role: "slider",
32052
32152
  tabIndex: props.disabled ? -1 : 0,
32053
32153
  "aria-valuenow": val,
@@ -32057,7 +32157,10 @@ var init_controls = __esm({
32057
32157
  "aria-label": labelText(props.label, ctx) || void 0,
32058
32158
  "aria-disabled": props.disabled ? true : void 0,
32059
32159
  onKeyDown,
32060
- style: { position: "relative", height: 18, display: "flex", alignItems: "center", outlineOffset: 4, cursor: props.disabled ? "default" : "pointer" },
32160
+ onPointerDown,
32161
+ onPointerMove,
32162
+ onPointerUp,
32163
+ style: { position: "relative", height: 18, display: "flex", alignItems: "center", outlineOffset: 4, cursor: props.disabled ? "default" : "pointer", touchAction: "pan-y" },
32061
32164
  children: /* @__PURE__ */ jsxs2("div", { style: { position: "relative", height: 4, width: "100%", borderRadius: 999, background: C("surfaceTertiary", "#e3e6ea") }, children: [
32062
32165
  /* @__PURE__ */ jsx5("div", { style: { position: "absolute", left: 0, width: `${pct * 100}%`, top: 0, bottom: 0, borderRadius: 999, background: tint } }),
32063
32166
  /* @__PURE__ */ jsx5("span", { "aria-hidden": true, style: { position: "absolute", left: `${pct * 100}%`, top: "50%", width: 18, height: 18, borderRadius: "50%", background: "#fff", border: `2px solid ${tint}`, transform: "translate(-50%, -50%)", boxShadow: "0 1px 3px rgba(0,0,0,.25)" } })
@@ -32074,7 +32177,7 @@ var init_controls = __esm({
32074
32177
  const accent = C("accentPrimary", "#116DFF");
32075
32178
  const fire = ctx.onAction && props.onChange && !props.disabled ? (e) => {
32076
32179
  e?.stopPropagation?.();
32077
- const act = resolveItemDeep(props.onChange, ctx);
32180
+ const act = resolveRowAction(props.onChange, ctx);
32078
32181
  const next = isRadio ? true : !on3;
32079
32182
  ctx.onAction({ ...act, args: { ...act.args ?? {}, value: next } });
32080
32183
  } : void 0;
@@ -32214,7 +32317,7 @@ var init_controls = __esm({
32214
32317
  const subtitle = useResolvedScalar(props.subtitle, ctx);
32215
32318
  const expanded = useResolvedScalar(props.expandedPath ?? props.expanded, ctx);
32216
32319
  const open = expanded === true;
32217
- const fire = ctx.onAction && props.onToggle ? () => ctx.onAction(resolveItemDeep(props.onToggle, ctx)) : void 0;
32320
+ const fire = ctx.onAction && props.onToggle ? () => ctx.onAction(resolveRowAction(props.onToggle, ctx)) : void 0;
32218
32321
  const regionId = React4.useMemo(() => `himi-disclosure-${++disclosureSeq}`, []);
32219
32322
  return /* @__PURE__ */ jsxs2("div", { style: { width: "100%", ...wrap }, children: [
32220
32323
  /* @__PURE__ */ jsxs2(
@@ -32241,12 +32344,15 @@ var init_controls = __esm({
32241
32344
  });
32242
32345
 
32243
32346
  // ../../core/web-renderer/src/a11y/modalStack.ts
32244
- function pushModalLayer(el) {
32245
- const layer = { el: typeof el === "function" ? el : () => el };
32347
+ function pushModalLayer(el, opts = {}) {
32348
+ const layer = { el: typeof el === "function" ? el : () => el, host: opts.host === true, seq: pushes++ };
32246
32349
  layers.push(layer);
32247
32350
  sync();
32248
32351
  return {
32249
- isTop: () => layers[layers.length - 1] === layer,
32352
+ isTop: () => {
32353
+ const own3 = layer.el();
32354
+ return own3 != null && own3.isConnected && topLayerOver(own3) === layer;
32355
+ },
32250
32356
  release: () => {
32251
32357
  const i = layers.indexOf(layer);
32252
32358
  if (i < 0) return;
@@ -32256,43 +32362,75 @@ function pushModalLayer(el) {
32256
32362
  };
32257
32363
  }
32258
32364
  function isWithinTopModal(el) {
32259
- const top = topElement();
32260
- return top == null || top.contains(el);
32365
+ const top = topOver(el);
32366
+ return top == null || top.el.contains(el);
32261
32367
  }
32262
- function topElement() {
32263
- for (let i = layers.length - 1; i >= 0; i--) {
32264
- const el = layers[i].el();
32265
- if (el?.isConnected) return el;
32368
+ function live() {
32369
+ const out2 = [];
32370
+ for (const layer of layers) {
32371
+ const el = layer.el();
32372
+ if (el?.isConnected) out2.push({ layer, el, scope: el.parentElement?.closest(`[${MODAL_SCOPE_ATTR}]`) ?? el.ownerDocument.body });
32266
32373
  }
32267
- return null;
32374
+ return out2;
32375
+ }
32376
+ function rootOf(l, all) {
32377
+ for (let root = l; ; ) {
32378
+ const outer = all.find((o) => o.el !== root.el && o.el.contains(root.el));
32379
+ if (!outer) return root;
32380
+ root = outer;
32381
+ }
32382
+ }
32383
+ function above(a, b, all) {
32384
+ if (a.el !== b.el) {
32385
+ if (b.el.contains(a.el)) return true;
32386
+ if (a.el.contains(b.el)) return false;
32387
+ }
32388
+ const ra = rootOf(a, all);
32389
+ const rb = rootOf(b, all);
32390
+ if (ra !== rb) return ra.layer.host !== rb.layer.host ? ra.layer.host : ra.layer.seq > rb.layer.seq;
32391
+ return a.layer.seq > b.layer.seq;
32392
+ }
32393
+ function topOf(candidates, all) {
32394
+ let top = null;
32395
+ for (const c of candidates) if (!top || above(c, top, all)) top = c;
32396
+ return top;
32397
+ }
32398
+ function topOver(target) {
32399
+ const all = live();
32400
+ return topOf(all.filter((l) => l.scope.contains(target) || target.contains(l.el)), all);
32401
+ }
32402
+ function topLayerOver(target) {
32403
+ return topOver(target)?.layer ?? null;
32268
32404
  }
32269
32405
  function sync() {
32270
32406
  watcher?.disconnect();
32271
32407
  watcher = null;
32272
32408
  for (const el of madeInert) el.removeAttribute("inert");
32273
32409
  madeInert.clear();
32274
- const top = topElement();
32275
- if (!top) return;
32276
- const scope = top.parentElement?.closest(`[${MODAL_SCOPE_ATTR}]`) ?? top.ownerDocument.body;
32277
- const levels = [];
32278
- let node = top;
32279
- while (node !== scope && node.parentElement) {
32280
- const parent = node.parentElement;
32281
- levels.push(parent);
32282
- for (const sibling of Array.from(parent.children)) {
32283
- if (sibling === node || SKIP.has(sibling.tagName) || sibling.hasAttribute("inert")) continue;
32284
- sibling.setAttribute("inert", "");
32285
- madeInert.add(sibling);
32286
- }
32287
- node = parent;
32288
- }
32289
- const Observer = top.ownerDocument.defaultView?.MutationObserver;
32290
- if (Observer && levels.length) {
32410
+ const all = live();
32411
+ if (!all.length) return;
32412
+ const levels = /* @__PURE__ */ new Set();
32413
+ for (const scope of new Set(all.map((l) => l.scope))) {
32414
+ const top = topOf(all.filter((l) => l.scope === scope), all);
32415
+ let node = top.el;
32416
+ while (node !== scope && node.parentElement) {
32417
+ const parent = node.parentElement;
32418
+ levels.add(parent);
32419
+ for (const sibling of Array.from(parent.children)) {
32420
+ if (sibling === node || SKIP.has(sibling.tagName) || sibling.hasAttribute("inert")) continue;
32421
+ sibling.setAttribute("inert", "");
32422
+ madeInert.add(sibling);
32423
+ }
32424
+ node = parent;
32425
+ }
32426
+ }
32427
+ const Observer = all[0].el.ownerDocument.defaultView?.MutationObserver;
32428
+ if (Observer && levels.size) {
32291
32429
  watcher = new Observer(() => sync());
32292
32430
  for (const level of levels) watcher.observe(level, { childList: true });
32293
32431
  }
32294
32432
  }
32295
- var MODAL_SCOPE_ATTR, SKIP, layers, madeInert, watcher;
32433
+ var MODAL_SCOPE_ATTR, SKIP, layers, madeInert, watcher, pushes;
32296
32434
  var init_modalStack = __esm({
32297
32435
  "../../core/web-renderer/src/a11y/modalStack.ts"() {
32298
32436
  MODAL_SCOPE_ATTR = "data-himi-modal-scope";
@@ -32300,6 +32438,7 @@ var init_modalStack = __esm({
32300
32438
  layers = [];
32301
32439
  madeInert = /* @__PURE__ */ new Set();
32302
32440
  watcher = null;
32441
+ pushes = 0;
32303
32442
  }
32304
32443
  });
32305
32444
 
@@ -33469,12 +33608,22 @@ function editA11yParts(node, edit) {
33469
33608
  if (typeof part !== "string" && nextKids === kids3) return node;
33470
33609
  return cloneWithKids(node, typeof part === "string" ? { ...edit(part, own3), [A11Y_PART]: void 0 } : {}, nextKids);
33471
33610
  }
33472
- function a11yPartEdit(routed, authoredName, onNode) {
33611
+ function a11yPartEdit(routed, authoredName, onNode, focus) {
33473
33612
  return (part, own3) => {
33474
33613
  if (part === "derived-name") return authoredName ? {} : { "aria-hidden": "true" };
33614
+ const focusable = typeof own3.tabIndex === "number" && own3.tabIndex >= 0;
33615
+ if (part === "focus") {
33616
+ if (!focus || !focusable) return {};
33617
+ focus.onRouted();
33618
+ return { ...focus.carried };
33619
+ }
33475
33620
  if (part !== "node") return {};
33476
33621
  onNode();
33477
33622
  const patch = { ...routed };
33623
+ if (focus && focusable) {
33624
+ Object.assign(patch, focus.carried);
33625
+ focus.onRouted();
33626
+ }
33478
33627
  if (typeof routed["aria-describedby"] === "string" && typeof own3["aria-describedby"] === "string") {
33479
33628
  patch["aria-describedby"] = `${own3["aria-describedby"]} ${routed["aria-describedby"]}`;
33480
33629
  }
@@ -33621,11 +33770,28 @@ function withExtras(name, render) {
33621
33770
  for (const k of NODE_A11Y_ATTRS) if (next[k] !== void 0) routed[k] = next[k];
33622
33771
  if (pass[AUTHORED_ROLE] === true || pass["aria-level"] != null) routed.role = next.role;
33623
33772
  }
33773
+ const focus = {};
33774
+ if (!rootIsControl) {
33775
+ if (next.tabIndex !== void 0 && !tabIndexIsSynthetic) focus.tabIndex = next.tabIndex;
33776
+ if (next["data-himalaya-initial-focus"] !== void 0) focus["data-himalaya-initial-focus"] = next["data-himalaya-initial-focus"];
33777
+ }
33624
33778
  let nodeFound = false;
33625
- const kids3 = editA11yParts(prev.children, a11yPartEdit(routed, pass["aria-label"] != null, () => {
33626
- nodeFound = true;
33627
- }));
33779
+ let focusRouted = false;
33780
+ const kids3 = editA11yParts(prev.children, a11yPartEdit(
33781
+ routed,
33782
+ pass["aria-label"] != null,
33783
+ () => {
33784
+ nodeFound = true;
33785
+ },
33786
+ Object.keys(focus).length ? { carried: focus, onRouted: () => {
33787
+ focusRouted = true;
33788
+ } } : void 0
33789
+ ));
33628
33790
  if (nodeFound) for (const k of Object.keys(routed)) delete next[k];
33791
+ if (focusRouted) {
33792
+ delete next.tabIndex;
33793
+ delete next["data-himalaya-initial-focus"];
33794
+ }
33629
33795
  return cloneWithKids(el, next, kids3);
33630
33796
  }
33631
33797
  return React7.cloneElement(el, next);
@@ -35136,13 +35302,15 @@ function renderInner(node, ctx) {
35136
35302
  ] });
35137
35303
  }
35138
35304
  // RFC 0058 §4 — an INLINE card, drawn where the descriptor puts it, as iOS (`AlertDialogPreview`)
35139
- // and Android (`SDUIAlertDialogPreview`) draw it: only its semantics are modal (`aria-modal`,
35140
- // from the one table). It is not presented over the screen, so a screen that shows one inline (a
35141
- // cart's high-value confirm, a component gallery) keeps the rest of itself usable, tab bar
35142
- // included. A presented alert is `presentation: "alert"` on a navigating Action, which the web
35143
- // host draws as its own modal dialog.
35305
+ // and Android (`SDUIAlertDialogPreview`) draw it. It is not presented over the screen, so a
35306
+ // screen that shows one inline (a cart's high-value confirm, a component gallery) keeps the rest
35307
+ // of itself usable, tab bar included — and it is NOT modal, whatever `modal` says (#3428):
35308
+ // `modal` applies only while an alert is presented, and `aria-modal` on a card in the screen's
35309
+ // own flow told assistive technology that every sibling was unavailable, with no way to dismiss
35310
+ // it. A presented alert is `presentation: "alert"` on a navigating Action, which the web host
35311
+ // draws as its own modal dialog.
35144
35312
  case "AlertDialog":
35145
- return /* @__PURE__ */ jsxs5("div", { role: "alertdialog", "aria-modal": isOverlayModal("AlertDialog", props.modal) ? "true" : void 0, "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: [
35313
+ 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: [
35146
35314
  /* @__PURE__ */ jsx8("div", { style: { fontFamily: bodyFont(ctx), fontWeight: 700, fontSize: 17, color: C("textPrimary", "#111") }, children: txt(props.title, ctx) }),
35147
35315
  /* @__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) }),
35148
35316
  /* @__PURE__ */ jsxs5("div", { style: { display: "flex", gap: 10 }, children: [
@@ -35165,7 +35333,7 @@ function renderInner(node, ctx) {
35165
35333
  }
35166
35334
  }
35167
35335
  }
35168
- 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, A11Y_PART, 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;
35336
+ 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;
35169
35337
  var init_renderNode = __esm({
35170
35338
  "../../core/web-renderer/src/renderNode.tsx"() {
35171
35339
  "use strict";
@@ -35328,7 +35496,7 @@ var init_renderNode = __esm({
35328
35496
  const bound = Object.entries(params).filter(
35329
35497
  ([, v]) => typeof v === "string" && v.startsWith("$service:")
35330
35498
  );
35331
- const [live2, setLive] = React7.useState(() => {
35499
+ const [live3, setLive] = React7.useState(() => {
35332
35500
  const seed2 = {};
35333
35501
  if (ctx.provider) for (const [k, p] of bound) seed2[k] = ctx.provider.value(servicePath(p));
35334
35502
  return seed2;
@@ -35342,7 +35510,7 @@ var init_renderNode = __esm({
35342
35510
  );
35343
35511
  return () => unsubs.forEach((u) => u());
35344
35512
  }, [ctx.provider, subKey]);
35345
- const resolved2 = { ...live2 };
35513
+ const resolved2 = { ...live3 };
35346
35514
  for (const [k, v] of Object.entries(params)) {
35347
35515
  if (typeof v === "string" && v.startsWith("$item")) resolved2[k] = resolveScalarStatic(v, ctx);
35348
35516
  }
@@ -35735,18 +35903,21 @@ var init_renderNode = __esm({
35735
35903
  const C = ctx.color;
35736
35904
  React7.useEffect(() => {
35737
35905
  if (!open) return;
35906
+ const onTop = () => menuRef.current != null && isWithinTopModal(menuRef.current);
35738
35907
  const onDown = (e) => {
35739
- if (hostRef.current && !hostRef.current.contains(e.target)) setOpen(false);
35908
+ if (hostRef.current && !hostRef.current.contains(e.target) && onTop()) setOpen(false);
35740
35909
  };
35741
35910
  const onKey = (e) => {
35742
- if (e.key === "Escape") setOpen(false);
35911
+ if (e.key !== "Escape" || !onTop()) return;
35912
+ e.stopPropagation();
35913
+ setOpen(false);
35743
35914
  };
35744
35915
  const kinds = ["pointerdown", "touchstart", "mousedown"];
35745
- for (const k of kinds) document.addEventListener(k, onDown);
35746
- document.addEventListener("keydown", onKey);
35916
+ for (const k of kinds) document.addEventListener(k, onDown, true);
35917
+ document.addEventListener("keydown", onKey, true);
35747
35918
  return () => {
35748
- for (const k of kinds) document.removeEventListener(k, onDown);
35749
- document.removeEventListener("keydown", onKey);
35919
+ for (const k of kinds) document.removeEventListener(k, onDown, true);
35920
+ document.removeEventListener("keydown", onKey, true);
35750
35921
  };
35751
35922
  }, [open]);
35752
35923
  const modal = isOverlayModal("Menu", props.modal);
@@ -36404,11 +36575,11 @@ var init_renderNode = __esm({
36404
36575
  const [retyped, setRetyped] = React7.useState(null);
36405
36576
  React7.useEffect(() => {
36406
36577
  if (!retypeSrc) return;
36407
- let live2 = true;
36578
+ let live3 = true;
36408
36579
  let made = null;
36409
36580
  const settle = (u) => {
36410
36581
  made = u;
36411
- if (!live2) {
36582
+ if (!live3) {
36412
36583
  if (u) URL.revokeObjectURL(u);
36413
36584
  return;
36414
36585
  }
@@ -36416,7 +36587,7 @@ var init_renderNode = __esm({
36416
36587
  };
36417
36588
  retypeAsPdf(retypeSrc).then(settle, () => settle(null));
36418
36589
  return () => {
36419
- live2 = false;
36590
+ live3 = false;
36420
36591
  if (made) URL.revokeObjectURL(made);
36421
36592
  setRetyped((cur) => cur?.from === retypeSrc ? null : cur);
36422
36593
  };
@@ -36716,12 +36887,18 @@ var init_renderNode = __esm({
36716
36887
  };
36717
36888
  const commit = (target) => {
36718
36889
  const next = Math.min(max, Math.max(min, target));
36719
- if (next === value) return;
36890
+ if (next === value) return void 0;
36720
36891
  setValue(next);
36721
36892
  setBagValue(encodeStepperFieldValue(next, { min, max }));
36722
36893
  dispatch(next);
36894
+ return next;
36723
36895
  };
36896
+ const [pressed, setPressed] = React7.useState({ text: "", count: 0 });
36724
36897
  const bump = (delta) => commit(value + delta);
36898
+ const press = (delta) => {
36899
+ const next = bump(delta);
36900
+ if (next !== void 0) setPressed((p) => ({ text: String(next), count: p.count + 1 }));
36901
+ };
36725
36902
  const onValueKeyDown = (e) => {
36726
36903
  const target = e.key === "ArrowUp" ? value + step : e.key === "ArrowDown" ? value - step : e.key === "Home" && typeof props.min === "number" ? min : e.key === "End" && typeof props.max === "number" ? max : void 0;
36727
36904
  if (target === void 0) return;
@@ -36767,9 +36944,10 @@ var init_renderNode = __esm({
36767
36944
  ] });
36768
36945
  }
36769
36946
  return /* @__PURE__ */ jsxs5("div", { ...root, style: box, children: [
36770
- /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Decrease", disabled: disabled("min"), onClick: () => bump(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
36947
+ /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Decrease", disabled: disabled("min"), onClick: () => press(-step), style: { ...btn("min"), font: "inherit" }, children: "\u2212" }),
36771
36948
  /* @__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 }),
36772
- /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Increase", disabled: disabled("max"), onClick: () => bump(step), style: { ...btn("max"), font: "inherit" }, children: "+" })
36949
+ /* @__PURE__ */ jsx8("button", { type: "button", tabIndex: -1, "aria-label": "Increase", disabled: disabled("max"), onClick: () => press(step), style: { ...btn("max"), font: "inherit" }, children: "+" }),
36950
+ /* @__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" : "") })
36773
36951
  ] });
36774
36952
  });
36775
36953
  SYNTHETIC_TAP_ROLE = "data-hm-synthetic-role";
@@ -36780,7 +36958,6 @@ var init_renderNode = __esm({
36780
36958
  AUTHORED_ROLE = "data-hm-authored-role";
36781
36959
  PENDING_RANGE = "data-hm-pending-range";
36782
36960
  RANGE_ROLES = /* @__PURE__ */ new Set(["progressbar", "slider", "scrollbar", "spinbutton", "meter"]);
36783
- A11Y_PART = "data-hm-a11y-part";
36784
36961
  NODE_A11Y_ATTRS = ["aria-label", "aria-valuetext", "aria-level", "aria-describedby", "aria-disabled", "aria-selected"];
36785
36962
  INTERACTIVE_ROLES = /* @__PURE__ */ new Set([
36786
36963
  "button",
@@ -37321,7 +37498,8 @@ var init_renderNode = __esm({
37321
37498
  const C = ctx.color;
37322
37499
  const min = props.min ?? 0, max = props.max ?? 1;
37323
37500
  const bound = useResolvedScalar(props.valuePath, ctx);
37324
- const gRaw = props.valuePath != null ? bound : props.value;
37501
+ const gSource = props.valuePath != null ? bound : props.value;
37502
+ const gRaw = typeof gSource === "string" && gSource.trim() !== "" && Number.isFinite(Number(gSource)) ? Number(gSource) : gSource;
37325
37503
  const v = typeof gRaw === "number" ? gRaw : (min + max) / 2;
37326
37504
  const pct = max > min ? Math.max(0, Math.min(1, (v - min) / (max - min))) : 0;
37327
37505
  const tint = C(props.tint ?? "accentPrimary", "#116DFF");
@@ -37330,8 +37508,7 @@ var init_renderNode = __esm({
37330
37508
  const labelName = useBoundString(props.label, ctx).trim();
37331
37509
  const hasValue = typeof gRaw === "number" && Number.isFinite(gRaw);
37332
37510
  const named = labelName ? { "aria-label": labelName } : hasValue && max > min ? { "aria-label": `${Math.round(pct * 100)}%` } : {};
37333
- const fractionScale = min === 0 && max === 1;
37334
- const range = max > min ? { "aria-valuemin": min, "aria-valuemax": max, ...hasValue ? { "aria-valuenow": Math.max(min, Math.min(max, v)), ...fractionScale ? { "aria-valuetext": `${Math.round(pct * 100)}%` } : {} } : {} } : {};
37511
+ const range = max > min ? { "aria-valuemin": min, "aria-valuemax": max, ...hasValue ? { "aria-valuenow": Math.max(min, Math.min(max, v)), "aria-valuetext": `${Math.round(pct * 100)}%` } : {} } : {};
37335
37512
  const a11y = labelName || hasValue && max > min ? { role: "progressbar", ...named, ...range, [SELF_RENDERED_LEAF]: true } : { "aria-hidden": "true", [INFERRED_DECORATIVE]: true, [ROLE_WHEN_NAMED]: "progressbar", [PENDING_RANGE]: range, [SELF_RENDERED_LEAF]: true };
37336
37513
  if (Array.isArray(props.rings) && props.rings.length) {
37337
37514
  const size = 96, thick = 9, step = 22;
@@ -37382,7 +37559,7 @@ var init_renderNode = __esm({
37382
37559
  const size = props.size ?? 36;
37383
37560
  const maxVisible = props.maxVisible ?? 4;
37384
37561
  const shown2 = avatars.slice(0, maxVisible);
37385
- const overflow = props.overflowCount || Math.max(0, avatars.length - maxVisible);
37562
+ const overflow = (props.showOverflow ?? props.show_overflow) === false ? 0 : props.overflowCount || Math.max(0, avatars.length - maxVisible);
37386
37563
  const shift = Math.round(size * (1 - (props.overlapRatio ?? 0.67)));
37387
37564
  const caption = useBoundString(props.caption, ctx).trim();
37388
37565
  const count2 = shown2.length + overflow;
@@ -37394,7 +37571,16 @@ var init_renderNode = __esm({
37394
37571
  const ring = props.ringGradient ? ctx.gradient(props.ringGradient) : void 0;
37395
37572
  const wrapStyle = ring ? { marginLeft: i === 0 ? 0 : -(size - shift), background: ring, padding: 2.5, borderRadius: "50%" } : { marginLeft: i === 0 ? 0 : -(size - shift), border: `2px solid ${C("surfacePrimary", "#fff")}`, borderRadius: "50%" };
37396
37573
  const who = asText2(a.initials).trim();
37397
- const circle = avatarCircle(who || "?", size, C, true, bodyFont(ctx));
37574
+ const initials = avatarCircle(who || "?", size, C, true, bodyFont(ctx));
37575
+ const photo = typeof a.imageUrl === "string" && a.imageUrl && !isBinding(a.imageUrl) ? a.imageUrl : "";
37576
+ const circle = photo ? React7.cloneElement(
37577
+ initials,
37578
+ { style: { ...initials.props.style, position: "relative", overflow: "hidden" } },
37579
+ initials.props.children,
37580
+ /* @__PURE__ */ jsx8("img", { src: photo, alt: "", onError: (e) => {
37581
+ e.currentTarget.style.display = "none";
37582
+ }, style: { position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" } })
37583
+ ) : initials;
37398
37584
  return who ? /* @__PURE__ */ jsx8("div", { role: "listitem", style: wrapStyle, children: React7.cloneElement(circle, { role: "img", "aria-label": who }) }, i) : /* @__PURE__ */ jsx8("div", { "aria-hidden": "true", style: wrapStyle, children: circle }, i);
37399
37585
  }),
37400
37586
  overflow > 0 && /* @__PURE__ */ jsx8("div", { role: "listitem", style: { marginLeft: -(size - shift), width: size, height: size, borderRadius: "50%", border: `2px solid ${C("surfacePrimary", "#fff")}`, background: C("surfaceTertiary", "#e6e6e6"), color: C("textPrimary", "#111"), display: "grid", placeItems: "center", fontSize: size * 0.32, fontWeight: 700, fontFamily: bodyFont(ctx) }, children: /* @__PURE__ */ jsxs5("span", { role: "img", "aria-label": `${overflow} more`, children: [
@@ -40980,9 +41166,9 @@ async function handleOwnerSitesRequest(req, res) {
40980
41166
  try {
40981
41167
  const { fetchLiveOwnerSites } = await import("./apps/wix-owner-clone-live.js");
40982
41168
  const { buildWixOwnerCloneSites } = await import("./apps/wix-owner-clone-app.js");
40983
- const live2 = await fetchLiveOwnerSites();
40984
- if (live2) {
40985
- payload = { sites: live2 };
41169
+ const live3 = await fetchLiveOwnerSites();
41170
+ if (live3) {
41171
+ payload = { sites: live3 };
40986
41172
  } else {
40987
41173
  source = "fallback";
40988
41174
  payload = buildWixOwnerCloneSites();
@@ -47213,17 +47399,17 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
47213
47399
  base2 = null;
47214
47400
  } else {
47215
47401
  const counting = countingWixCall(await ensureLiveWixCall());
47216
- const live2 = await liveRenderServices(bundleJs, {
47402
+ const live3 = await liveRenderServices(bundleJs, {
47217
47403
  wixCall: counting.call,
47218
47404
  input,
47219
47405
  budgetMs: collect2.render.loadBudgetMs ?? LIVE_LOAD_BUDGET_MS,
47220
47406
  localDbSchema: appLocalDbSchema,
47221
47407
  descriptor
47222
47408
  });
47223
- base2 = live2.services;
47224
- liveCalls = [...live2.calls];
47409
+ base2 = live3.services;
47410
+ liveCalls = [...live3.calls];
47225
47411
  liveReturned = counting.returned();
47226
- liveErrors = live2.errors;
47412
+ liveErrors = live3.errors;
47227
47413
  }
47228
47414
  } else if (collect2?.render?.mocks && collect2.render.hydrate !== false && bundleName && readBuiltBundle(tier5Dir, bundleName)) {
47229
47415
  const calls = [];
@@ -49476,12 +49662,12 @@ function planFromPayload(payload, base, selectors) {
49476
49662
  }
49477
49663
  return { ok: true, plan: { patch, touched, included, rebound } };
49478
49664
  }
49479
- function regressionDiff(base, live2, touched) {
49665
+ function regressionDiff(base, live3, touched) {
49480
49666
  const moves = new Set(touched);
49481
49667
  const rows = [];
49482
- for (const id of /* @__PURE__ */ new Set([...Object.keys(live2.screens ?? {}), ...Object.keys(base.screens ?? {})])) {
49668
+ for (const id of /* @__PURE__ */ new Set([...Object.keys(live3.screens ?? {}), ...Object.keys(base.screens ?? {})])) {
49483
49669
  if (moves.has(`screen:${id}`)) continue;
49484
- const l = live2.screens?.[id];
49670
+ const l = live3.screens?.[id];
49485
49671
  const b = base.screens?.[id];
49486
49672
  if (!b) {
49487
49673
  rows.push({ item: `screen:${id}`, live: l?.descriptorHash ?? null, base: null, effect: `${id} DISAPPEARS \u2014 it was added after ${base.releaseId}` });
@@ -49495,13 +49681,13 @@ function regressionDiff(base, live2, touched) {
49495
49681
  rows.push({ item: `screen:${id}`, live: l.descriptorHash, base: b.descriptorHash, effect: `${id} reverts to its ${base.releaseId} descriptor` });
49496
49682
  continue;
49497
49683
  }
49498
- if (resolveBundleSha(live2, l.bundle) !== resolveBundleSha(base, b.bundle)) {
49499
- rows.push({ item: `screen:${id}`, live: resolveBundleSha(live2, l.bundle), base: resolveBundleSha(base, b.bundle), effect: `${id} rebinds to its ${base.releaseId} worker bundle` });
49684
+ if (resolveBundleSha(live3, l.bundle) !== resolveBundleSha(base, b.bundle)) {
49685
+ rows.push({ item: `screen:${id}`, live: resolveBundleSha(live3, l.bundle), base: resolveBundleSha(base, b.bundle), effect: `${id} rebinds to its ${base.releaseId} worker bundle` });
49500
49686
  }
49501
49687
  }
49502
49688
  const scalar4 = (key2, item, what) => {
49503
49689
  if (moves.has(item)) return;
49504
- const l = live2[key2] ?? null;
49690
+ const l = live3[key2] ?? null;
49505
49691
  const b = base[key2] ?? null;
49506
49692
  if (l !== b) rows.push({ item, live: l, base: b, effect: `${what} reverts to ${base.releaseId}` });
49507
49693
  };
@@ -49509,8 +49695,8 @@ function regressionDiff(base, live2, touched) {
49509
49695
  scalar4("appConfigHash", "app-config", "app-config");
49510
49696
  scalar4("iconHash", "icon", "the launcher icon");
49511
49697
  scalar4("minBinaryVersion", "minBinaryVersion", "the minimum binary version");
49512
- for (const name of /* @__PURE__ */ new Set([...Object.keys(live2.assets ?? {}), ...Object.keys(base.assets ?? {})])) {
49513
- const l = live2.assets?.[name]?.sha256 ?? null;
49698
+ for (const name of /* @__PURE__ */ new Set([...Object.keys(live3.assets ?? {}), ...Object.keys(base.assets ?? {})])) {
49699
+ const l = live3.assets?.[name]?.sha256 ?? null;
49514
49700
  const b = base.assets?.[name]?.sha256 ?? null;
49515
49701
  if (l === b) continue;
49516
49702
  rows.push({
@@ -49520,16 +49706,16 @@ function regressionDiff(base, live2, touched) {
49520
49706
  effect: b === null ? `asset:${name} record DISAPPEARS \u2014 references fall back to the baked copy or render empty` : `asset:${name} reverts to ${base.releaseId}`
49521
49707
  });
49522
49708
  }
49523
- for (const name of /* @__PURE__ */ new Set([...Object.keys(live2.authoringDocs ?? {}), ...Object.keys(base.authoringDocs ?? {})])) {
49524
- const l = live2.authoringDocs?.[name]?.sha256 ?? null;
49709
+ for (const name of /* @__PURE__ */ new Set([...Object.keys(live3.authoringDocs ?? {}), ...Object.keys(base.authoringDocs ?? {})])) {
49710
+ const l = live3.authoringDocs?.[name]?.sha256 ?? null;
49525
49711
  const b = base.authoringDocs?.[name]?.sha256 ?? null;
49526
49712
  if (l !== b) rows.push({ item: `doc:${name}`, live: l, base: b, effect: `${name} reverts to ${base.releaseId}` });
49527
49713
  }
49528
49714
  const PROVENANCE = /* @__PURE__ */ new Set(["releaseId", "gitSha", "shellSha", "label", "notes", "publishedAt", "publishedBy", "attestation", "forcedPastErrors"]);
49529
49715
  const REPORTED_IN_DETAIL = /* @__PURE__ */ new Set(["app", "screens", "bundles", "tokensHash", "appConfigHash", "iconHash", "minBinaryVersion", "assets", "authoringDocs"]);
49530
- for (const key2 of /* @__PURE__ */ new Set([...Object.keys(live2), ...Object.keys(base)])) {
49716
+ for (const key2 of /* @__PURE__ */ new Set([...Object.keys(live3), ...Object.keys(base)])) {
49531
49717
  if (PROVENANCE.has(key2) || REPORTED_IN_DETAIL.has(key2) || moves.has(key2)) continue;
49532
- const l = live2[key2] ?? null;
49718
+ const l = live3[key2] ?? null;
49533
49719
  const b = base[key2] ?? null;
49534
49720
  const ls = JSON.stringify(l) ?? "null";
49535
49721
  const bs = JSON.stringify(b) ?? "null";
@@ -50579,7 +50765,7 @@ async function runNotifySetup(pos, flags, io, deps = {}) {
50579
50765
  if (ownership.state !== "owned") return refuse3(io, "app_ownership_unverified", void 0, 1);
50580
50766
  input.app = ownership.slug;
50581
50767
  const common = { target, wixToken, previewTag, fetchImpl: deps.fetchImpl };
50582
- const readStatus = (live2 = false) => pushSetupRequest({ ...common, operation: "status", query: { app: input.app, site: input.site, ...live2 ? { verify: "live" } : {} } });
50768
+ const readStatus = (live3 = false) => pushSetupRequest({ ...common, operation: "status", query: { app: input.app, site: input.site, ...live3 ? { verify: "live" } : {} } });
50583
50769
  if (operation === "status") return report(await readStatus(flags.refresh === true), flags, io, dir);
50584
50770
  const previous = await readStatus();
50585
50771
  if (!previous.ok || !STATES.has(String(previous.body?.state))) return report(previous, flags, io, dir);
@@ -52575,7 +52761,7 @@ function watchReminder(dir, opts = {}) {
52575
52761
  try {
52576
52762
  if (!existsSync50(join51(dir, "himalaya.content.json"))) return void 0;
52577
52763
  const nowDate = opts.now ?? /* @__PURE__ */ new Date();
52578
- const live2 = liveWatch(dir, opts.isAlive, nowDate);
52764
+ const live3 = liveWatch(dir, opts.isAlive, nowDate);
52579
52765
  const now = nowDate.getTime();
52580
52766
  const file = join51(dir, REMINDERS_FILE);
52581
52767
  let last = Number.NaN;
@@ -52587,8 +52773,8 @@ function watchReminder(dir, opts = {}) {
52587
52773
  if (!realDirIn(dir, ".himi")) return void 0;
52588
52774
  writeFileAtomic(file, `${JSON.stringify({ watch: new Date(now).toISOString() })}
52589
52775
  `);
52590
- if (live2) {
52591
- return `the live preview is running at ${live2.url} (pid ${live2.pid}${live2.by === "init" ? ", started by himi init" : ""}) \u2014 it repaints on every save, and the build board is ${live2.board}; give the owner that link to click around while you work, and do not start another`;
52776
+ if (live3) {
52777
+ return `the live preview is running at ${live3.url} (pid ${live3.pid}${live3.by === "init" ? ", started by himi init" : ""}) \u2014 it repaints on every save, and the build board is ${live3.board}; give the owner that link to click around while you work, and do not start another`;
52592
52778
  }
52593
52779
  const content = opts.content ?? displayPath(dir);
52594
52780
  const remote = readInitSource(dir)?.source === "remote" ? "init did not start it because this template came off the serve plane \u2014 once you have read its code, " : "";
@@ -52635,9 +52821,9 @@ async function startWatchAtInit(dir, opts) {
52635
52821
  const note = given.length ? { note: watchOptOutIgnoredNote(given) } : {};
52636
52822
  const deps = { ...defaultStartWatchDeps, ...opts.deps };
52637
52823
  const now = opts.now ?? /* @__PURE__ */ new Date();
52638
- const live2 = liveWatch(dir, deps.isAlive, now);
52639
- if (live2 && (live2.by === "init" || await deps.previewRunning(dir))) {
52640
- return { skipped: `a live preview of this app is already running (pid ${live2.pid})`, url: live2.url, board: live2.board, pid: live2.pid, ...note };
52824
+ const live3 = liveWatch(dir, deps.isAlive, now);
52825
+ if (live3 && (live3.by === "init" || await deps.previewRunning(dir))) {
52826
+ return { skipped: `a live preview of this app is already running (pid ${live3.pid})`, url: live3.url, board: live3.board, pid: live3.pid, ...note };
52641
52827
  }
52642
52828
  try {
52643
52829
  const port = await deps.freePort(previewPortForDir(dir));
@@ -55976,9 +56162,9 @@ function makeFunctionsHandler(options) {
55976
56162
  const target = resolveTarget3(new URL(request.url).pathname);
55977
56163
  if (!target) return errorResponse(404, "not_found", "function route not found", id);
55978
56164
  if (request.method === "OPTIONS") return new Response(null, { status: 204, headers: { "access-control-allow-origin": "*", "access-control-allow-methods": "GET,POST,PUT,PATCH,DELETE,OPTIONS", "access-control-allow-headers": "authorization,content-type,x-request-id,x-himalaya-release,x-himalaya-preview-token", "x-request-id": id } });
55979
- const live2 = await options.store.getManifest(target.app);
56165
+ const live3 = await options.store.getManifest(target.app);
55980
56166
  const pin = new URL(request.url).searchParams.get("release") || request.headers.get("x-himalaya-release");
55981
- let selected = live2;
56167
+ let selected = live3;
55982
56168
  if (pin && !options.previewTokenSecret) return errorResponse(501, "preview_token_unavailable", "pinned release access requires preview token validation", id);
55983
56169
  let previewClaims;
55984
56170
  if (pin && options.previewTokenSecret) {
@@ -58358,19 +58544,19 @@ function publicRecord(value) {
58358
58544
  const { archiveBase64: _archiveBase64, ...record2 } = value;
58359
58545
  return record2;
58360
58546
  }
58361
- function live(value, now) {
58547
+ function live2(value, now) {
58362
58548
  if (!value || value.revokedAt) return null;
58363
58549
  if (value.expiresAt && Date.parse(value.expiresAt) <= now.getTime()) return null;
58364
58550
  return value;
58365
58551
  }
58366
58552
  async function resolvePackageShareMetadata(store, id, now = /* @__PURE__ */ new Date()) {
58367
58553
  if (!PACKAGE_SHARE_ID_PATTERN2.test(id) || !store.getDoc) return null;
58368
- const value = live(parseStored(await store.getDoc(PACKAGE_SHARE_NAMESPACE, id), id), now);
58554
+ const value = live2(parseStored(await store.getDoc(PACKAGE_SHARE_NAMESPACE, id), id), now);
58369
58555
  return value ? publicRecord(value) : null;
58370
58556
  }
58371
58557
  async function resolvePackageShare(store, id, now = /* @__PURE__ */ new Date()) {
58372
58558
  if (!PACKAGE_SHARE_ID_PATTERN2.test(id) || !store.getDoc) return null;
58373
- const value = live(parseStored(await store.getDoc(PACKAGE_SHARE_NAMESPACE, id), id), now);
58559
+ const value = live2(parseStored(await store.getDoc(PACKAGE_SHARE_NAMESPACE, id), id), now);
58374
58560
  if (!value) return null;
58375
58561
  const archive = await decodeArchive(value, id);
58376
58562
  return archive ? { share: publicRecord(value), archive } : null;
@@ -58728,8 +58914,8 @@ ${releaseId}`;
58728
58914
  if (/^\/v1\/app-config\/[^/]+$/.test(url.pathname)) return drop();
58729
58915
  let servable;
58730
58916
  try {
58731
- const live2 = await manifest(app);
58732
- const eligible = live2?.releaseId === pin || await isRingRelease(app, pin);
58917
+ const live3 = await manifest(app);
58918
+ const eligible = live3?.releaseId === pin || await isRingRelease(app, pin);
58733
58919
  const pinned = eligible ? await pinnedManifest(app, pin) : null;
58734
58920
  servable = pinned !== null;
58735
58921
  const screenId = /^\/v1\/screen\/([^/]+)$/.exec(url.pathname)?.[1];
@@ -59252,7 +59438,7 @@ ${releaseId}`;
59252
59438
  if (!m) return json4(404, { error: "app_not_found", app });
59253
59439
  }
59254
59440
  const mm = m;
59255
- const readDoc = (hash, live2) => pin ? hash ? pinnedBody(app, hash, live2) : Promise.resolve(null) : live2();
59441
+ const readDoc = (hash, live3) => pin ? hash ? pinnedBody(app, hash, live3) : Promise.resolve(null) : live3();
59256
59442
  const ringPinned = pin !== null && request.headers.get(RELEASE_SOURCE_HEADER) === "ring";
59257
59443
  const cfgBytes = ringPinned ? await store.getAppConfig(app) : await readDoc(mm.appConfigHash, () => store.getAppConfig(app));
59258
59444
  if (!cfgBytes) return json4(404, { error: "app_config_not_found", app });
@@ -59282,9 +59468,9 @@ ${releaseId}`;
59282
59468
  let homeFrom = mm;
59283
59469
  let readHome = readDoc;
59284
59470
  if (ringPinned && homeScreenId && !mm.screens[homeScreenId]) {
59285
- const live2 = await manifest(app);
59286
- if (live2?.screens[homeScreenId]) {
59287
- homeFrom = live2;
59471
+ const live3 = await manifest(app);
59472
+ if (live3?.screens[homeScreenId]) {
59473
+ homeFrom = live3;
59288
59474
  readHome = (_hash, liveSlot) => liveSlot();
59289
59475
  }
59290
59476
  }
@@ -59954,21 +60140,21 @@ var init_preview_assets_generated = __esm({
59954
60140
  "../../packages/serve/src/preview-assets.generated.ts"() {
59955
60141
  init_preview_assets_format();
59956
60142
  PREVIEW_ASSET_MANIFEST = [
59957
- { key: "assets/index-CKwdlTbT.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1127499, sha256: "24d1f9f9ee47c8d4ea8f88ebfca0b78f46d3e64d26b2dd202ae97cbdcf3ede2b" },
59958
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1127507, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
59959
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1132117, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
59960
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1620701, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
59961
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1711625, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
59962
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1802609, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
59963
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1893589, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
59964
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1984461, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
59965
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2075441, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
59966
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2184077, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
59967
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2293161, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
59968
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2402209, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
59969
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2509909, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
59970
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2598017, length: 4947, sha256: "1d32807684d4cf8de017b14f9b1c6faf05c08f04a8d5d19372d4122c0c66b0bf" },
59971
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2602964, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
60143
+ { key: "assets/index-C5pLAEVw.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1131202, sha256: "227bc4e092810f75d1b156bbef6e9409b36bd0f92370b33864ff3f309f6fe771" },
60144
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 1131210, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
60145
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 1135820, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
60146
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 1624404, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
60147
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1715328, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
60148
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1806312, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
60149
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1897292, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
60150
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1988164, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
60151
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 2079144, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
60152
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 2187780, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
60153
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 2296864, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
60154
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 2405912, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
60155
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 2513612, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
60156
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 2601720, length: 4947, sha256: "946631b440fc9601c829ef9cc7aa28a02a1ef6f0de48ac76f88cafdfcb04563c" },
60157
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 2606667, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
59972
60158
  ];
59973
60159
  }
59974
60160
  });
@@ -61680,14 +61866,14 @@ function assertSameAccount(planned, current) {
61680
61866
  `the plan was made with profile "${planned.profile}" (team ${planned.team}, key ${planned.fingerprint}) but this run resolved profile "${current.profile}" (team ${current.team}, key ${current.fingerprint}). Make a new plan with the account you mean.`
61681
61867
  );
61682
61868
  }
61683
- function driftOf(planned, live2) {
61869
+ function driftOf(planned, live3) {
61684
61870
  if (planned.decision === "conflict") return void 0;
61685
- if (live2.decision === "conflict") return `${live2.productId} now conflicts: ${live2.conflicts.join("; ")}`;
61686
- const unplanned = live2.ops.filter((op) => !planned.ops.some((p) => sameOp(p, op)));
61687
- return unplanned.length ? `${live2.productId} now needs ${unplanned.map(describeOp).join(", ")}, which the plan did not list` : void 0;
61871
+ if (live3.decision === "conflict") return `${live3.productId} now conflicts: ${live3.conflicts.join("; ")}`;
61872
+ const unplanned = live3.ops.filter((op) => !planned.ops.some((p) => sameOp(p, op)));
61873
+ return unplanned.length ? `${live3.productId} now needs ${unplanned.map(describeOp).join(", ")}, which the plan did not list` : void 0;
61688
61874
  }
61689
- function assertNoDrift(plan, live2) {
61690
- const drift = [...live2].map(([i, current]) => driftOf(plan.items[i], current)).filter((d) => d !== void 0);
61875
+ function assertNoDrift(plan, live3) {
61876
+ const drift = [...live3].map(([i, current]) => driftOf(plan.items[i], current)).filter((d) => d !== void 0);
61691
61877
  if (!drift.length) return;
61692
61878
  throw new IapProvisionError("drift", `App Store Connect changed since the plan was made \u2014 nothing was written:
61693
61879
  - ${drift.join("\n - ")}
@@ -61857,27 +62043,27 @@ async function knownUnmetFor(item, planned, context) {
61857
62043
  if (!planned.observed) return [];
61858
62044
  return metadataDiffs(item, planned.observed, planned.targetPrice ?? await context.pricing.targetAmount(item.price));
61859
62045
  }
61860
- async function applyItem(item, live2, context, manifest) {
62046
+ async function applyItem(item, live3, context, manifest) {
61861
62047
  const base = { target: manifest.target, item, readAt: context.now() };
61862
- if (live2.decision === "conflict") {
61863
- const unmet2 = await knownUnmetFor(item, live2, context);
61864
- return itemResult({ ...base, observed: live2.observed, outcome: "conflict", conflicts: live2.conflicts, unmet: unmet2 });
62048
+ if (live3.decision === "conflict") {
62049
+ const unmet2 = await knownUnmetFor(item, live3, context);
62050
+ return itemResult({ ...base, observed: live3.observed, outcome: "conflict", conflicts: live3.conflicts, unmet: unmet2 });
61865
62051
  }
61866
62052
  const run2 = {
61867
62053
  item,
61868
- resourceId: live2.observed?.resourceId,
61869
- versionId: live2.observed?.draftVersionId,
61870
- localizations: live2.observed?.draftVersionId ? live2.observed.localizations : []
62054
+ resourceId: live3.observed?.resourceId,
62055
+ versionId: live3.observed?.draftVersionId,
62056
+ localizations: live3.observed?.draftVersionId ? live3.observed.localizations : []
61871
62057
  };
61872
- const steps = await runOps(run2, live2.ops, context, manifest);
62058
+ const steps = await runOps(run2, live3.ops, context, manifest);
61873
62059
  const { observed, failure } = await readBack(run2, context, manifest);
61874
62060
  const unmet = failure ? [`could not read the product back: ${failure}`] : await unmetFor(item, observed, context);
61875
- const outcome = outcomeOf(live2.ops, steps, unmet);
62061
+ const outcome = outcomeOf(live3.ops, steps, unmet);
61876
62062
  return itemResult({ ...base, readAt: context.now(), observed, outcome, steps, unmet, appleResourceId: run2.resourceId });
61877
62063
  }
61878
- function deferredResult(item, live2, context, manifest) {
61879
- const steps = live2.ops.map((op) => stepFor(op, "notRun"));
61880
- return itemResult({ target: manifest.target, item, observed: live2.observed, outcome: "deferred", steps, requirements: [DEFERRED_REQUIREMENT], readAt: context.now() });
62064
+ function deferredResult(item, live3, context, manifest) {
62065
+ const steps = live3.ops.map((op) => stepFor(op, "notRun"));
62066
+ return itemResult({ target: manifest.target, item, observed: live3.observed, outcome: "deferred", steps, requirements: [DEFERRED_REQUIREMENT], readAt: context.now() });
61881
62067
  }
61882
62068
  function needsRefresh(planned) {
61883
62069
  return planned.decision !== "conflict" && planned.ops.length > 0;
@@ -61892,12 +62078,12 @@ async function applyIap(planDoc, applyContext) {
61892
62078
  const context = { ...applyContext, pricing: applyContext.pricing ?? new PriceGrid(applyContext.api) };
61893
62079
  const manifest = plan.manifest;
61894
62080
  const refresh = plan.items.flatMap((planned, i) => needsRefresh(planned) ? [i] : []);
61895
- const live2 = await planItemsAt(context, manifest, refresh);
61896
- assertNoDrift(plan, live2);
62081
+ const live3 = await planItemsAt(context, manifest, refresh);
62082
+ assertNoDrift(plan, live3);
61897
62083
  const items = [];
61898
62084
  let created = 0;
61899
62085
  for (const [i, item] of manifest.items.entries()) {
61900
- const itemPlan2 = live2.get(i);
62086
+ const itemPlan2 = live3.get(i);
61901
62087
  if (!itemPlan2) {
61902
62088
  items.push(await plannedResult(item, plan.items[i], plan, context, manifest));
61903
62089
  continue;
@@ -74038,13 +74224,13 @@ async function snapshotAndPublish(fetchImpl, token, msid, opts = {}) {
74038
74224
  timeoutMs: 45e3,
74039
74225
  body: { label: "WIX_CLI", useUniqueLabel: true }
74040
74226
  });
74041
- const live2 = production ? await veloCall(fetchImpl, "POST", SITE_PUBLISH_URL, { token, msid, timeoutMs: 45e3, body: {} }) : void 0;
74227
+ const live3 = production ? await veloCall(fetchImpl, "POST", SITE_PUBLISH_URL, { token, msid, timeoutMs: 45e3, body: {} }) : void 0;
74042
74228
  return {
74043
74229
  revision: revisionFrom(rev.json),
74044
74230
  codeAppId: codeAppIdFromRevision(rev.json),
74045
74231
  rev,
74046
74232
  rc,
74047
- live: live2
74233
+ live: live3
74048
74234
  };
74049
74235
  }
74050
74236
  function httpOk(r) {
@@ -80273,9 +80459,9 @@ himi v${cliVersion()} \u2014 run \`himi --version\`. If authoring commands fail
80273
80459
  io.error(JSON.stringify(liveFound));
80274
80460
  return 1;
80275
80461
  }
80276
- const live2 = liveFound.manifest;
80277
- if (live2 && live2.releaseId !== base.releaseId) {
80278
- regressions = regressionDiff2(base, live2, plan.touched);
80462
+ const live3 = liveFound.manifest;
80463
+ if (live3 && live3.releaseId !== base.releaseId) {
80464
+ regressions = regressionDiff2(base, live3, plan.touched);
80279
80465
  if (regressions.length > 0 && !opts.acceptRegressions) {
80280
80466
  io.error(JSON.stringify({
80281
80467
  ok: false,
@@ -80283,7 +80469,7 @@ himi v${cliVersion()} \u2014 run \`himi --version\`. If authoring commands fail
80283
80469
  error: "would_regress",
80284
80470
  app,
80285
80471
  base: { releaseId: base.releaseId, publishedAt: base.publishedAt ?? null },
80286
- live: { releaseId: live2.releaseId, publishedAt: live2.publishedAt ?? null },
80472
+ live: { releaseId: live3.releaseId, publishedAt: live3.publishedAt ?? null },
80287
80473
  message: `a branch does not merge. Activating a release derived from ${base.releaseId} reverts every item this patch does not move.`,
80288
80474
  wouldRegress: regressions,
80289
80475
  moves: plan.touched,
@@ -81964,9 +82150,9 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
81964
82150
  const scheme = str9(flags.scheme) === "dark" ? "dark" : "light";
81965
82151
  const wantPng = flags.png === true || typeof flags.png === "string";
81966
82152
  const hydrate = flags.static !== true;
81967
- const live2 = flags.live === true;
82153
+ const live3 = flags.live === true;
81968
82154
  const strict = flags.strict === true;
81969
- if (live2 && flags.static === true) {
82155
+ if (live3 && flags.static === true) {
81970
82156
  io.error(JSON.stringify({ error: "--static and --live are mutually exclusive: --static renders raw bindings, --live renders real Wix data" }));
81971
82157
  return 2;
81972
82158
  }
@@ -81974,8 +82160,8 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
81974
82160
  io.error(JSON.stringify({ error: `--mocks takes no value (got "${String(flags.mocks)}") \u2014 pass it bare` }));
81975
82161
  return 2;
81976
82162
  }
81977
- if (flags.mocks === true && (live2 || flags.static === true)) {
81978
- io.error(JSON.stringify({ error: `--mocks and ${live2 ? "--live" : "--static"} are mutually exclusive: --mocks loads the app's recorded data, ${live2 ? "--live real Wix data" : "--static no data at all"}` }));
82163
+ if (flags.mocks === true && (live3 || flags.static === true)) {
82164
+ io.error(JSON.stringify({ error: `--mocks and ${live3 ? "--live" : "--static"} are mutually exclusive: --mocks loads the app's recorded data, ${live3 ? "--live real Wix data" : "--static no data at all"}` }));
81979
82165
  return 2;
81980
82166
  }
81981
82167
  if (flags.mocks === true && flags["no-mocks"] === true) {
@@ -82054,7 +82240,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
82054
82240
  }
82055
82241
  let mocks;
82056
82242
  let mocksNote;
82057
- const mocksByDefault = flags.mocks !== true && flags["no-mocks"] !== true && !live2 && flags.static !== true && injectedState === void 0;
82243
+ const mocksByDefault = flags.mocks !== true && flags["no-mocks"] !== true && !live3 && flags.static !== true && injectedState === void 0;
82058
82244
  if (flags.mocks === true || mocksByDefault) {
82059
82245
  let rules = null;
82060
82246
  let bad2;
@@ -82077,7 +82263,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
82077
82263
  ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {},
82078
82264
  // The settled state is always kept (printed only under --dump-state): it is what says whether
82079
82265
  // the picture landed on the screen's content or on its error, loading or empty state.
82080
- collect: { lint: true, strict, render: { screenId, scheme, png: wantPng, hydrate, dumpState: true, ...live2 ? { live: true } : {}, ...injectedState ? { state: injectedState } : {}, ...injectedInput ? { input: injectedInput } : {}, ...renderWidth ? { width: renderWidth } : {}, ...flags.rtl === true ? { rtl: true } : {}, ...loadBudgetMs ? { loadBudgetMs } : {}, ...mocks ? { mocks: { rules: mocks.rules, cmsSeed: mocks.cmsSeed } } : {} } }
82266
+ collect: { lint: true, strict, render: { screenId, scheme, png: wantPng, hydrate, dumpState: true, ...live3 ? { live: true } : {}, ...injectedState ? { state: injectedState } : {}, ...injectedInput ? { input: injectedInput } : {}, ...renderWidth ? { width: renderWidth } : {}, ...flags.rtl === true ? { rtl: true } : {}, ...loadBudgetMs ? { loadBudgetMs } : {}, ...mocks ? { mocks: { rules: mocks.rules, cmsSeed: mocks.cmsSeed } } : {} } }
82081
82267
  });
82082
82268
  const r = (outcome.renders ?? [])[0];
82083
82269
  if (!r) {
@@ -82106,11 +82292,11 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
82106
82292
  screenId,
82107
82293
  scheme,
82108
82294
  renderable: r.renderable,
82109
- hydrated: live2 ? "live" : hydrate,
82110
- dataSource: renderDataSource({ live: live2, hydrate, liveCalls: r.liveCalls, liveReturned: r.liveReturned, mocked: !!r.mockCalls }),
82295
+ hydrated: live3 ? "live" : hydrate,
82296
+ dataSource: renderDataSource({ live: live3, hydrate, liveCalls: r.liveCalls, liveReturned: r.liveReturned, mocked: !!r.mockCalls }),
82111
82297
  // What --mocks loaded from, how many requests the load made, and the ones no layer held.
82112
82298
  ...r.mockCalls && mocks ? { mocks: { used: true, from: mocks.from, calls: r.mockCalls.length, ...r.mockUnserved?.length ? { unserved: r.mockUnserved } : {}, ...mocks.ignored ? { ignored: mocks.ignored } : {}, ...mocksByDefault ? { default: true, hint: "the app's recorded data loaded by default; --no-mocks renders the offline initial state, --live the real site" } : {} } } : mocksNote ? { mocks: mocksNote } : mocks ? { mocks: { used: false, reason: r.mockBootFailed ? "the screen's worker failed to boot against the recorded data, so its initial state was rendered" : "the screen has no worker bundle to load data into", ...mocks.ignored ? { ignored: mocks.ignored } : {} } } : {},
82113
- ...live2 ? {
82299
+ ...live3 ? {
82114
82300
  liveCalls: r.liveCalls?.length ?? 0,
82115
82301
  // Beside the attempt count, because the two coming apart IS the signal (#1883).
82116
82302
  liveReturned: r.liveReturned ?? 0,
@@ -82162,7 +82348,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
82162
82348
  if (pngFile && r.renderable) {
82163
82349
  const { recordShotState: recordShotState2, screenStateOf: screenStateOf2 } = await Promise.resolve().then(() => (init_screen_state(), screen_state_exports));
82164
82350
  const mocked = !!r.mockCalls;
82165
- landed = screenStateOf2(r.serviceState, r.html, { initial: !live2 && !mocked, offline: mocked && (r.mockUnserved?.length ?? 0) > 0 });
82351
+ landed = screenStateOf2(r.serviceState, r.html, { initial: !live3 && !mocked, offline: mocked && (r.mockUnserved?.length ?? 0) > 0 });
82166
82352
  recordShotState2(dir, screenId, pngFile, landed);
82167
82353
  }
82168
82354
  const autoSkip = process.env.HIMI_AUTO_RENDER === "validate" && landed !== null && (landed.state === "loading" || landed.state === "empty" || landed.state === "error" && landed.offline === true) ? `the picture shows the home screen's ${landed.state} state${landed.initial || landed.offline ? " (an offline preview: the site's data is not loaded offline)" : ""}, so no postcard was journaled from it` : void 0;
@@ -83557,9 +83743,9 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
83557
83743
  await announce(running);
83558
83744
  if (watchKit && bus) {
83559
83745
  const { buildContentBundles: buildContentBundles2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
83560
- const live2 = join74(running.releaseRoot, running.app);
83746
+ const live3 = join74(running.releaseRoot, running.app);
83561
83747
  const manifestOf = (tree) => JSON.parse(readFileSync90(join74(tree, "release-manifest.json"), "utf8"));
83562
- let current = manifestOf(live2);
83748
+ let current = manifestOf(live3);
83563
83749
  const failed2 = async (message) => {
83564
83750
  if (stopping) return;
83565
83751
  bus.publish("build.failed", { message });
@@ -83589,13 +83775,13 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
83589
83775
  const fresh = manifestOf(join74(next, running.app));
83590
83776
  const diff = watchKit.diffReleases(current, fresh);
83591
83777
  const { describeChanges: describeChanges2, headline: headline2 } = await Promise.resolve().then(() => (init_build_changes(), build_changes_exports));
83592
- const changes = describeChanges2(live2, join74(next, running.app), diff);
83593
- const retired = `${live2}.retired-${Date.now()}`;
83594
- renameSync9(live2, retired);
83778
+ const changes = describeChanges2(live3, join74(next, running.app), diff);
83779
+ const retired = `${live3}.retired-${Date.now()}`;
83780
+ renameSync9(live3, retired);
83595
83781
  try {
83596
- renameSync9(join74(next, running.app), live2);
83782
+ renameSync9(join74(next, running.app), live3);
83597
83783
  } catch {
83598
- cpSync3(join74(next, running.app), live2, { recursive: true });
83784
+ cpSync3(join74(next, running.app), live3, { recursive: true });
83599
83785
  }
83600
83786
  rmSync20(retired, { recursive: true, force: true });
83601
83787
  current = fresh;
Binary file
@@ -635,13 +635,6 @@
635
635
  "encoding": "double",
636
636
  "note": "Range mode additionally sends `upperValue`.",
637
637
  "divergences": [
638
- {
639
- "arms": [
640
- "web"
641
- ],
642
- "kind": "no-payload",
643
- "actual": "dispatches the bare action — the renderer's own code — with no injected value."
644
- },
645
638
  {
646
639
  "arms": [
647
640
  "rn"
@@ -653,7 +646,8 @@
653
646
  {
654
647
  "arms": [
655
648
  "ios",
656
- "android"
649
+ "android",
650
+ "web"
657
651
  ],
658
652
  "kind": "additive",
659
653
  "actual": "range mode additionally sends `upperValue` beside `value`.",
@@ -1213,11 +1213,9 @@ export interface SliderProps {
1213
1213
 
1214
1214
  > `onChange` — Range mode additionally sends `upperValue`.
1215
1215
 
1216
- > ⚠️ **`onChange` on web — DIVERGES:** dispatches the bare action — the renderer's own code — with no injected value.
1217
-
1218
1216
  > ⚠️ **`onChange` on rn — DIVERGES:** renders a static visual and never dispatches at all. RN Slider is unimplemented rather than divergent; listed so the gap is counted, not hidden.
1219
1217
 
1220
- > ⚠️ **`onChange` on ios + android — ALSO sends:** range mode additionally sends `upperValue` beside `value`. Additive, and the contract's Slider note already describes it. Same problem as groupId: allowed by a hard-coded list rather than declared.
1218
+ > ⚠️ **`onChange` on ios + android + web — ALSO sends:** range mode additionally sends `upperValue` beside `value`. Additive, and the contract's Slider note already describes it. Same problem as groupId: allowed by a hard-coded list rather than declared.
1221
1219
 
1222
1220
  #### SelectionControl
1223
1221
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1160.0",
3
+ "version": "0.1161.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -67,5 +67,5 @@
67
67
  "artifactId": "himalaya-cli"
68
68
  }
69
69
  },
70
- "falconPackageHash": "9d2d655d517dce16f33030c8f90061b893a58443aa1299c0ae64b43d"
70
+ "falconPackageHash": "cc720c71144f4be2d598eb2d2705a9e2ce5cc9345d2a65d43bb8f055"
71
71
  }