@wix/himalaya-cli 0.1549.0 → 0.1551.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +11 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/validator.d.ts +54 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +16 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +12 -0
  5. package/dist/cli.mjs +1340 -865
  6. package/dist/preview-assets.generated.bin +0 -0
  7. package/guides/component-reference.json +1 -1
  8. package/guides/component-reference.md +2 -0
  9. package/guides/iap-products.md +6 -3
  10. package/guides/qa-builds.md +87 -1
  11. package/guides/tier-5-add-a-screen.md +53 -0
  12. package/package.json +2 -2
  13. package/templates/beauty-salon/dev/index.ts +15 -2
  14. package/templates/beauty-salon/tier5-src/himi-branded-lite-agenda/index.ts +4 -1
  15. package/templates/beauty-salon-owner/dev/index.ts +36 -1
  16. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  17. package/templates/branded-lite/dev/index.ts +15 -2
  18. package/templates/branded-lite/tier5-src/himi-branded-lite-agenda/index.ts +4 -1
  19. package/templates/community-club-owner/dev/index.ts +36 -1
  20. package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  21. package/templates/events-meetups-owner/dev/index.ts +36 -1
  22. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  23. package/templates/gym-fitness/dev/index.ts +15 -2
  24. package/templates/gym-fitness/tier5-src/himi-branded-lite-agenda/index.ts +4 -1
  25. package/templates/gym-fitness-owner/dev/index.ts +36 -1
  26. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  27. package/templates/nonprofit-cause-owner/dev/index.ts +36 -1
  28. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  29. package/templates/owner-lite/dev/index.ts +36 -1
  30. package/templates/owner-lite/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  31. package/templates/podcast-creator-owner/dev/index.ts +36 -1
  32. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  33. package/templates/portfolio-creative/dev/index.ts +8 -1
  34. package/templates/portfolio-creative-owner/dev/index.ts +36 -1
  35. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  36. package/templates/restaurant/dev/index.ts +8 -1
  37. package/templates/restaurant-owner/dev/index.ts +36 -1
  38. package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  39. package/templates/retail-store/dev/index.ts +8 -1
  40. package/templates/retail-store-owner/dev/index.ts +36 -1
  41. package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
  42. package/templates/yoga-studio/dev/index.ts +7 -1
  43. package/templates/yoga-studio/tier5-src/himi-branded-lite-agenda/index.ts +4 -1
  44. package/templates/yoga-studio-owner/dev/index.ts +36 -1
  45. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/logic.ts +14 -2
@@ -56,6 +56,13 @@ export interface ManageArea {
56
56
  navigation?: ManageNavigation;
57
57
  /** The same for its create screen. */
58
58
  createNavigation?: ManageNavigation;
59
+ /** [navigation] flattened for the card's declared route (`$item.` reads flat fields only); "" when absent. */
60
+ navTitle?: string;
61
+ navSubtitle?: string;
62
+ navSearch?: string;
63
+ createNavTitle?: string;
64
+ createNavSubtitle?: string;
65
+ createNavSearch?: string;
59
66
  }
60
67
 
61
68
  /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
