@wix/himalaya-cli 0.949.0 → 0.951.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 -16
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/releasing-with-himi-serve.md +1 -1
- 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
|
@@ -5261,7 +5261,6 @@ function resolveTranslation(value, catalog, sourceCatalog) {
|
|
|
5261
5261
|
var BINDING_SIGILS, BINDING_SIGIL_RE, TRANSLATION_PREFIX, TRANSLATION_KEY_RE;
|
|
5262
5262
|
var init_bindings = __esm({
|
|
5263
5263
|
"../../core/ts/src/bindings.ts"() {
|
|
5264
|
-
"use strict";
|
|
5265
5264
|
BINDING_SIGILS = ["service", "flag", "item", "t"];
|
|
5266
5265
|
BINDING_SIGIL_RE = new RegExp(
|
|
5267
5266
|
`^\\$(?:${BINDING_SIGILS.filter((s) => s !== "t").join("|")})\\b|^\\$t:`
|
|
@@ -13823,6 +13822,7 @@ function deriveAppMeta(name, m, platforms = {}) {
|
|
|
13823
13822
|
orientation: config.navigation?.orientation,
|
|
13824
13823
|
sidebar: config.navigation?.sidebar,
|
|
13825
13824
|
navLogicBundle: config.navigation?.navLogicBundle,
|
|
13825
|
+
appIconBadgeSources: config.navigation?.appIconBadgeSources,
|
|
13826
13826
|
streamPolicy: config.navigation?.streamPolicy,
|
|
13827
13827
|
splash: config.splash,
|
|
13828
13828
|
locale: config.locale,
|
|
@@ -28028,6 +28028,7 @@ function deriveNavigationConfig(app, bundleCtx) {
|
|
|
28028
28028
|
if (app.navLogicBundle !== void 0) {
|
|
28029
28029
|
config.navLogicBundle = bundleCtx ? expandNavBundle(app.navLogicBundle, bundleCtx) : app.navLogicBundle;
|
|
28030
28030
|
}
|
|
28031
|
+
if (app.appIconBadgeSources !== void 0) config.appIconBadgeSources = app.appIconBadgeSources;
|
|
28031
28032
|
if (app.streamPolicy !== void 0) config.streamPolicy = app.streamPolicy;
|
|
28032
28033
|
if (app.splash !== void 0) config.splash = app.splash;
|
|
28033
28034
|
if (app.locale !== void 0) config.locale = app.locale;
|
|
@@ -29790,6 +29791,7 @@ __export(config_exports2, {
|
|
|
29790
29791
|
OPERATIONAL_OVERLAY_KEYS: () => OPERATIONAL_OVERLAY_KEYS,
|
|
29791
29792
|
OPERATOR_ONLY_OVERLAY_KEYS: () => OPERATOR_ONLY_OVERLAY_KEYS,
|
|
29792
29793
|
appConfigPath: () => appConfigPath,
|
|
29794
|
+
appIconBadgeSourcesErrors: () => appIconBadgeSourcesErrors,
|
|
29793
29795
|
loadAppConfigOverlay: () => loadAppConfigOverlay,
|
|
29794
29796
|
loadLocalFlags: () => loadLocalFlags,
|
|
29795
29797
|
loadRevocations: () => loadRevocations,
|
|
@@ -29901,12 +29903,25 @@ function originKeysIn(patch) {
|
|
|
29901
29903
|
if (!patch || typeof patch !== "object" || Array.isArray(patch)) return [];
|
|
29902
29904
|
return Object.keys(patch).filter((k) => OPERATOR_ONLY_OVERLAY_KEYS.has(k));
|
|
29903
29905
|
}
|
|
29906
|
+
function appIconBadgeSourcesErrors(value) {
|
|
29907
|
+
if (!Array.isArray(value)) {
|
|
29908
|
+
return ['"appIconBadgeSources" must be an array (use [] to stop mirroring)'];
|
|
29909
|
+
}
|
|
29910
|
+
if (value.length > 0) {
|
|
29911
|
+
return [
|
|
29912
|
+
'"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.'
|
|
29913
|
+
];
|
|
29914
|
+
}
|
|
29915
|
+
return [];
|
|
29916
|
+
}
|
|
29904
29917
|
function validateOverlayPatch(patch) {
|
|
29905
29918
|
const errs = [];
|
|
29906
29919
|
if (!patch || typeof patch !== "object" || Array.isArray(patch)) return ["overlay must be a JSON object"];
|
|
29907
|
-
|
|
29920
|
+
const obj = patch;
|
|
29921
|
+
for (const k of Object.keys(obj)) {
|
|
29908
29922
|
if (STRUCTURAL_KEYS.has(k)) errs.push(`"${k}" is structural \u2014 edit it in source (deriveNavigationConfig), not the overlay`);
|
|
29909
29923
|
else if (!OPERATIONAL_OVERLAY_KEYS.has(k)) errs.push(`"${k}" is not an allowed operational overlay key`);
|
|
29924
|
+
else if (k === "appIconBadgeSources") errs.push(...appIconBadgeSourcesErrors(obj[k]));
|
|
29910
29925
|
}
|
|
29911
29926
|
return errs;
|
|
29912
29927
|
}
|
|
@@ -29923,8 +29938,16 @@ function writeJsonAt(app, file, root, value) {
|
|
|
29923
29938
|
writeFileSync12(path, JSON.stringify(value, null, 2) + "\n");
|
|
29924
29939
|
return path;
|
|
29925
29940
|
}
|
|
29941
|
+
function sanitizeOverlay(raw) {
|
|
29942
|
+
if (!("appIconBadgeSources" in raw)) return raw;
|
|
29943
|
+
if (appIconBadgeSourcesErrors(raw.appIconBadgeSources).length === 0) return raw;
|
|
29944
|
+
const { appIconBadgeSources: _dropped, ...rest } = raw;
|
|
29945
|
+
return rest;
|
|
29946
|
+
}
|
|
29926
29947
|
function loadAppConfigOverlay(app, root = REPO_ROOT6) {
|
|
29927
|
-
|
|
29948
|
+
const raw = readJsonAt(app, "app-config.overlay.json", root);
|
|
29949
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return raw;
|
|
29950
|
+
return sanitizeOverlay(raw);
|
|
29928
29951
|
}
|
|
29929
29952
|
function saveAppConfigOverlay(app, patch, root = REPO_ROOT6) {
|
|
29930
29953
|
const errs = validateOverlayPatch(patch);
|
|
@@ -29986,6 +30009,13 @@ var init_config2 = __esm({
|
|
|
29986
30009
|
"tabBar",
|
|
29987
30010
|
"drawer",
|
|
29988
30011
|
"sidebar",
|
|
30012
|
+
// RFC 0010 app-icon amendment — which nav badges drive the OS app-icon badge.
|
|
30013
|
+
// OPERATIONAL, but NARROWED to the empty list: see `appIconBadgeSourcesErrors` below.
|
|
30014
|
+
// The incident lever is the point — `{appIconBadgeSources: []}` silences a badge that
|
|
30015
|
+
// is showing the wrong number, live, instead of waiting for a binary. INTRODUCING
|
|
30016
|
+
// sources is a source change, because only `defineApp` can check the `push` capability
|
|
30017
|
+
// they need.
|
|
30018
|
+
"appIconBadgeSources",
|
|
29989
30019
|
// The in-app splash surface — OPERATIONAL for the same reason the nav chrome
|
|
29990
30020
|
// above is: pure look-and-feel that cannot escalate. Every field is a token
|
|
29991
30021
|
// name, a BAKED asset name, or a clamped duration; the artwork itself stays in
|
|
@@ -37297,6 +37327,7 @@ var init_nav_lint = __esm({
|
|
|
37297
37327
|
"orientation",
|
|
37298
37328
|
"surfaces",
|
|
37299
37329
|
"navLogicBundle",
|
|
37330
|
+
"appIconBadgeSources",
|
|
37300
37331
|
"streamPolicy",
|
|
37301
37332
|
"scheme",
|
|
37302
37333
|
"deepLinkPatterns",
|
|
@@ -37320,6 +37351,7 @@ var init_nav_lint = __esm({
|
|
|
37320
37351
|
"orientation",
|
|
37321
37352
|
"surfaces",
|
|
37322
37353
|
"navLogicBundle",
|
|
37354
|
+
"appIconBadgeSources",
|
|
37323
37355
|
"streamPolicy",
|
|
37324
37356
|
"scheme",
|
|
37325
37357
|
"deepLinkPatterns",
|
|
@@ -43299,19 +43331,19 @@ var init_preview_assets_generated = __esm({
|
|
|
43299
43331
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
43300
43332
|
init_preview_assets_format();
|
|
43301
43333
|
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:
|
|
43334
|
+
{ key: "assets/index-BjeU573D.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 984799, sha256: "c9d1cae4cb78ee9be62f41d1f84c87599fa347404cc256580bca700f71f0c045" },
|
|
43335
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 984807, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
43336
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 1075731, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
43337
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 1166715, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
43338
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 1257695, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
43339
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 1348567, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
43340
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 1439547, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
43341
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 1548183, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
43342
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 1657267, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
43343
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 1766315, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
43344
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 1874015, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
43345
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 1962123, length: 4448, sha256: "5f8763e9a491dc85c1c0dd52572d5f61bf4c3f978e4fd39262bae1f46e101a54" },
|
|
43346
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 1966571, length: 13784, sha256: "cfb9465254fab84f0e084bb4542c282758ea29774b5f172840cc0b9e4194ef89" }
|
|
43315
43347
|
];
|
|
43316
43348
|
}
|
|
43317
43349
|
});
|
|
Binary file
|
|
@@ -113,7 +113,7 @@ front of an irreversible write.
|
|
|
113
113
|
harder to type than the destructive verb has the asymmetry backwards. It is **not** gated
|
|
114
114
|
identically to `remove`: `remove` is in serve-control's `PUBLISH_CONTENT_PATHS`, so an `owner`-role
|
|
115
115
|
token is refused, while `restore` is not in that set and an owner-scoped token may restore an app
|
|
116
|
-
it owns. Both still require control-
|
|
116
|
+
it owns. Both still require a `--control-token`. Past the window it refuses, and each refusal says which case it
|
|
117
117
|
is — nothing recorded (404), recorded but carrying no release to put back (409), or the window
|
|
118
118
|
closed (410, the only way back being `release push`).
|
|
119
119
|
|
|
@@ -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.951.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": "56c5f7d7ce8fffb81bdbb20070597719b8337a8729a15f0eb51317bb"
|
|
68
68
|
}
|