@wix/himalaya-cli 0.1613.0 → 0.1615.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 (130) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/ui/src/index.d.ts +53 -13
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +3 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/ui.mjs +31 -5
  4. package/dist/cli.mjs +1638 -1330
  5. package/dist/preview-assets.generated.bin +0 -0
  6. package/fixtures/wix-canned.json +4 -0
  7. package/guides/component-reference.json +1 -1
  8. package/guides/component-reference.md +3 -0
  9. package/guides/designing-himi-screens.md +4 -1
  10. package/guides/hhp.md +2 -2
  11. package/guides/sdk-reference.json +28 -4
  12. package/package.json +2 -2
  13. package/template-icons/salon-spa.png +0 -0
  14. package/templates/beauty-salon/tier5-src/_shared/branded-load-state.ts +5 -2
  15. package/templates/beauty-salon/tier5-src/_shared/himi-account.ts +31 -0
  16. package/templates/beauty-salon/tier5-src/_shared/himi-booking-saved.ts +88 -0
  17. package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +50 -3
  18. package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +70 -3
  19. package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +40 -8
  20. package/templates/beauty-salon/tier5-src/himi-branded-lite-agenda/index.ts +7 -2
  21. package/templates/beauty-salon/tier5-src/himi-branded-lite-home/index.ts +178 -12
  22. package/templates/branded-lite/dev/index.ts +192 -0
  23. package/templates/branded-lite/l10n/en.json +1 -1
  24. package/templates/branded-lite/tier5-src/_shared/branded-load-state.ts +5 -2
  25. package/templates/branded-lite/tier5-src/_shared/himi-account.ts +31 -0
  26. package/templates/branded-lite/tier5-src/_shared/himi-booking-saved.ts +88 -0
  27. package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +50 -3
  28. package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +70 -3
  29. package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +40 -8
  30. package/templates/branded-lite/tier5-src/himi-branded-lite-agenda/index.ts +7 -2
  31. package/templates/branded-lite/tier5-src/himi-branded-lite-galleries/index.ts +104 -12
  32. package/templates/branded-lite/tier5-src/himi-branded-lite-home/index.ts +178 -12
  33. package/templates/community-club/tier5-src/_shared/branded-load-state.ts +5 -2
  34. package/templates/community-club/tier5-src/_shared/himi-account.ts +31 -0
  35. package/templates/community-club/tier5-src/himi-branded-lite-home/index.ts +178 -12
  36. package/templates/events-meetups/tier5-src/_shared/branded-load-state.ts +5 -2
  37. package/templates/events-meetups/tier5-src/_shared/himi-account.ts +31 -0
  38. package/templates/events-meetups/tier5-src/himi-branded-lite-home/index.ts +178 -12
  39. package/templates/gym-fitness/tier5-src/_shared/branded-load-state.ts +5 -2
  40. package/templates/gym-fitness/tier5-src/_shared/himi-account.ts +31 -0
  41. package/templates/gym-fitness/tier5-src/_shared/himi-booking-saved.ts +88 -0
  42. package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +50 -3
  43. package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +70 -3
  44. package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +40 -8
  45. package/templates/gym-fitness/tier5-src/himi-branded-lite-agenda/index.ts +7 -2
  46. package/templates/gym-fitness/tier5-src/himi-branded-lite-home/index.ts +178 -12
  47. package/templates/nonprofit-cause/tier5-src/_shared/branded-load-state.ts +5 -2
  48. package/templates/nonprofit-cause/tier5-src/_shared/himi-account.ts +31 -0
  49. package/templates/nonprofit-cause/tier5-src/himi-branded-lite-home/index.ts +178 -12
  50. package/templates/podcast-creator/tier5-src/_shared/branded-load-state.ts +5 -2
  51. package/templates/podcast-creator/tier5-src/_shared/himi-account.ts +31 -0
  52. package/templates/podcast-creator/tier5-src/himi-branded-lite-home/index.ts +178 -12
  53. package/templates/portfolio-creative/tier5-src/_shared/branded-load-state.ts +5 -2
  54. package/templates/portfolio-creative/tier5-src/_shared/himi-account.ts +31 -0
  55. package/templates/portfolio-creative/tier5-src/himi-branded-lite-home/index.ts +178 -12
  56. package/templates/restaurant/tier5-src/_shared/branded-load-state.ts +5 -2
  57. package/templates/restaurant/tier5-src/_shared/himi-account.ts +31 -0
  58. package/templates/restaurant/tier5-src/himi-branded-lite-home/index.ts +178 -12
  59. package/templates/retail-store/tier5-src/_shared/branded-load-state.ts +5 -2
  60. package/templates/retail-store/tier5-src/_shared/himi-account.ts +31 -0
  61. package/templates/retail-store/tier5-src/himi-branded-lite-home/index.ts +178 -12
  62. package/templates/salon-spa/README.md +53 -0
  63. package/templates/salon-spa/config.ts +272 -0
  64. package/templates/salon-spa/dev/index.ts +19893 -0
  65. package/templates/salon-spa/himalaya.content.json +49 -0
  66. package/templates/salon-spa/himalaya.template.json +14 -0
  67. package/templates/salon-spa/icon.png +0 -0
  68. package/templates/salon-spa/platforms.json +1 -0
  69. package/templates/salon-spa/tier5-src/_shared/app-locale.ts +61 -0
  70. package/templates/salon-spa/tier5-src/_shared/booking-location.ts +147 -0
  71. package/templates/salon-spa/tier5-src/_shared/booking-session.ts +222 -0
  72. package/templates/salon-spa/tier5-src/_shared/branded-lite-hosted.ts +278 -0
  73. package/templates/salon-spa/tier5-src/_shared/branded-load-state.ts +109 -0
  74. package/templates/salon-spa/tier5-src/_shared/business-chat-copy.ts +40 -0
  75. package/templates/salon-spa/tier5-src/_shared/business-chat-history.ts +48 -0
  76. package/templates/salon-spa/tier5-src/_shared/business-chat-message-model.ts +177 -0
  77. package/templates/salon-spa/tier5-src/_shared/business-chat-model.ts +56 -0
  78. package/templates/salon-spa/tier5-src/_shared/business-chat-presenter.ts +581 -0
  79. package/templates/salon-spa/tier5-src/_shared/business-chat-transport.ts +148 -0
  80. package/templates/salon-spa/tier5-src/_shared/collection-contract.ts +230 -0
  81. package/templates/salon-spa/tier5-src/_shared/collection-query.ts +193 -0
  82. package/templates/salon-spa/tier5-src/_shared/collection-service.ts +400 -0
  83. package/templates/salon-spa/tier5-src/_shared/detail-presence.ts +51 -0
  84. package/templates/salon-spa/tier5-src/_shared/empty-flags.ts +33 -0
  85. package/templates/salon-spa/tier5-src/_shared/engine-intl.ts +508 -0
  86. package/templates/salon-spa/tier5-src/_shared/himi-account.ts +164 -0
  87. package/templates/salon-spa/tier5-src/_shared/himi-booking-saved.ts +88 -0
  88. package/templates/salon-spa/tier5-src/_shared/himi-bookings.ts +318 -0
  89. package/templates/salon-spa/tier5-src/_shared/himi-copy.ts +89 -0
  90. package/templates/salon-spa/tier5-src/_shared/himi-store.ts +7 -0
  91. package/templates/salon-spa/tier5-src/_shared/himi-text.ts +24 -0
  92. package/templates/salon-spa/tier5-src/_shared/host-events.ts +66 -0
  93. package/templates/salon-spa/tier5-src/_shared/hosted-checkout.ts +70 -0
  94. package/templates/salon-spa/tier5-src/_shared/iap-attendance-form.ts +106 -0
  95. package/templates/salon-spa/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
  96. package/templates/salon-spa/tier5-src/_shared/iap-attendance.ts +38 -0
  97. package/templates/salon-spa/tier5-src/_shared/iap-worker.ts +125 -0
  98. package/templates/salon-spa/tier5-src/_shared/local-preferences.ts +38 -0
  99. package/templates/salon-spa/tier5-src/_shared/member-access.ts +52 -0
  100. package/templates/salon-spa/tier5-src/_shared/member-account-routes.ts +52 -0
  101. package/templates/salon-spa/tier5-src/_shared/member-bookings.ts +94 -0
  102. package/templates/salon-spa/tier5-src/_shared/offset-page.ts +10 -0
  103. package/templates/salon-spa/tier5-src/_shared/online-actions.ts +76 -0
  104. package/templates/salon-spa/tier5-src/_shared/owner-load-error.ts +348 -0
  105. package/templates/salon-spa/tier5-src/_shared/payment-setup.ts +6 -0
  106. package/templates/salon-spa/tier5-src/_shared/rich-body.ts +78 -0
  107. package/templates/salon-spa/tier5-src/_shared/rich-content-link.ts +34 -0
  108. package/templates/salon-spa/tier5-src/_shared/weekly-goal.ts +107 -0
  109. package/templates/salon-spa/tier5-src/_shared/wix-service-price.ts +146 -0
  110. package/templates/salon-spa/tier5-src/business-chat/index.ts +669 -0
  111. package/templates/salon-spa/tier5-src/himi-booking-account/index.ts +241 -0
  112. package/templates/salon-spa/tier5-src/himi-booking-bookings/index.ts +466 -0
  113. package/templates/salon-spa/tier5-src/himi-booking-saved/index.ts +103 -0
  114. package/templates/salon-spa/tier5-src/himi-booking-service/index.ts +1170 -0
  115. package/templates/salon-spa/tier5-src/himi-booking-services/index.ts +791 -0
  116. package/templates/salon-spa/tier5-src/himi-booking-time/index.ts +1712 -0
  117. package/templates/salon-spa/tier5-src/himi-branded-lite-agenda/index.ts +950 -0
  118. package/templates/salon-spa/tier5-src/himi-branded-lite-galleries/index.ts +282 -0
  119. package/templates/salon-spa/tier5-src/himi-salon-home/index.ts +544 -0
  120. package/templates/salon-spa/tier5-src/himi-store-account/index.ts +925 -0
  121. package/templates/salon-spa/tokens.json +341 -0
  122. package/templates/yoga-studio/dev/index.ts +192 -0
  123. package/templates/yoga-studio/tier5-src/_shared/branded-load-state.ts +5 -2
  124. package/templates/yoga-studio/tier5-src/_shared/himi-account.ts +31 -0
  125. package/templates/yoga-studio/tier5-src/_shared/himi-booking-saved.ts +88 -0
  126. package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +50 -3
  127. package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +70 -3
  128. package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +40 -8
  129. package/templates/yoga-studio/tier5-src/himi-branded-lite-agenda/index.ts +7 -2
  130. package/templates/yoga-studio/tier5-src/himi-branded-lite-home/index.ts +178 -12
