@wix/himalaya-cli 0.1582.0 → 0.1583.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 (50) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/builder.d.ts +8 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +26 -2
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/validator.d.ts +18 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +5 -1
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +5 -1
  6. package/dist/cli.mjs +888 -553
  7. package/dist/preview-assets.generated.bin +0 -0
  8. package/guides/component-reference.json +4 -3
  9. package/guides/component-reference.md +24 -2
  10. package/package.json +2 -2
  11. package/templates/beauty-salon/config.ts +20 -1
  12. package/templates/beauty-salon/dev/index.ts +1751 -629
  13. package/templates/beauty-salon/tier5-src/_shared/booking-location.ts +147 -0
  14. package/templates/beauty-salon/tier5-src/_shared/booking-session.ts +222 -0
  15. package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +277 -14
  16. package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +351 -92
  17. package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +25 -5
  18. package/templates/beauty-salon/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
  19. package/templates/branded-lite/config.ts +20 -1
  20. package/templates/branded-lite/dev/index.ts +1688 -566
  21. package/templates/branded-lite/l10n/en.json +2 -2
  22. package/templates/branded-lite/tier5-src/_shared/booking-location.ts +147 -0
  23. package/templates/branded-lite/tier5-src/_shared/booking-session.ts +222 -0
  24. package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +277 -14
  25. package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +351 -92
  26. package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +25 -5
  27. package/templates/branded-lite/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
  28. package/templates/community-club/config.ts +20 -1
  29. package/templates/events-meetups/config.ts +20 -1
  30. package/templates/gym-fitness/config.ts +20 -1
  31. package/templates/gym-fitness/dev/index.ts +1751 -629
  32. package/templates/gym-fitness/tier5-src/_shared/booking-location.ts +147 -0
  33. package/templates/gym-fitness/tier5-src/_shared/booking-session.ts +222 -0
  34. package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +277 -14
  35. package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +351 -92
  36. package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +25 -5
  37. package/templates/gym-fitness/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
  38. package/templates/nonprofit-cause/config.ts +20 -1
  39. package/templates/podcast-creator/config.ts +20 -1
  40. package/templates/portfolio-creative/config.ts +20 -1
  41. package/templates/restaurant/config.ts +20 -1
  42. package/templates/retail-store/config.ts +20 -1
  43. package/templates/yoga-studio/config.ts +20 -1
  44. package/templates/yoga-studio/dev/index.ts +1533 -411
  45. package/templates/yoga-studio/tier5-src/_shared/booking-location.ts +147 -0
  46. package/templates/yoga-studio/tier5-src/_shared/booking-session.ts +222 -0
  47. package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +277 -14
  48. package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +351 -92
  49. package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +25 -5
  50. package/templates/yoga-studio/tier5-src/himi-branded-lite-agenda/index.ts +219 -220
Binary file
@@ -39,9 +39,10 @@
39
39
  "category": "Core",
40
40
  "propsType": "LazyListProps",
41
41
  "bindings": [
42
- "itemsPath"
42
+ "itemsPath",
43
+ "scrollToItemPath"
43
44
  ],
