@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
@@ -1243,6 +1243,13 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1243
1243
  //#endregion
1244
1244
  //#region ../api/src/publicEventEndpointDefinitions.ts
1245
1245
  const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1246
+ resolvePublicEventCheckoutReturn: {
1247
+ path: "/public/sites/{siteId}/events/checkout-return",
1248
+ method: "POST",
1249
+ tags: [TAG_TEMPLATES.publicEvents, "event-checkout"],
1250
+ auth: "public",
1251
+ responseKind: "json"
1252
+ },
1246
1253
  getPublicEventRegistrationOptions: {
1247
1254
  path: "/public/sites/{siteId}/events/registration-options",
1248
1255
  method: "POST",
@@ -1627,6 +1634,83 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1627
1634
  errors: ["validation:invalid_input", "server:internal_error"]
1628
1635
  }
1629
1636
  });
1637
+ //#endregion
1638
+ //#region ../api/src/sdkMediaEndpointDefinitions.ts
1639
+ const SDK_MEDIA_ENDPOINT_DEFINITIONS = {
1640
+ sdkMediaExists: {
1641
+ path: "/sdk/{siteId}/media/exists",
1642
+ method: "POST",
1643
+ errors: ["validation:invalid_input"],
1644
+ auth: "service",
1645
+ responseKind: "json"
1646
+ },
1647
+ sdkMediaFindByChecksum: {
1648
+ path: "/sdk/{siteId}/media/find-by-checksum",
1649
+ method: "POST",
1650
+ errors: ["server:internal_error"],
1651
+ auth: "service",
1652
+ responseKind: "json"
1653
+ },
1654
+ sdkMediaResolve: {
1655
+ path: "/sdk/{siteId}/media/resolve",
1656
+ method: "POST",
1657
+ errors: ["server:internal_error"],
1658
+ auth: "service",
1659
+ responseKind: "json"
1660
+ },
1661
+ sdkMediaList: {
1662
+ path: "/sdk/{siteId}/media",
1663
+ method: "GET",
1664
+ auth: "service",
1665
+ responseKind: "json"
1666
+ },
1667
+ sdkMediaDownload: {
1668
+ path: "/sdk/{siteId}/media/{identifier}/download",
1669
+ method: "GET",
1670
+ auth: "service",
1671
+ responseKind: "json"
1672
+ },
1673
+ sdkMediaDeletePreview: {
1674
+ path: "/sdk/{siteId}/media/{identifier}/delete-preview",
1675
+ method: "POST",
1676
+ auth: "service",
1677
+ responseKind: "json"
1678
+ },
1679
+ sdkMediaDeleteApply: {
1680
+ path: "/sdk/{siteId}/media/{identifier}",
1681
+ method: "DELETE",
1682
+ auth: "service",
1683
+ responseKind: "json"
1684
+ },
1685
+ sdkMediaUploadUrl: {
1686
+ path: "/sdk/{siteId}/media/upload-url",
1687
+ method: "POST",
1688
+ errors: [
1689
+ "resource:not_found",
1690
+ "validation:invalid_input",
1691
+ "resource:conflict",
1692
+ "validation:payload_too_large",
1693
+ "billing:plan_limit_exceeded",
1694
+ "server:internal_error"
1695
+ ],
1696
+ auth: "service",
1697
+ responseKind: "json"
1698
+ },
1699
+ sdkMediaUploadFinalize: {
1700
+ path: "/sdk/{siteId}/media/upload",
1701
+ method: "POST",
1702
+ errors: [
1703
+ "resource:not_found",
1704
+ "validation:invalid_input",
1705
+ "resource:conflict",
1706
+ "validation:payload_too_large",
1707
+ "billing:plan_limit_exceeded",
1708
+ "server:internal_error"
1709
+ ],
1710
+ auth: "service",
1711
+ responseKind: "json"
1712
+ }
1713
+ };
1630
1714
  ({
1631
1715
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
1632
1716
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
@@ -1635,7 +1719,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1635
1719
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1636
1720
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1637
1721
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
1638
- }, 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 };
1722
+ }, 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 };
1639
1723
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
1640
1724
  z.object({
1641
1725
  accessToken: z.string().min(1).max(4096),
@@ -1974,6 +2058,9 @@ function getZonedDateTimeParts(date, timeZone) {
1974
2058
  function formatDateKey(date) {
1975
2059
  return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
1976
2060
  }
2061
+ function toBookingTimeZone(timeZone) {
2062
+ return getSafeTimeZone(timeZone);
2063
+ }
1977
2064
  function parseUtcIsoDateTimeString(value) {
1978
2065
  const normalized = value.trim();
1979
2066
  const hasUtcSuffix = normalized.endsWith("Z");
@@ -8522,6 +8609,11 @@ const gradientConfigSchema = z.object({
8522
8609
  position: z.string().optional(),
8523
8610
  stops: z.array(gradientStopSchema).min(2)
8524
8611
  });
8612
+ const gradientsSchema = z.object({
8613
+ button: z.string().min(1).nullable().optional(),
8614
+ hero: z.string().min(1).nullable().optional(),
8615
+ background: z.string().min(1).nullable().optional()
8616
+ });
8525
8617
  //#endregion
8526
8618
  //#region ../theme-core/src/interactive/baseSchema.ts
8527
8619
  /**
@@ -9222,12 +9314,8 @@ const legacyHeaderVariantValues = Object.keys(legacyHeaderVariants);
9222
9314
  * `@riverbankcms/api` is `z.input<typeof themeSchema>`, so a widened input here
9223
9315
  * would leak straight into a public type.
9224
9316
  *
9225
- * Not every read of a persisted theme goes through the schema:
9226
- * `resolveRuntimeTheme` in
9227
- * `apps/dashboard/src/server/services/sites/runtimeSiteResponse.ts` returns the
9228
- * raw database JSON asserted as `Theme` with no parse, so a theme still
9229
- * carrying a legacy spelling reaches the theme editor un-aliased. That gap
9230
- * predates this alias and is harmless while persisted usage is zero.
9317
+ * Persisted runtime themes are admitted through `parseThemeForPersistence`
9318
+ * before reaching consumers, so legacy spellings normalize at that boundary.
9231
9319
  */
9232
9320
  const headerVariantWithLegacyAliasSchema = z.enum([...headerVariantValues, ...legacyHeaderVariantValues]).transform((value) => value in legacyHeaderVariants ? legacyHeaderVariants[value] : value);
9233
9321
  const BREAKPOINT_LG = 1024;
@@ -9279,11 +9367,30 @@ const headerContainerSchema = z.object({
9279
9367
  tint: z.string().nullable().optional(),
9280
9368
  opacity: z.number().min(0).max(1).default(.12)
9281
9369
  }).optional();
9282
- const headerInteractionPaletteSchema = z.enum([
9370
+ //#endregion
9371
+ //#region ../theme-core/src/header/interactionPalette.ts
9372
+ /**
9373
+ * The palettes that fill the nav link with a colour on hover and focus. Each
9374
+ * one names a background/foreground token pair.
9375
+ */
9376
+ const headerInteractionPillPaletteValues = [
9283
9377
  "primary",
9284
9378
  "secondary",
9285
9379
  "accent"
9286
- ]);
9380
+ ];
9381
+ /**
9382
+ * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
9383
+ * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
9384
+ *
9385
+ * It exists because "a colour change on hover, no filled background" was not
9386
+ * expressible in the vocabulary, and it is what
9387
+ * `anna-raven-therapy-and-yoga` and `kirtan-lucy` have rendered since before
9388
+ * the palette existed. Without it those two rows can only be classified as a
9389
+ * conscious visual change.
9390
+ */
9391
+ const headerInteractionQuietPalette = "quiet";
9392
+ const headerInteractionPaletteValues = [...headerInteractionPillPaletteValues, headerInteractionQuietPalette];
9393
+ const headerInteractionPaletteSchema = z.enum(headerInteractionPaletteValues);
9287
9394
  //#endregion
9288
9395
  //#region ../theme-core/src/boxBackgroundSchema.ts
9289
9396
  const boxBackgroundOverlaySchema = z.preprocess(normalizeAuthoringOpacity, z.discriminatedUnion("type", [
@@ -9665,11 +9772,12 @@ const inputStyle = z.object({
9665
9772
  ]),
9666
9773
  label: z.enum(["inside", "above"])
9667
9774
  });
9668
- const headerPositioning = z.enum([
9775
+ const headerPositioningValues = [
9669
9776
  "static",
9670
9777
  "sticky",
9671
9778
  "fixed"
9672
- ]);
9779
+ ];
9780
+ const headerPositioning = z.enum(headerPositioningValues);
9673
9781
  const headerNavStyle = z.enum([
9674
9782
  "minimal",
9675
9783
  "underline",
@@ -9686,7 +9794,6 @@ const navFontWeight = z.enum([
9686
9794
  "bold"
9687
9795
  ]);
9688
9796
  const headerMaxWidth = z.enum(["container", "full"]);
9689
- const headerBarFrame = z.enum(["full-bleed", "inset-shell"]);
9690
9797
  const headerBorderSchema = componentBorderSchema.extend({ position: z.enum([
9691
9798
  "bottom",
9692
9799
  "top",
@@ -9715,12 +9822,6 @@ const headerLogoTextSchema = z.object({
9715
9822
  ]).optional(),
9716
9823
  hideOnShrink: z.boolean().optional()
9717
9824
  }).optional();
9718
- const navEffectsSchema = z.object({
9719
- underlineGradient: z.boolean().default(false),
9720
- glow: z.boolean().default(false),
9721
- glowColor: z.string().optional(),
9722
- neumorphic: z.boolean().default(false)
9723
- }).optional();
9724
9825
  const dropdownStyleSchema = z.object({
9725
9826
  background: themeColorTokenSchema.default("surface"),
9726
9827
  textColor: themeColorTokenSchema.default("text"),
@@ -9811,10 +9912,8 @@ const headerSchema = z.object({
9811
9912
  variant: headerVariantWithLegacyAliasSchema,
9812
9913
  positioning: headerPositioning,
9813
9914
  shrinkOnScroll: z.boolean(),
9814
- maxWidth: headerMaxWidth,
9815
- barFrame: headerBarFrame.optional(),
9915
+ maxWidth: headerMaxWidth.default("container"),
9816
9916
  scrollTreatment: headerScrollTreatmentSchema,
9817
- logoOverride: mediaSchema.nullable().optional(),
9818
9917
  background: headerBackgroundSchema.default({
9819
9918
  type: "color",
9820
9919
  color: "surface"
@@ -9826,13 +9925,11 @@ const headerSchema = z.object({
9826
9925
  navFontRole: z.enum(["body", "heading"]).optional(),
9827
9926
  navTextSize: navLinkStyleSchema.shape.textSize,
9828
9927
  interactionPalette: headerInteractionPaletteSchema.optional(),
9829
- navPlacement: z.enum(["end", "center"]).optional(),
9830
9928
  container: headerContainerSchema,
9831
9929
  border: headerBorderSchema,
9832
9930
  shadow: componentShadowSchema.optional(),
9833
9931
  logo: logoStyleSchema,
9834
9932
  logoText: headerLogoTextSchema,
9835
- navEffects: navEffectsSchema,
9836
9933
  navContainer: navContainerSchema,
9837
9934
  navLinkStyle: navLinkStyleSchema.optional(),
9838
9935
  ctaGap: headerCtaGapSchema.optional(),
@@ -10014,11 +10111,6 @@ const bodyTextSchema = z.object({ intro: z.object({
10014
10111
  paragraphSize: bodyTextIntroTypographySizeSchema.optional(),
10015
10112
  headingSize: bodyTextIntroTypographySizeSchema.optional()
10016
10113
  }).optional() }).optional();
10017
- const gradientsSchema = z.object({
10018
- button: z.string().min(1).nullable().optional(),
10019
- hero: z.string().min(1).nullable().optional(),
10020
- background: z.string().min(1).nullable().optional()
10021
- });
10022
10114
  /**
10023
10115
  * Testimonial quote-mark treatment, owned by the site style (analogous to the
10024
10116
  * accordion icon). `style` is the coarse selector; the optional fields fine-tune
@@ -10899,6 +10991,12 @@ function cardRoleFromLegacyVocabulary(value) {
10899
10991
  */
10900
10992
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
10901
10993
  //#endregion
10994
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
10995
+ const defaultHeaderBrandPreferences = {
10996
+ brandDisplay: "auto",
10997
+ logoSize: "auto"
10998
+ };
10999
+ //#endregion
10902
11000
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
10903
11001
  function boundaryRuntimeMetrics(family, size, heightExpression) {
10904
11002
  return {
@@ -11825,27 +11923,6 @@ function asHeaderStyleId(value) {
11825
11923
  return value;
11826
11924
  }
11827
11925
  //#endregion
11828
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
11829
- const clearSplitInteractionPalette = defineLookOptionGroup({
11830
- id: "interaction-palette",
11831
- label: "Hover colour",
11832
- defaultOptionId: "accent",
11833
- options: [
11834
- {
11835
- id: "accent",
11836
- label: "Accent"
11837
- },
11838
- {
11839
- id: "primary",
11840
- label: "Primary"
11841
- },
11842
- {
11843
- id: "secondary",
11844
- label: "Secondary"
11845
- }
11846
- ]
11847
- });
11848
- //#endregion
11849
11926
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
11850
11927
  const titleOnlyLogoAccommodation = {
11851
11928
  pattern: "title-only",
@@ -11965,6 +12042,12 @@ const overlayLogoAccommodations = [
11965
12042
  inlineMarkWithTitleLogoAccommodation,
11966
12043
  unbackedOverlayLogoAccommodation
11967
12044
  ];
12045
+ const allCuratedLogoAccommodations = [
12046
+ ...inlineClassicLogoAccommodations,
12047
+ ...centeredLogoAccommodations,
12048
+ ...overlayLogoAccommodations
12049
+ ];
12050
+ new Set(allCuratedLogoAccommodations.filter((option) => option.providesBacking === true).map((option) => option.pattern));
11968
12051
  const headerLayoutCatalog = defineExactCatalog()([
11969
12052
  {
11970
12053
  id: asHeaderLayoutId("classic"),
@@ -12005,43 +12088,37 @@ const headerStyleCatalog = defineExactCatalog()([
12005
12088
  id: asHeaderStyleId("minimal"),
12006
12089
  label: "Minimal",
12007
12090
  description: "Quiet surface with simple color-change navigation.",
12008
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12009
- navTypography: "plain"
12091
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12010
12092
  },
12011
12093
  {
12012
12094
  id: asHeaderStyleId("fine-line"),
12013
12095
  label: "Seamless",
12014
12096
  description: "Borderless surface with underline hover for a quieter page transition.",
12015
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12016
- navTypography: "plain"
12097
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12017
12098
  },
12018
12099
  {
12019
12100
  id: asHeaderStyleId("soft-bar"),
12020
12101
  label: "Soft Bar",
12021
12102
  description: "Soft tinted surface with gentle pill hover states.",
12022
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12023
- navTypography: "plain"
12103
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12024
12104
  },
12025
12105
  {
12026
12106
  id: asHeaderStyleId("pill-nav"),
12027
12107
  label: "Pill Nav",
12028
12108
  description: "A calm pill navigation rail over a neutral header.",
12029
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12030
- navTypography: "plain"
12109
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12031
12110
  },
12032
12111
  {
12033
12112
  id: asHeaderStyleId("brand-bar"),
12034
12113
  label: "Brand Bar",
12035
12114
  description: "Solid brand surface with high-contrast navigation.",
12036
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12037
- navTypography: "brand-caps"
12115
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12038
12116
  },
12039
12117
  {
12040
12118
  id: asHeaderStyleId("brand-underline"),
12041
12119
  label: "Brand Underline",
12042
12120
  description: "Brand surface with underline-grow navigation.",
12043
- supportedLayoutIds: supportedLayouts(["classic"]),
12044
- navTypography: "brand-caps"
12121
+ supportedLayoutIds: supportedLayouts(["classic"])
12045
12122
  },
12046
12123
  {
12047
12124
  id: asHeaderStyleId("brand-pill"),
@@ -12051,73 +12128,82 @@ const headerStyleCatalog = defineExactCatalog()([
12051
12128
  "classic",
12052
12129
  "centered",
12053
12130
  "floating"
12054
- ]),
12055
- navTypography: "brand-caps"
12131
+ ])
12056
12132
  },
12057
12133
  {
12058
12134
  id: asHeaderStyleId("brand-capsule"),
12059
12135
  label: "Brand Capsule",
12060
12136
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
12061
- supportedLayoutIds: supportedLayouts(["classic"]),
12062
- navTypography: "quiet-caps"
12137
+ supportedLayoutIds: supportedLayouts(["classic"])
12063
12138
  },
12064
12139
  {
12065
12140
  id: asHeaderStyleId("serif-line"),
12066
12141
  label: "Serif Line",
12067
12142
  description: "Typographic logo treatment with understated underline navigation.",
12068
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12069
- navTypography: "heading"
12143
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12070
12144
  },
12071
12145
  {
12072
12146
  id: asHeaderStyleId("flat-tabs"),
12073
12147
  label: "Flat Tabs",
12074
12148
  description: "Flat block hover and active states with a Swiss utility feel.",
12075
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12076
- navTypography: "quiet-caps"
12149
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12077
12150
  },
12078
12151
  {
12079
12152
  id: asHeaderStyleId("glass"),
12080
12153
  label: "Glass",
12081
12154
  description: "Translucent chrome with frosted navigation backing.",
12082
- supportedLayoutIds: supportedLayouts(["floating"]),
12083
- navTypography: "plain"
12155
+ supportedLayoutIds: supportedLayouts(["floating"])
12084
12156
  },
12085
12157
  {
12086
12158
  id: asHeaderStyleId("minimal-surface"),
12087
12159
  label: "Clear Split",
12088
12160
  description: "Floating logo with transparent navigation and no shared shell.",
12089
- supportedLayoutIds: supportedLayouts(["floating"]),
12090
- navTypography: "plain",
12091
- openingForegroundTarget: "all",
12092
- scrollTreatment: "contrast-glass",
12093
- interactionPalette: clearSplitInteractionPalette
12161
+ supportedLayoutIds: supportedLayouts(["floating"])
12094
12162
  },
12095
12163
  {
12096
12164
  id: asHeaderStyleId("soft-shell"),
12097
12165
  label: "Soft Shell",
12098
12166
  description: "Floating rounded shell with soft pill navigation states.",
12099
- supportedLayoutIds: supportedLayouts(["floating"]),
12100
- navTypography: "plain"
12167
+ supportedLayoutIds: supportedLayouts(["floating"])
12101
12168
  },
12102
12169
  {
12103
12170
  id: asHeaderStyleId("split-glass"),
12104
12171
  label: "Split Glass",
12105
12172
  description: "Logo floats independently while the navigation sits in a glass rail.",
12106
- supportedLayoutIds: supportedLayouts(["floating"]),
12107
- navTypography: "quiet-caps",
12108
- openingForegroundTarget: "brand-only"
12173
+ supportedLayoutIds: supportedLayouts(["floating"])
12109
12174
  },
12110
12175
  {
12111
12176
  id: asHeaderStyleId("split-pill"),
12112
12177
  label: "Split Pill",
12113
12178
  description: "Logo floats independently with a soft pill-backed navigation rail.",
12114
- supportedLayoutIds: supportedLayouts(["floating"]),
12115
- navTypography: "heading",
12116
- openingForegroundTarget: "brand-only"
12179
+ supportedLayoutIds: supportedLayouts(["floating"])
12117
12180
  }
12118
12181
  ]);
12119
12182
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
12120
12183
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
12184
+ defineLookOptionGroup({
12185
+ id: "interaction-palette",
12186
+ label: "Hover colour",
12187
+ defaultOptionId: "accent",
12188
+ options: [
12189
+ {
12190
+ id: "accent",
12191
+ label: "Accent"
12192
+ },
12193
+ {
12194
+ id: "primary",
12195
+ label: "Primary"
12196
+ },
12197
+ {
12198
+ id: "secondary",
12199
+ label: "Secondary"
12200
+ },
12201
+ {
12202
+ id: headerInteractionQuietPalette,
12203
+ label: "Text only"
12204
+ }
12205
+ ]
12206
+ });
12121
12207
  //#endregion
12122
12208
  //#region ../theme-core/src/site-styles/footerLooks.ts
12123
12209
  function asFooterLookId(value) {
@@ -14536,6 +14622,67 @@ const blockDesignFallback = {
14536
14622
  };
14537
14623
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
14538
14624
  //#endregion
14625
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14626
+ const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14627
+ const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14628
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14629
+ function parseSiteChromeBackgroundColorToken(value) {
14630
+ const token = parseBackgroundAppearanceColorToken(value);
14631
+ return token ? token : null;
14632
+ }
14633
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
14634
+ return tokenNames.flatMap((name) => {
14635
+ const token = parseSiteChromeBackgroundColorToken(name);
14636
+ return token ? [token] : [];
14637
+ });
14638
+ }
14639
+ //#endregion
14640
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
14641
+ const headerNavTypographyPreferenceValues = [
14642
+ "inherit",
14643
+ "body",
14644
+ "heading"
14645
+ ];
14646
+ const headerNavFontSizePreferenceValues = [
14647
+ "inherit",
14648
+ "sm",
14649
+ "base",
14650
+ "lg",
14651
+ "xl"
14652
+ ];
14653
+ const defaultHeaderNavPreferences = {
14654
+ typography: "inherit",
14655
+ fontSize: "inherit",
14656
+ interactionPalette: "recommended"
14657
+ };
14658
+ //#endregion
14659
+ //#region ../theme-core/src/site-styles/headerBrandPresentation.ts
14660
+ /**
14661
+ * Whether the header wears a brand presentation at all (#1318 Phase 4c).
14662
+ *
14663
+ * `applyHeaderBrandPresentation` is unconditional today: given a logo context
14664
+ * it always writes a `logo` object carrying a resolved display, size and
14665
+ * accommodation. That makes "this header has no brand presentation block" —
14666
+ * which is what several live sites persist, including one whose site *does*
14667
+ * have a logo asset — a state the preference record could not express, so a
14668
+ * recompile would silently give the site a logo treatment it has never
14669
+ * rendered.
14670
+ *
14671
+ * This is the third field in this phase with that shape, after the interaction
14672
+ * palette and the nav text size: the persisted bytes carry intent the reader
14673
+ * cannot say, so the recompile "corrects" it. The fix is the same one — widen
14674
+ * the closed vocabulary with a named member and derive it by baseline
14675
+ * comparison — and it is a *widening*, not a restyle: `'recommended'` is the
14676
+ * default and reproduces today's behaviour exactly, so no row whose bytes carry
14677
+ * a presentation compiles differently for `'plain'` existing.
14678
+ *
14679
+ * `'plain'` is deliberately not "preserve whatever bytes are there". It is a
14680
+ * constructive instruction — *write no presentation block* — so Phase 4e's
14681
+ * compiler, which builds the header from nothing, can produce it.
14682
+ */
14683
+ const headerBrandPresentationValues = ["recommended", "plain"];
14684
+ defaultHeaderBrandPreferences.brandDisplay, defaultHeaderBrandPreferences.logoSize, defaultHeaderNavPreferences.typography, defaultHeaderNavPreferences.fontSize, defaultHeaderNavPreferences.interactionPalette;
14685
+ //#endregion
14539
14686
  //#region ../theme-core/src/site-styles/generatedSchemas.ts
14540
14687
  function uniqueNonEmpty(values) {
14541
14688
  const uniqueValues = [...new Set(values)];
@@ -14604,6 +14751,56 @@ z.object({
14604
14751
  blocks: z.array(generatedPageDesignBlockIntentSchema)
14605
14752
  }).strict();
14606
14753
  //#endregion
14754
+ //#region ../theme-core/src/site-styles/headerPreferencesPersistence.ts
14755
+ const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
14756
+ const token = parseSiteChromeBackgroundColorToken(value);
14757
+ if (token === null) {
14758
+ ctx.addIssue({
14759
+ code: "custom",
14760
+ message: "Unknown site chrome background colour token"
14761
+ });
14762
+ return z.NEVER;
14763
+ }
14764
+ return token;
14765
+ });
14766
+ const backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
14767
+ kind: z.literal("color"),
14768
+ token: backgroundColorTokenSchema
14769
+ }).strict()]);
14770
+ const logoTextIntentSchema = z.object({
14771
+ mobileMaxWidth: z.enum([
14772
+ "xs",
14773
+ "sm",
14774
+ "md"
14775
+ ]).optional(),
14776
+ mobileWrapLines: z.union([z.literal(1), z.literal(2)]).optional(),
14777
+ hideOnShrink: z.boolean().optional()
14778
+ }).strict();
14779
+ const structureSchema = z.object({
14780
+ positioning: z.union([z.literal("inherit"), z.enum(headerPositioningValues)]),
14781
+ shrinkOnScroll: z.union([z.literal("inherit"), z.boolean()]),
14782
+ logoText: z.union([
14783
+ z.literal("inherit"),
14784
+ z.literal("none"),
14785
+ logoTextIntentSchema
14786
+ ])
14787
+ }).strict();
14788
+ const headerPreferencesShape = {
14789
+ brandPresentation: z.enum(headerBrandPresentationValues),
14790
+ brandDisplay: z.enum(brandDisplayModeValues),
14791
+ logoSize: z.enum(logoSizePolicyValues),
14792
+ navFontRole: z.enum(headerNavTypographyPreferenceValues),
14793
+ navTextSize: z.enum(headerNavFontSizePreferenceValues),
14794
+ interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
14795
+ background: backgroundOverrideSchema,
14796
+ structure: structureSchema
14797
+ };
14798
+ z.object(headerPreferencesShape).strict();
14799
+ z.object(headerPreferencesShape).omit({
14800
+ brandPresentation: true,
14801
+ structure: true
14802
+ }).strict();
14803
+ //#endregion
14607
14804
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
14608
14805
  const nonEmptyStringSchema = z.string().min(1);
14609
14806
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -14705,21 +14902,6 @@ function collectBlockSequenceIssues(snapshots) {
14705
14902
  return issues;
14706
14903
  }
14707
14904
  //#endregion
14708
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14709
- const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14710
- const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14711
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14712
- function parseSiteChromeBackgroundColorToken(value) {
14713
- const token = parseBackgroundAppearanceColorToken(value);
14714
- return token ? token : null;
14715
- }
14716
- function toSiteChromeBackgroundColorTokens(tokenNames) {
14717
- return tokenNames.flatMap((name) => {
14718
- const token = parseSiteChromeBackgroundColorToken(name);
14719
- return token ? [token] : [];
14720
- });
14721
- }
14722
- //#endregion
14723
14905
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
14724
14906
  const themeTokenRecipeOptions = {
14725
14907
  palette: [
@@ -15148,7 +15330,6 @@ const ALLOWED_TRANSFORM_IDS = [
15148
15330
  "layout.footerRootClass",
15149
15331
  "layout.headerRootStyle",
15150
15332
  "layout.headerSectionBackground",
15151
- "layout.classicNavMode",
15152
15333
  "layout.footerRootStyle",
15153
15334
  "ui.headerNavLinkClass",
15154
15335
  "ui.headingClassFromAlignment",
@@ -23624,26 +23805,6 @@ const headerLogoTextVisibleTransform = {
23624
23805
  return resolveHeaderBrandDisplay(asPartialObject(value)) !== "logo-only";
23625
23806
  }
23626
23807
  };
23627
- /**
23628
- * Selects which classic-layout nav row should render.
23629
- *
23630
- * - `'inline'` → classic variant with the historical logo-left / nav-right row
23631
- * - `'centered'`→ classic variant with a centred (flex-1) nav and a right CTA
23632
- * - `'other'` → not a classic variant (centered/floating handle it)
23633
- *
23634
- * Consumed by the site-header block's `$when` gates so the two classic rows are
23635
- * mutually exclusive without introducing a new top-level header variant.
23636
- */
23637
- const classicNavModeTransform = {
23638
- id: "layout.classicNavMode",
23639
- kind: "formatter",
23640
- summary: "Resolve which classic-layout nav row to render",
23641
- run: (value) => {
23642
- const header = asPartialObject(value);
23643
- if (header?.variant !== "classic") return "other";
23644
- return header?.navPlacement === "center" ? "centered" : "inline";
23645
- }
23646
- };
23647
23808
  const maxWidthClassTransform = {
23648
23809
  id: "layout.maxWidthClass",
23649
23810
  kind: "string",
@@ -23749,7 +23910,6 @@ const headerRootClassTransform = {
23749
23910
  if (isHeaderScrollRuntimeEnabled(content)) classes.push(config.shrink);
23750
23911
  const variant = header?.variant;
23751
23912
  if (variant && headerVariantValues.includes(variant)) classes.push(`header-variant-${variant}`);
23752
- if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
23753
23913
  return joinClasses(classes);
23754
23914
  }
23755
23915
  };
@@ -23957,7 +24117,6 @@ const layoutTransforms = [
23957
24117
  headerLogoClassTransform,
23958
24118
  headerLogoMediaClassTransform,
23959
24119
  headerLogoTextVisibleTransform,
23960
- classicNavModeTransform,
23961
24120
  footerRootClassTransform,
23962
24121
  headerRootStyleTransform,
23963
24122
  headerSectionBackgroundTransform,
@@ -24347,18 +24506,7 @@ const classicLayout = inline({
24347
24506
  logoRow,
24348
24507
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
24349
24508
  headerCta
24350
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
24351
- const classicCenteredNavLayout = inline({
24352
- className: bindProp("$root.theme.header.maxWidth", {
24353
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
24354
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
24355
- }),
24356
- align: "center"
24357
- }, [
24358
- logoRow,
24359
- createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
24360
- headerCta
24361
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
24509
+ ], when("$root.theme.header.variant", { equals: "classic" }));
24362
24510
  const centeredLayout = stack({
24363
24511
  gap: "md",
24364
24512
  align: "center",
@@ -24423,7 +24571,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
24423
24571
  }, [
24424
24572
  mobileHeaderBar,
24425
24573
  classicLayout,
24426
- classicCenteredNavLayout,
24427
24574
  centeredLayout,
24428
24575
  floatingLayout,
24429
24576
  mobileOverlay
@@ -27149,7 +27296,7 @@ const eventDisplayFields = [
27149
27296
  {
27150
27297
  id: "showCapacity",
27151
27298
  type: "boolean",
27152
- label: "Show available spots",
27299
+ label: "Show available places",
27153
27300
  description: "Display remaining capacity",
27154
27301
  required: false,
27155
27302
  defaultValue: true,
@@ -27448,7 +27595,7 @@ function planEventRegistrationScope(input) {
27448
27595
  };
27449
27596
  }
27450
27597
  //#endregion
27451
- //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
27598
+ //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
27452
27599
  function isRecord$5(value) {
27453
27600
  return typeof value === "object" && value !== null && !Array.isArray(value);
27454
27601
  }
@@ -27466,7 +27613,7 @@ function resolveRuntimeEventDestination(event) {
27466
27613
  };
27467
27614
  }
27468
27615
  //#endregion
27469
- //#region ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
27616
+ //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
27470
27617
  const DEFAULT_EVENT_CURRENCY = "USD";
27471
27618
  function resolveRuntimeEventPricing(event) {
27472
27619
  if (isPublicEventPricing(event.pricing)) return event.pricing;
@@ -28146,7 +28293,7 @@ const eventRegistrationBlockDefinition = {
28146
28293
  {
28147
28294
  id: "showCapacity",
28148
28295
  type: "boolean",
28149
- label: "Show available spots",
28296
+ label: "Show available places",
28150
28297
  description: "Display remaining capacity",
28151
28298
  required: false,
28152
28299
  defaultValue: true,
@@ -28707,7 +28854,11 @@ const eventSpotlightBlockDefinition = {
28707
28854
  } }
28708
28855
  };
28709
28856
  //#endregion
28710
- //#region ../blocks/src/system/runtime/nodes/events/shared/utils.ts
28857
+ //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
28858
+ /**
28859
+ * Layout classes for event listing containers and cards. Presentation
28860
+ * plumbing rather than event domain logic, so it lives beside the components.
28861
+ */
28711
28862
  /**
28712
28863
  * Column class mappings for grid layouts, derived from the canonical
28713
28864
  * responsive column ladder (see gridUserColumnLadder).
@@ -28828,7 +28979,8 @@ const eventCollectionSourceSchemaShape = {
28828
28979
  buttonVariant: eventButtonVariantSchema.optional(),
28829
28980
  buttonText: z.string().optional(),
28830
28981
  emptyMessage: z.string().optional(),
28831
- className: z.string().optional()
28982
+ className: z.string().optional(),
28983
+ bookingTimeZone: z.string().optional()
28832
28984
  };
28833
28985
  const eventCollectionDisplaySchemaShape = {
28834
28986
  events: z.array(publicEventSchema),
@@ -28863,7 +29015,15 @@ const eventCollectionHydrationSchema = z.object({
28863
29015
  prefetchedEvents: z.boolean(),
28864
29016
  eventSurface: eventSurfaceScopeSchema$1,
28865
29017
  filterEventPresets: z.string().nullable(),
28866
- scheduleScope: eventScheduleScopeSchema$1
29018
+ scheduleScope: eventScheduleScopeSchema$1,
29019
+ calendarContext: z.object({
29020
+ timeZone: z.string().transform(toBookingTimeZone),
29021
+ initialToday: z.object({
29022
+ year: z.number().int(),
29023
+ month: z.number().int().min(1).max(12),
29024
+ day: z.number().int().min(1).max(31)
29025
+ })
29026
+ })
28867
29027
  });
28868
29028
  function buildEventCollectionDisplay(source) {
28869
29029
  return {
@@ -28908,14 +29068,19 @@ function buildEventCollectionPresentationDisplay(source) {
28908
29068
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
28909
29069
  };
28910
29070
  }
28911
- function buildEventCollectionHydration(source) {
29071
+ function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
29072
+ const timeZone = toBookingTimeZone(source.bookingTimeZone);
28912
29073
  return {
28913
29074
  siteId: source.siteId,
28914
29075
  stage: source.stage,
28915
29076
  prefetchedEvents: source.events != null,
28916
29077
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
28917
29078
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
28918
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope)
29079
+ scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29080
+ calendarContext: {
29081
+ timeZone,
29082
+ initialToday: getLocalScheduleDate(now, timeZone)
29083
+ }
28919
29084
  };
28920
29085
  }
28921
29086
  //#endregion
@@ -30025,7 +30190,7 @@ const eventCalendarAdditionalFields = [
30025
30190
  {
30026
30191
  id: "showCapacity",
30027
30192
  type: "boolean",
30028
- label: "Show available spots",
30193
+ label: "Show available places",
30029
30194
  description: "Display remaining capacity on event cards and timetable cells",
30030
30195
  required: false,
30031
30196
  defaultValue: true,
@@ -37073,6 +37238,50 @@ z.object({
37073
37238
  title: z.string(),
37074
37239
  slug: z.string().min(1)
37075
37240
  });
37241
+ z.object({
37242
+ signedUrl: z.string().url(),
37243
+ token: z.string().min(1),
37244
+ storagePath: z.string().min(1)
37245
+ }).strict();
37246
+ const backupManifestSchema = z.object({
37247
+ siteId: z.string().min(1),
37248
+ siteSlug: z.string().min(1),
37249
+ siteTitle: z.string(),
37250
+ exportedAt: z.string().min(1),
37251
+ tableCount: z.number().int().nonnegative(),
37252
+ totalRecords: z.number().int().nonnegative(),
37253
+ pageCount: z.number().int().nonnegative(),
37254
+ blockCount: z.number().int().nonnegative(),
37255
+ contentEntryCount: z.number().int().nonnegative(),
37256
+ formCount: z.number().int().nonnegative(),
37257
+ navigationMenuCount: z.number().int().nonnegative(),
37258
+ mediaCount: z.number().int().nonnegative(),
37259
+ mediaBytes: z.number().int().nonnegative()
37260
+ }).strict();
37261
+ z.object({
37262
+ ok: z.literal(true),
37263
+ manifest: backupManifestSchema,
37264
+ storagePath: z.string().min(1)
37265
+ }).strict();
37266
+ z.object({
37267
+ ok: z.literal(true),
37268
+ siteId: brandedIdSchema(parseSiteId, "site id"),
37269
+ slug: z.string().min(1),
37270
+ title: z.string(),
37271
+ counts: z.record(z.string(), z.object({
37272
+ created: z.number().int().nonnegative(),
37273
+ updated: z.number().int().nonnegative(),
37274
+ skipped: z.number().int().nonnegative(),
37275
+ failed: z.number().int().nonnegative()
37276
+ }).strict()),
37277
+ warnings: z.array(z.string()),
37278
+ errors: z.array(z.object({
37279
+ table: z.string(),
37280
+ id: z.string(),
37281
+ error: z.string()
37282
+ }).strict())
37283
+ }).strict();
37284
+ z.object({ deleted: z.boolean() }).strict();
37076
37285
  const apiKeyIdSchema = brandedIdSchema(parseApiKeyId, "API key id");
37077
37286
  const standardKeyIdsSchema = z.object({
37078
37287
  live: apiKeyIdSchema.optional(),