@wix/himalaya-cli 0.1026.0 → 0.1027.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 (74) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +9 -0
  2. package/dist/cli.mjs +1052 -653
  3. package/dist/preview-assets.generated.bin +0 -0
  4. package/guides/app-config.md +6 -0
  5. package/guides/headless-loop.md +3 -1
  6. package/package.json +2 -2
  7. package/templates/beauty-salon/dev/index.ts +331 -199
  8. package/templates/beauty-salon/tier5-src/_shared/collection-contract.ts +18 -8
  9. package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +28 -3
  10. package/templates/beauty-salon-owner/dev/index.ts +857 -458
  11. package/templates/beauty-salon-owner/tier5-src/_shared/collection-contract.ts +18 -8
  12. package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +28 -3
  13. package/templates/branded-lite/dev/index.ts +1539 -623
  14. package/templates/branded-lite/tier5-src/_shared/collection-contract.ts +18 -8
  15. package/templates/branded-lite/tier5-src/_shared/collection-service.ts +28 -3
  16. package/templates/community-club/dev/index.ts +237 -142
  17. package/templates/community-club/tier5-src/_shared/collection-contract.ts +18 -8
  18. package/templates/community-club/tier5-src/_shared/collection-service.ts +28 -3
  19. package/templates/community-club-owner/dev/index.ts +857 -458
  20. package/templates/community-club-owner/tier5-src/_shared/collection-contract.ts +18 -8
  21. package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +28 -3
  22. package/templates/events-meetups/dev/index.ts +202 -129
  23. package/templates/events-meetups/tier5-src/_shared/collection-contract.ts +18 -8
  24. package/templates/events-meetups/tier5-src/_shared/collection-service.ts +28 -3
  25. package/templates/events-meetups-owner/dev/index.ts +815 -458
  26. package/templates/events-meetups-owner/tier5-src/_shared/collection-contract.ts +18 -8
  27. package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +28 -3
  28. package/templates/gym-fitness/dev/index.ts +461 -212
  29. package/templates/gym-fitness/tier5-src/_shared/collection-contract.ts +18 -8
  30. package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +28 -3
  31. package/templates/gym-fitness-owner/dev/index.ts +758 -338
  32. package/templates/gym-fitness-owner/tier5-src/_shared/collection-contract.ts +18 -8
  33. package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +28 -3
  34. package/templates/himi-chat/dev/index.ts +26 -1
  35. package/templates/nonprofit-cause/dev/index.ts +246 -153
  36. package/templates/nonprofit-cause/tier5-src/_shared/collection-contract.ts +18 -8
  37. package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +28 -3
  38. package/templates/nonprofit-cause-owner/dev/index.ts +716 -338
  39. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-contract.ts +18 -8
  40. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +28 -3
  41. package/templates/owner-lite/dev/index.ts +758 -338
  42. package/templates/owner-lite/tier5-src/_shared/collection-contract.ts +18 -8
  43. package/templates/owner-lite/tier5-src/_shared/collection-service.ts +28 -3
  44. package/templates/podcast-creator/dev/index.ts +255 -164
  45. package/templates/podcast-creator/tier5-src/_shared/collection-contract.ts +18 -8
  46. package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +28 -3
  47. package/templates/podcast-creator-owner/dev/index.ts +857 -458
  48. package/templates/podcast-creator-owner/tier5-src/_shared/collection-contract.ts +18 -8
  49. package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +28 -3
  50. package/templates/portfolio-creative/dev/index.ts +287 -175
  51. package/templates/portfolio-creative/tier5-src/_shared/collection-contract.ts +18 -8
  52. package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +28 -3
  53. package/templates/portfolio-creative-owner/dev/index.ts +857 -458
  54. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-contract.ts +18 -8
  55. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +28 -3
  56. package/templates/restaurant/dev/index.ts +200 -126
  57. package/templates/restaurant/tier5-src/_shared/collection-contract.ts +18 -8
  58. package/templates/restaurant/tier5-src/_shared/collection-service.ts +28 -3
  59. package/templates/restaurant-owner/dev/index.ts +758 -338
  60. package/templates/restaurant-owner/tier5-src/_shared/collection-contract.ts +18 -8
  61. package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +28 -3
  62. package/templates/retail-store/dev/index.ts +113 -138
  63. package/templates/retail-store/tier5-src/_shared/collection-contract.ts +18 -8
  64. package/templates/retail-store/tier5-src/_shared/collection-service.ts +28 -3
  65. package/templates/retail-store-owner/dev/index.ts +716 -338
  66. package/templates/retail-store-owner/tier5-src/_shared/collection-contract.ts +18 -8
  67. package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +28 -3
  68. package/templates/surface-showcase/dev/index.ts +27 -0
  69. package/templates/yoga-studio/dev/index.ts +427 -198
  70. package/templates/yoga-studio/tier5-src/_shared/collection-contract.ts +18 -8
  71. package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +28 -3
  72. package/templates/yoga-studio-owner/dev/index.ts +716 -338
  73. package/templates/yoga-studio-owner/tier5-src/_shared/collection-contract.ts +18 -8
  74. package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +28 -3
