@wix/himalaya-cli 0.1035.0 → 0.1037.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 (276) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +7 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/display.d.ts +13 -1
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/portfolio/src/index.d.ts +46 -9
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +28 -6
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-portfolio.mjs +14 -2
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores-collections.mjs +1 -1
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-stores.mjs +7 -1
  8. package/dist/cli.mjs +482 -113
  9. package/dist/preview-assets.generated.bin +0 -0
  10. package/fixtures/wix-canned.json +51 -2
  11. package/guides/sdk-reference.json +32 -14
  12. package/guides/wix-business-context.md +13 -1
  13. package/guides/wix-site-to-himi-app.md +10 -1
  14. package/package.json +2 -2
  15. package/templates/beauty-salon/dev/index.ts +72 -175
  16. package/templates/beauty-salon/tier5-src/_shared/collection-contract.ts +16 -9
  17. package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +19 -5
  18. package/templates/beauty-salon/tier5-src/_shared/engine-intl.ts +51 -0
  19. package/templates/beauty-salon/tier5-src/_shared/himi-restaurants.ts +4 -4
  20. package/templates/beauty-salon/tier5-src/_shared/owner-load-error.ts +49 -0
  21. package/templates/beauty-salon/tier5-src/_shared/wix-service-price.ts +1 -1
  22. package/templates/beauty-salon/tier5-src/himi-booking-bookings/index.ts +14 -8
  23. package/templates/beauty-salon/tier5-src/himi-branded-lite-home/index.ts +12 -1
  24. package/templates/beauty-salon/tier5-src/himi-branded-lite-info/index.ts +5 -2
  25. package/templates/beauty-salon/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  26. package/templates/beauty-salon/tier5-src/wix-spaces-collections/index.ts +1 -1
  27. package/templates/beauty-salon/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  28. package/templates/beauty-salon-owner/dev/index.ts +84 -599
  29. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +22 -6
  30. package/templates/beauty-salon-owner/tier5-src/_shared/collection-contract.ts +16 -9
  31. package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +19 -5
  32. package/templates/beauty-salon-owner/tier5-src/_shared/engine-intl.ts +51 -0
  33. package/templates/beauty-salon-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  34. package/templates/beauty-salon-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  35. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  36. package/templates/branded-lite/dev/index.ts +178 -264
  37. package/templates/branded-lite/tier5-src/_shared/collection-contract.ts +16 -9
  38. package/templates/branded-lite/tier5-src/_shared/collection-service.ts +19 -5
  39. package/templates/branded-lite/tier5-src/_shared/engine-intl.ts +51 -0
  40. package/templates/branded-lite/tier5-src/_shared/himi-restaurants.ts +4 -4
  41. package/templates/branded-lite/tier5-src/_shared/owner-load-error.ts +49 -0
  42. package/templates/branded-lite/tier5-src/_shared/wix-service-price.ts +1 -1
  43. package/templates/branded-lite/tier5-src/himi-booking-bookings/index.ts +14 -8
  44. package/templates/branded-lite/tier5-src/himi-branded-lite-cms/index.ts +5 -5
  45. package/templates/branded-lite/tier5-src/himi-branded-lite-coupons/index.ts +33 -7
  46. package/templates/branded-lite/tier5-src/himi-branded-lite-donations/index.ts +3 -3
  47. package/templates/branded-lite/tier5-src/himi-branded-lite-forms/index.ts +11 -10
  48. package/templates/branded-lite/tier5-src/himi-branded-lite-giftcards/index.ts +3 -3
  49. package/templates/branded-lite/tier5-src/himi-branded-lite-home/index.ts +12 -1
  50. package/templates/branded-lite/tier5-src/himi-branded-lite-info/index.ts +5 -2
  51. package/templates/branded-lite/tier5-src/himi-branded-lite-invoices/index.ts +3 -3
  52. package/templates/branded-lite/tier5-src/himi-branded-lite-loyalty/index.ts +1 -1
  53. package/templates/branded-lite/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  54. package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio/index.ts +2 -2
  55. package/templates/branded-lite/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -3
  56. package/templates/branded-lite/tier5-src/himi-branded-lite-program/index.ts +1 -1
  57. package/templates/branded-lite/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
  58. package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +1 -1
  59. package/templates/branded-lite/tier5-src/himi-events-list/index.ts +20 -4
  60. package/templates/branded-lite/tier5-src/himi-events-my-events/index.ts +2 -2
  61. package/templates/branded-lite/tier5-src/wix-spaces-collections/index.ts +1 -1
  62. package/templates/branded-lite/tier5-src/wix-spaces-forum/index.ts +7 -1
  63. package/templates/branded-lite/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  64. package/templates/community-club/dev/index.ts +62 -81
  65. package/templates/community-club/tier5-src/_shared/collection-contract.ts +16 -9
  66. package/templates/community-club/tier5-src/_shared/collection-service.ts +19 -5
  67. package/templates/community-club/tier5-src/_shared/engine-intl.ts +51 -0
  68. package/templates/community-club/tier5-src/_shared/himi-restaurants.ts +4 -4
  69. package/templates/community-club/tier5-src/_shared/owner-load-error.ts +49 -0
  70. package/templates/community-club/tier5-src/_shared/wix-service-price.ts +1 -1
  71. package/templates/community-club/tier5-src/himi-branded-lite-cms/index.ts +5 -5
  72. package/templates/community-club/tier5-src/himi-branded-lite-home/index.ts +12 -1
  73. package/templates/community-club/tier5-src/himi-branded-lite-info/index.ts +5 -2
  74. package/templates/community-club/tier5-src/himi-events-detail/index.ts +1 -1
  75. package/templates/community-club/tier5-src/himi-events-list/index.ts +20 -4
  76. package/templates/community-club/tier5-src/himi-events-my-events/index.ts +2 -2
  77. package/templates/community-club/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  78. package/templates/community-club-owner/dev/index.ts +84 -599
  79. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +22 -6
  80. package/templates/community-club-owner/tier5-src/_shared/collection-contract.ts +16 -9
  81. package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +19 -5
  82. package/templates/community-club-owner/tier5-src/_shared/engine-intl.ts +51 -0
  83. package/templates/community-club-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  84. package/templates/community-club-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  85. package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  86. package/templates/events-meetups/dev/index.ts +60 -79
  87. package/templates/events-meetups/tier5-src/_shared/collection-contract.ts +16 -9
  88. package/templates/events-meetups/tier5-src/_shared/collection-service.ts +19 -5
  89. package/templates/events-meetups/tier5-src/_shared/engine-intl.ts +51 -0
  90. package/templates/events-meetups/tier5-src/_shared/himi-restaurants.ts +4 -4
  91. package/templates/events-meetups/tier5-src/_shared/owner-load-error.ts +49 -0
  92. package/templates/events-meetups/tier5-src/_shared/wix-service-price.ts +1 -1
  93. package/templates/events-meetups/tier5-src/himi-branded-lite-home/index.ts +12 -1
  94. package/templates/events-meetups/tier5-src/himi-branded-lite-info/index.ts +5 -2
  95. package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +1 -1
  96. package/templates/events-meetups/tier5-src/himi-events-list/index.ts +20 -4
  97. package/templates/events-meetups/tier5-src/himi-events-my-events/index.ts +2 -2
  98. package/templates/events-meetups/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  99. package/templates/events-meetups-owner/dev/index.ts +84 -543
  100. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +22 -6
  101. package/templates/events-meetups-owner/tier5-src/_shared/collection-contract.ts +16 -9
  102. package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +19 -5
  103. package/templates/events-meetups-owner/tier5-src/_shared/engine-intl.ts +51 -0
  104. package/templates/events-meetups-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  105. package/templates/events-meetups-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  106. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  107. package/templates/gym-fitness/dev/index.ts +73 -204
  108. package/templates/gym-fitness/tier5-src/_shared/collection-contract.ts +16 -9
  109. package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +19 -5
  110. package/templates/gym-fitness/tier5-src/_shared/engine-intl.ts +51 -0
  111. package/templates/gym-fitness/tier5-src/_shared/himi-restaurants.ts +4 -4
  112. package/templates/gym-fitness/tier5-src/_shared/owner-load-error.ts +49 -0
  113. package/templates/gym-fitness/tier5-src/_shared/wix-service-price.ts +1 -1
  114. package/templates/gym-fitness/tier5-src/himi-booking-bookings/index.ts +14 -8
  115. package/templates/gym-fitness/tier5-src/himi-branded-lite-home/index.ts +12 -1
  116. package/templates/gym-fitness/tier5-src/himi-branded-lite-info/index.ts +5 -2
  117. package/templates/gym-fitness/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  118. package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +1 -1
  119. package/templates/gym-fitness/tier5-src/himi-events-list/index.ts +20 -4
  120. package/templates/gym-fitness/tier5-src/himi-events-my-events/index.ts +2 -2
  121. package/templates/gym-fitness/tier5-src/wix-spaces-collections/index.ts +1 -1
  122. package/templates/gym-fitness/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  123. package/templates/gym-fitness-owner/dev/index.ts +84 -627
  124. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +22 -6
  125. package/templates/gym-fitness-owner/tier5-src/_shared/collection-contract.ts +16 -9
  126. package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +19 -5
  127. package/templates/gym-fitness-owner/tier5-src/_shared/engine-intl.ts +51 -0
  128. package/templates/gym-fitness-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  129. package/templates/gym-fitness-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  130. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  131. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  132. package/templates/himi-chat/tier5-src/_shared/owner-load-error.ts +49 -0
  133. package/templates/nonprofit-cause/dev/index.ts +71 -90
  134. package/templates/nonprofit-cause/tier5-src/_shared/collection-contract.ts +16 -9
  135. package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +19 -5
  136. package/templates/nonprofit-cause/tier5-src/_shared/engine-intl.ts +51 -0
  137. package/templates/nonprofit-cause/tier5-src/_shared/himi-restaurants.ts +4 -4
  138. package/templates/nonprofit-cause/tier5-src/_shared/owner-load-error.ts +49 -0
  139. package/templates/nonprofit-cause/tier5-src/_shared/wix-service-price.ts +1 -1
  140. package/templates/nonprofit-cause/tier5-src/himi-branded-lite-home/index.ts +12 -1
  141. package/templates/nonprofit-cause/tier5-src/himi-branded-lite-info/index.ts +5 -2
  142. package/templates/nonprofit-cause/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  143. package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +1 -1
  144. package/templates/nonprofit-cause/tier5-src/himi-events-list/index.ts +20 -4
  145. package/templates/nonprofit-cause/tier5-src/himi-events-my-events/index.ts +2 -2
  146. package/templates/nonprofit-cause/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  147. package/templates/nonprofit-cause-owner/dev/index.ts +84 -571
  148. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +22 -6
  149. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-contract.ts +16 -9
  150. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +19 -5
  151. package/templates/nonprofit-cause-owner/tier5-src/_shared/engine-intl.ts +51 -0
  152. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  153. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  154. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  155. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  156. package/templates/owner-lite/dev/index.ts +84 -627
  157. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +22 -6
  158. package/templates/owner-lite/tier5-src/_shared/collection-contract.ts +16 -9
  159. package/templates/owner-lite/tier5-src/_shared/collection-service.ts +19 -5
  160. package/templates/owner-lite/tier5-src/_shared/engine-intl.ts +51 -0
  161. package/templates/owner-lite/tier5-src/_shared/owner-load-error.ts +49 -0
  162. package/templates/owner-lite/tier5-src/_shared/owner-module-data.ts +2 -2
  163. package/templates/owner-lite/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  164. package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +1 -0
  165. package/templates/podcast-creator/dev/index.ts +71 -90
  166. package/templates/podcast-creator/tier5-src/_shared/collection-contract.ts +16 -9
  167. package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +19 -5
  168. package/templates/podcast-creator/tier5-src/_shared/engine-intl.ts +51 -0
  169. package/templates/podcast-creator/tier5-src/_shared/himi-restaurants.ts +4 -4
  170. package/templates/podcast-creator/tier5-src/_shared/owner-load-error.ts +49 -0
  171. package/templates/podcast-creator/tier5-src/_shared/wix-service-price.ts +1 -1
  172. package/templates/podcast-creator/tier5-src/himi-branded-lite-home/index.ts +12 -1
  173. package/templates/podcast-creator/tier5-src/himi-branded-lite-info/index.ts +5 -2
  174. package/templates/podcast-creator/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  175. package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +1 -1
  176. package/templates/podcast-creator/tier5-src/himi-events-list/index.ts +20 -4
  177. package/templates/podcast-creator/tier5-src/himi-events-my-events/index.ts +2 -2
  178. package/templates/podcast-creator/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  179. package/templates/podcast-creator-owner/dev/index.ts +84 -599
  180. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +22 -6
  181. package/templates/podcast-creator-owner/tier5-src/_shared/collection-contract.ts +16 -9
  182. package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +19 -5
  183. package/templates/podcast-creator-owner/tier5-src/_shared/engine-intl.ts +51 -0
  184. package/templates/podcast-creator-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  185. package/templates/podcast-creator-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  186. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  187. package/templates/portfolio-creative/dev/index.ts +62 -137
  188. package/templates/portfolio-creative/tier5-src/_shared/collection-contract.ts +16 -9
  189. package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +19 -5
  190. package/templates/portfolio-creative/tier5-src/_shared/engine-intl.ts +51 -0
  191. package/templates/portfolio-creative/tier5-src/_shared/himi-restaurants.ts +4 -4
  192. package/templates/portfolio-creative/tier5-src/_shared/owner-load-error.ts +49 -0
  193. package/templates/portfolio-creative/tier5-src/_shared/wix-service-price.ts +1 -1
  194. package/templates/portfolio-creative/tier5-src/himi-branded-lite-home/index.ts +12 -1
  195. package/templates/portfolio-creative/tier5-src/himi-branded-lite-info/index.ts +5 -2
  196. package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio/index.ts +2 -2
  197. package/templates/portfolio-creative/tier5-src/himi-branded-lite-portfolio-project/index.ts +3 -3
  198. package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +1 -1
  199. package/templates/portfolio-creative/tier5-src/himi-events-list/index.ts +20 -4
  200. package/templates/portfolio-creative/tier5-src/himi-events-my-events/index.ts +2 -2
  201. package/templates/portfolio-creative/tier5-src/wix-spaces-collections/index.ts +1 -1
  202. package/templates/portfolio-creative/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  203. package/templates/portfolio-creative-owner/dev/index.ts +84 -599
  204. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +22 -6
  205. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-contract.ts +16 -9
  206. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +19 -5
  207. package/templates/portfolio-creative-owner/tier5-src/_shared/engine-intl.ts +51 -0
  208. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  209. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  210. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  211. package/templates/restaurant/dev/index.ts +124 -101
  212. package/templates/restaurant/tier5-src/_shared/collection-contract.ts +16 -9
  213. package/templates/restaurant/tier5-src/_shared/collection-service.ts +19 -5
  214. package/templates/restaurant/tier5-src/_shared/engine-intl.ts +51 -0
  215. package/templates/restaurant/tier5-src/_shared/himi-restaurants.ts +4 -4
  216. package/templates/restaurant/tier5-src/_shared/owner-load-error.ts +49 -0
  217. package/templates/restaurant/tier5-src/_shared/wix-service-price.ts +1 -1
  218. package/templates/restaurant/tier5-src/himi-branded-lite-home/index.ts +12 -1
  219. package/templates/restaurant/tier5-src/himi-branded-lite-info/index.ts +5 -2
  220. package/templates/restaurant/tier5-src/himi-branded-lite-reserve/index.ts +5 -3
  221. package/templates/restaurant/tier5-src/himi-events-detail/index.ts +1 -1
  222. package/templates/restaurant/tier5-src/himi-events-list/index.ts +20 -4
  223. package/templates/restaurant/tier5-src/himi-events-my-events/index.ts +2 -2
  224. package/templates/restaurant/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  225. package/templates/restaurant-owner/dev/index.ts +84 -627
  226. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +22 -6
  227. package/templates/restaurant-owner/tier5-src/_shared/collection-contract.ts +16 -9
  228. package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +19 -5
  229. package/templates/restaurant-owner/tier5-src/_shared/engine-intl.ts +51 -0
  230. package/templates/restaurant-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  231. package/templates/restaurant-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  232. package/templates/restaurant-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  233. package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
  234. package/templates/retail-store/dev/index.ts +59 -106
  235. package/templates/retail-store/tier5-src/_shared/collection-contract.ts +16 -9
  236. package/templates/retail-store/tier5-src/_shared/collection-service.ts +19 -5
  237. package/templates/retail-store/tier5-src/_shared/engine-intl.ts +51 -0
  238. package/templates/retail-store/tier5-src/_shared/himi-restaurants.ts +4 -4
  239. package/templates/retail-store/tier5-src/_shared/owner-load-error.ts +49 -0
  240. package/templates/retail-store/tier5-src/_shared/wix-service-price.ts +1 -1
  241. package/templates/retail-store/tier5-src/himi-branded-lite-home/index.ts +12 -1
  242. package/templates/retail-store/tier5-src/himi-branded-lite-info/index.ts +5 -2
  243. package/templates/retail-store/tier5-src/wix-spaces-collections/index.ts +1 -1
  244. package/templates/retail-store/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  245. package/templates/retail-store-owner/dev/index.ts +84 -571
  246. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +22 -6
  247. package/templates/retail-store-owner/tier5-src/_shared/collection-contract.ts +16 -9
  248. package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +19 -5
  249. package/templates/retail-store-owner/tier5-src/_shared/engine-intl.ts +51 -0
  250. package/templates/retail-store-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  251. package/templates/retail-store-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  252. package/templates/yoga-studio/dev/index.ts +73 -148
  253. package/templates/yoga-studio/tier5-src/_shared/collection-contract.ts +16 -9
  254. package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +19 -5
  255. package/templates/yoga-studio/tier5-src/_shared/engine-intl.ts +51 -0
  256. package/templates/yoga-studio/tier5-src/_shared/himi-restaurants.ts +4 -4
  257. package/templates/yoga-studio/tier5-src/_shared/owner-load-error.ts +49 -0
  258. package/templates/yoga-studio/tier5-src/_shared/wix-service-price.ts +1 -1
  259. package/templates/yoga-studio/tier5-src/himi-booking-bookings/index.ts +14 -8
  260. package/templates/yoga-studio/tier5-src/himi-branded-lite-home/index.ts +12 -1
  261. package/templates/yoga-studio/tier5-src/himi-branded-lite-info/index.ts +5 -2
  262. package/templates/yoga-studio/tier5-src/himi-branded-lite-plans/index.ts +1 -1
  263. package/templates/yoga-studio/tier5-src/himi-branded-lite-program/index.ts +1 -1
  264. package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +1 -1
  265. package/templates/yoga-studio/tier5-src/himi-events-list/index.ts +20 -4
  266. package/templates/yoga-studio/tier5-src/himi-events-my-events/index.ts +2 -2
  267. package/templates/yoga-studio/tier5-src/wix-spaces-whats-new/index.ts +4 -4
  268. package/templates/yoga-studio-owner/dev/index.ts +84 -571
  269. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +22 -6
  270. package/templates/yoga-studio-owner/tier5-src/_shared/collection-contract.ts +16 -9
  271. package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +19 -5
  272. package/templates/yoga-studio-owner/tier5-src/_shared/engine-intl.ts +51 -0
  273. package/templates/yoga-studio-owner/tier5-src/_shared/owner-load-error.ts +49 -0
  274. package/templates/yoga-studio-owner/tier5-src/_shared/owner-module-data.ts +2 -2
  275. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-appointments/index.ts +4 -1
  276. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +1 -0
