@wix/himalaya-cli 0.1482.0 → 0.1484.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 (83) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/auth.mjs +4 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +4 -1
  3. package/dist/cli.mjs +71549 -71143
  4. package/dist/preview-assets.generated.bin +0 -0
  5. package/guides/qa-builds.md +22 -0
  6. package/package.json +2 -2
  7. package/templates/beauty-salon/tier5-src/_shared/collection-query.ts +13 -4
  8. package/templates/beauty-salon/tier5-src/_shared/collection-service.ts +2 -1
  9. package/templates/beauty-salon-owner/dev/index.ts +58 -19
  10. package/templates/beauty-salon-owner/tier5-src/_shared/collection-query.ts +13 -4
  11. package/templates/beauty-salon-owner/tier5-src/_shared/collection-service.ts +2 -1
  12. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  13. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  14. package/templates/branded-lite/tier5-src/_shared/collection-query.ts +13 -4
  15. package/templates/branded-lite/tier5-src/_shared/collection-service.ts +2 -1
  16. package/templates/community-club/tier5-src/_shared/collection-query.ts +13 -4
  17. package/templates/community-club/tier5-src/_shared/collection-service.ts +2 -1
  18. package/templates/community-club-owner/dev/index.ts +58 -19
  19. package/templates/community-club-owner/tier5-src/_shared/collection-query.ts +13 -4
  20. package/templates/community-club-owner/tier5-src/_shared/collection-service.ts +2 -1
  21. package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  22. package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  23. package/templates/events-meetups/tier5-src/_shared/collection-query.ts +13 -4
  24. package/templates/events-meetups/tier5-src/_shared/collection-service.ts +2 -1
  25. package/templates/events-meetups-owner/dev/index.ts +46 -16
  26. package/templates/events-meetups-owner/tier5-src/_shared/collection-query.ts +13 -4
  27. package/templates/events-meetups-owner/tier5-src/_shared/collection-service.ts +2 -1
  28. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  29. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  30. package/templates/gym-fitness/tier5-src/_shared/collection-query.ts +13 -4
  31. package/templates/gym-fitness/tier5-src/_shared/collection-service.ts +2 -1
  32. package/templates/gym-fitness-owner/dev/index.ts +62 -20
  33. package/templates/gym-fitness-owner/tier5-src/_shared/collection-query.ts +13 -4
  34. package/templates/gym-fitness-owner/tier5-src/_shared/collection-service.ts +2 -1
  35. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  36. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  37. package/templates/nonprofit-cause/tier5-src/_shared/collection-query.ts +13 -4
  38. package/templates/nonprofit-cause/tier5-src/_shared/collection-service.ts +2 -1
  39. package/templates/nonprofit-cause-owner/dev/index.ts +50 -17
  40. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-query.ts +13 -4
  41. package/templates/nonprofit-cause-owner/tier5-src/_shared/collection-service.ts +2 -1
  42. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  43. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  44. package/templates/owner-lite/dev/index.ts +62 -20
  45. package/templates/owner-lite/tier5-src/_shared/collection-query.ts +13 -4
  46. package/templates/owner-lite/tier5-src/_shared/collection-service.ts +2 -1
  47. package/templates/owner-lite/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  48. package/templates/owner-lite/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  49. package/templates/podcast-creator/tier5-src/_shared/collection-query.ts +13 -4
  50. package/templates/podcast-creator/tier5-src/_shared/collection-service.ts +2 -1
  51. package/templates/podcast-creator-owner/dev/index.ts +58 -19
  52. package/templates/podcast-creator-owner/tier5-src/_shared/collection-query.ts +13 -4
  53. package/templates/podcast-creator-owner/tier5-src/_shared/collection-service.ts +2 -1
  54. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  55. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  56. package/templates/portfolio-creative/tier5-src/_shared/collection-query.ts +13 -4
  57. package/templates/portfolio-creative/tier5-src/_shared/collection-service.ts +2 -1
  58. package/templates/portfolio-creative-owner/dev/index.ts +58 -19
  59. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-query.ts +13 -4
  60. package/templates/portfolio-creative-owner/tier5-src/_shared/collection-service.ts +2 -1
  61. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  62. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  63. package/templates/restaurant/tier5-src/_shared/collection-query.ts +13 -4
  64. package/templates/restaurant/tier5-src/_shared/collection-service.ts +2 -1
  65. package/templates/restaurant-owner/dev/index.ts +62 -20
  66. package/templates/restaurant-owner/tier5-src/_shared/collection-query.ts +13 -4
  67. package/templates/restaurant-owner/tier5-src/_shared/collection-service.ts +2 -1
  68. package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  69. package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  70. package/templates/retail-store/tier5-src/_shared/collection-query.ts +13 -4
  71. package/templates/retail-store/tier5-src/_shared/collection-service.ts +2 -1
  72. package/templates/retail-store-owner/dev/index.ts +54 -18
  73. package/templates/retail-store-owner/tier5-src/_shared/collection-query.ts +13 -4
  74. package/templates/retail-store-owner/tier5-src/_shared/collection-service.ts +2 -1
  75. package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  76. package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
  77. package/templates/yoga-studio/tier5-src/_shared/collection-query.ts +13 -4
  78. package/templates/yoga-studio/tier5-src/_shared/collection-service.ts +2 -1
  79. package/templates/yoga-studio-owner/dev/index.ts +50 -17
  80. package/templates/yoga-studio-owner/tier5-src/_shared/collection-query.ts +13 -4
  81. package/templates/yoga-studio-owner/tier5-src/_shared/collection-service.ts +2 -1
  82. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/index.ts +5 -3
  83. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/logic.ts +30 -0