@@ -8,6 +8,9 @@ export interface CollectionConfig {
8
8
  image?: string;
9
9
  filter?: string;
10
10
  filterValues?: string[];
11
+ /** A state key holding `{ label }` rows (e.g. a worker's full category list) whose
12
+ * labels are filter choices even when no loaded row carries them yet. */
13
+ filterValuesFrom?: string;
11
14
  searchPlaceholder?: string;
12
15
  sortLabels?: { default: string; az: string; za: string };
13
16
  metadata?: string[];
@@ -20,15 +23,22 @@ export interface CollectionConfig {
20
23
  reviewSelectedAction?: string;
21
24
  /** Optional comfortable grid media height for immersive visual catalogs. */
22
25
  gridImageHeight?: number;
26
+ /** The card's primary verb, shown as a visible button beside the overflow.
27
+ * `screenId` opens that screen with the row id; without it the verb reuses the
28
+ * row's own tap action (the detail screen that owns the verb). */
29
+ primaryVerb?: { label: string; screenId?: string };
23
30
  }
31
+ /** At or below this many records, with no query/filter narrowing them and no further
32
+ * page, the list/grid toggle, Refine, chips, search and count are noise. */
33
+ export const COLLECTION_CHROME_MIN_ITEMS = 4;
24
34
  export const COLLECTIONS: Record<string, CollectionConfig> = {
25
35
  himiStoreShop: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', view: 'grid', backendQuery: true },
26
- himiBookingServices: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', filter: 'category', view: 'grid', backendQuery: true, searchPlaceholder: 'Service name starts with…' },
36
+ himiBookingServices: { rows: 'results', title: 'name', subtitle: 'subtitle', image: 'image', filter: 'category', view: 'grid', backendQuery: true, searchPlaceholder: 'Service name starts with…', primaryVerb: { label: 'Book', screenId: 'himi_time' } },
27
37
  himiBookingBookings: { rows: 'rows', title: 'title', subtitle: 'subtitle', metadata: ['status'], view: 'list', backendQuery: true,
28
38
  defaultFilter: 'value:Upcoming', searchPlaceholder: 'Exact booking ID', filterValues: ['Upcoming', 'Past', 'Cancelled'],
29
39
  sortLabels: { default: 'Soonest', az: 'Oldest', za: 'Latest' } },
30
- himiEvents: { rows: 'results', title: 'title', subtitle: 'dateLine', image: 'image', view: 'grid', backendQuery: true, searchPlaceholder: 'Exact event title', filterValues: ['Upcoming', 'Past'], sortLabels: { default: 'Date', az: 'Title A–Z', za: 'Title Z–A' } },
31
- himiBlogFeed: { rows: 'posts', title: 'title', subtitle: 'excerpt', image: 'image', view: 'grid' },
40
+ himiEvents: { rows: 'results', title: 'title', subtitle: 'dateLine', image: 'image', view: 'grid', backendQuery: true, searchPlaceholder: 'Exact event title', filterValues: ['Upcoming', 'Past'], sortLabels: { default: 'Date', az: 'Title A–Z', za: 'Title Z–A' }, primaryVerb: { label: 'Register' } },
41
+ himiBlogFeed: { rows: 'posts', title: 'title', subtitle: 'excerpt', image: 'image', filter: 'category', filterValuesFrom: 'categories', view: 'grid' },
32
42
  himiOwnerLiteProducts: { rows: 'products', title: 'name', subtitle: 'price', image: 'image', view: 'grid', backendQuery: true },
33
43
  himiOwnerModules: { instanceInput: 'module', rows: 'rows', title: 'title', subtitle: 'subtitle', image: 'image', filter: 'statusLabel', view: 'list', paged: true, reviewAction: 'prepareRecord', reviewSelectedAction: 'prepareSelected' },
34
44
  himiOwnerLiteServices: { rows: 'services', title: 'name', subtitle: 'subtitle', view: 'list', backendQuery: true, searchPlaceholder: 'Service name starts with…' },
@@ -45,14 +55,14 @@ export const COLLECTIONS: Record<string, CollectionConfig> = {
45
55
  sortLabels: { default: 'Newest', az: 'Oldest', za: 'Order # ↓' } },
46
56
  himiBrandedPlans: { rows: 'rows', title: 'name', subtitle: 'description', metadata: ['priceLine', 'periodLine', 'trialBadge', 'perk1', 'perk2', 'perk3'], view: 'grid' },
47
57
  himiBrandedPrograms: { rows: 'rows', title: 'name', subtitle: 'description', image: 'image', view: 'grid' },
48
- himiBrandedCoupons: { rows: 'coupons', title: 'name', subtitle: 'subtitle', view: 'list' },
58
+ himiBrandedCoupons: { rows: 'coupons', title: 'name', subtitle: 'subtitle', view: 'list', primaryVerb: { label: 'Get code' } },
49
59
  himiBrandedNotifications: { rows: 'items', title: 'name', subtitle: 'subtitle', image: 'photo', metadata: ['unreadDot'], view: 'list' },
50
- himiBrandedLoyalty: { rows: 'rewards', title: 'name', subtitle: 'description', view: 'grid' },
60
+ himiBrandedLoyalty: { rows: 'rewards', title: 'name', subtitle: 'description', view: 'grid', primaryVerb: { label: 'Redeem' } },
51
61
  himiBrandedReviews: { rows: 'reviews', title: 'title', subtitle: 'body', metadata: ['author', 'stars'], view: 'list' },
52
62
  himiBrandedPortfolio: { rows: 'projects', title: 'title', subtitle: 'subtitle', image: 'image', view: 'grid', gridImageHeight: 180 },
53
63
  himiBrandedInvoices: { rows: 'invoices', title: 'title', subtitle: 'subtitle', view: 'list' },
54
64
  himiBrandedBadges: { rows: 'badges', title: 'name', subtitle: 'description', view: 'grid' },
55
- himiBrandedDonations: { rows: 'campaigns', title: 'name', subtitle: 'description', view: 'grid' },
65
+ himiBrandedDonations: { rows: 'campaigns', title: 'name', subtitle: 'description', view: 'grid', primaryVerb: { label: 'Donate' } },
56
66
  himiBrandedGiftCards: { rows: 'cards', title: 'name', subtitle: 'description', view: 'grid' },
57
67
  himiBrandedVideos: { rows: 'channels', title: 'title', subtitle: 'description', view: 'grid' },
58
68
  himiBrandedPodcasts: { rows: 'episodes', title: 'title', subtitle: 'subtitle', image: 'image', metadata: ['progressLabel'], view: 'list' },
@@ -114,7 +124,7 @@ export function collectionTitle(row: CollectionRow, config: CollectionConfig): s
114
124
  return scalar(row[config.title]) || scalar(row.title) || scalar(row.name) || scalar(row.display) || scalar(row.label);
115
125
  }
116
126
  /** Does not mutate domain rows, paging, or domain-derived state. */
117
- export function projectCollection(source: CollectionRow[], config: CollectionConfig, prefs: CollectionPreferences, backendQuery = false) {
127
+ export function projectCollection(source: CollectionRow[], config: CollectionConfig, prefs: CollectionPreferences, backendQuery = false, knownFilters: string[] = []) {
118
128
  const query = prefs.query.trim().toLocaleLowerCase();
119
129
  const unique = new Set<string>();
120
130
  // Menu sections describe their following items; they are not actionable
@@ -130,7 +140,7 @@ export function projectCollection(source: CollectionRow[], config: CollectionCon
130
140
  if (unique.has(id)) return false;
131
141
  unique.add(id); return true;
132
142
  });
133
- const filters = config.filterValues ?? [...new Set(rows.map(row => config.filter ? scalar(row[config.filter]) : '').filter(Boolean))].sort();
143
+ const filters = config.filterValues ?? [...new Set([...knownFilters, ...rows.map(row => config.filter ? scalar(row[config.filter]) : '')].filter(Boolean))].sort();
134
144
  const visible = rows.filter(row => {
135
145
  if (backendQuery) return true;
136
146
  if (prefs.filter === 'saved' && !prefs.savedIds.includes(collectionId(row))) return false;
@@ -1,5 +1,5 @@
1
1
  import { defineService as register, type ServiceDefinition } from '@himalaya/state';
2
- import { COLLECTIONS, normalizeCollection, projectCollection, collectionId, type CollectionRow } from './collection-contract.js';
2
+ import { COLLECTIONS, COLLECTION_CHROME_MIN_ITEMS, initialCollection, normalizeCollection, projectCollection, collectionId, type CollectionRow } from './collection-contract.js';
3
3
  import { localPreferences, type PreferenceRuntime } from './local-preferences.js';
4
4
  import { copyParam, stashCopy } from './himi-copy.js';
5
5
  import { createCollectionQuery, type CollectionQuerySource, type CollectionQueryState } from './collection-query.js';
@@ -54,6 +54,14 @@ export function decorateCollection(name: string, def: { state: State; actions?:
54
54
  /** Navigation can open a collection in a useful, reviewable context. Keep
55
55
  * this input additive and constrained to the same criteria the collection UI
56
56
  * can select; arbitrary route values must never become backend filters. */
57
+ /** Labels of the worker-listed filter choices (`filterValuesFrom`), minus the "All" row. */
58
+ const listedFilters = (state: State): string[] => config.filterValuesFrom && Array.isArray(state[config.filterValuesFrom])
59
+ ? (state[config.filterValuesFrom] as unknown[]).flatMap(row => {
60
+ const r = row && typeof row === 'object' ? row as Record<string, unknown> : {};
61
+ return typeof r.label === 'string' && r.id !== '' ? [r.label] : [];
62
+ })
63
+ : [];
64
+ let pendingFilter = '';
57
65
  const applyNavigationCriteria = (arg: unknown, state: State): boolean => {
58
66
  const input = object(arg);
59
67
  let changed = false;
@@ -70,9 +78,14 @@ export function decorateCollection(name: string, def: { state: State; actions?:
70
78
  const configured = config.filterValues ?? [];
71
79
  const rows = Array.isArray(state[config.rows]) ? state[config.rows] as CollectionRow[] : [];
72
80
  const derived = config.filter ? rows.map(row => String(row[config.filter!] ?? '')).filter(Boolean) : [];
81
+ const known = listedFilters(state);
73
82
  const allowed = filter === 'all' || filter === 'saved' ||
74
- (filter.startsWith('value:') && [...configured, ...derived].includes(filter.slice(6)));
83
+ (filter.startsWith('value:') && [...configured, ...derived, ...known].includes(filter.slice(6)));
75
84
  if (allowed) { prefs.filter = filter; changed = true; }
85
+ // A worker-listed choice (e.g. a blog category) may not have loaded yet at boot:
86
+ // hold it and settle it against the list once the list arrives, instead of
87
+ // discarding a valid deep link before load().
88
+ else if (filter.startsWith('value:') && config.filterValuesFrom && known.length === 0) pendingFilter = filter;
76
89
  }
77
90
  if (changed) {
78
91
  prefs.selectedIds = [];
@@ -90,7 +103,12 @@ export function decorateCollection(name: string, def: { state: State; actions?:
90
103
  const derive = (s: State): State => {
91
104
  syncSaved();
92
105
  const rows = Array.isArray(s[config.rows]) ? (s[config.rows] as CollectionRow[]).filter(x => x && typeof x === 'object') : [];
93
- const projected = projectCollection(rows, config, prefs, !!backend && config.backendQuery === true);
106
+ const known = listedFilters(s);
107
+ if (pendingFilter && known.length) {
108
+ if (known.includes(pendingFilter.slice(6))) { prefs.filter = pendingFilter; persisted.write(prefs); }
109
+ pendingFilter = '';
110
+ }
111
+ const projected = projectCollection(rows, config, prefs, !!backend && config.backendQuery === true, known);
94
112
  projected.items.forEach(row => { row.collectionSelectLabel = row.collectionSelected ? copyParam('collection.selected', 'Selected') : copyParam('collection.select', 'Select'); });
95
113
  if (previewId && !rows.some(row => collectionId(row) === previewId)) previewId = '';
96
114
  const filterChoices = [{ id: 'all', label: copyParam('collection.all', 'All') }, { id: 'saved', label: copyParam('collection.saved', 'Saved') },
@@ -106,7 +124,14 @@ export function decorateCollection(name: string, def: { state: State; actions?:
106
124
  const queryError = typeof backendState?.error === 'string' ? backendState.error.trim() : '';
107
125
  const errorMessage = queryError || domainError || copyParam('collection.loadError', 'This collection could not load. Try again.');
108
126
  const canRetry = !!backend || typeof def.actions?.refresh === 'function' || typeof def.actions?.load === 'function' || typeof def.actions?.collectionRetry === 'function';
127
+ // A default view is what the screen opens on; anything else is the member's own
128
+ // narrowing, which keeps the chrome (and the Clear that undoes it) on screen.
129
+ // "All" and the collection's own default (e.g. Upcoming) are both un-narrowed: Clear
130
+ // resets to "All", so showing it on either would offer a reset that changes nothing.
131
+ const narrowed = !!prefs.query.trim() || (prefs.filter !== 'all' && prefs.filter !== initialCollection(config).filter);
132
+ const hideChrome = !narrowed && !s.nextCursor && projected.loaded < COLLECTION_CHROME_MIN_ITEMS;
109
133
  return { ...s, collection: { ...prefs, ...projected,
134
+ hideChrome, noActiveCriteria: !narrowed,
110
135
  viewName, viewMessage, saveMessage, noSavedViews: prefs.savedViews.length === 0,
111
136
  cursor: s.pageError === true || s.loadingMore === true ? '' : s.nextCursor,
112
137
  noMore: !s.nextCursor || s.pageError === true || s.loadingMore === true,
@@ -4900,11 +4900,10 @@ const SCREENS = runtimeSetting({
4900
4900
  "id": "himi_feed.search",
4901
4901
  "body": {
4902
4902
  "package": "himalaya",
4903
- "type": "TextField",
4903
+ "type": "SearchField",
4904
4904
  "props": {
4905
4905
  "placeholder": "Search posts",
4906
- "autoCapitalization": "none",
4907
- "submitLabel": "search",
4906
+ "debounceMs": 200,
4908
4907
  "onChange": {
4909
4908
  "actionId": "tier5.himiBrandedFeed.filter"
4910
4909
  }
@@ -5840,6 +5839,9 @@ const SCREENS = runtimeSetting({
5840
5839
  },
5841
5840
  "value": "$service:himiEvents.collection.query"
5842
5841
  }
5842
+ },
5843
+ "modifiers": {
5844
+ "hiddenPath": "$service:himiEvents.collection.hideChrome"
5843
5845
  }
5844
5846
  },
5845
5847
  {
@@ -6096,6 +6098,7 @@ const SCREENS = runtimeSetting({
6096
6098
  }
6097
6099
  },
6098
6100
  "modifiers": {
6101
+ "hiddenPath": "$service:himiEvents.collection.hideChrome",
6099
6102
  "padding": {
6100
6103
  "bottom": 12
6101
6104
  }
@@ -6133,37 +6136,55 @@ const SCREENS = runtimeSetting({
6133
6136
  "actionId": "tier5.himiEvents.collectionFilter"
6134
6137
  }
6135
6138
  }
6139
+ },
6140
+ "modifiers": {
6141
+ "weight": 1
6136
6142
  }
6137
6143
  },
6138
6144
  {
6139
- "id": "",
6145
+ "id": "himi_events.list.collection.clear",
6140
6146
  "body": {
6141
6147
  "package": "himalaya",
6142
- "type": "Spacer",
6143
- "props": {}
6144
- }
6145
- },
6146
- {
6147
- "id": "",
6148
- "body": {
6149
- "package": "himalaya",
6150
- "type": "Text",
6148
+ "type": "Button",
6151
6149
  "props": {
6152
- "text": "$service:himiEvents.collection.summary",
6153
- "style": "caption",
6154
- "color": "textSecondary"
6150
+ "title": "Clear",
6151
+ "style": "plain",
6152
+ "fullWidth": false,
6153
+ "action": {
6154
+ "actionId": "tier5.himiEvents.collectionClear"
6155
+ }
6155
6156
  }
6157
+ },
6158
+ "modifiers": {
6159
+ "hiddenPath": "$service:himiEvents.collection.noActiveCriteria"
6156
6160
  }
6157
6161
  }
6158
6162
  ]
6159
6163
  }
6160
6164
  },
6161
6165
  "modifiers": {
6166
+ "hiddenPath": "$service:himiEvents.collection.hideChrome",
6162
6167
  "padding": {
6163
6168
  "bottom": 12
6164
6169
  }
6165
6170
  }
6166
6171
  },
6172
+ {
6173
+ "id": "himi_events.list.collection.summary",
6174
+ "body": {
6175
+ "package": "himalaya",
6176
+ "type": "Text",
6177
+ "props": {
6178
+ "text": "$service:himiEvents.collection.summary",
6179
+ "style": "caption",
6180
+ "color": "textSecondary",
6181
+ "maxLines": 1
6182
+ }
6183
+ },
6184
+ "modifiers": {
6185
+ "hiddenPath": "$service:himiEvents.collection.hideChrome"
6186
+ }
6187
+ },
6167
6188
  {
6168
6189
  "id": "",
6169
6190
  "body": {
@@ -6460,6 +6481,25 @@ const SCREENS = runtimeSetting({
6460
6481
  "hiddenPath": "$service:himiEvents.collection.noSelection"
6461
6482
  }
6462
6483
  },
6484
+ {
6485
+ "id": "himi_events.list.collection.list.$item.collectionId/primary",
6486
+ "body": {
6487
+ "package": "himalaya",
6488
+ "type": "Button",
6489
+ "props": {
6490
+ "title": "Register",
6491
+ "style": "secondary",
6492
+ "fullWidth": false,
6493
+ "action": {
6494
+ "actionId": "himi.open",
6495
+ "params": {
6496
+ "screenId": "$item.detailScreenId",
6497
+ "id": "$item.id"
6498
+ }
6499
+ }
6500
+ }
6501
+ }
6502
+ },
6463
6503
  {
6464
6504
  "id": "himi_events.list.collection.list.$item.collectionId/actions",
6465
6505
  "body": {
@@ -6789,6 +6829,25 @@ const SCREENS = runtimeSetting({
6789
6829
  "hiddenPath": "$service:himiEvents.collection.noSelection"
6790
6830
  }
6791
6831
  },
6832
+ {
6833
+ "id": "himi_events.list.collection.grid.$item.collectionId/primary",
6834
+ "body": {
6835
+ "package": "himalaya",
6836
+ "type": "Button",
6837
+ "props": {
6838
+ "title": "Register",
6839
+ "style": "secondary",
6840
+ "fullWidth": false,
6841
+ "action": {
6842
+ "actionId": "himi.open",
6843
+ "params": {
6844
+ "screenId": "$item.detailScreenId",
6845
+ "id": "$item.id"
6846
+ }
6847
+ }
6848
+ }
6849
+ }
6850
+ },
6792
6851
  {
6793
6852
  "id": "",
6794
6853
  "body": {
@@ -7111,6 +7170,25 @@ const SCREENS = runtimeSetting({
7111
7170
  "hiddenPath": "$service:himiEvents.collection.noSelection"
7112
7171
  }
7113
7172
  },
7173
+ {
7174
+ "id": "himi_events.list.collection.compact-list.$item.collectionId/primary",
7175
+ "body": {
7176
+ "package": "himalaya",
7177
+ "type": "Button",
7178
+ "props": {
7179
+ "title": "Register",
7180
+ "style": "secondary",
7181
+ "fullWidth": false,
7182
+ "action": {
7183
+ "actionId": "himi.open",
7184
+ "params": {
7185
+ "screenId": "$item.detailScreenId",
7186
+ "id": "$item.id"
7187
+ }
7188
+ }
7189
+ }
7190
+ }
7191
+ },
7114
7192
  {
7115
7193
  "id": "himi_events.list.collection.compact-list.$item.collectionId/actions",
7116
7194
  "body": {
@@ -7440,6 +7518,25 @@ const SCREENS = runtimeSetting({
7440
7518
  "hiddenPath": "$service:himiEvents.collection.noSelection"
7441
7519
  }
7442
7520
  },
7521
+ {
7522
+ "id": "himi_events.list.collection.compact-grid.$item.collectionId/primary",
7523
+ "body": {
7524
+ "package": "himalaya",
7525
+ "type": "Button",
7526
+ "props": {
7527
+ "title": "Register",
7528
+ "style": "secondary",
7529
+ "fullWidth": false,
7530
+ "action": {
7531
+ "actionId": "himi.open",
7532
+ "params": {
7533
+ "screenId": "$item.detailScreenId",
7534
+ "id": "$item.id"
7535
+ }
7536
+ }
7537
+ }
7538
+ }
7539
+ },
7443
7540
  {
7444
7541
  "id": "",
7445
7542
  "body": {
@@ -8126,6 +8223,25 @@ const SCREENS = runtimeSetting({
8126
8223
  "hiddenPath": "$service:himiEvents.collection.noSelection"
8127
8224
  }
8128
8225
  },
8226
+ {
8227
+ "id": "himi_events.list.collection.preview.$item.collectionId/primary",
8228
+ "body": {
8229
+ "package": "himalaya",
8230
+ "type": "Button",
8231
+ "props": {
8232
+ "title": "Register",
8233
+ "style": "secondary",
8234
+ "fullWidth": false,
8235
+ "action": {
8236
+ "actionId": "himi.open",
8237
+ "params": {
8238
+ "screenId": "$item.detailScreenId",
8239
+ "id": "$item.id"
8240
+ }
8241
+ }
8242
+ }
8243
+ }
8244
+ },
8129
8245
  {
8130
8246
  "id": "",
8131
8247
  "body": {
@@ -9027,59 +9143,9 @@ const SCREENS = runtimeSetting({
9027
9143
  },
9028
9144
  "value": "$service:himiBlogFeed.collection.query"
9029
9145
  }
9030
- }
9031
- },
9032
- {
9033
- "id": "himi_blog.categories",
9034
- "body": {
9035
- "package": "himalaya",
9036
- "type": "Grid",
9037
- "props": {
9038
- "columns": 2,
9039
- "spacing": 8,
9040
- "itemsPath": "$service:himiBlogFeed.categories",
9041
- "items": [
9042
- {
9043
- "id": "",
9044
- "body": {
9045
- "package": "himalaya",
9046
- "type": "Text",
9047
- "props": {
9048
- "text": "$item.label",
9049
- "style": "footnote",
9050
- "color": "textPrimary",
9051
- "maxLines": 1
9052
- }
9053
- },
9054
- "modifiers": {
9055
- "background": {
9056
- "token": "accentSurface"
9057
- },
9058
- "border": {
9059
- "width": 1,
9060
- "color": {
9061
- "token": "border"
9062
- }
9063
- },
9064
- "cornerRadius": 8,
9065
- "padding": {
9066
- "leading": 12,
9067
- "trailing": 12,
9068
- "top": 9,
9069
- "bottom": 9
9070
- },
9071
- "onTap": {
9072
- "actionId": "tier5.himiBlogFeed.selectCategory",
9073
- "params": {
9074
- "categoryId": "$item.id"
9075
- }
9076
- },
9077
- "pressFeedback": "scale",
9078
- "haptic": "light"
9079
- }
9080
- }
9081
- ]
9082
- }
9146
+ },
9147
+ "modifiers": {
9148
+ "hiddenPath": "$service:himiBlogFeed.collection.hideChrome"
9083
9149
  }
9084
9150
  },
9085
9151
  {
@@ -9274,40 +9340,6 @@ const SCREENS = runtimeSetting({
9274
9340
  "spacing": 12,
9275
9341
  "alignment": "leading",
9276
9342
  "children": [
9277
- {
9278
- "id": "",
9279
- "body": {
9280
- "package": "himalaya",
9281
- "type": "HStack",
9282
- "props": {
9283
- "spacing": 8,
9284
- "children": [
9285
- {
9286
- "id": "",
9287
- "body": {
9288
- "package": "himalaya",
9289
- "type": "Spacer",
9290
- "props": {}
9291
- }
9292
- },
9293
- {
9294
- "id": "himi_blog.clear",
9295
- "body": {
9296
- "package": "himalaya",
9297
- "type": "Button",
9298
- "props": {
9299
- "title": "Clear",
9300
- "style": "secondary",
9301
- "action": {
9302
- "actionId": "tier5.himiBlogFeed.clearFilters"
9303
- }
9304
- }
9305
- }
9306
- }
9307
- ]
9308
- }
9309
- }
9310
- },
9311
9343
  {
9312
9344
  "id": "himi_blog.list.collection.toolbar",
9313
9345
  "body": {
@@ -9370,6 +9402,7 @@ const SCREENS = runtimeSetting({
9370
9402
  }
9371
9403
  },
9372
9404
  "modifiers": {
9405
+ "hiddenPath": "$service:himiBlogFeed.collection.hideChrome",
9373
9406
  "padding": {
9374
9407
  "bottom": 12
9375
9408
  }
@@ -9407,37 +9440,55 @@ const SCREENS = runtimeSetting({
9407
9440
  "actionId": "tier5.himiBlogFeed.collectionFilter"
9408
9441
  }
9409
9442
  }
9443
+ },
9444
+ "modifiers": {
9445
+ "weight": 1
9410
9446
  }
9411
9447
  },
9412
9448
  {
9413
- "id": "",
9414
- "body": {
9415
- "package": "himalaya",
9416
- "type": "Spacer",
9417
- "props": {}
9418
- }
9419
- },
9420
- {
9421
- "id": "",
9449
+ "id": "himi_blog.list.collection.clear",
9422
9450
  "body": {
9423
9451
  "package": "himalaya",
9424
- "type": "Text",
9452
+ "type": "Button",
9425
9453
  "props": {
9426
- "text": "$service:himiBlogFeed.collection.summary",
9427
- "style": "caption",
9428
- "color": "textSecondary"
9454
+ "title": "Clear",
9455
+ "style": "plain",
9456
+ "fullWidth": false,
9457
+ "action": {
9458
+ "actionId": "tier5.himiBlogFeed.collectionClear"
9459
+ }
9429
9460
  }
9461
+ },
9462
+ "modifiers": {
9463
+ "hiddenPath": "$service:himiBlogFeed.collection.noActiveCriteria"
9430
9464
  }
9431
9465
  }
9432
9466
  ]
9433
9467
  }
9434
9468
  },
9435
9469
  "modifiers": {
9470
+ "hiddenPath": "$service:himiBlogFeed.collection.hideChrome",
9436
9471
  "padding": {
9437
9472
  "bottom": 12
9438
9473
  }
9439
9474
  }
9440
9475
  },
9476
+ {
9477
+ "id": "himi_blog.list.collection.summary",
9478
+ "body": {
9479
+ "package": "himalaya",
9480
+ "type": "Text",
9481
+ "props": {
9482
+ "text": "$service:himiBlogFeed.collection.summary",
9483
+ "style": "caption",
9484
+ "color": "textSecondary",
9485
+ "maxLines": 1
9486
+ }
9487
+ },
9488
+ "modifiers": {
9489
+ "hiddenPath": "$service:himiBlogFeed.collection.hideChrome"
9490
+ }
9491
+ },
9441
9492
  {
9442
9493
  "id": "",
9443
9494
  "body": {
@@ -12194,6 +12245,9 @@ const SCREENS = runtimeSetting({
12194
12245
  },
12195
12246
  "value": "$service:himiBrandedGroups.collection.query"
12196
12247
  }
12248
+ },
12249
+ "modifiers": {
12250
+ "hiddenPath": "$service:himiBrandedGroups.collection.hideChrome"
12197
12251
  }
12198
12252
  },
12199
12253
  {
@@ -12371,6 +12425,7 @@ const SCREENS = runtimeSetting({
12371
12425
  }
12372
12426
  },
12373
12427
  "modifiers": {
12428
+ "hiddenPath": "$service:himiBrandedGroups.collection.hideChrome",
12374
12429
  "padding": {
12375
12430
  "bottom": 12
12376
12431
  }
@@ -12408,37 +12463,55 @@ const SCREENS = runtimeSetting({
12408
12463
  "actionId": "tier5.himiBrandedGroups.collectionFilter"
12409
12464
  }
12410
12465
  }
12466
+ },
12467
+ "modifiers": {
12468
+ "weight": 1
12411
12469
  }
12412
12470
  },
12413
12471
  {
12414
- "id": "",
12415
- "body": {
12416
- "package": "himalaya",
12417
- "type": "Spacer",
12418
- "props": {}
12419
- }
12420
- },
12421
- {
12422
- "id": "",
12472
+ "id": "himi_groups.rows.collection.clear",
12423
12473
  "body": {
12424
12474
  "package": "himalaya",
12425
- "type": "Text",
12475
+ "type": "Button",
12426
12476
  "props": {
12427
- "text": "$service:himiBrandedGroups.collection.summary",
12428
- "style": "caption",
12429
- "color": "textSecondary"
12477
+ "title": "Clear",
12478
+ "style": "plain",
12479
+ "fullWidth": false,
12480
+ "action": {
12481
+ "actionId": "tier5.himiBrandedGroups.collectionClear"
12482
+ }
12430
12483
  }
12484
+ },
12485
+ "modifiers": {
12486
+ "hiddenPath": "$service:himiBrandedGroups.collection.noActiveCriteria"
12431
12487
  }
12432
12488
  }
12433
12489
  ]
12434
12490
  }
12435
12491
  },
12436
12492
  "modifiers": {
12493
+ "hiddenPath": "$service:himiBrandedGroups.collection.hideChrome",
12437
12494
  "padding": {
12438
12495
  "bottom": 12
12439
12496
  }
12440
12497
  }
12441
12498
  },
12499
+ {
12500
+ "id": "himi_groups.rows.collection.summary",
12501
+ "body": {
12502
+ "package": "himalaya",
12503
+ "type": "Text",
12504
+ "props": {
12505
+ "text": "$service:himiBrandedGroups.collection.summary",
12506
+ "style": "caption",
12507
+ "color": "textSecondary",
12508
+ "maxLines": 1
12509
+ }
12510
+ },
12511
+ "modifiers": {
12512
+ "hiddenPath": "$service:himiBrandedGroups.collection.hideChrome"
12513
+ }
12514
+ },
12442
12515
  {
12443
12516
  "id": "",
12444
12517
  "body": {