@wix/himalaya-cli 0.1617.0 → 0.1619.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.
Files changed (29) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/app-config.d.ts +13 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +15 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +30 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/index.d.ts +2 -0
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/one-app-section.d.ts +39 -0
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/one-app-visibility.d.ts +22 -0
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/telemetry/wix-bi/src/oneapp.d.ts +3 -2
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +1 -0
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +151 -24
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +8 -0
  11. package/dist/cli.mjs +2171 -407
  12. package/dist/preview-assets.generated.bin +0 -0
  13. package/guides/android-ux.md +66 -29
  14. package/guides/component-reference.json +15 -3
  15. package/guides/component-reference.md +28 -3
  16. package/guides/designing-himi-screens.md +46 -11
  17. package/guides/getting-started.md +2 -1
  18. package/guides/hhp.md +3 -1
  19. package/guides/himi-json-output.md +11 -1
  20. package/guides/himi-skill.md +2 -1
  21. package/guides/index.json +1 -1
  22. package/guides/ios-ux.md +110 -31
  23. package/guides/mobile-ux.md +22 -5
  24. package/guides/one-app-section-mappings.md +32 -0
  25. package/guides/one-app-to-himi-app.md +133 -9
  26. package/guides/skill.md +25 -1
  27. package/guides/tier-5-add-a-screen.md +2 -0
  28. package/package.json +2 -2
  29. package/templates/brandy/dev/index.ts +4 -3
package/dist/cli.mjs CHANGED
@@ -38,8 +38,8 @@ var init_define_HHP_CATALOG = __esm({
38
38
  "<define:__HHP_CATALOG__>"() {
39
39
  define_HHP_CATALOG_default = {
40
40
  encoding: "gzip-base64",
41
- sha256: "17e37c4c07b4df780bc3dba3077c3475dceb8dd7f9661a16d4796ae1cb625415",
42
- data: "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"
41
+ sha256: "8363f82b7a56eabf9ee474597ce546c25d42a5f86cf0e7c2e6255fea56031161",
42
+ data: "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"
43
43
  };
44
44
  }
45
45
  });
@@ -1971,10 +1971,15 @@ function scaffoldContentPackage(name, parentDir, template) {
1971
1971
 
1972
1972
  console.log("[${name}] home worker booted");
1973
1973
 
1974
+ // The payload is typed on purpose: left untyped, \`p\` infers as \`never\` and
1975
+ // \`himi validate --strict\` rejects every read of \`p.value\` / \`p.selectedId\`.
1976
+ type Payload = { value?: unknown; selectedId?: string } | undefined;
1977
+
1974
1978
  export default defineService("home", {
1975
- state: { count: 0, title: "Hello from ${name}" },
1979
+ state: { notifications: true, appearance: "auto", title: "Hello from ${name}" },
1976
1980
  actions: {
1977
- increment: (s) => ({ ...s, count: s.count + 1 }),
1981
+ setNotifications: (s, p: Payload) => ({ ...s, notifications: p?.value === undefined ? !s.notifications : p.value === true || p.value === "true" }),
1982
+ setAppearance: (s, p: Payload) => ({ ...s, appearance: String(p?.selectedId ?? "auto") }),
1978
1983
  },
1979
1984
  });
1980
1985
  `
@@ -2093,14 +2098,52 @@ function home() {
2093
2098
  package: "himalaya",
2094
2099
  type: "VStack",
2095
2100
  props: {
2096
- spacing: 16,
2097
- alignment: "center",
2101
+ spacing: 24,
2102
+ alignment: "leading",
2098
2103
  children: [
2099
- { id: "count", body: { package: "himalaya", type: "Text", props: { text: "$service:home.count", style: "title1" } } },
2100
- { id: "inc", body: { package: "himalaya", type: "Button", props: { title: "Increment", style: "primary", action: { actionId: "tier5.home.increment" } } } },
2104
+ {
2105
+ id: "preferences",
2106
+ body: {
2107
+ package: "himalaya",
2108
+ type: "Section",
2109
+ props: {
2110
+ inset: true,
2111
+ header: "Preferences",
2112
+ footer: "$service:home.title",
2113
+ children: [
2114
+ {
2115
+ id: "notifications_toggle",
2116
+ body: {
2117
+ package: "himalaya",
2118
+ type: "Toggle",
2119
+ props: { label: "Notifications", value: true, valuePath: "$service:home.notifications", onChange: { actionId: "tier5.home.setNotifications" } },
2120
+ },
2121
+ },
2122
+ {
2123
+ id: "appearance",
2124
+ body: {
2125
+ package: "himalaya",
2126
+ type: "SegmentedControl",
2127
+ props: {
2128
+ selectedId: "$service:home.appearance",
2129
+ onChange: { actionId: "tier5.home.setAppearance" },
2130
+ options: [
2131
+ { id: "light", label: "Light" },
2132
+ { id: "dark", label: "Dark" },
2133
+ { id: "auto", label: "Automatic" },
2134
+ ],
2135
+ },
2136
+ },
2137
+ },
2138
+ ],
2139
+ },
2140
+ },
2141
+ },
2101
2142
  ],
2102
2143
  },
2103
2144
  },
2145
+ // The screen gutter: without it every inset section touches the device edge.
2146
+ modifiers: { padding: { leading: 16, trailing: 16, top: 16, bottom: 40 }, background: { token: "surfacePrimary" } },
2104
2147
  },
2105
2148
  };
2106
2149
  }
@@ -2135,7 +2178,7 @@ Authored off-repo; shipped OTA via the remote dev loop.
2135
2178
 
2136
2179
  - \`tier5-src/home/index.ts\` \u2014 the **worker** (\`defineService\`: state + actions).
2137
2180
  - \`config.ts\` \u2014 the app config (\`defineApp\`).
2138
- - \`dev/index.ts\` \u2014 the loadable **dev module**: one screen bound to the worker + a seed.
2181
+ - \`dev/index.ts\` \u2014 the loadable **dev module**: a settings screen (inset section, the switch label is the row, no repeated title) bound to the worker + a seed.
2139
2182
  - \`tokens.json\` \u2014 design tokens.
2140
2183
 
2141
2184
  The worker's \`@himalaya/state\` SDK alias resolves during \`himi build\` to the \`@wix/himalaya\`
@@ -2579,9 +2622,9 @@ function validateCmsConfig(cms, app, opts = {}) {
2579
2622
  message: spec.readRole === "SITE_MEMBER_AUTHOR" ? `readRole is SITE_MEMBER_AUTHOR (row-level: a member reads only rows they authored) but the app boots as a visitor, so this collection renders empty for visitors \u2014 who author nothing. Gate the screen behind a login, or declare \`memberGated\`. Do NOT widen the read: "ANYONE"/"SITE_MEMBER" are collection-wide and would expose every member's rows.` : `readRole is SITE_MEMBER but the app boots as a visitor, so this collection renders empty for visitors. Use readRole "ANYONE", or gate the screen behind a login.`
2580
2623
  });
2581
2624
  }
2582
- const memberOnly = ["SITE_MEMBER", "SITE_MEMBER_AUTHOR"];
2625
+ const memberOnly2 = ["SITE_MEMBER", "SITE_MEMBER_AUTHOR"];
2583
2626
  const effective = permissionsFor(spec);
