@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
@@ -10925,6 +11017,12 @@ function cardRoleFromLegacyVocabulary(value) {
10925
11017
  */
10926
11018
  const cardRoleWithLegacyAliasSchema = z.preprocess((value) => cardRoleFromLegacyVocabulary(value) ?? value, cardRoleSchema);
10927
11019
  //#endregion
11020
+ //#region ../theme-core/src/site-styles/compilationPlan.ts
11021
+ const defaultHeaderBrandPreferences = {
11022
+ brandDisplay: "auto",
11023
+ logoSize: "auto"
11024
+ };
11025
+ //#endregion
10928
11026
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
10929
11027
  function boundaryRuntimeMetrics(family, size, heightExpression) {
10930
11028
  return {
@@ -11851,27 +11949,6 @@ function asHeaderStyleId(value) {
11851
11949
  return value;
11852
11950
  }
11853
11951
  //#endregion
11854
- //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
11855
- const clearSplitInteractionPalette = defineLookOptionGroup({
11856
- id: "interaction-palette",
11857
- label: "Hover colour",
11858
- defaultOptionId: "accent",
11859
- options: [
11860
- {
11861
- id: "accent",
11862
- label: "Accent"
11863
- },
11864
- {
11865
- id: "primary",
11866
- label: "Primary"
11867
- },
11868
- {
11869
- id: "secondary",
11870
- label: "Secondary"
11871
- }
11872
- ]
11873
- });
11874
- //#endregion
11875
11952
  //#region ../theme-core/src/site-styles/headerLayoutCatalog.ts
11876
11953
  const titleOnlyLogoAccommodation = {
11877
11954
  pattern: "title-only",
@@ -11991,6 +12068,12 @@ const overlayLogoAccommodations = [
11991
12068
  inlineMarkWithTitleLogoAccommodation,
11992
12069
  unbackedOverlayLogoAccommodation
11993
12070
  ];
12071
+ const allCuratedLogoAccommodations = [
12072
+ ...inlineClassicLogoAccommodations,
12073
+ ...centeredLogoAccommodations,
12074
+ ...overlayLogoAccommodations
12075
+ ];
12076
+ new Set(allCuratedLogoAccommodations.filter((option) => option.providesBacking === true).map((option) => option.pattern));
11994
12077
  const headerLayoutCatalog = defineExactCatalog()([
11995
12078
  {
11996
12079
  id: asHeaderLayoutId("classic"),
@@ -12031,43 +12114,37 @@ const headerStyleCatalog = defineExactCatalog()([
12031
12114
  id: asHeaderStyleId("minimal"),
12032
12115
  label: "Minimal",
12033
12116
  description: "Quiet surface with simple color-change navigation.",
12034
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12035
- navTypography: "plain"
12117
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12036
12118
  },
12037
12119
  {
12038
12120
  id: asHeaderStyleId("fine-line"),
12039
12121
  label: "Seamless",
12040
12122
  description: "Borderless surface with underline hover for a quieter page transition.",
12041
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12042
- navTypography: "plain"
12123
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12043
12124
  },
12044
12125
  {
12045
12126
  id: asHeaderStyleId("soft-bar"),
12046
12127
  label: "Soft Bar",
12047
12128
  description: "Soft tinted surface with gentle pill hover states.",
12048
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12049
- navTypography: "plain"
12129
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12050
12130
  },
12051
12131
  {
12052
12132
  id: asHeaderStyleId("pill-nav"),
12053
12133
  label: "Pill Nav",
12054
12134
  description: "A calm pill navigation rail over a neutral header.",
12055
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12056
- navTypography: "plain"
12135
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12057
12136
  },
12058
12137
  {
12059
12138
  id: asHeaderStyleId("brand-bar"),
12060
12139
  label: "Brand Bar",
12061
12140
  description: "Solid brand surface with high-contrast navigation.",
12062
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12063
- navTypography: "brand-caps"
12141
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12064
12142
  },
12065
12143
  {
12066
12144
  id: asHeaderStyleId("brand-underline"),
12067
12145
  label: "Brand Underline",
12068
12146
  description: "Brand surface with underline-grow navigation.",
12069
- supportedLayoutIds: supportedLayouts(["classic"]),
12070
- navTypography: "brand-caps"
12147
+ supportedLayoutIds: supportedLayouts(["classic"])
12071
12148
  },
12072
12149
  {
12073
12150
  id: asHeaderStyleId("brand-pill"),
@@ -12077,73 +12154,82 @@ const headerStyleCatalog = defineExactCatalog()([
12077
12154
  "classic",
12078
12155
  "centered",
12079
12156
  "floating"
12080
- ]),
12081
- navTypography: "brand-caps"
12157
+ ])
12082
12158
  },
12083
12159
  {
12084
12160
  id: asHeaderStyleId("brand-capsule"),
12085
12161
  label: "Brand Capsule",
12086
12162
  description: "Solid brand chrome designed as a floating capsule, with quiet-caps nav, a soft pill active state, and an inverted CTA pill.",
12087
- supportedLayoutIds: supportedLayouts(["classic"]),
12088
- navTypography: "quiet-caps"
12163
+ supportedLayoutIds: supportedLayouts(["classic"])
12089
12164
  },
12090
12165
  {
12091
12166
  id: asHeaderStyleId("serif-line"),
12092
12167
  label: "Serif Line",
12093
12168
  description: "Typographic logo treatment with understated underline navigation.",
12094
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12095
- navTypography: "heading"
12169
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12096
12170
  },
12097
12171
  {
12098
12172
  id: asHeaderStyleId("flat-tabs"),
12099
12173
  label: "Flat Tabs",
12100
12174
  description: "Flat block hover and active states with a Swiss utility feel.",
12101
- supportedLayoutIds: supportedLayouts(["classic", "centered"]),
12102
- navTypography: "quiet-caps"
12175
+ supportedLayoutIds: supportedLayouts(["classic", "centered"])
12103
12176
  },
12104
12177
  {
12105
12178
  id: asHeaderStyleId("glass"),
12106
12179
  label: "Glass",
12107
12180
  description: "Translucent chrome with frosted navigation backing.",
12108
- supportedLayoutIds: supportedLayouts(["floating"]),
12109
- navTypography: "plain"
12181
+ supportedLayoutIds: supportedLayouts(["floating"])
12110
12182
  },
12111
12183
  {
12112
12184
  id: asHeaderStyleId("minimal-surface"),
12113
12185
  label: "Clear Split",
12114
12186
  description: "Floating logo with transparent navigation and no shared shell.",
12115
- supportedLayoutIds: supportedLayouts(["floating"]),
12116
- navTypography: "plain",
12117
- openingForegroundTarget: "all",
12118
- scrollTreatment: "contrast-glass",
12119
- interactionPalette: clearSplitInteractionPalette
12187
+ supportedLayoutIds: supportedLayouts(["floating"])
12120
12188
  },
12121
12189
  {
12122
12190
  id: asHeaderStyleId("soft-shell"),
12123
12191
  label: "Soft Shell",
12124
12192
  description: "Floating rounded shell with soft pill navigation states.",
12125
- supportedLayoutIds: supportedLayouts(["floating"]),
12126
- navTypography: "plain"
12193
+ supportedLayoutIds: supportedLayouts(["floating"])
12127
12194
  },
12128
12195
  {
12129
12196
  id: asHeaderStyleId("split-glass"),
12130
12197
  label: "Split Glass",
12131
12198
  description: "Logo floats independently while the navigation sits in a glass rail.",
12132
- supportedLayoutIds: supportedLayouts(["floating"]),
12133
- navTypography: "quiet-caps",
12134
- openingForegroundTarget: "brand-only"
12199
+ supportedLayoutIds: supportedLayouts(["floating"])
12135
12200
  },
12136
12201
  {
12137
12202
  id: asHeaderStyleId("split-pill"),
12138
12203
  label: "Split Pill",
12139
12204
  description: "Logo floats independently with a soft pill-backed navigation rail.",
12140
- supportedLayoutIds: supportedLayouts(["floating"]),
12141
- navTypography: "heading",
12142
- openingForegroundTarget: "brand-only"
12205
+ supportedLayoutIds: supportedLayouts(["floating"])
12143
12206
  }
12144
12207
  ]);
12145
12208
  new Map(headerLayoutCatalog.map((layout) => [layout.id, layout]));
12146
12209
  new Map(headerStyleCatalog.map((style) => [style.id, style]));
12210
+ defineLookOptionGroup({
12211
+ id: "interaction-palette",
12212
+ label: "Hover colour",
12213
+ defaultOptionId: "accent",
12214
+ options: [
12215
+ {
12216
+ id: "accent",
12217
+ label: "Accent"
12218
+ },
12219
+ {
12220
+ id: "primary",
12221
+ label: "Primary"
12222
+ },
12223
+ {
12224
+ id: "secondary",
12225
+ label: "Secondary"
12226
+ },
12227
+ {
12228
+ id: headerInteractionQuietPalette,
12229
+ label: "Text only"
12230
+ }
12231
+ ]
12232
+ });
12147
12233
  //#endregion
12148
12234
  //#region ../theme-core/src/site-styles/footerLooks.ts
12149
12235
  function asFooterLookId(value) {
@@ -14562,6 +14648,67 @@ const blockDesignFallback = {
14562
14648
  };
14563
14649
  blockDesignFallback.sectionSurface, blockDesignFallback.contentFrame, blockDesignFallback.transitionAfter, blockDesignFallback.sectionHeight, blockDesignFallback.heroLegibility, blockDesignFallback.imageSurfaceTreatment, blockDesignFallback.imageSurfaceMotion, blockDesignFallback.tileTreatment, blockDesignFallback.eventListTreatment, blockDesignFallback.eyebrowTreatment, blockDesignFallback.accordionIconTreatment, blockDesignFallback.composition;
14564
14650
  //#endregion
14651
+ //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14652
+ const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14653
+ const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14654
+ siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14655
+ function parseSiteChromeBackgroundColorToken(value) {
14656
+ const token = parseBackgroundAppearanceColorToken(value);
14657
+ return token ? token : null;
14658
+ }
14659
+ function toSiteChromeBackgroundColorTokens(tokenNames) {
14660
+ return tokenNames.flatMap((name) => {
14661
+ const token = parseSiteChromeBackgroundColorToken(name);
14662
+ return token ? [token] : [];
14663
+ });
14664
+ }
14665
+ //#endregion
14666
+ //#region ../theme-core/src/site-styles/siteChromeNavPreferences.ts
14667
+ const headerNavTypographyPreferenceValues = [
14668
+ "inherit",
14669
+ "body",
14670
+ "heading"
14671
+ ];
14672
+ const headerNavFontSizePreferenceValues = [
14673
+ "inherit",
14674
+ "sm",
14675
+ "base",
14676
+ "lg",
14677
+ "xl"
14678
+ ];
14679
+ const defaultHeaderNavPreferences = {
14680
+ typography: "inherit",
14681
+ fontSize: "inherit",
14682
+ interactionPalette: "recommended"
14683
+ };
14684
+ //#endregion
14685
+ //#region ../theme-core/src/site-styles/headerBrandPresentation.ts
14686
+ /**
14687
+ * Whether the header wears a brand presentation at all (#1318 Phase 4c).
14688
+ *
14689
+ * `applyHeaderBrandPresentation` is unconditional today: given a logo context
14690
+ * it always writes a `logo` object carrying a resolved display, size and
14691
+ * accommodation. That makes "this header has no brand presentation block" —
14692
+ * which is what several live sites persist, including one whose site *does*
14693
+ * have a logo asset — a state the preference record could not express, so a
14694
+ * recompile would silently give the site a logo treatment it has never
14695
+ * rendered.
14696
+ *
14697
+ * This is the third field in this phase with that shape, after the interaction
14698
+ * palette and the nav text size: the persisted bytes carry intent the reader
14699
+ * cannot say, so the recompile "corrects" it. The fix is the same one — widen
14700
+ * the closed vocabulary with a named member and derive it by baseline
14701
+ * comparison — and it is a *widening*, not a restyle: `'recommended'` is the
14702
+ * default and reproduces today's behaviour exactly, so no row whose bytes carry
14703
+ * a presentation compiles differently for `'plain'` existing.
14704
+ *
14705
+ * `'plain'` is deliberately not "preserve whatever bytes are there". It is a
14706
+ * constructive instruction — *write no presentation block* — so Phase 4e's
14707
+ * compiler, which builds the header from nothing, can produce it.
14708
+ */
14709
+ const headerBrandPresentationValues = ["recommended", "plain"];
14710
+ defaultHeaderBrandPreferences.brandDisplay, defaultHeaderBrandPreferences.logoSize, defaultHeaderNavPreferences.typography, defaultHeaderNavPreferences.fontSize, defaultHeaderNavPreferences.interactionPalette;
14711
+ //#endregion
14565
14712
  //#region ../theme-core/src/site-styles/generatedSchemas.ts
14566
14713
  function uniqueNonEmpty(values) {
14567
14714
  const uniqueValues = [...new Set(values)];
@@ -14630,6 +14777,56 @@ z.object({
14630
14777
  blocks: z.array(generatedPageDesignBlockIntentSchema)
14631
14778
  }).strict();
14632
14779
  //#endregion
14780
+ //#region ../theme-core/src/site-styles/headerPreferencesPersistence.ts
14781
+ const backgroundColorTokenSchema = z.unknown().transform((value, ctx) => {
14782
+ const token = parseSiteChromeBackgroundColorToken(value);
14783
+ if (token === null) {
14784
+ ctx.addIssue({
14785
+ code: "custom",
14786
+ message: "Unknown site chrome background colour token"
14787
+ });
14788
+ return z.NEVER;
14789
+ }
14790
+ return token;
14791
+ });
14792
+ const backgroundOverrideSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("default") }).strict(), z.object({
14793
+ kind: z.literal("color"),
14794
+ token: backgroundColorTokenSchema
14795
+ }).strict()]);
14796
+ const logoTextIntentSchema = z.object({
14797
+ mobileMaxWidth: z.enum([
14798
+ "xs",
14799
+ "sm",
14800
+ "md"
14801
+ ]).optional(),
14802
+ mobileWrapLines: z.union([z.literal(1), z.literal(2)]).optional(),
14803
+ hideOnShrink: z.boolean().optional()
14804
+ }).strict();
14805
+ const structureSchema = z.object({
14806
+ positioning: z.union([z.literal("inherit"), z.enum(headerPositioningValues)]),
14807
+ shrinkOnScroll: z.union([z.literal("inherit"), z.boolean()]),
14808
+ logoText: z.union([
14809
+ z.literal("inherit"),
14810
+ z.literal("none"),
14811
+ logoTextIntentSchema
14812
+ ])
14813
+ }).strict();
14814
+ const headerPreferencesShape = {
14815
+ brandPresentation: z.enum(headerBrandPresentationValues),
14816
+ brandDisplay: z.enum(brandDisplayModeValues),
14817
+ logoSize: z.enum(logoSizePolicyValues),
14818
+ navFontRole: z.enum(headerNavTypographyPreferenceValues),
14819
+ navTextSize: z.enum(headerNavFontSizePreferenceValues),
14820
+ interactionPalette: z.union([z.literal("recommended"), z.enum(headerInteractionPaletteValues)]),
14821
+ background: backgroundOverrideSchema,
14822
+ structure: structureSchema
14823
+ };
14824
+ z.object(headerPreferencesShape).strict();
14825
+ z.object(headerPreferencesShape).omit({
14826
+ brandPresentation: true,
14827
+ structure: true
14828
+ }).strict();
14829
+ //#endregion
14633
14830
  //#region ../theme-core/src/site-styles/pageDesignAuthority.ts
14634
14831
  const nonEmptyStringSchema = z.string().min(1);
14635
14832
  const blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
@@ -14731,21 +14928,6 @@ function collectBlockSequenceIssues(snapshots) {
14731
14928
  return issues;
14732
14929
  }
14733
14930
  //#endregion
14734
- //#region ../theme-core/src/site-styles/siteChromeBackgrounds.ts
14735
- const siteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceColorTokenNames);
14736
- const quickSiteChromeBackgroundColorTokens = toSiteChromeBackgroundColorTokens(backgroundAppearanceQuickColorTokenNames);
14737
- siteChromeBackgroundColorTokens.filter((token) => !quickSiteChromeBackgroundColorTokens.includes(token));
14738
- function parseSiteChromeBackgroundColorToken(value) {
14739
- const token = parseBackgroundAppearanceColorToken(value);
14740
- return token ? token : null;
14741
- }
14742
- function toSiteChromeBackgroundColorTokens(tokenNames) {
14743
- return tokenNames.flatMap((name) => {
14744
- const token = parseSiteChromeBackgroundColorToken(name);
14745
- return token ? [token] : [];
14746
- });
14747
- }
14748
- //#endregion
14749
14931
  //#region ../theme-core/src/site-styles/tokenRecipes.ts
14750
14932
  const themeTokenRecipeOptions = {
14751
14933
  palette: [
@@ -23540,26 +23722,6 @@ const headerLogoTextVisibleTransform = {
23540
23722
  return resolveHeaderBrandDisplay(asPartialObject(value)) !== "logo-only";
23541
23723
  }
23542
23724
  };
23543
- /**
23544
- * Selects which classic-layout nav row should render.
23545
- *
23546
- * - `'inline'` → classic variant with the historical logo-left / nav-right row
23547
- * - `'centered'`→ classic variant with a centred (flex-1) nav and a right CTA
23548
- * - `'other'` → not a classic variant (centered/floating handle it)
23549
- *
23550
- * Consumed by the site-header block's `$when` gates so the two classic rows are
23551
- * mutually exclusive without introducing a new top-level header variant.
23552
- */
23553
- const classicNavModeTransform = {
23554
- id: "layout.classicNavMode",
23555
- kind: "formatter",
23556
- summary: "Resolve which classic-layout nav row to render",
23557
- run: (value) => {
23558
- const header = asPartialObject(value);
23559
- if (header?.variant !== "classic") return "other";
23560
- return header?.navPlacement === "center" ? "centered" : "inline";
23561
- }
23562
- };
23563
23725
  const maxWidthClassTransform = {
23564
23726
  id: "layout.maxWidthClass",
23565
23727
  kind: "string",
@@ -23665,7 +23827,6 @@ const headerRootClassTransform = {
23665
23827
  if (isHeaderScrollRuntimeEnabled(content)) classes.push(config.shrink);
23666
23828
  const variant = header?.variant;
23667
23829
  if (variant && headerVariantValues.includes(variant)) classes.push(`header-variant-${variant}`);
23668
- if (header?.barFrame === "inset-shell" && variant === "classic") classes.push("header-bar-frame-inset-shell");
23669
23830
  return joinClasses(classes);
23670
23831
  }
23671
23832
  };
@@ -23873,7 +24034,6 @@ const layoutTransforms = [
23873
24034
  headerLogoClassTransform,
23874
24035
  headerLogoMediaClassTransform,
23875
24036
  headerLogoTextVisibleTransform,
23876
- classicNavModeTransform,
23877
24037
  footerRootClassTransform,
23878
24038
  headerRootStyleTransform,
23879
24039
  headerSectionBackgroundTransform,
@@ -24273,18 +24433,7 @@ const classicLayout = inline({
24273
24433
  logoRow,
24274
24434
  createNavRow(`rb-ml-auto ${desktopOnlyDisplay("flex")} rb-gap-6`),
24275
24435
  headerCta
24276
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "inline"));
24277
- const classicCenteredNavLayout = inline({
24278
- className: bindProp("$root.theme.header.maxWidth", {
24279
- transforms: pipe(tx("layout.maxWidthClass", { base: `rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6` })),
24280
- fallback: `rb-container rb-header-layout ${desktopOnlyDisplay("flex")} rb-w-full rb-items-center rb-gap-6`
24281
- }),
24282
- align: "center"
24283
- }, [
24284
- logoRow,
24285
- createNavRow(`rb-flex-1 rb-justify-center ${desktopOnlyDisplay("flex")} rb-gap-6`, "center"),
24286
- headerCta
24287
- ], whenTransformed("$root.theme.header", "layout.classicNavMode", "centered"));
24436
+ ], when("$root.theme.header.variant", { equals: "classic" }));
24288
24437
  const centeredLayout = stack({
24289
24438
  gap: "md",
24290
24439
  align: "center",
@@ -24349,7 +24498,6 @@ const siteHeaderBlockDefinition = { manifest: createBlockManifest({
24349
24498
  }, [
24350
24499
  mobileHeaderBar,
24351
24500
  classicLayout,
24352
- classicCenteredNavLayout,
24353
24501
  centeredLayout,
24354
24502
  floatingLayout,
24355
24503
  mobileOverlay
@@ -27075,7 +27223,7 @@ const eventDisplayFields = [
27075
27223
  {
27076
27224
  id: "showCapacity",
27077
27225
  type: "boolean",
27078
- label: "Show available spots",
27226
+ label: "Show available places",
27079
27227
  description: "Display remaining capacity",
27080
27228
  required: false,
27081
27229
  defaultValue: true,
@@ -27374,7 +27522,7 @@ function planEventRegistrationScope(input) {
27374
27522
  };
27375
27523
  }
27376
27524
  //#endregion
27377
- //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
27525
+ //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
27378
27526
  function isRecord$7(value) {
27379
27527
  return typeof value === "object" && value !== null && !Array.isArray(value);
27380
27528
  }
@@ -27392,7 +27540,7 @@ function resolveRuntimeEventDestination(event) {
27392
27540
  };
27393
27541
  }
27394
27542
  //#endregion
27395
- //#region ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
27543
+ //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
27396
27544
  const DEFAULT_EVENT_CURRENCY = "USD";
27397
27545
  function resolveRuntimeEventPricing(event) {
27398
27546
  if (isPublicEventPricing(event.pricing)) return event.pricing;
@@ -28072,7 +28220,7 @@ const eventRegistrationBlockDefinition = {
28072
28220
  {
28073
28221
  id: "showCapacity",
28074
28222
  type: "boolean",
28075
- label: "Show available spots",
28223
+ label: "Show available places",
28076
28224
  description: "Display remaining capacity",
28077
28225
  required: false,
28078
28226
  defaultValue: true,
@@ -28633,7 +28781,11 @@ const eventSpotlightBlockDefinition = {
28633
28781
  } }
28634
28782
  };
28635
28783
  //#endregion
28636
- //#region ../blocks/src/system/runtime/nodes/events/shared/utils.ts
28784
+ //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
28785
+ /**
28786
+ * Layout classes for event listing containers and cards. Presentation
28787
+ * plumbing rather than event domain logic, so it lives beside the components.
28788
+ */
28637
28789
  /**
28638
28790
  * Column class mappings for grid layouts, derived from the canonical
28639
28791
  * responsive column ladder (see gridUserColumnLadder).
@@ -28754,7 +28906,8 @@ const eventCollectionSourceSchemaShape = {
28754
28906
  buttonVariant: eventButtonVariantSchema.optional(),
28755
28907
  buttonText: z.string().optional(),
28756
28908
  emptyMessage: z.string().optional(),
28757
- className: z.string().optional()
28909
+ className: z.string().optional(),
28910
+ bookingTimeZone: z.string().optional()
28758
28911
  };
28759
28912
  const eventCollectionDisplaySchemaShape = {
28760
28913
  events: z.array(publicEventSchema),
@@ -28789,7 +28942,15 @@ const eventCollectionHydrationSchema = z.object({
28789
28942
  prefetchedEvents: z.boolean(),
28790
28943
  eventSurface: eventSurfaceScopeSchema$1,
28791
28944
  filterEventPresets: z.string().nullable(),
28792
- scheduleScope: eventScheduleScopeSchema$1
28945
+ scheduleScope: eventScheduleScopeSchema$1,
28946
+ calendarContext: z.object({
28947
+ timeZone: z.string().transform(toBookingTimeZone),
28948
+ initialToday: z.object({
28949
+ year: z.number().int(),
28950
+ month: z.number().int().min(1).max(12),
28951
+ day: z.number().int().min(1).max(31)
28952
+ })
28953
+ })
28793
28954
  });
28794
28955
  function buildEventCollectionDisplay(source) {
28795
28956
  return {
@@ -28834,14 +28995,19 @@ function buildEventCollectionPresentationDisplay(source) {
28834
28995
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
28835
28996
  };
28836
28997
  }
28837
- function buildEventCollectionHydration(source) {
28998
+ function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
28999
+ const timeZone = toBookingTimeZone(source.bookingTimeZone);
28838
29000
  return {
28839
29001
  siteId: source.siteId,
28840
29002
  stage: source.stage,
28841
29003
  prefetchedEvents: source.events != null,
28842
29004
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
28843
29005
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
28844
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope)
29006
+ scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29007
+ calendarContext: {
29008
+ timeZone,
29009
+ initialToday: getLocalScheduleDate(now, timeZone)
29010
+ }
28845
29011
  };
28846
29012
  }
28847
29013
  //#endregion
@@ -29951,7 +30117,7 @@ const eventCalendarAdditionalFields = [
29951
30117
  {
29952
30118
  id: "showCapacity",
29953
30119
  type: "boolean",
29954
- label: "Show available spots",
30120
+ label: "Show available places",
29955
30121
  description: "Display remaining capacity on event cards and timetable cells",
29956
30122
  required: false,
29957
30123
  defaultValue: true,
@@ -37680,6 +37846,50 @@ z.object({
37680
37846
  title: z.string(),
37681
37847
  slug: z.string().min(1)
37682
37848
  });
37849
+ z.object({
37850
+ signedUrl: z.string().url(),
37851
+ token: z.string().min(1),
37852
+ storagePath: z.string().min(1)
37853
+ }).strict();
37854
+ const backupManifestSchema = z.object({
37855
+ siteId: z.string().min(1),
37856
+ siteSlug: z.string().min(1),
37857
+ siteTitle: z.string(),
37858
+ exportedAt: z.string().min(1),
37859
+ tableCount: z.number().int().nonnegative(),
37860
+ totalRecords: z.number().int().nonnegative(),
37861
+ pageCount: z.number().int().nonnegative(),
37862
+ blockCount: z.number().int().nonnegative(),
37863
+ contentEntryCount: z.number().int().nonnegative(),
37864
+ formCount: z.number().int().nonnegative(),
37865
+ navigationMenuCount: z.number().int().nonnegative(),
37866
+ mediaCount: z.number().int().nonnegative(),
37867
+ mediaBytes: z.number().int().nonnegative()
37868
+ }).strict();
37869
+ z.object({
37870
+ ok: z.literal(true),
37871
+ manifest: backupManifestSchema,
37872
+ storagePath: z.string().min(1)
37873
+ }).strict();
37874
+ z.object({
37875
+ ok: z.literal(true),
37876
+ siteId: brandedIdSchema(parseSiteId, "site id"),
37877
+ slug: z.string().min(1),
37878
+ title: z.string(),
37879
+ counts: z.record(z.string(), z.object({
37880
+ created: z.number().int().nonnegative(),
37881
+ updated: z.number().int().nonnegative(),
37882
+ skipped: z.number().int().nonnegative(),
37883
+ failed: z.number().int().nonnegative()
37884
+ }).strict()),
37885
+ warnings: z.array(z.string()),
37886
+ errors: z.array(z.object({
37887
+ table: z.string(),
37888
+ id: z.string(),
37889
+ error: z.string()
37890
+ }).strict())
37891
+ }).strict();
37892
+ z.object({ deleted: z.boolean() }).strict();
37683
37893
  const apiKeyIdSchema = brandedIdSchema(parseApiKeyId, "API key id");
37684
37894
  const standardKeyIdsSchema = z.object({
37685
37895
  live: apiKeyIdSchema.optional(),