@wix/himalaya-cli 0.950.0 → 0.952.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 +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/app-module.d.ts +3 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +7 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +29 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +1 -0
- package/dist/cli.mjs +48 -15
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/sdk-reference.json +1 -1
- package/package.json +2 -2
|
@@ -57,6 +57,7 @@ export interface NavigationConfig {
|
|
|
57
57
|
name?: string;
|
|
58
58
|
sidebar?: SidebarConfig;
|
|
59
59
|
navLogicBundle?: import("@wix/himalaya/core").LogicBundleRef;
|
|
60
|
+
appIconBadgeSources?: string[];
|
|
60
61
|
/** Signed release allowlist for contained browser Tier-5 `_stream` requests. */
|
|
61
62
|
streamPolicy?: StreamPolicy;
|
|
62
63
|
splash?: SplashConfig;
|
|
@@ -199,6 +199,9 @@ export interface DerivedAppMeta {
|
|
|
199
199
|
* absolutizes the URL and computes the digest at serve time, exactly as a
|
|
200
200
|
* screen's `logicBundle` is filled from its ScreenBuildContext. */
|
|
201
201
|
navLogicBundle?: import("@wix/himalaya/core").LogicBundleRef;
|
|
202
|
+
/** Forwarded from AppConfig.navigation.appIconBadgeSources — RFC 0010 (app-icon
|
|
203
|
+
* amendment). Which nav badges also drive the OS app-icon badge. */
|
|
204
|
+
appIconBadgeSources?: string[];
|
|
202
205
|
/** Forwarded from AppConfig.navigation.streamPolicy — the signed browser stream allowlist. */
|
|
203
206
|
streamPolicy?: import("@wix/himalaya/core").StreamPolicy;
|
|
204
207
|
/** Forwarded from AppConfig.`splash` — the in-app splash surface. NOTE the
|
package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts
CHANGED
|
@@ -2365,6 +2365,13 @@ export interface NavigationConfig {
|
|
|
2365
2365
|
* tab must stay hidden three pushes deep in another stack. Absent ⇒ paths stay
|
|
2366
2366
|
* unresolved and the literals render — the worker enriches, it never gates. */
|
|
2367
2367
|
navLogicBundle?: LogicBundleRef;
|
|
2368
|
+
/** RFC 0010 (app-icon amendment) — which nav badges ALSO drive the OS app-icon
|
|
2369
|
+
* badge. Each entry is `"<kind>:<id>"` (`tab` | `drawer` | `topBarAction`, the
|
|
2370
|
+
* spelling `navKey` uses); the icon shows the SUM of those slots' resolved counts.
|
|
2371
|
+
* Empty/absent ⇒ no mirroring. An entry naming a slot this build does not have is
|
|
2372
|
+
* ignored, never a blanked badge. Requires the `push` capability — `defineApp`
|
|
2373
|
+
* rejects the combination, because the badge would be set and never shown. */
|
|
2374
|
+
appIconBadgeSources?: string[];
|
|
2368
2375
|
/** Signed release allowlist for contained browser Tier-5 `_stream` requests. */
|
|
2369
2376
|
streamPolicy?: StreamPolicy;
|
|
2370
2377
|
scheme: string;
|
|
@@ -7424,6 +7424,35 @@ function validateLadderConfig(config) {
|
|
|
7424
7424
|
);
|
|
7425
7425
|
}
|
|
7426
7426
|
}
|
|
7427
|
+
const iconSources = config.navigation?.appIconBadgeSources ?? [];
|
|
7428
|
+
if (iconSources.length > 0) {
|
|
7429
|
+
if (!caps.has("push")) {
|
|
7430
|
+
throw new Error(
|
|
7431
|
+
`defineApp: navigation.appIconBadgeSources is set (${iconSources.join(", ")}) but "push" is not in capabilities. The app-icon badge is a push-capability verb, and without it the badge is set and never appears \u2014 no error, on any platform. Add "push" to capabilities, or drop appIconBadgeSources.`
|
|
7432
|
+
);
|
|
7433
|
+
}
|
|
7434
|
+
const slots = /* @__PURE__ */ new Map();
|
|
7435
|
+
const nav = config.navigation;
|
|
7436
|
+
for (const it of nav?.tabBar?.items ?? []) slots.set(`tab:${it.id}`, { kind: "tab", badge: it.badge });
|
|
7437
|
+
for (const it of nav?.sidebar?.items ?? []) slots.set(`tab:${it.id}`, { kind: "tab", badge: it.badge });
|
|
7438
|
+
for (const it of nav?.drawer?.items ?? []) slots.set(`drawer:${it.id}`, { kind: "drawer", badge: it.badge });
|
|
7439
|
+
for (const a of nav?.topBarDefault?.actions ?? []) slots.set(`topBarAction:${a.id}`, { kind: "topBarAction", badge: a.badge });
|
|
7440
|
+
for (const src of iconSources) {
|
|
7441
|
+
const slot = slots.get(src);
|
|
7442
|
+
if (!slot) continue;
|
|
7443
|
+
const badge = slot.badge;
|
|
7444
|
+
if (!badge) {
|
|
7445
|
+
throw new Error(
|
|
7446
|
+
`defineApp: navigation.appIconBadgeSources names "${src}", but that slot has no badge at all, so it can never contribute a count. Give it a badge, or drop it from appIconBadgeSources.`
|
|
7447
|
+
);
|
|
7448
|
+
}
|
|
7449
|
+
if (badge.kind === "dot" && !badge.valuePath) {
|
|
7450
|
+
throw new Error(
|
|
7451
|
+
`defineApp: navigation.appIconBadgeSources names "${src}", whose badge is a STATIC dot \u2014 it carries no number, so it would contribute 0 forever. Give it a valuePath (a bound dot resolves to a count), use kind: "count", or drop it from appIconBadgeSources.`
|
|
7452
|
+
);
|
|
7453
|
+
}
|
|
7454
|
+
}
|
|
7455
|
+
}
|
|
7427
7456
|
if (config.commerce?.fields?.some(looksLikeCardData)) {
|
|
7428
7457
|
throw new Error(
|
|
7429
7458
|
`defineApp: commerce.fields may not collect card data. Money moves only through the in-app Wix cashier, which takes an order id \u2014 no capability anywhere accepts a card number.`
|
|
@@ -8434,6 +8434,7 @@ function deriveAppMeta(name, m, platforms = {}) {
|
|
|
8434
8434
|
orientation: config.navigation?.orientation,
|
|
8435
8435
|
sidebar: config.navigation?.sidebar,
|
|
8436
8436
|
navLogicBundle: config.navigation?.navLogicBundle,
|
|
8437
|
+
appIconBadgeSources: config.navigation?.appIconBadgeSources,
|
|
8437
8438
|
streamPolicy: config.navigation?.streamPolicy,
|
|
8438
8439
|
splash: config.splash,
|
|
8439
8440
|
locale: config.locale,
|
package/dist/cli.mjs
CHANGED
|
@@ -13823,6 +13823,7 @@ function deriveAppMeta(name, m, platforms = {}) {
|
|
|
13823
13823
|
orientation: config.navigation?.orientation,
|
|
13824
13824
|
sidebar: config.navigation?.sidebar,
|
|
13825
13825
|
navLogicBundle: config.navigation?.navLogicBundle,
|
|
13826
|
+
appIconBadgeSources: config.navigation?.appIconBadgeSources,
|
|
13826
13827
|
streamPolicy: config.navigation?.streamPolicy,
|
|
13827
13828
|
splash: config.splash,
|
|
13828
13829
|
locale: config.locale,
|
|
@@ -28028,6 +28029,7 @@ function deriveNavigationConfig(app, bundleCtx) {
|
|
|
28028
28029
|
if (app.navLogicBundle !== void 0) {
|
|
28029
28030
|
config.navLogicBundle = bundleCtx ? expandNavBundle(app.navLogicBundle, bundleCtx) : app.navLogicBundle;
|
|
28030
28031
|
}
|
|
28032
|
+
if (app.appIconBadgeSources !== void 0) config.appIconBadgeSources = app.appIconBadgeSources;
|
|
28031
28033
|
if (app.streamPolicy !== void 0) config.streamPolicy = app.streamPolicy;
|
|
28032
28034
|
if (app.splash !== void 0) config.splash = app.splash;
|
|
28033
28035
|
if (app.locale !== void 0) config.locale = app.locale;
|
|
@@ -29790,6 +29792,7 @@ __export(config_exports2, {
|
|
|
29790
29792
|
OPERATIONAL_OVERLAY_KEYS: () => OPERATIONAL_OVERLAY_KEYS,
|
|
29791
29793
|
OPERATOR_ONLY_OVERLAY_KEYS: () => OPERATOR_ONLY_OVERLAY_KEYS,
|
|
29792
29794
|
appConfigPath: () => appConfigPath,
|
|
29795
|
+
appIconBadgeSourcesErrors: () => appIconBadgeSourcesErrors,
|
|
29793
29796
|
loadAppConfigOverlay: () => loadAppConfigOverlay,
|
|
29794
29797
|
loadLocalFlags: () => loadLocalFlags,
|
|
29795
29798
|
loadRevocations: () => loadRevocations,
|
|
@@ -29901,12 +29904,25 @@ function originKeysIn(patch) {
|
|
|
29901
29904
|
if (!patch || typeof patch !== "object" || Array.isArray(patch)) return [];
|
|
29902
29905
|
return Object.keys(patch).filter((k) => OPERATOR_ONLY_OVERLAY_KEYS.has(k));
|
|
29903
29906
|
}
|
|
29907
|
+
function appIconBadgeSourcesErrors(value) {
|
|
29908
|
+
if (!Array.isArray(value)) {
|
|
29909
|
+
return ['"appIconBadgeSources" must be an array (use [] to stop mirroring)'];
|
|
29910
|
+
}
|
|
29911
|
+
if (value.length > 0) {
|
|
29912
|
+
return [
|
|
29913
|
+
'"appIconBadgeSources" may only be EMPTIED through the overlay, not added to \u2014 mirroring requires the app to declare the `push` capability, which only defineApp can verify at bake time. Use [] to stop mirroring; add a source in config.ts.'
|
|
29914
|
+
];
|
|
29915
|
+
}
|
|
29916
|
+
return [];
|
|
29917
|
+
}
|
|
29904
29918
|
function validateOverlayPatch(patch) {
|
|
29905
29919
|
const errs = [];
|
|
29906
29920
|
if (!patch || typeof patch !== "object" || Array.isArray(patch)) return ["overlay must be a JSON object"];
|
|
29907
|
-
|
|
29921
|
+
const obj = patch;
|
|
29922
|
+
for (const k of Object.keys(obj)) {
|
|
29908
29923
|
if (STRUCTURAL_KEYS.has(k)) errs.push(`"${k}" is structural \u2014 edit it in source (deriveNavigationConfig), not the overlay`);
|
|
29909
29924
|
else if (!OPERATIONAL_OVERLAY_KEYS.has(k)) errs.push(`"${k}" is not an allowed operational overlay key`);
|
|
29925
|
+
else if (k === "appIconBadgeSources") errs.push(...appIconBadgeSourcesErrors(obj[k]));
|
|
29910
29926
|
}
|
|
29911
29927
|
return errs;
|
|
29912
29928
|
}
|
|
@@ -29923,8 +29939,16 @@ function writeJsonAt(app, file, root, value) {
|
|
|
29923
29939
|
writeFileSync12(path, JSON.stringify(value, null, 2) + "\n");
|
|
29924
29940
|
return path;
|
|
29925
29941
|
}
|
|
29942
|
+
function sanitizeOverlay(raw) {
|
|
29943
|
+
if (!("appIconBadgeSources" in raw)) return raw;
|
|
29944
|
+
if (appIconBadgeSourcesErrors(raw.appIconBadgeSources).length === 0) return raw;
|
|
29945
|
+
const { appIconBadgeSources: _dropped, ...rest } = raw;
|
|
29946
|
+
return rest;
|
|
29947
|
+
}
|
|
29926
29948
|
function loadAppConfigOverlay(app, root = REPO_ROOT6) {
|
|
29927
|
-
|
|
29949
|
+
const raw = readJsonAt(app, "app-config.overlay.json", root);
|
|
29950
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
29951
|
+
return sanitizeOverlay(raw);
|
|
29928
29952
|
}
|
|
29929
29953
|
function saveAppConfigOverlay(app, patch, root = REPO_ROOT6) {
|
|
29930
29954
|
const errs = validateOverlayPatch(patch);
|
|
@@ -29986,6 +30010,13 @@ var init_config2 = __esm({
|
|
|
29986
30010
|
"tabBar",
|
|
29987
30011
|
"drawer",
|
|
29988
30012
|
"sidebar",
|
|
30013
|
+
// RFC 0010 app-icon amendment — which nav badges drive the OS app-icon badge.
|
|
30014
|
+
// OPERATIONAL, but NARROWED to the empty list: see `appIconBadgeSourcesErrors` below.
|
|
30015
|
+
// The incident lever is the point — `{appIconBadgeSources: []}` silences a badge that
|
|
30016
|
+
// is showing the wrong number, live, instead of waiting for a binary. INTRODUCING
|
|
30017
|
+
// sources is a source change, because only `defineApp` can check the `push` capability
|
|
30018
|
+
// they need.
|
|
30019
|
+
"appIconBadgeSources",
|
|
29989
30020
|
// The in-app splash surface — OPERATIONAL for the same reason the nav chrome
|
|
29990
30021
|
// above is: pure look-and-feel that cannot escalate. Every field is a token
|
|
29991
30022
|
// name, a BAKED asset name, or a clamped duration; the artwork itself stays in
|
|
@@ -37297,6 +37328,7 @@ var init_nav_lint = __esm({
|
|
|
37297
37328
|
"orientation",
|
|
37298
37329
|
"surfaces",
|
|
37299
37330
|
"navLogicBundle",
|
|
37331
|
+
"appIconBadgeSources",
|
|
37300
37332
|
"streamPolicy",
|
|
37301
37333
|
"scheme",
|
|
37302
37334
|
"deepLinkPatterns",
|
|
@@ -37320,6 +37352,7 @@ var init_nav_lint = __esm({
|
|
|
37320
37352
|
"orientation",
|
|
37321
37353
|
"surfaces",
|
|
37322
37354
|
"navLogicBundle",
|
|
37355
|
+
"appIconBadgeSources",
|
|
37323
37356
|
"streamPolicy",
|
|
37324
37357
|
"scheme",
|
|
37325
37358
|
"deepLinkPatterns",
|
|
@@ -43299,19 +43332,19 @@ var init_preview_assets_generated = __esm({
|
|
|
43299
43332
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
43300
43333
|
init_preview_assets_format();
|
|
43301
43334
|
PREVIEW_ASSET_MANIFEST = [
|
|
43302
|
-
{ key: "assets/index-
|
|
43303
|
-
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset:
|
|
43304
|
-
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
43305
|
-
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset:
|
|
43306
|
-
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset:
|
|
43307
|
-
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
43308
|
-
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset:
|
|
43309
|
-
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset:
|
|
43310
|
-
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset:
|
|
43311
|
-
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset:
|
|
43312
|
-
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset:
|
|
43313
|
-
{ key: "index.html", contentType: "text/html; charset=utf-8", offset:
|
|
43314
|
-
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset:
|
|
43335
|
+
{ key: "assets/index-BjeU573D.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 984799, sha256: "c9d1cae4cb78ee9be62f41d1f84c87599fa347404cc256580bca700f71f0c045" },
|
|
43336
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 984807, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
43337
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1075731, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
43338
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1166715, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
43339
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1257695, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
43340
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1348567, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
43341
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 1439547, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
43342
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 1548183, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
43343
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 1657267, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
43344
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 1766315, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
43345
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 1874015, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
43346
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 1962123, length: 4448, sha256: "5f8763e9a491dc85c1c0dd52572d5f61bf4c3f978e4fd39262bae1f46e101a54" },
|
|
43347
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 1966571, length: 13784, sha256: "cfb9465254fab84f0e084bb4542c282758ea29774b5f172840cc0b9e4194ef89" }
|
|
43315
43348
|
];
|
|
43316
43349
|
}
|
|
43317
43350
|
});
|
|
Binary file
|
|
@@ -841,7 +841,7 @@
|
|
|
841
841
|
"name": "NavigationConfig",
|
|
842
842
|
"kind": "interface",
|
|
843
843
|
"jsdoc": "/** Per-app navigation/deep-link config, served OTA at GET /v1/app-config/:appName. */",
|
|
844
|
-
"decl": "export interface NavigationConfig {\n /** Tab-bar structure (which tabs; their icons/labels/badges). */\n tabBar?: TabBarConfig;\n /** Slide-in drawer / hamburger-menu destinations. */\n drawer?: DrawerConfig;\n /** Navigation chrome the shell draws.\n * Omitted ⇒ \"bottomTabs\". The shell (not the descriptor) reads this. */\n navKind?: NavKind;\n /** Destinations for \"sidebar\" mode.\n * Absent ⇒ the shell derives the rail from `tabBar.items`. */\n sidebar?: SidebarConfig;\n /** App-level default top bar; a per-screen\n * `ScreenDescriptor.topBar` fully replaces it (override, not merge). */\n topBarDefault?: TopBarConfig;\n /** The post-OS-splash brand surface (see `SplashConfig`). Absent / not enabled\n * ⇒ today's behavior. Operational per (live-flippable). */\n splash?: SplashConfig;\n /** App-level default locale. Operational per so a Hebrew (or Spanish)\n * branded app can pin RTL/l10n OTA without a launch flag. `default` is a\n * BCP-47 primary subtag; clients coerce unknown tags rather than failing the\n * envelope. `pin: true` skips the device/browser language; in-app `locale.set`\n * still wins. Absent ⇒ today's device-then-en behavior. */\n locale?: LocaleConfig;\n /** Effective orientations, resolved INSIDE\n * the binary's build-time envelope (config.ts `orientationEnvelope`). The\n * envelope is the ceiling and can never be OTA (iOS reads the plist before\n * any app code runs); this narrows within it. Always intersected with the\n * envelope — it can never widen it. Absent/empty ⇒ the envelope itself. */\n orientation?: OrientationConfig;\n /** Per-surface nav projection, keyed by catalog\n * surface id (`phone` | `tablet` | `desktop` | `mac` | `watch` | `wear` | `rn`).\n * Keyed the way `orientation` is keyed by device family and narrowed the same\n * way: a key outside the app's `platforms.json` envelope is DROPPED, never\n * honored (see `resolveSurfaceNav`). Absent key ⇒ that surface uses the default\n * projection, so an app that never thinks about surfaces is unaffected. */\n surfaces?: Record<string, SurfaceNavConfig>;\n /** The APP-LEVEL nav worker\n * that feeds every `*Path` binding on `NavTabItem` / `DrawerItem` /\n * `TopBarAction`. App-level, not a screen's worker, because chrome outlives\n * every screen: a cart badge must survive leaving the cart, and a flag-hidden\n * tab must stay hidden three pushes deep in another stack. Absent ⇒ paths stay\n * unresolved and the literals render — the worker enriches, it never gates. */\n navLogicBundle?: LogicBundleRef;\n /** Signed release allowlist for contained browser Tier-5 `_stream` requests. */\n streamPolicy?: StreamPolicy;\n scheme: string;\n deepLinkPatterns: DeepLinkPattern[];\n linkableScreens: LinkableScreen[];\n}"
|
|
844
|
+
"decl": "export interface NavigationConfig {\n /** Tab-bar structure (which tabs; their icons/labels/badges). */\n tabBar?: TabBarConfig;\n /** Slide-in drawer / hamburger-menu destinations. */\n drawer?: DrawerConfig;\n /** Navigation chrome the shell draws.\n * Omitted ⇒ \"bottomTabs\". The shell (not the descriptor) reads this. */\n navKind?: NavKind;\n /** Destinations for \"sidebar\" mode.\n * Absent ⇒ the shell derives the rail from `tabBar.items`. */\n sidebar?: SidebarConfig;\n /** App-level default top bar; a per-screen\n * `ScreenDescriptor.topBar` fully replaces it (override, not merge). */\n topBarDefault?: TopBarConfig;\n /** The post-OS-splash brand surface (see `SplashConfig`). Absent / not enabled\n * ⇒ today's behavior. Operational per (live-flippable). */\n splash?: SplashConfig;\n /** App-level default locale. Operational per so a Hebrew (or Spanish)\n * branded app can pin RTL/l10n OTA without a launch flag. `default` is a\n * BCP-47 primary subtag; clients coerce unknown tags rather than failing the\n * envelope. `pin: true` skips the device/browser language; in-app `locale.set`\n * still wins. Absent ⇒ today's device-then-en behavior. */\n locale?: LocaleConfig;\n /** Effective orientations, resolved INSIDE\n * the binary's build-time envelope (config.ts `orientationEnvelope`). The\n * envelope is the ceiling and can never be OTA (iOS reads the plist before\n * any app code runs); this narrows within it. Always intersected with the\n * envelope — it can never widen it. Absent/empty ⇒ the envelope itself. */\n orientation?: OrientationConfig;\n /** Per-surface nav projection, keyed by catalog\n * surface id (`phone` | `tablet` | `desktop` | `mac` | `watch` | `wear` | `rn`).\n * Keyed the way `orientation` is keyed by device family and narrowed the same\n * way: a key outside the app's `platforms.json` envelope is DROPPED, never\n * honored (see `resolveSurfaceNav`). Absent key ⇒ that surface uses the default\n * projection, so an app that never thinks about surfaces is unaffected. */\n surfaces?: Record<string, SurfaceNavConfig>;\n /** The APP-LEVEL nav worker\n * that feeds every `*Path` binding on `NavTabItem` / `DrawerItem` /\n * `TopBarAction`. App-level, not a screen's worker, because chrome outlives\n * every screen: a cart badge must survive leaving the cart, and a flag-hidden\n * tab must stay hidden three pushes deep in another stack. Absent ⇒ paths stay\n * unresolved and the literals render — the worker enriches, it never gates. */\n navLogicBundle?: LogicBundleRef;\n /** Which nav badges ALSO drive the OS app-icon\n * badge. Each entry is `\"<kind>:<id>\"` (`tab` | `drawer` | `topBarAction`, the\n * spelling `navKey` uses); the icon shows the SUM of those slots' resolved counts.\n * Empty/absent ⇒ no mirroring. An entry naming a slot this build does not have is\n * ignored, never a blanked badge. Requires the `push` capability — `defineApp`\n * rejects the combination, because the badge would be set and never shown. */\n appIconBadgeSources?: string[];\n /** Signed release allowlist for contained browser Tier-5 `_stream` requests. */\n streamPolicy?: StreamPolicy;\n scheme: string;\n deepLinkPatterns: DeepLinkPattern[];\n linkableScreens: LinkableScreen[];\n}"
|
|
845
845
|
},
|
|
846
846
|
{
|
|
847
847
|
"name": "NavKind",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.952.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
|
|
6
6
|
"keywords": [
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"artifactId": "himalaya-cli"
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
-
"falconPackageHash": "
|
|
67
|
+
"falconPackageHash": "6c39363742507289fbff3afa06d0b9ade4dd4b51d1c72402298f9b06"
|
|
68
68
|
}
|