2584
- const gatedOps = ["insert", "update"].filter((op) => memberOnly.includes(effective[op]));
2627
+ const gatedOps = ["insert", "update"].filter((op) => memberOnly2.includes(effective[op]));
2585
2628
  if (opts.bootAsVisitor && !cms.memberGated && !opts.hasSignInSurface && gatedOps.length > 0) {
2586
2629
  const named = gatedOps.map((op) => `${op} is ${effective[op]}`).join(" and ");
2587
2630
  const remedy = gatedOps.map((op) => `${op}Role "ANYONE"`).join(" + ");
@@ -5865,15 +5908,15 @@ function analyzeController(source, file2, profile, diagnostics) {
5865
5908
  error(declaration ?? sf2, "Default-export defineController({ initialState, handlers }).");
5866
5909
  return;
5867
5910
  }
5868
- const object14 = declaration.expression.arguments[0];
5869
- if (!object14 || !ts2.isObjectLiteralExpression(object14)) {
5911
+ const object15 = declaration.expression.arguments[0];
5912
+ if (!object15 || !ts2.isObjectLiteralExpression(object15)) {
5870
5913
  error(declaration, "Controller definition must be an object literal.");
5871
5914
  return;
5872
5915
  }
5873
- const props2 = new Map(object14.properties.map((p2) => [p2.name?.getText(sf2).replace(/^["']|["']$/g, ""), p2]));
5916
+ const props2 = new Map(object15.properties.map((p2) => [p2.name?.getText(sf2).replace(/^["']|["']$/g, ""), p2]));
5874
5917
  const state = props2.get("initialState"), handlers = props2.get("handlers");
5875
5918
  if (!state || !ts2.isPropertyAssignment(state) || !handlers || !ts2.isPropertyAssignment(handlers) || !ts2.isObjectLiteralExpression(handlers.initializer)) {
5876
- error(object14, "initialState and handlers must be object literals.");
5919
+ error(object15, "initialState and handlers must be object literals.");
5877
5920
  return;
5878
5921
  }
5879
5922
  function literal(n2) {
@@ -12724,9 +12767,9 @@ function manualPaginationIssues(descriptor) {
12724
12767
  while (pending.length) {
12725
12768
  const { value: value2, path: path2 } = pending.pop();
12726
12769
  if (!value2 || typeof value2 !== "object") continue;
12727
- const object14 = value2;
12728
- if (object14.body?.props) nodes2.push({ path: path2, type: object14.body.type, props: object14.body.props });
12729
- for (const [key3, child] of Object.entries(object14)) {
12770
+ const object15 = value2;
12771
+ if (object15.body?.props) nodes2.push({ path: path2, type: object15.body.type, props: object15.body.props });
12772
+ for (const [key3, child] of Object.entries(object15)) {
12730
12773
  if (key3 === "args" || key3 === "input") continue;
12731
12774
  if (child && typeof child === "object") pending.push({ value: child, path: path2 ? `${path2}.${key3}` : key3 });
12732
12775
  }
@@ -14211,6 +14254,7 @@ var init_validator = __esm({
14211
14254
  "himalaya.Spacer",
14212
14255
  "himalaya.EmptyState",
14213
14256
  "himalaya.ErrorState",
14257
+ "himalaya.QrCode",
14214
14258
  "himalaya.Text",
14215
14259
  "himalaya.Image",
14216
14260
  "himalaya.Icon",
@@ -14588,6 +14632,370 @@ var init_declared_navigation_lint = __esm({
14588
14632
  }
14589
14633
  });
14590
14634
 
14635
+ // ../../core/ts/src/qr-code.ts
14636
+ function qrErrorCorrection(raw) {
14637
+ const s2 = typeof raw === "string" ? raw.trim().toUpperCase() : "";
14638
+ return s2 === "L" || s2 === "M" || s2 === "Q" || s2 === "H" ? s2 : QR_DEFAULT_ERROR_CORRECTION;
14639
+ }
14640
+ function rawDataModules(ver) {
14641
+ let result = (16 * ver + 128) * ver + 64;
14642
+ if (ver >= 2) {
14643
+ const numAlign = Math.floor(ver / 7) + 2;
14644
+ result -= (25 * numAlign - 10) * numAlign - 55;
14645
+ if (ver >= 7) result -= 36;
14646
+ }
14647
+ return result;
14648
+ }
14649
+ function dataCodewords(ver, ecl) {
14650
+ return Math.floor(rawDataModules(ver) / 8) - ECC_CODEWORDS_PER_BLOCK[ecl][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl][ver];
14651
+ }
14652
+ function qrByteCapacity(version5, level = QR_DEFAULT_ERROR_CORRECTION) {
14653
+ const lenBits = version5 < 10 ? 8 : 16;
14654
+ return Math.floor((dataCodewords(version5, ECL_INDEX[level]) * 8 - 4 - lenBits) / 8);
14655
+ }
14656
+ function qrPayloadBytes(text13) {
14657
+ return new TextEncoder().encode(text13).length;
14658
+ }
14659
+ function qrFitVersion(byteLength, level = QR_DEFAULT_ERROR_CORRECTION) {
14660
+ for (let v2 = QR_MIN_VERSION; v2 <= QR_MAX_VERSION; v2++) if (qrByteCapacity(v2, level) >= byteLength) return v2;
14661
+ return void 0;
14662
+ }
14663
+ function qrFits(text13, level = QR_DEFAULT_ERROR_CORRECTION) {
14664
+ return qrFitVersion(qrPayloadBytes(text13), level) !== void 0;
14665
+ }
14666
+ function gfMul(x2, y2) {
14667
+ let z5 = 0;
14668
+ for (let i2 = 7; i2 >= 0; i2--) {
14669
+ z5 = z5 << 1 ^ (z5 >>> 7) * 285;
14670
+ z5 ^= (y2 >>> i2 & 1) * x2;
14671
+ }
14672
+ return z5 & 255;
14673
+ }
14674
+ function rsDivisor(degree) {
14675
+ const result = new Array(degree).fill(0);
14676
+ result[degree - 1] = 1;
14677
+ let root = 1;
14678
+ for (let i2 = 0; i2 < degree; i2++) {
14679
+ for (let j2 = 0; j2 < degree; j2++) {
14680
+ result[j2] = gfMul(result[j2], root);
14681
+ if (j2 + 1 < degree) result[j2] ^= result[j2 + 1];
14682
+ }
14683
+ root = gfMul(root, 2);
14684
+ }
14685
+ return result;
14686
+ }
14687
+ function rsRemainder(data, divisor) {
14688
+ const result = new Array(divisor.length).fill(0);
14689
+ for (const b2 of data) {
14690
+ const factor = b2 ^ result.shift();
14691
+ result.push(0);
14692
+ for (let i2 = 0; i2 < divisor.length; i2++) result[i2] ^= gfMul(divisor[i2], factor);
14693
+ }
14694
+ return result;
14695
+ }
14696
+ function encodeQrCode(text13, level = QR_DEFAULT_ERROR_CORRECTION) {
14697
+ const ecl = ECL_INDEX[level];
14698
+ const bytes2 = [...new TextEncoder().encode(text13)];
14699
+ const version5 = qrFitVersion(bytes2.length, level);
14700
+ if (version5 === void 0) throw new QrCapacityError(bytes2.length, level);
14701
+ const bits = [];
14702
+ const push = (val, len) => {
14703
+ for (let i3 = len - 1; i3 >= 0; i3--) bits.push(val >>> i3 & 1);
14704
+ };
14705
+ push(4, 4);
14706
+ push(bytes2.length, version5 < 10 ? 8 : 16);
14707
+ for (const b2 of bytes2) push(b2, 8);
14708
+ const capacityBits = dataCodewords(version5, ecl) * 8;
14709
+ push(0, Math.min(4, capacityBits - bits.length));
14710
+ push(0, (8 - bits.length % 8) % 8);
14711
+ for (let pad3 = 236; bits.length < capacityBits; pad3 ^= 236 ^ 17) push(pad3, 8);
14712
+ const data = [];
14713
+ for (let i3 = 0; i3 < bits.length; i3 += 8) {
14714
+ let byte2 = 0;
14715
+ for (let j2 = 0; j2 < 8; j2++) byte2 = byte2 << 1 | bits[i3 + j2];
14716
+ data.push(byte2);
14717
+ }
14718
+ const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl][version5];
14719
+ const blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl][version5];
14720
+ const rawCodewords = Math.floor(rawDataModules(version5) / 8);
14721
+ const numShortBlocks = numBlocks - rawCodewords % numBlocks;
14722
+ const shortBlockLen = Math.floor(rawCodewords / numBlocks);
14723
+ const divisor = rsDivisor(blockEccLen);
14724
+ const blocks = [];
14725
+ for (let i3 = 0, k2 = 0; i3 < numBlocks; i3++) {
14726
+ const dat = data.slice(k2, k2 + shortBlockLen - blockEccLen + (i3 < numShortBlocks ? 0 : 1));
14727
+ k2 += dat.length;
14728
+ const ecc = rsRemainder(dat, divisor);
14729
+ if (i3 < numShortBlocks) dat.push(0);
14730
+ blocks.push(dat.concat(ecc));
14731
+ }
14732
+ const codewords = [];
14733
+ for (let i3 = 0; i3 < blocks[0].length; i3++) {
14734
+ blocks.forEach((block, j2) => {
14735
+ if (i3 !== shortBlockLen - blockEccLen || j2 >= numShortBlocks) codewords.push(block[i3]);
14736
+ });
14737
+ }
14738
+ const size = version5 * 4 + 17;
14739
+ const modules = Array.from({ length: size }, () => new Array(size).fill(false));
14740
+ const isFunction = Array.from({ length: size }, () => new Array(size).fill(false));
14741
+ const setFn = (x2, y2, dark) => {
14742
+ modules[y2][x2] = dark;
14743
+ isFunction[y2][x2] = true;
14744
+ };
14745
+ for (let i3 = 0; i3 < size; i3++) {
14746
+ setFn(6, i3, i3 % 2 === 0);
14747
+ setFn(i3, 6, i3 % 2 === 0);
14748
+ }
14749
+ const finder = (cx, cy) => {
14750
+ for (let dy = -4; dy <= 4; dy++)
14751
+ for (let dx = -4; dx <= 4; dx++) {
14752
+ const dist = Math.max(Math.abs(dx), Math.abs(dy));
14753
+ const x2 = cx + dx, y2 = cy + dy;
14754
+ if (x2 >= 0 && x2 < size && y2 >= 0 && y2 < size) setFn(x2, y2, dist !== 2 && dist !== 4);
14755
+ }
14756
+ };
14757
+ finder(3, 3);
14758
+ finder(size - 4, 3);
14759
+ finder(3, size - 4);
14760
+ const align = alignmentPositions(version5);
14761
+ const numAlign = align.length;
14762
+ for (let i3 = 0; i3 < numAlign; i3++)
14763
+ for (let j2 = 0; j2 < numAlign; j2++) {
14764
+ if (i3 === 0 && j2 === 0 || i3 === 0 && j2 === numAlign - 1 || i3 === numAlign - 1 && j2 === 0) continue;
14765
+ for (let dy = -2; dy <= 2; dy++)
14766
+ for (let dx = -2; dx <= 2; dx++) setFn(align[i3] + dx, align[j2] + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);
14767
+ }
14768
+ drawFormat(0, ECL_FORMAT_BITS[ecl], size, setFn);
14769
+ drawVersion(version5, size, setFn);
14770
+ let i2 = 0;
14771
+ for (let right = size - 1; right >= 1; right -= 2) {
14772
+ if (right === 6) right = 5;
14773
+ for (let vert = 0; vert < size; vert++)
14774
+ for (let j2 = 0; j2 < 2; j2++) {
14775
+ const x2 = right - j2;
14776
+ const upward = (right + 1 & 2) === 0;
14777
+ const y2 = upward ? size - 1 - vert : vert;
14778
+ if (!isFunction[y2][x2] && i2 < codewords.length * 8) {
14779
+ modules[y2][x2] = (codewords[i2 >>> 3] >>> 7 - (i2 & 7) & 1) === 1;
14780
+ i2++;
14781
+ }
14782
+ }
14783
+ }
14784
+ let bestMask = 0, bestPenalty = Infinity, best = modules;
14785
+ for (let mask = 0; mask < 8; mask++) {
14786
+ const cand = modules.map((row2) => row2.slice());
14787
+ applyMask(cand, isFunction, mask, size);
14788
+ drawFormat(mask, ECL_FORMAT_BITS[ecl], size, (x2, y2, dark) => {
14789
+ cand[y2][x2] = dark;
14790
+ });
14791
+ const p2 = penaltyScore(cand, size);
14792
+ if (p2 < bestPenalty) {
14793
+ bestPenalty = p2;
14794
+ bestMask = mask;
14795
+ best = cand;
14796
+ }
14797
+ }
14798
+ return { size, version: version5, level, mask: bestMask, modules: best };
14799
+ }
14800
+ function alignmentPositions(ver) {
14801
+ if (ver === 1) return [];
14802
+ const numAlign = Math.floor(ver / 7) + 2;
14803
+ const step = ver === 32 ? 26 : Math.ceil((ver * 4 + 4) / (numAlign * 2 - 2)) * 2;
14804
+ const result = [6];
14805
+ for (let pos = ver * 4 + 10; result.length < numAlign; pos -= step) result.splice(1, 0, pos);
14806
+ return result;
14807
+ }
14808
+ function drawFormat(mask, eclBits, size, set2) {
14809
+ const data = eclBits << 3 | mask;
14810
+ let rem = data;
14811
+ for (let i2 = 0; i2 < 10; i2++) rem = rem << 1 ^ (rem >>> 9) * 1335;
14812
+ const bits = (data << 10 | rem) ^ 21522;
14813
+ const bit = (i2) => (bits >>> i2 & 1) !== 0;
14814
+ for (let i2 = 0; i2 <= 5; i2++) set2(8, i2, bit(i2));
14815
+ set2(8, 7, bit(6));
14816
+ set2(8, 8, bit(7));
14817
+ set2(7, 8, bit(8));
14818
+ for (let i2 = 9; i2 < 15; i2++) set2(14 - i2, 8, bit(i2));
14819
+ for (let i2 = 0; i2 < 8; i2++) set2(size - 1 - i2, 8, bit(i2));
14820
+ for (let i2 = 8; i2 < 15; i2++) set2(8, size - 15 + i2, bit(i2));
14821
+ set2(8, size - 8, true);
14822
+ }
14823
+ function drawVersion(ver, size, set2) {
14824
+ if (ver < 7) return;
14825
+ let rem = ver;
14826
+ for (let i2 = 0; i2 < 12; i2++) rem = rem << 1 ^ (rem >>> 11) * 7973;
14827
+ const bits = ver << 12 | rem;
14828
+ for (let i2 = 0; i2 < 18; i2++) {
14829
+ const dark = (bits >>> i2 & 1) !== 0;
14830
+ const a2 = size - 11 + i2 % 3, b2 = Math.floor(i2 / 3);
14831
+ set2(a2, b2, dark);
14832
+ set2(b2, a2, dark);
14833
+ }
14834
+ }
14835
+ function applyMask(m2, fn2, mask, size) {
14836
+ for (let y2 = 0; y2 < size; y2++)
14837
+ for (let x2 = 0; x2 < size; x2++) {
14838
+ let invert;
14839
+ switch (mask) {
14840
+ case 0:
14841
+ invert = (x2 + y2) % 2 === 0;
14842
+ break;
14843
+ case 1:
14844
+ invert = y2 % 2 === 0;
14845
+ break;
14846
+ case 2:
14847
+ invert = x2 % 3 === 0;
14848
+ break;
14849
+ case 3:
14850
+ invert = (x2 + y2) % 3 === 0;
14851
+ break;
14852
+ case 4:
14853
+ invert = (Math.floor(x2 / 3) + Math.floor(y2 / 2)) % 2 === 0;
14854
+ break;
14855
+ case 5:
14856
+ invert = x2 * y2 % 2 + x2 * y2 % 3 === 0;
14857
+ break;
14858
+ case 6:
14859
+ invert = (x2 * y2 % 2 + x2 * y2 % 3) % 2 === 0;
14860
+ break;
14861
+ default:
14862
+ invert = ((x2 + y2) % 2 + x2 * y2 % 3) % 2 === 0;
14863
+ break;
14864
+ }
14865
+ if (!fn2[y2][x2] && invert) m2[y2][x2] = !m2[y2][x2];
14866
+ }
14867
+ }
14868
+ function penaltyScore(m2, size) {
14869
+ let result = 0;
14870
+ const line = (get) => {
14871
+ for (let a2 = 0; a2 < size; a2++) {
14872
+ let runColor = false, runLen = 0;
14873
+ const history = [0, 0, 0, 0, 0, 0, 0];
14874
+ for (let b2 = 0; b2 < size; b2++) {
14875
+ if (get(a2, b2) === runColor) {
14876
+ runLen++;
14877
+ if (runLen === 5) result += N1;
14878
+ else if (runLen > 5) result++;
14879
+ } else {
14880
+ addHistory(runLen, history, size);
14881
+ if (!runColor) result += countPatterns(history) * N3;
14882
+ runColor = get(a2, b2);
14883
+ runLen = 1;
14884
+ }
14885
+ }
14886
+ result += terminateAndCount(runColor, runLen, history, size) * N3;
14887
+ }
14888
+ };
14889
+ line((y2, x2) => m2[y2][x2]);
14890
+ line((x2, y2) => m2[y2][x2]);
14891
+ for (let y2 = 0; y2 < size - 1; y2++)
14892
+ for (let x2 = 0; x2 < size - 1; x2++) {
14893
+ const c2 = m2[y2][x2];
14894
+ if (c2 === m2[y2][x2 + 1] && c2 === m2[y2 + 1][x2] && c2 === m2[y2 + 1][x2 + 1]) result += N2;
14895
+ }
14896
+ let dark = 0;
14897
+ for (const row2 of m2) for (const c2 of row2) if (c2) dark++;
14898
+ const total = size * size;
14899
+ const k2 = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;
14900
+ result += k2 * N4;
14901
+ return result;
14902
+ }
14903
+ function addHistory(runLen, history, size) {
14904
+ if (history[0] === 0) runLen += size;
14905
+ history.pop();
14906
+ history.unshift(runLen);
14907
+ }
14908
+ function countPatterns(h2) {
14909
+ const n2 = h2[1];
14910
+ const core2 = n2 > 0 && h2[2] === n2 && h2[3] === n2 * 3 && h2[4] === n2 && h2[5] === n2;
14911
+ return (core2 && h2[0] >= n2 * 4 && h2[6] >= n2 ? 1 : 0) + (core2 && h2[6] >= n2 * 4 && h2[0] >= n2 ? 1 : 0);
14912
+ }
14913
+ function terminateAndCount(runColor, runLen, history, size) {
14914
+ if (runColor) {
14915
+ addHistory(runLen, history, size);
14916
+ runLen = 0;
14917
+ }
14918
+ runLen += size;
14919
+ addHistory(runLen, history, size);
14920
+ return countPatterns(history);
14921
+ }
14922
+ function qrRelativeLuminance(hex2) {
14923
+ const m2 = /^#?([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(hex2.trim());
14924
+ if (!m2) return void 0;
14925
+ let h2 = m2[1];
14926
+ if (h2.length === 3) h2 = h2.split("").map((c2) => c2 + c2).join("");
14927
+ const ch2 = (i2) => {
14928
+ const c2 = parseInt(h2.slice(i2, i2 + 2), 16) / 255;
14929
+ return c2 <= 0.03928 ? c2 / 12.92 : Math.pow((c2 + 0.055) / 1.055, 2.4);
14930
+ };
14931
+ return 0.2126 * ch2(0) + 0.7152 * ch2(2) + 0.0722 * ch2(4);
14932
+ }
14933
+ function qrIsOpaque(hex2) {
14934
+ const h2 = hex2.trim().replace(/^#/, "");
14935
+ return h2.length !== 8 || h2.slice(6).toLowerCase() === "ff";
14936
+ }
14937
+ function qrContrastRatio(a2, b2) {
14938
+ const la2 = qrRelativeLuminance(a2), lb = qrRelativeLuminance(b2);
14939
+ if (la2 === void 0 || lb === void 0) return void 0;
14940
+ return (Math.max(la2, lb) + 0.05) / (Math.min(la2, lb) + 0.05);
14941
+ }
14942
+ function resolveQrColors(opts) {
14943
+ if (opts.dark && !(opts.colorGiven && opts.backgroundGiven)) {
14944
+ return { color: QR_FALLBACK_COLOR, background: QR_FALLBACK_BACKGROUND, fellBack: true };
14945
+ }
14946
+ const color = opts.color, background = opts.background;
14947
+ if (color && background && qrIsOpaque(color) && qrIsOpaque(background)) {
14948
+ const ratio = qrContrastRatio(color, background);
14949
+ const lc2 = qrRelativeLuminance(color), lb = qrRelativeLuminance(background);
14950
+ if (ratio !== void 0 && ratio >= QR_MIN_CONTRAST && lc2 < lb) return { color, background, fellBack: false };
14951
+ }
14952
+ return { color: QR_FALLBACK_COLOR, background: QR_FALLBACK_BACKGROUND, fellBack: true };
14953
+ }
14954
+ var QR_ERROR_CORRECTION_LEVELS, QR_DEFAULT_ERROR_CORRECTION, QR_MIN_VERSION, QR_MAX_VERSION, ECL_INDEX, ECL_FORMAT_BITS, ECC_CODEWORDS_PER_BLOCK, NUM_ERROR_CORRECTION_BLOCKS, QrCapacityError, N1, N2, N3, N4, QR_MIN_CONTRAST, QR_DEFAULT_COLOR_TOKEN, QR_DEFAULT_BACKGROUND_TOKEN, QR_DEFAULT_SIZE, QR_DEFAULT_QUIET_ZONE, QR_DEFAULT_ACCESSIBILITY_LABEL, QR_FALLBACK_COLOR, QR_FALLBACK_BACKGROUND;
14955
+ var init_qr_code = __esm({
14956
+ "../../core/ts/src/qr-code.ts"() {
14957
+ init_define_HHP_CATALOG();
14958
+ QR_ERROR_CORRECTION_LEVELS = ["L", "M", "Q", "H"];
14959
+ QR_DEFAULT_ERROR_CORRECTION = "M";
14960
+ QR_MIN_VERSION = 1;
14961
+ QR_MAX_VERSION = 40;
14962
+ ECL_INDEX = { L: 0, M: 1, Q: 2, H: 3 };
14963
+ ECL_FORMAT_BITS = [1, 0, 3, 2];
14964
+ ECC_CODEWORDS_PER_BLOCK = [
14965
+ [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
14966
+ [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
14967
+ [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
14968
+ [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
14969
+ ];
14970
+ NUM_ERROR_CORRECTION_BLOCKS = [
14971
+ [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
14972
+ [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
14973
+ [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
14974
+ [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]
14975
+ ];
14976
+ QrCapacityError = class extends RangeError {
14977
+ constructor(bytes2, level) {
14978
+ super(`QR payload too long: ${bytes2} bytes exceeds ${qrByteCapacity(QR_MAX_VERSION, level)} (version 40, level ${level})`);
14979
+ this.bytes = bytes2;
14980
+ this.level = level;
14981
+ this.name = "QrCapacityError";
14982
+ }
14983
+ };
14984
+ N1 = 3;
14985
+ N2 = 3;
14986
+ N3 = 40;
14987
+ N4 = 10;
14988
+ QR_MIN_CONTRAST = 3;
14989
+ QR_DEFAULT_COLOR_TOKEN = "textPrimary";
14990
+ QR_DEFAULT_BACKGROUND_TOKEN = "surfacePrimary";
14991
+ QR_DEFAULT_SIZE = 160;
14992
+ QR_DEFAULT_QUIET_ZONE = 4;
14993
+ QR_DEFAULT_ACCESSIBILITY_LABEL = "QR code";
14994
+ QR_FALLBACK_COLOR = "#000000";
14995
+ QR_FALLBACK_BACKGROUND = "#FFFFFF";
14996
+ }
14997
+ });
14998
+
14591
14999
  // ../../core/dev-server/src/token-suggest.ts
14592
15000
  function suggestTokenNames(name, known, max = 3) {
14593
15001
  return suggestNames(name, known, max, true);
@@ -15030,6 +15438,9 @@ var init_a11y_contract = __esm({
15030
15438
  // RFC 0065 §5 — a drawn shape has no content of its own to announce; a meaningful one
15031
15439
  // (a status dot) is named through `accessibilityLabel`, exactly like an Icon.
15032
15440
  Shape: { role: "decorative", name: "conditional", state: [], decorative: true },
15441
+ // #4671 — an IMAGE named by `accessibilityLabel`, defaulting to "QR code" on every renderer, so a
15442
+ // bare node already has a name. The encoded value is never read out.
15443
+ QrCode: { role: "image", name: "conditional", state: [], decorative: false },
15033
15444
  Banner: { role: "status", name: "required", state: ["dismissible"], decorative: false },
15034
15445
  Snackbar: { role: "status", name: "required", state: [], decorative: false },
15035
15446
  AlertDialog: { role: "alert", name: "required", state: ["modal"], decorative: false },
@@ -17893,6 +18304,52 @@ function mediaFieldFindings(descriptor) {
17893
18304
  visit(descriptor, "", true);
17894
18305
  return out2;
17895
18306
  }
18307
+ function qrCodeFindings(descriptor) {
18308
+ const out2 = [];
18309
+ const visit = (v2, path2, atRoot) => {
18310
+ if (Array.isArray(v2)) {
18311
+ v2.forEach((x2, i2) => visit(x2, `${path2}[${i2}]`, false));
18312
+ return;
18313
+ }
18314
+ if (!v2 || typeof v2 !== "object") return;
18315
+ const record3 = v2;
18316
+ const body = record3.body;
18317
+ if (body?.package === "himalaya" && body.type === "QrCode") {
18318
+ const p2 = body.props ?? {};
18319
+ const base = path2 ? `${path2}.body.props` : "body.props";
18320
+ const hasValue = typeof p2.value === "string" && p2.value !== "";
18321
+ const hasPath = typeof p2.valuePath === "string" && p2.valuePath !== "";
18322
+ if (!hasValue && !hasPath) {
18323
+ out2.push({ path: base, message: "QrCode needs a payload: set `value` (a literal string) or `valuePath` (a `$service:` / `$item.` binding)" });
18324
+ }
18325
+ if (hasPath && !p2.valuePath.startsWith("$service:") && !p2.valuePath.startsWith("$item.")) {
18326
+ out2.push({ path: `${base}.valuePath`, message: `QrCode.valuePath must be a "$service:<service>.<field>" or "$item.<field>" binding, got ${JSON.stringify(p2.valuePath)}. Put a literal payload in \`value\`` });
18327
+ }
18328
+ if (p2.errorCorrection !== void 0 && !(typeof p2.errorCorrection === "string" && QR_ERROR_CORRECTION_LEVELS.includes(p2.errorCorrection))) {
18329
+ out2.push({ path: `${base}.errorCorrection`, message: `QrCode.errorCorrection must be "L", "M", "Q" or "H", got ${JSON.stringify(p2.errorCorrection)}` });
18330
+ }
18331
+ const level = qrErrorCorrection(p2.errorCorrection);
18332
+ if (hasValue && !qrFits(p2.value, level)) {
18333
+ out2.push({
18334
+ path: `${base}.value`,
18335
+ message: `QrCode.value is ${qrPayloadBytes(p2.value)} bytes, over the ${qrByteCapacity(QR_MAX_VERSION, level)}-byte capacity of a level-${level} QR code \u2014 every renderer draws a placeholder instead. Shorten the payload (a short link) or lower \`errorCorrection\``
18336
+ });
18337
+ }
18338
+ if (p2.size !== void 0 && !(typeof p2.size === "number" && p2.size > 0)) {
18339
+ out2.push({ path: `${base}.size`, message: `QrCode.size must be a positive number, got ${JSON.stringify(p2.size)}` });
18340
+ }
18341
+ if (p2.quietZone !== void 0 && !(typeof p2.quietZone === "number" && Number.isInteger(p2.quietZone) && p2.quietZone >= 0)) {
18342
+ out2.push({ path: `${base}.quietZone`, message: `QrCode.quietZone must be a non-negative integer number of modules, got ${JSON.stringify(p2.quietZone)}` });
18343
+ }
18344
+ }
18345
+ for (const [key3, child] of Object.entries(record3)) {
18346
+ if (isOpaqueAuthorJson(key3, child, atRoot)) continue;
18347
+ visit(child, path2 ? `${path2}.${key3}` : key3, false);
18348
+ }
18349
+ };
18350
+ visit(descriptor, "", true);
18351
+ return out2;
18352
+ }
17896
18353
  function bottomSheetFindings(descriptor) {
17897
18354
  const out2 = [];
17898
18355
  const visit = (v2, path2, atRoot) => {
@@ -18370,6 +18827,9 @@ function validateScreenDescriptor(screenId, descriptor, opts = {}) {
18370
18827
  for (const finding2 of richTextFieldFindings(descriptor)) {
18371
18828
  issues.push({ severity: "error", pass: "rich-text-field", path: finding2.path, message: finding2.message });
18372
18829
  }
18830
+ for (const finding2 of qrCodeFindings(descriptor)) {
18831
+ issues.push({ severity: "error", pass: "qr-code", path: finding2.path, message: finding2.message });
18832
+ }
18373
18833
  for (const finding2 of buttonVariantFindings(descriptor)) {
18374
18834
  issues.push({ severity: "warning", pass: "button-variants", path: finding2.path, message: finding2.message });
18375
18835
  }
@@ -18973,6 +19433,7 @@ var init_validate_descriptor_core = __esm({
18973
19433
  init_validator();
18974
19434
  init_declared_navigation_lint();
18975
19435
  init_validator();
19436
+ init_qr_code();
18976
19437
  init_tokens();
18977
19438
  init_token_suggest();
18978
19439
  init_allowlist();
@@ -19548,6 +20009,15 @@ var init_validate_descriptor_core = __esm({
19548
20009
  trackColorPath: "string",
19549
20010
  value: "number"
19550
20011
  },
20012
+ QrCode: {
20013
+ background: "string",
20014
+ color: "string",
20015
+ errorCorrection: "string",
20016
+ quietZone: "number",
20017
+ size: "number",
20018
+ value: "string",
20019
+ valuePath: "string"
20020
+ },
19551
20021
  Rating: {
19552
20022
  color: "string",
19553
20023
  icon: "string",
@@ -19814,6 +20284,7 @@ var init_validate_descriptor_core = __esm({
19814
20284
  PageControl: ["count", "currentIndex"],
19815
20285
  Pager: ["currentIndex", "liveWindow"],
19816
20286
  PdfView: ["startPage"],
20287
+ QrCode: ["quietZone"],
19817
20288
  Rating: ["max"],
19818
20289
  SearchField: ["debounceMs"],
19819
20290
  Shape: ["cornerRadius"],
@@ -22667,7 +23138,7 @@ function fixedNavigations(bundleJs, ts16) {
22667
23138
  }
22668
23139
  function literalTargets(bundleJs, ts16) {
22669
23140
  const name = (n2) => n2 && (ts16.isIdentifier(n2) || ts16.isStringLiteral(n2) || ts16.isNoSubstitutionTemplateLiteral(n2)) ? n2.text : void 0;
22670
- const object14 = (n2) => {
23141
+ const object15 = (n2) => {
22671
23142
  while (n2 && ts16.isParenthesizedExpression(n2)) n2 = n2.expression;
22672
23143
  return n2 && ts16.isObjectLiteralExpression(n2) ? n2 : void 0;
22673
23144
  };
@@ -22702,7 +23173,7 @@ function literalTargets(bundleJs, ts16) {
22702
23173
  const results = /* @__PURE__ */ new Map();
22703
23174
  const fixed = /* @__PURE__ */ new Map();
22704
23175
  const literalNav = (expr) => {
22705
- const o2 = object14(expr);
23176
+ const o2 = object15(expr);
22706
23177
  if (!o2 || o2.properties.length === 0) return void 0;
22707
23178
  const nav = {};
22708
23179
  for (const p2 of o2.properties) {
@@ -22766,7 +23237,7 @@ function literalTargets(bundleJs, ts16) {
22766
23237
  if (!helper?.body || !plain2(helper) || helper.parameters.length !== 2 || !plainParams(helper)) return false;
22767
23238
  const [stateParam, navParam] = helper.parameters.map((p2) => name(p2.name));
22768
23239
  const body = ts16.isBlock(helper.body) ? helper.body.statements.length === 1 && ts16.isReturnStatement(helper.body.statements[0]) ? helper.body.statements[0].expression : void 0 : helper.body;
22769
- const o2 = object14(body);
23240
+ const o2 = object15(body);
22770
23241
  if (!o2 || o2.properties.length !== 2 || !stateParam || !navParam) return false;
22771
23242
  const [spread, nav] = o2.properties;
22772
23243
  return ts16.isSpreadAssignment(spread) && ts16.isIdentifier(spread.expression) && spread.expression.text === stateParam && ts16.isPropertyAssignment(nav) && name(nav.name) === "_nav" && ts16.isIdentifier(nav.initializer) && nav.initializer.text === navParam;
@@ -22802,14 +23273,14 @@ function literalTargets(bundleJs, ts16) {
22802
23273
  const callee = ts16.isPropertyAccessExpression(node.expression) ? node.expression.name.text : name(node.expression);
22803
23274
  const service = node.arguments[0];
22804
23275
  if (callee && /^defineService[0-9]*$/.test(callee) && service && ts16.isStringLiteralLike(service)) {
22805
- const actions = object14(initializer(property2(object14(node.arguments[1]), "actions")));
23276
+ const actions = object15(initializer(property2(object15(node.arguments[1]), "actions")));
22806
23277
  for (const member of actions?.properties ?? []) {
22807
23278
  const action = name(member.name);
22808
23279
  const fn2 = ts16.isMethodDeclaration(member) ? member : resolve95(ts16.isShorthandPropertyAssignment(member) ? member.name : initializer(member));
22809
23280
  if (!action || !fn2?.body) continue;
22810
23281
  const targets = [];
22811
23282
  const target = (expr) => {
22812
- const sid = initializer(property2(object14(expr), "screenId"));
23283
+ const sid = initializer(property2(object15(expr), "screenId"));
22813
23284
  if (!sid || !ts16.isStringLiteralLike(sid)) return;
22814
23285
  const position = file2.getLineAndCharacterOfPosition(sid.getStart(file2));
22815
23286
  targets.push({ screenId: sid.text, line: position.line + 1, column: position.character });
@@ -23674,7 +24145,7 @@ const descriptors = ${JSON.stringify(descriptors, null, 2)} as unknown as Record
23674
24145
  export function withHhpScreens<T extends { screens: { exact: Record<string, any> }; seed?: { screens: Record<string, any>; data: Record<string, unknown[]> } }>(app: T): T {
23675
24146
  for (const id of Object.keys(descriptors)) if (Object.hasOwn(app.screens.exact, id)) throw new Error("HHP screen conflicts with authored screen: " + id);
23676
24147
  const exact = Object.fromEntries(Object.entries(descriptors).map(([id, descriptor]) => [id, (ctx: { serverBaseUrl: string; bundleIntegrity(name: string): string | null; asset(name: string): {url:string} | null }) => {
23677
- const result = structuredClone(descriptor);
24148
+ const result = JSON.parse(JSON.stringify(descriptor));
23678
24149
  const resolveAssets = (value: any, field = ""): any => { if (["url", "imageUrl", "src"].includes(field) && typeof value === "string" && value.startsWith("asset:")) { const asset = ctx.asset(value.slice(6)); if (!asset) throw new Error("Missing HHP asset " + value); return asset.url.replace(/^[a-z][a-z0-9+.-]*:\\/\\/[^/?#]*/i, ""); } if (Array.isArray(value)) return value.map((child) => resolveAssets(child, field)); if (value && typeof value === "object") return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, resolveAssets(child, key)])); return value; }; result.payload = resolveAssets(result.payload);
23679
24150
  if (result.logicBundle) { const name = result.logicBundle.url.split("/").pop()!; const sri = ctx.bundleIntegrity(name); if (!sri) return null; result.logicBundle.url = ctx.serverBaseUrl + result.logicBundle.url; result.logicBundle.integrity = sri; }
23680
24151
  return result;
@@ -27190,8 +27661,1039 @@ var init_wix_push_links = __esm({
27190
27661
  }
27191
27662
  });
27192
27663
 
27664
+ // ../../core/schema/bi/screen-map.json
27665
+ var screen_map_default;
27666
+ var init_screen_map = __esm({
27667
+ "../../core/schema/bi/screen-map.json"() {
27668
+ screen_map_default = {
27669
+ _comment: "#4976 (epic #4973) \u2014 the platform screen map: Himi screen id (a templated screen by its base id) -> the RN screen the equivalent RN app reports in 67:267 (ScreenVisibilityListener.ts, mobile-apps-engine; module = screenName up to its first dot). `rn` cites the RN source; null declares no RN equivalent (sent as unmapped, screenName = Himi id, module himi). `view` is a vertical view event fired with the 267; `$route.<name>` takes the record id from the screen id (`id`) or its query. Served per app as telemetryConfig.frog.screenMap. Research pulled from the npm packages wix-one-app depends on, 2026-11-08.",
27670
+ apps: {
27671
+ "himi-owner-lite": {
27672
+ a2ui_ask: {
27673
+ rn: null,
27674
+ why: "Himi A2UI generated screen; no RN equivalent"
27675
+ },
27676
+ himi_owner_lite_account: {
27677
+ screenName: "owners.profile.screen",
27678
+ module: "owners",
27679
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:122",
27680
+ note: "Owner profile/account screen (owners-app-platform)"
27681
+ },
27682
+ himi_owner_lite_analytics: {
27683
+ screenName: "owners.analytics.screen",
27684
+ module: "owners",
27685
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:330",
27686
+ note: "Analytics tab root (src/constants/index.ts:24); it embeds woaAnalytics.highlights as a component (src/analytics/analytics.screen.tsx:24), so the 67:267 screenName is owners.analytics.screen"
27687
+ },
27688
+ himi_owner_lite_analytics_measure: {
27689
+ rn: null,
27690
+ why: "No RN screen for a single-KPI drill-down; closest is woaAnalytics.fullReportItemPage (analytics src/module/components/index.ts:14) but it is a report-row page, not a measure page"
27691
+ },
27692
+ himi_owner_lite_analytics_report: {
27693
+ screenName: "woaAnalytics.nativeReport",
27694
+ module: "woaAnalytics",
27695
+ rn: "@wix/wix-one-app-analytics@2.925.1419 [wix-private/wix-one-app-analytics] src/globals/legacyToNativeScreenMap.ts:3",
27696
+ note: "Native report screen (analytics src/module/components/index.ts:125; legacy woaAnalytics.report maps to it in src/globals/legacyToNativeScreenMap.ts:4). Himi report is a semantic-model report; closest equivalent"
27697
+ },
27698
+ himi_owner_lite_appointments: {
27699
+ screenName: "wix.bookings.owner.calendar.Calendar",
27700
+ module: "wix",
27701
+ rn: "@wix/bookings-mobile-owner@1.3396.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:6 (registered component list)",
27702
+ note: "Owner bookings calendar (bookings-mobile-owner)"
27703
+ },
27704
+ himi_owner_lite_aria: {
27705
+ screenName: "owners.assistant.screen",
27706
+ module: "owners",
27707
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:354",
27708
+ note: "Assistant tab root (src/constants/index.ts:25). Pushed (non-tab) chats use ai-assistant.screens.chat"
27709
+ },
27710
+ himi_owner_lite_aria_history: {
27711
+ screenName: "ai-assistant.screens.chat-history-v2",
27712
+ module: "ai-assistant",
27713
+ rn: "@wix/mobile-apps-ai-assistant@2.1139.39 [wix-private/mobile-modules] moduleJsons/module.admin.json:11 (registered component list)",
27714
+ note: "AI assistant chat history (mobile-apps-ai-assistant); a v1 id ai-assistant.screens.chat-history is also registered"
27715
+ },
27716
+ himi_owner_lite_ask: {
27717
+ rn: null,
27718
+ why: "Himi A2UI generated answer screen; no RN equivalent (RN assistant is a chat: owners.assistant.screen / ai-assistant.screens.chat)"
27719
+ },
27720
+ himi_owner_lite_booking: {
27721
+ screenName: "wix.bookings.owner.bookings.ViewAppointment",
27722
+ module: "wix",
27723
+ rn: "@wix/bookings-mobile-owner@1.3396.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:48 (registered component list)",
27724
+ note: "Owner appointment details (bookings-mobile-owner)"
27725
+ },
27726
+ himi_owner_lite_brief: {
27727
+ rn: null,
27728
+ why: 'Himi A2UI "Show me today" brief; no RN equivalent screen'
27729
+ },
27730
+ himi_owner_lite_drawer: {
27731
+ rn: null,
27732
+ why: "RN Owner app has no side drawer/menu panel; navigation is tabs (src/constants/index.ts:16-25)"
27733
+ },
27734
+ himi_owner_lite_event: {
27735
+ screenName: "wix.events.EventDashboard",
27736
+ module: "wix",
27737
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:77",
27738
+ note: "src/screen-ids.js:77"
27739
+ },
27740
+ himi_owner_lite_event_form: {
27741
+ screenName: "wix.events.EditEvent",
27742
+ module: "wix",
27743
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:17",
27744
+ note: "Edit event; a new event uses wix.events.CreateEvent"
27745
+ },
27746
+ himi_owner_lite_events: {
27747
+ screenName: "wix.events.managerApp.Index",
27748
+ module: "wix",
27749
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:4",
27750
+ note: "Manage item screenIDs.MANAGER_INDEX (wix-one-events src/screen-ids.js:4)"
27751
+ },
27752
+ himi_owner_lite_faq: {
27753
+ screenName: "wix.faq.ManageScreen",
27754
+ module: "wix",
27755
+ rn: "@wix/wix-one-app-faq-app@1.11.477 [wix-private/mobile-modules] moduleJsons/module.admin.json:6 (registered component list)",
27756
+ note: "Manage item screenIds.MANAGE_SCREEN (faq-app src/constants/index.ts:16)"
27757
+ },
27758
+ himi_owner_lite_faq_category_form: {
27759
+ rn: null,
27760
+ why: "RN FAQ module registers only FAQAssistantScreen, FAQScreen, FAQsStandalone, Home, ManageScreen, SectionSettings \u2014 no question/category editor screen"
27761
+ },
27762
+ himi_owner_lite_faq_category_new: {
27763
+ rn: null,
27764
+ why: "RN FAQ module registers only FAQAssistantScreen, FAQScreen, FAQsStandalone, Home, ManageScreen, SectionSettings \u2014 no question/category editor screen"
27765
+ },
27766
+ himi_owner_lite_faq_question_form: {
27767
+ rn: null,
27768
+ why: "RN FAQ module registers only FAQAssistantScreen, FAQScreen, FAQsStandalone, Home, ManageScreen, SectionSettings \u2014 no question/category editor screen"
27769
+ },
27770
+ himi_owner_lite_faq_question_new: {
27771
+ rn: null,
27772
+ why: "RN FAQ module registers only FAQAssistantScreen, FAQScreen, FAQsStandalone, Home, ManageScreen, SectionSettings \u2014 no question/category editor screen"
27773
+ },
27774
+ himi_owner_lite_home: {
27775
+ screenName: "owners.dashboard.screen",
27776
+ module: "owners",
27777
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:6",
27778
+ note: "Dashboard tab root: screenIdByTabId[TAB_ID.DASHBOARD] (owners-app-platform src/constants/index.ts:17)"
27779
+ },
27780
+ himi_owner_lite_inbox: {
27781
+ screenName: "owners.inbox.screen",
27782
+ module: "owners",
27783
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:18",
27784
+ note: "Inbox tab root (src/constants/index.ts:20)"
27785
+ },
27786
+ himi_owner_lite_inbox_thread: {
27787
+ screenName: "chat.chatroom.screen",
27788
+ module: "chat",
27789
+ rn: "@wix/mobile-apps-inbox@1.0.2106 [wix-private/mobile-modules] src/module/deepLinks.ts:31",
27790
+ note: "Owner/business chatroom id (mobile-apps-inbox src/navigation/identifiers.ts:53)"
27791
+ },
27792
+ himi_owner_lite_manage: {
27793
+ screenName: "owners.manage.screen",
27794
+ module: "owners",
27795
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:26",
27796
+ note: "Manage tab root (src/constants/index.ts:21)"
27797
+ },
27798
+ himi_owner_lite_module_badges: {
27799
+ screenName: "membersArea.BadgesScreen",
27800
+ module: "membersArea",
27801
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:27",
27802
+ note: "Manage item COMPONENT_IDS.MEMBERS_AREA.BADGES_SCREEN (members-area src/constants/component-ids.ts:27)"
27803
+ },
27804
+ himi_owner_lite_module_contacts: {
27805
+ screenName: "crm-contacts.ContactsListScreen",
27806
+ module: "crm-contacts",
27807
+ rn: "@wix/wix-one-app-crm-contacts@1.28.1202 [wix-private/mobile-modules] src/module/constants.ts:2",
27808
+ note: "Owner Manage/shortcut item uses crm-contacts.DashboardShortcutsContactsListScreen (same list, wrapper id); main list screen is crm-contacts.ContactsListScreen"
27809
+ },
27810
+ himi_owner_lite_module_coupons: {
27811
+ screenName: "wix.coupons.List",
27812
+ module: "wix",
27813
+ rn: "@wix/wix-one-app-coupons@2.11234.283 [wix-private/mobile-modules] src/couponList/index.ts:3",
27814
+ note: "Owner Manage item opens wix.coupons.List (coupons src/consumedServices.ts:42)"
27815
+ },
27816
+ himi_owner_lite_module_donationCampaigns: {
27817
+ rn: null,
27818
+ why: 'No donations module in RN Wix Owner app: no component containing "donat" in any of the 103 module manifests (moduleJsons) of @wix/* deps of wix-private/wix-one-app'
27819
+ },
27820
+ himi_owner_lite_module_forms: {
27821
+ screenName: "forms.formsList",
27822
+ module: "forms",
27823
+ rn: "@wix/wix-one-app-forms@1.30.1257 [wix-private/mobile-modules] moduleJsons/module.admin.json:12 (registered component list)",
27824
+ note: "Manage item SCREENS.FORMS_LIST (forms src/constants/index.ts:15)"
27825
+ },
27826
+ himi_owner_lite_module_giftCards: {
27827
+ screenName: "wix.ecomPlatform.GiftCardsSalesList",
27828
+ module: "wix",
27829
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:88",
27830
+ note: "Manage item ScreenId.GiftCardsSalesList (ecom-platform src/moduleAPI/manageItems.ts:89)"
27831
+ },
27832
+ himi_owner_lite_module_groups: {
27833
+ screenName: "groups.screens.manageGroups",
27834
+ module: "groups",
27835
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:79 (registered component list)",
27836
+ note: "Manage item SCREEN_IDS.MANAGE_GROUPS (groups features/manage-groups/manage-groups.feature.ts:7)"
27837
+ },
27838
+ himi_owner_lite_module_invoices: {
27839
+ screenName: "crm.invoices.MainEntryPoint",
27840
+ module: "crm",
27841
+ rn: "@wix/wix-invoices-mobile@1.69932.1813 [wix-private/financials-mobile-falcon] moduleJsons/module.admin.json:14 (registered component list)",
27842
+ note: "Manage item screen = ScreenNames.MainEntryPoint (wix-invoices-mobile src/module.ts:272-273; value srcV2/constants/components.ts:7)"
27843
+ },
27844
+ himi_owner_lite_module_members: {
27845
+ screenName: "membersArea.OwnersMemberListScreen",
27846
+ module: "membersArea",
27847
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:5",
27848
+ note: "Manage item COMPONENT_IDS.MEMBERS_AREA.OWNERS_MEMBER_LIST_SCREEN"
27849
+ },
27850
+ himi_owner_lite_module_plans: {
27851
+ screenName: "memberships.screens.managerApp",
27852
+ module: "memberships",
27853
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:9 (registered component list)",
27854
+ note: "Manage item SCREENS.MANAGER_APP_SCREEN (memberships src/screens/names.ts:6)"
27855
+ },
27856
+ himi_owner_lite_module_portfolio: {
27857
+ screenName: "portfolio.Manager",
27858
+ module: "portfolio",
27859
+ rn: "@wix/wix-one-app-portfolio@1.24.628 [wix-private/mobile-modules] moduleJsons/module.admin.json:5 (registered component list)",
27860
+ note: "Manage item screenIds.MANAGER_SCREEN_ID (portfolio src/constants/screen-ids.ts:5)"
27861
+ },
27862
+ himi_owner_lite_module_programs: {
27863
+ screenName: "wix-one-app-achievements.OwnerChallengesScreen",
27864
+ module: "wix-one-app-achievements",
27865
+ rn: "@wix/wix-one-app-achievements@1.21546.1862 [wix-private/wix-one-app-achievements] moduleJsons/module.admin.json:9 (registered component list)",
27866
+ note: "Online Programs = achievements module; manage item screenIds.OWNER_CHALLENGES (src/screens/screenIds/registeredScreenIds.ts:13)"
27867
+ },
27868
+ himi_owner_lite_module_reservations: {
27869
+ screenName: "tableReservations.owner.MainReservationsAdapterScreen",
27870
+ module: "tableReservations",
27871
+ rn: "@wix/wix-one-app-table-reservations-owner@1.660.2541 [wix-private/table-reservations-mobile] src/module-api/identifiers.ts:2",
27872
+ note: "Manage item ScreenId.MainReservationsAdapterScreen (table-reservations-owner src/module-api/identifiers.ts:2)"
27873
+ },
27874
+ himi_owner_lite_module_reviews: {
27875
+ screenName: "reviews.screens.reviewsModeration",
27876
+ module: "reviews",
27877
+ rn: "@wix/wix-one-app-reviews@1.66.195 [wix-private/wix-one-app-reviews] moduleJsons/module.admin.json:11 (registered component list)",
27878
+ note: "Manage item screenIds.REVIEWS_MODERATION (reviews src/screens/screen-ids.ts:11)"
27879
+ },
27880
+ himi_owner_lite_module_subscriptions: {
27881
+ screenName: "memberships.screens.SubscriptionsManager",
27882
+ module: "memberships",
27883
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:32 (registered component list)",
27884
+ note: "Manage item SCREENS.SUBSCRIPTIONS_MANAGER (memberships src/screens/names.ts:24)"
27885
+ },
27886
+ himi_owner_lite_order: {
27887
+ screenName: "wix.ecomPlatform.OrderScreen",
27888
+ module: "wix",
27889
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:21",
27890
+ note: "ecom-platform storesAPI.ts"
27891
+ },
27892
+ himi_owner_lite_orders: {
27893
+ screenName: "wix.ecomPlatform.OrdersScreen",
27894
+ module: "wix",
27895
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:19",
27896
+ note: "Manage item ScreenId.OrdersScreen (ecom-platform src/moduleAPI/manageItems.ts:32)"
27897
+ },
27898
+ himi_owner_lite_overview: {
27899
+ rn: null,
27900
+ why: "Himi cross-business attention rollup; RN Owner has no multi-site rollup screen (closest is owners.site-switcher.screen)"
27901
+ },
27902
+ himi_owner_lite_post: {
27903
+ screenName: "NewBlog.PostPreview",
27904
+ module: "NewBlog",
27905
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:47",
27906
+ note: "Owner post preview (closest read view)"
27907
+ },
27908
+ himi_owner_lite_post_form: {
27909
+ screenName: "NewBlog.RichPostEditor",
27910
+ module: "NewBlog",
27911
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:6",
27912
+ note: "Blog post editor"
27913
+ },
27914
+ himi_owner_lite_post_new: {
27915
+ screenName: "NewBlog.RichPostEditor",
27916
+ module: "NewBlog",
27917
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:6",
27918
+ note: "Blog post editor (new post)"
27919
+ },
27920
+ himi_owner_lite_posts: {
27921
+ screenName: "NewBlog.DashboardPosts",
27922
+ module: "NewBlog",
27923
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:8",
27924
+ note: "Blog manage item (wix-one-app-new-blog)"
27925
+ },
27926
+ himi_owner_lite_product: {
27927
+ screenName: "wix.stores.ProductScreen",
27928
+ module: "wix",
27929
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:41",
27930
+ note: "Owner product screen (storesAPI.ts:31) \u2014 RN owner product page is the editable product screen; no separate read-only detail"
27931
+ },
27932
+ himi_owner_lite_product_form: {
27933
+ screenName: "wix.stores.ProductScreen",
27934
+ module: "wix",
27935
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:41",
27936
+ note: "Same RN editable product screen (storesAPI.ts:31)"
27937
+ },
27938
+ himi_owner_lite_product_new: {
27939
+ screenName: "wix.stores.AddProductScreen",
27940
+ module: "wix",
27941
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:76",
27942
+ note: "storesAPI.ts:57"
27943
+ },
27944
+ himi_owner_lite_products: {
27945
+ screenName: "wix.stores.ProductsScreen",
27946
+ module: "wix",
27947
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:29",
27948
+ note: "Manage item ScreenId.ProductsScreen (store-merchant-app storesAPI.ts:23)"
27949
+ },
27950
+ himi_owner_lite_record_badges: {
27951
+ screenName: "membersArea.BadgeMembersScreen",
27952
+ module: "membersArea",
27953
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:34",
27954
+ note: "A badge opens its members list (component-ids.ts:34); closest detail"
27955
+ },
27956
+ himi_owner_lite_record_contacts: {
27957
+ screenName: "crm-contacts.ContactCardScreen",
27958
+ module: "crm-contacts",
27959
+ rn: "@wix/wix-one-app-crm-contacts@1.28.1202 [wix-private/mobile-modules] src/module/constants.ts:10"
27960
+ },
27961
+ himi_owner_lite_record_coupons: {
27962
+ screenName: "wix.coupons.CouponView",
27963
+ module: "wix",
27964
+ rn: "@wix/wix-one-app-coupons@2.11234.283 [wix-private/mobile-modules] src/coupon/index.ts:4"
27965
+ },
27966
+ himi_owner_lite_record_donationCampaigns: {
27967
+ rn: null,
27968
+ why: "Same as module_donationCampaigns: no RN donations module"
27969
+ },
27970
+ himi_owner_lite_record_forms: {
27971
+ screenName: "forms.formSubmissions",
27972
+ module: "forms",
27973
+ rn: "@wix/wix-one-app-forms@1.30.1257 [wix-private/mobile-modules] moduleJsons/module.admin.json:13 (registered component list)",
27974
+ note: "FORM_SUBMISSIONS (src/constants/index.ts:16) \u2014 a form opens its submissions"
27975
+ },
27976
+ himi_owner_lite_record_giftCards: {
27977
+ screenName: "wix.ecomPlatform.GiftCardSaleDetails",
27978
+ module: "wix",
27979
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:89"
27980
+ },
27981
+ himi_owner_lite_record_groups: {
27982
+ screenName: "groups.screens.groupView",
27983
+ module: "groups",
27984
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:71 (registered component list)",
27985
+ note: "Group page GROUP_VIEW (features/group-view/group-view.feature.ts:8); owners may also land on groups.screens.groupDashboard"
27986
+ },
27987
+ himi_owner_lite_record_invoices: {
27988
+ screenName: "invoices.invoice-preview",
27989
+ module: "invoices",
27990
+ rn: "@wix/wix-invoices-mobile@1.69932.1813 [wix-private/financials-mobile-falcon] moduleJsons/module.admin.json:34 (registered component list)",
27991
+ note: "Invoice deep link opens ScreenNames.InvoicePreviewV2 = invoices.invoice-preview (src/module.ts:96; srcV2/constants/components.ts:5)"
27992
+ },
27993
+ himi_owner_lite_record_members: {
27994
+ screenName: "membersArea.MemberProfileScreen",
27995
+ module: "membersArea",
27996
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:40"
27997
+ },
27998
+ himi_owner_lite_record_plans: {
27999
+ screenName: "memberships.screens.ConfigurablePlanEditing",
28000
+ module: "memberships",
28001
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:27 (registered component list)",
28002
+ note: "RN has no read-only owner plan detail; tapping a plan opens the editor (navigator.ts openPlanEditing -> ConfigurablePlanEditing). Closest, not exact."
28003
+ },
28004
+ himi_owner_lite_record_portfolio: {
28005
+ screenName: "portfolio.ManageProject",
28006
+ module: "portfolio",
28007
+ rn: "@wix/wix-one-app-portfolio@1.24.628 [wix-private/mobile-modules] moduleJsons/module.admin.json:7 (registered component list)"
28008
+ },
28009
+ himi_owner_lite_record_programs: {
28010
+ screenName: "wix-one-app-achievements.OwnerChallengeScreen",
28011
+ module: "wix-one-app-achievements",
28012
+ rn: "@wix/wix-one-app-achievements@1.21546.1862 [wix-private/wix-one-app-achievements] moduleJsons/module.admin.json:10 (registered component list)",
28013
+ note: "registeredScreenIds.ts:14"
28014
+ },
28015
+ himi_owner_lite_record_reservations: {
28016
+ rn: null,
28017
+ why: "RN owner table reservations has no reservation-detail screen; reservation actions are an action sheet (tableReservations.owner.ReservationActions, identifiers.ts:49) inside the main screen"
28018
+ },
28019
+ himi_owner_lite_record_reviews: {
28020
+ screenName: "reviews.screens.reviewsModerationReviewView",
28021
+ module: "reviews",
28022
+ rn: "@wix/wix-one-app-reviews@1.66.195 [wix-private/wix-one-app-reviews] moduleJsons/module.admin.json:13 (registered component list)",
28023
+ note: "REVIEWS_MODERATION_REVIEW_VIEW (src/screens/screen-ids.ts:13)"
28024
+ },
28025
+ himi_owner_lite_record_subscriptions: {
28026
+ screenName: "memberships.screens.SubscriptionOverviewManager",
28027
+ module: "memberships",
28028
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:34 (registered component list)",
28029
+ note: "src/screens/names.ts:26"
28030
+ },
28031
+ himi_owner_lite_search: {
28032
+ screenName: "owners.search.screen",
28033
+ module: "owners",
28034
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:346",
28035
+ note: "Owner search screen"
28036
+ },
28037
+ himi_owner_lite_service: {
28038
+ screenName: "wix.bookings.catalog.EditServiceForm",
28039
+ module: "wix",
28040
+ rn: "@wix/bookings-mobile-catalog@1.2562.0 [wix-private/bookings-mobile] src/constants/componentsIds.ts:35",
28041
+ note: "RN owner service page is the edit form; no separate read-only detail. Closest"
28042
+ },
28043
+ himi_owner_lite_service_form: {
28044
+ screenName: "wix.bookings.catalog.EditServiceForm",
28045
+ module: "wix",
28046
+ rn: "@wix/bookings-mobile-catalog@1.2562.0 [wix-private/bookings-mobile] src/constants/componentsIds.ts:35",
28047
+ note: "bookings-mobile-catalog"
28048
+ },
28049
+ himi_owner_lite_services: {
28050
+ screenName: "wix.bookings.catalog.ServicesListScreen",
28051
+ module: "wix",
28052
+ rn: "@wix/bookings-mobile-catalog@1.2562.0 [wix-private/bookings-mobile] src/constants/componentsIds.ts:1",
28053
+ note: "Owner services list (bookings-mobile-catalog)"
28054
+ },
28055
+ himi_owner_lite_sites: {
28056
+ screenName: "owners.site-switcher.screen",
28057
+ module: "owners",
28058
+ rn: "@wix/wix-owners-app-platform@1.3271.2847 [wix-private/mobile-modules] src/moduleAPI/components.ts:110",
28059
+ note: "Site switcher (owners-app-platform)"
28060
+ },
28061
+ himi_owner_lite_widget_rollup_medium: {
28062
+ rn: null,
28063
+ why: "OS home-screen widget; not an RNN screen, never reaches ScreenVisibilityListener"
28064
+ },
28065
+ himi_owner_lite_widget_rollup_small: {
28066
+ rn: null,
28067
+ why: "OS home-screen widget; not an RNN screen, never reaches ScreenVisibilityListener"
28068
+ },
28069
+ himi_owner_lite_widget_today_medium: {
28070
+ rn: null,
28071
+ why: "OS home-screen widget; not an RNN screen, never reaches ScreenVisibilityListener"
28072
+ },
28073
+ himi_owner_lite_widget_today_small: {
28074
+ rn: null,
28075
+ why: "OS home-screen widget; not an RNN screen, never reaches ScreenVisibilityListener"
28076
+ },
28077
+ himi_owner_lite_wrist_home: {
28078
+ rn: null,
28079
+ why: "Watch (wrist) surface; RN Owner has no watch app screens registered with RNN"
28080
+ },
28081
+ himi_owner_lite_wrist_request: {
28082
+ rn: null,
28083
+ why: "Watch (wrist) surface; RN Owner has no watch app screens registered with RNN"
28084
+ }
28085
+ },
28086
+ "himi-spaces-lite": {
28087
+ spaces_join: {
28088
+ screenName: "invites.EnterCode",
28089
+ module: "invites",
28090
+ rn: "@wix/wix-one-app-invites@2.6708.750 [wix-private/mobile-modules] moduleJsons/module.admin.json:9 (registered component list)",
28091
+ note: "Enter join code screen (wix-one-app-invites src/screens/Names.ts:9). Closest: Himi join takes a code/link"
28092
+ },
28093
+ spaces_link: {
28094
+ rn: null,
28095
+ why: "Himi deep-link resolver/loading screen; RN resolves links in the engine without a visible screen"
28096
+ },
28097
+ spaces_my_sites: {
28098
+ screenName: "wix.platform.home",
28099
+ module: "wix",
28100
+ rn: "@wix/wix-one-app-platform@1.5807.627 [wix-private/mobile-modules] src/_Spaces/module.ts:214",
28101
+ note: 'Spaces "My Spaces" tab root (wix-one-app-platform src/_Spaces/module.ts:214)'
28102
+ },
28103
+ spaces_site_open: {
28104
+ screenName: "wix.memberView.asScreen",
28105
+ module: "wix",
28106
+ rn: "@wix/wix-one-app-member-view@1.1247.2646 [wix-private/mobile-modules] src/module/components.ts:18",
28107
+ note: "openPlace pushes wix.memberView.asScreen (wix-one-app-platform src/_Spaces/actions/navigation.ts:15)"
28108
+ },
28109
+ spaces_site_settings: {
28110
+ rn: null,
28111
+ why: "RN Spaces has no per-site settings screen; leave/notifications are actions inside the member view (member-view src/components/MemberView/Content/useContent.tsx:79 leavePlace)"
28112
+ }
28113
+ },
28114
+ "himi-branded-lite": {
28115
+ himi_account: {
28116
+ screenName: "membersArea.MemberProfileScreen",
28117
+ module: "membersArea",
28118
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:40",
28119
+ note: "Branded avatar/account opens EXTERNAL_SCREENS.MEMBER_PROFILE (branded-app src/Constants.ts:51; stackNavigator.ts pushMemberProfileScreen)"
28120
+ },
28121
+ himi_account_settings: {
28122
+ screenName: "brandedApps.settings",
28123
+ module: "brandedApps",
28124
+ rn: "@wix/wix-one-app-branded-app@1.389.867 [wix-private/mobile-modules] moduleJsons/module.admin.json:9 (registered component list)",
28125
+ note: "constants.SCREENS.SETTINGS (branded-app stackNavigator.ts pushSettingsScreen)"
28126
+ },
28127
+ himi_address: {
28128
+ screenName: "wix.addresses.AddressForm",
28129
+ module: "wix",
28130
+ rn: "@wix/wix-one-app-addresses@1.200.633 [wix-private/wix-one-app-addresses] moduleJsons/module.admin.json:7 (registered component list)",
28131
+ note: "wix-one-app-addresses"
28132
+ },
28133
+ himi_addresses: {
28134
+ screenName: "wix.addresses.Addresses",
28135
+ module: "wix",
28136
+ rn: "@wix/wix-one-app-addresses@1.200.633 [wix-private/wix-one-app-addresses] moduleJsons/module.admin.json:5 (registered component list)",
28137
+ note: "wix-one-app-addresses"
28138
+ },
28139
+ himi_agenda: {
28140
+ screenName: "wix.bookings.member.bookings.MemberAgenda",
28141
+ module: "wix",
28142
+ rn: "@wix/bookings-mobile-member@1.2394.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:9 (registered component list)",
28143
+ note: "bookings-mobile-member (class/course schedule)"
28144
+ },
28145
+ himi_app_info: {
28146
+ screenName: "account.AboutScreen",
28147
+ module: "account",
28148
+ rn: "@wix/wix-one-app-account@1.1987.825 [wix-private/mobile-modules] src/constants/screenIDs.js:7",
28149
+ note: "branded-app src/Constants.ts:52 EXTERNAL_SCREENS.ABOUT"
28150
+ },
28151
+ himi_app_language: {
28152
+ screenName: "ma-commons.settings.language",
28153
+ module: "ma-commons",
28154
+ rn: "@wix/mobile-apps-commons@1.21.645 [wix-private/mobile-modules] src/features/settings/registry.ts:3",
28155
+ note: "branded-app stackNavigator.ts pushLanguageSettingsScreen"
28156
+ },
28157
+ himi_appearance: {
28158
+ screenName: "ma-commons.settings.display-mode",
28159
+ module: "ma-commons",
28160
+ rn: "@wix/mobile-apps-commons@1.21.645 [wix-private/mobile-modules] src/features/settings/registry.ts:7",
28161
+ note: "branded-app src/Constants.ts:53 DISPLAY_SETTINGS"
28162
+ },
28163
+ himi_badge: {
28164
+ screenName: "membersArea.BadgeMembersScreen",
28165
+ module: "membersArea",
28166
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:34",
28167
+ note: "members-area component-ids.ts:34 (badge -> its members)"
28168
+ },
28169
+ himi_badges: {
28170
+ screenName: "membersArea.MemberBadgesScreen",
28171
+ module: "membersArea",
28172
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:37",
28173
+ note: "members-area component-ids.ts:37"
28174
+ },
28175
+ himi_blog: {
28176
+ screenName: "NewBlog.BlogFeedScreenWrapped",
28177
+ module: "NewBlog",
28178
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:2",
28179
+ note: "new-blog feed"
28180
+ },
28181
+ himi_blog_post: {
28182
+ screenName: "NewBlog.BlogPostNative",
28183
+ module: "NewBlog",
28184
+ rn: "@wix/wix-one-app-new-blog@2.4548.1030 [wix-private/mobile-modules] src/screens/screen-ids.ts:5",
28185
+ note: "new-blog post"
28186
+ },
28187
+ himi_bookings: {
28188
+ screenName: "wix.bookings.member.bookings.MyBookingsScreen",
28189
+ module: "wix",
28190
+ rn: "@wix/bookings-mobile-member@1.2394.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:13 (registered component list)",
28191
+ note: "bookings-mobile-member"
28192
+ },
28193
+ himi_branded_home: {
28194
+ screenName: "wix.memberView.asScreen",
28195
+ module: "wix",
28196
+ rn: "@wix/wix-one-app-member-view@1.1247.2646 [wix-private/mobile-modules] src/module/components.ts:18",
28197
+ note: "Branded home tab (branded-app src/Core/services/module/brandedTabs.ts:38; member-view src/services/bottomNavigation.ts:98). Every builder-made tab screen (section page) also reports wix.memberView.asScreen"
28198
+ },
28199
+ himi_branded_splash: {
28200
+ screenName: "brandedLite.splashScreen",
28201
+ module: "brandedLite",
28202
+ rn: "@wix/branded-lite-platform@1.60.0 [wix-private/branded-lite-platform] src/module.ts:16",
28203
+ note: "RN Branded Lite shows it as an overlay (branded-lite-platform src/module.ts:16). Classic RN Branded apps use a native splash (no 67:267)"
28204
+ },
28205
+ himi_business_chat: {
28206
+ screenName: "chat.memberChatroomScreen",
28207
+ module: "chat",
28208
+ rn: "@wix/mobile-apps-inbox@1.0.2106 [wix-private/mobile-modules] src/module/deepLinks.ts:30",
28209
+ note: "Branded chat button invokes chat.openMemberToBusinessChatroom -> openMemberChatroomScreen (inbox src/external-api.ts:258) = chat.memberChatroomScreen; the member inbox list is chat.InboxForMember (branded-app stackNavigator.ts pushChatScreen)"
28210
+ },
28211
+ himi_business_contact: {
28212
+ rn: null,
28213
+ why: "RN branded has no standalone contact screen; contact is a member-view section (wix.memberView.general.contact_section) inside wix.memberView.asScreen"
28214
+ },
28215
+ himi_cart: {
28216
+ screenName: "wix.ecomPlatform.Cart",
28217
+ module: "wix",
28218
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:69",
28219
+ note: "ecom-platform"
28220
+ },
28221
+ himi_chat_thread: {
28222
+ screenName: "chat.memberChatroomScreen",
28223
+ module: "chat",
28224
+ rn: "@wix/mobile-apps-inbox@1.0.2106 [wix-private/mobile-modules] src/module/deepLinks.ts:30",
28225
+ note: "Member chatroom (mobile-apps-inbox src/navigation/identifiers.ts:2)",
28226
+ view: {
28227
+ src: 5,
28228
+ endpoint: "engage",
28229
+ evid: 501,
28230
+ fields: {
28231
+ is_member: "true"
28232
+ }
28233
+ },
28234
+ viewRn: "@wix/mobile-apps-inbox@1.0.2106 src/biLogger/biLogger.service.ts:358-365 logOpenConversation (endpoint via biSources 5:chat->engage); contact_id omitted: the Himi screen carries a member id, not a contact id"
28235
+ },
28236
+ himi_cms: {
28237
+ rn: null,
28238
+ why: "No RN member CMS collection browser screen"
28239
+ },
28240
+ himi_cms_collection: {
28241
+ rn: null,
28242
+ why: "No RN member CMS collection screen"
28243
+ },
28244
+ himi_collection: {
28245
+ rn: null,
28246
+ why: "RN storefront has no per-collection screen; collection filtering happens inside wix.stores.MemberStoresFullScreen"
28247
+ },
28248
+ himi_collections: {
28249
+ rn: null,
28250
+ why: "RN storefront has no collections-list screen (wix.stores.CollectionListScreen is a merchant collection picker, storesAPI.ts:27-30)"
28251
+ },
28252
+ himi_coupon: {
28253
+ rn: null,
28254
+ why: "No member coupon detail screen in RN"
28255
+ },
28256
+ himi_coupons: {
28257
+ rn: null,
28258
+ why: "RN coupons module is owner-only (wix.coupons.* manage screens); no member coupon list screen"
28259
+ },
28260
+ himi_create_post: {
28261
+ screenName: "forum.screens.NewRichPostScreen",
28262
+ module: "forum",
28263
+ rn: "@wix/wix-one-app-forum@1.5231.326 [wix-private/wix-one-app-forum] moduleJsons/module.admin.json:15 (registered component list)",
28264
+ note: "Forum new post (forum quick action screens().SCREENS.NEW_RICH_POST, forum src/module.ts:114)"
28265
+ },
28266
+ himi_delete_account: {
28267
+ screenName: "brandedApps.deleteAccount",
28268
+ module: "brandedApps",
28269
+ rn: "@wix/wix-one-app-branded-app@1.389.867 [wix-private/mobile-modules] moduleJsons/module.admin.json:12 (registered component list)",
28270
+ note: "branded-app src/Constants.ts:36 SCREENS.DELETE_ACCOUNT"
28271
+ },
28272
+ himi_donation: {
28273
+ rn: null,
28274
+ why: "No RN donations module"
28275
+ },
28276
+ himi_donations: {
28277
+ rn: null,
28278
+ why: "No RN donations module"
28279
+ },
28280
+ himi_event: {
28281
+ screenName: "wix.events.EventDetails",
28282
+ module: "wix",
28283
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:12",
28284
+ note: "EVENT_DETAILS (wix-one-events src/screen-ids.js:12)",
28285
+ view: {
28286
+ src: 68,
28287
+ endpoint: "events-users",
28288
+ evid: 84,
28289
+ fields: {
28290
+ event_id: "$route.id"
28291
+ }
28292
+ },
28293
+ viewRn: "@wix/wix-one-events@1.53.1743 src/components/event-details/event-details.tsx:113 -> src/middlewares/bi/bi-events-map.ts:389-399 eventDetailsOpened"
28294
+ },
28295
+ himi_events: {
28296
+ screenName: "wix.events.clientApp.Index",
28297
+ module: "wix",
28298
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:102",
28299
+ note: "Member events entry (wix-one-events)"
28300
+ },
28301
+ himi_faq: {
28302
+ screenName: "wix.faq.FAQScreen",
28303
+ module: "wix",
28304
+ rn: "@wix/wix-one-app-faq-app@1.11.477 [wix-private/mobile-modules] moduleJsons/module.admin.json:5 (registered component list)",
28305
+ note: "faq-app"
28306
+ },
28307
+ himi_feed: {
28308
+ screenName: "groups.screens.centralFeed",
28309
+ module: "groups",
28310
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:34 (registered component list)",
28311
+ note: "Himi feed rides the Groups social feed (tier5 himi-branded-lite-feed); RN equivalent is the groups central feed"
28312
+ },
28313
+ himi_food_order: {
28314
+ screenName: "restaurants.orders.OrderDetailsScreen",
28315
+ module: "restaurants",
28316
+ rn: "@wix/wix-one-app-restaurants-member@1.13.713 [wix-private/wix-one-app-restaurants-member] moduleJsons/module.admin.json:11 (registered component list)",
28317
+ note: "restaurants-member"
28318
+ },
28319
+ himi_food_orders: {
28320
+ screenName: "restaurants.orders.MyOrdersHistoryScreen",
28321
+ module: "restaurants",
28322
+ rn: "@wix/wix-one-app-restaurants-member@1.13.713 [wix-private/wix-one-app-restaurants-member] src/module.ts:73",
28323
+ note: "restaurants-member"
28324
+ },
28325
+ himi_form: {
28326
+ screenName: "forms.standaloneFormRenderer",
28327
+ module: "forms",
28328
+ rn: "@wix/wix-one-app-forms@1.30.1257 [wix-private/mobile-modules] moduleJsons/module.admin.json:11 (registered component list)",
28329
+ note: "Closest: standalone form renderer (wix-one-app-forms)"
28330
+ },
28331
+ himi_forms: {
28332
+ rn: null,
28333
+ why: "No RN member forms list screen (forms.* list screens are owner)"
28334
+ },
28335
+ himi_forum: {
28336
+ screenName: "forum.screens.Forum",
28337
+ module: "forum",
28338
+ rn: "@wix/wix-one-app-forum@1.5231.326 [wix-private/wix-one-app-forum] moduleJsons/module.admin.json:34 (registered component list)",
28339
+ note: "forum"
28340
+ },
28341
+ himi_forum_post: {
28342
+ screenName: "forum.screens.PostScreenV2",
28343
+ module: "forum",
28344
+ rn: "@wix/wix-one-app-forum@1.5231.326 [wix-private/wix-one-app-forum] moduleJsons/module.admin.json:16 (registered component list)",
28345
+ note: "forum"
28346
+ },
28347
+ himi_galleries: {
28348
+ screenName: "progallery.screen.Galleries",
28349
+ module: "progallery",
28350
+ rn: "@wix/wix-one-app-pro-gallery@1.1031.538 [wix-private/mobile-modules] moduleJsons/module.admin.json:5 (registered component list)",
28351
+ note: "pro-gallery"
28352
+ },
28353
+ himi_gallery: {
28354
+ screenName: "progallery.screen.Gallery",
28355
+ module: "progallery",
28356
+ rn: "@wix/wix-one-app-pro-gallery@1.1031.538 [wix-private/mobile-modules] moduleJsons/module.admin.json:7 (registered component list)",
28357
+ note: "pro-gallery"
28358
+ },
28359
+ himi_gift_card: {
28360
+ rn: null,
28361
+ why: "No RN member gift-card screen"
28362
+ },
28363
+ himi_gift_cards: {
28364
+ rn: null,
28365
+ why: "No RN member gift-card screen (ecomPlatform gift-card screens are owner-side)"
28366
+ },
28367
+ himi_group: {
28368
+ screenName: "groups.screens.groupView",
28369
+ module: "groups",
28370
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:71 (registered component list)",
28371
+ note: "groups features/group-view/group-view.feature.ts:8"
28372
+ },
28373
+ himi_group_about: {
28374
+ screenName: "groups.screens.aboutTab",
28375
+ module: "groups",
28376
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:73 (registered component list)",
28377
+ note: "groups"
28378
+ },
28379
+ himi_groups: {
28380
+ screenName: "groups.screens.groupsList",
28381
+ module: "groups",
28382
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:65 (registered component list)",
28383
+ note: "groups"
28384
+ },
28385
+ himi_invoice: {
28386
+ screenName: "invoices.published-invoice",
28387
+ module: "invoices",
28388
+ rn: "@wix/wix-invoices-mobile@1.69932.1813 [wix-private/financials-mobile-falcon] moduleJsons/module.admin.json:45 (registered component list)",
28389
+ note: "Published invoice view (srcV2/constants/components.ts:11)"
28390
+ },
28391
+ himi_invoices: {
28392
+ rn: null,
28393
+ why: "RN member side has no invoices list screen (invoices module screens are owner screens)"
28394
+ },
28395
+ himi_loyalty: {
28396
+ screenName: "loyalty.screens.MyRewards",
28397
+ module: "loyalty",
28398
+ rn: "@wix/wix-one-app-loyalty@1.783.927 [wix-private/mobile-modules] src/constants/screenIds.ts:23",
28399
+ note: "loyalty member rewards"
28400
+ },
28401
+ himi_loyalty_reward: {
28402
+ screenName: "loyalty.screens.RedeemPoints",
28403
+ module: "loyalty",
28404
+ rn: "@wix/wix-one-app-loyalty@1.783.927 [wix-private/mobile-modules] src/constants/screenIds.ts:24",
28405
+ note: "Closest: redeem flow for a reward"
28406
+ },
28407
+ himi_member: {
28408
+ screenName: "membersArea.MemberProfileScreen",
28409
+ module: "membersArea",
28410
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:40",
28411
+ note: "members-area"
28412
+ },
28413
+ himi_member_programs: {
28414
+ screenName: "wix-one-app-achievements.UserChallengesScreen",
28415
+ module: "wix-one-app-achievements",
28416
+ rn: "@wix/wix-one-app-achievements@1.21546.1862 [wix-private/wix-one-app-achievements] moduleJsons/module.admin.json:75 (registered component list)",
28417
+ note: "achievements: the member's own programs"
28418
+ },
28419
+ himi_members: {
28420
+ screenName: "membersArea.MembersScreen",
28421
+ module: "membersArea",
28422
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:3",
28423
+ note: "members-area"
28424
+ },
28425
+ himi_menu: {
28426
+ screenName: "restaurants.orders.MenuScreen",
28427
+ module: "restaurants",
28428
+ rn: "@wix/wix-one-app-restaurants-member@1.13.713 [wix-private/wix-one-app-restaurants-member] moduleJsons/module.admin.json:6 (registered component list)",
28429
+ note: "restaurants-member online ordering menu"
28430
+ },
28431
+ himi_menu_item: {
28432
+ screenName: "restaurants.orders.DishScreen",
28433
+ module: "restaurants",
28434
+ rn: "@wix/wix-one-app-restaurants-member@1.13.713 [wix-private/wix-one-app-restaurants-member] moduleJsons/module.admin.json:7 (registered component list)",
28435
+ note: "restaurants-member"
28436
+ },
28437
+ himi_my_events: {
28438
+ screenName: "wix.events.MyEvents",
28439
+ module: "wix",
28440
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:51",
28441
+ note: "wix-one-events"
28442
+ },
28443
+ himi_my_groups: {
28444
+ screenName: "groups.screens.groupListByUser",
28445
+ module: "groups",
28446
+ rn: "@wix/mobile-apps-groups@2.859.0 [wix-private/mobile-apps-groups] moduleJsons/module.admin.json:32 (registered component list)",
28447
+ note: "groups"
28448
+ },
28449
+ himi_my_subscriptions: {
28450
+ screenName: "memberships.screens.MySubscriptions",
28451
+ module: "memberships",
28452
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:21 (registered component list)",
28453
+ note: "memberships"
28454
+ },
28455
+ himi_new_message: {
28456
+ screenName: "chat.group-chat.new-chat-member-selection",
28457
+ module: "chat",
28458
+ rn: "@wix/mobile-apps-inbox@1.0.2106 [wix-private/mobile-modules] src/chatroom/group-chatroom/screens/index.ts:9",
28459
+ note: "Closest: new chat member picker (mobile-apps-inbox)"
28460
+ },
28461
+ himi_notif_settings: {
28462
+ screenName: "notifications.screens.siteNotificationsSettings",
28463
+ module: "notifications",
28464
+ rn: "@wix/wix-one-app-notifications@1.1745.730 [wix-private/mobile-modules] moduleJsons/module.admin.json:7 (registered component list)",
28465
+ note: "branded-app src/Constants.ts:50"
28466
+ },
28467
+ himi_notifications: {
28468
+ screenName: "notifications.screens.notificationsList",
28469
+ module: "notifications",
28470
+ rn: "@wix/wix-one-app-notifications@1.1745.730 [wix-private/mobile-modules] moduleJsons/module.admin.json:5 (registered component list)",
28471
+ note: "branded-app src/Constants.ts:49"
28472
+ },
28473
+ himi_order: {
28474
+ screenName: "wix.ecomPlatform.MyOrder",
28475
+ module: "wix",
28476
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:3",
28477
+ note: "ecom-platform member order"
28478
+ },
28479
+ himi_orders: {
28480
+ screenName: "wix.ecomPlatform.MyOrders",
28481
+ module: "wix",
28482
+ rn: "@wix/wix-one-app-ecom-platform@1.27.2235 [wix-private/mobile-modules] src/storesAPI.ts:4",
28483
+ note: "ecom-platform"
28484
+ },
28485
+ himi_photo_album: {
28486
+ screenName: "photoalbums.AlbumGallery",
28487
+ module: "photoalbums",
28488
+ rn: "@wix/wix-one-photo-albums@1.1112.610 [wix-private/mobile-modules] moduleJsons/module.admin.json:19 (registered component list)",
28489
+ note: "photo-albums"
28490
+ },
28491
+ himi_place_summary: {
28492
+ rn: null,
28493
+ why: "Himi host-embeddable summary tile; no RN equivalent"
28494
+ },
28495
+ himi_plan: {
28496
+ screenName: "memberships.screens.PlanCheckout",
28497
+ module: "memberships",
28498
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:16 (registered component list)",
28499
+ note: "Closest: plan tap leads to checkout; RN has no plan detail screen other than memberships.screens.PlanDetailsLink (link handler)"
28500
+ },
28501
+ himi_plans: {
28502
+ screenName: "memberships.screens.plansListMember",
28503
+ module: "memberships",
28504
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:11 (registered component list)",
28505
+ note: "memberships"
28506
+ },
28507
+ himi_podcast: {
28508
+ screenName: "podcasts.episodeDetailsPageScreen",
28509
+ module: "podcasts",
28510
+ rn: "@wix/wix-mobile-podcasts@1.5.531 [wix-private/mobile-modules] moduleJsons/module.admin.json:8 (registered component list)",
28511
+ note: "wix-mobile-podcasts"
28512
+ },
28513
+ himi_podcasts: {
28514
+ screenName: "podcasts.episodesPageScreen",
28515
+ module: "podcasts",
28516
+ rn: "@wix/wix-mobile-podcasts@1.5.531 [wix-private/mobile-modules] moduleJsons/module.admin.json:7 (registered component list)",
28517
+ note: "wix-mobile-podcasts"
28518
+ },
28519
+ himi_portfolio: {
28520
+ screenName: "portfolio.Projects",
28521
+ module: "portfolio",
28522
+ rn: "@wix/wix-one-app-portfolio@1.24.628 [wix-private/mobile-modules] moduleJsons/module.admin.json:19 (registered component list)",
28523
+ note: "portfolio member projects"
28524
+ },
28525
+ himi_portfolio_project: {
28526
+ screenName: "portfolio.PreviewItems",
28527
+ module: "portfolio",
28528
+ rn: "@wix/wix-one-app-portfolio@1.24.628 [wix-private/mobile-modules] moduleJsons/module.admin.json:18 (registered component list)",
28529
+ note: "Closest: project items preview"
28530
+ },
28531
+ himi_product: {
28532
+ screenName: "wix.stores.ProductViewScreen",
28533
+ module: "wix",
28534
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:11",
28535
+ note: "Storefront product page (storesAPI.ts:11)",
28536
+ view: {
28537
+ src: 10,
28538
+ endpoint: "ec",
28539
+ evid: 212,
28540
+ fields: {
28541
+ id: "$route.id",
28542
+ pageName: "product_view",
28543
+ origin: "memberView"
28544
+ }
28545
+ },
28546
+ viewRn: "@wix/wix-store-merchant-app@3.11212.3637 src/features/front/bi/index.ts:52-80 storeDataRendered, from ProductViewScreen.tsx:1274 on mount"
28547
+ },
28548
+ himi_program: {
28549
+ screenName: "wix-one-app-achievements.MemberChallengeScreen",
28550
+ module: "wix-one-app-achievements",
28551
+ rn: "@wix/wix-one-app-achievements@1.21546.1862 [wix-private/wix-one-app-achievements] moduleJsons/module.admin.json:37 (registered component list)",
28552
+ note: "achievements"
28553
+ },
28554
+ himi_programs: {
28555
+ screenName: "wix-one-app-achievements.MemberChallengesWixScreen",
28556
+ module: "wix-one-app-achievements",
28557
+ rn: "@wix/wix-one-app-achievements@1.21546.1862 [wix-private/wix-one-app-achievements] moduleJsons/module.admin.json:7 (registered component list)",
28558
+ note: "Online programs list (achievements)"
28559
+ },
28560
+ himi_reservations: {
28561
+ screenName: "tableReservations.member.ReservationDetailsScreen",
28562
+ module: "tableReservations",
28563
+ rn: "@wix/wix-one-app-table-reservations-member@1.0.963 [wix-private/table-reservations-mobile] src/module-api/identifiers.ts:9",
28564
+ note: "Closest: RN has no member reservations list screen; this is the reservation details screen"
28565
+ },
28566
+ himi_reserve: {
28567
+ rn: null,
28568
+ why: 'RN member table reservations registers only CompleteRequestReservationScreen, ReservationDetailsScreen, ReservationSummaryScreen + section components; booking a table runs in the section/webview, no "reserve" screen'
28569
+ },
28570
+ himi_review: {
28571
+ screenName: "reviews.screens.reviewView",
28572
+ module: "reviews",
28573
+ rn: "@wix/wix-one-app-reviews@1.66.195 [wix-private/wix-one-app-reviews] moduleJsons/module.admin.json:8 (registered component list)",
28574
+ note: "reviews"
28575
+ },
28576
+ himi_reviews: {
28577
+ screenName: "reviews.screens.reviewsList",
28578
+ module: "reviews",
28579
+ rn: "@wix/wix-one-app-reviews@1.66.195 [wix-private/wix-one-app-reviews] moduleJsons/module.admin.json:7 (registered component list)",
28580
+ note: "reviews"
28581
+ },
28582
+ himi_rsvp: {
28583
+ screenName: "wix.events.RegistrationForm",
28584
+ module: "wix",
28585
+ rn: "@wix/wix-one-events@1.53.1743 [wix-private/wix-one-events] src/screen-ids.js:30",
28586
+ note: "wix-one-events registration form"
28587
+ },
28588
+ himi_saved: {
28589
+ rn: null,
28590
+ why: "No RN saved/bookmarked blog posts screen"
28591
+ },
28592
+ himi_saved_products: {
28593
+ screenName: "wix.stores.WishlistScreen",
28594
+ module: "wix",
28595
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:163",
28596
+ note: "store-merchant-app storesAPI.ts:163"
28597
+ },
28598
+ himi_service: {
28599
+ screenName: "wix.bookings.member.catalog.ServiceDetails",
28600
+ module: "wix",
28601
+ rn: "@wix/bookings-mobile-member@1.2394.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:39 (registered component list)",
28602
+ note: "SERVICE_DETAILS_COMPONENT_ID (wix-one-bookings-member UpcomingServicesSrv.ts:136 showModal)",
28603
+ view: {
28604
+ src: 16,
28605
+ endpoint: "wixboost-ugc",
28606
+ evid: 560,
28607
+ fields: {
28608
+ is_owner: "false"
28609
+ }
28610
+ },
28611
+ viewRn: "@wix/wix-one-bookings-member@1.27055.0 UpcomingServicesSrv.ts:141-148 bookingsServicesPageView; RN sends no service id (fires on the list tap); platform/referralInfo/type not reproduced"
28612
+ },
28613
+ himi_services: {
28614
+ screenName: "wix.bookings.member.catalog.ServicesList",
28615
+ module: "wix",
28616
+ rn: "@wix/bookings-mobile-member@1.2394.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:37 (registered component list)",
28617
+ note: "bookings-mobile-member catalog"
28618
+ },
28619
+ himi_shop: {
28620
+ screenName: "wix.stores.MemberStoresFullScreen",
28621
+ module: "wix",
28622
+ rn: "@wix/wix-store-merchant-app@3.11212.3637 [wix-private/mobile-modules] src/storesAPI.ts:14",
28623
+ note: "Storefront full screen (store-merchant-app storesAPI.ts:14). Shop as a builder tab is wix.memberView.asScreen with wix.stores.MemberStoresScreen section"
28624
+ },
28625
+ himi_sign_in: {
28626
+ screenName: "wix.branded.auth.LoginRoot",
28627
+ module: "wix",
28628
+ rn: "@wix/branded-apps-members-login@0.747.843 [wix-private/mobile-modules] moduleJsons/module.admin.json:5 (registered component list)",
28629
+ note: "Branded members login root (branded-apps-members-login)"
28630
+ },
28631
+ himi_steps: {
28632
+ rn: null,
28633
+ why: "Himi step-counter (motion) screen; no RN equivalent"
28634
+ },
28635
+ himi_subscription: {
28636
+ screenName: "memberships.screens.SubscriptionOverview",
28637
+ module: "memberships",
28638
+ rn: "@wix/wix-one-app-memberships@3.33.1738 [wix-private/memberships-mobile] moduleJsons/module.admin.json:33 (registered component list)",
28639
+ note: "memberships"
28640
+ },
28641
+ himi_time: {
28642
+ screenName: "wix.bookings.member.bookings.AvailabilityCalendar",
28643
+ module: "wix",
28644
+ rn: "@wix/bookings-mobile-member@1.2394.0 [wix-private/bookings-mobile] moduleJsons/module.admin.json:10 (registered component list)",
28645
+ note: "MEMBER_AVAILABILITY_CALENDAR_COMPONENT_ID (wix-one-bookings-member UpcomingServicesSrv.ts:67)"
28646
+ },
28647
+ himi_video: {
28648
+ screenName: "vod.VideoDetailsScreen",
28649
+ module: "vod",
28650
+ rn: "@wix/wix-one-app-vod@1.472.532 [wix-private/wix-one-app-vod] moduleJsons/module.admin.json:7 (registered component list)",
28651
+ note: "vod"
28652
+ },
28653
+ himi_video_channel: {
28654
+ screenName: "vod.ChannelDetailsScreen",
28655
+ module: "vod",
28656
+ rn: "@wix/wix-one-app-vod@1.472.532 [wix-private/wix-one-app-vod] moduleJsons/module.admin.json:8 (registered component list)",
28657
+ note: "vod"
28658
+ },
28659
+ himi_videos: {
28660
+ screenName: "vod.HomeScreen",
28661
+ module: "vod",
28662
+ rn: "@wix/wix-one-app-vod@1.472.532 [wix-private/wix-one-app-vod] moduleJsons/module.admin.json:5 (registered component list)",
28663
+ note: "wix-one-app-vod"
28664
+ },
28665
+ himi_view_profile: {
28666
+ screenName: "membersArea.MemberProfileScreen",
28667
+ module: "membersArea",
28668
+ rn: "@wix/wix-one-app-members-area@1.30.803 [wix-private/wix-members-area-mobile] src/constants/component-ids.ts:40",
28669
+ note: "branded-app src/Constants.ts:51"
28670
+ },
28671
+ himi_wallet: {
28672
+ rn: null,
28673
+ why: "No RN member saved-payment-methods (My Wallet) screen in any manifest"
28674
+ },
28675
+ himi_whats_new: {
28676
+ rn: null,
28677
+ why: "Spaces account-level What's New (bundle wix-spaces-whats-new); no RN member/branded equivalent (owners.new-releases.screen is owner-only app release notes)"
28678
+ }
28679
+ }
28680
+ }
28681
+ };
28682
+ }
28683
+ });
28684
+
27193
28685
  // ../../core/dev-server/src/app-config.ts
27194
28686
  import { createHash as createHash8 } from "node:crypto";
28687
+ function servedScreenMap(app) {
28688
+ const entries = screen_map_default.apps[app];
28689
+ if (!entries) return void 0;
28690
+ const out2 = {};
28691
+ for (const [id, e2] of Object.entries(entries)) {
28692
+ if (e2.rn === null) out2[id] = { screenName: id, module: "himi" };
28693
+ else if (e2.screenName && e2.module) out2[id] = { screenName: e2.screenName, module: e2.module, ...e2.view ? { view: e2.view } : {} };
28694
+ }
28695
+ return out2;
28696
+ }
27195
28697
  function deriveTelemetryConfig(app) {
27196
28698
  const cfg = { enabled: true, samplingRate: 1 };
27197
28699
  const prodTelemetry = app.environments?.prod?.telemetry;
@@ -27212,6 +28714,8 @@ function deriveTelemetryConfig(app) {
27212
28714
  cfg.frog.mobileAppId = app.provisionedMsid ? wp.bi.mobileAppId.replaceAll("{msid}", app.provisionedMsid) : wp.bi.mobileAppId;
27213
28715
  }
27214
28716
  cfg.frog.lv = wp.bi.lv || "1.0.0|Himi";
28717
+ const screenMap = servedScreenMap(app.name);
28718
+ if (screenMap) cfg.frog.screenMap = screenMap;
27215
28719
  }
27216
28720
  }
27217
28721
  if (wp?.real?.monitoring === true) {
@@ -27449,6 +28953,7 @@ var init_app_config = __esm({
27449
28953
  init_auth_gate_screen();
27450
28954
  init_preview_surfaces();
27451
28955
  init_wix_push_links();
28956
+ init_screen_map();
27452
28957
  SHARED_WIX_SENTRY_DSN = "https://5dfa4f23057c43149b6219c07d177472@sentry.io/84240";
27453
28958
  NAV_OVERRIDES = {
27454
28959
  reference: {
@@ -29029,14 +30534,25 @@ var init_stream_policy = __esm({
29029
30534
  });
29030
30535
 
29031
30536
  // ../../core/ts/src/locale.ts
30537
+ function primarySubtag(tag) {
30538
+ return (tag ?? "").trim().split(/[-_]/)[0].toLowerCase();
30539
+ }
29032
30540
  function isSupportedLocale(tag) {
29033
30541
  return SUPPORTED_LOCALES.includes(tag);
29034
30542
  }
29035
- var SUPPORTED_LOCALES;
30543
+ function coerceSupportedLocale(tag) {
30544
+ const t2 = primarySubtag(tag);
30545
+ return isSupportedLocale(t2) ? t2 : void 0;
30546
+ }
30547
+ function isRTL(locale) {
30548
+ return RTL_LOCALES.has(primarySubtag(locale));
30549
+ }
30550
+ var SUPPORTED_LOCALES, RTL_LOCALES;
29036
30551
  var init_locale = __esm({
29037
30552
  "../../core/ts/src/locale.ts"() {
29038
30553
  init_define_HHP_CATALOG();
29039
30554
  SUPPORTED_LOCALES = ["en", "he", "es"];
30555
+ RTL_LOCALES = /* @__PURE__ */ new Set(["he", "ar", "fa", "ur"]);
29040
30556
  }
29041
30557
  });
29042
30558
 
@@ -36030,8 +37546,8 @@ function browserIsRTL() {
36030
37546
  }
36031
37547
  return false;
36032
37548
  }
36033
- function ambientIsRTL(isRTL) {
36034
- return isRTL ?? browserIsRTL();
37549
+ function ambientIsRTL(isRTL2) {
37550
+ return isRTL2 ?? browserIsRTL();
36035
37551
  }
36036
37552
  function layoutIsRTL(ctx) {
36037
37553
  return ctx.layoutRTL ?? ambientIsRTL(ctx.isRTL);
@@ -36773,7 +38289,7 @@ function variantStyle(variant, tk, baseBackground) {
36773
38289
  return {};
36774
38290
  }
36775
38291
  }
36776
- function makeModStyle(tk, isRTL = () => false, glassPreview = false, scheme = "light") {
38292
+ function makeModStyle(tk, isRTL2 = () => false, glassPreview = false, scheme = "light") {
36777
38293
  return function modStyle(mods) {
36778
38294
  if (!mods) return {};
36779
38295
  if (mods.hidden === true) return { display: "none" };
@@ -36894,7 +38410,7 @@ function makeModStyle(tk, isRTL = () => false, glassPreview = false, scheme = "l
36894
38410
  const ox = pick(mods.offsetX, mods.offset_x);
36895
38411
  const oy = pick(mods.offsetY, mods.offset_y);
36896
38412
  if (ox != null && ox !== 0 || oy != null && oy !== 0) {
36897
- const tx = ox != null && ox !== 0 && isRTL() ? -ox : ox ?? 0;
38413
+ const tx = ox != null && ox !== 0 && isRTL2() ? -ox : ox ?? 0;
36898
38414
  const tr2 = `translate(${tx}px, ${oy ?? 0}px)`;
36899
38415
  s2.transform = s2.transform ? `${s2.transform} ${tr2}` : tr2;
36900
38416
  }
@@ -44762,11 +46278,11 @@ var init_pdf = __esm({
44762
46278
  var DESCRIPTORS = __webpack_require__3(3724);
44763
46279
  var definePropertyModule = __webpack_require__3(4913);
44764
46280
  var createPropertyDescriptor = __webpack_require__3(6980);
44765
- module.exports = DESCRIPTORS ? function(object14, key3, value2) {
44766
- return definePropertyModule.f(object14, key3, createPropertyDescriptor(1, value2));
44767
- } : function(object14, key3, value2) {
44768
- object14[key3] = value2;
44769
- return object14;
46281
+ module.exports = DESCRIPTORS ? function(object15, key3, value2) {
46282
+ return definePropertyModule.f(object15, key3, createPropertyDescriptor(1, value2));
46283
+ } : function(object15, key3, value2) {
46284
+ object15[key3] = value2;
46285
+ return object15;
44770
46286
  };
44771
46287
  },
44772
46288
  /***/
@@ -44785,9 +46301,9 @@ var init_pdf = __esm({
44785
46301
  var DESCRIPTORS = __webpack_require__3(3724);
44786
46302
  var definePropertyModule = __webpack_require__3(4913);
44787
46303
  var createPropertyDescriptor = __webpack_require__3(6980);
44788
- module.exports = function(object14, key3, value2) {
44789
- if (DESCRIPTORS) definePropertyModule.f(object14, key3, createPropertyDescriptor(0, value2));
44790
- else object14[key3] = value2;
46304
+ module.exports = function(object15, key3, value2) {
46305
+ if (DESCRIPTORS) definePropertyModule.f(object15, key3, createPropertyDescriptor(0, value2));
46306
+ else object15[key3] = value2;
44791
46307
  };
44792
46308
  },
44793
46309
  /***/
@@ -45077,9 +46593,9 @@ var init_pdf = __esm({
45077
46593
  6706(module, __unused_webpack_exports, __webpack_require__3) {
45078
46594
  var uncurryThis = __webpack_require__3(9504);
45079
46595
  var aCallable = __webpack_require__3(9306);
45080
- module.exports = function(object14, key3, method) {
46596
+ module.exports = function(object15, key3, method) {
45081
46597
  try {
45082
- return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object14, key3)[method]));
46598
+ return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object15, key3)[method]));
45083
46599
  } catch (error) {
45084
46600
  }
45085
46601
  };
@@ -46047,13 +47563,13 @@ var init_pdf = __esm({
46047
47563
  var $Object = Object;
46048
47564
  var ObjectPrototype = $Object.prototype;
46049
47565
  module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O2) {
46050
- var object14 = toObject(O2);
46051
- if (hasOwn(object14, IE_PROTO)) return object14[IE_PROTO];
46052
- var constructor = object14.constructor;
46053
- if (isCallable(constructor) && object14 instanceof constructor) {
47566
+ var object15 = toObject(O2);
47567
+ if (hasOwn(object15, IE_PROTO)) return object15[IE_PROTO];
47568
+ var constructor = object15.constructor;
47569
+ if (isCallable(constructor) && object15 instanceof constructor) {
46054
47570
  return constructor.prototype;
46055
47571
  }
46056
- return object14 instanceof $Object ? ObjectPrototype : null;
47572
+ return object15 instanceof $Object ? ObjectPrototype : null;
46057
47573
  };
46058
47574
  },
46059
47575
  /***/
@@ -46069,8 +47585,8 @@ var init_pdf = __esm({
46069
47585
  var indexOf = __webpack_require__3(9617).indexOf;
46070
47586
  var hiddenKeys = __webpack_require__3(421);
46071
47587
  var push = uncurryThis([].push);
46072
- module.exports = function(object14, names2) {
46073
- var O2 = toIndexedObject(object14);
47588
+ module.exports = function(object15, names2) {
47589
+ var O2 = toIndexedObject(object15);
46074
47590
  var i2 = 0;
46075
47591
  var result = [];
46076
47592
  var key3;
@@ -47513,13 +49029,13 @@ var init_pdf = __esm({
47513
49029
  }
47514
49030
  return call(reviver, holder, name, val, context);
47515
49031
  };
47516
- var internalizeProperty = function(object14, key3, value2) {
49032
+ var internalizeProperty = function(object15, key3, value2) {
47517
49033
  if (DESCRIPTORS) {
47518
- var descriptor = getOwnPropertyDescriptor(object14, key3);
49034
+ var descriptor = getOwnPropertyDescriptor(object15, key3);
47519
49035
  if (descriptor && !descriptor.configurable) return;
47520
49036
  }
47521
- if (value2 === void 0) delete object14[key3];
47522
- else createProperty(object14, key3, value2);
49037
+ if (value2 === void 0) delete object15[key3];
49038
+ else createProperty(object15, key3, value2);
47523
49039
  };
47524
49040
  var Node2 = function(value2, end, source, nodes2) {
47525
49041
  this.value = value2;
@@ -47564,7 +49080,7 @@ var init_pdf = __esm({
47564
49080
  var source = this.source;
47565
49081
  var i2 = this.index + 1;
47566
49082
  var expectKeypair = false;
47567
- var object14 = {};
49083
+ var object15 = {};
47568
49084
  var nodes2 = {};
47569
49085
  var closed = false;
47570
49086
  while (i2 < source.length) {
@@ -47581,7 +49097,7 @@ var init_pdf = __esm({
47581
49097
  i2 = this.skip(IS_WHITESPACE, i2);
47582
49098
  result = this.fork(i2).parse();
47583
49099
  createProperty(nodes2, key3, result);
47584
- createProperty(object14, key3, result.value);
49100
+ createProperty(object15, key3, result.value);
47585
49101
  i2 = this.until([",", "}"], result.end);
47586
49102
  var chr = at2(source, i2);
47587
49103
  if (chr === ",") {
@@ -47594,7 +49110,7 @@ var init_pdf = __esm({
47594
49110
  }
47595
49111
  }
47596
49112
  if (!closed) throw new SyntaxError2("Unterminated object at: " + i2);
47597
- return this.node(OBJECT, object14, this.index, i2, nodes2);
49113
+ return this.node(OBJECT, object15, this.index, i2, nodes2);
47598
49114
  },
47599
49115
  array: function() {
47600
49116
  var source = this.source;
@@ -69702,8 +71218,8 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
69702
71218
  return this.#getOutlineTwoPoints(points);
69703
71219
  }
69704
71220
  const outline = new Float32Array(this.#top.length + 24 + this.#bottom.length);
69705
- let N2 = top.length;
69706
- for (let i2 = 0; i2 < N2; i2 += 2) {
71221
+ let N5 = top.length;
71222
+ for (let i2 = 0; i2 < N5; i2 += 2) {
69707
71223
  if (isNaN(top[i2])) {
69708
71224
  outline[i2] = outline[i2 + 1] = NaN;
69709
71225
  continue;
@@ -69711,20 +71227,20 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
69711
71227
  outline[i2] = top[i2];
69712
71228
  outline[i2 + 1] = top[i2 + 1];
69713
71229
  }
69714
- N2 = this.#getOutlineEnd(outline, N2);
71230
+ N5 = this.#getOutlineEnd(outline, N5);
69715
71231
  for (let i2 = bottom.length - 6; i2 >= 6; i2 -= 6) {
69716
71232
  for (let j2 = 0; j2 < 6; j2 += 2) {
69717
71233
  if (isNaN(bottom[i2 + j2])) {
69718
- outline[N2] = outline[N2 + 1] = NaN;
69719
- N2 += 2;
71234
+ outline[N5] = outline[N5 + 1] = NaN;
71235
+ N5 += 2;
69720
71236
  continue;
69721
71237
  }
69722
- outline[N2] = bottom[i2 + j2];
69723
- outline[N2 + 1] = bottom[i2 + j2 + 1];
69724
- N2 += 2;
71238
+ outline[N5] = bottom[i2 + j2];
71239
+ outline[N5 + 1] = bottom[i2 + j2 + 1];
71240
+ N5 += 2;
69725
71241
  }
69726
71242
  }
69727
- this.#getOutlineStart(outline, N2);
71243
+ this.#getOutlineStart(outline, N5);
69728
71244
  return this.newFreeDrawOutline(outline, points, this.#box, this.#scaleFactor, this.#innerMargin, this.#isLTR);
69729
71245
  }
69730
71246
  #getOutlineTwoPoints(points) {
@@ -71763,9 +73279,9 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
71763
73279
  return -1;
71764
73280
  }
71765
73281
  static #findContours(buf, width, height, threshold) {
71766
- const N2 = buf.length;
71767
- const types2 = new Int32Array(N2);
71768
- for (let i2 = 0; i2 < N2; i2++) {
73282
+ const N5 = buf.length;
73283
+ const types2 = new Int32Array(N5);
73284
+ for (let i2 = 0; i2 < N5; i2++) {
71769
73285
  types2[i2] = buf[i2] <= threshold ? 1 : 0;
71770
73286
  }
71771
73287
  for (let i2 = 1; i2 < height - 1; i2++) {
@@ -71931,8 +73447,8 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
71931
73447
  for (let i2 = 0; i2 < 256; i2++) {
71932
73448
  rangeValues[i2] = Math.exp(i2 ** 2 / sigmaR2);
71933
73449
  }
71934
- const N2 = buf.length;
71935
- const out2 = new Uint8Array(N2);
73450
+ const N5 = buf.length;
73451
+ const out2 = new Uint8Array(N5);
71936
73452
  const histogram = new Uint32Array(256);
71937
73453
  for (let i2 = 0; i2 < height; i2++) {
71938
73454
  for (let j2 = 0; j2 < width; j2++) {
@@ -71970,8 +73486,8 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
71970
73486
  return histogram;
71971
73487
  }
71972
73488
  static #toUint8(buf) {
71973
- const N2 = buf.length;
71974
- const out2 = new Uint8ClampedArray(N2 >> 2);
73489
+ const N5 = buf.length;
73490
+ const out2 = new Uint8ClampedArray(N5 >> 2);
71975
73491
  let max = -Infinity;
71976
73492
  let min = Infinity;
71977
73493
  for (let i2 = 0, ii2 = out2.length; i2 < ii2; i2++) {
@@ -79348,7 +80864,7 @@ var init_pdf_worker_min = __esm({
79348
80864
  return e3;
79349
80865
  };
79350
80866
  }, 4644(e2, t2, n2) {
79351
- var a2, r3, s2, i2 = n2(7811), o2 = n2(3724), l2 = n2(4576), f2 = n2(4901), c2 = n2(34), h2 = n2(9297), u2 = n2(6955), m2 = n2(6823), p2 = n2(6699), d2 = n2(6840), g2 = n2(2106), b2 = n2(1625), w2 = n2(2787), j2 = n2(2967), k2 = n2(8227), y2 = n2(3392), q3 = n2(1181), v2 = q3.enforce, S2 = q3.get, x2 = l2.Int8Array, C2 = x2 && x2.prototype, T2 = l2.Uint8ClampedArray, O2 = T2 && T2.prototype, R2 = x2 && w2(x2), D2 = C2 && w2(C2), H2 = Object.prototype, M2 = l2.TypeError, N2 = k2("toStringTag"), _2 = y2("TYPED_ARRAY_TAG"), E2 = "TypedArrayConstructor", z5 = i2 && !!j2 && "Opera" !== u2(l2.opera), L2 = false, U2 = { Int8Array: 1, Uint8Array: 1, Uint8ClampedArray: 1, Int16Array: 2, Uint16Array: 2, Int32Array: 4, Uint32Array: 4, Float32Array: 4, Float64Array: 8 }, W2 = { BigInt64Array: 8, BigUint64Array: 8 }, getTypedArrayConstructor = function(e3) {
80867
+ var a2, r3, s2, i2 = n2(7811), o2 = n2(3724), l2 = n2(4576), f2 = n2(4901), c2 = n2(34), h2 = n2(9297), u2 = n2(6955), m2 = n2(6823), p2 = n2(6699), d2 = n2(6840), g2 = n2(2106), b2 = n2(1625), w2 = n2(2787), j2 = n2(2967), k2 = n2(8227), y2 = n2(3392), q3 = n2(1181), v2 = q3.enforce, S2 = q3.get, x2 = l2.Int8Array, C2 = x2 && x2.prototype, T2 = l2.Uint8ClampedArray, O2 = T2 && T2.prototype, R2 = x2 && w2(x2), D2 = C2 && w2(C2), H2 = Object.prototype, M2 = l2.TypeError, N5 = k2("toStringTag"), _2 = y2("TYPED_ARRAY_TAG"), E2 = "TypedArrayConstructor", z5 = i2 && !!j2 && "Opera" !== u2(l2.opera), L2 = false, U2 = { Int8Array: 1, Uint8Array: 1, Uint8ClampedArray: 1, Int16Array: 2, Uint16Array: 2, Int32Array: 4, Uint32Array: 4, Float32Array: 4, Float64Array: 8 }, W2 = { BigInt64Array: 8, BigUint64Array: 8 }, getTypedArrayConstructor = function(e3) {
79352
80868
  var t3 = w2(e3);
79353
80869
  if (c2(t3)) {
79354
80870
  var n3 = S2(t3);
@@ -79372,9 +80888,9 @@ var init_pdf_worker_min = __esm({
79372
80888
  if (z5) for (a2 in U2) l2[a2] && j2(l2[a2].prototype, D2);
79373
80889
  }
79374
80890
  z5 && w2(O2) !== D2 && j2(O2, D2);
79375
- if (o2 && !h2(D2, N2)) {
80891
+ if (o2 && !h2(D2, N5)) {
79376
80892
  L2 = true;
79377
- g2(D2, N2, { configurable: true, get: function() {
80893
+ g2(D2, N5, { configurable: true, get: function() {
79378
80894
  return c2(this) ? this[_2] : void 0;
79379
80895
  } });
79380
80896
  for (a2 in U2) l2[a2] && p2(l2[a2].prototype, _2, a2);
@@ -80874,7 +82390,7 @@ var init_pdf_worker_min = __esm({
80874
82390
  return e3;
80875
82391
  } });
80876
82392
  }, 3110(e2, t2, n2) {
80877
- var a2 = n2(6518), r3 = n2(7751), s2 = n2(9565), i2 = n2(9504), o2 = n2(9039), l2 = n2(4376), f2 = n2(4901), c2 = n2(34), h2 = n2(2360), u2 = n2(5810), m2 = n2(757), p2 = n2(2195), d2 = n2(1240), g2 = n2(9617).includes, b2 = n2(9297), w2 = n2(655), j2 = n2(8235), k2 = n2(3392), y2 = n2(4495), q3 = n2(7819), v2 = String, S2 = TypeError, x2 = r3("JSON", "stringify"), C2 = r3("BigInt"), T2 = i2("".valueOf), O2 = i2(true.valueOf), R2 = C2 && i2(C2.prototype.valueOf), D2 = i2(/./.exec), H2 = i2("".charAt), M2 = i2("".charCodeAt), N2 = i2("".replace), _2 = i2("".slice), E2 = i2([].push), z5 = i2([].pop), L2 = i2(1.1.toString), U2 = /[\uD800-\uDFFF]/g, W2 = /^[\uD800-\uDBFF]$/, X2 = /^[\uDC00-\uDFFF]$/, K3 = /^\d+$/, G2 = k2(), V2 = k2(), $2 = k2(), Y2 = G2.length, J2 = V2.length, Q2 = !y2 || o2(function() {
82393
+ var a2 = n2(6518), r3 = n2(7751), s2 = n2(9565), i2 = n2(9504), o2 = n2(9039), l2 = n2(4376), f2 = n2(4901), c2 = n2(34), h2 = n2(2360), u2 = n2(5810), m2 = n2(757), p2 = n2(2195), d2 = n2(1240), g2 = n2(9617).includes, b2 = n2(9297), w2 = n2(655), j2 = n2(8235), k2 = n2(3392), y2 = n2(4495), q3 = n2(7819), v2 = String, S2 = TypeError, x2 = r3("JSON", "stringify"), C2 = r3("BigInt"), T2 = i2("".valueOf), O2 = i2(true.valueOf), R2 = C2 && i2(C2.prototype.valueOf), D2 = i2(/./.exec), H2 = i2("".charAt), M2 = i2("".charCodeAt), N5 = i2("".replace), _2 = i2("".slice), E2 = i2([].push), z5 = i2([].pop), L2 = i2(1.1.toString), U2 = /[\uD800-\uDFFF]/g, W2 = /^[\uD800-\uDBFF]$/, X2 = /^[\uDC00-\uDFFF]$/, K3 = /^\d+$/, G2 = k2(), V2 = k2(), $2 = k2(), Y2 = G2.length, J2 = V2.length, Q2 = !y2 || o2(function() {
80878
82394
  var e3 = r3("Symbol")("stringify detection");
80879
82395
  return "[null]" !== x2([e3]) || "{}" !== x2({ a: e3 }) || "{}" !== x2(Object(e3));
80880
82396
  }), Z2 = o2(function() {
@@ -80969,7 +82485,7 @@ var init_pdf_worker_min = __esm({
80969
82485
  return t4;
80970
82486
  }, n3);
80971
82487
  if ("string" != typeof y3) return y3;
80972
- Z2 && (y3 = N2(y3, U2, fixIllFormedJSON));
82488
+ Z2 && (y3 = N5(y3, U2, fixIllFormedJSON));
80973
82489
  if (!d3) return y3;
80974
82490
  for (var x3 = "", C3 = y3.length, T3 = 0; T3 < C3; T3++) {
80975
82491
  var O3 = H2(y3, T3);
@@ -83748,13 +85264,13 @@ var init_pdf_worker_min = __esm({
83748
85264
  255 !== e2[i2] && i2--;
83749
85265
  break;
83750
85266
  default:
83751
- const N2 = findNextFileMarker(e2, n2, i2 - 2, i2 - 3);
83752
- if (N2?.invalid) {
83753
- warn2("JpegImage.parse - unexpected data, current marker is: " + N2.invalid);
83754
- i2 = N2.offset;
85267
+ const N5 = findNextFileMarker(e2, n2, i2 - 2, i2 - 3);
85268
+ if (N5?.invalid) {
85269
+ warn2("JpegImage.parse - unexpected data, current marker is: " + N5.invalid);
85270
+ i2 = N5.offset;
83755
85271
  break;
83756
85272
  }
83757
- if (!N2 || i2 >= a2) {
85273
+ if (!N5 || i2 >= a2) {
83758
85274
  warn2("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");
83759
85275
  break e;
83760
85276
  }
@@ -84470,20 +85986,20 @@ var init_pdf_worker_min = __esm({
84470
85986
  }
84471
85987
  let S2 = 0, x2 = v2[0], C2 = v2[1], T2 = v2[2];
84472
85988
  w2.push([0, Util2.makeHexColor(x2, C2, T2)]);
84473
- let O2 = 1, R2 = v2[3], D2 = v2[4], H2 = v2[5], M2 = R2 - x2 + 1, N2 = D2 - C2 + 1, _2 = H2 - T2 + 1, E2 = R2 - x2 - 1, z5 = D2 - C2 - 1, L2 = H2 - T2 - 1;
85989
+ let O2 = 1, R2 = v2[3], D2 = v2[4], H2 = v2[5], M2 = R2 - x2 + 1, N5 = D2 - C2 + 1, _2 = H2 - T2 + 1, E2 = R2 - x2 - 1, z5 = D2 - C2 - 1, L2 = H2 - T2 - 1;
84474
85990
  for (let e3 = 2; e3 < g2; e3++) {
84475
85991
  const t3 = 3 * e3, n3 = v2[t3], a3 = v2[t3 + 1], r4 = v2[t3 + 2], s3 = e3 - S2;
84476
85992
  M2 = Math.min(M2, (n3 - x2 + 1) / s3);
84477
- N2 = Math.min(N2, (a3 - C2 + 1) / s3);
85993
+ N5 = Math.min(N5, (a3 - C2 + 1) / s3);
84478
85994
  _2 = Math.min(_2, (r4 - T2 + 1) / s3);
84479
85995
  E2 = Math.max(E2, (n3 - x2 - 1) / s3);
84480
85996
  z5 = Math.max(z5, (a3 - C2 - 1) / s3);
84481
85997
  L2 = Math.max(L2, (r4 - T2 - 1) / s3);
84482
- if (!(E2 <= M2 && z5 <= N2 && L2 <= _2)) {
85998
+ if (!(E2 <= M2 && z5 <= N5 && L2 <= _2)) {
84483
85999
  const e4 = Util2.makeHexColor(R2, D2, H2);
84484
86000
  w2.push([O2 / g2, e4]);
84485
86001
  M2 = n3 - R2 + 1;
84486
- N2 = a3 - D2 + 1;
86002
+ N5 = a3 - D2 + 1;
84487
86003
  _2 = r4 - H2 + 1;
84488
86004
  E2 = n3 - R2 - 1;
84489
86005
  z5 = a3 - D2 - 1;
@@ -84542,15 +86058,15 @@ var init_pdf_worker_min = __esm({
84542
86058
  this.bounds = a.slice();
84543
86059
  Util2.axialAlignedBoundingBox([c2, u2, h2, m2], p2, this.bounds);
84544
86060
  const d2 = this.bounds[2] - this.bounds[0], g2 = this.bounds[3] - this.bounds[1], b2 = MathClamp2(Math.ceil(d2), 1, _FunctionBasedShading.MAX_STEP_COUNT), w2 = MathClamp2(Math.ceil(g2), 1, _FunctionBasedShading.MAX_STEP_COUNT), j2 = b2 + 1, k2 = (w2 + 1) * j2, y2 = this.coords = new Float32Array(2 * k2), q3 = this.colors = new Uint8ClampedArray(4 * k2), { numComps: v2 } = o2, x2 = new Float32Array(2), C2 = getColorConversionBatchSize(k2, v2), T2 = new Float32Array(C2 * v2), O2 = (h2 - c2) / b2, R2 = (m2 - u2) / w2, D2 = O2 / 2, H2 = R2 / 2;
84545
- let M2 = 0, N2 = 0, _2 = 0, E2 = 0;
86061
+ let M2 = 0, N5 = 0, _2 = 0, E2 = 0;
84546
86062
  for (let e3 = 0; e3 <= w2; e3++) {
84547
86063
  const t3 = u2 + R2 * e3;
84548
86064
  x2[1] = e3 === w2 ? t3 - H2 : t3;
84549
86065
  for (let e4 = 0; e4 <= b2; e4++) {
84550
86066
  const n3 = c2 + O2 * e4;
84551
86067
  x2[0] = e4 === b2 ? n3 - D2 : n3;
84552
- f2(x2, 0, T2, N2);
84553
- N2 += v2;
86068
+ f2(x2, 0, T2, N5);
86069
+ N5 += v2;
84554
86070
  _2++;
84555
86071
  y2[M2] = n3;
84556
86072
  y2[M2 + 1] = t3;
@@ -84559,7 +86075,7 @@ var init_pdf_worker_min = __esm({
84559
86075
  if (_2 === C2) {
84560
86076
  o2.getRgbItems(T2, _2, q3, E2, 1);
84561
86077
  E2 += 4 * _2;
84562
- N2 = _2 = 0;
86078
+ N5 = _2 = 0;
84563
86079
  }
84564
86080
  }
84565
86081
  }
@@ -106331,9 +107847,9 @@ var init_pdf_worker_min = __esm({
106331
107847
  M2.cMap = t3;
106332
107848
  M2.vertical = M2.cMap.vertical;
106333
107849
  }
106334
- const N2 = await this.extractDataStructures(t2, M2);
106335
- this.extractWidths(t2, e2, N2);
106336
- const _2 = new Font(h2.name, d2, N2, this.options);
107850
+ const N5 = await this.extractDataStructures(t2, M2);
107851
+ this.extractWidths(t2, e2, N5);
107852
+ const _2 = new Font(h2.name, d2, N5, this.options);
106337
107853
  if (_2.missingFile && !_2.systemFontInfo && !c2 && this.options.useSystemFonts) {
106338
107854
  const e3 = getStandardFontName(h2.name), t3 = getFontSubstitution(this.systemFontCache, this.idFactory, this.options.standardFontDataUrl, h2.name, e3, r3);
106339
107855
  if (t3) {
@@ -117946,15 +119462,15 @@ var init_pdf_worker_min = __esm({
117946
119462
  H2 = [-l2[3], l2[0], w2, j2];
117947
119463
  D2 = [-l2[3], l2[2] - T2];
117948
119464
  }
117949
- const N2 = ["q", `${M2.join(" ")} 0 0 cm`, `${H2.join(" ")} re W n`, "BT", `${getPdfColor(i2, true)}`, `0 Tc /Helv ${numberToString(R2)} Tf`];
117950
- N2.push(`${D2.join(" ")} Td (${escapeString(v2[0])}) Tj`);
119465
+ const N5 = ["q", `${M2.join(" ")} 0 0 cm`, `${H2.join(" ")} re W n`, "BT", `${getPdfColor(i2, true)}`, `0 Tc /Helv ${numberToString(R2)} Tf`];
119466
+ N5.push(`${D2.join(" ")} Td (${escapeString(v2[0])}) Tj`);
117951
119467
  const _2 = numberToString(C2);
117952
119468
  for (let e3 = 1, t3 = v2.length; e3 < t3; e3++) {
117953
119469
  const t4 = v2[e3];
117954
- N2.push(`0 -${_2} Td (${escapeString(t4)}) Tj`);
119470
+ N5.push(`0 -${_2} Td (${escapeString(t4)}) Tj`);
117955
119471
  }
117956
- N2.push("ET", "Q");
117957
- const E2 = N2.join("\n"), z5 = new Dict(t2);
119472
+ N5.push("ET", "Q");
119473
+ const E2 = N5.join("\n"), z5 = new Dict(t2);
117958
119474
  z5.set("FormType", 1);
117959
119475
  z5.setIfName("Subtype", "Form");
117960
119476
  z5.setIfName("Type", "XObject");
@@ -120096,13 +121612,13 @@ var init_pdf_worker_min = __esm({
120096
121612
  return { opList: null, separateForm: false, separateCanvas: false };
120097
121613
  }));
120098
121614
  const M2 = await Promise.all(H2);
120099
- let N2 = false, _2 = false;
121615
+ let N5 = false, _2 = false;
120100
121616
  for (const { opList: e3, separateForm: t3, separateCanvas: n3 } of M2) {
120101
121617
  v2.addOpList(e3);
120102
- N2 ||= t3;
121618
+ N5 ||= t3;
120103
121619
  _2 ||= n3;
120104
121620
  }
120105
- v2.flush(true, { form: N2, canvas: _2 });
121621
+ v2.flush(true, { form: N5, canvas: _2 });
120106
121622
  return { length: v2.totalLength };
120107
121623
  }
120108
121624
  async extractTextContent({ handler: e2, task: t2, includeMarkedContent: n2, disableNormalization: a2, sink: r3, intersector: s2 = null }) {
@@ -123794,9 +125310,9 @@ function ensureConfettiRuntime() {
123794
125310
  if (el2.dataset.himalayaConfettiDone === "1") return;
123795
125311
  el2.dataset.himalayaConfettiDone = "1";
123796
125312
  const w2 = el2.clientWidth || 200;
123797
- const N2 = 26;
125313
+ const N5 = 26;
123798
125314
  const parts = [];
123799
- for (let i2 = 0; i2 < N2; i2++) {
125315
+ for (let i2 = 0; i2 < N5; i2++) {
123800
125316
  const p2 = document.createElement("div");
123801
125317
  p2.style.cssText = `position:absolute;top:38%;left:${(20 + rnd() * 60).toFixed(0)}%;width:8px;height:8px;border-radius:${rnd() > 0.5 ? "50%" : "1px"};background:${COLORS[i2 % COLORS.length]};will-change:transform,opacity`;
123802
125318
  el2.appendChild(p2);
@@ -126461,6 +127977,8 @@ function renderInner(node, ctx) {
126461
127977
  // RFC 0065 §5 — a basic shape (fill / gradient / dashed stroke).
126462
127978
  case "Shape":
126463
127979
  return /* @__PURE__ */ jsx12(ShapeNode, { props: props2, ctx, wrap });
127980
+ case "QrCode":
127981
+ return /* @__PURE__ */ jsx12(QrCodeNode, { props: props2, ctx, wrap });
126464
127982
  // RFC 0063 — Wix Ricos rich content (never a WebView; binding + fallback inside).
126465
127983
  case "RichContent":
126466
127984
  return /* @__PURE__ */ jsx12(RichContentNode, { props: props2, ctx, wrap, nodeId: resolvedComponentId(node.id, ctx) ?? "" });
@@ -126697,7 +128215,7 @@ function reportUnknownComponent(ctx, pkg, type2) {
126697
128215
  function unknownComponentShowsDeveloperLabel(ctx) {
126698
128216
  return ctx.debugUnknownComponents ?? ctx.previewSurface != null;
126699
128217
  }
126700
- var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, substituteItemDeep, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, 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, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, ECHO_WINDOW_MS, heldPageIndex, LiveWindowMeasured, LiveWindowPage, PagingNode, 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, CAROUSEL_SETTLE_MS, railScrollLeft, carouselScrollLeft, scrollCarouselTo, CarouselNode, BannerNode, 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, rowRenderers, railRowFrame, renderRailRow, RowAnchors, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
128218
+ var AppearanceActionContext, rowValue, loadPdfFetch, WebViewBridgeHost2, useIsomorphicLayoutEffect, GridColumnsContext, GridBoundList, GRID_SPAN_ALL, ResponsiveGrid, SPLIT_EXPANDED_MIN_WIDTH, SPLIT_COLUMN_GAP, ResponsiveSplitView, ABSOLUTE_URL_RE, appearKeyframesInjected, valueSwapKeyframesInjected, NUMERIC_TEXT, shimmerKeyframesInjected, pressStylesInjected, REVEAL_ON_FOCUS_ATTR, FOCUS_RING_CSS, focusStylesInjected, HLIST_CHILD_CSS, hListStylesInjected, listAnimateRuntimeInstalled, transitionKeyframesInjected, countUpRuntimeInjected, MEASURE_PREFIX, measureRuntimeInjected, revealRuntimeInjected, AMBIENT_HOST_STYLE, AmbientMotionBox, vectorAnimStylesInjected, scrollProgressRuntimeInjected, confettiRuntimeInjected, lottieRuntimeInjected, LOTTIE_RUNTIME_ATTRIBUTES, lottieAnims, riveRuntimeInjected, gradientKeyframesInjected, parallaxRuntimeInjected, spinKeyframesInjected, marqueeKeyframesInjected, alignItems, zJustifyItems, hAlignItems, bodyFont, kids2, rowKidCtx, rowKids, staggeredKids, asTextL10n, asFinalTextL10n, asBoundText, useBoundString, asBoundCopy, useBoundCopy, InterpolatedTextView, txt, selectFragmentCase, fragmentValueHash, fragmentSlotContent, FragmentSlotNode, RichContentEditorNode, MediaFieldNode, WorkerSubtreeNode, RichContentNode, substituteItemDeep, resolveItemDeep2, resolveRowAction2, resolveSwipeActions, resolveModBindings, resolvedComponentId, directServiceBindings, withRootStyle, ReactiveDirectScalars, HiddenGate, ExitPresence, StatefulSectionNode, KEYBOARD_INPUT_MODES, AUTOCAPITALIZE_VALUES, ENTER_KEY_HINTS, AUTOGROW_CEILING, EditableField, MENU_ANCHOR_CONTROL, MenuNode, MENU_LONG_PRESS_MS, menuOpensOnLongPress, LoadMoreSentinel, FieldErrorNode, FormView, MediaSlotProvider, MEDIA_ITEM_BINDABLE, MediaPlayerView, VideoNode, PdfDocumentCanvas, PdfViewNode, WebViewNode, InteractivePicker, InteractiveDatePicker, InteractiveSearchField, InteractiveStepper, NODE_EXTRAS_TARGET, 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, TAP_ACTIVATOR_ATTR, TAP_GROUP_ATTR, NESTED_CONTROL_SELECTOR, VISUALLY_HIDDEN, NAME_SKIP_SELECTOR, activatorNameObservers, ACTIVATOR_STATE_ATTRS, controlNode, ToggleNode, SliderNode, SelectionControlNode, TabsNode, SegmentedControlNode, DisclosureGroupNode, GridNode, SplitViewNode, REVEAL_RELEASE_MS, REVEAL_FADE_MS, REVEAL_BUFFER, revealProgress, countWords, RevealText, TextNode, ImageNode, ANIMATION_LEAF, LottieNode, RiveNode, AvatarNode, IconNode, EMPTY_STATE_SPACING, EmptyStateNode, ERROR_STATE_VARIANTS, ERROR_STATE_SPACING, ErrorStateNode, ButtonNode, OtpInputNode, ProgressBarNode, SnackbarNode, ACTIVITY_DEFAULT_NAME, ACTIVITY_RING_ARC, ActivityIndicatorNode, NATIVELY_TABBABLE, BottomSheetNode, BOTTOM_DRAWER_HOST_STACK_EVENT, ModalBottomSheetNode, BottomDrawerNode, PRESENTED_OVERLAY_ATTR, TooltipNode, PopoverNode, ChipsInputNode, ChipNode, TableNode, GaugeRing, GaugeNode, RATING_METRICS, ratingMetrics, RatingNode, AvatarStripNode, CHART_STROKE_CYCLE, chartStrokeAt, chartBarCenter, ChartNode, donutSliceOpacity, DonutChartNode, QrCodeNode, ShapeNode, LegendMarker, LegendNode, cellAlign, dataTableProbe, DataTableNode, voiceNoteState, voiceNoteDelivery, VOICE_NOTE_DEFAULT_BARS, clampBarCount, VoiceNoteNode, TimelineNode, ECHO_WINDOW_MS, heldPageIndex, LiveWindowMeasured, LiveWindowPage, PagingNode, 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, CAROUSEL_SETTLE_MS, railScrollLeft, carouselScrollLeft, scrollCarouselTo, CarouselNode, BannerNode, 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, rowRenderers, railRowFrame, renderRailRow, RowAnchors, reportedUnknownComponents, UnknownComponentNode, WebRenderer, ScrollIntoViewNode;
126701
128219
  var init_renderNode = __esm({
126702
128220
  "../../core/web-renderer/src/renderNode.tsx"() {
126703
128221
  "use strict";
@@ -126720,6 +128238,7 @@ var init_renderNode = __esm({
126720
128238
  init_bindings();
126721
128239
  init_tokens();
126722
128240
  init_message_format();
128241
+ init_qr_code();
126723
128242
  init_validation();
126724
128243
  init_formBag();
126725
128244
  init_form_bag();
@@ -128723,7 +130242,7 @@ var init_renderNode = __esm({
128723
130242
  const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
128724
130243
  const label3 = typeof props2.title === "string" && props2.title ? props2.title : "PDF document";
128725
130244
  const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
128726
- const object14 = typeof window === "undefined" ? /* @__PURE__ */ jsx12("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx12(React17.Suspense, { fallback: /* @__PURE__ */ jsx12("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx12(
130245
+ const object15 = typeof window === "undefined" ? /* @__PURE__ */ jsx12("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx12(React17.Suspense, { fallback: /* @__PURE__ */ jsx12("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx12(
128727
130246
  PdfDocumentCanvas,
128728
130247
  {
128729
130248
  src: loadSrc ?? src,
@@ -128737,7 +130256,7 @@ var init_renderNode = __esm({
128737
130256
  style: documentStyle
128738
130257
  }
128739
130258
  ) });
128740
- if (!showPageControls && !zoomable && !allowShare) return object14;
130259
+ if (!showPageControls && !zoomable && !allowShare) return object15;
128741
130260
  const C2 = ctx.color;
128742
130261
  const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
128743
130262
  const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
@@ -128755,7 +130274,7 @@ var init_renderNode = __esm({
128755
130274
  const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
128756
130275
  const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
128757
130276
  return /* @__PURE__ */ jsxs10("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
128758
- object14,
130277
+ object15,
128759
130278
  /* @__PURE__ */ jsxs10(
128760
130279
  "div",
128761
130280
  {
@@ -131201,6 +132720,69 @@ var init_renderNode = __esm({
131201
132720
  ] })
131202
132721
  ] }) });
131203
132722
  });
132723
+ QrCodeNode = withExtras("QrCodeNode", ({ props: props2, ctx, wrap }) => {
132724
+ const hasPath = typeof props2.valuePath === "string" && props2.valuePath !== "";
132725
+ const bound2 = useResolvedScalar(hasPath ? props2.valuePath : void 0, ctx);
132726
+ const boundText = bound2 == null ? "" : String(bound2);
132727
+ const value2 = hasPath && boundText !== "" ? boundText : typeof props2.value === "string" ? props2.value : "";
132728
+ const level = qrErrorCorrection(props2.errorCorrection);
132729
+ const matrix = React17.useMemo(() => {
132730
+ if (!value2) return null;
132731
+ try {
132732
+ return encodeQrCode(value2, level);
132733
+ } catch {
132734
+ return null;
132735
+ }
132736
+ }, [value2, level]);
132737
+ const side2 = typeof props2.size === "number" && props2.size > 0 ? props2.size : QR_DEFAULT_SIZE;
132738
+ const quietZone = typeof props2.quietZone === "number" && props2.quietZone >= 0 ? Math.floor(props2.quietZone) : QR_DEFAULT_QUIET_ZONE;
132739
+ const colorGiven = typeof props2.color === "string" && props2.color !== "";
132740
+ const backgroundGiven = typeof props2.background === "string" && props2.background !== "";
132741
+ const colors = resolveQrColors({
132742
+ color: ctx.color(colorGiven ? props2.color : QR_DEFAULT_COLOR_TOKEN, ""),
132743
+ background: ctx.color(backgroundGiven ? props2.background : QR_DEFAULT_BACKGROUND_TOKEN, ""),
132744
+ colorGiven,
132745
+ backgroundGiven,
132746
+ dark: ctx.scheme === "dark"
132747
+ });
132748
+ const path2 = React17.useMemo(() => {
132749
+ if (!matrix) return "";
132750
+ let d2 = "";
132751
+ for (let y2 = 0; y2 < matrix.size; y2++) {
132752
+ const row2 = matrix.modules[y2];
132753
+ for (let x2 = 0; x2 < matrix.size; ) {
132754
+ if (!row2[x2]) {
132755
+ x2++;
132756
+ continue;
132757
+ }
132758
+ const start = x2;
132759
+ while (x2 < matrix.size && row2[x2]) x2++;
132760
+ d2 += `M${start + quietZone} ${y2 + quietZone}h${x2 - start}v1h${start - x2}z`;
132761
+ }
132762
+ }
132763
+ return d2;
132764
+ }, [matrix, quietZone]);
132765
+ const dim = matrix ? matrix.size + quietZone * 2 : 21 + quietZone * 2;
132766
+ return /* @__PURE__ */ jsxs10(
132767
+ "svg",
132768
+ {
132769
+ role: "img",
132770
+ "aria-label": QR_DEFAULT_ACCESSIBILITY_LABEL,
132771
+ "data-qr-version": matrix?.version,
132772
+ "data-qr-placeholder": matrix ? void 0 : "",
132773
+ ...{ [SELF_RENDERED_LEAF]: true },
132774
+ width: side2,
132775
+ height: side2,
132776
+ viewBox: `0 0 ${dim} ${dim}`,
132777
+ shapeRendering: "crispEdges",
132778
+ style: { display: "block", flex: "none", background: colors.background, ...wrap },
132779
+ children: [
132780
+ /* @__PURE__ */ jsx12("rect", { width: dim, height: dim, fill: colors.background }),
132781
+ matrix ? /* @__PURE__ */ jsx12("path", { d: path2, fill: colors.color }) : /* @__PURE__ */ jsx12("g", { fill: colors.color, fillOpacity: 0.25, children: [[0, 0], [14, 0], [0, 14]].map(([x2, y2]) => /* @__PURE__ */ jsx12("rect", { x: x2 + quietZone, y: y2 + quietZone, width: 7, height: 7 }, `${x2}-${y2}`)) })
132782
+ ]
132783
+ }
132784
+ );
132785
+ });
131204
132786
  ShapeNode = withExtras("ShapeNode", ({ props: props2, ctx, wrap }) => {
131205
132787
  const ref = React17.useRef(null);
131206
132788
  const [box, setBox] = React17.useState(null);
@@ -133540,6 +135122,7 @@ __export(render_descriptor_exports, {
133540
135122
  buildRenderTree: () => buildRenderTree,
133541
135123
  clientEnvFor: () => clientEnvFor,
133542
135124
  collectNativeOnly: () => collectNativeOnly,
135125
+ fitViewportToContent: () => fitViewportToContent,
133543
135126
  isMissingPlaywrightExecutable: () => isMissingPlaywrightExecutable,
133544
135127
  launchPngBrowser: () => launchPngBrowser,
133545
135128
  nodeHidden: () => nodeHidden,
@@ -133622,12 +135205,12 @@ function renderSchemeFor(requested, tokens2) {
133622
135205
  if (requested === "dark" || requested === "light") return requested;
133623
135206
  return kitColorScheme(tokens2?.kit) === "dark" ? "dark" : "light";
133624
135207
  }
133625
- function clientEnvFor(scheme, width, isRTL) {
135208
+ function clientEnvFor(scheme, width, isRTL2) {
133626
135209
  return {
133627
135210
  scheme,
133628
135211
  reduceMotion: false,
133629
135212
  sizeClass: width === void 0 ? "compact" : sizeClassFromWidth(width),
133630
- isRTL: isRTL === true,
135213
+ isRTL: isRTL2 === true,
133631
135214
  // #4674 — a server render has no software keyboard: `$env:keyboardVisible` draws the resting screen.
133632
135215
  keyboardVisible: false
133633
135216
  };
@@ -133816,7 +135399,7 @@ function composeStickyTree(payload, header, footer) {
133816
135399
  if (footer) children.push(footer);
133817
135400
  return { id: "screen", type: "ScreenChrome", children };
133818
135401
  }
133819
- async function renderDescriptorWeb(descriptor, tokens2, scheme, wantPng, services = null, width, isRTL, idiomContext, assetBaseUrl) {
135402
+ async function renderDescriptorWeb(descriptor, tokens2, scheme, wantPng, services = null, width, isRTL2, idiomContext, assetBaseUrl) {
133820
135403
  const desc = descriptor;
133821
135404
  const tooDeep = rawJsonDepthFinding(descriptor);
133822
135405
  if (tooDeep) return { renderable: false, reason: `depth_budget_exceeded: ${tooDeep.message}` };
@@ -133833,7 +135416,7 @@ async function renderDescriptorWeb(descriptor, tokens2, scheme, wantPng, service
133833
135416
  const provider = services ? new FakeServiceProvider(services) : null;
133834
135417
  const stickyHeader = isSduiNode(desc.stickyHeader) ? desc.stickyHeader : void 0;
133835
135418
  const stickyFooter = isSduiNode(desc.stickyFooter) ? desc.stickyFooter : void 0;
133836
- const clientEnv = clientEnvFor(scheme, width, isRTL);
135419
+ const clientEnv = clientEnvFor(scheme, width, isRTL2);
133837
135420
  const treeOf = (node, path2, prov) => buildRenderTree(node, path2, prov, void 0, true, clientEnv);
133838
135421
  const renderTree = composeStickyTree(
133839
135422
  treeOf(payload, "$", null) ?? void 0,
@@ -133857,7 +135440,7 @@ async function renderDescriptorWeb(descriptor, tokens2, scheme, wantPng, service
133857
135440
  stickyHeader || stickyFooter ? { stickyHeader, stickyFooter } : void 0,
133858
135441
  // #4497 — the agent fast loop is a dev tool: an unknown component type keeps its
133859
135442
  // developer label here (a shipped web app renders nothing for it).
133860
- { ...isRTL ? { isRTL: true } : {}, ...idiomContext ? { idiomContext } : {}, ...assetBaseUrl ? { assetBaseUrl } : {}, debugUnknownComponents: true }
135443
+ { ...isRTL2 ? { isRTL: true } : {}, ...idiomContext ? { idiomContext } : {}, ...assetBaseUrl ? { assetBaseUrl } : {}, debugUnknownComponents: true }
133861
135444
  );
133862
135445
  } catch (err) {
133863
135446
  return {
@@ -133871,7 +135454,7 @@ async function renderDescriptorWeb(descriptor, tokens2, scheme, wantPng, service
133871
135454
  const nativeOnly = collectNativeOnly(renderTree);
133872
135455
  if (nativeOnly.length) result.nativeOnly = nativeOnly;
133873
135456
  if (wantPng) {
133874
- const png = await renderPng(html, scheme, width, isRTL, tokens2, idiomContext, !!stickyFooter);
135457
+ const png = await renderPng(html, scheme, width, isRTL2, tokens2, idiomContext, !!stickyFooter);
133875
135458
  if (png) result.pngBase64 = png;
133876
135459
  else result.pngUnavailable = true;
133877
135460
  }
@@ -133888,8 +135471,8 @@ async function withRetry(op, attempts = 2) {
133888
135471
  }
133889
135472
  throw lastErr;
133890
135473
  }
133891
- async function renderPng(html, scheme, width, isRTL, tokens2, idiomContext, hasStickyFooter) {
133892
- const out2 = await renderPngBatch([{ html, scheme, width, isRTL, tokens: tokens2, idiomContext, hasStickyFooter }]);
135474
+ async function renderPng(html, scheme, width, isRTL2, tokens2, idiomContext, hasStickyFooter) {
135475
+ const out2 = await renderPngBatch([{ html, scheme, width, isRTL: isRTL2, tokens: tokens2, idiomContext, hasStickyFooter }]);
133893
135476
  return out2?.[0] ?? null;
133894
135477
  }
133895
135478
  function setPngFontCss(source) {
@@ -133907,6 +135490,14 @@ async function pngPageHtml(item) {
133907
135490
  const fill = item.hasStickyFooter ? "html,body{height:100%}" : "";
133908
135491
  return `<!doctype html><html${item.isRTL ? ' dir="rtl"' : ""}><head><meta charset="utf-8"><style>${faces}${fill}body{font-family:${HOST_PAGE_FONT}}</style></head><body style="margin:0">${item.html}</body></html>`;
133909
135492
  }
135493
+ async function fitViewportToContent(page) {
135494
+ const viewport = page.viewportSize();
135495
+ if (!viewport) return;
135496
+ const height = await page.evaluate(
135497
+ () => globalThis.document.documentElement.scrollHeight
135498
+ );
135499
+ if (height > viewport.height) await page.setViewportSize({ width: viewport.width, height });
135500
+ }
133910
135501
  function isMissingPlaywrightExecutable(error) {
133911
135502
  const message2 = error?.message ?? "";
133912
135503
  return /Executable doesn't exist at/.test(message2) && /playwright install/.test(message2);
@@ -134012,6 +135603,7 @@ async function renderPngBatch(items) {
134012
135603
  try {
134013
135604
  await page.setContent(await pngPageHtml(it2), { waitUntil: "load" });
134014
135605
  await stabilizePngPage(page, it2.scheme);
135606
+ if (it2.hasStickyFooter) await fitViewportToContent(page);
134015
135607
  const buf = await page.screenshot({ fullPage: true });
134016
135608
  out2.push(Buffer.from(buf).toString("base64"));
134017
135609
  } finally {
@@ -139213,8 +140805,8 @@ function sha256hex(b2) {
139213
140805
  function stableStringify(value2) {
139214
140806
  if (value2 === null || typeof value2 !== "object") return JSON.stringify(value2);
139215
140807
  if (Array.isArray(value2)) return "[" + value2.map(stableStringify).join(",") + "]";
139216
- const object14 = value2;
139217
- return "{" + Object.keys(object14).sort().map((key3) => JSON.stringify(key3) + ":" + stableStringify(object14[key3])).join(",") + "}";
140808
+ const object15 = value2;
140809
+ return "{" + Object.keys(object15).sort().map((key3) => JSON.stringify(key3) + ":" + stableStringify(object15[key3])).join(",") + "}";
139218
140810
  }
139219
140811
  function manifestContent(m2) {
139220
140812
  const {
@@ -142831,6 +144423,7 @@ __export(build_exports2, {
142831
144423
  declaresHostProvidedIdentity: () => declaresHostProvidedIdentity,
142832
144424
  explicitMinRuntimeVersion: () => explicitMinRuntimeVersion,
142833
144425
  gitSha: () => gitSha,
144426
+ idiomContextForRender: () => idiomContextForRender,
142834
144427
  isMonorepoCheckout: () => isMonorepoCheckout,
142835
144428
  l10nLintOptions: () => l10nLintOptions,
142836
144429
  linkableScreenIdsFrom: () => linkableScreenIdsFrom,
@@ -143406,6 +144999,10 @@ function readTokensForLint(preloaded) {
143406
144999
  return void 0;
143407
145000
  }
143408
145001
  }
145002
+ function idiomContextForRender(platform, surface) {
145003
+ if (platform !== "ios" && platform !== "android") return void 0;
145004
+ return { ...IDIOM_CONTEXTS[platform], surface: surface ?? "phone" };
145005
+ }
143409
145006
  async function buildFromLoaded(preloaded, dest, opts = {}) {
143410
145007
  const app = preloaded.name;
143411
145008
  const assertComponentMinVersions = (screenId, descriptor) => {
@@ -143448,17 +145045,21 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
143448
145045
  const linkable = /* @__PURE__ */ new Set();
143449
145046
  let bakedAppConfig;
143450
145047
  const lintTokens = collect2?.lint || collect2?.render ? readTokensForLint(preloaded) : void 0;
143451
- const renderTokens = lintTokens && withServedFontFaces(lintTokens, preloaded.dir);
145048
+ const facedTokens = lintTokens && withServedFontFaces(lintTokens, preloaded.dir);
145049
+ const idiomPolicy = config.idiom;
145050
+ const renderTokens = facedTokens && idiomPolicy !== void 0 ? { ...facedTokens, idiomPolicy } : facedTokens;
143452
145051
  const allowedComponents = await loadAllowedComponents(preloaded.dir);
143453
145052
  const nativeActions = discoverNativeActions(preloaded.dir);
143454
145053
  const appWorkerActions = appWorkerActionsFor(preloaded.module.config, tier5Dir);
143455
145054
  const appWorkerServices = appWorkerServicesFor(preloaded.module.config, tier5Dir);
143456
145055
  const appServices = appServicesContextFor(preloaded.dir, preloaded.module.config, tier5Dir);
143457
145056
  const renderScheme = collect2?.render?.scheme === "dark" ? "dark" : "light";
145057
+ const renderPlatform2 = collect2?.render?.platform;
145058
+ const renderIdiom = idiomContextForRender(renderPlatform2, collect2?.render?.surface);
143458
145059
  const compareScheme = collect2?.render?.compareScheme;
143459
145060
  const renderCompare = async (descriptor, services) => {
143460
145061
  if (!compareScheme || compareScheme === renderScheme) return {};
143461
- const rr2 = await renderDescriptorWeb(descriptor, renderTokens, compareScheme, false, services, collect2?.render?.width, collect2?.render?.rtl === true, void 0, base);
145062
+ const rr2 = await renderDescriptorWeb(descriptor, renderTokens, compareScheme, false, services, collect2?.render?.width, collect2?.render?.rtl === true, renderIdiom, base);
143462
145063
  return { compare: { scheme: compareScheme, renderable: rr2.renderable, ...rr2.html ? { html: rr2.html } : {}, ...rr2.reason ? { reason: rr2.reason } : {} } };
143463
145064
  };
143464
145065
  const LIVE_LOAD_BUDGET_MS = 3e4;
@@ -143916,7 +145517,7 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
143916
145517
  }
143917
145518
  if (collect2?.render && (!collect2.render.screenId || collect2.render.screenId === screenId)) {
143918
145519
  const { services, liveCalls, liveReturned, liveErrors, mockCalls, mockUnserved, mockBootFailed, liveFailed } = await renderServicesFor(bundleName, descriptor, screenId);
143919
- const rr2 = await renderDescriptorWeb(descriptor, renderTokens, renderScheme, collect2.render.png === true, services, collect2.render.width, collect2.render.rtl === true, void 0, base);
145520
+ const rr2 = await renderDescriptorWeb(descriptor, renderTokens, renderScheme, collect2.render.png === true, services, collect2.render.width, collect2.render.rtl === true, renderIdiom, base);
143920
145521
  renders.push({ screenId, scheme: renderScheme, ...rr2, ...await renderCompare(descriptor, services), ...collect2.render.dumpState && services ? { serviceState: services } : {}, ...liveCalls ? { liveCalls } : {}, ...liveReturned !== void 0 ? { liveReturned } : {}, ...liveFailed ? { liveFailed } : {}, ...liveErrors ? { liveErrors } : {}, ...mockCalls ? { mockCalls, mockUnserved } : {}, ...mockBootFailed ? { mockBootFailed } : {} });
143921
145522
  }
143922
145523
  }
@@ -143959,7 +145560,7 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
143959
145560
  lint.push({ screenId: wantedRender, ok: report4.ok, issues: report4.issues });
143960
145561
  }
143961
145562
  const { services, liveCalls, liveReturned, liveErrors, mockCalls, mockUnserved, mockBootFailed, liveFailed } = await renderServicesFor(bundleName, descriptor, wantedRender);
143962
- const rr2 = await renderDescriptorWeb(descriptor, renderTokens, renderScheme, collect2.render.png === true, services, collect2.render.width, collect2.render.rtl === true, void 0, base);
145563
+ const rr2 = await renderDescriptorWeb(descriptor, renderTokens, renderScheme, collect2.render.png === true, services, collect2.render.width, collect2.render.rtl === true, renderIdiom, base);
143963
145564
  renders.push({ screenId: wantedRender, scheme: renderScheme, ...rr2, ...await renderCompare(descriptor, services), ...collect2.render.dumpState && services ? { serviceState: services } : {}, ...liveCalls ? { liveCalls } : {}, ...liveReturned !== void 0 ? { liveReturned } : {}, ...liveFailed ? { liveFailed } : {}, ...liveErrors ? { liveErrors } : {}, ...mockCalls ? { mockCalls, mockUnserved } : {}, ...mockBootFailed ? { mockBootFailed } : {} });
143964
145565
  } else if (res.status === 422) {
143965
145566
  const finding2 = await depthRefusalOf(res);
@@ -144417,6 +146018,7 @@ var init_build3 = __esm({
144417
146018
  init_wix_bridge();
144418
146019
  init_wix_placeholders();
144419
146020
  init_render_descriptor();
146021
+ init_idiom();
144420
146022
  init_render_fonts();
144421
146023
  init_screen_crawl();
144422
146024
  init_icons();
@@ -144991,7 +146593,7 @@ var init_studio_page = __esm({
144991
146593
  });
144992
146594
 
144993
146595
  // ../../core/admin-web/src/utils/qr.ts
144994
- function rawDataModules(ver) {
146596
+ function rawDataModules2(ver) {
144995
146597
  let result = (16 * ver + 128) * ver + 64;
144996
146598
  if (ver >= 2) {
144997
146599
  const numAlign = Math.floor(ver / 7) + 2;
@@ -145002,32 +146604,32 @@ function rawDataModules(ver) {
145002
146604
  }
145003
146605
  function byteCapacity(ver) {
145004
146606
  const lenBits = ver < 10 ? 8 : 16;
145005
- return dataCodewords(ver) - Math.ceil((4 + lenBits) / 8);
146607
+ return dataCodewords2(ver) - Math.ceil((4 + lenBits) / 8);
145006
146608
  }
145007
146609
  function fitVersion(len) {
145008
- for (let v2 = 1; v2 <= QR_MAX_VERSION; v2++) if (byteCapacity(v2) >= len) return v2;
146610
+ for (let v2 = 1; v2 <= QR_MAX_VERSION2; v2++) if (byteCapacity(v2) >= len) return v2;
145009
146611
  return void 0;
145010
146612
  }
145011
- function rsDivisor(degree) {
146613
+ function rsDivisor2(degree) {
145012
146614
  const result = new Array(degree).fill(0);
145013
146615
  result[degree - 1] = 1;
145014
146616
  let root = 1;
145015
146617
  for (let i2 = 0; i2 < degree; i2++) {
145016
146618
  for (let j2 = 0; j2 < degree; j2++) {
145017
- result[j2] = gfMul(result[j2], root);
146619
+ result[j2] = gfMul2(result[j2], root);
145018
146620
  if (j2 + 1 < degree) result[j2] ^= result[j2 + 1];
145019
146621
  }
145020
- root = gfMul(root, 2);
146622
+ root = gfMul2(root, 2);
145021
146623
  }
145022
146624
  return result;
145023
146625
  }
145024
- function rsRemainder(data, degree) {
145025
- const divisor = rsDivisor(degree);
146626
+ function rsRemainder2(data, degree) {
146627
+ const divisor = rsDivisor2(degree);
145026
146628
  const res = new Array(degree).fill(0);
145027
146629
  for (const b2 of data) {
145028
146630
  const factor = b2 ^ res.shift();
145029
146631
  res.push(0);
145030
- for (let i2 = 0; i2 < degree; i2++) res[i2] ^= gfMul(divisor[i2], factor);
146632
+ for (let i2 = 0; i2 < degree; i2++) res[i2] ^= gfMul2(divisor[i2], factor);
145031
146633
  }
145032
146634
  return res;
145033
146635
  }
@@ -145039,7 +146641,7 @@ function encodeData(bytes2, ver) {
145039
146641
  push(4, 4);
145040
146642
  push(bytes2.length, ver < 10 ? 8 : 16);
145041
146643
  for (const b2 of bytes2) push(b2, 8);
145042
- const capacityBits = dataCodewords(ver) * 8;
146644
+ const capacityBits = dataCodewords2(ver) * 8;
145043
146645
  push(0, Math.min(4, capacityBits - bits.length));
145044
146646
  while (bits.length % 8 !== 0) bits.push(0);
145045
146647
  const out2 = [];
@@ -145048,7 +146650,7 @@ function encodeData(bytes2, ver) {
145048
146650
  for (let j2 = 0; j2 < 8; j2++) byte2 = byte2 << 1 | bits[i2 + j2];
145049
146651
  out2.push(byte2);
145050
146652
  }
145051
- for (let pad3 = 236; out2.length < dataCodewords(ver); pad3 ^= 236 ^ 17) out2.push(pad3);
146653
+ for (let pad3 = 236; out2.length < dataCodewords2(ver); pad3 ^= 236 ^ 17) out2.push(pad3);
145052
146654
  return out2;
145053
146655
  }
145054
146656
  function interleave(data, ver) {
@@ -145064,7 +146666,7 @@ function interleave(data, ver) {
145064
146666
  const blk = data.slice(off, off + len);
145065
146667
  off += len;
145066
146668
  blocks.push(blk);
145067
- eccs.push(rsRemainder(blk, eccLen));
146669
+ eccs.push(rsRemainder2(blk, eccLen));
145068
146670
  }
145069
146671
  const out2 = [];
145070
146672
  for (let i2 = 0; i2 < shortLen + 1; i2++) {
@@ -145076,7 +146678,7 @@ function interleave(data, ver) {
145076
146678
  for (let i2 = 0; i2 < eccLen; i2++) for (let b2 = 0; b2 < numBlocks; b2++) out2.push(eccs[b2][i2]);
145077
146679
  return out2;
145078
146680
  }
145079
- function alignmentPositions(ver) {
146681
+ function alignmentPositions2(ver) {
145080
146682
  if (ver === 1) return [];
145081
146683
  const num4 = Math.floor(ver / 7) + 2;
145082
146684
  const size = ver * 4 + 17;
@@ -145130,7 +146732,7 @@ function encodeQr(text13) {
145130
146732
  const bytes2 = [...new TextEncoder().encode(text13)];
145131
146733
  const version5 = fitVersion(bytes2.length);
145132
146734
  if (!version5) {
145133
- throw new RangeError(`QR payload too long: ${bytes2.length} bytes exceeds version ${QR_MAX_VERSION} at EC level L`);
146735
+ throw new RangeError(`QR payload too long: ${bytes2.length} bytes exceeds version ${QR_MAX_VERSION2} at EC level L`);
145134
146736
  }
145135
146737
  const codewords = interleave(encodeData(bytes2, version5), version5);
145136
146738
  const size = version5 * 4 + 17;
@@ -145156,8 +146758,8 @@ function encodeQr(text13) {
145156
146758
  set2(i2, 6, i2 % 2 === 0);
145157
146759
  set2(6, i2, i2 % 2 === 0);
145158
146760
  }
145159
- for (const ay of alignmentPositions(version5))
145160
- for (const ax of alignmentPositions(version5)) {
146761
+ for (const ay of alignmentPositions2(version5))
146762
+ for (const ax of alignmentPositions2(version5)) {
145161
146763
  if (ax === 6 && ay === 6 || ax === 6 && ay === size - 7 || ax === size - 7 && ay === 6) continue;
145162
146764
  for (let dy = -2; dy <= 2; dy++)
145163
146765
  for (let dx = -2; dx <= 2; dx++) set2(ax + dx, ay + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);
@@ -145232,15 +146834,15 @@ function applyVersion(m2, size, version5) {
145232
146834
  m2[b2][a2] = on4;
145233
146835
  }
145234
146836
  }
145235
- var ECC_PER_BLOCK_L, NUM_BLOCKS_L, QR_MAX_VERSION, totalCodewords, dataCodewords, EXP, LOG, gfMul, MASKS;
146837
+ var ECC_PER_BLOCK_L, NUM_BLOCKS_L, QR_MAX_VERSION2, totalCodewords, dataCodewords2, EXP, LOG, gfMul2, MASKS;
145236
146838
  var init_qr = __esm({
145237
146839
  "../../core/admin-web/src/utils/qr.ts"() {
145238
146840
  init_define_HHP_CATALOG();
145239
146841
  ECC_PER_BLOCK_L = [0, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28];
145240
146842
  NUM_BLOCKS_L = [0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8];
145241
- QR_MAX_VERSION = 20;
145242
- totalCodewords = (ver) => Math.floor(rawDataModules(ver) / 8);
145243
- dataCodewords = (ver) => totalCodewords(ver) - ECC_PER_BLOCK_L[ver] * NUM_BLOCKS_L[ver];
146843
+ QR_MAX_VERSION2 = 20;
146844
+ totalCodewords = (ver) => Math.floor(rawDataModules2(ver) / 8);
146845
+ dataCodewords2 = (ver) => totalCodewords(ver) - ECC_PER_BLOCK_L[ver] * NUM_BLOCKS_L[ver];
145244
146846
  EXP = new Uint8Array(512);
145245
146847
  LOG = new Uint8Array(256);
145246
146848
  (() => {
@@ -145253,7 +146855,7 @@ var init_qr = __esm({
145253
146855
  }
145254
146856
  for (let i2 = 255; i2 < 512; i2++) EXP[i2] = EXP[i2 - 255];
145255
146857
  })();
145256
- gfMul = (a2, b2) => a2 === 0 || b2 === 0 ? 0 : EXP[LOG[a2] + LOG[b2]];
146858
+ gfMul2 = (a2, b2) => a2 === 0 || b2 === 0 ? 0 : EXP[LOG[a2] + LOG[b2]];
145257
146859
  MASKS = [
145258
146860
  (x2, y2) => (x2 + y2) % 2 === 0,
145259
146861
  (_x, y2) => y2 % 2 === 0,
@@ -153929,22 +155531,22 @@ function resolveTagName2(name, isAttribute2, options, matcher, xmlVersion) {
153929
155531
  if (qName(name, { xmlVersion })) return name;
153930
155532
  return options.sanitizeName(name, { isAttribute: isAttribute2, matcher: matcher.readOnly() });
153931
155533
  }
153932
- function processTextOrObjNode(object14, key3, level, matcher, xmlVersion) {
153933
- const attrValues = this.extractAttributes(object14);
155534
+ function processTextOrObjNode(object15, key3, level, matcher, xmlVersion) {
155535
+ const attrValues = this.extractAttributes(object15);
153934
155536
  matcher.push(key3, attrValues);
153935
155537
  const isStopNode = this.checkStopNode(matcher);
153936
155538
  if (isStopNode) {
153937
- const rawContent = this.buildRawContent(object14);
153938
- const attrStr = this.buildAttributesForStopNode(object14);
155539
+ const rawContent = this.buildRawContent(object15);
155540
+ const attrStr = this.buildAttributesForStopNode(object15);
153939
155541
  matcher.pop();
153940
155542
  return this.buildObjectNode(rawContent, key3, attrStr, level);
153941
155543
  }
153942
- const result = this.j2x(object14, level + 1, matcher, xmlVersion);
155544
+ const result = this.j2x(object15, level + 1, matcher, xmlVersion);
153943
155545
  matcher.pop();
153944
155546
  if (key3[0] === "?") {
153945
155547
  return this.buildTextValNode("", key3, result.attrStr, level, matcher);
153946
- } else if (object14[this.options.textNodeName] !== void 0 && Object.keys(object14).length === 1) {
153947
- return this.buildTextValNode(object14[this.options.textNodeName], key3, result.attrStr, level, matcher);
155548
+ } else if (object15[this.options.textNodeName] !== void 0 && Object.keys(object15).length === 1) {
155549
+ return this.buildTextValNode(object15[this.options.textNodeName], key3, result.attrStr, level, matcher);
153948
155550
  } else {
153949
155551
  return this.buildObjectNode(result.val, key3, result.attrStr, level);
153950
155552
  }
@@ -164089,8 +165691,8 @@ function require_null() {
164089
165691
  function constructYamlNull() {
164090
165692
  return null;
164091
165693
  }
164092
- function isNull(object14) {
164093
- return object14 === null;
165694
+ function isNull(object15) {
165695
+ return object15 === null;
164094
165696
  }
164095
165697
  _null = new Type22("tag:yaml.org,2002:null", {
164096
165698
  kind: "scalar",
@@ -164130,8 +165732,8 @@ function requireBool() {
164130
165732
  function constructYamlBoolean(data) {
164131
165733
  return data === "true" || data === "True" || data === "TRUE";
164132
165734
  }
164133
- function isBoolean(object14) {
164134
- return Object.prototype.toString.call(object14) === "[object Boolean]";
165735
+ function isBoolean(object15) {
165736
+ return Object.prototype.toString.call(object15) === "[object Boolean]";
164135
165737
  }
164136
165738
  bool2 = new Type22("tag:yaml.org,2002:bool", {
164137
165739
  kind: "scalar",
@@ -164139,14 +165741,14 @@ function requireBool() {
164139
165741
  construct: constructYamlBoolean,
164140
165742
  predicate: isBoolean,
164141
165743
  represent: {
164142
- lowercase: function(object14) {
164143
- return object14 ? "true" : "false";
165744
+ lowercase: function(object15) {
165745
+ return object15 ? "true" : "false";
164144
165746
  },
164145
- uppercase: function(object14) {
164146
- return object14 ? "TRUE" : "FALSE";
165747
+ uppercase: function(object15) {
165748
+ return object15 ? "TRUE" : "FALSE";
164147
165749
  },
164148
- camelcase: function(object14) {
164149
- return object14 ? "True" : "False";
165750
+ camelcase: function(object15) {
165751
+ return object15 ? "True" : "False";
164150
165752
  }
164151
165753
  },
164152
165754
  defaultStyle: "lowercase"
@@ -164235,8 +165837,8 @@ function requireInt() {
164235
165837
  function constructYamlInteger(data) {
164236
165838
  return parseYamlInteger(data);
164237
165839
  }
164238
- function isInteger(object14) {
164239
- return Object.prototype.toString.call(object14) === "[object Number]" && (object14 % 1 === 0 && !common2.isNegativeZero(object14));
165840
+ function isInteger(object15) {
165841
+ return Object.prototype.toString.call(object15) === "[object Number]" && (object15 % 1 === 0 && !common2.isNegativeZero(object15));
164240
165842
  }
164241
165843
  int2 = new Type22("tag:yaml.org,2002:int", {
164242
165844
  kind: "scalar",
@@ -164303,8 +165905,8 @@ function requireFloat() {
164303
165905
  return sign3 * parseFloat(value2, 10);
164304
165906
  }
164305
165907
  const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
164306
- function representYamlFloat(object14, style) {
164307
- if (isNaN(object14)) {
165908
+ function representYamlFloat(object15, style) {
165909
+ if (isNaN(object15)) {
164308
165910
  switch (style) {
164309
165911
  case "lowercase":
164310
165912
  return ".nan";
@@ -164313,7 +165915,7 @@ function requireFloat() {
164313
165915
  case "camelcase":
164314
165916
  return ".NaN";
164315
165917
  }
164316
- } else if (Number.POSITIVE_INFINITY === object14) {
165918
+ } else if (Number.POSITIVE_INFINITY === object15) {
164317
165919
  switch (style) {
164318
165920
  case "lowercase":
164319
165921
  return ".inf";
@@ -164322,7 +165924,7 @@ function requireFloat() {
164322
165924
  case "camelcase":
164323
165925
  return ".Inf";
164324
165926
  }
164325
- } else if (Number.NEGATIVE_INFINITY === object14) {
165927
+ } else if (Number.NEGATIVE_INFINITY === object15) {
164326
165928
  switch (style) {
164327
165929
  case "lowercase":
164328
165930
  return "-.inf";
@@ -164331,14 +165933,14 @@ function requireFloat() {
164331
165933
  case "camelcase":
164332
165934
  return "-.Inf";
164333
165935
  }
164334
- } else if (common2.isNegativeZero(object14)) {
165936
+ } else if (common2.isNegativeZero(object15)) {
164335
165937
  return "-0.0";
164336
165938
  }
164337
- const res = object14.toString(10);
165939
+ const res = object15.toString(10);
164338
165940
  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
164339
165941
  }
164340
- function isFloat(object14) {
164341
- return Object.prototype.toString.call(object14) === "[object Number]" && (object14 % 1 !== 0 || common2.isNegativeZero(object14));
165942
+ function isFloat(object15) {
165943
+ return Object.prototype.toString.call(object15) === "[object Number]" && (object15 % 1 !== 0 || common2.isNegativeZero(object15));
164342
165944
  }
164343
165945
  float = new Type22("tag:yaml.org,2002:float", {
164344
165946
  kind: "scalar",
@@ -164417,8 +166019,8 @@ function requireTimestamp() {
164417
166019
  if (delta) date.setTime(date.getTime() - delta);
164418
166020
  return date;
164419
166021
  }
164420
- function representYamlTimestamp(object14) {
164421
- return object14.toISOString();
166022
+ function representYamlTimestamp(object15) {
166023
+ return object15.toISOString();
164422
166024
  }
164423
166025
  timestamp = new Type22("tag:yaml.org,2002:timestamp", {
164424
166026
  kind: "scalar",
@@ -164487,10 +166089,10 @@ function requireBinary() {
164487
166089
  }
164488
166090
  return new Uint8Array(result);
164489
166091
  }
164490
- function representYamlBinary(object14) {
166092
+ function representYamlBinary(object15) {
164491
166093
  let result = "";
164492
166094
  let bits = 0;
164493
- const max = object14.length;
166095
+ const max = object15.length;
164494
166096
  const map2 = BASE64_MAP;
164495
166097
  for (let idx = 0; idx < max; idx++) {
164496
166098
  if (idx % 3 === 0 && idx) {
@@ -164499,7 +166101,7 @@ function requireBinary() {
164499
166101
  result += map2[bits >> 6 & 63];
164500
166102
  result += map2[bits & 63];
164501
166103
  }
164502
- bits = (bits << 8) + object14[idx];
166104
+ bits = (bits << 8) + object15[idx];
164503
166105
  }
164504
166106
  const tail = max % 3;
164505
166107
  if (tail === 0) {
@@ -164541,9 +166143,9 @@ function requireOmap() {
164541
166143
  function resolveYamlOmap(data) {
164542
166144
  if (data === null) return true;
164543
166145
  const objectKeys = [];
164544
- const object14 = data;
164545
- for (let index = 0, length = object14.length; index < length; index += 1) {
164546
- const pair = object14[index];
166146
+ const object15 = data;
166147
+ for (let index = 0, length = object15.length; index < length; index += 1) {
166148
+ const pair = object15[index];
164547
166149
  let pairHasKey = false;
164548
166150
  if (_toString.call(pair) !== "[object Object]") return false;
164549
166151
  let pairKey;
@@ -164576,10 +166178,10 @@ function requirePairs() {
164576
166178
  const _toString = Object.prototype.toString;
164577
166179
  function resolveYamlPairs(data) {
164578
166180
  if (data === null) return true;
164579
- const object14 = data;
164580
- const result = new Array(object14.length);
164581
- for (let index = 0, length = object14.length; index < length; index += 1) {
164582
- const pair = object14[index];
166181
+ const object15 = data;
166182
+ const result = new Array(object15.length);
166183
+ for (let index = 0, length = object15.length; index < length; index += 1) {
166184
+ const pair = object15[index];
164583
166185
  if (_toString.call(pair) !== "[object Object]") return false;
164584
166186
  const keys = Object.keys(pair);
164585
166187
  if (keys.length !== 1) return false;
@@ -164589,10 +166191,10 @@ function requirePairs() {
164589
166191
  }
164590
166192
  function constructYamlPairs(data) {
164591
166193
  if (data === null) return [];
164592
- const object14 = data;
164593
- const result = new Array(object14.length);
164594
- for (let index = 0, length = object14.length; index < length; index += 1) {
164595
- const pair = object14[index];
166194
+ const object15 = data;
166195
+ const result = new Array(object15.length);
166196
+ for (let index = 0, length = object15.length; index < length; index += 1) {
166197
+ const pair = object15[index];
164596
166198
  const keys = Object.keys(pair);
164597
166199
  result[index] = [keys[0], pair[keys[0]]];
164598
166200
  }
@@ -164612,10 +166214,10 @@ function requireSet() {
164612
166214
  const _hasOwnProperty = Object.prototype.hasOwnProperty;
164613
166215
  function resolveYamlSet(data) {
164614
166216
  if (data === null) return true;
164615
- const object14 = data;
164616
- for (const key3 in object14) {
164617
- if (_hasOwnProperty.call(object14, key3)) {
164618
- if (object14[key3] !== null) return false;
166217
+ const object15 = data;
166218
+ for (const key3 in object15) {
166219
+ if (_hasOwnProperty.call(object15, key3)) {
166220
+ if (object15[key3] !== null) return false;
164619
166221
  }
164620
166222
  }
164621
166223
  return true;
@@ -164761,16 +166363,16 @@ function requireLoader() {
164761
166363
  (c2 - 65536 & 1023) + 56320
164762
166364
  );
164763
166365
  }
164764
- function setProperty(object14, key3, value2) {
166366
+ function setProperty(object15, key3, value2) {
164765
166367
  if (key3 === "__proto__") {
164766
- Object.defineProperty(object14, key3, {
166368
+ Object.defineProperty(object15, key3, {
164767
166369
  configurable: true,
164768
166370
  enumerable: true,
164769
166371
  writable: true,
164770
166372
  value: value2
164771
166373
  });
164772
166374
  } else {
164773
- object14[key3] = value2;
166375
+ object15[key3] = value2;
164774
166376
  }
164775
166377
  }
164776
166378
  const simpleEscapeCheck = new Array(256);
@@ -166394,13 +167996,13 @@ function requireDumper() {
166394
167996
  }
166395
167997
  return result;
166396
167998
  }
166397
- function writeFlowSequence(state, level, object14) {
167999
+ function writeFlowSequence(state, level, object15) {
166398
168000
  let _result = "";
166399
168001
  const _tag = state.tag;
166400
- for (let index = 0, length = object14.length; index < length; index += 1) {
166401
- let value2 = object14[index];
168002
+ for (let index = 0, length = object15.length; index < length; index += 1) {
168003
+ let value2 = object15[index];
166402
168004
  if (state.replacer) {
166403
- value2 = state.replacer.call(object14, String(index), value2);
168005
+ value2 = state.replacer.call(object15, String(index), value2);
166404
168006
  }
166405
168007
  if (writeNode(state, level, value2, false, false) || typeof value2 === "undefined" && writeNode(state, level, null, false, false)) {
166406
168008
  if (_result !== "") _result += "," + (!state.condenseFlow ? " " : "");
@@ -166410,13 +168012,13 @@ function requireDumper() {
166410
168012
  state.tag = _tag;
166411
168013
  state.dump = "[" + _result + "]";
166412
168014
  }
166413
- function writeBlockSequence(state, level, object14, compact) {
168015
+ function writeBlockSequence(state, level, object15, compact) {
166414
168016
  let _result = "";
166415
168017
  const _tag = state.tag;
166416
- for (let index = 0, length = object14.length; index < length; index += 1) {
166417
- let value2 = object14[index];
168018
+ for (let index = 0, length = object15.length; index < length; index += 1) {
168019
+ let value2 = object15[index];
166418
168020
  if (state.replacer) {
166419
- value2 = state.replacer.call(object14, String(index), value2);
168021
+ value2 = state.replacer.call(object15, String(index), value2);
166420
168022
  }
166421
168023
  if (writeNode(state, level + 1, value2, true, true, false, true) || typeof value2 === "undefined" && writeNode(state, level + 1, null, true, true, false, true)) {
166422
168024
  if (!compact || _result !== "") {
@@ -166433,18 +168035,18 @@ function requireDumper() {
166433
168035
  state.tag = _tag;
166434
168036
  state.dump = _result || "[]";
166435
168037
  }
166436
- function writeFlowMapping(state, level, object14) {
168038
+ function writeFlowMapping(state, level, object15) {
166437
168039
  let _result = "";
166438
168040
  const _tag = state.tag;
166439
- const objectKeyList = Object.keys(object14);
168041
+ const objectKeyList = Object.keys(object15);
166440
168042
  for (let index = 0, length = objectKeyList.length; index < length; index += 1) {
166441
168043
  let pairBuffer = "";
166442
168044
  if (_result !== "") pairBuffer += ", ";
166443
168045
  if (state.condenseFlow) pairBuffer += '"';
166444
168046
  const objectKey = objectKeyList[index];
166445
- let objectValue = object14[objectKey];
168047
+ let objectValue = object15[objectKey];
166446
168048
  if (state.replacer) {
166447
- objectValue = state.replacer.call(object14, objectKey, objectValue);
168049
+ objectValue = state.replacer.call(object15, objectKey, objectValue);
166448
168050
  }
166449
168051
  if (!writeNode(state, level, objectKey, false, false)) {
166450
168052
  continue;
@@ -166460,10 +168062,10 @@ function requireDumper() {
166460
168062
  state.tag = _tag;
166461
168063
  state.dump = "{" + _result + "}";
166462
168064
  }
166463
- function writeBlockMapping(state, level, object14, compact) {
168065
+ function writeBlockMapping(state, level, object15, compact) {
166464
168066
  let _result = "";
166465
168067
  const _tag = state.tag;
166466
- const objectKeyList = Object.keys(object14);
168068
+ const objectKeyList = Object.keys(object15);
166467
168069
  if (state.sortKeys === true) {
166468
168070
  objectKeyList.sort();
166469
168071
  } else if (typeof state.sortKeys === "function") {
@@ -166477,9 +168079,9 @@ function requireDumper() {
166477
168079
  pairBuffer += generateNextLine(state, level);
166478
168080
  }
166479
168081
  const objectKey = objectKeyList[index];
166480
- let objectValue = object14[objectKey];
168082
+ let objectValue = object15[objectKey];
166481
168083
  if (state.replacer) {
166482
- objectValue = state.replacer.call(object14, objectKey, objectValue);
168084
+ objectValue = state.replacer.call(object15, objectKey, objectValue);
166483
168085
  }
166484
168086
  if (!writeNode(state, level + 1, objectKey, true, true, true)) {
166485
168087
  continue;
@@ -166510,14 +168112,14 @@ function requireDumper() {
166510
168112
  state.tag = _tag;
166511
168113
  state.dump = _result || "{}";
166512
168114
  }
166513
- function detectType(state, object14, explicit2) {
168115
+ function detectType(state, object15, explicit2) {
166514
168116
  const typeList = explicit2 ? state.explicitTypes : state.implicitTypes;
166515
168117
  for (let index = 0, length = typeList.length; index < length; index += 1) {
166516
168118
  const type2 = typeList[index];
166517
- if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object14 === "object" && object14 instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object14))) {
168119
+ if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object15 === "object" && object15 instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object15))) {
166518
168120
  if (explicit2) {
166519
168121
  if (type2.multi && type2.representName) {
166520
- state.tag = type2.representName(object14);
168122
+ state.tag = type2.representName(object15);
166521
168123
  } else {
166522
168124
  state.tag = type2.tag;
166523
168125
  }
@@ -166528,9 +168130,9 @@ function requireDumper() {
166528
168130
  const style = state.styleMap[type2.tag] || type2.defaultStyle;
166529
168131
  let _result;
166530
168132
  if (_toString.call(type2.represent) === "[object Function]") {
166531
- _result = type2.represent(object14, style);
168133
+ _result = type2.represent(object15, style);
166532
168134
  } else if (_hasOwnProperty.call(type2.represent, style)) {
166533
- _result = type2.represent[style](object14, style);
168135
+ _result = type2.represent[style](object15, style);
166534
168136
  } else {
166535
168137
  throw new YAMLException2("!<" + type2.tag + '> tag resolver accepts not "' + style + '" style');
166536
168138
  }
@@ -166541,11 +168143,11 @@ function requireDumper() {
166541
168143
  }
166542
168144
  return false;
166543
168145
  }
166544
- function writeNode(state, level, object14, block, compact, iskey, isblockseq) {
168146
+ function writeNode(state, level, object15, block, compact, iskey, isblockseq) {
166545
168147
  state.tag = null;
166546
- state.dump = object14;
166547
- if (!detectType(state, object14, false)) {
166548
- detectType(state, object14, true);
168148
+ state.dump = object15;
168149
+ if (!detectType(state, object15, false)) {
168150
+ detectType(state, object15, true);
166549
168151
  }
166550
168152
  const type2 = _toString.call(state.dump);
166551
168153
  const inblock = block;
@@ -166556,7 +168158,7 @@ function requireDumper() {
166556
168158
  let duplicateIndex;
166557
168159
  let duplicate;
166558
168160
  if (objectOrArray) {
166559
- duplicateIndex = state.duplicates.indexOf(object14);
168161
+ duplicateIndex = state.duplicates.indexOf(object15);
166560
168162
  duplicate = duplicateIndex !== -1;
166561
168163
  }
166562
168164
  if (state.tag !== null && state.tag !== "?" || duplicate || state.indent !== 2 && level > 0) {
@@ -166622,33 +168224,33 @@ function requireDumper() {
166622
168224
  }
166623
168225
  return true;
166624
168226
  }
166625
- function getDuplicateReferences(object14, state) {
168227
+ function getDuplicateReferences(object15, state) {
166626
168228
  const objects = [];
166627
168229
  const duplicatesIndexes = [];
166628
- inspectNode(object14, objects, duplicatesIndexes);
168230
+ inspectNode(object15, objects, duplicatesIndexes);
166629
168231
  const length = duplicatesIndexes.length;
166630
168232
  for (let index = 0; index < length; index += 1) {
166631
168233
  state.duplicates.push(objects[duplicatesIndexes[index]]);
166632
168234
  }
166633
168235
  state.usedDuplicates = new Array(length);
166634
168236
  }
166635
- function inspectNode(object14, objects, duplicatesIndexes) {
166636
- if (object14 !== null && typeof object14 === "object") {
166637
- const index = objects.indexOf(object14);
168237
+ function inspectNode(object15, objects, duplicatesIndexes) {
168238
+ if (object15 !== null && typeof object15 === "object") {
168239
+ const index = objects.indexOf(object15);
166638
168240
  if (index !== -1) {
166639
168241
  if (duplicatesIndexes.indexOf(index) === -1) {
166640
168242
  duplicatesIndexes.push(index);
166641
168243
  }
166642
168244
  } else {
166643
- objects.push(object14);
166644
- if (Array.isArray(object14)) {
166645
- for (let i2 = 0, length = object14.length; i2 < length; i2 += 1) {
166646
- inspectNode(object14[i2], objects, duplicatesIndexes);
168245
+ objects.push(object15);
168246
+ if (Array.isArray(object15)) {
168247
+ for (let i2 = 0, length = object15.length; i2 < length; i2 += 1) {
168248
+ inspectNode(object15[i2], objects, duplicatesIndexes);
166647
168249
  }
166648
168250
  } else {
166649
- const objectKeyList = Object.keys(object14);
168251
+ const objectKeyList = Object.keys(object15);
166650
168252
  for (let i2 = 0, length = objectKeyList.length; i2 < length; i2 += 1) {
166651
- inspectNode(object14[objectKeyList[i2]], objects, duplicatesIndexes);
168253
+ inspectNode(object15[objectKeyList[i2]], objects, duplicatesIndexes);
166652
168254
  }
166653
168255
  }
166654
168256
  }
@@ -176823,6 +178425,9 @@ function renderDataSource(input) {
176823
178425
  if (input.liveCalls.length === 0) return "worker-load-no-network";
176824
178426
  return (input.liveReturned ?? 0) > 0 ? "wix-network" : "wix-network-failed";
176825
178427
  }
178428
+ function renderPlatform(explicit2) {
178429
+ return explicit2 === "ios" || explicit2 === "android" ? explicit2 : void 0;
178430
+ }
176826
178431
  function topBarSearchWebPreviewNote(descriptor) {
176827
178432
  let screen = descriptor;
176828
178433
  if (typeof screen === "string") {
@@ -176843,6 +178448,10 @@ async function renderCommand(ctx) {
176843
178448
  return 2;
176844
178449
  }
176845
178450
  if (flags.remote === true) {
178451
+ if (flags.platform !== void 0) {
178452
+ io2.error(JSON.stringify({ error: "render --remote cannot apply --platform: the serve preview draws the web look. Omit --platform, or render locally to draw iOS or Android controls." }));
178453
+ return 2;
178454
+ }
176846
178455
  if (flags["dump-state"] === true) {
176847
178456
  io2.error(JSON.stringify({ error: "render --remote cannot --dump-state: the serve plane has no worker runtime. Render locally to inspect state." }));
176848
178457
  return 2;
@@ -176942,6 +178551,7 @@ async function renderCommand(ctx) {
176942
178551
  const DEVICE_WIDTHS = renderDeviceWidths();
176943
178552
  const deviceName = str3(flags.device);
176944
178553
  let renderWidth;
178554
+ let renderSurface;
176945
178555
  if (deviceName) {
176946
178556
  renderWidth = DEVICE_WIDTHS[deviceName.toLowerCase()];
176947
178557
  if (!renderWidth) {
@@ -176950,6 +178560,7 @@ async function renderCommand(ctx) {
176950
178560
  return 2;
176951
178561
  }
176952
178562
  const surface = surfaceById(deviceName.toLowerCase());
178563
+ if (surface && !isWidgetFamilySurface(surface)) renderSurface = surface.id;
176953
178564
  if (surface && isWidgetFamilySurface(surface)) {
176954
178565
  io2.error(JSON.stringify({
176955
178566
  error: `--device "${deviceName}" is a widget family ("${surfaceFrozenFamily(surface)}"), not a viewport. himi render draws a screen; a widget is produced from defineWidget and addressed by widgetId, so rendering the screen at ${renderWidth}px would look like a widget and be none.`,
@@ -176969,6 +178580,11 @@ async function renderCommand(ctx) {
176969
178580
  return 2;
176970
178581
  }
176971
178582
  }
178583
+ const platform = renderPlatform(str3(flags.platform));
178584
+ if (flags.platform !== void 0 && !platform) {
178585
+ io2.error(JSON.stringify({ error: `--platform must be ios or android (got "${str3(flags.platform) ?? ""}")` }));
178586
+ return 2;
178587
+ }
176972
178588
  let loadBudgetMs;
176973
178589
  if (typeof flags["load-budget"] === "string" && flags["load-budget"]) {
176974
178590
  loadBudgetMs = Number(flags["load-budget"]);
@@ -177003,7 +178619,7 @@ async function renderCommand(ctx) {
177003
178619
  ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {},
177004
178620
  // The settled state is always kept (printed only under --dump-state): it is what says whether
177005
178621
  // the picture landed on the screen's content or on its error, loading or empty state.
177006
- 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, ...mocks.base44Data ? { base44Data: mocks.base44Data } : {} } } : {} } }
178622
+ collect: { lint: true, strict, render: { screenId, scheme, png: wantPng, hydrate, dumpState: true, ...live3 ? { live: true } : {}, ...injectedState ? { state: injectedState } : {}, ...injectedInput ? { input: injectedInput } : {}, ...renderWidth ? { width: renderWidth } : {}, ...platform ? { platform } : {}, ...renderSurface ? { surface: renderSurface } : {}, ...flags.rtl === true ? { rtl: true } : {}, ...loadBudgetMs ? { loadBudgetMs } : {}, ...mocks ? { mocks: { rules: mocks.rules, cmsSeed: mocks.cmsSeed, ...mocks.base44Data ? { base44Data: mocks.base44Data } : {} } } : {} } }
177007
178623
  });
177008
178624
  const r3 = (outcome.renders ?? [])[0];
177009
178625
  if (!r3) {
@@ -179602,55 +181218,107 @@ var init_write_artifacts = __esm({
179602
181218
  }
179603
181219
  });
179604
181220
 
181221
+ // ../../stdlib/flows/screens/src/one-app-visibility.ts
181222
+ function oneAppSectionVisibility(id, definition) {
181223
+ const d2 = object6(definition);
181224
+ const present = definition !== null && typeof definition === "object" && !Array.isArray(definition);
181225
+ const list2 = (key3) => d2[key3] === void 0 ? [] : Array.isArray(d2[key3]) && d2[key3].every((v2) => typeof v2 === "string" && v2.length > 0) ? [...d2[key3]] : null;
181226
+ const visitorExperiments = list2("visitorModeExperiments"), experiments = list2("experiments");
181227
+ const valid = visitorExperiments !== null && experiments !== null && (d2.visitorModeEnabled === void 0 || typeof d2.visitorModeEnabled === "boolean");
181228
+ const enabled2 = present && valid ? d2.visitorModeEnabled === true : definition === void 0 && id && memberOnly.has(id) ? false : null;
181229
+ return {
181230
+ authentication: enabled2 === null ? "unresolved" : enabled2 ? "visitor-enabled" : "signed-in-only",
181231
+ visitorModeEnabled: enabled2,
181232
+ visitorModeExperiments: visitorExperiments ?? [],
181233
+ experiments: experiments ?? [],
181234
+ source: enabled2 === null ? "unresolved" : present ? "collected-definition" : "pinned-definition"
181235
+ };
181236
+ }
181237
+ var ONE_APP_MEMBER_ONLY_SECTIONS, memberOnly, object6;
181238
+ var init_one_app_visibility = __esm({
181239
+ "../../stdlib/flows/screens/src/one-app-visibility.ts"() {
181240
+ init_define_HHP_CATALOG();
181241
+ ONE_APP_MEMBER_ONLY_SECTIONS = [
181242
+ "food_section",
181243
+ "newBlog_submit_post_section",
181244
+ "selections",
181245
+ "file_share_section",
181246
+ "events_guests_section",
181247
+ "events_discussion_section",
181248
+ "performance_tracker_section",
181249
+ "achievements_participant_carousel_section",
181250
+ "memberships_packages_section",
181251
+ "upcoming_bookings_section",
181252
+ "loyalty_status_section"
181253
+ ];
181254
+ memberOnly = /* @__PURE__ */ new Set(ONE_APP_MEMBER_ONLY_SECTIONS);
181255
+ object6 = (v2) => v2 !== null && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
181256
+ }
181257
+ });
181258
+
179605
181259
  // src/one-app/graph.ts
179606
181260
  function buildSourceGraph(raw, enriched = {}) {
179607
181261
  const enrichedStructures = Object.values(enriched).filter((value2) => value2 !== void 0);
179608
181262
  function sourceMap2(key3) {
179609
181263
  const result = {};
179610
181264
  for (const structure of enrichedStructures) {
179611
- for (const [id, value2] of Object.entries(object6(structure[key3]))) {
181265
+ for (const [id, value2] of Object.entries(object7(structure[key3]))) {
179612
181266
  if (!own5(result, id)) result[id] = value2;
179613
181267
  }
179614
181268
  }
179615
- for (const [id, value2] of Object.entries(object6(raw[key3]))) {
179616
- result[id] = own5(result, id) ? { ...object6(result[id]), ...object6(value2) } : value2;
181269
+ for (const [id, value2] of Object.entries(object7(raw[key3]))) {
181270
+ result[id] = own5(result, id) ? { ...object7(result[id]), ...object7(value2) } : value2;
179617
181271
  }
179618
181272
  return result;
179619
181273
  }
179620
181274
  function definitionMap(key3) {
179621
181275
  const result = {};
179622
181276
  for (const structure of enrichedStructures) {
179623
- for (const [id, value2] of Object.entries(object6(object6(structure.definitions)[key3]))) {
181277
+ for (const [id, value2] of Object.entries(object7(object7(structure.definitions)[key3]))) {
179624
181278
  if (!own5(result, id)) result[id] = value2;
179625
181279
  }
179626
181280
  }
179627
- for (const [id, value2] of Object.entries(object6(object6(raw.definitions)[key3]))) {
179628
- result[id] = own5(result, id) ? { ...object6(result[id]), ...object6(value2) } : value2;
181281
+ for (const [id, value2] of Object.entries(object7(object7(raw.definitions)[key3]))) {
181282
+ result[id] = own5(result, id) ? { ...object7(result[id]), ...object7(value2) } : value2;
179629
181283
  }
179630
181284
  return result;
179631
181285
  }
179632
181286
  function platformMap(platformStructure, key3) {
179633
- const result = { ...object6(raw[key3]) };
179634
- for (const [id, value2] of Object.entries(object6(platformStructure[key3]))) {
179635
- result[id] = own5(result, id) ? { ...object6(result[id]), ...object6(value2) } : value2;
181287
+ const result = { ...object7(raw[key3]) };
181288
+ for (const [id, value2] of Object.entries(object7(platformStructure[key3]))) {
181289
+ result[id] = own5(result, id) ? { ...object7(result[id]), ...object7(value2) } : value2;
179636
181290
  }
179637
181291
  return result;
179638
181292
  }
179639
181293
  function platformDefinitionMap(platformStructure, key3) {
179640
- const result = { ...object6(object6(raw.definitions)[key3]) };
179641
- for (const [id, value2] of Object.entries(object6(object6(platformStructure.definitions)[key3]))) {
179642
- result[id] = own5(result, id) ? { ...object6(result[id]), ...object6(value2) } : value2;
181294
+ const result = { ...object7(object7(raw.definitions)[key3]) };
181295
+ for (const [id, value2] of Object.entries(object7(object7(platformStructure.definitions)[key3]))) {
181296
+ result[id] = own5(result, id) ? { ...object7(result[id]), ...object7(value2) } : value2;
179643
181297
  }
179644
181298
  return result;
179645
181299
  }
179646
181300
  const screens = sourceMap2("screens");
179647
- const layouts = object6(raw.layoutItems);
179648
- const allSections = object6(raw.sections);
181301
+ const layouts = object7(raw.layoutItems);
181302
+ const allSections = object7(raw.sections);
179649
181303
  const sections = Object.fromEntries(Object.entries(allSections).filter(([, v2]) => !sectionType(v2)?.startsWith("ntt.")));
179650
- const headers2 = object6(raw.headers);
181304
+ const headers2 = object7(raw.headers);
179651
181305
  const topBars = sourceMap2("topBars");
179652
181306
  const topBarButtonDefinitions = definitionMap("topBarButtons");
179653
181307
  const actionDefinitions = definitionMap("actions");
181308
+ const sectionDefinitions = definitionMap("sections");
181309
+ for (const [id, value2] of Object.entries(object7(object7(raw.definitions).sections))) {
181310
+ sectionDefinitions[id] = value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? {
181311
+ ...object7(sectionDefinitions[id]),
181312
+ ...object7(value2),
181313
+ visitorModeEnabled: own5(object7(value2), "visitorModeEnabled") ? object7(value2).visitorModeEnabled : false
181314
+ } : value2;
181315
+ }
181316
+ const memberOnlySections = new Set(ONE_APP_MEMBER_ONLY_SECTIONS);
181317
+ const sectionVisibility = Object.fromEntries(Object.entries(sections).flatMap(([id, value2]) => {
181318
+ const type2 = sectionType(value2);
181319
+ if (!type2 || !memberOnlySections.has(type2)) return [];
181320
+ return [[id, oneAppSectionVisibility(type2, own5(sectionDefinitions, type2) ? sectionDefinitions[type2] : void 0)]];
181321
+ }));
179654
181322
  const warnings = [];
179655
181323
  const usedSections = /* @__PURE__ */ new Set();
179656
181324
  const usedLayouts = /* @__PURE__ */ new Set();
@@ -179659,23 +181327,23 @@ function buildSourceGraph(raw, enriched = {}) {
179659
181327
  const layoutAliases = /* @__PURE__ */ new Map();
179660
181328
  const interactions = [];
179661
181329
  for (const [id, value2] of Object.entries(layouts)) {
179662
- const slug = string5(object6(value2).slug);
181330
+ const slug = string5(object7(value2).slug);
179663
181331
  if (slug) layoutAliases.set(slug, [...layoutAliases.get(slug) ?? [], id]);
179664
181332
  }
179665
181333
  for (const [id, value2] of Object.entries(screens)) {
179666
- for (const ref of array3(object6(object6(value2).layout).items)) {
179667
- const layoutId = string5(object6(ref).layoutItemId);
181334
+ for (const ref of array3(object7(object7(value2).layout).items)) {
181335
+ const layoutId = string5(object7(ref).layoutItemId);
179668
181336
  if (layoutId) parents.set(layoutId, [.../* @__PURE__ */ new Set([...parents.get(layoutId) ?? [], id])]);
179669
181337
  }
179670
181338
  }
179671
181339
  for (const [name, values] of Object.entries({ screens, layoutItems: layouts, sections, headers: headers2 })) {
179672
181340
  for (const [id, value2] of Object.entries(values)) {
179673
- const declared = string5(object6(value2).id);
181341
+ const declared = string5(object7(value2).id);
179674
181342
  if (declared !== void 0 && declared !== id) warnings.push({ code: "id_conflict", pointer: `/${name}/${part(id)}/id`, reference: declared });
179675
181343
  }
179676
181344
  }
179677
181345
  function order(refs, pointer3) {
179678
- const indexes = refs.map((ref) => object6(ref).orderIndex).filter((v2) => typeof v2 === "number");
181346
+ const indexes = refs.map((ref) => object7(ref).orderIndex).filter((v2) => typeof v2 === "number");
179679
181347
  if (indexes.some((v2, i2) => i2 > 0 && v2 <= indexes[i2 - 1])) warnings.push({ code: "order_conflict", pointer: pointer3 });
179680
181348
  }
179681
181349
  function route(value2, contract, pointer3) {
@@ -179705,7 +181373,7 @@ function buildSourceGraph(raw, enriched = {}) {
179705
181373
  warnings.push({ code: "action_depth_limit", pointer: current.pointer });
179706
181374
  continue;
179707
181375
  }
179708
- const item = object6(current.value);
181376
+ const item = object7(current.value);
179709
181377
  const kind = string5(item.type);
179710
181378
  if (kind && ["goToScreen", "vertical", "form", "url", "tel", "mailto"].includes(kind)) {
179711
181379
  const dest = string5(item.screenId);
@@ -179717,12 +181385,12 @@ function buildSourceGraph(raw, enriched = {}) {
179717
181385
  function placements(value2, pointer3, context = pointer3) {
179718
181386
  const refs = array3(value2);
179719
181387
  const inScope = refs.filter((ref) => {
179720
- const id = string5(object6(ref).elementId);
181388
+ const id = string5(object7(ref).elementId);
179721
181389
  return !id || !sectionType(allSections[id])?.startsWith("ntt.");
179722
181390
  });
179723
181391
  order(inScope, pointer3);
179724
181392
  return refs.flatMap((value3, index) => {
179725
- const ref = object6(value3);
181393
+ const ref = object7(value3);
179726
181394
  const id = string5(ref.elementId);
179727
181395
  if (id && sectionType(allSections[id])?.startsWith("ntt.")) return [];
179728
181396
  const refPointer = `${pointer3}/${index}`;
@@ -179741,15 +181409,15 @@ function buildSourceGraph(raw, enriched = {}) {
179741
181409
  });
179742
181410
  }
179743
181411
  function topBarButtons(value2, side2, pointer3, context, buttonDefinitions = topBarButtonDefinitions, availableActions = actionDefinitions, trackInteractions = true) {
179744
- const bar = object6(value2);
181412
+ const bar = object7(value2);
179745
181413
  const idsKey = `${side2}ButtonIds`;
179746
181414
  const definitionsKey = `${side2}ButtonDefinitions`;
179747
181415
  const refs = own5(bar, idsKey) ? array3(bar[idsKey]) : array3(bar[definitionsKey]);
179748
181416
  return refs.map((ref, index) => {
179749
- const refObject = object6(ref);
181417
+ const refObject = object7(ref);
179750
181418
  const id = typeof ref === "string" ? ref : string5(refObject.topBarButtonDefinitionId) ?? string5(refObject.id);
179751
181419
  const definition = id && own5(buttonDefinitions, id) ? buttonDefinitions[id] : typeof ref === "object" && ref !== null ? ref : void 0;
179752
- const actionDefinitionId = string5(object6(definition).actionDefinitionId) ?? string5(refObject.actionDefinitionId);
181420
+ const actionDefinitionId = string5(object7(definition).actionDefinitionId) ?? string5(refObject.actionDefinitionId);
179753
181421
  const actionDefinition = actionDefinitionId && own5(availableActions, actionDefinitionId) ? availableActions[actionDefinitionId] : void 0;
179754
181422
  const buttonPointer = `${pointer3}/${side2}/${index}`;
179755
181423
  if (trackInteractions) {
@@ -179765,8 +181433,8 @@ function buildSourceGraph(raw, enriched = {}) {
179765
181433
  });
179766
181434
  }
179767
181435
  const screenGraph = Object.entries(screens).map(([screenId, source]) => {
179768
- const screen = object6(source);
179769
- const layout = object6(screen.layout);
181436
+ const screen = object7(source);
181437
+ const layout = object7(screen.layout);
179770
181438
  const type2 = string5(layout.type);
179771
181439
  const refs = array3(layout.items);
179772
181440
  const pointer3 = `/screens/${part(screenId)}`;
@@ -179789,7 +181457,7 @@ function buildSourceGraph(raw, enriched = {}) {
179789
181457
  };
179790
181458
  const topBarByPlatform = Object.fromEntries(Object.entries(enriched).flatMap(([platform, platformStructure]) => {
179791
181459
  if (!platformStructure) return [];
179792
- const platformScreen = { ...object6(object6(raw.screens)[screenId]), ...object6(object6(platformStructure.screens)[screenId]) };
181460
+ const platformScreen = { ...object7(object7(raw.screens)[screenId]), ...object7(object7(platformStructure.screens)[screenId]) };
179793
181461
  const platformTopBarId = string5(platformScreen.topBarId);
179794
181462
  if (!platformTopBarId) return [];
179795
181463
  const platformTopBar = platformMap(platformStructure, "topBars")[platformTopBarId];
@@ -179808,13 +181476,13 @@ function buildSourceGraph(raw, enriched = {}) {
179808
181476
  }]];
179809
181477
  }));
179810
181478
  const pages2 = refs.flatMap((value2, index) => {
179811
- const ref = object6(value2), id = string5(ref.layoutItemId);
181479
+ const ref = object7(value2), id = string5(ref.layoutItemId);
179812
181480
  if (!id || !own5(layouts, id)) {
179813
181481
  warnings.push({ code: "missing_reference", pointer: `${pointer3}/layout/items/${index}`, ...id ? { reference: id } : {} });
179814
181482
  return [];
179815
181483
  }
179816
181484
  usedLayouts.add(id);
179817
- const item = object6(layouts[id]);
181485
+ const item = object7(layouts[id]);
179818
181486
  return [{
179819
181487
  layoutItemId: id,
179820
181488
  arrayIndex: index,
@@ -179844,7 +181512,7 @@ function buildSourceGraph(raw, enriched = {}) {
179844
181512
  };
179845
181513
  });
179846
181514
  const detachedLayouts = Object.entries(layouts).filter(([id]) => !usedLayouts.has(id)).map(([id, value2]) => {
179847
- const item = object6(value2);
181515
+ const item = object7(value2);
179848
181516
  return {
179849
181517
  layoutItemId: id,
179850
181518
  title: item.title,
@@ -179854,31 +181522,34 @@ function buildSourceGraph(raw, enriched = {}) {
179854
181522
  placements: placements(item.elements, `/layoutItems/${part(id)}/elements`)
179855
181523
  };
179856
181524
  });
179857
- const bottomTabs = array3(object6(raw.navigation).bottomTabs);
181525
+ const bottomTabs = array3(object7(raw.navigation).bottomTabs);
179858
181526
  order(bottomTabs, "/navigation/bottomTabs");
179859
181527
  const navigation = bottomTabs.map((value2, index) => {
179860
- const entry = object6(value2), id = string5(entry.screenId);
181528
+ const entry = object7(value2), id = string5(entry.screenId);
179861
181529
  if (!id) warnings.push({ code: "missing_reference", pointer: `/navigation/bottomTabs/${index}/screenId` });
179862
181530
  return { arrayIndex: index, entry, ...id ? { destination: route(id, "screen", `/navigation/bottomTabs/${index}/screenId`) } : {} };
179863
181531
  });
179864
- const overrides = Object.entries(object6(raw.screenOverrides)).map(([alias2, value2]) => {
179865
- const id = string5(object6(value2).screenId);
181532
+ const overrides = Object.entries(object7(raw.screenOverrides)).map(([alias2, value2]) => {
181533
+ const id = string5(object7(value2).screenId);
179866
181534
  if (!id) warnings.push({ code: "missing_reference", pointer: `/screenOverrides/${part(alias2)}/screenId` });
179867
181535
  return { alias: alias2, source: value2, ...id ? { destination: route(id, "screen", `/screenOverrides/${part(alias2)}/screenId`) } : {} };
179868
181536
  });
179869
- const profile = object6(raw.businessProfile);
181537
+ const profile = object7(raw.businessProfile);
179870
181538
  const profilePlacements = placements(profile.elements, "/businessProfile/elements");
181539
+ const usedSectionVisibility = Object.fromEntries(Object.entries(sectionVisibility).filter(([id]) => usedSections.has(id)));
179871
181540
  return {
179872
181541
  schemaVersion: 1,
179873
181542
  interpretation: "authored-evidence-not-evaluated-access",
179874
181543
  ordering: "source-array-order",
179875
181544
  appSettings: raw.settings,
179876
- navigation: { entries: navigation, settings: object6(raw.navigation).settings, firstAuthoredScreenId: string5(object6(bottomTabs[0]).screenId) },
181545
+ navigation: { entries: navigation, settings: object7(raw.navigation).settings, firstAuthoredScreenId: string5(object7(bottomTabs[0]).screenId) },
179877
181546
  screens: screenGraph,
179878
181547
  detachedLayouts,
179879
181548
  businessProfile: { settings: profile.settings, placements: profilePlacements },
179880
181549
  screenOverrides: overrides,
179881
181550
  sections: Object.fromEntries(Object.entries(sections).filter(([id]) => usedSections.has(id))),
181551
+ // No reviewed placements means no output change for an unrelated migration.
181552
+ ...Object.keys(usedSectionVisibility).length ? { sectionVisibility: usedSectionVisibility } : {},
179882
181553
  interactions,
179883
181554
  layoutAliases: Object.fromEntries(layoutAliases),
179884
181555
  unreferencedScreenIds: Object.keys(screens).filter((id) => !incoming.has(id)),
@@ -179887,17 +181558,18 @@ function buildSourceGraph(raw, enriched = {}) {
179887
181558
  next: "Interpret source settings, definition CTAs, top bars and runtime conditions with himi docs one-app-to-himi-app. This graph indexes basic actions; it does not claim complete business-journey coverage."
179888
181559
  };
179889
181560
  }
179890
- var object6, array3, string5, part, own5, sectionType;
181561
+ var object7, array3, string5, part, own5, sectionType;
179891
181562
  var init_graph = __esm({
179892
181563
  "src/one-app/graph.ts"() {
179893
181564
  init_define_HHP_CATALOG();
179894
- object6 = (value2) => value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
181565
+ init_one_app_visibility();
181566
+ object7 = (value2) => value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
179895
181567
  array3 = (value2) => Array.isArray(value2) ? value2 : [];
179896
181568
  string5 = (value2) => typeof value2 === "string" ? value2 : void 0;
179897
181569
  part = (value2) => value2.replaceAll("~", "~0").replaceAll("/", "~1");
179898
181570
  own5 = (value2, key3) => Object.hasOwn(value2, key3);
179899
181571
  sectionType = (value2) => {
179900
- const section3 = object6(value2);
181572
+ const section3 = object7(value2);
179901
181573
  return string5(section3.sectionDefinitionId ?? section3.section_definition_id);
179902
181574
  };
179903
181575
  }
@@ -180026,12 +181698,12 @@ function nativeWidgetObligations(sectionDefinitionId) {
180026
181698
  }
180027
181699
  function nativeWidgetSettingObligations(sectionDefinitionId, settings) {
180028
181700
  if (!sectionDefinitionId || !BLOG_LIST_SECTIONS.has(sectionDefinitionId)) return [];
180029
- const root = object7(settings);
181701
+ const root = object8(settings);
180030
181702
  const out2 = [];
180031
- const display = object7(root.displayOptions);
181703
+ const display = object8(root.displayOptions);
180032
181704
  const shown2 = BLOG_ROW_OPTIONS.filter(([key3]) => display[key3] === true).map(([, label3]) => label3);
180033
181705
  if (shown2.length) out2.push(`Post rows show exactly the authored display options (${shown2.join(", ")}); a generated row that drops one is a gap`);
180034
- const content = object7(root.contentSettings);
181706
+ const content = object8(root.contentSettings);
180035
181707
  const category = typeof content.categoryId === "string" && content.categoryId.trim() ? `category ${content.categoryId.trim()}` : "all categories";
180036
181708
  const scope2 = `${category}, ${content.featuredOnly === true ? "featured posts only" : "all posts"}`;
180037
181709
  const limit = content.postsPerCategory;
@@ -180042,7 +181714,7 @@ function nativeWidgetSettingObligations(sectionDefinitionId, settings) {
180042
181714
  if (typeof root.postsLayout === "string" && root.postsLayout) out2.push(`Post list layout "${root.postsLayout}": thumbnail side and row density match the source on device`);
180043
181715
  return out2;
180044
181716
  }
180045
- var bookings, groupFeed, programs, contact, members, blogList, NATIVE_WIDGET_DEFAULTS, BLOG_LIST_SECTIONS, BLOG_ROW_OPTIONS, object7;
181717
+ var bookings, groupFeed, programs, contact, members, blogList, NATIVE_WIDGET_DEFAULTS, BLOG_LIST_SECTIONS, BLOG_ROW_OPTIONS, object8;
180046
181718
  var init_native_defaults = __esm({
180047
181719
  "src/one-app/native-defaults.ts"() {
180048
181720
  init_define_HHP_CATALOG();
@@ -180080,7 +181752,15 @@ var init_native_defaults = __esm({
180080
181752
  newBlog_compact_post_list_vertical_section: blogList,
180081
181753
  events_list_section: ["Date badge", "Share event", "RSVP or ticket action appropriate to the event and visitor state"],
180082
181754
  platform_general_members_section: members,
180083
- platform_general_members_section_bp: members
181755
+ platform_general_members_section_bp: members,
181756
+ file_share_section: ["Signed-in-only visibility; preserve file/folder access and the View All action (media.openFileShareListScreen)"],
181757
+ events_guests_section: ["Signed-in-only event-scoped guest list; preserve event selector, guest privacy and display settings"],
181758
+ events_discussion_section: ["Signed-in-only event-scoped discussion; preserve event selector, discussion settings and actions"],
181759
+ performance_tracker_section: ["Signed-in-only performance tracker; preserve member data, settings and wix.bookings.performanceTrackerCTA"],
181760
+ achievements_participant_carousel_section: ["Signed-in-only participating-programs carousel; preserve member progress, selection/settings, default limit 5 and ParticipantChallengesScreen CTA"],
181761
+ memberships_packages_section: ["Signed-in-only memberships/packages; preserve plan orders, package balances/session credits, source settings and MyMemberships CTA"],
181762
+ upcoming_bookings_section: ["Signed-in-only upcoming bookings; preserve upcoming-only selection, source settings, limit and ActivityFeedCards CTA"],
181763
+ loyalty_status_section: ["Signed-in-only member loyalty status; preserve points, tier/status and authored display settings; a rewards catalog is not status"]
180084
181764
  };
180085
181765
  BLOG_LIST_SECTIONS = /* @__PURE__ */ new Set(["newBlog_postlist_vertical_section", "newBlog_compact_post_list_vertical_section"]);
180086
181766
  BLOG_ROW_OPTIONS = [
@@ -180092,7 +181772,7 @@ var init_native_defaults = __esm({
180092
181772
  ["reading_time", "reading time"],
180093
181773
  ["cover_image", "cover image"]
180094
181774
  ];
180095
- object7 = (value2) => value2 && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
181775
+ object8 = (value2) => value2 && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
180096
181776
  }
180097
181777
  });
180098
181778
 
@@ -180102,6 +181782,7 @@ __export(coverage_exports2, {
180102
181782
  COVERAGE_FILE: () => COVERAGE_FILE,
180103
181783
  NATIVE_PROOF_FILE: () => NATIVE_PROOF_FILE,
180104
181784
  REQUIRED_CHECK: () => REQUIRED_CHECK,
181785
+ SECTION_VISIBILITY_STATES: () => SECTION_VISIBILITY_STATES,
180105
181786
  deriveRequirements: () => deriveRequirements,
180106
181787
  requirementId: () => requirementId,
180107
181788
  syncCoverage: () => syncCoverage,
@@ -180112,6 +181793,17 @@ __export(coverage_exports2, {
180112
181793
  import { createHash as createHash40 } from "node:crypto";
180113
181794
  import { existsSync as existsSync87, readFileSync as readFileSync99, writeFileSync as writeFileSync39 } from "node:fs";
180114
181795
  import { isAbsolute as isAbsolute9, join as join91, resolve as resolve68 } from "node:path";
181796
+ function sectionVisibilityProof(record3, contentDir2) {
181797
+ const proof = obj4(record3.sectionVisibility);
181798
+ const states = obj4(proof.states), report4 = obj4(proof.testReport);
181799
+ const path2 = report4.path;
181800
+ if (proof.kind !== "automated" || typeof proof.command !== "string" || !proof.command.trim() || proof.hiddenMemberReads !== 0 || !Object.entries(SECTION_VISIBILITY_STATES).every(([key3, value2]) => states[key3] === value2) || typeof path2 !== "string" || !path2.trim() || isAbsolute9(path2) || path2.split(/[\\/]/).includes("..") || typeof report4.sha256 !== "string" || !/^[a-f0-9]{64}$/.test(report4.sha256)) return false;
181801
+ try {
181802
+ return sha(readFileSync99(join91(resolve68(contentDir2), path2))) === report4.sha256;
181803
+ } catch {
181804
+ return false;
181805
+ }
181806
+ }
180115
181807
  function verifiedEvidence(evidenceDir) {
180116
181808
  const manifest2 = obj4(JSON.parse(readFileSync99(join91(evidenceDir, "manifest.json"), "utf8")));
180117
181809
  if (manifest2.workflow !== "one-app-to-himi-app" || manifest2.stage !== "collected") throw Error("One App evidence is not collected.");
@@ -180147,6 +181839,17 @@ function deriveRequirements(evidenceDir) {
180147
181839
  };
180148
181840
  const placement = (entry) => {
180149
181841
  add("placement", entry.context, `Section ${entry.sectionDefinitionId ?? entry.sectionId}`, void 0, `${entry.sectionId}:${entry.sectionDefinitionId ?? "unknown"}`);
181842
+ const visibility = graph.sectionVisibility?.[entry.sectionId];
181843
+ if (visibility) {
181844
+ const row2 = add(
181845
+ "access",
181846
+ `${entry.context}/sectionVisibility`,
181847
+ `Section ${entry.sectionDefinitionId ?? entry.sectionId} visibility: ${visibility.authentication}; preserve experiments and other permissions; verify visitor \u2192 sign-in \u2192 sign-out, failed/cancelled login and restored sessions; no hidden member reads`,
181848
+ void 0,
181849
+ JSON.stringify({ sectionId: entry.sectionId, sectionDefinitionId: entry.sectionDefinitionId, visibility })
181850
+ );
181851
+ row2.sectionVisibility = visibility;
181852
+ }
180150
181853
  const settings = obj4(obj4(obj4(graph.sections)[entry.sectionId]).settings);
180151
181854
  for (const behavior of [...nativeWidgetObligations(entry.sectionDefinitionId), ...nativeWidgetSettingObligations(entry.sectionDefinitionId, settings)]) {
180152
181855
  add(
@@ -180362,6 +182065,8 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
180362
182065
  if (result.hashesChanged) issues.push({ message: "Saved source hashes differ from the collected evidence." });
180363
182066
  const saved = result.existed ? obj4(JSON.parse(readFileSync99(join91(resolve68(contentDir2), COVERAGE_FILE), "utf8"))) : {};
180364
182067
  const rows = Array.isArray(saved.requirements) ? saved.requirements.map(obj4) : [];
182068
+ const memberSectionIds = new Set(result.coverage.requirements.filter((row2) => row2.sectionVisibility?.authentication === "signed-in-only").map((row2) => row2.id));
182069
+ const unresolvedSectionIds = new Set(result.coverage.requirements.filter((row2) => row2.sectionVisibility?.authentication === "unresolved").map((row2) => row2.id));
180365
182070
  const contentManifest = join91(resolve68(contentDir2), "himalaya.content.json");
180366
182071
  const declaredScreens = existsSync87(contentManifest) ? obj4(obj4(JSON.parse(readFileSync99(contentManifest, "utf8"))).screens) : void 0;
180367
182072
  const availableScreens = builtScreenIds ? new Set(builtScreenIds) : declaredScreens && Object.keys(declaredScreens).length ? new Set(Object.keys(declaredScreens)) : void 0;
@@ -180372,6 +182077,9 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
180372
182077
  issues.push({ id, message: "Invalid requirement identity or kind." });
180373
182078
  continue;
180374
182079
  }
182080
+ if (unresolvedSectionIds.has(id)) {
182081
+ issues.push({ id, message: "Section visibility source definition is unresolved; a supported status or generic check cannot establish its access rule." });
182082
+ }
180375
182083
  const status = row2.status;
180376
182084
  if (status !== "supported" && status !== "adapted" && status !== "conditional") {
180377
182085
  issues.push({ id, message: "Requirement is unresolved or has no status." });
@@ -180411,6 +182119,9 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
180411
182119
  if (!record3 || record3.status !== "passed") {
180412
182120
  issues.push({ id, message: `Check ${required3} has no latest passed record for this requirement and target.` });
180413
182121
  } else {
182122
+ if (memberSectionIds.has(id) && !sectionVisibilityProof(record3, contentDir2)) {
182123
+ issues.push({ id, message: "Member-only section visibility needs deterministic automated transition assertions, zero hidden member reads and a hashed test report." });
182124
+ }
180414
182125
  const artifact = record3.artifact;
180415
182126
  if (typeof artifact !== "string" || !artifact.trim() || isAbsolute9(artifact) || artifact.split(/[\\/]/).includes("..") || !existsSync87(join91(resolve68(contentDir2), artifact))) {
180416
182127
  issues.push({ id, message: `Check ${required3} needs a reviewable artifact file.` });
@@ -180438,13 +182149,23 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
180438
182149
  }
180439
182150
  return { ok: issues.length === 0, count: rows.length, requirementIds: rows.map((row2) => String(row2.id ?? "")), issues };
180440
182151
  }
180441
- var obj4, sha, REQUIRED_CHECK, COVERAGE_FILE, NATIVE_PROOF_FILE;
182152
+ var SECTION_VISIBILITY_STATES, obj4, sha, REQUIRED_CHECK, COVERAGE_FILE, NATIVE_PROOF_FILE;
180442
182153
  var init_coverage2 = __esm({
180443
182154
  "src/one-app/coverage.ts"() {
180444
182155
  init_define_HHP_CATALOG();
180445
182156
  init_graph();
180446
182157
  init_design_rules();
180447
182158
  init_native_defaults();
182159
+ SECTION_VISIBILITY_STATES = {
182160
+ unresolved: "hidden",
182161
+ visitor: "hidden",
182162
+ signedIn: "visible",
182163
+ signedOut: "hidden",
182164
+ cancelled: "hidden",
182165
+ failed: "hidden",
182166
+ restored: "visible",
182167
+ otherRestricted: "hidden"
182168
+ };
180448
182169
  obj4 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
180449
182170
  sha = (v2) => createHash40("sha256").update(v2).digest("hex");
180450
182171
  REQUIRED_CHECK = {
@@ -180679,7 +182400,7 @@ function isBadgeWorkerUrl(url) {
180679
182400
  const name = (url ?? "").split("/").filter(Boolean).pop() ?? "";
180680
182401
  return NAV_WORKER_BUNDLES.includes(name);
180681
182402
  }
180682
- function object8(value2) {
182403
+ function object9(value2) {
180683
182404
  return value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : void 0;
180684
182405
  }
180685
182406
  function planHeaderBadges(raw, views) {
@@ -180689,7 +182410,7 @@ function planHeaderBadges(raw, views) {
180689
182410
  for (const screen of graph.screens) {
180690
182411
  const visit = (buttons, platform, side2) => {
180691
182412
  for (const [index, button] of buttons.entries()) {
180692
- const definition = object8(button.definition);
182413
+ const definition = object9(button.definition);
180693
182414
  const hasBadge = [definition?.badgeObserverId, definition?.badgeListenerId].some((value2) => typeof value2 === "string" && value2.trim());
180694
182415
  if (!hasBadge) continue;
180695
182416
  const words = `${button.id ?? ""} ${definition?.iconId ?? ""} ${definition?.accessibilityLabel ?? ""}`.toLowerCase();
@@ -180742,8 +182463,8 @@ function headerBadgesBundleRef() {
180742
182463
  function propName5(node) {
180743
182464
  return ts11.isIdentifier(node) || ts11.isStringLiteral(node) ? node.text : void 0;
180744
182465
  }
180745
- function findProperty(object14, name) {
180746
- return object14.properties.find((property2) => ts11.isPropertyAssignment(property2) && propName5(property2.name) === name);
182466
+ function findProperty(object15, name) {
182467
+ return object15.properties.find((property2) => ts11.isPropertyAssignment(property2) && propName5(property2.name) === name);
180747
182468
  }
180748
182469
  function appObject(source) {
180749
182470
  const exported = source.statements.find(ts11.isExportAssignment);
@@ -180842,7 +182563,7 @@ function enrichedControls(raw, views) {
180842
182563
  badges.set(screen.screenId, badgeButtons);
180843
182564
  const addButtons = (buttons, side2, platform) => {
180844
182565
  for (const [index, button] of buttons.entries()) {
180845
- const definition = object9(button.definition);
182566
+ const definition = object10(button.definition);
180846
182567
  const id = `${button.id ?? ""} ${definition?.iconId ?? ""} ${definition?.accessibilityLabel ?? ""}`.toLowerCase();
180847
182568
  let recognized = false;
180848
182569
  const matched = /* @__PURE__ */ new Set();
@@ -180882,11 +182603,11 @@ function enrichedControls(raw, views) {
180882
182603
  }
180883
182604
  return { controls: result, badges };
180884
182605
  }
180885
- function object9(value2) {
182606
+ function object10(value2) {
180886
182607
  return value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : void 0;
180887
182608
  }
180888
182609
  function readJson7(path2) {
180889
- return object9(JSON.parse(readFileSync102(path2, "utf8"))) ?? {};
182610
+ return object10(JSON.parse(readFileSync102(path2, "utf8"))) ?? {};
180890
182611
  }
180891
182612
  function parseArgs(args) {
180892
182613
  let evidenceDir;
@@ -180914,8 +182635,8 @@ function parseArgs(args) {
180914
182635
  return { evidenceDir: resolve70(evidenceDir), contentDir: resolve70(contentDir2), json: json9 };
180915
182636
  }
180916
182637
  function authoredControls(raw) {
180917
- const screens = object9(raw.screens);
180918
- const headers2 = object9(raw.headers) ?? {};
182638
+ const screens = object10(raw.screens);
182639
+ const headers2 = object10(raw.headers) ?? {};
180919
182640
  if (!screens || !Object.keys(screens).length) {
180920
182641
  return { controls: /* @__PURE__ */ new Set(), byScreen: /* @__PURE__ */ new Map(), inviteDisabled: /* @__PURE__ */ new Set(), screens: 0, error: "raw-structure.json is missing authored screens." };
180921
182642
  }
@@ -180924,16 +182645,16 @@ function authoredControls(raw) {
180924
182645
  const inviteDisabled = /* @__PURE__ */ new Set();
180925
182646
  let count2 = 0;
180926
182647
  for (const [screenId, rawScreen] of Object.entries(screens)) {
180927
- const screen = object9(rawScreen);
182648
+ const screen = object10(rawScreen);
180928
182649
  const headerId = typeof screen?.headerId === "string" ? screen.headerId : void 0;
180929
182650
  const screenControls = /* @__PURE__ */ new Set();
180930
182651
  byScreen.set(screenId, screenControls);
180931
182652
  if (!headerId) continue;
180932
182653
  count2++;
180933
- const header = object9(headers2[headerId]);
182654
+ const header = object10(headers2[headerId]);
180934
182655
  if (!header) return { controls, byScreen, inviteDisabled, screens: count2, error: `Authored header ${headerId} is missing for screen ${screenId}.` };
180935
- const settings = object9(header?.settings) ?? header;
180936
- const topBarSettings = object9(settings?.topBarSettings);
182656
+ const settings = object10(header?.settings) ?? header;
182657
+ const topBarSettings = object10(settings?.topBarSettings);
180937
182658
  const choice = (modern, legacy) => {
180938
182659
  const current = topBarSettings?.[modern];
180939
182660
  if (current !== void 0) return typeof current === "boolean" ? current : void 0;
@@ -181069,8 +182790,8 @@ function itemTokens(topBar, source) {
181069
182790
  const out2 = /* @__PURE__ */ new Set();
181070
182791
  if (!list2 || !ts12.isArrayLiteralExpression(list2)) return out2;
181071
182792
  for (const item of list2.elements) {
181072
- const object14 = ts12.isExpression(item) ? resolveObject(item, source) : void 0;
181073
- if (object14) for (const token of actionTokens(object14)) out2.add(token);
182793
+ const object15 = ts12.isExpression(item) ? resolveObject(item, source) : void 0;
182794
+ if (object15) for (const token of actionTokens(object15)) out2.add(token);
181074
182795
  }
181075
182796
  return out2;
181076
182797
  }
@@ -181204,13 +182925,13 @@ function readVerifiedEvidence(evidenceDir) {
181204
182925
  const manifest2 = readJson7(join94(evidenceDir, "manifest.json"));
181205
182926
  if (manifest2.workflow !== "one-app-to-himi-app") throw new Error("manifest.json is not for the one-app-to-himi-app workflow.");
181206
182927
  if (manifest2.stage !== "collected") throw new Error('manifest.json must have stage "collected".');
181207
- const unavailable = (Array.isArray(manifest2.warnings) ? manifest2.warnings : []).map(object9).filter((warning) => warning?.code === "runtime_context_unavailable" && (warning.platform === "ios" || warning.platform === "android"));
182928
+ const unavailable = (Array.isArray(manifest2.warnings) ? manifest2.warnings : []).map(object10).filter((warning) => warning?.code === "runtime_context_unavailable" && (warning.platform === "ios" || warning.platform === "android"));
181208
182929
  if (unavailable.length) {
181209
182930
  throw new Error(`Platform top-bar behavior is unverified: ${unavailable.map((warning) => warning.platform).join(", ")} runtime context unavailable.`);
181210
182931
  }
181211
182932
  const rawPath = join94(evidenceDir, "raw-structure.json");
181212
182933
  const rawBytes = readFileSync102(rawPath);
181213
- const expectedHash = object9(manifest2.sha256)?.["raw-structure.json"];
182934
+ const expectedHash = object10(manifest2.sha256)?.["raw-structure.json"];
181214
182935
  if (typeof expectedHash !== "string" || !/^[a-f0-9]{64}$/i.test(expectedHash)) {
181215
182936
  throw new Error("manifest.json is missing a valid raw-structure.json hash.");
181216
182937
  }
@@ -181221,7 +182942,7 @@ function readVerifiedEvidence(evidenceDir) {
181221
182942
  const views = {};
181222
182943
  for (const platform of ["ios", "android"]) {
181223
182944
  const name = `enriched-${platform}.json`;
181224
- const hash3 = object9(manifest2.sha256)?.[name];
182945
+ const hash3 = object10(manifest2.sha256)?.[name];
181225
182946
  if (hash3 === void 0) continue;
181226
182947
  if (typeof hash3 !== "string" || !/^[a-f0-9]{64}$/i.test(hash3)) throw new Error(`Invalid ${name} hash.`);
181227
182948
  const bytes2 = readFileSync102(join94(evidenceDir, name));
@@ -181286,15 +183007,15 @@ function validate3(evidenceDir, contentDir2) {
181286
183007
  try {
181287
183008
  const coverage = readJson7(coveragePath);
181288
183009
  for (const row2 of Array.isArray(coverage.requirements) ? coverage.requirements : []) {
181289
- const entry = object9(row2) ?? {};
183010
+ const entry = object10(row2) ?? {};
181290
183011
  const badge = typeof entry.id === "string" ? badgeDefinitions.get(entry.id) : void 0;
181291
- const destination = object9(entry.target);
183012
+ const destination = object10(entry.target);
181292
183013
  if (entry.kind === "top-bar" && badge && entry.source === badge.source && entry.platform === badge.platform && typeof destination?.screenId === "string" && destination.screenId.trim() && typeof destination.controlId === "string" && destination.controlId.trim()) {
181293
183014
  badgeTargets.set(badge.requirementId, { screenId: destination.screenId, controlId: destination.controlId });
181294
183015
  }
181295
183016
  if (entry.kind !== "route" || typeof entry.source !== "string" || !/^\/screens\/[^/]+$/.test(entry.source)) continue;
181296
183017
  const screenId = entry.source.slice(9).replaceAll("~1", "/").replaceAll("~0", "~");
181297
- const targetScreen = object9(entry.target)?.screenId;
183018
+ const targetScreen = object10(entry.target)?.screenId;
181298
183019
  if (typeof targetScreen === "string" && targetScreen) mappings.set(screenId, targetScreen);
181299
183020
  }
181300
183021
  } catch (error) {
@@ -184970,46 +186691,46 @@ var init_preview_assets_generated = __esm({
184970
186691
  init_define_HHP_CATALOG();
184971
186692
  init_preview_assets_format();
184972
186693
  PREVIEW_ASSET_MANIFEST = [
184973
- { key: "assets/DashboardHost-DZfga_Mg.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "eef5b24050725a9b8b39eb6e487f05000eea83200ac9c64deb430b6873568d93" },
184974
- { key: "assets/DevDrawer-CzsFts_h.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "3c8ef361603fee9a5acf1b86e7e5212b5006981e81d37131564f3ad3ce80b139" },
184975
- { key: "assets/IdiomCompare-CyjKAdmn.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "9dfb8c777df2bd2e22135173eb812b93c55815b48a0d4112eb88953d63702802" },
184976
- { key: "assets/LightboxViewer-BAQeI4NZ.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "54633b9b530b0f8b553db4fb6785bf394ca483b237f4c48c54c18fcfc4ff2056" },
184977
- { key: "assets/OfflineReadingBar-B8NEJTXu.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "fff3bd54174644aa002daf6b8001d080114e2645893c36d33f39cfb3f13e9178" },
184978
- { key: "assets/PhonePreviewControl-DiL1I50l.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37851, sha256: "197df14a08d207346ff35777449a019b9777e1965bb01e61f755dcc85f408cf0" },
184979
- { key: "assets/SchemeCompare-Beom-WcH.js", contentType: "application/javascript; charset=utf-8", offset: 69417, length: 1858, sha256: "0864ad2781a11099b797897059ae3e48ef7a9519939939a616ec3292adfc602e" },
184980
- { key: "assets/WixFrogTelemetrySink-DDMg2oXn.js", contentType: "application/javascript; charset=utf-8", offset: 71275, length: 3165, sha256: "42cffcb9c55bb10a75e496c9627186e5d30f5c9eaac00faa0d139aba8b873fb8" },
184981
- { key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 74440, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
184982
- { key: "assets/catalog-CAoUWITw.js", contentType: "application/javascript; charset=utf-8", offset: 76632, length: 26046, sha256: "4c270ca3051f77d761aef1297125e02339d48493dd2b84a0cacf0faf41aa8cb3" },
184983
- { key: "assets/catalogFontFaces-BHv6w0dL.js", contentType: "application/javascript; charset=utf-8", offset: 102678, length: 1111, sha256: "e603318f29c01e52ed721dd23fa9a5a1ab1dd0cecff88dcc3d2830363ec5a872" },
184984
- { key: "assets/files-transfer-BD4mpV3w.js", contentType: "application/javascript; charset=utf-8", offset: 103789, length: 6446, sha256: "4b93f287d89f30bc6fd4a930a2376db3611a7b6a6c5e499041907fab11490a56" },
184985
- { key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 110235, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
184986
- { key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 116813, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
184987
- { key: "assets/index-Ba_s-ONu.js", contentType: "application/javascript; charset=utf-8", offset: 119517, length: 1505552, sha256: "1f4382e2f713a51a83be334871404d275940dce6bc621f089f330f67101160e2" },
184988
- { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1625069, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
184989
- { key: "assets/pdf-rRcqQHkZ.js", contentType: "application/javascript; charset=utf-8", offset: 1632693, length: 488215, sha256: "22adff7dd27347af4c39596d13f2dc7caac277cbb638000a08c9220ecea253e3" },
184990
- { key: "assets/pdf.worker.min-BGnVRhRG.js", contentType: "application/javascript; charset=utf-8", offset: 2120908, length: 90, sha256: "521a0e528916d678d7588b2cddf3dadd3bb959a6d62426382f61c77a82017e35" },
184991
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2120998, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
184992
- { key: "assets/pdfDocument-Qi4z2flR.js", contentType: "application/javascript; charset=utf-8", offset: 3438032, length: 3470, sha256: "40f386f0a999d641b913ff22ceefe6e1c657e3e6db3556ae8833fba02b744871" },
184993
- { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3441502, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
184994
- { key: "assets/webviewBridgeHost-C7cClnZm.js", contentType: "application/javascript; charset=utf-8", offset: 3443768, length: 9888, sha256: "823b57760171956d5082e4d87b9d71cee9686ac456b1b2ac40f07bba8fd3a9af" },
184995
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3453656, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
184996
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3458266, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
184997
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3946850, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
184998
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 4037774, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
184999
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4128758, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
185000
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4219738, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
185001
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4310610, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
185002
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4401590, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
185003
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4510226, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
185004
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4619310, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
185005
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4728358, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
185006
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4836058, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
185007
- { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4924166, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
185008
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4930984, length: 4924, sha256: "228782296705b6da666bbea178ce6f23c24a109e46c4d6c26657b27324c832d1" },
185009
- { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4935908, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
185010
- { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4947365, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
185011
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4948536, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
185012
- { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4971583, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
186694
+ { key: "assets/DashboardHost-01BJr0Hq.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "95891506c692abe4155d8acc84d48828329fe79695cb18ad7e33bfd2a06e01a4" },
186695
+ { key: "assets/DevDrawer-DzBFIqI4.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "7de3342986b83712789999d57ad0e0b9d622cf00138deb84cf150dfdc8c2a0ab" },
186696
+ { key: "assets/IdiomCompare-5py7hKS4.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "7e50e6281d414794e6fd11aeed289516fc6794798dd80d6757fe2570eb273ef2" },
186697
+ { key: "assets/LightboxViewer-DGtetiAO.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "54e446e5f367fb471f9a04eee43c41b4d8f2f5a15ad1fd27bb0243c57e745a6b" },
186698
+ { key: "assets/OfflineReadingBar-ZYJwY1Fu.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "75e2af3774c61ff4833398ec60d1c19c68e64895fbe58600257d246d59993b4a" },
186699
+ { key: "assets/PhonePreviewControl-CzuZrf9c.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37851, sha256: "83dd517c9128023197060b6513057b566c9a6425dde279f4ea6934d408f33523" },
186700
+ { key: "assets/SchemeCompare-B9Q6nwMN.js", contentType: "application/javascript; charset=utf-8", offset: 69417, length: 1858, sha256: "e410ba6599e18a99fa06424c615c92d0ae1b2c0b7ba6c6f278d200605473a20e" },
186701
+ { key: "assets/WixFrogTelemetrySink-DaPw2a19.js", contentType: "application/javascript; charset=utf-8", offset: 71275, length: 4475, sha256: "4c501f0f847e1d76c44238c081f7766dd666695b9b37659f86752768b2dc8767" },
186702
+ { key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 75750, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
186703
+ { key: "assets/catalog-CAoUWITw.js", contentType: "application/javascript; charset=utf-8", offset: 77942, length: 26046, sha256: "4c270ca3051f77d761aef1297125e02339d48493dd2b84a0cacf0faf41aa8cb3" },
186704
+ { key: "assets/catalogFontFaces-CHe_dX9H.js", contentType: "application/javascript; charset=utf-8", offset: 103988, length: 1111, sha256: "a9781043f611e2170460d01d06864d1ff39cb37cb699404c0e87467a67d00b1a" },
186705
+ { key: "assets/files-transfer-eU3WAOWo.js", contentType: "application/javascript; charset=utf-8", offset: 105099, length: 6446, sha256: "301f7b6263dfd8e5daa5096df07dcf4d5363fcb7f4ce4648977720b33c45dc23" },
186706
+ { key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 111545, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
186707
+ { key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 118123, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
186708
+ { key: "assets/index-BUqW4KMq.js", contentType: "application/javascript; charset=utf-8", offset: 120827, length: 1513828, sha256: "68cc7fcd12e314d315da3afdb898d4b1bead03802625e140b7c76ec4447b4d86" },
186709
+ { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1634655, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
186710
+ { key: "assets/pdf-DhNews7B.js", contentType: "application/javascript; charset=utf-8", offset: 1642279, length: 488215, sha256: "a186aafa68ae2cf571b6cd3bad936a14148e06821f907aba7ad28645bc307d83" },
186711
+ { key: "assets/pdf.worker.min-BGnVRhRG.js", contentType: "application/javascript; charset=utf-8", offset: 2130494, length: 90, sha256: "521a0e528916d678d7588b2cddf3dadd3bb959a6d62426382f61c77a82017e35" },
186712
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2130584, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
186713
+ { key: "assets/pdfDocument-hG3sJeze.js", contentType: "application/javascript; charset=utf-8", offset: 3447618, length: 3470, sha256: "3bce76f2c5d031d1d725637b2c0b40a5413642361951cd4aadd22a73b87890e6" },
186714
+ { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3451088, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
186715
+ { key: "assets/webviewBridgeHost-B-eFpbq0.js", contentType: "application/javascript; charset=utf-8", offset: 3453354, length: 9888, sha256: "bd405bee8bb5aae395c900140d4c2439ed042536ae2a9a5b50ef262e9908d670" },
186716
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3463242, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
186717
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3467852, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
186718
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3956436, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
186719
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 4047360, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
186720
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4138344, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
186721
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4229324, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
186722
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4320196, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
186723
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4411176, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
186724
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4519812, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
186725
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4628896, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
186726
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4737944, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
186727
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4845644, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
186728
+ { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4933752, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
186729
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4940570, length: 4924, sha256: "1143c8af43a39ae52adc3665e325488c8de2c03dcf8a19bd7b3951d03e7c5f70" },
186730
+ { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4945494, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
186731
+ { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4956951, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
186732
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4958122, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
186733
+ { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4981169, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
185013
186734
  ];
185014
186735
  }
185015
186736
  });
@@ -188877,21 +190598,21 @@ function fixedPriceRoute(item, currency) {
188877
190598
  return typeof amount === "string" && /^\d+(?:\.\d+)?$/.test(amount) && Number.isFinite(Number(amount)) && Number(amount) > 0 && /^[A-Z]{3}$/.test(currency) && item.currency === currency ? "appleIap" : "decide";
188878
190599
  }
188879
190600
  function bookingAttendanceOf(raw) {
188880
- const s2 = object10(raw);
188881
- const payment = object10(s2.payment);
188882
- const fixed = object10(payment.fixed);
188883
- const price = object10(fixed.price);
188884
- const options = object10(payment.options);
188885
- const policy = object10(object10(s2.bookingPolicy).participantsPolicy);
190601
+ const s2 = object11(raw);
190602
+ const payment = object11(s2.payment);
190603
+ const fixed = object11(payment.fixed);
190604
+ const price = object11(fixed.price);
190605
+ const options = object11(payment.options);
190606
+ const policy = object11(object11(s2.bookingPolicy).participantsPolicy);
188886
190607
  return {
188887
190608
  kind: "bookingsService",
188888
190609
  type: text10(s2.type),
188889
190610
  capacity: numeric(s2.defaultCapacity),
188890
190611
  maxParticipantsPerBooking: policy.enabled === true ? numeric(policy.maxParticipantsPerBooking) : void 0,
188891
190612
  hidden: boolean3(s2.hidden),
188892
- conferencing: boolean3(object10(s2.conferencing).enabled),
190613
+ conferencing: boolean3(object11(s2.conferencing).enabled),
188893
190614
  locations: Array.isArray(s2.locations) ? s2.locations.map(locationType) : void 0,
188894
- onlineBooking: boolean3(object10(s2.onlineBooking).enabled),
190615
+ onlineBooking: boolean3(object11(s2.onlineBooking).enabled),
188895
190616
  onlinePayment: boolean3(options.online),
188896
190617
  deposit: options.deposit === true || fixed.deposit !== void 0,
188897
190618
  priceType: text10(payment.rateType),
@@ -188900,9 +190621,9 @@ function bookingAttendanceOf(raw) {
188900
190621
  };
188901
190622
  }
188902
190623
  function locationType(raw) {
188903
- const location = object10(raw);
190624
+ const location = object11(raw);
188904
190625
  const type2 = text10(location.type) ?? "UNKNOWN";
188905
- const addresses = [object10(location.custom).address, location.calculatedAddress].map(object10);
190626
+ const addresses = [object11(location.custom).address, location.calculatedAddress].map(object11);
188906
190627
  return type2 === "CUSTOM" && addresses.every(describesNoPlace) ? ADDRESSLESS_CUSTOM : type2;
188907
190628
  }
188908
190629
  function describesNoPlace(address) {
@@ -188915,16 +190636,16 @@ function describesNoPlace(address) {
188915
190636
  });
188916
190637
  }
188917
190638
  function ticketAttendanceOf(event, definition) {
188918
- const e2 = object10(event);
188919
- const t2 = object10(definition);
188920
- const pricing = object10(t2.pricingMethod);
188921
- const price = object10(pricing.fixedPrice);
188922
- const registration = object10(e2.registration);
190639
+ const e2 = object11(event);
190640
+ const t2 = object11(definition);
190641
+ const pricing = object11(t2.pricingMethod);
190642
+ const price = object11(pricing.fixedPrice);
190643
+ const registration = object11(e2.registration);
188923
190644
  const type2 = text10(registration.type) ?? text10(registration.initialType) ?? text10(e2.eventType);
188924
190645
  const status = text10(e2.status) ?? text10(e2.eventStatus);
188925
190646
  return {
188926
190647
  kind: "eventsTicket",
188927
- location: text10(object10(e2.location).type),
190648
+ location: text10(object11(e2.location).type),
188928
190649
  registration: type2 === "TICKETS" || type2 === "RSVP_AND_TICKETS" ? "TICKETING" : type2,
188929
190650
  eventStatus: status === "SCHEDULED" ? "UPCOMING" : status,
188930
190651
  saleStatus: text10(t2.saleStatus),
@@ -188934,7 +190655,7 @@ function ticketAttendanceOf(event, definition) {
188934
190655
  currency: text10(price.currency)
188935
190656
  };
188936
190657
  }
188937
- function object10(value2) {
190658
+ function object11(value2) {
188938
190659
  return value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
188939
190660
  }
188940
190661
  var ADDRESSLESS_CUSTOM, PHYSICAL_LOCATIONS, ONLINE_LABEL, text10, numeric, boolean3, zeroPrice;
@@ -200265,41 +201986,41 @@ function normalizeWebsiteLinks(nodes2) {
200265
201986
  };
200266
201987
  for (const node of nodes2) {
200267
201988
  for (const path2 of linkFields[node.type ?? ""] ?? []) {
200268
- const parent = object11(path2.slice(0, -1).reduce((value2, key4) => object11(value2)[key4], node));
201989
+ const parent = object12(path2.slice(0, -1).reduce((value2, key4) => object12(value2)[key4], node));
200269
201990
  const key3 = path2[path2.length - 1];
200270
201991
  const holder = { url: parent[key3] };
200271
201992
  normalize5(holder);
200272
201993
  if (typeof holder.url === "string") parent[key3] = holder.url;
200273
201994
  }
200274
201995
  if (Array.isArray(node.textData?.decorations)) for (const decoration of node.textData.decorations) {
200275
- if (object11(decoration).type === "LINK") normalize5(object11(object11(decoration).linkData).link);
201996
+ if (object12(decoration).type === "LINK") normalize5(object12(object12(decoration).linkData).link);
200276
201997
  }
200277
201998
  if (Array.isArray(node.nodes)) changed += normalizeWebsiteLinks(node.nodes);
200278
201999
  }
200279
202000
  return changed;
200280
202001
  }
200281
202002
  function draftDocument(value2) {
200282
- const draft = object11(value2);
202003
+ const draft = object12(value2);
200283
202004
  if (!Array.isArray(draft.blocks) || draft.blocks.length > 5e3) return invalid();
200284
202005
  if (draft.entityMap !== void 0 && (!draft.entityMap || typeof draft.entityMap !== "object" || Array.isArray(draft.entityMap))) return invalid();
200285
- const entities = object11(draft.entityMap);
202006
+ const entities = object12(draft.entityMap);
200286
202007
  const nodes2 = [];
200287
202008
  for (const raw of draft.blocks) {
200288
- const block = object11(raw);
202009
+ const block = object12(raw);
200289
202010
  if (typeof block.text !== "string") return invalid();
200290
202011
  if (block.depth !== void 0 && block.depth !== 0) return unsupported();
200291
202012
  const text13 = block.text;
200292
202013
  const styles = block.inlineStyleRanges ?? [];
200293
202014
  const ranges = block.entityRanges ?? [];
200294
202015
  if (!Array.isArray(styles) || !Array.isArray(ranges) || styles.length + ranges.length > 500) return invalid();
200295
- const spans = [...styles.map((v2) => ({ ...object11(v2), kind: "style" })), ...ranges.map((v2) => ({ ...object11(v2), kind: "entity" }))];
202016
+ const spans = [...styles.map((v2) => ({ ...object12(v2), kind: "style" })), ...ranges.map((v2) => ({ ...object12(v2), kind: "entity" }))];
200296
202017
  for (const span of spans) {
200297
202018
  if (!Number.isInteger(span.offset) || !Number.isInteger(span.length) || Number(span.offset) < 0 || Number(span.length) < 0 || Number(span.offset) + Number(span.length) > text13.length) return invalid();
200298
202019
  }
200299
202020
  if (block.type === "atomic") {
200300
202021
  if (ranges.length !== 1) return unsupported();
200301
- const entity = object11(entities[String(object11(ranges[0]).key)]);
200302
- const data = object11(entity.data);
202022
+ const entity = object12(entities[String(object12(ranges[0]).key)]);
202023
+ const data = object12(entity.data);
200303
202024
  if (entity.type !== "IMAGE" && entity.type !== "wix-draft-plugin-image") return unsupported();
200304
202025
  const url = data.src ?? data.url;
200305
202026
  if (typeof url !== "string" || !url) return invalid();
@@ -200316,9 +202037,9 @@ function draftDocument(value2) {
200316
202037
  if (!["BOLD", "ITALIC", "UNDERLINE", "STRIKETHROUGH"].includes(String(span.style))) return unsupported();
200317
202038
  decorations.push({ type: String(span.style) });
200318
202039
  } else {
200319
- const entity = object11(entities[String(span.key)]);
200320
- if (entity.type !== "LINK" || typeof object11(entity.data).url !== "string") return unsupported();
200321
- decorations.push({ type: "LINK", linkData: { link: { url: object11(entity.data).url } } });
202040
+ const entity = object12(entities[String(span.key)]);
202041
+ if (entity.type !== "LINK" || typeof object12(entity.data).url !== "string") return unsupported();
202042
+ decorations.push({ type: "LINK", linkData: { link: { url: object12(entity.data).url } } });
200322
202043
  }
200323
202044
  }
200324
202045
  runs.push({ type: "TEXT", textData: { text: text13.slice(start, end), decorations } });
@@ -200338,7 +202059,7 @@ function draftDocument(value2) {
200338
202059
  return { nodes: nodes2 };
200339
202060
  }
200340
202061
  function decodeOneAppPage(response, expectedPageId) {
200341
- const dto = object11(response), content = object11(dto.content), body = object11(content.body);
202062
+ const dto = object12(response), content = object12(dto.content), body = object12(content.body);
200342
202063
  if (!isOneAppPageId(expectedPageId) || dto.pageId !== expectedPageId || typeof body.content !== "string" || content.title !== void 0 && typeof content.title !== "string") return invalid();
200343
202064
  const raw = body.content;
200344
202065
  if (richContentOverLimits(raw, null)) return invalid();
@@ -200355,13 +202076,13 @@ function decodeOneAppPage(response, expectedPageId) {
200355
202076
  if (richContentOverLimits(raw, parsed)) return invalid();
200356
202077
  if (contentType === "DRAFTJS") document2 = draftDocument(parsed);
200357
202078
  else {
200358
- if (!Array.isArray(object11(parsed).nodes)) return invalid();
202079
+ if (!Array.isArray(object12(parsed).nodes)) return invalid();
200359
202080
  document2 = parsed;
200360
202081
  }
200361
202082
  } else return unsupported();
200362
202083
  const validNodes = (nodes2) => nodes2.every((value2) => {
200363
- const n2 = object11(value2);
200364
- return typeof n2.type === "string" && n2.type.length > 0 && (n2.type !== "TEXT" || typeof object11(n2.textData).text === "string") && (n2.nodes === void 0 || Array.isArray(n2.nodes) && validNodes(n2.nodes));
202084
+ const n2 = object12(value2);
202085
+ return typeof n2.type === "string" && n2.type.length > 0 && (n2.type !== "TEXT" || typeof object12(n2.textData).text === "string") && (n2.nodes === void 0 || Array.isArray(n2.nodes) && validNodes(n2.nodes));
200365
202086
  });
200366
202087
  if (!validNodes(document2.nodes)) return invalid();
200367
202088
  const normalizedWebsiteLinks = normalizeWebsiteLinks(document2.nodes);
@@ -200387,7 +202108,7 @@ function oneAppPageSection(page, options) {
200387
202108
  documentJson: page.documentJson
200388
202109
  } } };
200389
202110
  }
200390
- var failure, object11, invalid, unsupported, isOneAppPageId;
202111
+ var failure, object12, invalid, unsupported, isOneAppPageId;
200391
202112
  var init_one_app_page = __esm({
200392
202113
  "../../stdlib/flows/screens/src/one-app-page.ts"() {
200393
202114
  init_define_HHP_CATALOG();
@@ -200395,7 +202116,7 @@ var init_one_app_page = __esm({
200395
202116
  failure = (code, message2) => {
200396
202117
  throw Object.assign(new Error(message2), { name: "OneAppPageContentError", code });
200397
202118
  };
200398
- object11 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
202119
+ object12 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
200399
202120
  invalid = () => failure("invalid", "The referenced page returned malformed content.");
200400
202121
  unsupported = () => failure("unsupported", "The referenced page uses an unsupported content format.");
200401
202122
  isOneAppPageId = (value2) => typeof value2 === "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value2);
@@ -200405,16 +202126,16 @@ var init_one_app_page = __esm({
200405
202126
  // src/one-app/pages.ts
200406
202127
  import { createHash as createHash54 } from "node:crypto";
200407
202128
  function oneAppPagePlacements(raw) {
200408
- const sections = object12(raw.sections);
202129
+ const sections = object13(raw.sections);
200409
202130
  const placements = [];
200410
202131
  const read = (elements, base, layoutItemId) => {
200411
202132
  if (!Array.isArray(elements)) return;
200412
202133
  elements.forEach((value2, arrayIndex) => {
200413
- const ref = object12(value2);
202134
+ const ref = object13(value2);
200414
202135
  if (ref.elementType !== "SECTION" || typeof ref.elementId !== "string") return;
200415
- const section3 = object12(sections[ref.elementId]);
202136
+ const section3 = object13(sections[ref.elementId]);
200416
202137
  if ((section3.sectionDefinitionId ?? section3.section_definition_id) !== "pages_section") return;
200417
- const selected = object12(object12(section3.settings).value).pageId;
202138
+ const selected = object13(object13(section3.settings).value).pageId;
200418
202139
  placements.push({
200419
202140
  sectionId: ref.elementId,
200420
202141
  ...layoutItemId ? { layoutItemId } : {},
@@ -200425,8 +202146,8 @@ function oneAppPagePlacements(raw) {
200425
202146
  });
200426
202147
  });
200427
202148
  };
200428
- for (const [id, layout] of Object.entries(object12(raw.layoutItems))) read(object12(layout).elements, `/layoutItems/${pointer(id)}/elements`, id);
200429
- read(object12(raw.businessProfile).elements, "/businessProfile/elements");
202149
+ for (const [id, layout] of Object.entries(object13(raw.layoutItems))) read(object13(layout).elements, `/layoutItems/${pointer(id)}/elements`, id);
202150
+ read(object13(raw.businessProfile).elements, "/businessProfile/elements");
200430
202151
  return placements;
200431
202152
  }
200432
202153
  async function collectOneAppPages(raw, source, read) {
@@ -200457,13 +202178,13 @@ async function collectOneAppPages(raw, source, read) {
200457
202178
  }
200458
202179
  return { version: 1, source, placements, documents: [...documents.values()] };
200459
202180
  }
200460
- var object12, pointer, hash2, ONE_APP_PAGES_BASE;
202181
+ var object13, pointer, hash2, ONE_APP_PAGES_BASE;
200461
202182
  var init_pages = __esm({
200462
202183
  "src/one-app/pages.ts"() {
200463
202184
  init_define_HHP_CATALOG();
200464
202185
  init_one_app_page();
200465
202186
  init_errors2();
200466
- object12 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
202187
+ object13 = (v2) => v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : {};
200467
202188
  pointer = (s2) => s2.replaceAll("~", "~0").replaceAll("/", "~1");
200468
202189
  hash2 = (s2) => createHash54("sha256").update(s2).digest("hex");
200469
202190
  ONE_APP_PAGES_BASE = "https://apps.wix.com/social-content/api/v1/pages/";
@@ -201177,9 +202898,13 @@ var init_header_badges_cli = __esm({
201177
202898
  // src/one-app/payment-review.ts
201178
202899
  import { readFileSync as readFileSync136 } from "node:fs";
201179
202900
  import { join as join126, resolve as resolve88 } from "node:path";
202901
+ function preservesUnverifiedFlow(flow) {
202902
+ const checkout = obj6(flow.checkout);
202903
+ return flow.payment === "online-paid" && obj6(flow.readiness).state === "unverified" && checkout.state === "supported" && text12(checkout.evidence) && (flow.decision === void 0 || obj6(flow.decision).action === "proceed");
202904
+ }
201180
202905
  function initialPaymentReview(metaSiteId) {
201181
202906
  return {
201182
- schemaVersion: 1,
202907
+ schemaVersion: 2,
201183
202908
  metaSiteId,
201184
202909
  inventoryReviewed: false,
201185
202910
  inventoryEvidence: "",
@@ -201194,7 +202919,7 @@ function initialPaymentReview(metaSiteId) {
201194
202919
  function paymentReviewIssues(value2, metaSiteId) {
201195
202920
  const review = obj6(value2);
201196
202921
  const issues = [];
201197
- if (review.schemaVersion !== 1 || !sameSite(review.metaSiteId, metaSiteId)) issues.push("Review must name the collected site and schemaVersion 1.");
202922
+ if (review.schemaVersion !== 1 && review.schemaVersion !== 2 || !sameSite(review.metaSiteId, metaSiteId)) issues.push("Review must name the collected site and schemaVersion 2 (or 1 for a legacy review).");
201198
202923
  if (review.inventoryReviewed !== true || !text12(review.inventoryEvidence)) issues.push("Review the source actions and live read-only catalog/payment options, including free and offline flows, before generation.");
201199
202924
  if (!Array.isArray(review.flows)) return [...issues, "List the reviewed flows (an empty list requires inventory evidence that there are no purchase flows)."];
201200
202925
  if (review.flows.length === 0 && review.noPurchaseFlows !== true) issues.push("An empty inventory requires an explicit noPurchaseFlows: true finding supported by inventoryEvidence.");
@@ -201213,11 +202938,15 @@ function paymentReviewIssues(value2, metaSiteId) {
201213
202938
  }
201214
202939
  const readiness = obj6(flow.readiness);
201215
202940
  const decision = obj6(flow.decision);
202941
+ const checkout = obj6(flow.checkout);
202942
+ if ((review.schemaVersion === 2 || flow.checkout !== void 0) && (typeof checkout.state !== "string" || !["supported", "unsupported", "unverified"].includes(checkout.state) || !text12(checkout.evidence))) issues.push(`${label3} needs supported, unsupported or unverified target checkout compatibility with evidence.`);
201216
202943
  if (!sameSite(readiness.metaSiteId, metaSiteId)) issues.push(`${label3} readiness must name the collected site; evidence from another site cannot authorize checkout.`);
201217
202944
  if (typeof readiness.state !== "string" || !["ready", "missing", "unverified"].includes(readiness.state) || !text12(readiness.evidence)) issues.push(`${label3} needs ready, missing or unverified readiness with site-bound evidence.`);
201218
- if (readiness.state === "ready" && decision.action === "proceed") continue;
202945
+ const checkoutProblem = flow.checkout !== void 0 && checkout.state !== "supported";
202946
+ if (!checkoutProblem && readiness.state === "ready" && decision.action === "proceed") continue;
202947
+ if (preservesUnverifiedFlow(flow)) continue;
201219
202948
  if (typeof decision.action !== "string" || !["retain", "hide", "connect-provider"].includes(decision.action) || !text12(decision.instruction)) {
201220
- issues.push(`${label3} needs the owner's explicit connect-provider, retain or hide decision; do not choose for them.`);
202949
+ issues.push(checkoutProblem ? `${label3} needs an owner decision for the target checkout gap: retain with an explanation or hide the affected interaction.` : readiness.state === "unverified" ? `${label3} needs reviewed target checkout support or an existing owner decision; unknown payment status alone does not require reconnecting payments.` : `${label3} needs the owner's explicit connect-provider, retain or hide decision; do not choose for them.`);
201221
202950
  continue;
201222
202951
  }
201223
202952
  if (decision.action === "connect-provider") issues.push(`${label3} is waiting for owner setup and a new readiness review; do not generate its paid UI yet.`);
@@ -201252,7 +202981,12 @@ function runPaymentReview(args, io2) {
201252
202981
  const review = JSON.parse(readFileSync136(join126(evidenceDir, "payment-review.json"), "utf8"));
201253
202982
  const issues = paymentReviewIssues(review, metaSiteId);
201254
202983
  if (issues.length) return fail7("payment_decision_required", issues, 1);
201255
- io2.log(JSON.stringify({ ok: true, stage: "payment-decisions-reviewed", evidenceDir, verification: "Recorded evidence and decisions checked; merchant readiness is not independently verified by this command." }));
202984
+ const warnings = obj6(review).flows.map(obj6).filter(preservesUnverifiedFlow).map((flow) => ({
202985
+ code: "payment_readiness_unverified",
202986
+ flowId: flow.id,
202987
+ message: "Payment setup could not be verified. Preserve the existing purchase flow with its supported checkout; do not claim payments are disconnected."
202988
+ }));
202989
+ io2.log(JSON.stringify({ ok: true, stage: "payment-decisions-reviewed", evidenceDir, warnings, verification: "Recorded evidence and decisions checked; merchant readiness is not independently verified by this command." }));
201256
202990
  return 0;
201257
202991
  } catch {
201258
202992
  return fail7("payment_review_unreadable", ["Read the collected manifest and source evidence, then prepare payment-review.json for that site."], 1);
@@ -201272,27 +203006,27 @@ var init_payment_review = __esm({
201272
203006
 
201273
203007
  // src/one-app/navigation.ts
201274
203008
  function sourceNavigationKind(raw) {
201275
- const navigation = object13(raw.navigation);
201276
- if (object13(navigation.settings).drawerMode === true) return "side-menu";
203009
+ const navigation = object14(raw.navigation);
203010
+ if (object14(navigation.settings).drawerMode === true) return "side-menu";
201277
203011
  const entries = array4(navigation.bottomTabs);
201278
203012
  if (entries.length > 1) return "bottom-tabs";
201279
- const screens = object13(raw.screens);
201280
- const screenId = string6(object13(entries[0]).screenId);
201281
- const screen = screenId && Object.hasOwn(screens, screenId) ? object13(screens[screenId]) : {};
201282
- return object13(screen.layout).type === "TOP_TABS" ? "top-tabs" : "single";
203013
+ const screens = object14(raw.screens);
203014
+ const screenId = string6(object14(entries[0]).screenId);
203015
+ const screen = screenId && Object.hasOwn(screens, screenId) ? object14(screens[screenId]) : {};
203016
+ return object14(screen.layout).type === "TOP_TABS" ? "top-tabs" : "single";
201283
203017
  }
201284
203018
  function planNavigation(raw, policy = "bottom-tabs") {
201285
- const navigation = object13(raw.navigation);
203019
+ const navigation = object14(raw.navigation);
201286
203020
  const entries = array4(navigation.bottomTabs);
201287
- const screens = object13(raw.screens);
201288
- const layouts = object13(raw.layoutItems);
203021
+ const screens = object14(raw.screens);
203022
+ const layouts = object14(raw.layoutItems);
201289
203023
  const kind = sourceNavigationKind(raw);
201290
203024
  const warnings = [];
201291
- const firstEntry = object13(entries[0]);
203025
+ const firstEntry = object14(entries[0]);
201292
203026
  const rootScreenId = string6(firstEntry.screenId) ?? null;
201293
- const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ? object13(screens[rootScreenId]) : {};
201294
- const rootLayout = object13(rootScreen.layout);
201295
- const settings = object13(navigation.settings);
203027
+ const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ? object14(screens[rootScreenId]) : {};
203028
+ const rootLayout = object14(rootScreen.layout);
203029
+ const settings = object14(navigation.settings);
201296
203030
  const appInstance = string6(raw.appInstance) ?? null;
201297
203031
  const source = {
201298
203032
  kind,
@@ -201304,8 +203038,8 @@ function planNavigation(raw, policy = "bottom-tabs") {
201304
203038
  const next = "Build navigation from this plan with himi docs one-app-to-himi-app. Report every warning; the plan does not replace the source graph.";
201305
203039
  if (kind === "bottom-tabs") {
201306
203040
  entries.forEach((value2, index) => {
201307
- const id = string6(object13(value2).screenId);
201308
- if (id && Object.hasOwn(screens, id) && object13(object13(screens[id]).layout).type === "TOP_TABS") {
203041
+ const id = string6(object14(value2).screenId);
203042
+ if (id && Object.hasOwn(screens, id) && object14(object14(screens[id]).layout).type === "TOP_TABS") {
201309
203043
  warnings.push({ code: "nested_top_tabs", pointer: `/screens/${part3(id)}/layout/type`, reference: `/navigation/bottomTabs/${index}` });
201310
203044
  }
201311
203045
  });
@@ -201316,14 +203050,14 @@ function planNavigation(raw, policy = "bottom-tabs") {
201316
203050
  const tabs = [];
201317
203051
  const hiddenPages = [];
201318
203052
  array4(rootLayout.items).forEach((value2, index) => {
201319
- const layoutItemId = string6(object13(value2).layoutItemId);
203053
+ const layoutItemId = string6(object14(value2).layoutItemId);
201320
203054
  const itemPointer = `${pointer3}/${index}`;
201321
203055
  if (!layoutItemId || !Object.hasOwn(layouts, layoutItemId)) {
201322
203056
  warnings.push({ code: "missing_reference", pointer: itemPointer, ...layoutItemId ? { reference: layoutItemId } : {} });
201323
203057
  return;
201324
203058
  }
201325
- const layout = object13(layouts[layoutItemId]);
201326
- if (object13(layout.settings).hideFromNavigation === true) {
203059
+ const layout = object14(layouts[layoutItemId]);
203060
+ if (object14(layout.settings).hideFromNavigation === true) {
201327
203061
  hiddenPages.push({ layoutItemId, pointer: itemPointer });
201328
203062
  return;
201329
203063
  }
@@ -201368,11 +203102,11 @@ function planNavigation(raw, policy = "bottom-tabs") {
201368
203102
  next
201369
203103
  };
201370
203104
  }
201371
- var object13, array4, string6, part3, TOP_TABS_POLICIES, MAX_BAR_TABS;
203105
+ var object14, array4, string6, part3, TOP_TABS_POLICIES, MAX_BAR_TABS;
201372
203106
  var init_navigation = __esm({
201373
203107
  "src/one-app/navigation.ts"() {
201374
203108
  init_define_HHP_CATALOG();
201375
- object13 = (value2) => value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
203109
+ object14 = (value2) => value2 !== null && typeof value2 === "object" && !Array.isArray(value2) ? value2 : {};
201376
203110
  array4 = (value2) => Array.isArray(value2) ? value2 : [];
201377
203111
  string6 = (value2) => typeof value2 === "string" && value2 ? value2 : void 0;
201378
203112
  part3 = (value2) => value2.replaceAll("~", "~0").replaceAll("/", "~1");
@@ -201933,7 +203667,7 @@ validate-payments checks site-bound payment evidence and explicit paid-flow deci
201933
203667
  warnings: collected.warnings,
201934
203668
  next: [
201935
203669
  `Continue now in this agent session. Read \`himi docs ${ONE_APP_WORKFLOW}\` and the migration manifest at ${artifacts["manifest.json"]}.`,
201936
- "Use the source as evidence and user-prompt.txt as the user's requested changes. Before scaffolding, review actual payment intents and site readiness in payment-review.json, resolve paid-flow decisions with the owner, and run one-app validate-payments. Then generate, validate and publish a hosted draft within the recorded scope.",
203670
+ "Use the source as evidence and user-prompt.txt as the user's requested changes. Before scaffolding, review actual payment intents, site binding and target checkout support in payment-review.json. Preserve supported existing paid flows when payment readiness is unverified; record the uncertainty without asking the owner to reconnect payments. Resolve confirmed payment setup or checkout gaps with the owner, honor existing decisions, and run one-app validate-payments. Then generate, validate and publish a hosted draft within the recorded scope.",
201937
203671
  "This command collected the source. A coding agent must perform the remaining workflow; no model or build was launched by the command."
201938
203672
  ]
201939
203673
  }).trimEnd());
@@ -207168,11 +208902,22 @@ __export(run_exports2, {
207168
208902
  isFidelityComment: () => isFidelityComment,
207169
208903
  prCommentBody: () => prCommentBody,
207170
208904
  rowStatus: () => rowStatus,
208905
+ rtlVariant: () => rtlVariant,
207171
208906
  runFidelity: () => runFidelity,
207172
208907
  runId: () => runId
207173
208908
  });
207174
208909
  import { mkdirSync as mkdirSync55, writeFileSync as writeFileSync59 } from "node:fs";
207175
208910
  import { basename as basename30, join as join134 } from "node:path";
208911
+ function rtlVariant(config) {
208912
+ const locale = config?.locale;
208913
+ const pinned = locale?.pin === true && typeof locale.default === "string" && coerceSupportedLocale(locale.default) !== void 0;
208914
+ const tags = [locale?.default, ...!pinned && Array.isArray(locale?.translations) ? locale.translations : []].filter((t2) => typeof t2 === "string");
208915
+ if (pinned && !isRTL(locale.default)) return { skipped: `the app pins the left-to-right language ${locale.default} (config.ts locale.pin)` };
208916
+ const rtl = tags.filter((t2) => isRTL(t2));
208917
+ const shown2 = rtl.map((t2) => coerceSupportedLocale(t2)).find((t2) => t2 !== void 0);
208918
+ if (shown2) return { locale: shown2 };
208919
+ return { skipped: rtl.length ? `the app's right-to-left language (${rtl.join(", ")}) is not one the Player supports` : "the app ships no right-to-left language (config.ts locale.default / locale.translations)" };
208920
+ }
207176
208921
  function runId(now = /* @__PURE__ */ new Date()) {
207177
208922
  return now.toISOString().replace(/[-:]/g, "").replace(/\..*/, "").replace("T", "-");
207178
208923
  }
@@ -207217,6 +208962,14 @@ async function runFidelity(root, opts = {}) {
207217
208962
  const rows = [];
207218
208963
  try {
207219
208964
  for (const variant of variants) {
208965
+ if (variant === "rtl" && opts.rtl && "skipped" in opts.rtl) {
208966
+ const reason = opts.rtl.skipped;
208967
+ for (const screen of screens) {
208968
+ const row2 = { screen, variant, frames: [{ surface: "web", screen, variant, skipped: { reason } }], scores: [], judge: skippedJudge(reason) };
208969
+ rows.push({ ...row2, ...rowStatus(row2, fidelityThresholds(manifest2, screen)) });
208970
+ }
208971
+ continue;
208972
+ }
207220
208973
  let webFrames;
207221
208974
  try {
207222
208975
  webFrames = await web(root, variant, framesDir, screens);
@@ -207302,6 +209055,7 @@ var init_run2 = __esm({
207302
209055
  init_judge();
207303
209056
  init_score();
207304
209057
  init_strip();
209058
+ init_locale();
207305
209059
  NATIVE_MASK = { top: 60, bottom: 0 };
207306
209060
  worst = (rows) => rows.some((r3) => r3.status === "fail") ? "fail" : rows.some((r3) => r3.status === "warn") ? "warn" : "pass";
207307
209061
  skippedJudge = (reason) => ({ verdict: "cannot_tell", design: "cannot_tell", parity: "cannot_tell", findings: [], confidence: "low", reason });
@@ -207698,6 +209452,16 @@ async function fidelityCommand(ctx) {
207698
209452
  return 2;
207699
209453
  }
207700
209454
  }
209455
+ let rtl;
209456
+ if (!variants.length || variants.includes("rtl")) {
209457
+ const { rtlVariant: rtlVariant2 } = await Promise.resolve().then(() => (init_run2(), run_exports2));
209458
+ const { loadAppConfigModule: loadAppConfigModule2 } = await Promise.resolve().then(() => (init_app_config_loader(), app_config_loader_exports));
209459
+ try {
209460
+ rtl = rtlVariant2(await loadAppConfigModule2(dir));
209461
+ } catch (e2) {
209462
+ rtl = { skipped: `config.ts did not load: ${e2.message.split("\n")[0]}` };
209463
+ }
209464
+ }
207701
209465
  let plane;
207702
209466
  let native;
207703
209467
  if (flags["no-native"] === true) native = false;
@@ -207719,7 +209483,7 @@ async function fidelityCommand(ctx) {
207719
209483
  return 1;
207720
209484
  }
207721
209485
  }
207722
- const capture = nativeCapture2(devices, { appId: app, ...release2 ? { release: release2 } : {}, ...plane ? { serveOrigin: plane.origin } : {} });
209486
+ const capture = nativeCapture2(devices, { appId: app, ...release2 ? { release: release2 } : {}, ...plane ? { serveOrigin: plane.origin } : {}, ...rtl && "locale" in rtl ? { rtlLanguage: rtl.locale } : {} });
207723
209487
  native = capture;
207724
209488
  const onSignal = () => {
207725
209489
  void capture.restore().finally(() => plane?.close()).finally(() => process.exit(130));
@@ -207729,7 +209493,7 @@ async function fidelityCommand(ctx) {
207729
209493
  }
207730
209494
  let report4;
207731
209495
  try {
207732
- report4 = await runFidelity2(dir, { judgeDir, screens: list(flags.screen), variants, ...native !== void 0 ? { native } : {} });
209496
+ report4 = await runFidelity2(dir, { judgeDir, screens: list(flags.screen), variants, ...native !== void 0 ? { native } : {}, ...rtl ? { rtl } : {} });
207733
209497
  } catch (e2) {
207734
209498
  const code = e2.code;
207735
209499
  if (code === "fidelity_not_hhp" || code === "fidelity_unknown_screen") {
@@ -208957,7 +210721,7 @@ var COMMANDS = [
208957
210721
  { name: "ux", summary: "audit or record mobile UX evidence. `audit` checks the public-safe contract, seeded blank acceptance rows, placeholder source copy, app-specific mocks, and iOS/Android audit records. It warns while existing templates migrate; `--strict` promotes missing evidence. `record` stores checks performed on an installed iOS/Android build: `--checks` is required for passed|failed and empty for unavailable, which drove nothing and needs a `--reason` instead. `record` also STAMPS the release it audited (it resolves the id from a build, the same one a push would publish), because an unforced `himi push` of a release with screens refuses when no drive is recorded for THAT release, or when the one that is recorded says `failed` \u2014 the artifact stopped being advice nobody reads (#2955). `unavailable` still satisfies it; only `failed` refuses.", required: "audit [--content <dir>] [--strict] [--json] | record --content <dir> --platform ios|android --status passed|failed|unavailable [--checks back,keyboard,...] [--reason <text>]" },
208958
210722
  { name: "progress", summary: 'the build JOURNAL an agent keeps for the owner while it works. `himi progress "<what changed>" --step <1-8|name> --image <png>` appends one postcard to .himi/progress.jsonl \u2014 the step is one of the customer journey\'s eight (discover, classify, plan, implement, brand, validate, review, download) \u2014 and COPIES each image, content-addressed, into .himi/history/, because .himi/shots/ is overwritten by every render and cleared by every full `himi test`, so a path into it would later show a different picture than the one the owner was sent. --image repeats. With NO --image, the home screen\'s current shot is attached automatically, only when it is no older than the last source change and not the picture the latest journaled postcard already shows \u2014 and never a shot that landed on loading placeholders, an empty or an error state (.himi/shot-states.json): then the newest home picture of the current source that shows content goes on instead (its .himi/history copy, `imageNote` saying so), or none \u2014 except on the HANDOVER card (`--step review`), where a repeat is the point and it attaches anyway; that card\'s output also names the making-of (`makingOf`, .himi/making-of.html, rebuilt when missing or older than the journal so it ends on this card) and its `next` says to hand it to the owner beside the preview link; `imageAttached` in the output says whether the postcard carries a picture (with `imageNote` saying why not, or which picture went on instead), and `--no-image` sends a text-only postcard. --notify also raises a best-effort desktop notification for an owner who stepped away. A bare `himi progress` prints the journal with the current step and elapsed time \u2014 also how an agent recovers its place after its context was compacted. APPROVALS: `--approve <gate> "<what>"` records one the customer just gave (gates: site-create, connect, private-data, draft, promote, push-signing, qa-build) in .himi/approvals.jsonl, and `--done <gate>` / `--drop <gate>` closes it \u2014 an approval is owed until then, and the chat that held it does not survive a new session. `--brief` prints plain text for a session start: the current step, the last postcard, every open approval, and whether this app\'s agent files are stale \u2014 the SessionStart hook `himi agent-init` installs runs exactly this. The CLI also journals milestones by itself \u2014 the first PNG render of the home screen (for an app a current `himi init` started: once as the template\'s "Starting point" while the source is what init wrote, then once as "First look at your app" after it diverges, Markdown edits not counting; once per app otherwise), a `himi test` crawl whose outcome changed since the last one (its counts or its home picture; an identical re-run writes none, and a repeat names what changed: "The home screen changed since the last crawl." or the changed counts, was \u2192 now), every draft push (with the home picture only when that shot is newer than the last source edit \u2014 otherwise the postcard says why and names `himi render <home> --png`), and ONE rule for a long silence: a successful home `render --png` more than ten minutes after the newest postcard of any kind, with a picture the latest postcard does not show, journals "Still building: here\'s the home screen now." with it (never twice within the window). When a crawl\'s or a draft\'s home picture is the first of an app whose source diverged, "First look at your app" is journaled first, from that shot, once. All are marked `"by": "himi"`; they never move the journey step, carry no link or credential, and step aside (folded out of every reader) when the agent journals the same step or picture within five minutes. Local only: nothing is sent anywhere.', required: '["<message>" [--step <1-8|name>] [--image <png>]\u2026 [--no-image] [--notify]] [--content <dir>] | --approve|--done|--drop <gate> ["<note>"] | --brief' },
208959
210723
  { name: "studio", summary: "open the BUILD BOARD \u2014 one local page the owner can leave open while an agent builds their app, which fills itself in: every screen as it renders (NEW/CHANGED badges, and each earlier version kept for a filmstrip), the journey stepper and the latest postcard from `himi progress`, the validate/test/UX/draft checks as they run, the site next to the app's home screen with its palette, and the navigation the test crawl followed. Writes .himi/studio/index.html and opens it; the page re-reads its state every two seconds, so nothing needs to be served. OPT-IN BY EXISTENCE: until this command (or `himi init`, which makes the board for every app it creates, without opening a browser) has run, no other command touches .himi/studio/ \u2014 after it, render/test/validate/push/icon/site/ux/progress each refresh the board as they finish (best-effort; never fails a command). Every image is a content-addressed copy in .himi/history/, never a live path into .himi/shots/. Local only, no secrets: it never reads a preview token, handover code or control token. --no-open prints the path instead (SSH, CI). `himi studio reel` writes the MAKING-OF: one self-contained HTML file (every image inlined, nothing fetched) with a flipbook of the home screen version by version, captioned by the postcard in effect at the time, the final screens, and every postcard \u2014 sized to stay attachable, thinning frames first. Defaults to .himi/making-of.html (never archived by push), which every successful `himi push --draft` also rebuilds and names as `reel` in its output; --out to put it elsewhere. The output names that file as the one to hand the owner (`handover: {file, hint}` in JSON; two plain lines at a terminal) \u2014 beside the preview link, never instead of it.", required: "[--content <dir>] [--no-open] | reel [--out <file>] [--no-open]" },
208960
- { name: "render", summary: "headless-render a screen with the web renderer: render-tree + diagnostics, optional --png [<file>] (bare: .himi/shots/<id>.png, what the build board shows), --scheme dark, --tree. Local by default (content dir). Pass --remote --app --release to hit GET /v1/preview/\u2026/render on the serve plane after a push. Boots the worker so $service bindings resolve; --static raw bindings; --live real Wix fetches; --mocks (the DEFAULT whenever the app has recorded data; --no-mocks for the offline initial state) runs load() against the app's own recorded data (dev/net-mocks.json from `himi test --record`, then the config's cms seed rows, and the Base44 layer `himi test` uses \u2014 base44.entities seed rows and the analyze book's sample rows \u2014 hermetic, never a request; with neither it paints the initial state, and `mocks: {used: false}` says why), which is what the automatic pictures use, so they show the app's content instead of its offline placeholders; --state injects worker state; --input supplies pre-boot navigation params; --width/--device for PNG viewport; --rtl for dir=rtl + $env:isRTL.", required: "<screenId> [--content <dir>] [--scheme dark] [--png [<file>]] [--tree] [--static] [--live] [--mocks | --no-mocks] [--state <json|file>] [--input <json|file>] [--width <px> | --device <name>] [--rtl] [--remote --app --release]" },
210724
+ { name: "render", summary: "headless-render a screen with the web renderer: render-tree + diagnostics, optional --png [<file>] (bare: .himi/shots/<id>.png, what the build board shows), --scheme dark, --tree. Local by default (content dir). Pass --remote --app --release to hit GET /v1/preview/\u2026/render on the serve plane after a push. Boots the worker so $service bindings resolve; --static raw bindings; --live real Wix fetches; --mocks (the DEFAULT whenever the app has recorded data; --no-mocks for the offline initial state) runs load() against the app's own recorded data (dev/net-mocks.json from `himi test --record`, then the config's cms seed rows, and the Base44 layer `himi test` uses \u2014 base44.entities seed rows and the analyze book's sample rows \u2014 hermetic, never a request; with neither it paints the initial state, and `mocks: {used: false}` says why), which is what the automatic pictures use, so they show the app's content instead of its offline placeholders; --state injects worker state; --input supplies pre-boot navigation params; --width/--device for PNG viewport; --rtl for dir=rtl + $env:isRTL.", required: "<screenId> [--content <dir>] [--scheme dark] [--png [<file>]] [--tree] [--static] [--live] [--mocks | --no-mocks] [--state <json|file>] [--input <json|file>] [--width <px> | --device <name>] [--platform ios|android] [--rtl] [--remote --app --release]" },
208961
210725
  { name: "fidelity", summary: "does each HHP screen look like the mockup it was designed from? Per screen and variant (light, dark, rtl, tablet) it captures the free-HTML mockup (hhp.json `mockup`) and the web render with the app's recorded data, scores mockup\u2194web (ImageMagick SSIM, global + worst tile), and asks a fresh model (tools/judges/fidelity) two questions: design (web vs mockup) and parity (native vs web). Native frames come from Himi Player on the devices passed with --ios/--android (and --ios-tablet/--android-tablet for the tablet variant), opened by `himi://app/<app-id>/screen/<screen>`; only those devices are touched, their appearance and language are restored afterwards, and a variant with no device is reported skipped. --serve <port> serves the working copy on 127.0.0.1:<port> as `himi run` does, for a Debug Player built against that origin; an iOS Player built against another origin is skipped with the rebuild to run. pass/warn/fail per row; exit 1 if any row fails. Writes .himi/fidelity/<run>/report.json and a strip PNG per row. --post-pr <n> keeps one plain PR comment up to date. Advisory, not a merge gate; repo-only for now (refuses with code fidelity_outside_repo elsewhere).", required: "[--content <dir>] [--screen <id,\u2026>] [--variant <light,dark,rtl,tablet>] [--ios <udid>] [--android <serial>] [--ios-tablet <udid>] [--android-tablet <serial>] [--app-id <id>] [--release <id>] [--serve <port>] [--no-native] [--json] [--post-pr <n>]" },
208962
210726
  { name: "l10n", summary: "import translations into per-app RFC 0054 catalogs (`apps/<app>/l10n/<tag>.json`). `import --format oneapp <dir>` converts OneApp `messages_<locale>.json` files (flat OneApp key \u2192 ICU MessageFormat string): the OneApp key becomes the catalog row's `key` (what a descriptor references as `$t:<KEY>`), the row id is the extractor's content hash of the source-locale string, and `{{x}}` placeholders become ICU `{x}`. Messages using constructs outside the supported ICU subset (selectordinal, number/date skeletons, plural offset, HTML tags) are kept VERBATIM and listed in the report with key and locale. Merges with an existing catalog \u2014 manual translations and keys survive unless --overwrite; rows the import does not touch survive always. Default locales: every messages_<tag>.json found; --source (default en) names the locale supplying each row's `source` string. Warns when the app's `locale` config does not declare an imported tag, printing the config line to add. Deterministic output: re-running over the same inputs produces no diff.", required: "import --format oneapp <dir> (--app <slug> | --content <app dir>) [--locales en,he] [--source en] [--overwrite] [--json]" },
208963
210727
  { name: "cms", summary: "inspect, provision, and seed the app's CMS (Wix Data) collections, declared as a `cms` block in config.ts. `query` is READ-ONLY \u2014 by default it fetches ONLY the physical ids `config.ts` declares (item counts + schema drift) and reports `siteScanned: false`; it never lists the site, so an UNDECLARED `himi_<app>_` collection this app owns is not reached without `--all`. `--all` SCANS the site \u2014 every collection it lists is labeled `owned`/`adopted`/`foreign`, and it describes every foreign one \u2014 id, non-system field keys + types, and the site's read role \u2014 so an app with no `cms` block at all can DISCOVER a collection to adopt (`--all` is the one case where a missing `cms` block is not 'nothing to do'). Foreign collections are described up to a cap and are never item-counted (`itemCount: null`), because a row count is one query each; `foreign.count` is how many the scan LISTED \u2014 it follows the list endpoint's pages, and `listingIncomplete: true` says when the walk stopped short of the end, with `unlistedCollections` counting what it left out when Wix gave a paging total \u2014 and `foreign.truncated` says how many of those went undescribed, each still NAMED in `foreign.others` (id + displayName), so a collection the site already has is never hidden behind the cap. The scan is OWNER-scoped \u2014 it needs --site <msid> (or WIX_SITE_ID) plus owner auth via `wix token`; a visitor token can read a public collection's ITEMS but can never enumerate collections, so there is no tokenless discovery path. `create` reconciles declared collections additively and idempotently, and REFUSES any id outside the app's `himi_<app>_` namespace, so it is safe against a production site. It reports declared-vs-site `permissionDrift` but never writes permissions unless asked with --apply-permissions, so a field reconcile can't silently revert access control changed in the dashboard. `seed` inserts the git-tracked `seed:` rows into EMPTY owned collections (--force to add to a non-empty one; --ai writes placeholder rows plus a refinement prompt for you to review). Adopted collections (declared by `wixId`) are read-only and never created, updated, or seeded. Site from --site <msid> or WIX_SITE_ID; owner auth via `wix token`.", required: "query|create|seed [--site <msid>] [--content <dir>] [--all] [--dry-run] [--force] [--allow-destructive] [--apply-permissions] [--only <id>] [--ai] [--count <n>]" },