44
- "propsSource": "export interface LazyListProps {\n items: Component[];\n horizontal?: boolean;\n spacing?: number;\n /** Motion grammar (Batch 1) — staggered entrance: each child's enter\n * transition/appear is delayed by index × staggerMs (ms). 0/absent = no\n * stagger. Gated by reduced motion.\n *\n * Honored on every renderer, on BOTH the static `items` and the service-bound\n * `itemsPath` paths. The delay modulates an ENTRANCE, so it only cascades a row\n * that carries a `transition`/`appear` — a delay on a row with no entrance\n * animates nothing. */\n staggerMs?: number;\n /** List enrichments. */\n onPullToRefresh?: Action;\n pagination?: Pagination;\n stickyHeader?: Component;\n rowSwipeActions?: SwipeActionSet;\n /**\n * Tier-5 service-bound list: a `$service:`-style path to an array in the\n * worker's state (e.g. \"ownerSites.sites\"). When set, `items[0]` is the row\n * TEMPLATE — instantiated once per array element with `$item.<field>`\n * substitution (ServiceBoundList). Requires a serviceProvider at render.\n */\n itemsPath?: string;\n /** Motion grammar (Phase-3, layout animation) — animate item insert/remove/reorder\n * as the list's contents change (needs stable `Component.id`s). Reduced-motion gated. */\n animateItems?: boolean;\n /**\n * #1054 (WS-3 scroll) — bottom-anchored / reversed layout. When true the list\n * lays out from the BOTTOM (item[0] at the bottom, later items stacking upward)\n * and rests scrolled to the bottom — a chat transcript / live caption that\n * pins to the latest without the 180°-rotation hack. Vertical lists only; not\n * combined with a `stickyHeader`.\n */\n reverseLayout?: boolean;\n /**\n * #1054 (WS-3 scroll) — content insets (points): pad the scroll CONTENT at the\n * top/bottom while the scroller still paints edge-to-edge, so rows scroll\n * *under* floating chrome (a translucent header/footer) instead of being\n * clipped. 0/absent ⇒ no inset.\n */\n contentInsetTop?: number;\n contentInsetBottom?: number;\n}"
45
+ "propsSource": "export interface LazyListProps {\n items: Component[];\n horizontal?: boolean;\n spacing?: number;\n /** Motion grammar (Batch 1) — staggered entrance: each child's enter\n * transition/appear is delayed by index × staggerMs (ms). 0/absent = no\n * stagger. Gated by reduced motion.\n *\n * Honored on every renderer, on BOTH the static `items` and the service-bound\n * `itemsPath` paths. The delay modulates an ENTRANCE, so it only cascades a row\n * that carries a `transition`/`appear` — a delay on a row with no entrance\n * animates nothing. */\n staggerMs?: number;\n /** List enrichments. */\n onPullToRefresh?: Action;\n pagination?: Pagination;\n stickyHeader?: Component;\n rowSwipeActions?: SwipeActionSet;\n /**\n * Tier-5 service-bound list: a `$service:`-style path to an array in the\n * worker's state (e.g. \"ownerSites.sites\"). When set, `items[0]` is the row\n * TEMPLATE — instantiated once per array element with `$item.<field>`\n * substitution (ServiceBoundList). Requires a serviceProvider at render.\n */\n itemsPath?: string;\n /** Motion grammar (Phase-3, layout animation) — animate item insert/remove/reorder\n * as the list's contents change (needs stable `Component.id`s). Reduced-motion gated. */\n animateItems?: boolean;\n /**\n * #1054 (WS-3 scroll) — bottom-anchored / reversed layout. When true the list\n * lays out from the BOTTOM (item[0] at the bottom, later items stacking upward)\n * and rests scrolled to the bottom — a chat transcript / live caption that\n * pins to the latest without the 180°-rotation hack. Vertical lists only; not\n * combined with a `stickyHeader`.\n */\n reverseLayout?: boolean;\n /**\n * #1054 (WS-3 scroll) — content insets (points): pad the scroll CONTENT at the\n * top/bottom while the scroller still paints edge-to-edge, so rows scroll\n * *under* floating chrome (a translucent header/footer) instead of being\n * clipped. 0/absent ⇒ no inset.\n */\n contentInsetTop?: number;\n contentInsetBottom?: number;\n /**\n * Jump to a row of a bound (`itemsPath`) list: a `$service:` path whose value names a row by\n * its item's `id`. When the value CHANGES to a non-empty one, the row's top is brought to the\n * top of the visible area (the list's scroll, or the screen's when the list sits in it).\n * Only the part before the first \"|\" is the id, so a worker can re-trigger the same row\n * (\"cat:yoga|2\"). Unknown id ⇒ nothing.\n */\n scrollToItemPath?: string;\n /**\n * Fired with args `{ id }` when the bound row at the top of the visible area changes because\n * the user scrolled: on a change only, after the scroll settles, never for a\n * `scrollToItemPath` jump, not on first render. Rows with no `id` are skipped.\n */\n onTopItemChange?: Action;\n}"
45
46
  },
