@riverbankcms/sdk 0.135.1 → 0.137.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 (220) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/README.md +4 -8
  3. package/dist/{PreviewEditorSidebar-D4p_5TdY.mjs → PreviewEditorSidebar-Bn6cONPa.mjs} +8 -8
  4. package/dist/{PreviewEditorUI-D0cRoTX1.mjs → PreviewEditorUI-LAwXZPSx.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-DcgaESkm.mjs → PreviewQueryProvider-ztQUdsNo.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-BKLtM3Nz.mjs → SdkPreviewModeRuntime-BbbGsI_v.mjs} +621 -238
  7. package/dist/{SiteChromeCustomizeContext-61X2m7QV.mjs → SiteChromeCustomizeContext-BbkNSt5a.mjs} +5041 -2407
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +18 -850
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +412 -2316
  10. package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
  11. package/dist/_dts/api/src/accessAdmin.d.ts +1 -9
  12. package/dist/_dts/api/src/accountApi.d.ts +49 -2
  13. package/dist/_dts/api/src/contentRuntime.d.ts +7 -4
  14. package/dist/_dts/api/src/domainConnection.d.ts +41 -0
  15. package/dist/_dts/api/src/endpoints.d.ts +201 -181
  16. package/dist/_dts/api/src/index.d.ts +5 -3
  17. package/dist/_dts/api/src/media.d.ts +19 -2
  18. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
  19. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +26 -0
  20. package/dist/_dts/api/src/sdkBlockContentAdmission.d.ts +5 -0
  21. package/dist/_dts/api/src/sdkContracts.d.ts +2 -15
  22. package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
  23. package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +61 -0
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +21 -436
  25. package/dist/_dts/api/src/siteInfrastructure.d.ts +17 -23
  26. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +7 -21
  27. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +27 -3
  28. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
  29. package/dist/_dts/api/src/types.d.ts +1 -1
  30. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +2 -3
  31. package/dist/_dts/block-form/src/utils/slug.d.ts +6 -0
  32. package/dist/_dts/blocks/src/PageRenderer.d.ts +13 -7
  33. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +48 -0
  34. package/dist/_dts/blocks/src/definitions.d.ts +14 -0
  35. package/dist/_dts/blocks/src/index.d.ts +4 -3
  36. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +49 -0
  37. package/dist/_dts/blocks/src/pageRendererBlockSupport.d.ts +75 -0
  38. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +2 -0
  39. package/dist/_dts/blocks/src/server.d.ts +2 -2
  40. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -0
  42. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +78 -0
  43. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +2 -18
  44. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +103 -16
  45. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  46. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +4 -2
  47. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  48. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +19 -0
  50. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +52 -0
  51. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -0
  52. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +47 -21
  53. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +38 -9
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +3 -1
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +8 -3
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +5 -2
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.client.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +40 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +43 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +31 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +3 -1
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarNavigationChevron.d.ts +4 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModalContext.d.ts +3 -2
  80. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +4 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +31 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +3 -1
  84. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +9 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +4 -3
  88. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +0 -1
  89. package/dist/_dts/calendar/src/grid.d.ts +24 -66
  90. package/dist/_dts/calendar/src/index.d.ts +2 -2
  91. package/dist/_dts/calendar/src/timetable.d.ts +5 -9
  92. package/dist/_dts/commerce/src/purchase/allocation.d.ts +11 -0
  93. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
  94. package/dist/_dts/commerce/src/purchase/index.d.ts +3 -0
  95. package/dist/_dts/commerce/src/purchase/settlement.d.ts +33 -0
  96. package/dist/_dts/commerce/src/purchase/stripeCheckoutReturnUrl.d.ts +8 -0
  97. package/dist/_dts/content-model/src/templates/defaults.d.ts +6 -0
  98. package/dist/_dts/core/src/slug.d.ts +20 -5
  99. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +8 -40
  100. package/dist/_dts/db/src/index.d.ts +1 -0
  101. package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
  102. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
  103. package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
  104. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +1 -1
  105. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  106. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  107. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
  108. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +2 -1
  109. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
  110. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
  111. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
  112. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
  113. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
  114. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
  115. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +6 -0
  116. package/dist/_dts/sdk/src/public-api/contracts.d.ts +7 -2
  117. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +10 -6
  118. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +0 -1
  119. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  120. package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +3 -0
  121. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +3 -0
  122. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  123. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +17 -0
  124. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +9 -3
  125. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +1 -1
  126. package/dist/_dts/sdk/src/rendering/index.d.ts +2 -2
  127. package/dist/_dts/sdk/src/rendering/overrideResolution.d.ts +7 -4
  128. package/dist/_dts/sdk/src/version.d.ts +1 -1
  129. package/dist/_dts/theme-core/src/cards/types.d.ts +8 -8
  130. package/dist/_dts/theme-core/src/data.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  132. package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
  133. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +25 -2
  134. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -6
  135. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -810
  136. package/dist/_dts/theme-core/src/schema.d.ts +460 -1285
  137. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
  138. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +223 -1
  139. package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
  140. package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
  142. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -38
  143. package/dist/_dts/theme-core/src/site-styles/headerLayoutStyles.d.ts +10 -0
  144. package/dist/_dts/theme-core/src/site-styles/headerLayoutTypes.d.ts +8 -5
  145. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +4 -4
  146. package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
  147. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
  148. package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
  149. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +25 -2
  150. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +465 -0
  151. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +168 -0
  152. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  153. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  154. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
  155. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
  156. package/dist/client/{BookingConsentAgreement-Bz9znbpn.mjs → BookingConsentAgreement--_fUCZe-.mjs} +2 -2
  157. package/dist/client/{DiscountCodeDisclosure-35Ru8yB9.mjs → DiscountCodeDisclosure-BMipSoDJ.mjs} +1 -1
  158. package/dist/client/{EventCombined.client-BKB0ZxRR.mjs → EventCombined.client-CwJOxn7A.mjs} +274 -278
  159. package/dist/client/{EventListing.client-Dx8I21ok.mjs → EventListing.client-eVwiylPW.mjs} +2 -2
  160. package/dist/client/{LeafletStaticMap-CEWx-Bhe.mjs → LeafletStaticMap-IKenna5u.mjs} +1 -1
  161. package/dist/client/{accordion-KIDsKTwS.mjs → accordion-MGAO3PuE.mjs} +1 -1
  162. package/dist/client/{bookingForm-D96Rmp-5.mjs → bookingForm-CudlQPUu.mjs} +5 -5
  163. package/dist/client/bookings.mjs +476 -98
  164. package/dist/client/capacity-BW00PO7s.mjs +271 -0
  165. package/dist/client/{carousel-YwUgyL66.mjs → carousel-BrbGJ2Jl.mjs} +1 -1
  166. package/dist/client/{cart-BbwuNrUT.mjs → cart-Bq5eU0xZ.mjs} +3 -3
  167. package/dist/client/{checkout-hp1ucmEY.mjs → checkout-BAFVRdrK.mjs} +3 -3
  168. package/dist/client/client.mjs +4641 -2721
  169. package/dist/client/{context-DljQn8L5.mjs → context-DCkiHVdD.mjs} +20 -5
  170. package/dist/client/dates-2RPXHQy4.mjs +264 -0
  171. package/dist/client/{eventCalendar-DU4iNLpo.mjs → eventCalendar-B0O-hPF7.mjs} +261 -126
  172. package/dist/client/{eventCombined-CZuupW8m.mjs → eventCombined-DCkDaoDI.mjs} +3 -3
  173. package/dist/client/{eventDetails-DPQWwCIi.mjs → eventDetails-D8GG2dnD.mjs} +7 -4
  174. package/dist/client/{eventListing-C7oMidwS.mjs → eventListing-3ssV_bxz.mjs} +3 -3
  175. package/dist/client/{eventRegistration-zEiunlUs.mjs → eventRegistration-bPQo3kVw.mjs} +610 -313
  176. package/dist/client/{form-D2KIyCVJ.mjs → form-qMv8RDkk.mjs} +2 -2
  177. package/dist/client/{headerSection-CK5uChUK.mjs → headerSection-CH0Sc5hX.mjs} +2 -2
  178. package/dist/client/hooks.mjs +2514 -308
  179. package/dist/client/{locationMap-DLQNH1ln.mjs → locationMap-0_xlBnNI.mjs} +2 -2
  180. package/dist/client/{newsletterForm-ZuhIG7fZ.mjs → newsletterForm-NUW7m9RI.mjs} +2 -2
  181. package/dist/client/{productDetail-7hIcGeae.mjs → productDetail-FBEOM7jW.mjs} +3 -3
  182. package/dist/client/{productList-T4Cii1ot.mjs → productList-R0OSGhnn.mjs} +3 -3
  183. package/dist/client/{propsDecoder-mB0aC_Fi.mjs → propsDecoder-pYvx_Srl.mjs} +179 -401
  184. package/dist/client/rendering/client.mjs +3496 -2223
  185. package/dist/client/rendering/islands.mjs +17 -17
  186. package/dist/client/rendering.mjs +4400 -2510
  187. package/dist/client/{scrollToBlock-Du5mHgvL.mjs → scrollToBlock-ByQv96M2.mjs} +1 -1
  188. package/dist/client/{shop-B5zAcKZn.mjs → shop-RUG9DmRE.mjs} +6 -6
  189. package/dist/client/{shop-commerce-BKBZB6l5.mjs → shop-commerce-B76Jz23B.mjs} +5 -5
  190. package/dist/client/{shop-commerce-store-Cq4qlNtQ.mjs → shop-commerce-store-QuQNdDsD.mjs} +1 -1
  191. package/dist/client/{shopShared-DYGzEs9D.mjs → shopShared-vXU1omwJ.mjs} +3 -3
  192. package/dist/client/{useEventFilters-Bphkda8m.mjs → useEventFilters-ByuU6HLA.mjs} +33 -18
  193. package/dist/preview-next/before-render.mjs +86 -51
  194. package/dist/preview-next/client/runtime.mjs +4 -4
  195. package/dist/preview-next/keepAlive.mjs +86 -51
  196. package/dist/preview-next/middleware.mjs +86 -51
  197. package/dist/{previewAuthStore-C7ksxt5b.mjs → previewAuthStore-L_cKW8Sb.mjs} +86 -51
  198. package/dist/{sdk-runtime-BbIC8G4J.mjs → sdk-runtime-sUMr5d70.mjs} +2 -2
  199. package/dist/{separator-CadhAtI7.mjs → separator-BIHkie5i.mjs} +1 -1
  200. package/dist/server/components.mjs +4397 -2960
  201. package/dist/server/config-validation.mjs +354 -145
  202. package/dist/server/config.mjs +354 -145
  203. package/dist/server/data.mjs +354 -144
  204. package/dist/server/index.mjs +201 -55
  205. package/dist/server/manifest.mjs +0 -1
  206. package/dist/server/next.mjs +4046 -2611
  207. package/dist/server/page-converter.mjs +225 -122
  208. package/dist/server/prebuild.mjs +1 -1
  209. package/dist/server/rendering/server.mjs +4105 -2636
  210. package/dist/server/rendering.mjs +4522 -3087
  211. package/dist/server/routing.mjs +3289 -1637
  212. package/dist/server/server.mjs +23175 -21079
  213. package/dist/server/theme-bridge.mjs +708 -272
  214. package/dist/server/theme.mjs +29 -25
  215. package/dist/styles/index.css +624 -181
  216. package/package.json +1 -1
  217. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
  218. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
  219. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
  220. /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
