@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
@@ -1199,6 +1199,13 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1199
1199
  //#endregion
1200
1200
  //#region ../api/src/publicEventEndpointDefinitions.ts
1201
1201
  const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1202
+ resolvePublicEventCheckoutReturn: {
1203
+ path: "/public/sites/{siteId}/events/checkout-return",
1204
+ method: "POST",
1205
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
1206
+ auth: "public",
1207
+ responseKind: "json"
1208
+ },
1202
1209
  getPublicEventRegistrationOptions: {
1203
1210
  path: "/public/sites/{siteId}/events/registration-options",
1204
1211
  method: "POST",
@@ -1583,6 +1590,83 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1583
1590
  errors: ["validation:invalid_input", "server:internal_error"]
1584
1591
  }
1585
1592
  });
1593
+ //#endregion
1594
+ //#region ../api/src/sdkMediaEndpointDefinitions.ts
1595
+ const SDK_MEDIA_ENDPOINT_DEFINITIONS = {
1596
+ sdkMediaExists: {
1597
+ path: "/sdk/{siteId}/media/exists",
1598
+ method: "POST",
1599
+ errors: ["validation:invalid_input"],
1600
+ auth: "service",
1601
+ responseKind: "json"
1602
+ },
1603
+ sdkMediaFindByChecksum: {
1604
+ path: "/sdk/{siteId}/media/find-by-checksum",
1605
+ method: "POST",
1606
+ errors: ["server:internal_error"],
1607
+ auth: "service",
1608
+ responseKind: "json"
1609
+ },
1610
+ sdkMediaResolve: {
1611
+ path: "/sdk/{siteId}/media/resolve",
1612
+ method: "POST",
1613
+ errors: ["server:internal_error"],
1614
+ auth: "service",
1615
+ responseKind: "json"
1616
+ },
1617
+ sdkMediaList: {
1618
+ path: "/sdk/{siteId}/media",
1619
+ method: "GET",
1620
+ auth: "service",
1621
+ responseKind: "json"
1622
+ },
1623
+ sdkMediaDownload: {
1624
+ path: "/sdk/{siteId}/media/{identifier}/download",
1625
+ method: "GET",
1626
+ auth: "service",
1627
+ responseKind: "json"
1628
+ },
1629
+ sdkMediaDeletePreview: {
1630
+ path: "/sdk/{siteId}/media/{identifier}/delete-preview",
1631
+ method: "POST",
1632
+ auth: "service",
1633
+ responseKind: "json"
1634
+ },
1635
+ sdkMediaDeleteApply: {
1636
+ path: "/sdk/{siteId}/media/{identifier}",
1637
+ method: "DELETE",
1638
+ auth: "service",
1639
+ responseKind: "json"
1640
+ },
1641
+ sdkMediaUploadUrl: {
1642
+ path: "/sdk/{siteId}/media/upload-url",
1643
+ method: "POST",
1644
+ errors: [
1645
+ "resource:not_found",
1646
+ "validation:invalid_input",
1647
+ "resource:conflict",
1648
+ "validation:payload_too_large",
1649
+ "billing:plan_limit_exceeded",
1650
+ "server:internal_error"
1651
+ ],
1652
+ auth: "service",
1653
+ responseKind: "json"
1654
+ },
1655
+ sdkMediaUploadFinalize: {
1656
+ path: "/sdk/{siteId}/media/upload",
1657
+ method: "POST",
1658
+ errors: [
1659
+ "resource:not_found",
1660
+ "validation:invalid_input",
1661
+ "resource:conflict",
1662
+ "validation:payload_too_large",
1663
+ "billing:plan_limit_exceeded",
1664
+ "server:internal_error"
1665
+ ],
1666
+ auth: "service",
1667
+ responseKind: "json"
1668
+ }
1669
+ };
1586
1670
  ({
1587
1671
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
1588
1672
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
@@ -1591,7 +1675,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1591
1675
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1592
1676
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1593
1677
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
1594
- }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
1678
+ }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
1595
1679
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
1596
1680
  z.object({
1597
1681
  accessToken: z.string().min(1).max(4096),
@@ -1930,6 +2014,9 @@ function getZonedDateTimeParts(date, timeZone) {
1930
2014
  function formatDateKey(date) {
1931
2015
  return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
1932
2016
  }
2017
+ function toBookingTimeZone(timeZone) {
2018
+ return getSafeTimeZone(timeZone);
2019
+ }
1933
2020
  function parseUtcIsoDateTimeString(value) {
1934
2021
  const normalized = value.trim();
1935
2022
  const hasUtcSuffix = normalized.endsWith("Z");
@@ -8446,6 +8533,11 @@ const gradientConfigSchema = z.object({
8446
8533
  position: z.string().optional(),
8447
8534
  stops: z.array(gradientStopSchema).min(2)
8448
8535
  });
8536
+ const gradientsSchema = z.object({
8537
+ button: z.string().min(1).nullable().optional(),
8538
+ hero: z.string().min(1).nullable().optional(),
8539
+ background: z.string().min(1).nullable().optional()
8540
+ });
8449
8541
  //#endregion
8450
8542
  //#region ../theme-core/src/interactive/baseSchema.ts
8451
8543
  /**
@@ -9146,12 +9238,8 @@ const legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
9146
9238
  * `@riverbankcms/api` is `z.input<typeof themeSchema>`, so a widened input here
9147
9239
  * would leak straight into a public type.
9148
9240
  *
9149
- * Not every read of a persisted theme goes through the schema:
9150
- * `resolveRuntimeTheme` in
9151
- * `apps/dashboard/src/server/services/sites/runtimeSiteResponse.ts` returns the
9152
- * raw database JSON asserted as `Theme` with no parse, so a theme still
9153
- * carrying a legacy spelling reaches the theme editor un-aliased. That gap
9154
- * predates this alias and is harmless while persisted usage is zero.
9241
+ * Persisted runtime themes are admitted through `parseThemeForPersistence`
9242
+ * before reaching consumers, so legacy spellings normalize at that boundary.
9155
9243
  */
9156
9244
  const headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
9157
9245
  const BREAKPOINT_LG = 1024;
@@ -9203,11 +9291,30 @@ const headerContainerSchema = z.object({
9203
9291
  tint: z.string().nullable().optional(),
9204
9292
  opacity: z.number().min(0).max(1).default(.12)
9205
9293
  }).optional();
9206
- const headerInteractionPaletteSchema = z.enum([
9294
+ //#endregion
9295
+ //#region ../theme-core/src/header/interactionPalette.ts
9296
+ /**
9297
+ * The palettes that fill the nav link with a colour on hover and focus. Each
9298
+ * one names a background/foreground token pair.
9299
+ */
9300
+ const headerInteractionPillPaletteValues = [
9207
9301
  "primary",
9208
9302
  "secondary",
9209
9303
  "accent"
9210
- ]);
9304
+ ];
9305
+ /**
9306
+ * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
9307
+ * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
9308
+ *
9309
+ * It exists because "a colour change on hover, no filled background" was not
9310
+ * expressible in the vocabulary, and it is what
9311
+ * `anna-raven-therapy-and-yoga` and `kirtan-lucy` have rendered since before
9312
+ * the palette existed. Without it those two rows can only be classified as a
9313
+ * conscious visual change.
9314
+ */
9315
+ const headerInteractionQuietPalette = "quiet";
9316
+ const headerInteractionPaletteValues = [...headerInteractionPillPaletteValues, headerInteractionQuietPalette];
9317
+ const headerInteractionPaletteSchema = z.enum(headerInteractionPaletteValues);
9211
9318
  //#endregion
9212
9319
  //#region ../theme-core/src/boxBackgroundSchema.ts
9213
9320
  const boxBackgroundOverlaySchema = z.preprocess(normalizeAuthoringOpacity, z.discriminatedUnion("type", [
@@ -9589,11 +9696,12 @@ const inputStyle = z.object({
9589
9696
  ]),
9590
9697
  label: z.enum(["inside", "above"])
9591
9698
  });
9592
- const headerPositioning = z.enum([
9699
+ const headerPositioningValues = [
9593
9700
  "static",
9594
9701
  "sticky",
9595
9702
  "fixed"
9596
- ]);
9703
+ ];
9704
+ const headerPositioning = z.enum(headerPositioningValues);
9597
9705
  const headerNavStyle = z.enum([
9598
9706
  "minimal",
9599
9707
  "underline",
@@ -9610,7 +9718,6 @@ const navFontWeight = z.enum([
9610
9718
  "bold"
9611
9719
  ]);
9612
9720
  const headerMaxWidth = z.enum(["container", "full"]);
9613
- const headerBarFrame = z.enum(["full-bleed", "inset-shell"]);
9614
9721
  const headerBorderSchema = componentBorderSchema.extend({ position: z.enum([
9615
9722
  "bottom",
9616
9723
  "top",
@@ -9639,12 +9746,6 @@ const headerLogoTextSchema = z.object({
9639
9746
  ]).optional(),
9640
9747
  hideOnShrink: z.boolean().optional()
9641
9748
  }).optional();
9642
- const navEffectsSchema = z.object({
9643
- underlineGradient: z.boolean().default(false),
9644
- glow: z.boolean().default(false),
9645
- glowColor: z.string().optional(),
9646
- neumorphic: z.boolean().default(false)
9647
- }).optional();
9648
9749
  const dropdownStyleSchema = z.object({
9649
9750
  background: themeColorTokenSchema.default("surface"),
9650
9751
  textColor: themeColorTokenSchema.default("text"),
@@ -9735,10 +9836,8 @@ const headerSchema = z.object({
9735
9836
  variant: headerVariantWithLegacyAliasSchema,
9736
9837
  positioning: headerPositioning,
9737
9838
  shrinkOnScroll: z.boolean(),
9738
- maxWidth: headerMaxWidth,
9739
- barFrame: headerBarFrame.optional(),
9839
+ maxWidth: headerMaxWidth.default("container"),
9740
9840
  scrollTreatment: headerScrollTreatmentSchema,
9741
- logoOverride: mediaSchema.nullable().optional(),
9742
9841
  background: headerBackgroundSchema.default({
9743
9842
  type: "color",
9744
9843
  color: "surface"
@@ -9750,13 +9849,11 @@ const headerSchema = z.object({
9750
9849
  navFontRole: z.enum(["body", "heading"]).optional(),
9751
9850
  navTextSize: navLinkStyleSchema.shape.textSize,
9752
9851
  interactionPalette: headerInteractionPaletteSchema.optional(),
9753
- navPlacement: z.enum(["end", "center"]).optional(),
9754
9852
  container: headerContainerSchema,
9755
9853
  border: headerBorderSchema,
9756
9854
  shadow: componentShadowSchema.optional(),
9757
9855
  logo: logoStyleSchema,
9758
9856
  logoText: headerLogoTextSchema,
9759
- navEffects: navEffectsSchema,
9760
9857
  navContainer: navContainerSchema,
9761
9858
  navLinkStyle: navLinkStyleSchema.optional(),
9762
9859
  ctaGap: headerCtaGapSchema.optional(),
@@ -9938,11 +10035,6 @@ const bodyTextSchema = z.object({ intro: z.object({
9938
10035
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
9939
10036
  headingSize: bodyTextIntroTypographySizeSchema.optional()
9940
10037
  }).optional() }).optional();
9941
- const gradientsSchema = z.object({
9942
- button: z.string().min(1).nullable().optional(),
9943
- hero: z.string().min(1).nullable().optional(),
9944
- background: z.string().min(1).nullable().optional()
9945
- });
9946
10038
  /**
9947
10039
  * Testimonial quote-mark treatment, owned by the site style (analogous to the
9948
10040
  * accordion icon). `style` is the coarse selector; the optional fields fine-tune
@@ -10823,6 +10915,12 @@ function cardRoleFromLegacyVocabulary(value) {
10823
10915
  */
10824
10916
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
10825
10917
  //#endregion
10918
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
10919
+ const defaultHeaderBrandPreferences = {
10920
+ brandDisplay: "auto",
10921
+ logoSize: "auto"
10922
+ };
10923
+ //#endregion
10826
10924
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
10827
10925
  function boundaryRuntimeMetrics(family, size, heightExpression) {
10828
10926
  return {
@@ -11749,27 +11847,6 @@ function asHeaderStyleId(value) {
11749
11847
  return value;
11750
11848
  }
11751
11849
  //#endregion
11752
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
11753
- const clearSplitInteractionPalette = defineLookOptionGroup({
11754
- id: "interaction-palette",
11755
- label: "Hover colour",
11756
- defaultOptionId: "accent",
11757
- options: [
11758
- {
11759
- id: "accent",
11760
- label: "Accent"
11761
- },
11762
- {
11763
- id: "primary",
11764
- label: "Primary"
11765
- },
11766
- {
11767
- id: "secondary",
11768
- label: "Secondary"
11769
- }
11770
- ]
11771
- });
11772
- //#endregion
11773
11850
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
11774
11851
  const titleOnlyLogoAccommodation = {
11775
11852
  pattern: "title-only",
@@ -11889,6 +11966,12 @@ const overlayLogoAccommodations = [
11889
11966
  inlineMarkWithTitleLogoAccommodation,
11890
11967
  unbackedOverlayLogoAccommodation
11891
11968
  ];
11969
+ const allCuratedLogoAccommodations = [
11970
+ ...inlineClassicLogoAccommodations,
11971
+ ...centeredLogoAccommodations,
11972
+ ...overlayLogoAccommodations
11973
+ ];
11974
+ new Set(allCuratedLogoAccommodations.filter((option) => option.providesBacking === true).map((option) => option.pattern));
11892
11975
  const headerLayoutCatalog = defineExactCatalog()([
11893
11976
  {
11894
11977
  id: asHeaderLayoutId("classic"),
@@ -11929,43 +12012,37 @@ const headerStyleCatalog = defineExactCatalog()([
11929
12012
  id: asHeaderStyleId("minimal"),
11930
12013
  label: "Minimal",
11931
12014
  description: "Quiet surface with simple color-change navigation.",
11932
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11933
- navTypography: "plain"
12015
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11934
12016
  },
11935
12017
  {
11936
12018
  id: asHeaderStyleId("fine-line"),
11937
12019
  label: "Seamless",
11938
12020
  description: "Borderless surface with underline hover for a quieter page transition.",
11939
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11940
- navTypography: "plain"
12021
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11941
12022
  },
11942
12023
  {
11943
12024
  id: asHeaderStyleId("soft-bar"),
11944
12025
  label: "Soft Bar",
11945
12026
  description: "Soft tinted surface with gentle pill hover states.",
11946
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11947
- navTypography: "plain"
12027
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11948
12028
  },
11949
12029
  {
11950
12030
  id: asHeaderStyleId("pill-nav"),
11951
12031
  label: "Pill Nav",
11952
12032
  description: "A calm pill navigation rail over a neutral header.",
11953
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11954
- navTypography: "plain"
12033
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11955
12034
  },
11956
12035
  {
11957
12036
  id: asHeaderStyleId("brand-bar"),
11958
12037
  label: "Brand Bar",
11959
12038
  description: "Solid brand surface with high-contrast navigation.",
11960
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11961
- navTypography: "brand-caps"
12039
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11962
12040
  },
11963
12041
  {
11964
12042
  id: asHeaderStyleId("brand-underline"),
11965
12043
  label: "Brand Underline",
11966
12044
  description: "Brand surface with underline-grow navigation.",
11967
- supportedLayoutIds: supportedLayouts(["classic"]),
11968
- navTypography: "brand-caps"
12045
+ supportedLayoutIds: supportedLayouts(["classic"])
11969
12046
  },
11970
12047
  {
11971
12048
  id: asHeaderStyleId("brand-pill"),
@@ -11975,73 +12052,82 @@ const headerStyleCatalog = defineExactCatalog()([
11975
12052
  "classic",
11976
12053
  "centered",
11977
12054
  "floating"
11978
- ]),
11979
- navTypography: "brand-caps"
12055
+ ])
11980
12056
  },
11981
12057
  {
11982
12058
  id: asHeaderStyleId("brand-capsule"),
11983
12059
  label: "Brand Capsule",
11984
12060
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
11985
- supportedLayoutIds: supportedLayouts(["classic"]),
11986
- navTypography: "quiet-caps"
12061
+ supportedLayoutIds: supportedLayouts(["classic"])
11987
12062
  },
11988
12063
  {
11989
12064
  id: asHeaderStyleId("serif-line"),
11990
12065
  label: "Serif Line",
11991
12066
  description: "Typographic logo treatment with understated underline navigation.",
11992
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
11993
- navTypography: "heading"
12067
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
11994
12068
  },
11995
12069
  {
11996
12070
  id: asHeaderStyleId("flat-tabs"),
11997
12071
  label: "Flat Tabs",
11998
12072
  description: "Flat block hover and active states with a Swiss utility feel.",
11999
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12000
- navTypography: "quiet-caps"
12073
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12001
12074
  },
12002
12075
  {
12003
12076
  id: asHeaderStyleId("glass"),
12004
12077
  label: "Glass",
12005
12078
  description: "Translucent chrome with frosted navigation backing.",
12006
- supportedLayoutIds: supportedLayouts(["floating"]),
12007
- navTypography: "plain"
12079
+ supportedLayoutIds: supportedLayouts(["floating"])
12008
12080
  },
12009
12081
  {
12010
12082
  id: asHeaderStyleId("minimal-surface"),
12011
12083
  label: "Clear Split",
12012
12084
  description: "Floating logo with transparent navigation and no shared shell.",
12013
- supportedLayoutIds: supportedLayouts(["floating"]),
12014
- navTypography: "plain",
12015
- openingForegroundTarget: "all",
12016
- scrollTreatment: "contrast-glass",
12017
- interactionPalette: clearSplitInteractionPalette
12085
+ supportedLayoutIds: supportedLayouts(["floating"])
12018
12086
  },
12019
12087
  {
12020
12088
  id: asHeaderStyleId("soft-shell"),
12021
12089
  label: "Soft Shell",
12022
12090
  description: "Floating rounded shell with soft pill navigation states.",
12023
- supportedLayoutIds: supportedLayouts(["floating"]),
12024
- navTypography: "plain"
12091
+ supportedLayoutIds: supportedLayouts(["floating"])
12025
12092
  },
12026
12093
  {
12027
12094
  id: asHeaderStyleId("split-glass"),
12028
12095
  label: "Split Glass",
12029
12096
  description: "Logo floats independently while the navigation sits in a glass rail.",
12030
- supportedLayoutIds: supportedLayouts(["floating"]),
12031
- navTypography: "quiet-caps",
12032
- openingForegroundTarget: "brand-only"
12097
+ supportedLayoutIds: supportedLayouts(["floating"])
12033
12098
  },
12034
12099
  {
12035
12100
  id: asHeaderStyleId("split-pill"),
12036
12101
  label: "Split Pill",
12037
12102
  description: "Logo floats independently with a soft pill-backed navigation rail.",
12038
- supportedLayoutIds: supportedLayouts(["floating"]),
12039
- navTypography: "heading",
12040
- openingForegroundTarget: "brand-only"
12103
+ supportedLayoutIds: supportedLayouts(["floating"])
12041
12104
  }
12042
12105
  ]);
12043
12106
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
12044
12107
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
12108
+ defineLookOptionGroup({
12109
+ id: "interaction-palette",
12110
+ label: "Hover colour",
12111
+ defaultOptionId: "accent",
12112
+ options: [
12113
+ {
12114
+ id: "accent",
12115
+ label: "Accent"
12116
+ },
12117
+ {
12118
+ id: "primary",
12119
+ label: "Primary"
12120
+ },
12121
+ {
12122
+ id: "secondary",
12123
+ label: "Secondary"
12124
+ },
12125
+ {
12126
+ id: headerInteractionQuietPalette,
12127
+ label: "Text only"
12128
+ }
12129
+ ]
12130
+ });
12045
12131
  //#endregion
12046
12132
  //#region ../theme-core/src/site-styles/footerLooks.ts
12047
12133
  function asFooterLookId(value) {
@@ -14460,6 +14546,67 @@ const blockDesignFallback = {
14460
14546
  };
14461
14547
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
14462
14548
  //#endregion
14549
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14550
+ const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14551
+ const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14552
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14553
+ function parseSiteChromeBackgroundColorToken(value) {
14554
+ const token = parseBackgroundAppearanceColorToken(value);
14555
+ return token ? token : null;
14556
+ }
14557
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
14558
+ return tokenNames.flatMap((name) => {
14559
+ const token = parseSiteChromeBackgroundColorToken(name);
14560
+ return token ? [token] : [];
14561
+ });
14562
+ }
14563
+ //#endregion
14564
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
14565
+ const headerNavTypographyPreferenceValues = [
14566
+ "inherit",
14567
+ "body",
14568
+ "heading"
14569
+ ];
14570
+ const headerNavFontSizePreferenceValues = [
14571
+ "inherit",
14572
+ "sm",
14573
+ "base",
14574
+ "lg",
14575
+ "xl"
14576
+ ];
14577
+ const defaultHeaderNavPreferences = {
14578
+ typography: "inherit",
14579
+ fontSize: "inherit",
14580
+ interactionPalette: "recommended"
14581
+ };
14582
+ //#endregion
14583
+ //#region ../theme-core/src/site-styles/headerBrandPresentation.ts
14584
+ /**
14585
+ * Whether the header wears a brand presentation at all (#1318 Phase 4c).
14586
+ *
14587
+ * `applyHeaderBrandPresentation` is unconditional today: given a logo context
14588
+ * it always writes a `logo` object carrying a resolved display, size and
14589
+ * accommodation. That makes "this header has no brand presentation block" —
14590
+ * which is what several live sites persist, including one whose site *does*
14591
+ * have a logo asset — a state the preference record could not express, so a
14592
+ * recompile would silently give the site a logo treatment it has never
14593
+ * rendered.
14594
+ *
14595
+ * This is the third field in this phase with that shape, after the interaction
14596
+ * palette and the nav text size: the persisted bytes carry intent the reader
14597
+ * cannot say, so the recompile "corrects" it. The fix is the same one — widen
14598
+ * the closed vocabulary with a named member and derive it by baseline
14599
+ * comparison — and it is a *widening*, not a restyle: `'recommended'` is the
14600
+ * default and reproduces today's behaviour exactly, so no row whose bytes carry
14601
+ * a presentation compiles differently for `'plain'` existing.
14602
+ *
14603
+ * `'plain'` is deliberately not "preserve whatever bytes are there". It is a
14604
+ * constructive instruction — *write no presentation block* — so Phase 4e's
14605
+ * compiler, which builds the header from nothing, can produce it.
14606
+ */
14607
+ const headerBrandPresentationValues = ["recommended", "plain"];
14608
+ defaultHeaderBrandPreferences.brandDisplay, defaultHeaderBrandPreferences.logoSize, defaultHeaderNavPreferences.typography, defaultHeaderNavPreferences.fontSize, defaultHeaderNavPreferences.interactionPalette;
14609
+ //#endregion
14463
14610
  //#region ../theme-core/src/site-styles/generatedSchemas.ts
14464
14611
  function uniqueNonEmpty(values) {
14465
14612
  const uniqueValues = [...new Set(values)];
@@ -14528,6 +14675,56 @@ z.object({
14528
14675
  blocks: z.array(generatedPageDesignBlockIntentSchema)
14529
14676
  }).strict();
14530
14677
  //#endregion
14678
+ //#region ../theme-core/src/site-styles/headerPreferencesPersistence.ts
14679
+ const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
14680
+ const token = parseSiteChromeBackgroundColorToken(value);
14681
+ if (token === null) {
14682
+ ctx.addIssue({
14683
+ code: "custom",
14684
+ message: "Unknown site chrome background colour token"
14685
+ });
14686
+ return z.NEVER;
14687
+ }
14688
+ return token;
14689
+ });
14690
+ const backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
14691
+ kind: z.literal("color"),
14692
+ token: backgroundColorTokenSchema
14693
+ }).strict()]);
14694
+ const logoTextIntentSchema = z.object({
14695
+ mobileMaxWidth: z.enum([
14696
+ "xs",
14697
+ "sm",
14698
+ "md"
14699
+ ]).optional(),
14700
+ mobileWrapLines: z.union([z.literal(1), z.literal(2)]).optional(),
14701
+ hideOnShrink: z.boolean().optional()
14702
+ }).strict();
14703
+ const structureSchema = z.object({
14704
+ positioning: z.union([z.literal("inherit"), z.enum(headerPositioningValues)]),
14705
+ shrinkOnScroll: z.union([z.literal("inherit"), z.boolean()]),
14706
+ logoText: z.union([
14707
+ z.literal("inherit"),
14708
+ z.literal("none"),
14709
+ logoTextIntentSchema
14710
+ ])
14711
+ }).strict();
14712
+ const headerPreferencesShape = {
14713
+ brandPresentation: z.enum(headerBrandPresentationValues),
14714
+ brandDisplay: z.enum(brandDisplayModeValues),
14715
+ logoSize: z.enum(logoSizePolicyValues),
14716
+ navFontRole: z.enum(headerNavTypographyPreferenceValues),
14717
+ navTextSize: z.enum(headerNavFontSizePreferenceValues),
14718
+ interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
14719
+ background: backgroundOverrideSchema,
14720
+ structure: structureSchema
14721
+ };
14722
+ z.object(headerPreferencesShape).strict();
14723
+ z.object(headerPreferencesShape).omit({
14724
+ brandPresentation: true,
14725
+ structure: true
14726
+ }).strict();
14727
+ //#endregion
14531
14728
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
14532
14729
  const nonEmptyStringSchema = z.string().min(1);
14533
14730
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -14629,21 +14826,6 @@ function collectBlockSequenceIssues(snapshots) {
14629
14826
  return issues;
14630
14827
  }
14631
14828
  //#endregion
14632
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14633
- const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14634
- const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14635
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14636
- function parseSiteChromeBackgroundColorToken(value) {
14637
- const token = parseBackgroundAppearanceColorToken(value);
14638
- return token ? token : null;
14639
- }
14640
- function toSiteChromeBackgroundColorTokens(tokenNames) {
14641
- return tokenNames.flatMap((name) => {
14642
- const token = parseSiteChromeBackgroundColorToken(name);
14643
- return token ? [token] : [];
14644
- });
14645
- }
14646
- //#endregion
14647
14829
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
14648
14830
  const themeTokenRecipeOptions = {
14649
14831
  palette: [
@@ -15072,7 +15254,6 @@ const ALLOWED_TRANSFORM_IDS = [
15072
15254
  "layout.footerRootClass",
15073
15255
  "layout.headerRootStyle",
15074
15256
  "layout.headerSectionBackground",
15075
- "layout.classicNavMode",
15076
15257
  "layout.footerRootStyle",
15077
15258
  "ui.headerNavLinkClass",
15078
15259
  "ui.headingClassFromAlignment",
@@ -23548,26 +23729,6 @@ const headerLogoTextVisibleTransform = {
23548
23729
  return resolveHeaderBrandDisplay(asPartialObject(value)) !== "logo-only";
23549
23730
  }
23550
23731
  };
23551
- /**
23552
- * Selects which classic-layout nav row should render.
23553
- *
23554
- * - `'inline'` → classic variant with the historical logo-left / nav-right row
23555
- * - `'centered'`→ classic variant with a centred (flex-1) nav and a right CTA
23556
- * - `'other'` → not a classic variant (centered/floating handle it)
23557
- *
23558
- * Consumed by the site-header block's `$when` gates so the two classic rows are
23559
- * mutually exclusive without introducing a new top-level header variant.
23560
- */
23561
- const classicNavModeTransform = {
23562
- id: "layout.classicNavMode",
23563
- kind: "formatter",
23564
- summary: "Resolve which classic-layout nav row to render",
23565
- run: (value) => {
23566
- const header = asPartialObject(value);
23567
- if (header?.variant !== "classic") return "other";
23568
- return header?.navPlacement === "center" ? "centered" : "inline";
23569
- }
23570
- };
23571
23732
  const maxWidthClassTransform = {
23572
23733
  id: "layout.maxWidthClass",
23573
23734
  kind: "string",
@@ -23673,7 +23834,6 @@ const headerRootClassTransform = {
23673
23834
  if (isHeaderScrollRuntimeEnabled(content)) classes.push(config.shrink);
23674
23835
  const variant = header?.variant;
23675
23836
  if (variant && headerVariantValues.includes(variant)) classes.push(`header-variant-${variant}`);
23676
- if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
23677
23837
  return joinClasses(classes);
23678
23838
  }
23679
23839
  };
@@ -23881,7 +24041,6 @@ const layoutTransforms = [
23881
24041
  headerLogoClassTransform,
23882
24042
  headerLogoMediaClassTransform,
23883
24043
  headerLogoTextVisibleTransform,
23884
- classicNavModeTransform,
23885
24044
  footerRootClassTransform,
23886
24045
  headerRootStyleTransform,
23887
24046
  headerSectionBackgroundTransform,
@@ -24271,18 +24430,7 @@ const classicLayout = inline({
24271
24430
  logoRow,
24272
24431
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
24273
24432
  headerCta
24274
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
24275
- const classicCenteredNavLayout = inline({
24276
- className: bindProp("$root.theme.header.maxWidth", {
24277
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
24278
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
24279
- }),
24280
- align: "center"
24281
- }, [
24282
- logoRow,
24283
- createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
24284
- headerCta
24285
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
24433
+ ], when("$root.theme.header.variant", { equals: "classic" }));
24286
24434
  const centeredLayout = stack({
24287
24435
  gap: "md",
24288
24436
  align: "center",
@@ -24347,7 +24495,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
24347
24495
  }, [
24348
24496
  mobileHeaderBar,
24349
24497
  classicLayout,
24350
- classicCenteredNavLayout,
24351
24498
  centeredLayout,
24352
24499
  floatingLayout,
24353
24500
  mobileOverlay
@@ -27073,7 +27220,7 @@ const eventDisplayFields = [
27073
27220
  {
27074
27221
  id: "showCapacity",
27075
27222
  type: "boolean",
27076
- label: "Show available spots",
27223
+ label: "Show available places",
27077
27224
  description: "Display remaining capacity",
27078
27225
  required: false,
27079
27226
  defaultValue: true,
@@ -27372,7 +27519,7 @@ function planEventRegistrationScope(input) {
27372
27519
  };
27373
27520
  }
27374
27521
  //#endregion
27375
- //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
27522
+ //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
27376
27523
  function isRecord$5(value) {
27377
27524
  return typeof value === "object" && value !== null && !Array.isArray(value);
27378
27525
  }
@@ -27390,7 +27537,7 @@ function resolveRuntimeEventDestination(event) {
27390
27537
  };
27391
27538
  }
27392
27539
  //#endregion
27393
- //#region ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
27540
+ //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
27394
27541
  const DEFAULT_EVENT_CURRENCY = "USD";
27395
27542
  function resolveRuntimeEventPricing(event) {
27396
27543
  if (isPublicEventPricing(event.pricing)) return event.pricing;
@@ -28070,7 +28217,7 @@ const eventRegistrationBlockDefinition = {
28070
28217
  {
28071
28218
  id: "showCapacity",
28072
28219
  type: "boolean",
28073
- label: "Show available spots",
28220
+ label: "Show available places",
28074
28221
  description: "Display remaining capacity",
28075
28222
  required: false,
28076
28223
  defaultValue: true,
@@ -28631,7 +28778,11 @@ const eventSpotlightBlockDefinition = {
28631
28778
  } }
28632
28779
  };
28633
28780
  //#endregion
28634
- //#region ../blocks/src/system/runtime/nodes/events/shared/utils.ts
28781
+ //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
28782
+ /**
28783
+ * Layout classes for event listing containers and cards. Presentation
28784
+ * plumbing rather than event domain logic, so it lives beside the components.
28785
+ */
28635
28786
  /**
28636
28787
  * Column class mappings for grid layouts, derived from the canonical
28637
28788
  * responsive column ladder (see gridUserColumnLadder).
@@ -28752,7 +28903,8 @@ const eventCollectionSourceSchemaShape = {
28752
28903
  buttonVariant: eventButtonVariantSchema.optional(),
28753
28904
  buttonText: z.string().optional(),
28754
28905
  emptyMessage: z.string().optional(),
28755
- className: z.string().optional()
28906
+ className: z.string().optional(),
28907
+ bookingTimeZone: z.string().optional()
28756
28908
  };
28757
28909
  const eventCollectionDisplaySchemaShape = {
28758
28910
  events: z.array(publicEventSchema),
@@ -28787,7 +28939,15 @@ const eventCollectionHydrationSchema = z.object({
28787
28939
  prefetchedEvents: z.boolean(),
28788
28940
  eventSurface: eventSurfaceScopeSchema$1,
28789
28941
  filterEventPresets: z.string().nullable(),
28790
- scheduleScope: eventScheduleScopeSchema$1
28942
+ scheduleScope: eventScheduleScopeSchema$1,
28943
+ calendarContext: z.object({
28944
+ timeZone: z.string().transform(toBookingTimeZone),
28945
+ initialToday: z.object({
28946
+ year: z.number().int(),
28947
+ month: z.number().int().min(1).max(12),
28948
+ day: z.number().int().min(1).max(31)
28949
+ })
28950
+ })
28791
28951
  });
28792
28952
  function buildEventCollectionDisplay(source) {
28793
28953
  return {
@@ -28832,14 +28992,19 @@ function buildEventCollectionPresentationDisplay(source) {
28832
28992
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
28833
28993
  };
28834
28994
  }
28835
- function buildEventCollectionHydration(source) {
28995
+ function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
28996
+ const timeZone = toBookingTimeZone(source.bookingTimeZone);
28836
28997
  return {
28837
28998
  siteId: source.siteId,
28838
28999
  stage: source.stage,
28839
29000
  prefetchedEvents: source.events != null,
28840
29001
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
28841
29002
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
28842
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope)
29003
+ scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29004
+ calendarContext: {
29005
+ timeZone,
29006
+ initialToday: getLocalScheduleDate(now, timeZone)
29007
+ }
28843
29008
  };
28844
29009
  }
28845
29010
  //#endregion
@@ -29949,7 +30114,7 @@ const eventCalendarAdditionalFields = [
29949
30114
  {
29950
30115
  id: "showCapacity",
29951
30116
  type: "boolean",
29952
- label: "Show available spots",
30117
+ label: "Show available places",
29953
30118
  description: "Display remaining capacity on event cards and timetable cells",
29954
30119
  required: false,
29955
30120
  defaultValue: true,
@@ -36997,6 +37162,50 @@ z.object({
36997
37162
  title: z.string(),
36998
37163
  slug: z.string().min(1)
36999
37164
  });
37165
+ z.object({
37166
+ signedUrl: z.string().url(),
37167
+ token: z.string().min(1),
37168
+ storagePath: z.string().min(1)
37169
+ }).strict();
37170
+ const backupManifestSchema = z.object({
37171
+ siteId: z.string().min(1),
37172
+ siteSlug: z.string().min(1),
37173
+ siteTitle: z.string(),
37174
+ exportedAt: z.string().min(1),
37175
+ tableCount: z.number().int().nonnegative(),
37176
+ totalRecords: z.number().int().nonnegative(),
37177
+ pageCount: z.number().int().nonnegative(),
37178
+ blockCount: z.number().int().nonnegative(),
37179
+ contentEntryCount: z.number().int().nonnegative(),
37180
+ formCount: z.number().int().nonnegative(),
37181
+ navigationMenuCount: z.number().int().nonnegative(),
37182
+ mediaCount: z.number().int().nonnegative(),
37183
+ mediaBytes: z.number().int().nonnegative()
37184
+ }).strict();
37185
+ z.object({
37186
+ ok: z.literal(true),
37187
+ manifest: backupManifestSchema,
37188
+ storagePath: z.string().min(1)
37189
+ }).strict();
37190
+ z.object({
37191
+ ok: z.literal(true),
37192
+ siteId: brandedIdSchema(parseSiteId, "site id"),
37193
+ slug: z.string().min(1),
37194
+ title: z.string(),
37195
+ counts: z.record(z.string(), z.object({
37196
+ created: z.number().int().nonnegative(),
37197
+ updated: z.number().int().nonnegative(),
37198
+ skipped: z.number().int().nonnegative(),
37199
+ failed: z.number().int().nonnegative()
37200
+ }).strict()),
37201
+ warnings: z.array(z.string()),
37202
+ errors: z.array(z.object({
37203
+ table: z.string(),
37204
+ id: z.string(),
37205
+ error: z.string()
37206
+ }).strict())
37207
+ }).strict();
37208
+ z.object({ deleted: z.boolean() }).strict();
37000
37209
  const apiKeyIdSchema = brandedIdSchema(parseApiKeyId, "API key id");
37001
37210
  const standardKeyIdsSchema = z.object({
37002
37211
  live: apiKeyIdSchema.optional(),