@@ -0,0 +1,341 @@
1
+ {
2
+ "colors": {
3
+ "surfacePrimary": {
4
+ "light": "#FAF6EF",
5
+ "dark": "#141712",
6
+ "highContrast": "#FFFFFF"
7
+ },
8
+ "surfaceSecondary": {
9
+ "light": "#F2ECE2",
10
+ "dark": "#1B1F19",
11
+ "highContrast": "#F2F2F2"
12
+ },
13
+ "surfaceElevated": {
14
+ "light": "#FFFFFF",
15
+ "dark": "#222720",
16
+ "highContrast": "#FFFFFF"
17
+ },
18
+ "surfaceSubtle": {
19
+ "light": "#F6F1E8",
20
+ "dark": "#181B16",
21
+ "highContrast": "#FFFFFF"
22
+ },
23
+ "surfaceTertiary": {
24
+ "light": "#E9E1D4",
25
+ "dark": "#2A3027",
26
+ "highContrast": "#E6E6E6"
27
+ },
28
+ "textPrimary": {
29
+ "light": "#252A22",
30
+ "dark": "#F2EFE7",
31
+ "highContrast": "#000000"
32
+ },
33
+ "textSecondary": {
34
+ "light": "#585E53",
35
+ "dark": "#C2BDB1",
36
+ "highContrast": "#1F1F1F"
37
+ },
38
+ "textTertiary": {
39
+ "light": "#767A6E",
40
+ "dark": "#97938A",
41
+ "highContrast": "#333333"
42
+ },
43
+ "textOnAccent": {
44
+ "light": "#FFFFFF",
45
+ "dark": "#10130E",
46
+ "highContrast": "#FFFFFF"
47
+ },
48
+ "accentPrimary": {
49
+ "light": "#46594A",
50
+ "dark": "#A7C0A9",
51
+ "highContrast": "#1E2D21"
52
+ },
53
+ "accentSecondary": {
54
+ "light": "#A9834C",
55
+ "dark": "#D4B47F",
56
+ "highContrast": "#5A4220"
57
+ },
58
+ "accentSurface": {
59
+ "light": "#F3E0D8",
60
+ "dark": "#2C3830",
61
+ "highContrast": "#F7E9E3"
62
+ },
63
+ "accentText": {
64
+ "light": "#3E5042",
65
+ "dark": "#B4CCB6",
66
+ "highContrast": "#1E2D21"
67
+ },
68
+ "success": {
69
+ "light": "#2F6A47",
70
+ "dark": "#8CC9A2",
71
+ "highContrast": "#0F4526"
72
+ },
73
+ "successSurface": {
74
+ "light": "#E7F0E9",
75
+ "dark": "#15211A",
76
+ "highContrast": "#E7F0E9"
77
+ },
78
+ "warning": {
79
+ "light": "#8A6118",
80
+ "dark": "#D6B061",
81
+ "highContrast": "#5C3E07"
82
+ },
83
+ "warningSurface": {
84
+ "light": "#F6EEDC",
85
+ "dark": "#231D10",
86
+ "highContrast": "#F6EEDC"
87
+ },
88
+ "danger": {
89
+ "light": "#A63D33",
90
+ "dark": "#E0928A",
91
+ "highContrast": "#7A1F17"
92
+ },
93
+ "dangerSurface": {
94
+ "light": "#F7E8E5",
95
+ "dark": "#261513",
96
+ "highContrast": "#F7E8E5"
97
+ },
98
+ "border": {
99
+ "light": "#E5DCCD",
100
+ "dark": "#30362D",
101
+ "highContrast": "#5C5C5C"
102
+ }
103
+ },
104
+ "spacing": {
105
+ "xs": 4,
106
+ "sm": 8,
107
+ "md": 12,
108
+ "lg": 16,
109
+ "xl": 24,
110
+ "xxl": 32
111
+ },
112
+ "typography": {
113
+ "display": {
114
+ "size": 38,
115
+ "weight": 400,
116
+ "line": 1.12,
117
+ "letterSpacing": -0.4,
118
+ "family": "Georgia"
119
+ },
120
+ "heroTitle": {
121
+ "size": 34,
122
+ "weight": 400,
123
+ "line": 1.12,
124
+ "letterSpacing": -0.3,
125
+ "family": "Georgia"
126
+ },
127
+ "pageTitle": {
128
+ "size": 28,
129
+ "weight": 400,
130
+ "line": 1.2,
131
+ "letterSpacing": -0.2,
132
+ "family": "Georgia"
133
+ },
134
+ "title1": {
135
+ "size": 30,
136
+ "weight": 400,
137
+ "line": 1.2,
138
+ "letterSpacing": -0.3,
139
+ "family": "Georgia"
140
+ },
141
+ "title2": {
142
+ "size": 24,
143
+ "weight": 400,
144
+ "line": 1.25,
145
+ "letterSpacing": -0.2,
146
+ "family": "Georgia"
147
+ },
148
+ "title3": {
149
+ "size": 18,
150
+ "weight": 600,
151
+ "line": 1.3,
152
+ "letterSpacing": 0,
153
+ "family": "Wix Madefor Text"
154
+ },
155
+ "headline": {
156
+ "size": 16,
157
+ "weight": 600,
158
+ "line": 1.35,
159
+ "letterSpacing": 0,
160
+ "family": "Wix Madefor Text"
161
+ },
162
+ "body": {
163
+ "size": 16,
164
+ "weight": 400,
165
+ "line": 1.5,
166
+ "letterSpacing": 0,
167
+ "family": "Wix Madefor Text"
168
+ },
169
+ "bodyEmphasis": {
170
+ "size": 16,
171
+ "weight": 600,
172
+ "line": 1.4,
173
+ "letterSpacing": 0,
174
+ "family": "Wix Madefor Text"
175
+ },
176
+ "callout": {
177
+ "size": 15,
178
+ "weight": 500,
179
+ "line": 1.4,
180
+ "letterSpacing": 0,
181
+ "family": "Wix Madefor Text"
182
+ },
183
+ "label": {
184
+ "size": 14,
185
+ "weight": 600,
186
+ "line": 1.3,
187
+ "letterSpacing": 0,
188
+ "family": "Wix Madefor Text"
189
+ },
190
+ "footnote": {
191
+ "size": 14,
192
+ "weight": 400,
193
+ "line": 1.45,
194
+ "letterSpacing": 0,
195
+ "family": "Wix Madefor Text"
196
+ },
197
+ "caption": {
198
+ "size": 12,
199
+ "weight": 500,
200
+ "line": 1.4,
201
+ "letterSpacing": 0.2,
202
+ "family": "Wix Madefor Text"
203
+ },
204
+ "greetingScript": {
205
+ "size": 22,
206
+ "weight": 400,
207
+ "line": 1.2,
208
+ "letterSpacing": 0,
209
+ "family": "Georgia",
210
+ "style": "italic"
211
+ }
212
+ },
213
+ "radius": {
214
+ "sm": 8,
215
+ "md": 14,
216
+ "lg": 20,
217
+ "pill": 999
218
+ },
219
+ "kit": {
220
+ "material": "flat",
221
+ "variant": "default",
222
+ "density": "spacious",
223
+ "motion": "smooth",
224
+ "motionDefaults": "subtle"
225
+ },
226
+ "shadows": {
227
+ "sm": {
228
+ "color": "#2B2418",
229
+ "opacity": 0.06,
230
+ "radius": 8,
231
+ "x": 0,
232
+ "y": 2
233
+ },
234
+ "md": {
235
+ "color": "#2B2418",
236
+ "opacity": 0.09,
237
+ "radius": 18,
238
+ "x": 0,
239
+ "y": 6
240
+ },
241
+ "lg": {
242
+ "color": "#2B2418",
243
+ "opacity": 0.12,
244
+ "radius": 30,
245
+ "x": 0,
246
+ "y": 12
247
+ }
248
+ },
249
+ "gradients": {
250
+ "brand": {
251
+ "colors": [
252
+ "accentPrimary",
253
+ "accentText"
254
+ ],
255
+ "angle": 135
256
+ },
257
+ "subtle": {
258
+ "colors": [
259
+ "surfaceSecondary",
260
+ "surfacePrimary"
261
+ ],
262
+ "angle": 180
263
+ },
264
+ "hero": {
265
+ "colors": [
266
+ "accentSurface",
267
+ "surfacePrimary"
268
+ ],
269
+ "angle": 160
270
+ }
271
+ },
272
+ "materials": {
273
+ "flat": {
274
+ "style": "flat",
275
+ "tint": "surfaceSecondary",
276
+ "opacity": 1
277
+ }
278
+ },
279
+ "motions": {
280
+ "smooth": {
281
+ "duration": 260,
282
+ "easing": "easeInOut"
283
+ },
284
+ "quick": {
285
+ "duration": 140,
286
+ "easing": "easeOut"
287
+ },
288
+ "appearSoft": {
289
+ "duration": 480,
290
+ "easing": "easeOut"
291
+ }
292
+ },
293
+ "tabBar": {
294
+ "background": {
295
+ "color": "surfaceElevated"
296
+ },
297
+ "shape": {
298
+ "kind": "full"
299
+ },
300
+ "border": {
301
+ "topHairline": true,
302
+ "color": "border"
303
+ },
304
+ "selectedIndicator": {
305
+ "kind": "colorOnly",
306
+ "color": "accentPrimary"
307
+ },
308
+ "activeTint": "accentPrimary",
309
+ "inactiveTint": "textTertiary",
310
+ "labels": {
311
+ "show": true,
312
+ "typography": "caption"
313
+ },
314
+ "iconSize": 22,
315
+ "motion": "smooth"
316
+ },
317
+ "drawer": {
318
+ "background": {
319
+ "color": "surfaceSecondary"
320
+ },
321
+ "width": 300,
322
+ "activeTint": "accentPrimary",
323
+ "inactiveTint": "textSecondary",
324
+ "selectedIndicator": {
325
+ "kind": "pill",
326
+ "color": "accentPrimary"
327
+ },
328
+ "labels": {
329
+ "show": true,
330
+ "typography": "body"
331
+ },
332
+ "iconSize": 22,
333
+ "edgeInsets": 12,
334
+ "motion": "smooth"
335
+ },
336
+ "contentMaxWidth": {
337
+ "base": 480,
338
+ "medium": 600,
339
+ "expanded": 760
340
+ }
341
+ }
@@ -2270,6 +2270,198 @@ const SCREENS = runtimeSetting({
2270
2270
  ]
2271
2271
  }