@@ -4568,6 +4568,11 @@ const gradientConfigSchema = z.object({
4568
4568
  position: z.string().optional(),
4569
4569
  stops: z.array(gradientStopSchema).min(2)
4570
4570
  });
4571
+ const gradientsSchema = z.object({
4572
+ button: z.string().min(1).nullable().optional(),
4573
+ hero: z.string().min(1).nullable().optional(),
4574
+ background: z.string().min(1).nullable().optional()
4575
+ });
4571
4576
  //#endregion
4572
4577
  //#region ../theme-core/src/interactive/baseSchema.ts
4573
4578
  /**
@@ -5265,12 +5270,8 @@ const legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
5265
5270
  * `@riverbankcms/api` is `z.input<typeof themeSchema>`, so a widened input here
5266
5271
  * would leak straight into a public type.
5267
5272
  *
5268
- * Not every read of a persisted theme goes through the schema:
5269
- * `resolveRuntimeTheme` in
5270
- * `apps/dashboard/src/server/services/sites/runtimeSiteResponse.ts` returns the
5271
- * raw database JSON asserted as `Theme` with no parse, so a theme still
5272
- * carrying a legacy spelling reaches the theme editor un-aliased. That gap
5273
- * predates this alias and is harmless while persisted usage is zero.
5273
+ * Persisted runtime themes are admitted through `parseThemeForPersistence`
5274
+ * before reaching consumers, so legacy spellings normalize at that boundary.
5274
5275
  */