@@ -49603,7 +49603,10 @@ const SCREENS = runtimeSetting({
49603
49603
  "action": {
49604
49604
  "actionId": "himi.open",
49605
49605
  "params": {
49606
- "screenId": "himi_owner_lite_sites"
49606
+ "screenId": "himi_owner_lite_sites",
49607
+ "title": "Your event series",
49608
+ "subtitle": "Choose a series to organise",
49609
+ "search": "button"
49607
49610
  }
49608
49611
  }
49609
49612
  }
@@ -50770,7 +50773,10 @@ const SCREENS = runtimeSetting({
50770
50773
  "actionId": "himi.open",
50771
50774
  "params": {
50772
50775
  "screenId": "himi_owner_lite_events",
50773
- "collectionFilter": "value:Upcoming"
50776
+ "collectionFilter": "value:Upcoming",
50777
+ "title": "Schedule",
50778
+ "subtitle": "Every meetup, talk and workshop on the programme.",
50779
+ "search": "button"
50774
50780
  }
50775
50781
  },
50776
50782
  "pressFeedback": "scale",
@@ -50851,7 +50857,10 @@ const SCREENS = runtimeSetting({
50851
50857
  "actionId": "himi.open",
50852
50858
  "params": {
50853
50859
  "screenId": "himi_owner_lite_posts",
50854
- "collectionFilter": "all"
50860
+ "collectionFilter": "all",
50861
+ "title": "Announcements",
50862
+ "subtitle": "What you’ve told attendees — drafts and sent.",
50863
+ "search": "button"
50855
50864
  }
50856
50865
  },
50857
50866
  "pressFeedback": "scale",
@@ -50920,7 +50929,10 @@ const SCREENS = runtimeSetting({
50920
50929
  "actionId": "himi.open",
50921
50930
  "params": {
50922
50931
  "screenId": "himi_owner_lite_sites",
50923
- "collectionFilter": "all"
50932
+ "collectionFilter": "all",
50933
+ "title": "Your event series",
50934
+ "subtitle": "Choose a series to organise",
50935
+ "search": "button"
50924
50936
  }
50925
50937
  },
50926
50938
  "pressFeedback": "scale",
@@ -51014,7 +51026,9 @@ const SCREENS = runtimeSetting({
51014
51026
  "action": {
51015
51027
  "actionId": "himi.open",
51016
51028
  "params": {
51017
- "screenId": "himi_owner_lite_brief"
51029
+ "screenId": "himi_owner_lite_brief",
51030
+ "title": "Run of show",
51031
+ "subtitle": "What’s next, who’s registered and what still needs announcing."
51018
51032
  }
51019
51033
  }
51020
51034
  }
@@ -51369,7 +51383,8 @@ const SCREENS = runtimeSetting({
51369
51383
  "action": {
51370
51384
  "actionId": "himi.open",
51371
51385
  "params": {
51372
- "screenId": "himi_owner_lite_manage"
51386
+ "screenId": "himi_owner_lite_manage",
51387
+ "search": "drawer"
51373
51388
  }
51374
51389
  }
51375
51390
  }
@@ -52396,7 +52411,10 @@ const SCREENS = runtimeSetting({
52396
52411
  "onTap": {
52397
52412
  "actionId": "himi.open",
52398
52413
  "params": {
52399
- "screenId": "himi_owner_lite_search"
52414
+ "screenId": "himi_owner_lite_search",
52415
+ "title": "Search records",
52416
+ "subtitle": "Across your business areas",
52417
+ "search": "drawer"
52400
52418
  }
52401
52419
  },
52402
52420
  "pressFeedback": "scale",
@@ -52596,7 +52614,9 @@ const SCREENS = runtimeSetting({
52596
52614
  "onTap": {
52597
52615
  "actionId": "himi.open",
52598
52616
  "params": {
52599
- "screenId": "himi_owner_lite_analytics"
52617
+ "screenId": "himi_owner_lite_analytics",
52618
+ "title": "Analytics",
52619
+ "subtitle": "How your site is doing"
52600
52620
  }
52601
52621
  },
52602
52622
  "pressFeedback": "scale",
@@ -52620,7 +52640,7 @@ const SCREENS = runtimeSetting({
52620
52640
  "onAppear": {
52621
52641
  "actionId": "tier5.himiOwnerLiteManage.load",
52622
52642
  "params": {
52623
- "areas": "[{\"id\":\"events\",\"title\":\"Schedule\",\"subtitle\":\"Events and attendance\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_events\",\"icon\":\"calendar\",\"metricKey\":\"events\",\"countLabel\":\"events\",\"handoffLabel\":\"Open in Wix: Schedule\"},{\"id\":\"blog\",\"title\":\"Announcements\",\"subtitle\":\"Stories and publishing\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_posts\",\"icon\":\"newspaper\",\"metricKey\":\"posts\",\"countLabel\":\"posts\",\"createScreenId\":\"himi_owner_lite_post_new\",\"createLabel\":\"Write post\",\"handoffLabel\":\"Open in Wix: Announcements\"},{\"id\":\"coupons\",\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_coupons\",\"icon\":\"tag\",\"metricKey\":\"module:coupons\",\"countLabel\":\"coupons\",\"handoffLabel\":\"Open in Wix: Coupons\"},{\"id\":\"invoices\",\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_invoices\",\"icon\":\"document\",\"metricKey\":\"module:invoices\",\"countLabel\":\"invoices\",\"handoffLabel\":\"Open in Wix: Invoices\"},{\"id\":\"giftCards\",\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_giftCards\",\"icon\":\"ticket\",\"metricKey\":\"module:giftCards\",\"countLabel\":\"gift cards\",\"handoffLabel\":\"Open in Wix: Gift cards\"},{\"id\":\"contacts\",\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_contacts\",\"icon\":\"person\",\"metricKey\":\"module:contacts\",\"countLabel\":\"contacts\",\"handoffLabel\":\"Open in Wix: Contacts\"},{\"id\":\"members\",\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_members\",\"icon\":\"person\",\"metricKey\":\"module:members\",\"countLabel\":\"members\",\"handoffLabel\":\"Open in Wix: Members\"},{\"id\":\"groups\",\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_groups\",\"icon\":\"person\",\"metricKey\":\"module:groups\",\"countLabel\":\"groups\",\"handoffLabel\":\"Open in Wix: Groups\"},{\"id\":\"reviews\",\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_reviews\",\"icon\":\"star\",\"metricKey\":\"module:reviews\",\"countLabel\":\"reviews\",\"handoffLabel\":\"Open in Wix: Reviews\"},{\"id\":\"plans\",\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_plans\",\"icon\":\"bookmark\",\"metricKey\":\"module:plans\",\"countLabel\":\"plans\",\"handoffLabel\":\"Open in Wix: Plans\"},{\"id\":\"subscriptions\",\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_subscriptions\",\"icon\":\"bookmark\",\"metricKey\":\"module:subscriptions\",\"countLabel\":\"subscriptions\",\"handoffLabel\":\"Open in Wix: Subscriptions\"},{\"id\":\"programs\",\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_programs\",\"icon\":\"play\",\"metricKey\":\"module:programs\",\"countLabel\":\"programs\",\"handoffLabel\":\"Open in Wix: Programs\"},{\"id\":\"badges\",\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_badges\",\"icon\":\"star\",\"metricKey\":\"module:badges\",\"countLabel\":\"badges\",\"handoffLabel\":\"Open in Wix: Badges\"},{\"id\":\"reservations\",\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_module_reservations\",\"icon\":\"calendar\",\"metricKey\":\"module:reservations\",\"countLabel\":\"reservations\",\"handoffLabel\":\"Open in Wix: Reservations\"},{\"id\":\"forms\",\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_forms\",\"icon\":\"document\",\"metricKey\":\"module:forms\",\"countLabel\":\"forms\",\"handoffLabel\":\"Open in Wix: Forms\"},{\"id\":\"portfolio\",\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_portfolio\",\"icon\":\"image\",\"metricKey\":\"module:portfolio\",\"countLabel\":\"portfolio\",\"handoffLabel\":\"Open in Wix: Portfolio\"},{\"id\":\"donationCampaigns\",\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_donationCampaigns\",\"icon\":\"heart\",\"metricKey\":\"module:donationCampaigns\",\"countLabel\":\"donation campaigns\",\"handoffLabel\":\"Open in Wix: Donation campaigns\"}]",
52643
+ "areas": "[{\"id\":\"events\",\"title\":\"Schedule\",\"subtitle\":\"Events and attendance\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_events\",\"icon\":\"calendar\",\"metricKey\":\"events\",\"countLabel\":\"events\",\"handoffLabel\":\"Open in Wix: Schedule\",\"navigation\":{\"title\":\"Schedule\",\"subtitle\":\"Every meetup, talk and workshop on the programme.\",\"search\":\"button\"}},{\"id\":\"blog\",\"title\":\"Announcements\",\"subtitle\":\"Stories and publishing\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_posts\",\"icon\":\"newspaper\",\"metricKey\":\"posts\",\"countLabel\":\"posts\",\"createScreenId\":\"himi_owner_lite_post_new\",\"createLabel\":\"Write post\",\"handoffLabel\":\"Open in Wix: Announcements\",\"navigation\":{\"title\":\"Announcements\",\"subtitle\":\"What you’ve told attendees — drafts and sent.\",\"search\":\"button\"}},{\"id\":\"coupons\",\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_coupons\",\"icon\":\"tag\",\"metricKey\":\"module:coupons\",\"countLabel\":\"coupons\",\"handoffLabel\":\"Open in Wix: Coupons\",\"navigation\":{\"title\":\"Coupons\",\"subtitle\":\"Offers, codes and usage\",\"search\":\"button\"}},{\"id\":\"invoices\",\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_invoices\",\"icon\":\"document\",\"metricKey\":\"module:invoices\",\"countLabel\":\"invoices\",\"handoffLabel\":\"Open in Wix: Invoices\",\"navigation\":{\"title\":\"Invoices\",\"subtitle\":\"Customers, balances and payment status\",\"search\":\"button\"}},{\"id\":\"giftCards\",\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"groupId\":\"commerce\",\"group\":\"Commerce\",\"screenId\":\"himi_owner_lite_module_giftCards\",\"icon\":\"ticket\",\"metricKey\":\"module:giftCards\",\"countLabel\":\"gift cards\",\"handoffLabel\":\"Open in Wix: Gift cards\",\"navigation\":{\"title\":\"Gift cards\",\"subtitle\":\"Balances, recipients and expiration\",\"search\":\"button\"}},{\"id\":\"contacts\",\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_contacts\",\"icon\":\"person\",\"metricKey\":\"module:contacts\",\"countLabel\":\"contacts\",\"handoffLabel\":\"Open in Wix: Contacts\",\"navigation\":{\"title\":\"Contacts\",\"subtitle\":\"Your customer relationships\",\"search\":\"button\"}},{\"id\":\"members\",\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_members\",\"icon\":\"person\",\"metricKey\":\"module:members\",\"countLabel\":\"members\",\"handoffLabel\":\"Open in Wix: Members\",\"navigation\":{\"title\":\"Members\",\"subtitle\":\"Membership access and profiles\",\"search\":\"button\"}},{\"id\":\"groups\",\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_groups\",\"icon\":\"person\",\"metricKey\":\"module:groups\",\"countLabel\":\"groups\",\"handoffLabel\":\"Open in Wix: Groups\",\"navigation\":{\"title\":\"Groups\",\"subtitle\":\"Communities and conversations\",\"search\":\"button\"}},{\"id\":\"reviews\",\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"groupId\":\"people-and-community\",\"group\":\"People and community\",\"screenId\":\"himi_owner_lite_module_reviews\",\"icon\":\"star\",\"metricKey\":\"module:reviews\",\"countLabel\":\"reviews\",\"handoffLabel\":\"Open in Wix: Reviews\",\"navigation\":{\"title\":\"Reviews\",\"subtitle\":\"Published and pending customer feedback\",\"search\":\"button\"}},{\"id\":\"plans\",\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_plans\",\"icon\":\"bookmark\",\"metricKey\":\"module:plans\",\"countLabel\":\"plans\",\"handoffLabel\":\"Open in Wix: Plans\",\"navigation\":{\"title\":\"Plans\",\"subtitle\":\"Pricing, benefits and visibility\",\"search\":\"button\"}},{\"id\":\"subscriptions\",\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_subscriptions\",\"icon\":\"bookmark\",\"metricKey\":\"module:subscriptions\",\"countLabel\":\"subscriptions\",\"handoffLabel\":\"Open in Wix: Subscriptions\",\"navigation\":{\"title\":\"Subscriptions\",\"subtitle\":\"Member plans and subscription status\",\"search\":\"button\"}},{\"id\":\"programs\",\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_programs\",\"icon\":\"play\",\"metricKey\":\"module:programs\",\"countLabel\":\"programs\",\"handoffLabel\":\"Open in Wix: Programs\",\"navigation\":{\"title\":\"Programs\",\"subtitle\":\"Learning experiences and participation\",\"search\":\"button\"}},{\"id\":\"badges\",\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"groupId\":\"membership-and-learning\",\"group\":\"Membership and learning\",\"screenId\":\"himi_owner_lite_module_badges\",\"icon\":\"star\",\"metricKey\":\"module:badges\",\"countLabel\":\"badges\",\"handoffLabel\":\"Open in Wix: Badges\",\"navigation\":{\"title\":\"Badges\",\"subtitle\":\"Recognition, access and member badges\",\"search\":\"button\"}},{\"id\":\"reservations\",\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"groupId\":\"scheduling\",\"group\":\"Scheduling\",\"screenId\":\"himi_owner_lite_module_reservations\",\"icon\":\"calendar\",\"metricKey\":\"module:reservations\",\"countLabel\":\"reservations\",\"handoffLabel\":\"Open in Wix: Reservations\",\"navigation\":{\"title\":\"Reservations\",\"subtitle\":\"Guests, tables and arrival times\",\"search\":\"button\"}},{\"id\":\"forms\",\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_forms\",\"icon\":\"document\",\"metricKey\":\"module:forms\",\"countLabel\":\"forms\",\"handoffLabel\":\"Open in Wix: Forms\",\"navigation\":{\"title\":\"Forms\",\"subtitle\":\"Forms and their configuration\",\"search\":\"button\"}},{\"id\":\"portfolio\",\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_portfolio\",\"icon\":\"image\",\"metricKey\":\"module:portfolio\",\"countLabel\":\"portfolio\",\"handoffLabel\":\"Open in Wix: Portfolio\",\"navigation\":{\"title\":\"Portfolio\",\"subtitle\":\"Projects, stories and galleries\",\"search\":\"button\"}},{\"id\":\"donationCampaigns\",\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"groupId\":\"content\",\"group\":\"Content\",\"screenId\":\"himi_owner_lite_module_donationCampaigns\",\"icon\":\"heart\",\"metricKey\":\"module:donationCampaigns\",\"countLabel\":\"donation campaigns\",\"handoffLabel\":\"Open in Wix: Donation campaigns\",\"navigation\":{\"title\":\"Donation campaigns\",\"subtitle\":\"Campaign goals, status and fundraising\",\"search\":\"button\"}}]",
52624
52644
  "copy": "{\"ownerManage.blogLabel\":\"Announcements\",\"ownerManage.eventsLabel\":\"Schedule\",\"ownerManage.title\":\"Programme\"}",
52625
52645
  "businessName": "__HIMI_APP_NAME__"
52626
52646
  }
@@ -55134,7 +55154,9 @@ const SCREENS = runtimeSetting({
55134
55154
  "onTap": {
55135
55155
  "actionId": "himi.open",
55136
55156
  "params": {
55137
- "screenId": "himi_owner_lite_analytics_report"
55157
+ "screenId": "himi_owner_lite_analytics_report",
55158
+ "title": "Build a report",
55159
+ "subtitle": "Any subject area your site tracks"
55138
55160
  }
55139
55161
  },
55140
55162
  "pressFeedback": "highlight"
@@ -56290,7 +56312,8 @@ const SCREENS = runtimeSetting({
56290
56312
  "action": {
56291
56313
  "actionId": "himi.open",
56292
56314
  "params": {
56293
- "screenId": "himi_owner_lite_manage"
56315
+ "screenId": "himi_owner_lite_manage",
56316
+ "search": "drawer"
56294
56317
  }
56295
56318
  }
56296
56319
  }
@@ -56927,7 +56950,8 @@ const SCREENS = runtimeSetting({
56927
56950
  "action": {
56928
56951
  "actionId": "himi.open",
56929
56952
  "params": {
56930
- "screenId": "himi_owner_lite_manage"
56953
+ "screenId": "himi_owner_lite_manage",
56954
+ "search": "drawer"
56931
56955
  }
56932
56956
  }
56933
56957
  }
@@ -62124,7 +62148,9 @@ const SCREENS = runtimeSetting({
62124
62148
  "onTap": {
62125
62149
  "actionId": "himi.open",
62126
62150
  "params": {
62127
- "screenId": "himi_owner_lite_aria_history"
62151
+ "screenId": "himi_owner_lite_aria_history",
62152
+ "title": "Conversations",
62153
+ "subtitle": "Pick up where you left off."
62128
62154
  }
62129
62155
  },
62130
62156
  "accessibilityLabel": "History",
@@ -63431,7 +63457,8 @@ const SCREENS = runtimeSetting({
63431
63457
  "actionId": "himi.open",
63432
63458
  "params": {
63433
63459
  "screenId": "himi_owner_lite_aria",
63434
- "conversationId": "$item.id"
63460
+ "conversationId": "$item.id",
63461
+ "title": "Aria"
63435
63462
  }
63436
63463
  }
63437
63464
  }
@@ -63569,7 +63596,9 @@ const SCREENS = runtimeSetting({
63569
63596
  "action": {
63570
63597
  "actionId": "himi.open",
63571
63598
  "params": {
63572
- "screenId": "himi_owner_lite_overview"
63599
+ "screenId": "himi_owner_lite_overview",
63600
+ "title": "Across your businesses",
63601
+ "subtitle": "What needs you, everywhere at once"
63573
63602
  }
63574
63603
  }
63575
63604
  }
@@ -75263,7 +75292,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
75263
75292
  "action": {
75264
75293
  "actionId": "himi.open",
75265
75294
  "params": {
75266
- "screenId": "himi_owner_lite_manage"
75295
+ "screenId": "himi_owner_lite_manage",
75296
+ "search": "drawer"
75267
75297
  }
75268
75298
  }
75269
75299
  }
@@ -84,14 +84,17 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
84
84
  }
85
85
  return result;
86
86
  };
87
- const fetch = async (append: boolean): Promise<void> => {
87
+ /** [keepRows]: a search typed over the rows on screen leaves them there until its answer arrives (status stays
88
+ * `loading`, and nothing pages under the old answer), so the list is not blanked on each keystroke. */
89
+ const fetch = async (append: boolean, keepRows = false): Promise<void> => {
88
90
  if (disposed || (append && (state.loadingMore || state.status === 'loading' || !state.nextCursor))) return;
89
91
  const revision = append ? generation : ++generation;
90
92
  const cursor = append ? state.nextCursor : '';
91
93
  const criteria = copyQuery(state.criteria);
92
94
  if (!append) loadedPages = 0;
93
95
  state = { ...state, status: append ? 'ready' : 'loading', loadingMore: append, pageError: false, error: '',
94
- ...(append ? {} : { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
96
+ ...(append ? {} : keepRows ? { nextCursor: '', complete: false, provisional: false }
97
+ : { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
95
98
  emit();
96
99
  try {
97
100
  if (!append && source.cached) {
@@ -117,7 +120,9 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
117
120
  clearedByError = clear || /HTTP 40[13]\b/.test(String(error));
118
121
  if (clearedByError) lastShown = undefined;
119
122
  if (clear) loadedPages = 0;
120
- state = { ...state, ...(clear ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
123
+ // The rows a typed search kept on screen while it ran were never its answer: a failed one shows none of them.
124
+ const drop = clear || keepRows;
125
+ state = { ...state, ...(drop ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
121
126
  status: append && !clear ? 'ready' : 'error', loadingMore: false, pageError: append && !clear, complete: false,
122
127
  provisional: false, error: source.errorMessage?.(error) ?? '' };
123
128
  }
@@ -134,9 +139,13 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
134
139
  const count = restorePages && same ? Math.max(loadedPages, restoringPages, 1) : 1;
135
140
  const showing = lastShown && sameCriteria(lastShown.state.criteria, next) ? lastShown : undefined;
136
141
  restoringPages = count;
142
+ // Only the search text changed: the user is typing over the rows on screen, also while the last keystroke's
143
+ // search is still out.
144
+ const typing = !same && (state.status === 'ready' || state.status === 'loading')
145
+ && sameCriteria({ ...state.criteria, query: '' }, { ...next, query: '' });
137
146
  state = { ...state, criteria: next };
138
147
  if (revalidate && showing) { revalidating = generation + 1; clearedByError = false; }
139
- const pending = fetch(false);
148
+ const pending = fetch(false, typing);
140
149
  const revision = generation;
141
150
  await pending;
142
151
  // Re-appearance revalidates every previously opened page using fresh
@@ -194,7 +194,8 @@ export function decorateCollection(name: string, def: { state: State; actions?:
194
194
  noSignIn: !signInRequired,
195
195
  errorTitle: signInRequired ? copyParam('collection.signInTitle', 'Sign in to see this') : copyParam('collection.loadErrorTitle', 'This collection could not load'),
196
196
  errorMessage,
197
- noLoading: !loading,
197
+ // A skeleton only with nothing to show: a search re-running over the rows on screen keeps them.
198
+ noLoading: !loading || rows.length > 0,
198
199
  // De-dup against a domain that paints its OWN empty block (screen-kit emptyBlock is
199
200
  // gated on the domain's top-level `noEmpty`): only one empty state ever shows.
200
201
  noEmptySource: !sourceEmpty || s.noEmpty === false,
@@ -17,7 +17,7 @@ import { OWNER_MODULES, ownerModuleId } from '../_shared/owner-modules.js';
17
17
  import { localPreferences } from '../_shared/local-preferences.js';
18
18
  import { stashCopy, copyParam, copyTemplate } from '../_shared/himi-copy.js';
19
19
  import { fallbackNameFrom, selectedSiteName } from '../_shared/owner-selected-site.js';
20
- import { DASHBOARD_PATHS, deriveManage, parseAreas, recentAreas, metricFailure, rememberArea, withMetrics, type ManageArea, type Metric, type MetricFailure } from './logic.js';
20
+ import { DASHBOARD_PATHS, deriveManage, navigationArgs, parseAreas, recentAreas, metricFailure, rememberArea, withMetrics, type ManageArea, type Metric, type MetricFailure } from './logic.js';
21
21
 
22
22
  interface State {
23
23
  /** The business the header names: the one picked on Sites, else the descriptor's
@@ -339,13 +339,15 @@ const svc = defineService<State, {
339
339
  const area = findArea(state, arg);
340
340
  if (!area) return state;
341
341
  const next = remember(state, area);
342
- return navigate(next, { screenId: area.screenId }) as State;
342
+ const args = navigationArgs(area.navigation);
343
+ return navigate(next, { screenId: area.screenId, ...(args ? { args } : {}) }) as State;
343
344
  },
344
345
  create: (state, arg) => {
345
346
  const area = findArea(state, arg);
346
347
  if (!area?.createScreenId) return state;
347
348
  const next = remember(state, area);
348
- return navigate(next, { screenId: area.createScreenId }) as State;
349
+ const args = navigationArgs(area.createNavigation);
350
+ return navigate(next, { screenId: area.createScreenId, ...(args ? { args } : {}) }) as State;
349
351
  },
350
352
  handoff: async (state, arg) => {
351
353
  const area = findArea(state, arg);
@@ -52,6 +52,34 @@ export interface ManageArea {
52
52
  hideHandoff?: boolean;
53
53
  /** The accessible name of this area's "Open in Wix", which carries the area ("Open in Wix: Store"). */
54
54
  handoffLabel?: string;
55
+ /** The navigation its page declares (`hostTitle`, `topBar.searchable`), for the host's bar the moment it opens it. */
56
+ navigation?: ManageNavigation;
57
+ /** The same for its create screen. */
58
+ createNavigation?: ManageNavigation;
59
+ }
60
+
61
+ /** A page's navigation as the build declares it: its title and subtitle, and where its search goes (none without one). */
62
+ export interface ManageNavigation {
63
+ title?: string;
64
+ subtitle?: string;
65
+ search?: "drawer" | "button";
66
+ }
67
+
68
+ function parseNavigation(value: unknown): ManageNavigation | undefined {
69
+ if (!value || typeof value !== "object") return undefined;
70
+ const raw = value as Record<string, unknown>;
71
+ const title = clean(raw.title);
72
+ const subtitle = title ? clean(raw.subtitle) : "";
73
+ const search = raw.search === "drawer" || raw.search === "button" ? raw.search : undefined;
74
+ if (!title && !search) return undefined;
75
+ return { ...(title ? { title } : {}), ...(subtitle ? { subtitle } : {}), ...(search ? { search } : {}) };
76
+ }
77
+
78
+ /** The open action's arguments that carry [navigation] to the host: strings only, as `_nav.args` takes them. */
79
+ export function navigationArgs(navigation: ManageNavigation | undefined): Record<string, string> | undefined {
80
+ if (!navigation) return undefined;
81
+ return { ...(navigation.title ? { title: navigation.title } : {}), ...(navigation.subtitle ? { subtitle: navigation.subtitle } : {}),
82
+ ...(navigation.search ? { search: navigation.search } : {}) };
55
83
  }
56
84
 
57
85
  export interface ManageSection {
@@ -98,6 +126,8 @@ export function parseAreas(value: unknown): ManageArea[] {
98
126
  hideCreate: !(createScreenId && createLabel),
99
127
  hideHandoff: !DASHBOARD_PATHS[area.id],
100
128
  handoffLabel: clean(raw.handoffLabel) || `Open in Wix: ${area.title}`,
129
+ ...(parseNavigation(raw.navigation) ? { navigation: parseNavigation(raw.navigation) } : {}),
130
+ ...(createScreenId && createLabel && parseNavigation(raw.createNavigation) ? { createNavigation: parseNavigation(raw.createNavigation) } : {}),
101
131
  metricText: "—",
102
132
  statusText: "",
103
133
  unavailable: false,
@@ -84,14 +84,17 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
84
84
  }
85
85
  return result;
86
86
  };
87
- const fetch = async (append: boolean): Promise<void> => {
87
+ /** [keepRows]: a search typed over the rows on screen leaves them there until its answer arrives (status stays
88
+ * `loading`, and nothing pages under the old answer), so the list is not blanked on each keystroke. */
89
+ const fetch = async (append: boolean, keepRows = false): Promise<void> => {
88
90
  if (disposed || (append && (state.loadingMore || state.status === 'loading' || !state.nextCursor))) return;
89
91
  const revision = append ? generation : ++generation;
90
92
  const cursor = append ? state.nextCursor : '';
91
93
  const criteria = copyQuery(state.criteria);
92
94
  if (!append) loadedPages = 0;
93
95
  state = { ...state, status: append ? 'ready' : 'loading', loadingMore: append, pageError: false, error: '',
94
- ...(append ? {} : { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
96
+ ...(append ? {} : keepRows ? { nextCursor: '', complete: false, provisional: false }
97
+ : { items: [], nextCursor: '', total: undefined, metadata: undefined, complete: false, provisional: false }) };
95
98
  emit();
96
99
  try {
97
100
  if (!append && source.cached) {
@@ -117,7 +120,9 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
117
120
  clearedByError = clear || /HTTP 40[13]\b/.test(String(error));
118
121
  if (clearedByError) lastShown = undefined;
119
122
  if (clear) loadedPages = 0;
120
- state = { ...state, ...(clear ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
123
+ // The rows a typed search kept on screen while it ran were never its answer: a failed one shows none of them.
124
+ const drop = clear || keepRows;
125
+ state = { ...state, ...(drop ? { items: [], nextCursor: '', total: undefined, metadata: undefined } : {}),
121
126
  status: append && !clear ? 'ready' : 'error', loadingMore: false, pageError: append && !clear, complete: false,
122
127
  provisional: false, error: source.errorMessage?.(error) ?? '' };
123
128
  }
@@ -134,9 +139,13 @@ export function createCollectionQuery<Row>(source: CollectionQuerySource<Row>, p
134
139
  const count = restorePages && same ? Math.max(loadedPages, restoringPages, 1) : 1;
135
140
  const showing = lastShown && sameCriteria(lastShown.state.criteria, next) ? lastShown : undefined;
136
141
  restoringPages = count;
142
+ // Only the search text changed: the user is typing over the rows on screen, also while the last keystroke's
143
+ // search is still out.
144
+ const typing = !same && (state.status === 'ready' || state.status === 'loading')
145
+ && sameCriteria({ ...state.criteria, query: '' }, { ...next, query: '' });
137
146
  state = { ...state, criteria: next };
138
147
  if (revalidate && showing) { revalidating = generation + 1; clearedByError = false; }
139
- const pending = fetch(false);
148
+ const pending = fetch(false, typing);
140
149
  const revision = generation;
141
150
  await pending;
142
151
  // Re-appearance revalidates every previously opened page using fresh
@@ -194,7 +194,8 @@ export function decorateCollection(name: string, def: { state: State; actions?:
194
194
  noSignIn: !signInRequired,
195
195
  errorTitle: signInRequired ? copyParam('collection.signInTitle', 'Sign in to see this') : copyParam('collection.loadErrorTitle', 'This collection could not load'),
196
196
  errorMessage,
197
- noLoading: !loading,
197
+ // A skeleton only with nothing to show: a search re-running over the rows on screen keeps them.
198
+ noLoading: !loading || rows.length > 0,
198
199
  // De-dup against a domain that paints its OWN empty block (screen-kit emptyBlock is
199
200
  // gated on the domain's top-level `noEmpty`): only one empty state ever shows.
200
201
  noEmptySource: !sourceEmpty || s.noEmpty === false,