2272
2272
  }
2273
+ },
2274
+ {
2275
+ "id": "himi_branded_home.member_programs_section",
2276
+ "body": {
2277
+ "package": "himalaya",
2278
+ "type": "VStack",
2279
+ "props": {
2280
+ "spacing": 10,
2281
+ "alignment": "leading",
2282
+ "children": [
2283
+ {
2284
+ "id": "",
2285
+ "body": {
2286
+ "package": "himalaya",
2287
+ "type": "VStack",
2288
+ "props": {
2289
+ "spacing": 3,
2290
+ "alignment": "leading",
2291
+ "children": [
2292
+ {
2293
+ "id": "",
2294
+ "body": {
2295
+ "package": "himalaya",
2296
+ "type": "Text",
2297
+ "props": {
2298
+ "text": "Your programs",
2299
+ "style": "title3"
2300
+ }
2301
+ }
2302
+ }
2303
+ ]
2304
+ }
2305
+ }
2306
+ },
2307
+ {
2308
+ "id": "himi_branded_home.member_programs",
2309
+ "body": {
2310
+ "package": "himalaya",
2311
+ "type": "Carousel",
2312
+ "props": {
2313
+ "itemsPath": "$service:himiBrandedHome.memberPrograms",
2314
+ "items": [
2315
+ {
2316
+ "id": "",
2317
+ "body": {
2318
+ "package": "himalaya",
2319
+ "type": "VStack",
2320
+ "props": {
2321
+ "spacing": 8,
2322
+ "alignment": "leading",
2323
+ "children": [
2324
+ {
2325
+ "id": "",
2326
+ "body": {
2327
+ "package": "himalaya",
2328
+ "type": "Image",
2329
+ "props": {
2330
+ "url": "$item.image",
2331
+ "fillWidth": true,
2332
+ "height": 108,
2333
+ "contentMode": "fill",
2334
+ "contentDescription": "$item.name"
2335
+ }
2336
+ },
2337
+ "modifiers": {
2338
+ "cornerRadius": 8,
2339
+ "fillMaxWidth": true,
2340
+ "hiddenPath": "$item.noImage"
2341
+ }
2342
+ },
2343
+ {
2344
+ "id": "himi_branded_home.member_program.initial",
2345
+ "body": {
2346
+ "package": "himalaya",
2347
+ "type": "ZStack",
2348
+ "props": {
2349
+ "alignment": "center",
2350
+ "children": [
2351
+ {
2352
+ "id": "",
2353
+ "body": {
2354
+ "package": "himalaya",
2355
+ "type": "Icon",
2356
+ "props": {
2357
+ "name": "photo",
2358
+ "size": 28,
2359
+ "tint": "accentPrimary"
2360
+ }
2361
+ },
2362
+ "modifiers": {
2363
+ "accessibilityRole": "decorative"
2364
+ }
2365
+ }
2366
+ ]
2367
+ }
2368
+ },
2369
+ "modifiers": {
2370
+ "width": 108,
2371
+ "height": 108,
2372
+ "background": {
2373
+ "token": "accentSurface"
2374
+ },
2375
+ "cornerRadius": 16,
2376
+ "hiddenPath": "$item.hasImage"
2377
+ }
2378
+ },
2379
+ {
2380
+ "id": "",
2381
+ "body": {
2382
+ "package": "himalaya",
2383
+ "type": "Text",
2384
+ "props": {
2385
+ "text": "$item.name",
2386
+ "style": "bodyEmphasis",
2387
+ "maxLines": 2
2388
+ }
2389
+ }
2390
+ },
2391
+ {
2392
+ "id": "",
2393
+ "body": {
2394
+ "package": "himalaya",
2395
+ "type": "Text",
2396
+ "props": {
2397
+ "text": "$item.stateLabel",
2398
+ "style": "footnote",
2399
+ "color": "textSecondary",
2400
+ "maxLines": 1
2401
+ }
2402
+ }
2403
+ },
2404
+ {
2405
+ "id": "",
2406
+ "body": {
2407
+ "package": "himalaya",
2408
+ "type": "ProgressBar",
2409
+ "props": {
2410
+ "progress": 0,
2411
+ "progressPath": "$item.progressFraction",
2412
+ "tint": "accentPrimary",
2413
+ "trackColor": "surfaceTertiary"
2414
+ }
2415
+ },
2416
+ "modifiers": {
2417
+ "accessibilityLabel": "$item.name",
2418
+ "accessibilityValue": "$item.stateLabel",
2419
+ "hiddenPath": "$item.hideProgress"
2420
+ }
2421
+ }
2422
+ ]
2423
+ }
2424
+ },
2425
+ "modifiers": {
2426
+ "background": {
2427
+ "token": "surfaceElevated"
2428
+ },
2429
+ "border": {
2430
+ "width": 1,
2431
+ "color": {
2432
+ "token": "border"
2433
+ }
2434
+ },
2435
+ "cornerRadius": 8,
2436
+ "padding": {
2437
+ "leading": 10,
2438
+ "trailing": 10,
2439
+ "top": 10,
2440
+ "bottom": 10
2441
+ },
2442
+ "width": 200,
2443
+ "onTap": {
2444
+ "actionId": "himi.open",
2445
+ "params": {
2446
+ "screenId": "himi_program",
2447
+ "id": "$item.id"
2448
+ }
2449
+ },
2450
+ "pressFeedback": "scale",
2451
+ "haptic": "light",
2452
+ "accessibilityLabel": "$item.name"
2453
+ }
2454
+ }
2455
+ ]
2456
+ }
2457
+ }
2458
+ }
2459
+ ]
2460
+ }
2461
+ },
2462
+ "modifiers": {
2463
+ "hiddenPath": "$service:himiBrandedHome.noMemberPrograms"
2464
+ }
2273
2465
  }