5275
5276
  const headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
5276
5277
  const BREAKPOINT_LG = 1024;
@@ -5322,11 +5323,30 @@ const headerContainerSchema = z.object({
5322
5323
  tint: z.string().nullable().optional(),
5323
5324
  opacity: z.number().min(0).max(1).default(.12)
5324
5325
  }).optional();
5325
- const headerInteractionPaletteSchema = z.enum([
5326
+ //#endregion
5327
+ //#region ../theme-core/src/header/interactionPalette.ts
5328
+ /**
5329
+ * The palettes that fill the nav link with a colour on hover and focus. Each
5330
+ * one names a background/foreground token pair.
5331
+ */
5332
+ const headerInteractionPillPaletteValues = [
5326
5333
  "primary",
5327
5334
  "secondary",
5328
5335
  "accent"
5329
- ]);
5336
+ ];
5337
+ /**
5338
+ * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
5339
+ * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
5340
+ *
5341
+ * It exists because "a colour change on hover, no filled background" was not
5342
+ * expressible in the vocabulary, and it is what
5343
+ * `anna-raven-therapy-and-yoga` and `kirtan-lucy` have rendered since before
5344
+ * the palette existed. Without it those two rows can only be classified as a
5345
+ * conscious visual change.
5346
+ */
5347
+ const headerInteractionQuietPalette = "quiet";
5348
+ const headerInteractionPaletteValues = [...headerInteractionPillPaletteValues, headerInteractionQuietPalette];
5349
+ const headerInteractionPaletteSchema = z.enum(headerInteractionPaletteValues);
5330
5350
  //#endregion
5331
5351
  //#region ../theme-core/src/boxBackgroundSchema.ts
