@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.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/app-config.d.ts +13 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +15 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +30 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/index.d.ts +2 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/one-app-section.d.ts +39 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/screens/src/one-app-visibility.d.ts +22 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/telemetry/wix-bi/src/oneapp.d.ts +3 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +151 -24
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +8 -0
- package/dist/cli.mjs +2171 -407
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/android-ux.md +66 -29
- package/guides/component-reference.json +15 -3
- package/guides/component-reference.md +28 -3
- package/guides/designing-himi-screens.md +46 -11
- package/guides/getting-started.md +2 -1
- package/guides/hhp.md +3 -1
- package/guides/himi-json-output.md +11 -1
- package/guides/himi-skill.md +2 -1
- package/guides/index.json +1 -1
- package/guides/ios-ux.md +110 -31
- package/guides/mobile-ux.md +22 -5
- package/guides/one-app-section-mappings.md +32 -0
- package/guides/one-app-to-himi-app.md +133 -9
- package/guides/skill.md +25 -1
- package/guides/tier-5-add-a-screen.md +2 -0
- package/package.json +2 -2
- 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: "
|
|
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: {
|
|
1979
|
+
state: { notifications: true, appearance: "auto", title: "Hello from ${name}" },
|
|
1976
1980
|
actions: {
|
|
1977
|
-
|
|
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:
|
|
2097
|
-
alignment: "
|
|
2101
|
+
spacing: 24,
|
|
2102
|
+
alignment: "leading",
|
|
2098
2103
|
children: [
|
|
2099
|
-
{
|
|
2100
|
-
|
|
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**:
|
|
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
|
|
2625
|
+
const memberOnly2 = ["SITE_MEMBER", "SITE_MEMBER_AUTHOR"];
|
|
2583
2626
|
const effective = permissionsFor(spec);
|
|
2584
|
-
const gatedOps = ["insert", "update"].filter((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
|
|
5869
|
-
if (!
|
|
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(
|
|
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(
|
|
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
|
|
12728
|
-
if (
|
|
12729
|
-
for (const [key3, child] of Object.entries(
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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(
|
|
36034
|
-
return
|
|
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,
|
|
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 &&
|
|
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(
|
|
44766
|
-
return definePropertyModule.f(
|
|
44767
|
-
} : function(
|
|
44768
|
-
|
|
44769
|
-
return
|
|
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(
|
|
44789
|
-
if (DESCRIPTORS) definePropertyModule.f(
|
|
44790
|
-
else
|
|
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(
|
|
46596
|
+
module.exports = function(object15, key3, method) {
|
|
45081
46597
|
try {
|
|
45082
|
-
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(
|
|
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
|
|
46051
|
-
if (hasOwn(
|
|
46052
|
-
var constructor =
|
|
46053
|
-
if (isCallable(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
|
|
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(
|
|
46073
|
-
var O2 = toIndexedObject(
|
|
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(
|
|
49032
|
+
var internalizeProperty = function(object15, key3, value2) {
|
|
47517
49033
|
if (DESCRIPTORS) {
|
|
47518
|
-
var descriptor = getOwnPropertyDescriptor(
|
|
49034
|
+
var descriptor = getOwnPropertyDescriptor(object15, key3);
|
|
47519
49035
|
if (descriptor && !descriptor.configurable) return;
|
|
47520
49036
|
}
|
|
47521
|
-
if (value2 === void 0) delete
|
|
47522
|
-
else createProperty(
|
|
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
|
|
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(
|
|
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,
|
|
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
|
|
69706
|
-
for (let i2 = 0; i2 <
|
|
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
|
-
|
|
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[
|
|
69719
|
-
|
|
71234
|
+
outline[N5] = outline[N5 + 1] = NaN;
|
|
71235
|
+
N5 += 2;
|
|
69720
71236
|
continue;
|
|
69721
71237
|
}
|
|
69722
|
-
outline[
|
|
69723
|
-
outline[
|
|
69724
|
-
|
|
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,
|
|
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
|
|
71767
|
-
const types2 = new Int32Array(
|
|
71768
|
-
for (let i2 = 0; 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
|
|
71935
|
-
const out2 = new Uint8Array(
|
|
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
|
|
71974
|
-
const out2 = new Uint8ClampedArray(
|
|
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,
|
|
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,
|
|
80891
|
+
if (o2 && !h2(D2, N5)) {
|
|
79376
80892
|
L2 = true;
|
|
79377
|
-
g2(D2,
|
|
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),
|
|
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 =
|
|
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
|
|
83752
|
-
if (
|
|
83753
|
-
warn2("JpegImage.parse - unexpected data, current marker is: " +
|
|
83754
|
-
i2 =
|
|
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 (!
|
|
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,
|
|
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
|
-
|
|
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 <=
|
|
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
|
-
|
|
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,
|
|
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,
|
|
84553
|
-
|
|
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
|
-
|
|
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
|
|
106335
|
-
this.extractWidths(t2, e2,
|
|
106336
|
-
const _2 = new Font(h2.name, d2,
|
|
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
|
|
117950
|
-
|
|
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
|
-
|
|
119470
|
+
N5.push(`0 -${_2} Td (${escapeString(t4)}) Tj`);
|
|
117955
119471
|
}
|
|
117956
|
-
|
|
117957
|
-
const E2 =
|
|
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
|
|
121615
|
+
let N5 = false, _2 = false;
|
|
120100
121616
|
for (const { opList: e3, separateForm: t3, separateCanvas: n3 } of M2) {
|
|
120101
121617
|
v2.addOpList(e3);
|
|
120102
|
-
|
|
121618
|
+
N5 ||= t3;
|
|
120103
121619
|
_2 ||= n3;
|
|
120104
121620
|
}
|
|
120105
|
-
v2.flush(true, { form:
|
|
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
|
|
125313
|
+
const N5 = 26;
|
|
123798
125314
|
const parts = [];
|
|
123799
|
-
for (let i2 = 0; 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
|
|
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
|
|
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
|
-
|
|
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,
|
|
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:
|
|
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,
|
|
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,
|
|
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
|
-
{ ...
|
|
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,
|
|
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,
|
|
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
|
|
139217
|
-
return "{" + Object.keys(
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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
|
|
146607
|
+
return dataCodewords2(ver) - Math.ceil((4 + lenBits) / 8);
|
|
145006
146608
|
}
|
|
145007
146609
|
function fitVersion(len) {
|
|
145008
|
-
for (let v2 = 1; 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
|
|
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] =
|
|
146619
|
+
result[j2] = gfMul2(result[j2], root);
|
|
145018
146620
|
if (j2 + 1 < degree) result[j2] ^= result[j2 + 1];
|
|
145019
146621
|
}
|
|
145020
|
-
root =
|
|
146622
|
+
root = gfMul2(root, 2);
|
|
145021
146623
|
}
|
|
145022
146624
|
return result;
|
|
145023
146625
|
}
|
|
145024
|
-
function
|
|
145025
|
-
const divisor =
|
|
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] ^=
|
|
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 =
|
|
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 <
|
|
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(
|
|
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
|
|
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 ${
|
|
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
|
|
145160
|
-
for (const ax of
|
|
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,
|
|
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
|
-
|
|
145242
|
-
totalCodewords = (ver) => Math.floor(
|
|
145243
|
-
|
|
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
|
-
|
|
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(
|
|
153933
|
-
const attrValues = this.extractAttributes(
|
|
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(
|
|
153938
|
-
const attrStr = this.buildAttributesForStopNode(
|
|
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(
|
|
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 (
|
|
153947
|
-
return this.buildTextValNode(
|
|
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(
|
|
164093
|
-
return
|
|
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(
|
|
164134
|
-
return Object.prototype.toString.call(
|
|
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(
|
|
164143
|
-
return
|
|
165744
|
+
lowercase: function(object15) {
|
|
165745
|
+
return object15 ? "true" : "false";
|
|
164144
165746
|
},
|
|
164145
|
-
uppercase: function(
|
|
164146
|
-
return
|
|
165747
|
+
uppercase: function(object15) {
|
|
165748
|
+
return object15 ? "TRUE" : "FALSE";
|
|
164147
165749
|
},
|
|
164148
|
-
camelcase: function(
|
|
164149
|
-
return
|
|
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(
|
|
164239
|
-
return Object.prototype.toString.call(
|
|
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(
|
|
164307
|
-
if (isNaN(
|
|
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 ===
|
|
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 ===
|
|
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(
|
|
165936
|
+
} else if (common2.isNegativeZero(object15)) {
|
|
164335
165937
|
return "-0.0";
|
|
164336
165938
|
}
|
|
164337
|
-
const res =
|
|
165939
|
+
const res = object15.toString(10);
|
|
164338
165940
|
return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
|
|
164339
165941
|
}
|
|
164340
|
-
function isFloat(
|
|
164341
|
-
return Object.prototype.toString.call(
|
|
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(
|
|
164421
|
-
return
|
|
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(
|
|
166092
|
+
function representYamlBinary(object15) {
|
|
164491
166093
|
let result = "";
|
|
164492
166094
|
let bits = 0;
|
|
164493
|
-
const max =
|
|
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) +
|
|
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
|
|
164545
|
-
for (let index = 0, length =
|
|
164546
|
-
const pair =
|
|
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
|
|
164580
|
-
const result = new Array(
|
|
164581
|
-
for (let index = 0, length =
|
|
164582
|
-
const pair =
|
|
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
|
|
164593
|
-
const result = new Array(
|
|
164594
|
-
for (let index = 0, length =
|
|
164595
|
-
const pair =
|
|
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
|
|
164616
|
-
for (const key3 in
|
|
164617
|
-
if (_hasOwnProperty.call(
|
|
164618
|
-
if (
|
|
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(
|
|
166366
|
+
function setProperty(object15, key3, value2) {
|
|
164765
166367
|
if (key3 === "__proto__") {
|
|
164766
|
-
Object.defineProperty(
|
|
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
|
-
|
|
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,
|
|
167999
|
+
function writeFlowSequence(state, level, object15) {
|
|
166398
168000
|
let _result = "";
|
|
166399
168001
|
const _tag = state.tag;
|
|
166400
|
-
for (let index = 0, length =
|
|
166401
|
-
let value2 =
|
|
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(
|
|
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,
|
|
168015
|
+
function writeBlockSequence(state, level, object15, compact) {
|
|
166414
168016
|
let _result = "";
|
|
166415
168017
|
const _tag = state.tag;
|
|
166416
|
-
for (let index = 0, length =
|
|
166417
|
-
let value2 =
|
|
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(
|
|
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,
|
|
168038
|
+
function writeFlowMapping(state, level, object15) {
|
|
166437
168039
|
let _result = "";
|
|
166438
168040
|
const _tag = state.tag;
|
|
166439
|
-
const objectKeyList = Object.keys(
|
|
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 =
|
|
168047
|
+
let objectValue = object15[objectKey];
|
|
166446
168048
|
if (state.replacer) {
|
|
166447
|
-
objectValue = state.replacer.call(
|
|
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,
|
|
168065
|
+
function writeBlockMapping(state, level, object15, compact) {
|
|
166464
168066
|
let _result = "";
|
|
166465
168067
|
const _tag = state.tag;
|
|
166466
|
-
const objectKeyList = Object.keys(
|
|
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 =
|
|
168082
|
+
let objectValue = object15[objectKey];
|
|
166481
168083
|
if (state.replacer) {
|
|
166482
|
-
objectValue = state.replacer.call(
|
|
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,
|
|
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
|
|
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(
|
|
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(
|
|
168133
|
+
_result = type2.represent(object15, style);
|
|
166532
168134
|
} else if (_hasOwnProperty.call(type2.represent, style)) {
|
|
166533
|
-
_result = type2.represent[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,
|
|
168146
|
+
function writeNode(state, level, object15, block, compact, iskey, isblockseq) {
|
|
166545
168147
|
state.tag = null;
|
|
166546
|
-
state.dump =
|
|
166547
|
-
if (!detectType(state,
|
|
166548
|
-
detectType(state,
|
|
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(
|
|
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(
|
|
168227
|
+
function getDuplicateReferences(object15, state) {
|
|
166626
168228
|
const objects = [];
|
|
166627
168229
|
const duplicatesIndexes = [];
|
|
166628
|
-
inspectNode(
|
|
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(
|
|
166636
|
-
if (
|
|
166637
|
-
const index = objects.indexOf(
|
|
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(
|
|
166644
|
-
if (Array.isArray(
|
|
166645
|
-
for (let i2 = 0, length =
|
|
166646
|
-
inspectNode(
|
|
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(
|
|
168251
|
+
const objectKeyList = Object.keys(object15);
|
|
166650
168252
|
for (let i2 = 0, length = objectKeyList.length; i2 < length; i2 += 1) {
|
|
166651
|
-
inspectNode(
|
|
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(
|
|
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(
|
|
179616
|
-
result[id] = own5(result, id) ? { ...
|
|
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(
|
|
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(
|
|
179628
|
-
result[id] = own5(result, id) ? { ...
|
|
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 = { ...
|
|
179634
|
-
for (const [id, value2] of Object.entries(
|
|
179635
|
-
result[id] = own5(result, id) ? { ...
|
|
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 = { ...
|
|
179641
|
-
for (const [id, value2] of Object.entries(
|
|
179642
|
-
result[id] = own5(result, id) ? { ...
|
|
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 =
|
|
179648
|
-
const allSections =
|
|
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 =
|
|
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(
|
|
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(
|
|
179667
|
-
const layoutId = string5(
|
|
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(
|
|
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) =>
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
179769
|
-
const 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 = { ...
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
179865
|
-
const id = string5(
|
|
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 =
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
181701
|
+
const root = object8(settings);
|
|
180030
181702
|
const out2 = [];
|
|
180031
|
-
const display =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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(
|
|
180746
|
-
return
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
180918
|
-
const headers2 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
180936
|
-
const 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
|
|
181073
|
-
if (
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
183010
|
+
const entry = object10(row2) ?? {};
|
|
181290
183011
|
const badge = typeof entry.id === "string" ? badgeDefinitions.get(entry.id) : void 0;
|
|
181291
|
-
const destination =
|
|
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 =
|
|
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-
|
|
184974
|
-
{ key: "assets/DevDrawer-
|
|
184975
|
-
{ key: "assets/IdiomCompare-
|
|
184976
|
-
{ key: "assets/LightboxViewer-
|
|
184977
|
-
{ key: "assets/OfflineReadingBar-
|
|
184978
|
-
{ key: "assets/PhonePreviewControl-
|
|
184979
|
-
{ key: "assets/SchemeCompare-
|
|
184980
|
-
{ key: "assets/WixFrogTelemetrySink-
|
|
184981
|
-
{ key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184982
|
-
{ key: "assets/catalog-CAoUWITw.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184983
|
-
{ key: "assets/catalogFontFaces-
|
|
184984
|
-
{ key: "assets/files-transfer-
|
|
184985
|
-
{ key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184986
|
-
{ key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184987
|
-
{ key: "assets/index-
|
|
184988
|
-
{ key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184989
|
-
{ key: "assets/pdf-
|
|
184990
|
-
{ key: "assets/pdf.worker.min-BGnVRhRG.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184991
|
-
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset:
|
|
184992
|
-
{ key: "assets/pdfDocument-
|
|
184993
|
-
{ key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
184994
|
-
{ key: "assets/webviewBridgeHost-
|
|
184995
|
-
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset:
|
|
184996
|
-
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset:
|
|
184997
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
184998
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
184999
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
185000
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
185001
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
185002
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
185003
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
185004
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
185005
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
185006
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
185007
|
-
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset:
|
|
185008
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
185009
|
-
{ key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset:
|
|
185010
|
-
{ key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset:
|
|
185011
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
185012
|
-
{ key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
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 =
|
|
188881
|
-
const payment =
|
|
188882
|
-
const fixed =
|
|
188883
|
-
const price =
|
|
188884
|
-
const options =
|
|
188885
|
-
const policy =
|
|
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(
|
|
190613
|
+
conferencing: boolean3(object11(s2.conferencing).enabled),
|
|
188893
190614
|
locations: Array.isArray(s2.locations) ? s2.locations.map(locationType) : void 0,
|
|
188894
|
-
onlineBooking: boolean3(
|
|
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 =
|
|
190624
|
+
const location = object11(raw);
|
|
188904
190625
|
const type2 = text10(location.type) ?? "UNKNOWN";
|
|
188905
|
-
const addresses = [
|
|
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 =
|
|
188919
|
-
const t2 =
|
|
188920
|
-
const pricing =
|
|
188921
|
-
const price =
|
|
188922
|
-
const 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(
|
|
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
|
|
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 =
|
|
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 (
|
|
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 =
|
|
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 =
|
|
202006
|
+
const entities = object12(draft.entityMap);
|
|
200286
202007
|
const nodes2 = [];
|
|
200287
202008
|
for (const raw of draft.blocks) {
|
|
200288
|
-
const block =
|
|
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) => ({ ...
|
|
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 =
|
|
200302
|
-
const 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 =
|
|
200320
|
-
if (entity.type !== "LINK" || typeof
|
|
200321
|
-
decorations.push({ type: "LINK", linkData: { link: { 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 =
|
|
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(
|
|
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 =
|
|
200364
|
-
return typeof n2.type === "string" && n2.type.length > 0 && (n2.type !== "TEXT" || typeof
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
202134
|
+
const ref = object13(value2);
|
|
200414
202135
|
if (ref.elementType !== "SECTION" || typeof ref.elementId !== "string") return;
|
|
200415
|
-
const section3 =
|
|
202136
|
+
const section3 = object13(sections[ref.elementId]);
|
|
200416
202137
|
if ((section3.sectionDefinitionId ?? section3.section_definition_id) !== "pages_section") return;
|
|
200417
|
-
const selected =
|
|
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(
|
|
200429
|
-
read(
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
201276
|
-
if (
|
|
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 =
|
|
201280
|
-
const screenId = string6(
|
|
201281
|
-
const screen = screenId && Object.hasOwn(screens, screenId) ?
|
|
201282
|
-
return
|
|
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 =
|
|
203019
|
+
const navigation = object14(raw.navigation);
|
|
201286
203020
|
const entries = array4(navigation.bottomTabs);
|
|
201287
|
-
const screens =
|
|
201288
|
-
const layouts =
|
|
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 =
|
|
203025
|
+
const firstEntry = object14(entries[0]);
|
|
201292
203026
|
const rootScreenId = string6(firstEntry.screenId) ?? null;
|
|
201293
|
-
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ?
|
|
201294
|
-
const rootLayout =
|
|
201295
|
-
const 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(
|
|
201308
|
-
if (id && Object.hasOwn(screens, id) &&
|
|
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(
|
|
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 =
|
|
201326
|
-
if (
|
|
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
|
|
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
|
-
|
|
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
|
|
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>]" },
|