2274
2466
  ]
2275
2467
  }
@@ -35,11 +35,14 @@ export interface LoadFlags {
35
35
  notMock: boolean;
36
36
  notMockEmpty: boolean;
37
37
  notMockUnavailable: boolean;
38
+ /** hiddenWhen gate for the empty state: false ONLY when the site answered with no rows
39
+ * (`notMockEmpty` is true then — it gates the sample banner, not the empty state). */
40
+ hideEmpty: boolean;
38
41
  }
39
42
 
40
43
  export const LOADING: LoadFlags = {
41
44
  status: "loading", error: "", signInRequired: false, notErrored: true, notLoading: false, busy: true, noSignIn: true,
42
- isMock: false, notMock: true, notMockEmpty: true, notMockUnavailable: true,
45
+ isMock: false, notMock: true, notMockEmpty: true, notMockUnavailable: true, hideEmpty: true,
43
46
  };
44
47
 
45
48
  const READY: LoadFlags = { ...LOADING, status: "ready", notLoading: true, busy: false };
@@ -78,7 +81,7 @@ type Rows<K extends string, T> = { [P in K]: T[] } & { emptyText: string } & Loa
78
81
  export function loaded<K extends string, T>(key: K, rows: T[], copy: LoadCopy<T>): Rows<K, T> {
79
82
  if (rows.length) return { ...READY, [key]: rows, emptyText: "" } as Rows<K, T>;
80
83
  if (samplesRequested()) return sampleRows(key, copy, "empty");
81
- return { ...READY, [key]: [], emptyText: copyParam(`${copy.prefix}.emptyText`, copy.empty) } as Rows<K, T>;
84
+ return { ...READY, [key]: [], emptyText: copyParam(`${copy.prefix}.emptyText`, copy.empty), hideEmpty: false } as Rows<K, T>;
82
85
  }