@@ -74,6 +74,54 @@ const SITE_CONTEXT_CODES = ["MISSING_METASITE_ID", "MISSING_REQUEST_SITE_CONTEXT
74
74
  * message and starts being a payload dump. */
75
75
  const MAX_RAW = 200;
76
76
 
77
+ /**
78
+ * A TRANSPORT failure: the request never got an HTTP answer at all.
79
+ *
80
+ * Each host describes one in its own platform's words, and every one of them is a
81
+ * diagnostic dump rather than a message. iOS's JSWorker hands a worker the Swift
82
+ * description of the `NSError` —
83
+ * `Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server."
84
+ * UserInfo={… NSErrorFailingURLStringKey=http://127.0.0.1:8178/__dev/wix/proxy, …}`
85
+ * — which Aria painted verbatim: the domain, the code, and the local server's
86
+ * own URL. Android's bridge carries the `java.net` exception text, and a browser's
87
+ * fetch rejects with "Failed to fetch" / "Load failed" / "NetworkError …".
88
+ *
89
+ * Only a message with NO HTTP status qualifies: a status means Wix answered, and
90
+ * that case keeps its own reductions below.
91
+ */
92
+ const TRANSPORT = [
93
+ /\bError Domain=\w+/, // any Cocoa NSError description
94
+ /\bNSURLErrorDomain\b/,
95
+ /\bjava\.(?:net|io)\.\w+(?:Exception|Error)\b/,
96
+ /\b(?:UnknownHost|Connect|SocketTimeout|NoRouteToHost|SSLHandshake)Exception\b/,
97
+ // Android's WebViewJSWorker bridges `e.message ?: e.javaClass.simpleName`, so
98
+ // the class name is usually absent and only OkHttp's own message arrives.
99
+ /^Failed to connect to \S/,
100
+ /^Unable to resolve host\b/,
101
+ /\b(?:Connection refused|Network is unreachable|Software caused connection abort)\b/,
102
+ /^(?:timeout|Read timed out|connect timed out)$/i,
103
+ /\bFailed to fetch\b/,
104
+ /\bNetworkError when attempting to fetch\b/,
105
+ /^(?:TypeError: )?Load failed$/,
106
+ /\bnet::ERR_[A-Z_]+/,
107
+ ];
108
+
109
+ /** Did this failure happen below HTTP — no answer from Wix at all? */
110
+ export function isTransportFailure(e: unknown): boolean {
111
+ const msg = String((e as Error)?.message ?? e ?? "");
112
+ if (STATUS.test(msg)) return false;
113
+ return TRANSPORT.some((re) => re.test(msg));
114
+ }
115
+
116
+ /** The one sentence for a transport failure. Copy-as-configuration: the key is
117
+ * under `ownerCommon.`, which every owner screen (Aria included) forwards. */
118
+ export function ownerTransportFailureText(): string {
119
+ return copyParam(
120
+ "ownerCommon.networkUnreachable",
121
+ "Couldn’t reach Wix. Check your connection and try again.",
122
+ );
123
+ }
124
+
77
125
  /**
78
126
  * Reduce a wire failure to something a PERSON can read.
79
127
  *
@@ -85,6 +133,7 @@ const MAX_RAW = 200;
85
133
  * markup; a long non-HTML body is truncated for the same reason.
86
134
  */
87
135
  function humanWireError(msg: string): string {
136
+ if (isTransportFailure(msg)) return ownerTransportFailureText();
88
137
  const status = STATUS.exec(msg)?.[1];
89
138
  // A JSON ENVELOPE or a NAMED REASON CODE is the machine's word for it, and the
90
139
  // owner gets neither. Both reductions used to live in `ownerDisplayError` only,
@@ -119,7 +119,7 @@ export function formatServicePrice(service: unknown): string {
119
119
  if (amount == null) return "";
120
120
  const currency = serviceCurrency(service);
121
121
  try {
122
- return formatCurrency(amount, currency, "en", 0);
122
+ return formatCurrency(amount, currency, "en");
123
123
  } catch {
124
124
  return `${amount}`;
125
125
  }
@@ -11,9 +11,14 @@ const input = (globalThis as { himalaya?: { input?: Record<string, unknown> } })
11
11
  const validDate = (value: unknown): value is string => typeof value === "string" && /^\d{4}-\d{2}-\d{2}$/.test(value) && dayKey(new Date(`${value}T12:00:00`)) === value;
12
12
  const views = localPreferences("booking.schedule", value => ["agenda", "day", "month"].includes(String(value)) ? String(value) : "agenda");
13
13
  let mode = validDate(input?.date) ? "day" : views.read();
14
- let selectedDate = validDate(input?.date) ? input.date : dayKey(new Date());
14
+ // "" until the schedule is first shown, NOT today's date: the release build hashes this worker's
15
+ // initial state, so a date read off the build machine's clock made every build of unchanged
16
+ // source a different release (#3268, the `nondeterministic-initial-state` lint). `derive()` fills
17
+ // in today the first time the schedule is visible, which is never at build time (no member).
18
+ let selectedDate = validDate(input?.date) ? input.date : "";
19
+ const today = () => dayKey(new Date());
15
20
  let pageMember: MemberAccess | undefined;
16
- let queryNow = new Date().toISOString();
21
+ let queryNow = ""; // set by the first-page fetch, never at boot (see selectedDate)
17
22
  let cancelTarget: { row: MemberBookingRow; member: MemberAccess } | undefined;
18
23
  let cancelling = false;
19
24
  interface S {
@@ -26,11 +31,12 @@ interface S {
26
31
  nextCursor?: string; complete?: boolean; loadingMore?: boolean; pageError?: boolean; total?: number;
27
32
  }
28
33
  function derive(s: S): S {
29
- const dayRows = s.rows.filter(row => row.day === selectedDate);
34
+ const hideSchedule = !s.isMember || s.isLoading;
35
+ if (!selectedDate && !hideSchedule) selectedDate = today();
36
+ const dayRows = selectedDate ? s.rows.filter(row => row.day === selectedDate) : [];
30
37
  const counts = new Map<string, number>();
31
38
  for (const row of s.rows) if (row.day) counts.set(row.day, (counts.get(row.day) ?? 0) + 1);
32
- const hideSchedule = !s.isMember || s.isLoading;
33
- return { ...s, scheduleMode: mode, selectedDate, dayRows, dayHeading: dayLabel(selectedDate), hideSchedule,
39
+ return { ...s, scheduleMode: mode, selectedDate, dayRows, dayHeading: selectedDate ? dayLabel(selectedDate) : "", hideSchedule,
34
40
  hideAgenda: hideSchedule || mode !== "agenda", hideCalendar: hideSchedule || mode === "agenda", hideMonth: mode !== "month",
35
41
  decorations: [...counts].map(([date, n]) => ({ date, dotCount: Math.min(n, 3), dotColorToken: "accentPrimary" })),
36
42
  dayEmptyText: dayRows.length ? "" : s.complete ? copyParam("bookings.emptyDay", "No bookings on this day.") : copyParam("bookings.emptyLoadedDay", "No bookings on this day in loaded results. Load more to check later pages."),
@@ -48,7 +54,7 @@ const svc = defineBackendCollection<S, MemberBookingRow>("himiBookingBookings",
48
54
  async fetch(criteria, cursor) {
49
55
  const member = await memberAccess();
50
56
  if (cursor && (!pageMember || pageMember.email !== member.email || pageMember.scope !== member.scope)) throw memberAccessChanged();
51
- if (!cursor) queryNow = new Date().toISOString();
57
+ if (!cursor || !queryNow) queryNow = new Date().toISOString();
52
58
  return fetchMemberBookings(criteria, cursor, queryNow, member);
53
59
  },
54
60
  },
@@ -65,8 +71,8 @@ const svc = defineBackendCollection<S, MemberBookingRow>("himiBookingBookings",
65
71
  actions: {
66
72
  scheduleView(s, arg) { const value = (arg as { selectedId?: string })?.selectedId; if (["agenda", "day", "month"].includes(value || "")) { mode = value!; views.write(mode); } return derive(s); },
67
73
  selectDate(s, arg) { const date = (arg as { date?: unknown })?.date; if (validDate(date)) selectedDate = date; return derive(s); },
68
- previousDay(s) { const date = new Date(`${selectedDate}T12:00:00`); date.setDate(date.getDate() - 1); selectedDate = dayKey(date); return derive(s); },
69
- nextDay(s) { const date = new Date(`${selectedDate}T12:00:00`); date.setDate(date.getDate() + 1); selectedDate = dayKey(date); return derive(s); },
74
+ previousDay(s) { const date = new Date(`${selectedDate || today()}T12:00:00`); date.setDate(date.getDate() - 1); selectedDate = dayKey(date); return derive(s); },
75
+ nextDay(s) { const date = new Date(`${selectedDate || today()}T12:00:00`); date.setDate(date.getDate() + 1); selectedDate = dayKey(date); return derive(s); },
70
76
  async rebook(s, arg) {
71
77
  const member = pageMember, row = s.rows.find(row => row.id === (arg as { id?: string })?.id);
72
78
  if (!member || !row?.serviceId) return s;
@@ -388,6 +388,10 @@ function resolveEffectiveLayout(arg: unknown, productCount: number): LayoutId {
388
388
  });
389
389
  }
390
390
 
391
+ /** The time-of-day greeting. Read at REFRESH time only, never at boot: the release build hashes
392
+ * the initial state, so a greeting read off the build machine's clock made every build of an
393
+ * unchanged template a different release (#3268, the `nondeterministic-initial-state` lint).
394
+ * The initial state carries `neutralWelcome()` instead, and the first refresh swaps this in. */
391
395
  function welcome(): string {
392
396
  const hour = new Date().getHours();
393
397
  if (hour < 12) return copyParam("home.greetingMorning", "Good morning");
@@ -395,6 +399,11 @@ function welcome(): string {
395
399
  return copyParam("home.greetingEvening", "Good evening");
396
400
  }
397
401
 
402
+ /** The boot-time greeting: clock-free, so the baked initial state is the same on every build. */
403
+ function neutralWelcome(): string {
404
+ return copyParam("home.greetingNeutral", "Welcome");
405
+ }
406
+
398
407
  function feature(p: StoreProduct): ProductFeature {
399
408
  const name = cleanTitle(p.name) || copyParam("home.productFallbackName", "Featured item");
400
409
  const image = productImage(p);
@@ -871,7 +880,9 @@ function baseState(): State {
871
880
  hideHeroInitial: true,
872
881
  hideHeroFallback: true,
873
882
  hideFeaturedSkeleton: false,
874
- welcome: welcome(),
883
+ // Not welcome(): that reads the clock, and this state is baked into the release. A neutral
884
+ // greeting keeps the hero pill painted (same size, no reflow) until the first refresh.
885
+ welcome: neutralWelcome(),
875
886
  refreshedAt: "",
876
887
  effectiveLayout: resolveEffectiveLayout(undefined, 0),
877
888
  accentColor: resolveAccent(undefined),
@@ -112,7 +112,10 @@ const svc = defineService<State, {
112
112
  // Probe before revealing anything picker-shaped (spec R8) — on a customer build this
113
113
  // stays false and the whole subtree is hidden.
114
114
  const canPick = await pickerAvailable();
115
- next = { ...next, pickerAvailable: canPick, pickerHidden: !canPick };
115
+ // The runtime line names the internal platform ("HimalayaCore 0.0.1") — a number for
116
+ // whoever debugs the build, not for a white-label app's customer ([branded-lite-qa]
117
+ // #3002/#3083). It shows only on a build that opted into the QA picker.
118
+ next = { ...next, pickerAvailable: canPick, pickerHidden: !canPick, runtimeLine: canPick ? next.runtimeLine : "" };
116
119
  if (canPick) {
117
120
  // `active()` is more precise than app-info's releasePinned: it also says WHICH pin
118
121
  // (user vs baked) is holding the release.
@@ -122,7 +125,7 @@ const svc = defineService<State, {
122
125
  }
123
126
  }
124
127
  } catch {
125
- next = { ...next, pickerAvailable: false, pickerHidden: true };
128
+ next = { ...next, pickerAvailable: false, pickerHidden: true, runtimeLine: "" };
126
129
  }
127
130
  return next;
128
131
  },
@@ -78,7 +78,7 @@ function money(plan: WixPlan): string {
78
78
  const raw = price?.value;
79
79
  if (raw == null || raw === "" || Number.isNaN(Number(raw))) return "";
80
80
  try {
81
- return formatCurrency(Number(raw), price?.currency || "USD", "en", Number(raw) % 1 === 0 ? 0 : 2);
81
+ return formatCurrency(Number(raw), price?.currency || "USD", "en");
82
82
  } catch {
83
83
  return `${raw}`;
84
84
  }
@@ -124,7 +124,7 @@ function priceOf(p: WixProgram): string {
124
124
  if (raw == null || raw === "" || Number.isNaN(Number(raw))) return "";
125
125
  if (Number(raw) === 0) return "";
126
126
  try {
127
- return formatCurrency(Number(raw), price?.currency || "USD", "en", Number(raw) % 1 === 0 ? 0 : 2);
127
+ return formatCurrency(Number(raw), price?.currency || "USD", "en");
128
128
  } catch {
129
129
  return `${raw}`;
130
130
  }
@@ -162,7 +162,7 @@ function tierPrice(t: WixAvailableTicket): string {
162
162
  // as "25" — a price that reads as a quantity, and nothing downstream could tell it was a
163
163
  // formatting failure. `formatCurrency` uses real Intl where it exists and a symbol-carrying
164
164
  // fallback where it does not, diffed against ECMA-402 in engine-intl-fallback.test.ts.
165
- return formatCurrency(Number(raw), t.price?.currency || "USD", "en", Number(raw) % 1 === 0 ? 0 : 2);
165
+ return formatCurrency(Number(raw), t.price?.currency || "USD", "en");
166
166
  }
167
167
 
168
168
  function tierAvailable(t: WixAvailableTicket): boolean {
@@ -35,16 +35,32 @@ const svc = defineBackendCollection<S, EventRow>("himiEvents", {
35
35
  id: row => row.id,
36
36
  errorMessage: () => copyParam("events.errorText", "Events could not be loaded."),
37
37
  async cached(criteria) {
38
- if (criteria.query || criteria.filter !== "all" || criteria.sort !== "default") return undefined;
39
- return { items: await readCached(), nextCursor: "", metadata: { fromCache: true } };
38
+ // The list now OPENS on Upcoming, so the default view must keep its offline-first paint:
39
+ // serve the cache for it too, minus the rows that have finished.
40
+ const upcoming = criteria.filter === "value:Upcoming";
41
+ if (criteria.query || (criteria.filter !== "all" && !upcoming) || criteria.sort !== "default") return undefined;
42
+ const rows = await readCached();
43
+ return { items: upcoming ? rows.filter((row) => row.statusLabel !== "Past") : rows, nextCursor: "", metadata: { fromCache: true } };
40
44
  },
41
45
  async fetch(criteria, cursor) {
42
46
  if (!cursor) queryNow = new Date().toISOString();
43
47
  if (criteria.filter === "saved" && !criteria.savedIds.length) return { items: [], nextCursor: "" };
44
48
  const filter: Record<string, unknown> = { status: { $ne: "DRAFT" } };
45
- if (criteria.query) filter.title = { $eq: criteria.query };
49
+ // Prefix, not exact: the placeholder says "Search events", and an exact-title match returned
50
+ // nothing for "Harvest" when the event is "Harvest Tasting".
51
+ if (criteria.query) filter.title = { $startsWith: criteria.query };
46
52
  if (criteria.filter === "saved") filter.id = { $in: criteria.savedIds };
47
- if (criteria.filter === "value:Upcoming") filter["dateAndTimeSettings.startDate"] = { $gte: queryNow };
53
+ // Upcoming = not started yet OR not finished yet: an event in progress (a festival on its
54
+ // second day) is still on. The start-date arm is what keeps a START-ONLY event (no endDate
55
+ // — valid in Wix Events) in the list; a filter on endDate alone dropped it from both views.
56
+ // Past stays "has started", so an in-progress event may appear under both; its row is only
57
+ // marked "Past" once it has actually finished (`eventIsPast`).
58
+ if (criteria.filter === "value:Upcoming") {
59
+ filter.$or = [
60
+ { "dateAndTimeSettings.startDate": { $gte: queryNow } },
61
+ { "dateAndTimeSettings.endDate": { $gte: queryNow } },
62
+ ];
63
+ }
48
64
  if (criteria.filter === "value:Past") filter["dateAndTimeSettings.startDate"] = { $lt: queryNow };
49
65
  const res = await queryEvents({ limit: 50, offset: Number(cursor || 0), query: { filter,
50
66
  sort: [{ fieldName: criteria.sort === "default" ? "dateAndTimeSettings.startDate" : "title", order: criteria.sort === "za" ? "DESC" : "ASC" }, { fieldName: "id", order: "ASC" }] } });
@@ -63,9 +63,9 @@ async function identityLine(): Promise<string> {
63
63
  const identity = await dispatch("himi.wix.memberIdentity") as { email?: string } | null;
64
64
  return identity?.email
65
65
  ? copyTemplate("myEvents.signedInAs", "Signed in as {email}", { email: identity.email })
66
- : copyParam("myEvents.identityGuest", "RSVPs saved on this device — not yet your full Wix Events history.");
66
+ : copyParam("myEvents.identityGuest", "RSVPs you confirm on this device appear here.");
67
67
  } catch {
68
- return copyParam("myEvents.identityGuest", "RSVPs saved on this device — not yet your full Wix Events history.");
68
+ return copyParam("myEvents.identityGuest", "RSVPs you confirm on this device appear here.");
69
69
  }
70
70
  }
71
71
 
@@ -4,7 +4,7 @@ import { withEmptyFlags } from "../_shared/empty-flags.js";
4
4
  import { listAnnouncements, type WixAnnouncement } from "@himalaya/wix-new-releases";
5
5
 
6
6
  interface Row { id: string; name: string; subtitle: string }
7
- interface S { status: "loading" | "ready"; items: Row[]; emptyText: string }
7
+ interface S { status: "loading" | "ready"; items: Row[]; emptyText: string; /** hiddenWhen hides on true: the empty card shows only once loaded AND empty. */ noEmpty: boolean }
8
8
 
9
9
  function norm(a: WixAnnouncement, i: number): Row {
10
10
  const aa = a as unknown as { id?: string; title?: string; bodyText?: string; description?: string };
@@ -12,14 +12,14 @@ function norm(a: WixAnnouncement, i: number): Row {
12
12
  }
13
13
 
14
14
  const svc = defineService<S, { load: (s: S) => Promise<S> }>("spacesWhatsNew", withEmptyFlags({
15
- state: { status: "loading", items: [], emptyText: "" },
15
+ state: { status: "loading", items: [], emptyText: "", noEmpty: true },
16
16
  actions: {
17
17
  load: async (s) => {
18
18
  try {
19
19
  const r = await listAnnouncements(20);
20
20
  const items = (((r as unknown as { announcements?: WixAnnouncement[] }).announcements) ?? []).map(norm);
21
- return { status: "ready", items, emptyText: items.length ? "" : "Nothing new right now" };
22
- } catch { return { ...s, status: "ready", items: [], emptyText: "Nothing new right now" }; }
21
+ return { status: "ready", items, emptyText: items.length ? "" : "Nothing new right now", noEmpty: items.length > 0 };
22
+ } catch { return { ...s, status: "ready", items: [], emptyText: "Nothing new right now", noEmpty: false }; }
23
23
  },
24
24
  },
25
25
  }, { items: "noItems" }));