46
47
  {
47
48
  "name": "Grid",
@@ -1257,7 +1258,7 @@
1257
1258
  "eventsPath",
1258
1259
  "scrollToDatePath"
1259
1260
  ],
1260
- "propsSource": "export interface AgendaProps {\n events?: CalendarEvent[];\n eventsPath?: string;\n scrollToDate?: string;\n /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). */\n scrollToDatePath?: string;\n stickyHeaders?: boolean;\n emptyText?: string;\n onSelectEvent?: Action;\n /** Per-event row body, `$item.*`-substituted per event. Closes the gap that made\n * `agendaList()` (the LazyList-backed PRESET, which takes a `rowTemplate`) more\n * expressive than this component. Absent ⇒ the built-in row. */\n eventTemplate?: Component;\n /** Newest-first. Absent/false ⇒ ascending. Applies to the day GROUPS and to the\n * events within each group. Without it a list whose default sort is \"Newest\"\n * (an owner's orders, recent activity) could not become an Agenda without\n * silently inverting itself — every arm sorted ascending unconditionally. */\n descending?: boolean;\n}"
1261
+ "propsSource": "export interface AgendaProps {\n events?: CalendarEvent[];\n eventsPath?: string;\n scrollToDate?: string;\n /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). Either may be\n * \"YYYY-MM-DD|<anything>\": the day is the part before \"|\", and a change of the whole value jumps\n * again, also to the same day. A suffix-less value equal to the day last reported through\n * `onVisibleDateChange` is an echo of the user's own scroll and does not move the list. */\n scrollToDatePath?: string;\n stickyHeaders?: boolean;\n emptyText?: string;\n onSelectEvent?: Action;\n /** Per-event row body, `$item.*`-substituted per event. Closes the gap that made\n * `agendaList()` (the LazyList-backed PRESET, which takes a `rowTemplate`) more\n * expressive than this component. Absent ⇒ the built-in row. */\n eventTemplate?: Component;\n /** Newest-first. Absent/false ⇒ ascending. Applies to the day GROUPS and to the\n * events within each group. Without it a list whose default sort is \"Newest\"\n * (an owner's orders, recent activity) could not become an Agenda without\n * silently inverting itself — every arm sorted ascending unconditionally. */\n descending?: boolean;\n /** Fired with args `{ date: \"YYYY-MM-DD\" }` when the day group at the top of the visible area\n * changes because the user scrolled (the agenda's own scroll, or the screen's): on a change\n * only, after the scroll settles, never for a `scrollToDate` jump, not on first render. Lets a\n * calendar above the list follow it. */\n onVisibleDateChange?: Action;\n}"
1261
1262
  }
1262
1263
  ],