83
86
 
84
87
  /** A query threw. Never rows the customer did not create. */
@@ -1,6 +1,8 @@
1
1
  import { dispatch } from "@himalaya/dispatch";
2
2
  // Relative for node resolution (see himi-store.ts note); rewritten off-repo.
3
3
  import { displayName, getMyData, initials, type WixMyData } from "@himalaya/wix-users";
4
+ import { getMyMember } from "@himalaya/wix-members";
5
+ import { wixMediaUrl } from "@himalaya/wix-media";
4
6
  import { formatDateMedium, formatWeekdayDateTime } from "../_shared/engine-intl.js";
5
7
 
6
8
  export interface AccountProfile {
@@ -82,6 +84,31 @@ function profileFromData(data: WixMyData, fallbackEmail = ""): AccountProfile {
82
84
  };
83
85
  }
84
86
 
87
+ /** The signed-in site member's name and photo from their member record, or undefined when it
88
+ * cannot be read or names nobody (the caller then shows the email). */
89
+ async function siteMemberProfile(email: string): Promise<AccountProfile | undefined> {
90
+ try {
91
+ const member = (await getMyMember({ fieldsets: ["FULL"] }))?.member;
92
+ const name = [member?.contact?.firstName, member?.contact?.lastName].map((part) => (part ?? "").trim()).filter(Boolean).join(" ")
93
+ || (member?.profile?.nickname ?? "").trim();
94
+ if (!name) return undefined;
95
+ const image = wixMediaUrl(member?.profile?.photo?.url) || wixMediaUrl(member?.profile?.photo?.id) || "";
96
+ return {
97
+ isMember: true,
98
+ identityLine: "Signed in",
99
+ detailLine: email || name,
100
+ memberName: name,
101
+ memberEmail: email || member?.loginEmail || "",
102
+ memberImage: image,
103
+ memberInitials: initialsFromName(name) || "M",
104
+ hasMemberImage: !!image,
105
+ noMemberImage: !image,
106
+ };
107
+ } catch {
108
+ return undefined;
109
+ }
110
+ }
111
+
85
112
  export function guestProfile(detailLine: string): AccountProfile {
86
113
  return {
87
114
  isMember: false,
@@ -118,6 +145,10 @@ export async function loadMemberProfile(guestDetailLine: string): Promise<Accoun
118
145
  const data = await getMyData();
119
146
  return profileFromData(data, storedEmail);
120
147
  } catch {
148
+ // The account profile is an owner endpoint: the web host refuses it, and a site member need
149
+ // not have one. The member's own record (the Members API) still names them.
150
+ const member = await siteMemberProfile(storedEmail);
151
+ if (member) return member;
121
152
  return {
122
153
  isMember: true,
123
154
  identityLine: "Signed in",