5332
5352
  const boxBackgroundOverlaySchema = z.preprocess(normalizeAuthoringOpacity, z.discriminatedUnion("type", [
@@ -5708,11 +5728,12 @@ const inputStyle = z.object({
5708
5728
  ]),
5709
5729
  label: z.enum(["inside", "above"])
5710
5730
  });
5711
- const headerPositioning = z.enum([
5731
+ const headerPositioningValues = [
5712
5732
  "static",
5713
5733
  "sticky",
5714
5734
  "fixed"
5715
- ]);
5735
+ ];
5736
+ const headerPositioning = z.enum(headerPositioningValues);
5716
5737
  const headerNavStyle = z.enum([
5717
5738
  "minimal",
5718
5739
  "underline",
@@ -5729,7 +5750,6 @@ const navFontWeight = z.enum([
5729
5750
  "bold"
5730
5751
  ]);
5731
5752
  const headerMaxWidth = z.enum(["container", "full"]);
5732
- const headerBarFrame = z.enum(["full-bleed", "inset-shell"]);
5733
5753
  const headerBorderSchema = componentBorderSchema.extend({ position: z.enum([
5734
5754
  "bottom",
5735
5755
  "top",
@@ -5758,12 +5778,6 @@ const headerLogoTextSchema = z.object({
5758
5778
  ]).optional(),
5759
5779
  hideOnShrink: z.boolean().optional()
5760
5780
  }).optional();
5761
- const navEffectsSchema = z.object({
5762
- underlineGradient: z.boolean().default(false),
5763
- glow: z.boolean().default(false),
5764
- glowColor: z.string().optional(),
5765
- neumorphic: z.boolean().default(false)
5766
- }).optional();
5767
5781
  const dropdownStyleSchema = z.object({
5768
5782
  background: themeColorTokenSchema.default("surface"),
5769
5783
  textColor: themeColorTokenSchema.default("text"),
@@ -5854,10 +5868,8 @@ const headerSchema = z.object({
5854
5868
  variant: headerVariantWithLegacyAliasSchema,
5855
5869
  positioning: headerPositioning,
5856
5870
  shrinkOnScroll: z.boolean(),
5857
- maxWidth: headerMaxWidth,
5858
- barFrame: headerBarFrame.optional(),
5871
+ maxWidth: headerMaxWidth.default("container"),
5859
5872
  scrollTreatment: headerScrollTreatmentSchema,
5860
- logoOverride: mediaSchema.nullable().optional(),
5861
5873
  background: headerBackgroundSchema.default({
5862
5874
  type: "color",
5863
5875
  color: "surface"
@@ -5869,13 +5881,11 @@ const headerSchema = z.object({
5869
5881
  navFontRole: z.enum(["body", "heading"]).optional(),
5870
5882
  navTextSize: navLinkStyleSchema.shape.textSize,
5871
5883
  interactionPalette: headerInteractionPaletteSchema.optional(),
5872
- navPlacement: z.enum(["end", "center"]).optional(),
5873
5884
  container: headerContainerSchema,
5874
5885
  border: headerBorderSchema,
5875
5886
  shadow: componentShadowSchema.optional(),
5876
5887
  logo: logoStyleSchema,
5877
5888
  logoText: headerLogoTextSchema,
5878
- navEffects: navEffectsSchema,
5879
5889
  navContainer: navContainerSchema,
5880
5890
  navLinkStyle: navLinkStyleSchema.optional(),
5881
5891
  ctaGap: headerCtaGapSchema.optional(),
@@ -6057,11 +6067,6 @@ const bodyTextSchema = z.object({ intro: z.object({
6057
6067
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
6058
6068
  headingSize: bodyTextIntroTypographySizeSchema.optional()
6059
6069
  }).optional() }).optional();
6060
- const gradientsSchema = z.object({
6061
- button: z.string().min(1).nullable().optional(),
6062
- hero: z.string().min(1).nullable().optional(),
6063
- background: z.string().min(1).nullable().optional()
6064
- });
6065
6070
  /**
6066
6071
  * Testimonial quote-mark treatment, owned by the site style (analogous to the
6067
6072
  * accordion icon). `style` is the coarse selector; the optional fields fine-tune
@@ -6942,6 +6947,12 @@ function cardRoleFromLegacyVocabulary(value) {
6942
6947
  */
6943
6948
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
6944
6949
  //#endregion
6950
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
6951
+ const defaultHeaderBrandPreferences = {
6952
+ brandDisplay: "auto",
6953
+ logoSize: "auto"
6954
+ };
6955
+ //#endregion
6945
6956
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
6946
6957
  function boundaryRuntimeMetrics(family, size, heightExpression) {
6947
6958
  return {
@@ -7841,27 +7852,6 @@ function asHeaderStyleId(value) {
7841
7852
  return value;
7842
7853
  }
7843
7854
  //#endregion
7844
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
7845
- const clearSplitInteractionPalette = defineLookOptionGroup({
7846
- id: "interaction-palette",
7847
- label: "Hover colour",
7848
- defaultOptionId: "accent",
7849
- options: [
7850
- {
7851
- id: "accent",
7852
- label: "Accent"
7853
- },
7854
- {
7855
- id: "primary",
7856
- label: "Primary"
7857
- },
7858
- {
7859
- id: "secondary",
7860
- label: "Secondary"
7861
- }
7862
- ]
7863
- });
7864
- //#endregion
7865
7855
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
7866
7856
  const titleOnlyLogoAccommodation = {
7867
7857
  pattern: "title-only",
@@ -7981,6 +7971,12 @@ const overlayLogoAccommodations = [
7981
7971
  inlineMarkWithTitleLogoAccommodation,
7982
7972
  unbackedOverlayLogoAccommodation
7983
7973
  ];
7974
+ const allCuratedLogoAccommodations = [
7975
+ ...inlineClassicLogoAccommodations,
7976
+ ...centeredLogoAccommodations,
7977
+ ...overlayLogoAccommodations
7978
+ ];
7979
+ new Set(allCuratedLogoAccommodations.filter((option) => option.providesBacking === true).map((option) => option.pattern));
7984
7980
  const headerLayoutCatalog = defineExactCatalog()([
7985
7981
  {
7986
7982
  id: asHeaderLayoutId("classic"),
@@ -8021,43 +8017,37 @@ const headerStyleCatalog = defineExactCatalog()([
8021
8017
  id: asHeaderStyleId("minimal"),
8022
8018
  label: "Minimal",
8023
8019
  description: "Quiet surface with simple color-change navigation.",
8024
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8025
- navTypography: "plain"
8020
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8026
8021
  },
8027
8022
  {
8028
8023
  id: asHeaderStyleId("fine-line"),
8029
8024
  label: "Seamless",
8030
8025
  description: "Borderless surface with underline hover for a quieter page transition.",
8031
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8032
- navTypography: "plain"
8026
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8033
8027
  },
8034
8028
  {
8035
8029
  id: asHeaderStyleId("soft-bar"),
8036
8030
  label: "Soft Bar",
8037
8031
  description: "Soft tinted surface with gentle pill hover states.",
8038
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8039
- navTypography: "plain"
8032
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8040
8033
  },
8041
8034
  {
8042
8035
  id: asHeaderStyleId("pill-nav"),
8043
8036
  label: "Pill Nav",
8044
8037
  description: "A calm pill navigation rail over a neutral header.",
8045
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8046
- navTypography: "plain"
8038
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8047
8039
  },
8048
8040
  {
8049
8041
  id: asHeaderStyleId("brand-bar"),
8050
8042
  label: "Brand Bar",
8051
8043
  description: "Solid brand surface with high-contrast navigation.",
8052
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8053
- navTypography: "brand-caps"
8044
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8054
8045
  },
8055
8046
  {
8056
8047
  id: asHeaderStyleId("brand-underline"),
8057
8048
  label: "Brand Underline",
8058
8049
  description: "Brand surface with underline-grow navigation.",
8059
- supportedLayoutIds: supportedLayouts(["classic"]),
8060
- navTypography: "brand-caps"
8050
+ supportedLayoutIds: supportedLayouts(["classic"])
8061
8051
  },
8062
8052
  {
8063
8053
  id: asHeaderStyleId("brand-pill"),
@@ -8067,73 +8057,82 @@ const headerStyleCatalog = defineExactCatalog()([
8067
8057
  "classic",
8068
8058
  "centered",
8069
8059
  "floating"
8070
- ]),
8071
- navTypography: "brand-caps"
8060
+ ])
8072
8061
  },
8073
8062
  {
8074
8063
  id: asHeaderStyleId("brand-capsule"),
8075
8064
  label: "Brand Capsule",
8076
8065
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
8077
- supportedLayoutIds: supportedLayouts(["classic"]),
8078
- navTypography: "quiet-caps"
8066
+ supportedLayoutIds: supportedLayouts(["classic"])
8079
8067
  },
8080
8068
  {
8081
8069
  id: asHeaderStyleId("serif-line"),
8082
8070
  label: "Serif Line",
8083
8071
  description: "Typographic logo treatment with understated underline navigation.",
8084
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8085
- navTypography: "heading"
8072
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8086
8073
  },
8087
8074
  {
8088
8075
  id: asHeaderStyleId("flat-tabs"),
8089
8076
  label: "Flat Tabs",
8090
8077
  description: "Flat block hover and active states with a Swiss utility feel.",
8091
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
8092
- navTypography: "quiet-caps"
8078
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
8093
8079
  },
8094
8080
  {
8095
8081
  id: asHeaderStyleId("glass"),
8096
8082
  label: "Glass",
8097
8083
  description: "Translucent chrome with frosted navigation backing.",
8098
- supportedLayoutIds: supportedLayouts(["floating"]),
8099
- navTypography: "plain"
8084
+ supportedLayoutIds: supportedLayouts(["floating"])
8100
8085
  },
8101
8086
  {
8102
8087
  id: asHeaderStyleId("minimal-surface"),
8103
8088
  label: "Clear Split",
8104
8089
  description: "Floating logo with transparent navigation and no shared shell.",
8105
- supportedLayoutIds: supportedLayouts(["floating"]),
8106
- navTypography: "plain",
8107
- openingForegroundTarget: "all",
8108
- scrollTreatment: "contrast-glass",
8109
- interactionPalette: clearSplitInteractionPalette
8090
+ supportedLayoutIds: supportedLayouts(["floating"])
8110
8091
  },
8111
8092
  {
8112
8093
  id: asHeaderStyleId("soft-shell"),
8113
8094
  label: "Soft Shell",
8114
8095
  description: "Floating rounded shell with soft pill navigation states.",
8115
- supportedLayoutIds: supportedLayouts(["floating"]),
8116
- navTypography: "plain"
8096
+ supportedLayoutIds: supportedLayouts(["floating"])
8117
8097
  },
8118
8098
  {
8119
8099
  id: asHeaderStyleId("split-glass"),
8120
8100
  label: "Split Glass",
8121
8101
  description: "Logo floats independently while the navigation sits in a glass rail.",
8122
- supportedLayoutIds: supportedLayouts(["floating"]),
8123
- navTypography: "quiet-caps",
8124
- openingForegroundTarget: "brand-only"
8102
+ supportedLayoutIds: supportedLayouts(["floating"])
8125
8103
  },
8126
8104
  {
8127
8105
  id: asHeaderStyleId("split-pill"),
8128
8106
  label: "Split Pill",
8129
8107
  description: "Logo floats independently with a soft pill-backed navigation rail.",
8130
- supportedLayoutIds: supportedLayouts(["floating"]),
8131
- navTypography: "heading",
8132
- openingForegroundTarget: "brand-only"
8108
+ supportedLayoutIds: supportedLayouts(["floating"])
8133
8109
  }
8134
8110
  ]);
8135
8111
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
8136
8112
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
8113
+ defineLookOptionGroup({
8114
+ id: "interaction-palette",
8115
+ label: "Hover colour",
8116
+ defaultOptionId: "accent",
8117
+ options: [
8118
+ {
8119
+ id: "accent",
8120
+ label: "Accent"
8121
+ },
8122
+ {
8123
+ id: "primary",
8124
+ label: "Primary"
8125
+ },
8126
+ {
8127
+ id: "secondary",
8128
+ label: "Secondary"
8129
+ },
8130
+ {
8131
+ id: headerInteractionQuietPalette,
8132
+ label: "Text only"
8133
+ }
8134
+ ]
8135
+ });
8137
8136
  //#endregion
8138
8137
  //#region ../theme-core/src/site-styles/footerLooks.ts
8139
8138
  function asFooterLookId(value) {
@@ -10552,6 +10551,67 @@ const blockDesignFallback = {
10552
10551
  };
10553
10552
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
10554
10553
  //#endregion
10554
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
10555
+ const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
10556
+ const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
10557
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
10558
+ function parseSiteChromeBackgroundColorToken(value) {
10559
+ const token = parseBackgroundAppearanceColorToken(value);
10560
+ return token ? token : null;
10561
+ }
10562
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
10563
+ return tokenNames.flatMap((name) => {
10564
+ const token = parseSiteChromeBackgroundColorToken(name);
10565
+ return token ? [token] : [];
10566
+ });
10567
+ }
10568
+ //#endregion
10569
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
10570
+ const headerNavTypographyPreferenceValues = [
10571
+ "inherit",
10572
+ "body",
10573
+ "heading"
10574
+ ];
10575
+ const headerNavFontSizePreferenceValues = [
10576
+ "inherit",
10577
+ "sm",
10578
+ "base",
10579
+ "lg",
10580
+ "xl"
10581
+ ];
10582
+ const defaultHeaderNavPreferences = {
10583
+ typography: "inherit",
10584
+ fontSize: "inherit",
10585
+ interactionPalette: "recommended"
10586
+ };
10587
+ //#endregion
10588
+ //#region ../theme-core/src/site-styles/headerBrandPresentation.ts
10589
+ /**
10590
+ * Whether the header wears a brand presentation at all (#1318 Phase 4c).
10591
+ *
10592
+ * `applyHeaderBrandPresentation` is unconditional today: given a logo context
10593
+ * it always writes a `logo` object carrying a resolved display, size and
10594
+ * accommodation. That makes "this header has no brand presentation block" —
10595
+ * which is what several live sites persist, including one whose site *does*
10596
+ * have a logo asset — a state the preference record could not express, so a
10597
+ * recompile would silently give the site a logo treatment it has never
10598
+ * rendered.
10599
+ *
10600
+ * This is the third field in this phase with that shape, after the interaction
10601
+ * palette and the nav text size: the persisted bytes carry intent the reader
10602
+ * cannot say, so the recompile "corrects" it. The fix is the same one — widen
10603
+ * the closed vocabulary with a named member and derive it by baseline
10604
+ * comparison — and it is a *widening*, not a restyle: `'recommended'` is the
10605
+ * default and reproduces today's behaviour exactly, so no row whose bytes carry
10606
+ * a presentation compiles differently for `'plain'` existing.
10607
+ *
10608
+ * `'plain'` is deliberately not "preserve whatever bytes are there". It is a
10609
+ * constructive instruction — *write no presentation block* — so Phase 4e's
10610
+ * compiler, which builds the header from nothing, can produce it.
10611
+ */
10612
+ const headerBrandPresentationValues = ["recommended", "plain"];
10613
+ defaultHeaderBrandPreferences.brandDisplay, defaultHeaderBrandPreferences.logoSize, defaultHeaderNavPreferences.typography, defaultHeaderNavPreferences.fontSize, defaultHeaderNavPreferences.interactionPalette;
10614
+ //#endregion
10555
10615
  //#region ../theme-core/src/site-styles/generatedSchemas.ts
10556
10616
  function uniqueNonEmpty(values) {
10557
10617
  const uniqueValues = [...new Set(values)];
@@ -10620,6 +10680,56 @@ z.object({
10620
10680
  blocks: z.array(generatedPageDesignBlockIntentSchema)
10621
10681
  }).strict();
10622
10682
  //#endregion
10683
+ //#region ../theme-core/src/site-styles/headerPreferencesPersistence.ts
10684
+ const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
10685
+ const token = parseSiteChromeBackgroundColorToken(value);
10686
+ if (token === null) {
10687
+ ctx.addIssue({
10688
+ code: "custom",
10689
+ message: "Unknown site chrome background colour token"
10690
+ });
10691
+ return z.NEVER;
10692
+ }
10693
+ return token;
10694
+ });
10695
+ const backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
10696
+ kind: z.literal("color"),
10697
+ token: backgroundColorTokenSchema
10698
+ }).strict()]);
10699
+ const logoTextIntentSchema = z.object({
10700
+ mobileMaxWidth: z.enum([
10701
+ "xs",
10702
+ "sm",
10703
+ "md"
10704
+ ]).optional(),
10705
+ mobileWrapLines: z.union([z.literal(1), z.literal(2)]).optional(),
10706
+ hideOnShrink: z.boolean().optional()
10707
+ }).strict();
10708
+ const structureSchema = z.object({
10709
+ positioning: z.union([z.literal("inherit"), z.enum(headerPositioningValues)]),
10710
+ shrinkOnScroll: z.union([z.literal("inherit"), z.boolean()]),
10711
+ logoText: z.union([
10712
+ z.literal("inherit"),
10713
+ z.literal("none"),
10714
+ logoTextIntentSchema
10715
+ ])
10716
+ }).strict();
10717
+ const headerPreferencesShape = {
10718
+ brandPresentation: z.enum(headerBrandPresentationValues),
10719
+ brandDisplay: z.enum(brandDisplayModeValues),
10720
+ logoSize: z.enum(logoSizePolicyValues),
10721
+ navFontRole: z.enum(headerNavTypographyPreferenceValues),
10722
+ navTextSize: z.enum(headerNavFontSizePreferenceValues),
10723
+ interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
10724
+ background: backgroundOverrideSchema,
10725
+ structure: structureSchema
10726
+ };
10727
+ z.object(headerPreferencesShape).strict();
10728
+ z.object(headerPreferencesShape).omit({
10729
+ brandPresentation: true,
10730
+ structure: true
10731
+ }).strict();
10732
+ //#endregion
10623
10733
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
10624
10734
  const nonEmptyStringSchema = z.string().min(1);
10625
10735
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -10721,21 +10831,6 @@ function collectBlockSequenceIssues(snapshots) {
10721
10831
  return issues;
10722
10832
  }
10723
10833
  //#endregion
10724
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
10725
- const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
10726
- const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
10727
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
10728
- function parseSiteChromeBackgroundColorToken(value) {
10729
- const token = parseBackgroundAppearanceColorToken(value);
10730
- return token ? token : null;
10731
- }
10732
- function toSiteChromeBackgroundColorTokens(tokenNames) {
10733
- return tokenNames.flatMap((name) => {
10734
- const token = parseSiteChromeBackgroundColorToken(name);
10735
- return token ? [token] : [];
10736
- });
10737
- }
10738
- //#endregion
10739
10834
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
10740
10835
  const themeTokenRecipeOptions = {
10741
10836
  palette: [
@@ -11114,6 +11209,9 @@ function getZonedDateTimeParts(date, timeZone) {
11114
11209
  function formatDateKey(date) {
11115
11210
  return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
11116
11211
  }
11212
+ function toBookingTimeZone(timeZone) {
11213
+ return getSafeTimeZone(timeZone);
11214
+ }
11117
11215
  function parseUtcIsoDateTimeString(value) {
11118
11216
  const normalized = value.trim();
11119
11217
  const hasUtcSuffix = normalized.endsWith("Z");
@@ -11424,7 +11522,6 @@ const ALLOWED_TRANSFORM_IDS = [
11424
11522
  "layout.footerRootClass",
11425
11523
  "layout.headerRootStyle",
11426
11524
  "layout.headerSectionBackground",
11427
- "layout.classicNavMode",
11428
11525
  "layout.footerRootStyle",
11429
11526
  "ui.headerNavLinkClass",
11430
11527
  "ui.headingClassFromAlignment",
@@ -18850,18 +18947,7 @@ const classicLayout = inline({
18850
18947
  logoRow,
18851
18948
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
18852
18949
  headerCta
18853
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
18854
- const classicCenteredNavLayout = inline({
18855
- className: bindProp("$root.theme.header.maxWidth", {
18856
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
18857
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
18858
- }),
18859
- align: "center"
18860
- }, [
18861
- logoRow,
18862
- createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
18863
- headerCta
18864
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
18950
+ ], when("$root.theme.header.variant", { equals: "classic" }));
18865
18951
  const centeredLayout = stack({
18866
18952
  gap: "md",
18867
18953
  align: "center",
@@ -18926,7 +19012,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
18926
19012
  }, [
18927
19013
  mobileHeaderBar,
18928
19014
  classicLayout,
18929
- classicCenteredNavLayout,
18930
19015
  centeredLayout,
18931
19016
  floatingLayout,
18932
19017
  mobileOverlay
@@ -21722,7 +21807,7 @@ const eventDisplayFields = [
21722
21807
  {
21723
21808
  id: "showCapacity",
21724
21809
  type: "boolean",
21725
- label: "Show available spots",
21810
+ label: "Show available places",
21726
21811
  description: "Display remaining capacity",
21727
21812
  required: false,
21728
21813
  defaultValue: true,
@@ -22021,7 +22106,7 @@ function planEventRegistrationScope(input) {
22021
22106
  };
22022
22107
  }
22023
22108
  //#endregion
22024
- //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
22109
+ //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
22025
22110
  function isRecord$5(value) {
22026
22111
  return typeof value === "object" && value !== null && !Array.isArray(value);
22027
22112
  }
@@ -22039,7 +22124,7 @@ function resolveRuntimeEventDestination(event) {
22039
22124
  };
22040
22125
  }
22041
22126
  //#endregion
22042
- //#region ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
22127
+ //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
22043
22128
  const DEFAULT_EVENT_CURRENCY = "USD";
22044
22129
  function resolveRuntimeEventPricing(event) {
22045
22130
  if (isPublicEventPricing(event.pricing)) return event.pricing;
@@ -22719,7 +22804,7 @@ const eventRegistrationBlockDefinition = {
22719
22804
  {
22720
22805
  id: "showCapacity",
22721
22806
  type: "boolean",
22722
- label: "Show available spots",
22807
+ label: "Show available places",
22723
22808
  description: "Display remaining capacity",
22724
22809
  required: false,
22725
22810
  defaultValue: true,
@@ -23280,7 +23365,11 @@ const eventSpotlightBlockDefinition = {
23280
23365
  } }
23281
23366
  };
23282
23367
  //#endregion
23283
- //#region ../blocks/src/system/runtime/nodes/events/shared/utils.ts
23368
+ //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
23369
+ /**
23370
+ * Layout classes for event listing containers and cards. Presentation
23371
+ * plumbing rather than event domain logic, so it lives beside the components.
23372
+ */
23284
23373
  /**
23285
23374
  * Column class mappings for grid layouts, derived from the canonical
23286
23375
  * responsive column ladder (see gridUserColumnLadder).
@@ -23401,7 +23490,8 @@ const eventCollectionSourceSchemaShape = {
23401
23490
  buttonVariant: eventButtonVariantSchema.optional(),
23402
23491
  buttonText: z.string().optional(),
23403
23492
  emptyMessage: z.string().optional(),
23404
- className: z.string().optional()
23493
+ className: z.string().optional(),
23494
+ bookingTimeZone: z.string().optional()
23405
23495
  };
23406
23496
  const eventCollectionDisplaySchemaShape = {
23407
23497
  events: z.array(publicEventSchema),
@@ -23436,7 +23526,15 @@ const eventCollectionHydrationSchema = z.object({
23436
23526
  prefetchedEvents: z.boolean(),
23437
23527
  eventSurface: eventSurfaceScopeSchema$1,
23438
23528
  filterEventPresets: z.string().nullable(),
23439
- scheduleScope: eventScheduleScopeSchema$1
23529
+ scheduleScope: eventScheduleScopeSchema$1,
23530
+ calendarContext: z.object({
23531
+ timeZone: z.string().transform(toBookingTimeZone),
23532
+ initialToday: z.object({
23533
+ year: z.number().int(),
23534
+ month: z.number().int().min(1).max(12),
23535
+ day: z.number().int().min(1).max(31)
23536
+ })
23537
+ })
23440
23538
  });
23441
23539
  function buildEventCollectionDisplay(source) {
23442
23540
  return {
@@ -23481,14 +23579,19 @@ function buildEventCollectionPresentationDisplay(source) {
23481
23579
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
23482
23580
  };
23483
23581
  }
23484
- function buildEventCollectionHydration(source) {
23582
+ function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
23583
+ const timeZone = toBookingTimeZone(source.bookingTimeZone);
23485
23584
  return {
23486
23585
  siteId: source.siteId,
23487
23586
  stage: source.stage,
23488
23587
  prefetchedEvents: source.events != null,
23489
23588
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
23490
23589
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
23491
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope)
23590
+ scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
23591
+ calendarContext: {
23592
+ timeZone,
23593
+ initialToday: getLocalScheduleDate(now, timeZone)
23594
+ }
23492
23595
  };
23493
23596
  }
23494
23597
  //#endregion
@@ -24598,7 +24701,7 @@ const eventCalendarAdditionalFields = [
24598
24701
  {
24599
24702
  id: "showCapacity",
24600
24703
  type: "boolean",
24601
- label: "Show available spots",
24704
+ label: "Show available places",
24602
24705
  description: "Display remaining capacity on event cards and timetable cells",
24603
24706
  required: false,
24604
24707
  defaultValue: true,
@@ -12,7 +12,7 @@ import * as crypto from "crypto";
12
12
  * 1. This constant
13
13
  * 2. The "version" field in package.json
14
14
  */
15
- const SDK_VERSION = "0.135.1";
15
+ const SDK_VERSION = "0.137.0";
16
16
  //#endregion
17
17
  //#region src/constants.ts
18
18
  /**