1263
1264
  "descriptor": {
@@ -30,7 +30,7 @@ See also **[Modifiers](#modifiers)** (the `modifiers` block) and **[Actions](#ac
30
30
  | `VStack` | Core | — |
31
31
  | `HStack` | Core | — |
32
32
  | `ZStack` | Core | — |
33
- | `LazyList` | Core | `itemsPath` |
33
+ | `LazyList` | Core | `itemsPath`, `scrollToItemPath` |
34
34
  | `Grid` | Core | `itemsPath` |
35
35
  | `Card` | Core | — |
36
36
  | `SplitView` | Core | — |
@@ -296,6 +296,20 @@ export interface LazyListProps {
296
296
  */
297
297
  contentInsetTop?: number;
298
298
  contentInsetBottom?: number;
299
+ /**
300
+ * Jump to a row of a bound (`itemsPath`) list: a `$service:` path whose value names a row by
301
+ * its item's `id`. When the value CHANGES to a non-empty one, the row's top is brought to the
302
+ * top of the visible area (the list's scroll, or the screen's when the list sits in it).
303
+ * Only the part before the first "|" is the id, so a worker can re-trigger the same row
304
+ * ("cat:yoga|2"). Unknown id ⇒ nothing.
305
+ */
306
+ scrollToItemPath?: string;
307
+ /**
308
+ * Fired with args `{ id }` when the bound row at the top of the visible area changes because
309
+ * the user scrolled: on a change only, after the scroll settles, never for a
310
+ * `scrollToItemPath` jump, not on first render. Rows with no `id` are skipped.
311
+ */
312
+ onTopItemChange?: Action;
299
313
  }
300
314
  ```
301
315
 
@@ -2316,7 +2330,10 @@ export interface AgendaProps {
2316
2330
  events?: CalendarEvent[];
2317
2331
  eventsPath?: string;
2318
2332
  scrollToDate?: string;
2319
- /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). */
2333
+ /** Worker-driven jump target (a literal `scrollToDate` is frozen in the descriptor). Either may be
2334
+ * "YYYY-MM-DD|<anything>": the day is the part before "|", and a change of the whole value jumps
2335
+ * again, also to the same day. A suffix-less value equal to the day last reported through
2336
+ * `onVisibleDateChange` is an echo of the user's own scroll and does not move the list. */
2320
2337
  scrollToDatePath?: string;
2321
2338
  stickyHeaders?: boolean;
2322
2339
  emptyText?: string;
@@ -2330,6 +2347,11 @@ export interface AgendaProps {
2330
2347
  * (an owner's orders, recent activity) could not become an Agenda without
2331
2348
  * silently inverting itself — every arm sorted ascending unconditionally. */
2332
2349
  descending?: boolean;
2350
+ /** Fired with args `{ date: "YYYY-MM-DD" }` when the day group at the top of the visible area
2351
+ * changes because the user scrolled (the agenda's own scroll, or the screen's): on a change
2352
+ * only, after the scroll settles, never for a `scrollToDate` jump, not on first render. Lets a
2353
+ * calendar above the list follow it. */
2354
+ onVisibleDateChange?: Action;
2333
2355
  }
2334
2356
  ```
2335
2357
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1582.0",
3
+ "version": "0.1583.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -72,5 +72,5 @@
72
72
  "artifactId": "himalaya-cli"
73
73
  }
74
74
  },
75
- "falconPackageHash": "2d8efcab269fac658b0596662ac44e3c7af42259f2294fa5db370d7d"
75
+ "falconPackageHash": "2447e780474e18ae289e6b340128ea20a1a5bd106c533fac79a5ed8e"
76
76
  }
@@ -455,7 +455,7 @@ export default defineApp({
455
455
  // Your on-device database. It must declare every entity a worker reads or writes,
456
456
  // or those calls fail closed — keep it in step with `local_database` above.
457
457
  dataSchema: {
458
- "version": 2,
458
+ "version": 3,
459
459
  "entities": [
460
460
  {
461
461
  "name": "products",
@@ -536,6 +536,25 @@ export default defineApp({
536
536
  }
537
537
  ]
538
538
  },
539
+ {
540
+ "name": "booking_prefs",
541
+ "encrypted": false,
542
+ "fields": [
543
+ {
544
+ "name": "id",
545
+ "type": "string",
546
+ "required": true
547
+ },
548
+ {
549
+ "name": "locationId",
550
+ "type": "string"
551
+ },
552
+ {
553
+ "name": "locationLabel",
554
+ "type": "string"
555
+ }
556
+ ]
557
+ },
539
558
  {
540
559
  "name": "cms_collections",
541
560
  "encrypted": false,