@@ -118,6 +125,8 @@ export function parseAreas(value: unknown): ManageArea[] {
118
125
  const area = Object.fromEntries(required) as Record<string, string>;
119
126
  const createScreenId = clean(raw.createScreenId);
120
127
  const createLabel = clean(raw.createLabel);
128
+ const navigation = parseNavigation(raw.navigation);
129
+ const createNavigation = createScreenId && createLabel ? parseNavigation(raw.createNavigation) : undefined;
121
130
  // Creation is only an in-app route when both fields are present. A lone
122
131
  // label must not produce a promising but inert action.
123
132
  return [{
@@ -126,8 +135,11 @@ export function parseAreas(value: unknown): ManageArea[] {
126
135
  hideCreate: !(createScreenId && createLabel),
127
136
  hideHandoff: !DASHBOARD_PATHS[area.id],
128
137
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
- ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
- ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
138
+ ...(navigation ? { navigation } : {}),
139
+ ...(createNavigation ? { createNavigation } : {}),
140
+ navTitle: navigation?.title ?? "", navSubtitle: navigation?.subtitle ?? "", navSearch: navigation?.search ?? "",
141
+ createNavTitle: createNavigation?.title ?? "", createNavSubtitle: createNavigation?.subtitle ?? "",
142
+ createNavSearch: createNavigation?.search ?? "",
131
143
  metricText: "—",
132
144
  statusText: "",
133
145
  unavailable: false,
@@ -16355,6 +16355,9 @@ const SCREENS = runtimeSetting({
16355
16355
  "actionId": "tier5.himiBrandedAddresses.edit",
16356
16356
  "params": {
16357
16357
  "id": "$item.id"
16358
+ },
16359
+ "nav": {
16360
+ "screenId": "himi_address"
16358
16361
  }
16359
16362
  }
16360
16363
  }
@@ -16591,7 +16594,11 @@ const SCREENS = runtimeSetting({
16591
16594
  "fullWidth": true,
16592
16595
  "leadingIcon": "plus",
16593
16596
  "action": {
16594
- "actionId": "tier5.himiBrandedAddresses.add"
16597
+ "actionId": "tier5.himiBrandedAddresses.add",
16598
+ "nav": {
16599
+ "screenId": "himi_address",
16600
+ "args": {}
16601
+ }
16595
16602
  }
16596
16603
  }
16597
16604
  },
@@ -52246,6 +52246,14 @@ const SCREENS = runtimeSetting({
52246
52246
  "actionId": "tier5.himiOwnerLiteManage.create",
52247
52247
  "params": {
52248
52248
  "id": "$item.id"
52249
+ },
52250
+ "nav": {
52251
+ "screenId": "$item.createScreenId",
52252
+ "args": {
52253
+ "title": "$item.createNavTitle",
52254
+ "subtitle": "$item.createNavSubtitle",
52255
+ "search": "$item.createNavSearch"
52256
+ }
52249
52257
  }
52250
52258
  },
52251
52259
  "accessibilityLabel": "$item.createLabel",
@@ -52307,6 +52315,14 @@ const SCREENS = runtimeSetting({
52307
52315
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52308
52316
  "params": {
52309
52317
  "id": "$item.id"
52318
+ },
52319
+ "nav": {
52320
+ "screenId": "$item.screenId",
52321
+ "args": {
52322
+ "title": "$item.navTitle",
52323
+ "subtitle": "$item.navSubtitle",
52324
+ "search": "$item.navSearch"
52325
+ }
52310
52326
  }
52311
52327
  },
52312
52328
  "accessibilityLabel": "$item.title",
@@ -52552,6 +52568,14 @@ const SCREENS = runtimeSetting({
52552
52568
  "actionId": "tier5.himiOwnerLiteManage.create",
52553
52569
  "params": {
52554
52570
  "id": "$item.id"
52571
+ },
52572
+ "nav": {
52573
+ "screenId": "$item.createScreenId",
52574
+ "args": {
52575
+ "title": "$item.createNavTitle",
52576
+ "subtitle": "$item.createNavSubtitle",
52577
+ "search": "$item.createNavSearch"
52578
+ }
52555
52579
  }
52556
52580
  },
52557
52581
  "accessibilityLabel": "$item.createLabel",
@@ -52613,6 +52637,14 @@ const SCREENS = runtimeSetting({
52613
52637
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52614
52638
  "params": {
52615
52639
  "id": "$item.id"
52640
+ },
52641
+ "nav": {
52642
+ "screenId": "$item.screenId",
52643
+ "args": {
52644
+ "title": "$item.navTitle",
52645
+ "subtitle": "$item.navSubtitle",
52646
+ "search": "$item.navSearch"
52647
+ }
52616
52648
  }
52617
52649
  },
52618
52650
  "accessibilityLabel": "$item.title",
@@ -65956,7 +65988,10 @@ const SCREENS = runtimeSetting({
65956
65988
  "title": "Back to Inbox",
65957
65989
  "style": "secondary",
65958
65990
  "action": {
65959
- "actionId": "tier5.ownerLiteInboxThread.back"
65991
+ "actionId": "tier5.ownerLiteInboxThread.back",
65992
+ "nav": {
65993
+ "presentation": "back"
65994
+ }
65960
65995
  }
65961
65996
  }
65962
65997
  }
@@ -56,6 +56,13 @@ export interface ManageArea {
56
56
  navigation?: ManageNavigation;
57
57
  /** The same for its create screen. */
58
58
  createNavigation?: ManageNavigation;
59
+ /** [navigation] flattened for the card's declared route (`$item.` reads flat fields only); "" when absent. */
60
+ navTitle?: string;
61
+ navSubtitle?: string;
62
+ navSearch?: string;
63
+ createNavTitle?: string;
64
+ createNavSubtitle?: string;
65
+ createNavSearch?: string;
59
66
  }
60
67
 
61
68
  /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
@@ -118,6 +125,8 @@ export function parseAreas(value: unknown): ManageArea[] {
118
125
  const area = Object.fromEntries(required) as Record<string, string>;
119
126
  const createScreenId = clean(raw.createScreenId);
120
127
  const createLabel = clean(raw.createLabel);
128
+ const navigation = parseNavigation(raw.navigation);
129
+ const createNavigation = createScreenId && createLabel ? parseNavigation(raw.createNavigation) : undefined;
121
130
  // Creation is only an in-app route when both fields are present. A lone
122
131
  // label must not produce a promising but inert action.
123
132
  return [{
@@ -126,8 +135,11 @@ export function parseAreas(value: unknown): ManageArea[] {
126
135
  hideCreate: !(createScreenId && createLabel),
127
136
  hideHandoff: !DASHBOARD_PATHS[area.id],
128
137
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
- ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
- ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
138
+ ...(navigation ? { navigation } : {}),
139
+ ...(createNavigation ? { createNavigation } : {}),
140
+ navTitle: navigation?.title ?? "", navSubtitle: navigation?.subtitle ?? "", navSearch: navigation?.search ?? "",
141
+ createNavTitle: createNavigation?.title ?? "", createNavSubtitle: createNavigation?.subtitle ?? "",
142
+ createNavSearch: createNavigation?.search ?? "",
131
143
  metricText: "—",
132
144
  statusText: "",
133
145
  unavailable: false,
@@ -7185,6 +7185,9 @@ const SCREENS = runtimeSetting({
7185
7185
  "actionId": "tier5.himiBrandedAddresses.edit",
7186
7186
  "params": {
7187
7187
  "id": "$item.id"
7188
+ },
7189
+ "nav": {
7190
+ "screenId": "himi_address"
7188
7191
  }
7189
7192
  }
7190
7193
  }
@@ -7421,7 +7424,11 @@ const SCREENS = runtimeSetting({
7421
7424
  "fullWidth": true,
7422
7425
  "leadingIcon": "plus",
7423
7426
  "action": {
7424
- "actionId": "tier5.himiBrandedAddresses.add"
7427
+ "actionId": "tier5.himiBrandedAddresses.add",
7428
+ "nav": {
7429
+ "screenId": "himi_address",
7430
+ "args": {}
7431
+ }
7425
7432
  }
7426
7433
  }
7427
7434
  },
@@ -52322,6 +52322,14 @@ const SCREENS = runtimeSetting({
52322
52322
  "actionId": "tier5.himiOwnerLiteManage.create",
52323
52323
  "params": {
52324
52324
  "id": "$item.id"
52325
+ },
52326
+ "nav": {
52327
+ "screenId": "$item.createScreenId",
52328
+ "args": {
52329
+ "title": "$item.createNavTitle",
52330
+ "subtitle": "$item.createNavSubtitle",
52331
+ "search": "$item.createNavSearch"
52332
+ }
52325
52333
  }
52326
52334
  },
52327
52335
  "accessibilityLabel": "$item.createLabel",
@@ -52383,6 +52391,14 @@ const SCREENS = runtimeSetting({
52383
52391
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52384
52392
  "params": {
52385
52393
  "id": "$item.id"
52394
+ },
52395
+ "nav": {
52396
+ "screenId": "$item.screenId",
52397
+ "args": {
52398
+ "title": "$item.navTitle",
52399
+ "subtitle": "$item.navSubtitle",
52400
+ "search": "$item.navSearch"
52401
+ }
52386
52402
  }
52387
52403
  },
52388
52404
  "accessibilityLabel": "$item.title",
@@ -52628,6 +52644,14 @@ const SCREENS = runtimeSetting({
52628
52644
  "actionId": "tier5.himiOwnerLiteManage.create",
52629
52645
  "params": {
52630
52646
  "id": "$item.id"
52647
+ },
52648
+ "nav": {
52649
+ "screenId": "$item.createScreenId",
52650
+ "args": {
52651
+ "title": "$item.createNavTitle",
52652
+ "subtitle": "$item.createNavSubtitle",
52653
+ "search": "$item.createNavSearch"
52654
+ }
52631
52655
  }
52632
52656
  },
52633
52657
  "accessibilityLabel": "$item.createLabel",
@@ -52689,6 +52713,14 @@ const SCREENS = runtimeSetting({
52689
52713
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52690
52714
  "params": {
52691
52715
  "id": "$item.id"
52716
+ },
52717
+ "nav": {
52718
+ "screenId": "$item.screenId",
52719
+ "args": {
52720
+ "title": "$item.navTitle",
52721
+ "subtitle": "$item.navSubtitle",
52722
+ "search": "$item.navSearch"
52723
+ }
52692
52724
  }
52693
52725
  },
52694
52726
  "accessibilityLabel": "$item.title",
@@ -66032,7 +66064,10 @@ const SCREENS = runtimeSetting({
66032
66064
  "title": "Back to Inbox",
66033
66065
  "style": "secondary",
66034
66066
  "action": {
66035
- "actionId": "tier5.ownerLiteInboxThread.back"
66067
+ "actionId": "tier5.ownerLiteInboxThread.back",
66068
+ "nav": {
66069
+ "presentation": "back"
66070
+ }
66036
66071
  }
66037
66072
  }
66038
66073
  }
@@ -56,6 +56,13 @@ export interface ManageArea {
56
56
  navigation?: ManageNavigation;
57
57
  /** The same for its create screen. */
58
58
  createNavigation?: ManageNavigation;
59
+ /** [navigation] flattened for the card's declared route (`$item.` reads flat fields only); "" when absent. */
60
+ navTitle?: string;
61
+ navSubtitle?: string;
62
+ navSearch?: string;
63
+ createNavTitle?: string;
64
+ createNavSubtitle?: string;
65
+ createNavSearch?: string;
59
66
  }
60
67
 
61
68
  /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
@@ -118,6 +125,8 @@ export function parseAreas(value: unknown): ManageArea[] {
118
125
  const area = Object.fromEntries(required) as Record<string, string>;
119
126
  const createScreenId = clean(raw.createScreenId);
120
127
  const createLabel = clean(raw.createLabel);
128
+ const navigation = parseNavigation(raw.navigation);
129
+ const createNavigation = createScreenId && createLabel ? parseNavigation(raw.createNavigation) : undefined;
121
130
  // Creation is only an in-app route when both fields are present. A lone
122
131
  // label must not produce a promising but inert action.
123
132
  return [{
@@ -126,8 +135,11 @@ export function parseAreas(value: unknown): ManageArea[] {
126
135
  hideCreate: !(createScreenId && createLabel),
127
136
  hideHandoff: !DASHBOARD_PATHS[area.id],
128
137
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
- ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
- ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
138
+ ...(navigation ? { navigation } : {}),
139
+ ...(createNavigation ? { createNavigation } : {}),
140
+ navTitle: navigation?.title ?? "", navSubtitle: navigation?.subtitle ?? "", navSearch: navigation?.search ?? "",
141
+ createNavTitle: createNavigation?.title ?? "", createNavSubtitle: createNavigation?.subtitle ?? "",
142
+ createNavSearch: createNavigation?.search ?? "",
131
143
  metricText: "—",
132
144
  statusText: "",
133
145
  unavailable: false,
@@ -15835,6 +15835,9 @@ const SCREENS = runtimeSetting({
15835
15835
  "actionId": "tier5.himiBrandedAddresses.edit",
15836
15836
  "params": {
15837
15837
  "id": "$item.id"
15838
+ },
15839
+ "nav": {
15840
+ "screenId": "himi_address"
15838
15841
  }
15839
15842
  }
15840
15843
  }
@@ -16071,7 +16074,11 @@ const SCREENS = runtimeSetting({
16071
16074
  "fullWidth": true,
16072
16075
  "leadingIcon": "plus",
16073
16076
  "action": {
16074
- "actionId": "tier5.himiBrandedAddresses.add"
16077
+ "actionId": "tier5.himiBrandedAddresses.add",
16078
+ "nav": {
16079
+ "screenId": "himi_address",
16080
+ "args": {}
16081
+ }
16075
16082
  }
16076
16083
  }
16077
16084
  },
@@ -52158,6 +52158,14 @@ const SCREENS = runtimeSetting({
52158
52158
  "actionId": "tier5.himiOwnerLiteManage.create",
52159
52159
  "params": {
52160
52160
  "id": "$item.id"
52161
+ },
52162
+ "nav": {
52163
+ "screenId": "$item.createScreenId",
52164
+ "args": {
52165
+ "title": "$item.createNavTitle",
52166
+ "subtitle": "$item.createNavSubtitle",
52167
+ "search": "$item.createNavSearch"
52168
+ }
52161
52169
  }
52162
52170
  },
52163
52171
  "accessibilityLabel": "$item.createLabel",
@@ -52219,6 +52227,14 @@ const SCREENS = runtimeSetting({
52219
52227
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52220
52228
  "params": {
52221
52229
  "id": "$item.id"
52230
+ },
52231
+ "nav": {
52232
+ "screenId": "$item.screenId",
52233
+ "args": {
52234
+ "title": "$item.navTitle",
52235
+ "subtitle": "$item.navSubtitle",
52236
+ "search": "$item.navSearch"
52237
+ }
52222
52238
  }
52223
52239
  },
52224
52240
  "accessibilityLabel": "$item.title",
@@ -52464,6 +52480,14 @@ const SCREENS = runtimeSetting({
52464
52480
  "actionId": "tier5.himiOwnerLiteManage.create",
52465
52481
  "params": {
52466
52482
  "id": "$item.id"
52483
+ },
52484
+ "nav": {
52485
+ "screenId": "$item.createScreenId",
52486
+ "args": {
52487
+ "title": "$item.createNavTitle",
52488
+ "subtitle": "$item.createNavSubtitle",
52489
+ "search": "$item.createNavSearch"
52490
+ }
52467
52491
  }
52468
52492
  },
52469
52493
  "accessibilityLabel": "$item.createLabel",
@@ -52525,6 +52549,14 @@ const SCREENS = runtimeSetting({
52525
52549
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52526
52550
  "params": {
52527
52551
  "id": "$item.id"
52552
+ },
52553
+ "nav": {
52554
+ "screenId": "$item.screenId",
52555
+ "args": {
52556
+ "title": "$item.navTitle",
52557
+ "subtitle": "$item.navSubtitle",
52558
+ "search": "$item.navSearch"
52559
+ }
52528
52560
  }
52529
52561
  },
52530
52562
  "accessibilityLabel": "$item.title",
@@ -65868,7 +65900,10 @@ const SCREENS = runtimeSetting({
65868
65900
  "title": "Back to Inbox",
65869
65901
  "style": "secondary",
65870
65902
  "action": {
65871
- "actionId": "tier5.ownerLiteInboxThread.back"
65903
+ "actionId": "tier5.ownerLiteInboxThread.back",
65904
+ "nav": {
65905
+ "presentation": "back"
65906
+ }
65872
65907
  }
65873
65908
  }
65874
65909
  }
@@ -56,6 +56,13 @@ export interface ManageArea {
56
56
  navigation?: ManageNavigation;
57
57
  /** The same for its create screen. */
58
58
  createNavigation?: ManageNavigation;
59
+ /** [navigation] flattened for the card's declared route (`$item.` reads flat fields only); "" when absent. */
60
+ navTitle?: string;
61
+ navSubtitle?: string;
62
+ navSearch?: string;
63
+ createNavTitle?: string;
64
+ createNavSubtitle?: string;
65
+ createNavSearch?: string;
59
66
  }
60
67
 
61
68
  /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
@@ -118,6 +125,8 @@ export function parseAreas(value: unknown): ManageArea[] {
118
125
  const area = Object.fromEntries(required) as Record<string, string>;
119
126
  const createScreenId = clean(raw.createScreenId);
120
127
  const createLabel = clean(raw.createLabel);
128
+ const navigation = parseNavigation(raw.navigation);
129
+ const createNavigation = createScreenId && createLabel ? parseNavigation(raw.createNavigation) : undefined;
121
130
  // Creation is only an in-app route when both fields are present. A lone
122
131
  // label must not produce a promising but inert action.
123
132
  return [{
@@ -126,8 +135,11 @@ export function parseAreas(value: unknown): ManageArea[] {
126
135
  hideCreate: !(createScreenId && createLabel),
127
136
  hideHandoff: !DASHBOARD_PATHS[area.id],
128
137
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
- ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
- ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
138
+ ...(navigation ? { navigation } : {}),
139
+ ...(createNavigation ? { createNavigation } : {}),
140
+ navTitle: navigation?.title ?? "", navSubtitle: navigation?.subtitle ?? "", navSearch: navigation?.search ?? "",
141
+ createNavTitle: createNavigation?.title ?? "", createNavSubtitle: createNavigation?.subtitle ?? "",
142
+ createNavSearch: createNavigation?.search ?? "",
131
143
  metricText: "—",
132
144
  statusText: "",
133
145
  unavailable: false,
@@ -13446,7 +13446,13 @@ const SCREENS = runtimeSetting({
13446
13446
  "fullWidth": true,
13447
13447
  "disabledPath": "$service:himiBrandedAgenda.sheetBusy",
13448
13448
  "action": {
13449
- "actionId": "tier5.himiBrandedAgenda.viewSession"
13449
+ "actionId": "tier5.himiBrandedAgenda.viewSession",
13450
+ "nav": {
13451
+ "screenId": "himi_service",
13452
+ "args": {
13453
+ "id": "$service:himiBrandedAgenda.sheetServiceId"
13454
+ }
13455
+ }
13450
13456
  }
13451
13457
  }
13452
13458
  }
@@ -136,6 +136,8 @@ interface S extends LoadFlags {
136
136
  sheetHideCancel: boolean;
137
137
  sheetHideLeave: boolean;
138
138
  sheetBusy: boolean;
139
+ /** The sheet session's service: View class reads its declared route (`nav`) from it. "" with no sheet. */
140
+ sheetServiceId: string;
139
141
  }
140
142
 
141
143
  const flag = (on: boolean): string => (on ? "true" : "");
@@ -573,6 +575,7 @@ function derive(s: S): S {
573
575
  sheetHideCancel: sheetPlace !== "booked",
574
576
  sheetHideLeave: sheetPlace !== "waitlisted",
575
577
  sheetBusy: busy || calendarBusy,
578
+ sheetServiceId: sheet?.serviceId ?? "",
576
579
  };
577
580
  }
578
581
 
@@ -698,7 +701,7 @@ function initial(): S {
698
701
  ...LOADING, firstWeekday: 0, today: "", selectedDate: "", rangeStart: "", rangeEnd: "",
699
702
  decorations: [], events: [], scrollTo: "", signedIn: false, updateRequired: false, updateMessage: "", listHidden: true,
700
703
  ...emptyFlags(false, false), resultOpen: false, resultOpenB: false, resultText: "", resultOk: false, resultInfo: false,
701
- sheetOpen: false, sheetTitle: "", sheetWhen: "", sheetMeta: "", sheetHideCalendar: true, sheetHideCancel: true, sheetHideLeave: true, sheetBusy: false,
704
+ sheetOpen: false, sheetTitle: "", sheetWhen: "", sheetMeta: "", sheetHideCalendar: true, sheetHideCancel: true, sheetHideLeave: true, sheetBusy: false, sheetServiceId: "",
702
705
  };
703
706
  }
704
707
 
@@ -51939,6 +51939,14 @@ const SCREENS = runtimeSetting({
51939
51939
  "actionId": "tier5.himiOwnerLiteManage.create",
51940
51940
  "params": {
51941
51941
  "id": "$item.id"
51942
+ },
51943
+ "nav": {
51944
+ "screenId": "$item.createScreenId",
51945
+ "args": {
51946
+ "title": "$item.createNavTitle",
51947
+ "subtitle": "$item.createNavSubtitle",
51948
+ "search": "$item.createNavSearch"
51949
+ }
51942
51950
  }
51943
51951
  },
51944
51952
  "accessibilityLabel": "$item.createLabel",
@@ -52000,6 +52008,14 @@ const SCREENS = runtimeSetting({
52000
52008
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52001
52009
  "params": {
52002
52010
  "id": "$item.id"
52011
+ },
52012
+ "nav": {
52013
+ "screenId": "$item.screenId",
52014
+ "args": {
52015
+ "title": "$item.navTitle",
52016
+ "subtitle": "$item.navSubtitle",
52017
+ "search": "$item.navSearch"
52018
+ }
52003
52019
  }
52004
52020
  },
52005
52021
  "accessibilityLabel": "$item.title",
@@ -52245,6 +52261,14 @@ const SCREENS = runtimeSetting({
52245
52261
  "actionId": "tier5.himiOwnerLiteManage.create",
52246
52262
  "params": {
52247
52263
  "id": "$item.id"
52264
+ },
52265
+ "nav": {
52266
+ "screenId": "$item.createScreenId",
52267
+ "args": {
52268
+ "title": "$item.createNavTitle",
52269
+ "subtitle": "$item.createNavSubtitle",
52270
+ "search": "$item.createNavSearch"
52271
+ }
52248
52272
  }
52249
52273
  },
52250
52274
  "accessibilityLabel": "$item.createLabel",
@@ -52306,6 +52330,14 @@ const SCREENS = runtimeSetting({
52306
52330
  "actionId": "tier5.himiOwnerLiteManage.openArea",
52307
52331
  "params": {
52308
52332
  "id": "$item.id"
52333
+ },
52334
+ "nav": {
52335
+ "screenId": "$item.screenId",
52336
+ "args": {
52337
+ "title": "$item.navTitle",
52338
+ "subtitle": "$item.navSubtitle",
52339
+ "search": "$item.navSearch"
52340
+ }
52309
52341
  }
52310
52342
  },
52311
52343
  "accessibilityLabel": "$item.title",
@@ -65649,7 +65681,10 @@ const SCREENS = runtimeSetting({
65649
65681
  "title": "Back to Inbox",
65650
65682
  "style": "secondary",
65651
65683
  "action": {
65652
- "actionId": "tier5.ownerLiteInboxThread.back"
65684
+ "actionId": "tier5.ownerLiteInboxThread.back",
65685
+ "nav": {
65686
+ "presentation": "back"
65687
+ }
65653
65688
  }
65654
65689
  }
65655
65690
  }
@@ -56,6 +56,13 @@ export interface ManageArea {
56
56
  navigation?: ManageNavigation;
57
57
  /** The same for its create screen. */
58
58
  createNavigation?: ManageNavigation;
59
+ /** [navigation] flattened for the card's declared route (`$item.` reads flat fields only); "" when absent. */
60
+ navTitle?: string;
61
+ navSubtitle?: string;
62
+ navSearch?: string;
63
+ createNavTitle?: string;
64
+ createNavSubtitle?: string;
65
+ createNavSearch?: string;
59
66
  }
60
67
 
61
68
  /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
@@ -118,6 +125,8 @@ export function parseAreas(value: unknown): ManageArea[] {
118
125
  const area = Object.fromEntries(required) as Record<string, string>;
119
126
  const createScreenId = clean(raw.createScreenId);
120
127
  const createLabel = clean(raw.createLabel);
128
+ const navigation = parseNavigation(raw.navigation);
129
+ const createNavigation = createScreenId && createLabel ? parseNavigation(raw.createNavigation) : undefined;
121
130
  // Creation is only an in-app route when both fields are present. A lone
122
131
  // label must not produce a promising but inert action.
123
132
  return [{
@@ -126,8 +135,11 @@ export function parseAreas(value: unknown): ManageArea[] {
126
135
  hideCreate: !(createScreenId && createLabel),
127
136
  hideHandoff: !DASHBOARD_PATHS[area.id],
128
137
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
- ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
- ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
138
+ ...(navigation ? { navigation } : {}),
139
+ ...(createNavigation ? { createNavigation } : {}),
140
+ navTitle: navigation?.title ?? "", navSubtitle: navigation?.subtitle ?? "", navSearch: navigation?.search ?? "",
141
+ createNavTitle: createNavigation?.title ?? "", createNavSubtitle: createNavigation?.subtitle ?? "",
142
+ createNavSearch: createNavigation?.search ?? "",
131
143
  metricText: "—",
132
144
  statusText: "",
133
145
  unavailable: false,