@riverbankcms/sdk 0.139.0 → 0.141.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 (232) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-BDeenhi3.mjs → PreviewEditorSidebar-Q-fy9GYw.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DSRhgjF5.mjs → PreviewEditorUI-LYGzgk85.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-D2K8GLUG.mjs → PreviewQueryProvider-CN0ewic5.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CL7wSnYu.mjs → SdkPreviewModeRuntime-CoPYI5Jq.mjs} +90 -50
  6. package/dist/{SiteChromeCustomizeContext-BhDn-5ir.mjs → SiteChromeCustomizeContext-D8LePX8x.mjs} +2731 -1303
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +212 -212
  9. package/dist/_dts/api/src/accessAdmin.d.ts +74 -104
  10. package/dist/_dts/api/src/aiEndpoints.d.ts +5 -1
  11. package/dist/_dts/api/src/authSubmission.d.ts +46 -0
  12. package/dist/_dts/api/src/billing.d.ts +8 -4
  13. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +23 -0
  14. package/dist/_dts/api/src/billingEndpointTypes.d.ts +26 -0
  15. package/dist/_dts/api/src/blocks.d.ts +2 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +1 -2
  17. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +8 -1
  18. package/dist/_dts/api/src/communications.d.ts +0 -1
  19. package/dist/_dts/api/src/contentRuntime.d.ts +17 -31
  20. package/dist/_dts/api/src/domainConnection.d.ts +4 -0
  21. package/dist/_dts/api/src/endpoints.d.ts +93 -64
  22. package/dist/_dts/api/src/event-destination-policy.d.ts +2 -1
  23. package/dist/_dts/api/src/footerCompositionContracts.d.ts +25 -0
  24. package/dist/_dts/api/src/footerSettings.d.ts +9 -6
  25. package/dist/_dts/api/src/index.d.ts +6 -7
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/launchReadiness.d.ts +1 -0
  29. package/dist/_dts/api/src/mailingListIntegration.d.ts +8 -2
  30. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  31. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +2 -1
  32. package/dist/_dts/api/src/navigation/types.d.ts +1 -1
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +25 -0
  34. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +32 -32
  35. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +8 -0
  36. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +1 -0
  37. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +11 -3
  38. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +3 -29
  39. package/dist/_dts/api/src/publicOnboardingAttemptEndpointDefinitions.d.ts +65 -0
  40. package/dist/_dts/api/src/saveOutcome.d.ts +20 -0
  41. package/dist/_dts/api/src/sdkContracts.d.ts +3 -22
  42. package/dist/_dts/api/src/sdkPushContracts.d.ts +18 -0
  43. package/dist/_dts/api/src/sdkThemeWire.d.ts +44 -44
  44. package/dist/_dts/api/src/settings/permissions.d.ts +12 -0
  45. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +10 -29
  46. package/dist/_dts/api/src/siteOnboarding.d.ts +9 -9
  47. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +2 -4
  48. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -1
  49. package/dist/_dts/api/src/siteSettings.d.ts +20 -7
  50. package/dist/_dts/api/src/types.d.ts +77 -77
  51. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -37
  52. package/dist/_dts/billing/src/membership/index.d.ts +3 -0
  53. package/dist/_dts/billing/src/plans/types.d.ts +3 -0
  54. package/dist/_dts/billing/src/site-arrangements.d.ts +23 -3
  55. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +20 -4
  56. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +2 -0
  57. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +7 -0
  58. package/dist/_dts/blocks/src/portal/types.d.ts +2 -4
  59. package/dist/_dts/blocks/src/portal/waitlist-types.d.ts +35 -0
  60. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -0
  61. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +2 -0
  62. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +122 -0
  63. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +2 -1
  64. package/dist/_dts/blocks/src/system/blocks/events/shared/eventSelection.d.ts +11 -0
  65. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  66. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  67. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  68. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  69. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
  70. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +7 -1
  71. package/dist/_dts/blocks/src/system/data/types.d.ts +9 -0
  72. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  73. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +27 -1
  74. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  75. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -28
  76. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +7 -3
  78. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  79. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -2
  80. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +42 -186
  81. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -93
  82. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +2 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +48 -1
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +1 -2
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +2 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/checkoutRecovery.d.ts +14 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +56 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +4 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.state.d.ts +5 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -8
  91. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useCheckoutRecovery.d.ts +8 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.d.ts +3 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.d.ts +10 -3
  94. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +9 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -7
  96. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +14 -7
  97. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +18 -0
  98. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useSettledCommerceView.d.ts +37 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.client.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -6
  101. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +4 -2
  102. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +4 -3
  103. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +3 -0
  104. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +11 -101
  105. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +7 -2
  106. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +2 -0
  107. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -0
  108. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +1 -0
  109. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +1 -0
  110. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -6
  111. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  112. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +2 -0
  113. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +12 -0
  114. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +4 -0
  115. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  116. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +27 -4
  117. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -1
  118. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +3 -1
  119. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -0
  120. package/dist/_dts/core/src/branded.d.ts +0 -8
  121. package/dist/_dts/core/src/index.d.ts +1 -0
  122. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +1 -1
  123. package/dist/_dts/core/src/mailing-list-setup.d.ts +14 -1
  124. package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -27
  125. package/dist/_dts/core/src/participants.d.ts +2 -29
  126. package/dist/_dts/core/src/public-experience.d.ts +4 -0
  127. package/dist/_dts/core/src/public-profile.d.ts +27 -1
  128. package/dist/_dts/core/src/site-route-target.d.ts +9 -2
  129. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +296 -606
  130. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListGlobalSettingsSummary.d.ts +10 -0
  131. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +3 -2
  132. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +3 -2
  133. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +3 -2
  134. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +19 -0
  135. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +27 -1
  136. package/dist/_dts/sdk/src/public-api/contracts.d.ts +14 -20
  137. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  138. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
  139. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +7 -1
  140. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +1 -0
  141. package/dist/_dts/sdk/src/version.d.ts +1 -1
  142. package/dist/_dts/theme-core/src/ThemeFontLoader.d.ts +17 -1
  143. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  144. package/dist/_dts/theme-core/src/buttons/affordanceSuppression.d.ts +17 -0
  145. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +1 -1
  146. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +16 -0
  147. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +0 -6
  148. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +4 -4
  149. package/dist/_dts/theme-core/src/cards/types.d.ts +21 -21
  150. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  151. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +8 -2
  152. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -2
  153. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +54 -12
  154. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
  156. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +54 -54
  157. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -4
  158. package/dist/_dts/theme-core/src/schema.d.ts +84 -84
  159. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
  160. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  161. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +77 -0
  162. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  163. package/dist/_dts/theme-core/src/typography/generateTypographyCss.d.ts +2 -2
  164. package/dist/_dts/ui/src/lib/use-delayed-flag.d.ts +9 -0
  165. package/dist/_dts/ui/src/pending-button.d.ts +10 -0
  166. package/dist/client/{BookingConsentAgreement-CZvTDtsK.mjs → BookingConsentAgreement-xJeYNdnb.mjs} +4 -4
  167. package/dist/client/{DiscountCodeDisclosure-D-DsLCMU.mjs → DiscountCodeDisclosure-DdT6uzl9.mjs} +1 -1
  168. package/dist/client/{EventCombined.client-dWqgd5ZO.mjs → EventCombined.client-Cp28uYuM.mjs} +12 -16
  169. package/dist/client/{EventListing.client-BMRa9IYp.mjs → EventListing.client-CD6AJsMr.mjs} +4 -17
  170. package/dist/client/{LeafletStaticMap-D21W9kBZ.mjs → LeafletStaticMap-DBsAi9-e.mjs} +1 -1
  171. package/dist/client/{accordion-FxF_ta47.mjs → accordion-6dwbOKYR.mjs} +1 -1
  172. package/dist/client/{bookingForm-YnwW4TGw.mjs → bookingForm-CZE9_qPQ.mjs} +7 -7
  173. package/dist/client/bookings.mjs +500 -233
  174. package/dist/client/{carousel-vng7fFT5.mjs → carousel-7VHGQARz.mjs} +2 -2
  175. package/dist/client/{carousel.client-59G_WMr4.mjs → carousel.client-DQTjCVQT.mjs} +1 -1
  176. package/dist/client/{cart-DEPDsjNk.mjs → cart-Qg_mvQhh.mjs} +3 -3
  177. package/dist/client/{checkout-CZRWu9rW.mjs → checkout-D84rpgdr.mjs} +3 -3
  178. package/dist/client/{checkoutUrls-BuseL0dw.mjs → checkoutUrls-FL6lRkrt.mjs} +1 -1
  179. package/dist/client/client.mjs +2315 -1017
  180. package/dist/client/{colorStyles-CrxJrPjJ.mjs → colorStyles-3013aRAY.mjs} +3 -1
  181. package/dist/client/{context-DvU_WUmd.mjs → context-Ctp3T0Wr.mjs} +6 -19
  182. package/dist/client/{dates-wnPMiRl5.mjs → dates-DJKFcI_N.mjs} +2 -2
  183. package/dist/client/{eventCalendar-BA3Q5L15.mjs → eventCalendar-CK31z3vs.mjs} +12 -8
  184. package/dist/client/{eventCombined-51wgR-1R.mjs → eventCombined-DiXd-ewn.mjs} +3 -3
  185. package/dist/client/{eventDetails-modaetpm.mjs → eventDetails-CTRgt2DK.mjs} +4 -4
  186. package/dist/client/{eventListing-D8t2J3Kv.mjs → eventListing-Dy9vi_j_.mjs} +3 -3
  187. package/dist/client/{eventRegistration-CYqtkCE_.mjs → eventRegistration-CnalYMr2.mjs} +618 -177
  188. package/dist/client/{form-CBKXN5In.mjs → form-eUiMveTT.mjs} +3 -3
  189. package/dist/client/{headerSection-DylDqNrs.mjs → headerSection-Dy9kQpB1.mjs} +2 -2
  190. package/dist/client/hooks.mjs +692 -212
  191. package/dist/client/{locationMap-CvWrG0vZ.mjs → locationMap-DalCmWU0.mjs} +3 -3
  192. package/dist/client/{media-BOHuueS5.mjs → media-DHpfFwd3.mjs} +1 -1
  193. package/dist/client/{newsletterForm-Btwk70zw.mjs → newsletterForm-SDDPvhS0.mjs} +150 -94
  194. package/dist/client/{pricing-Uzw-GQ6Y.mjs → pricing-OcMz4SnX.mjs} +1 -1
  195. package/dist/client/{productDetail-JLcUYKnd.mjs → productDetail-BQrgHElM.mjs} +3 -3
  196. package/dist/client/{productList-FM0cbUzj.mjs → productList-OnPn_UJj.mjs} +3 -3
  197. package/dist/client/{propsDecoder-DYzafZb2.mjs → propsDecoder-zBdsnS-N.mjs} +168 -32
  198. package/dist/client/rendering/client.mjs +1355 -519
  199. package/dist/client/rendering/islands.mjs +19 -19
  200. package/dist/client/rendering.mjs +2294 -953
  201. package/dist/client/{scrollToBlock-CvXszexS.mjs → scrollToBlock-BNM4Ob2Y.mjs} +28 -11
  202. package/dist/client/{shop-BIcjvy5a.mjs → shop-Bv1fPTwQ.mjs} +6 -6
  203. package/dist/client/{shop-commerce-BZQsy7xw.mjs → shop-commerce-D4KNGaW8.mjs} +7 -7
  204. package/dist/client/{shop-commerce-store-D5V7XAb5.mjs → shop-commerce-store-2N5EV0Rc.mjs} +1 -1
  205. package/dist/client/{shopShared-DowkXevB.mjs → shopShared-DvJGdHTV.mjs} +4 -4
  206. package/dist/client/{useEventFilters-oMoTw_JE.mjs → useEventFilters-BBBvGDHQ.mjs} +19 -13
  207. package/dist/preview-next/before-render.mjs +119 -64
  208. package/dist/preview-next/client/runtime.mjs +4 -4
  209. package/dist/preview-next/editor-chrome.css +4 -8
  210. package/dist/preview-next/keepAlive.mjs +119 -64
  211. package/dist/preview-next/middleware.mjs +119 -64
  212. package/dist/{previewAuthStore-COUyAKaX.mjs → previewAuthStore-Gjb6r6vz.mjs} +119 -64
  213. package/dist/{sdk-runtime-D4k2LSGF.mjs → sdk-runtime-Defnbfzw.mjs} +2 -2
  214. package/dist/{separator-UGtpag4Z.mjs → separator-CZXO3Sb0.mjs} +1 -1
  215. package/dist/server/components.mjs +1170 -384
  216. package/dist/server/config-validation.mjs +560 -105
  217. package/dist/server/config.mjs +564 -109
  218. package/dist/server/data.mjs +688 -212
  219. package/dist/server/index.mjs +126 -66
  220. package/dist/server/next.mjs +1429 -662
  221. package/dist/server/page-converter.mjs +372 -99
  222. package/dist/server/prebuild.mjs +1 -1
  223. package/dist/server/rendering/server.mjs +1624 -817
  224. package/dist/server/rendering.mjs +1200 -391
  225. package/dist/server/routing.mjs +767 -247
  226. package/dist/server/server.mjs +715 -276
  227. package/dist/server/theme-bridge.mjs +475 -110
  228. package/dist/server/theme.mjs +9 -3
  229. package/dist/styles/index.css +265 -45
  230. package/package.json +1 -1
  231. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +0 -29
  232. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +0 -13
@@ -1314,10 +1314,12 @@ const unsafeAsApiKeyId = (id) => id;
1314
1314
  const unsafeAsEventOfferingId = (id) => id;
1315
1315
  const unsafeAsEventSeriesId = (id) => id;
1316
1316
  const unsafeAsUserId = (id) => id;
1317
+ const unsafeAsContentVersionId = (id) => id;
1317
1318
  const parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
1318
1319
  const parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
1319
1320
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
1320
1321
  const parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
1322
+ const parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
1321
1323
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
1322
1324
  //#endregion
1323
1325
  //#region ../core/src/assert-never.ts
@@ -1551,7 +1553,7 @@ function parseEventPageSurfaceDestinationMode(value) {
1551
1553
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
1552
1554
  }
1553
1555
  function parseEventPageSurfaceSubject(value) {
1554
- if (!isRecord$10(value)) return err({ kind: "notObject" });
1556
+ if (!isRecord$11(value)) return err({ kind: "notObject" });
1555
1557
  switch (value.kind) {
1556
1558
  case "eventSeries": {
1557
1559
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -1606,7 +1608,7 @@ function parseEventSeriesIdList(values) {
1606
1608
  }
1607
1609
  return ok(parsed);
1608
1610
  }
1609
- function isRecord$10(value) {
1611
+ function isRecord$11(value) {
1610
1612
  return typeof value === "object" && value !== null && !Array.isArray(value);
1611
1613
  }
1612
1614
  //#endregion
@@ -1790,16 +1792,47 @@ function parsePositiveInteger(value) {
1790
1792
  function parseNewsletterListId(value) {
1791
1793
  return parseTrimmedMatchingString(value, UUID_PATTERN);
1792
1794
  }
1795
+ function parseMailchimpAccountId(value) {
1796
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1797
+ }
1793
1798
  function parseMailchimpAudienceId(value) {
1794
1799
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1795
1800
  }
1796
1801
  function parseMailchimpInterestId(value) {
1797
1802
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1798
1803
  }
1804
+ function parseBrevoAccountId(value) {
1805
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1806
+ }
1799
1807
  function parseBrevoListId(value) {
1800
1808
  return parsePositiveInteger(value);
1801
1809
  }
1802
1810
  //#endregion
1811
+ //#region ../core/src/mailing-list-setup.ts
1812
+ function isRecord$10(value) {
1813
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1814
+ }
1815
+ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
1816
+ function parseMailingListProviderScope(value) {
1817
+ if (!isRecord$10(value)) return err("invalid_mailing_list_provider_scope");
1818
+ if (value.provider === "native") return ok({ provider: "native" });
1819
+ if (value.provider === "brevo") {
1820
+ const accountId = parseBrevoAccountId(value.accountId);
1821
+ return accountId !== null ? ok({
1822
+ provider: "brevo",
1823
+ accountId
1824
+ }) : err("invalid_mailing_list_provider_scope");
1825
+ }
1826
+ if (value.provider === "mailchimp") {
1827
+ const accountId = parseMailchimpAccountId(value.accountId);
1828
+ return accountId !== null ? ok({
1829
+ provider: "mailchimp",
1830
+ accountId
1831
+ }) : err("invalid_mailing_list_provider_scope");
1832
+ }
1833
+ return err("invalid_mailing_list_provider_scope");
1834
+ }
1835
+ //#endregion
1803
1836
  //#region ../core/src/mailing-list-setup-parser.ts
1804
1837
  function parseMailingListGlobalForm(value) {
1805
1838
  if (!isRecord$9(value)) return formError("shape");
@@ -1808,12 +1841,15 @@ function parseMailingListGlobalForm(value) {
1808
1841
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
1809
1842
  const buttonLabel = parseRequiredString(value.buttonLabel);
1810
1843
  if (buttonLabel === null) return formError("buttonLabel");
1844
+ const successMessage = parseRequiredString(value.successMessage);
1845
+ if (successMessage === null) return formError("successMessage");
1811
1846
  const privacyNote = parseOptionalString(value.privacyNote);
1812
1847
  if (privacyNote === void 0) return formError("privacyNote");
1813
1848
  return ok({
1814
1849
  fields,
1815
1850
  includeOptionalPhone: value.includeOptionalPhone,
1816
1851
  buttonLabel,
1852
+ successMessage,
1817
1853
  privacyNote
1818
1854
  });
1819
1855
  }
@@ -2143,11 +2179,17 @@ function parseMailingListSignedSourceToken(value) {
2143
2179
  const parsed = typeof value === "string" ? value.trim() : "";
2144
2180
  return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
2145
2181
  }
2146
- function buildMailingListSignupBlockSourceRef(blockId) {
2147
- const parsed = parseMailingListBlockId(blockId);
2148
- return parsed !== null ? {
2182
+ function parseMailingListContentVersionId(value) {
2183
+ const parsed = parseContentVersionId(value);
2184
+ return parsed.ok ? parsed.value : null;
2185
+ }
2186
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
2187
+ const parsedBlockId = parseMailingListBlockId(blockId);
2188
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
2189
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
2149
2190
  tag: "block_ref",
2150
- blockId: parsed
2191
+ blockId: parsedBlockId,
2192
+ contentVersionId: parsedContentVersionId
2151
2193
  } : null;
2152
2194
  }
2153
2195
  //#endregion
@@ -2652,6 +2694,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
2652
2694
  auth: "public",
2653
2695
  responseKind: "json"
2654
2696
  },
2697
+ getPublicBookingServiceBySlug: {
2698
+ path: "/public/bookings/services/by-slug/{slug}",
2699
+ method: "GET",
2700
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
2701
+ tags: [TAG_TEMPLATES.publicBookingServices],
2702
+ auth: "public",
2703
+ responseKind: "json"
2704
+ },
2655
2705
  getPublicBookingResourcesReference: {
2656
2706
  path: "/public/bookings/resources/reference",
2657
2707
  method: "GET",
@@ -3204,16 +3254,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3204
3254
  responseKind: "json"
3205
3255
  }
3206
3256
  });
3257
+ //#endregion
3258
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
3259
+ /**
3260
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
3261
+ *
3262
+ * Every route here is reached before there is an account, so none of them can
3263
+ * be scoped to a site or a user: the token is the whole credential. They are
3264
+ * kept together so that stays obvious.
3265
+ */
3266
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3267
+ createPublicOnboardingAttempt: {
3268
+ path: "/public/onboarding/attempts",
3269
+ method: "POST",
3270
+ auth: "public",
3271
+ errors: [],
3272
+ responseKind: "json"
3273
+ },
3274
+ createPublicOnboardingLogoUploadUrl: {
3275
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
3276
+ method: "POST",
3277
+ auth: "public",
3278
+ errors: [],
3279
+ responseKind: "json"
3280
+ },
3281
+ uploadPublicOnboardingLogo: {
3282
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
3283
+ method: "POST",
3284
+ auth: "public",
3285
+ errors: [],
3286
+ responseKind: "json"
3287
+ },
3288
+ getPublicOnboardingAttempt: {
3289
+ path: "/public/onboarding/attempts/{attemptToken}",
3290
+ method: "GET",
3291
+ auth: "public",
3292
+ errors: [],
3293
+ responseKind: "json"
3294
+ },
3295
+ getPublicOnboardingAttemptProgress: {
3296
+ path: "/public/onboarding/attempts/{attemptToken}/status",
3297
+ method: "GET",
3298
+ auth: "public",
3299
+ errors: [],
3300
+ responseKind: "json"
3301
+ },
3302
+ updatePublicOnboardingAttempt: {
3303
+ path: "/public/onboarding/attempts/{attemptToken}",
3304
+ method: "PATCH",
3305
+ auth: "public",
3306
+ errors: [],
3307
+ responseKind: "json"
3308
+ },
3309
+ runPublicOnboardingAttempt: {
3310
+ path: "/public/onboarding/attempts/{attemptToken}/run",
3311
+ method: "POST",
3312
+ auth: "public",
3313
+ errors: [],
3314
+ responseKind: "json"
3315
+ },
3316
+ resendPublicOnboardingAttemptConfirmation: {
3317
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
3318
+ method: "POST",
3319
+ auth: "public",
3320
+ errors: [],
3321
+ responseKind: "json"
3322
+ }
3323
+ });
3324
+ //#endregion
3325
+ //#region ../api/src/billingEndpointDefinitions.ts
3326
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3327
+ adminChangePlan: {
3328
+ path: "/admin/billing/plan",
3329
+ method: "POST",
3330
+ tags: ["admin", "billing"],
3331
+ auth: "admin",
3332
+ responseKind: "json"
3333
+ },
3334
+ changePlan: {
3335
+ path: "/billing/plan/change",
3336
+ method: "POST",
3337
+ tags: ["billing"],
3338
+ auth: "user",
3339
+ responseKind: "json"
3340
+ },
3341
+ createBillingPortalSession: {
3342
+ path: "/billing/portal/session",
3343
+ method: "POST",
3344
+ tags: ["billing"],
3345
+ auth: "user",
3346
+ responseKind: "json"
3347
+ }
3348
+ });
3207
3349
  ({
3208
3350
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
3351
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
3209
3352
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
3210
3353
  ...GIFTING_ENDPOINT_DEFINITIONS,
3211
- ...PUBLIC_READ_ENDPOINT_DEFINITIONS
3354
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
3355
+ ...BILLING_ENDPOINT_DEFINITIONS
3212
3356
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
3213
3357
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
3214
3358
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
3215
3359
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
3216
- }, 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.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.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
3360
+ }, 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.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.publicEvents, TAG_TEMPLATES.publicBookingServices, 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.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
3217
3361
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
3218
3362
  z.object({
3219
3363
  accessToken: z.string().min(1).max(4096),
@@ -5853,7 +5997,7 @@ const BUTTON_CONTRAST_POLICY = {
5853
5997
  nonTextMinimumRatio: 3,
5854
5998
  gradientSamplesPerSegment: 20,
5855
5999
  alphaBackgrounds: "reject-without-known-surface",
5856
- disabled: "retain-full-colour-contract"
6000
+ disabled: "validated-colour-pair-with-muted-control-opacity"
5857
6001
  };
5858
6002
  function validateButtonSurfaceContrast(input) {
5859
6003
  const ratio = contrastRatio(input.buttonPaint, input.surfaceHex);
@@ -6379,59 +6523,6 @@ function interpolateHex(startHex, endHex, position) {
6379
6523
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
6380
6524
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
6381
6525
  }
6382
- shadeBackgroundEffect({
6383
- id: "darken-background",
6384
- name: "Darken on Hover",
6385
- description: "Darkens the background color on hover",
6386
- label: "Darken Amount (shade step)",
6387
- shadeDirection: 1
6388
- });
6389
- shadeBackgroundEffect({
6390
- id: "lighten-background",
6391
- name: "Lighten on Hover",
6392
- description: "Lightens the background color on hover",
6393
- label: "Lighten Amount (shade step)",
6394
- shadeDirection: -1
6395
- });
6396
- function shadeBackgroundEffect(config) {
6397
- return {
6398
- id: config.id,
6399
- name: config.name,
6400
- description: config.description,
6401
- category: "background",
6402
- pseudoElement: "none",
6403
- applicableTo: ["button"],
6404
- customizableOption: {
6405
- name: "amount",
6406
- type: "select",
6407
- label: config.label,
6408
- default: 100,
6409
- options: [
6410
- 0,
6411
- 100,
6412
- 200,
6413
- 300,
6414
- 400,
6415
- 500,
6416
- 600,
6417
- 700,
6418
- 800,
6419
- 900
6420
- ]
6421
- },
6422
- isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
6423
- generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
6424
- if (buttonConfig.background.type !== "solid") return "";
6425
- const amount = (options.amount || 100) * config.shadeDirection;
6426
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
6427
- return `
6428
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
6429
- background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
6430
- }
6431
- `;
6432
- }
6433
- };
6434
- }
6435
6526
  //#endregion
6436
6527
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
6437
6528
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
@@ -6716,6 +6807,59 @@ function mergeStyles(...styles) {
6716
6807
  }
6717
6808
  return Object.keys(merged).length ? merged : void 0;
6718
6809
  }
6810
+ shadeBackgroundEffect({
6811
+ id: "darken-background",
6812
+ name: "Darken on Hover",
6813
+ description: "Darkens the background color on hover",
6814
+ label: "Darken Amount (shade step)",
6815
+ shadeDirection: 1
6816
+ });
6817
+ shadeBackgroundEffect({
6818
+ id: "lighten-background",
6819
+ name: "Lighten on Hover",
6820
+ description: "Lightens the background color on hover",
6821
+ label: "Lighten Amount (shade step)",
6822
+ shadeDirection: -1
6823
+ });
6824
+ function shadeBackgroundEffect(config) {
6825
+ return {
6826
+ id: config.id,
6827
+ name: config.name,
6828
+ description: config.description,
6829
+ category: "background",
6830
+ pseudoElement: "none",
6831
+ applicableTo: ["button"],
6832
+ customizableOption: {
6833
+ name: "amount",
6834
+ type: "select",
6835
+ label: config.label,
6836
+ default: 100,
6837
+ options: [
6838
+ 0,
6839
+ 100,
6840
+ 200,
6841
+ 300,
6842
+ 400,
6843
+ 500,
6844
+ 600,
6845
+ 700,
6846
+ 800,
6847
+ 900
6848
+ ]
6849
+ },
6850
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
6851
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
6852
+ if (buttonConfig.background.type !== "solid") return "";
6853
+ const amount = (options.amount || 100) * config.shadeDirection;
6854
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
6855
+ return `
6856
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
6857
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
6858
+ }
6859
+ `;
6860
+ }
6861
+ };
6862
+ }
6719
6863
  //#endregion
6720
6864
  //#region ../theme-core/src/utils/tokenOrColor.ts
6721
6865
  /**
@@ -10138,8 +10282,14 @@ const headerInteractionPillPaletteValues = [
10138
10282
  "accent"
10139
10283
  ];
10140
10284
  /**
10141
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
10142
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
10285
+ * "No pill": a colour change on hover rather than a filled background.
10286
+ *
10287
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
10288
+ * foreground-adaptive style that is not the end of the story: the hover colour
10289
+ * is derived from the resolved opening foreground at render time, paired with
10290
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
10291
+ * whatever brand token the recipe happened to name. See
10292
+ * `applyOpeningForeground`.
10143
10293
  *
10144
10294
  * It exists because "a colour change on hover, no filled background" was not
10145
10295
  * expressible in the vocabulary, and it is what
@@ -16189,6 +16339,7 @@ function isDisplayMediaKind(kind) {
16189
16339
  }
16190
16340
  const siteOptionSources = [
16191
16341
  "eventCategories",
16342
+ "eventSeries",
16192
16343
  "venues",
16193
16344
  "staffMembers"
16194
16345
  ];
@@ -27059,7 +27210,8 @@ const appointmentServicesBlockDefinition = {
27059
27210
  el("appointment-services", {
27060
27211
  sectionHeading: { $bind: { from: "content.heading" } },
27061
27212
  services: { $bind: { from: "data.services" } },
27062
- pathname: { $bind: { from: "$root.pathname" } }
27213
+ pathname: { $bind: { from: "$root.pathname" } },
27214
+ servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
27063
27215
  })
27064
27216
  ], { gap: "lg" })
27065
27217
  })]
@@ -27439,6 +27591,28 @@ const bookingRequirementConsentFieldSchema = z.object({
27439
27591
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
27440
27592
  //#endregion
27441
27593
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
27594
+ const publicEventLoaderQuerySchemaShape = {
27595
+ limit: z.string().optional(),
27596
+ from: z.string().optional(),
27597
+ to: z.string().optional(),
27598
+ afterStartsAt: z.string().optional(),
27599
+ afterId: z.string().optional(),
27600
+ categoryIds: z.string().optional(),
27601
+ venueId: z.string().optional(),
27602
+ staffMemberId: z.string().optional(),
27603
+ eventSurface: z.string().optional(),
27604
+ eventPresets: z.string().optional(),
27605
+ scheduleScope: z.string().optional(),
27606
+ seriesId: z.string().optional(),
27607
+ seriesIds: z.string().optional(),
27608
+ runSeriesId: z.string().optional(),
27609
+ seriesSlug: z.string().optional(),
27610
+ includeOccurrenceId: z.string().optional(),
27611
+ readIntent: z.string().optional(),
27612
+ detailLevel: z.string().optional(),
27613
+ readProfile: z.string().optional()
27614
+ };
27615
+ z.object(publicEventLoaderQuerySchemaShape);
27442
27616
  const eventPresetSchema = z.enum([
27443
27617
  "event",
27444
27618
  "class",
@@ -28241,6 +28415,44 @@ function toWholeSeriesRegistrationEvents(events) {
28241
28415
  return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
28242
28416
  }
28243
28417
  //#endregion
28418
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
28419
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
28420
+ const eventRecoveryRequestSchema = z.object({
28421
+ ...stringEventQueryShape,
28422
+ limit: z.coerce.number().int().positive().optional(),
28423
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
28424
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
28425
+ detailLevel: z.enum(["full", "listing"]).optional(),
28426
+ stage: z.enum(["preview", "published"]).optional()
28427
+ });
28428
+ function resolveEventRegistrationEventSource(input) {
28429
+ if (input.wholeSeriesRunEvents != null) return {
28430
+ kind: "loaded",
28431
+ events: input.wholeSeriesRunEvents
28432
+ };
28433
+ if (input.events != null) return {
28434
+ kind: "loaded",
28435
+ events: input.events
28436
+ };
28437
+ return {
28438
+ kind: "unresolved",
28439
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
28440
+ };
28441
+ }
28442
+ const eventLoaderFailureSchema = z.object({
28443
+ endpoint: z.literal("listPublicEvents"),
28444
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
28445
+ });
28446
+ function parseEventLoaderRecoveryRequest(value) {
28447
+ const parsed = eventLoaderFailureSchema.safeParse(value);
28448
+ if (!parsed.success) return null;
28449
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
28450
+ return {
28451
+ ...params,
28452
+ stage: stage ?? "published"
28453
+ };
28454
+ }
28455
+ //#endregion
28244
28456
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28245
28457
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
28246
28458
  "Date",
@@ -28258,8 +28470,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
28258
28470
  const eventRegistrationHydrationSchemaShape = {
28259
28471
  occurrenceContext: occurrenceContextSchema.optional(),
28260
28472
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
28261
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28262
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28263
28473
  maxTickets: z.string().optional(),
28264
28474
  showVenue: z.boolean().optional(),
28265
28475
  showCapacity: z.boolean().optional(),
@@ -28271,12 +28481,22 @@ const eventRegistrationHydrationSchemaShape = {
28271
28481
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
28272
28482
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
28273
28483
  };
28484
+ const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
28485
+ kind: z.literal("loaded"),
28486
+ events: z.array(eventRegistrationPublicEventSchema)
28487
+ }), z.object({
28488
+ kind: z.literal("unresolved"),
28489
+ request: eventRecoveryRequestSchema.nullable()
28490
+ })]);
28274
28491
  const eventRegistrationSourceSchema = z.object({
28275
28492
  siteId: z.string().optional(),
28276
28493
  apiBaseUrl: z.string().optional(),
28277
28494
  portalToken: z.string().nullable().optional(),
28278
28495
  previewToken: z.string().nullable().optional(),
28279
28496
  ...eventRegistrationHydrationSchemaShape,
28497
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28498
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28499
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
28280
28500
  className: z.string().nullable().optional(),
28281
28501
  buttonText: z.string().nullable().optional(),
28282
28502
  maxTickets: z.string().nullable().optional(),
@@ -28297,7 +28517,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
28297
28517
  titleText: z.string(),
28298
28518
  bodyText: z.string()
28299
28519
  })]);
28300
- const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
28520
+ const eventRegistrationHydrationSchema = z.object({
28521
+ ...eventRegistrationHydrationSchemaShape,
28522
+ eventSource: eventRegistrationEventSourceSchema
28523
+ });
28301
28524
  const eventRegistrationRenderSchema = z.object({
28302
28525
  display: eventRegistrationDisplaySchema,
28303
28526
  hydration: eventRegistrationHydrationSchema
@@ -28356,16 +28579,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
28356
28579
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
28357
28580
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
28358
28581
  }
28359
- function scopeEventRegistrationSourceEvents(source) {
28360
- return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
28582
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
28583
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
28361
28584
  occurrenceContext: source.occurrenceContext,
28362
28585
  subject: source.subject
28363
28586
  });
28364
28587
  }
28365
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
28366
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
28367
- return [...scopedSourceEvents];
28368
- }
28369
28588
  /**
28370
28589
  * The one run this surface is registering for, when the scoped events describe
28371
28590
  * exactly one. More than one run means the visitor still has to choose.
@@ -28405,14 +28624,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
28405
28624
  render: createZodCodec(eventRegistrationRenderSchema)
28406
28625
  },
28407
28626
  buildRender: (source) => {
28408
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
28409
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
28627
+ const eventSource = resolveEventRegistrationEventSource({
28628
+ events: source.events,
28629
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
28630
+ failures: source.eventLoaderFailures
28631
+ });
28632
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
28410
28633
  return {
28411
28634
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
28412
28635
  hydration: {
28413
28636
  occurrenceContext: source.occurrenceContext ?? null,
28414
28637
  subject: source.subject ?? null,
28415
- events,
28638
+ eventSource: eventSource.kind === "loaded" ? {
28639
+ ...eventSource,
28640
+ events: [...scopedSourceEvents]
28641
+ } : eventSource,
28416
28642
  maxTickets: source.maxTickets ?? void 0,
28417
28643
  showVenue: source.showVenue,
28418
28644
  showCapacity: source.showCapacity,
@@ -28588,6 +28814,7 @@ const eventRegistrationBlockDefinition = {
28588
28814
  } },
28589
28815
  events: { $bind: { from: "data.events" } },
28590
28816
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
28817
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
28591
28818
  sitePasses: { $bind: { from: "data.sitePasses" } },
28592
28819
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
28593
28820
  stage: { $bind: {
@@ -29073,6 +29300,35 @@ const eventSpotlightBlockDefinition = {
29073
29300
  } }
29074
29301
  };
29075
29302
  //#endregion
29303
+ //#region ../blocks/src/system/blocks/events/shared/eventSelection.ts
29304
+ /** Invalid saved selections fail closed rather than widening discovery. */
29305
+ function resolveEventSelection(mode, value) {
29306
+ if (mode !== "selected") return { kind: "matching" };
29307
+ const candidates = Array.isArray(value) ? value : typeof value === "string" ? value.split(",").filter(Boolean) : [];
29308
+ const ids = [];
29309
+ for (const candidate of candidates) {
29310
+ if (typeof candidate !== "string") return {
29311
+ kind: "selected",
29312
+ seriesIds: []
29313
+ };
29314
+ const parsed = parseEventSeriesId(candidate.trim());
29315
+ if (!parsed.ok) return {
29316
+ kind: "selected",
29317
+ seriesIds: []
29318
+ };
29319
+ ids.push(parsed.value);
29320
+ }
29321
+ return {
29322
+ kind: "selected",
29323
+ seriesIds: [...new Set(ids)].sort()
29324
+ };
29325
+ }
29326
+ /** Undefined means discovery; an empty string is an explicitly empty selection. */
29327
+ function eventSeriesScopeCsv(value) {
29328
+ if (value == null) return void 0;
29329
+ return typeof value === "string" ? value : value.join(",");
29330
+ }
29331
+ //#endregion
29076
29332
  //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
29077
29333
  /**
29078
29334
  * Layout classes for event listing containers and cards. Presentation
@@ -29201,6 +29457,7 @@ z.object({
29201
29457
  eventSurface: z.enum(eventSurfaceScopeValues).optional(),
29202
29458
  eventPresets: z.string().optional(),
29203
29459
  scheduleScope: z.enum(eventScheduleScopeValues).optional(),
29460
+ seriesIds: z.string().optional(),
29204
29461
  categoryIds: z.string().optional(),
29205
29462
  venueId: z.string().transform(normalizeCalendarFilterId).optional(),
29206
29463
  staffMemberId: z.string().transform(normalizeCalendarFilterId).optional()
@@ -29263,6 +29520,7 @@ const eventCollectionFilterSourceSchemaShape = {
29263
29520
  eventSurface: eventSurfaceScopeSchema$1.nullable().optional(),
29264
29521
  filterEventPresets: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29265
29522
  scheduleScope: eventScheduleScopeSchema$1.nullable().optional(),
29523
+ seriesIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29266
29524
  filterCategoryIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29267
29525
  filterStaffMemberId: z.string().nullable().optional(),
29268
29526
  filterVenueId: z.string().nullable().optional()
@@ -29309,6 +29567,7 @@ const eventCollectionDisplaySchemaShape = {
29309
29567
  eventSurface: eventSurfaceScopeSchema$1,
29310
29568
  filterEventPresets: z.string().nullable(),
29311
29569
  scheduleScope: eventScheduleScopeSchema$1,
29570
+ seriesIds: z.string().nullable().optional(),
29312
29571
  filterCategoryIds: z.string().nullable(),
29313
29572
  filterStaffMemberId: z.string().nullable(),
29314
29573
  filterVenueId: z.string().nullable(),
@@ -29356,11 +29615,15 @@ function buildEventCollectionDisplay(source) {
29356
29615
  };
29357
29616
  }
29358
29617
  function buildEventCollectionFilterDisplay(source) {
29359
- return {
29360
- showFilters: source.showFilters ?? true,
29361
- showCategoryFilter: source.showCategoryFilter ?? "auto",
29362
- showVenueFilter: source.showVenueFilter ?? false,
29363
- showStaffFilter: source.showStaffFilter ?? true,
29618
+ const selected = source.seriesIds != null;
29619
+ const matchingFilters = selected ? {
29620
+ eventSurface: "all",
29621
+ filterEventPresets: null,
29622
+ scheduleScope: "any",
29623
+ filterCategoryIds: null,
29624
+ filterStaffMemberId: null,
29625
+ filterVenueId: null
29626
+ } : {
29364
29627
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29365
29628
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29366
29629
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
@@ -29368,6 +29631,14 @@ function buildEventCollectionFilterDisplay(source) {
29368
29631
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29369
29632
  filterVenueId: normalizeEventVenueId(source.filterVenueId)
29370
29633
  };
29634
+ return {
29635
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29636
+ showFilters: selected ? false : source.showFilters ?? true,
29637
+ showCategoryFilter: source.showCategoryFilter ?? "auto",
29638
+ showVenueFilter: source.showVenueFilter ?? false,
29639
+ showStaffFilter: source.showStaffFilter ?? true,
29640
+ ...matchingFilters
29641
+ };
29371
29642
  }
29372
29643
  function buildEventCollectionPresentationDisplay(source) {
29373
29644
  return {
@@ -29382,14 +29653,15 @@ function buildEventCollectionPresentationDisplay(source) {
29382
29653
  }
29383
29654
  function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
29384
29655
  const timeZone = source.calendarWindow?.scope.timeZone ?? toBookingTimeZone(source.bookingTimeZone);
29656
+ const selected = source.seriesIds != null;
29385
29657
  return {
29386
29658
  calendarWindow: source.calendarWindow ?? void 0,
29387
29659
  siteId: source.siteId,
29388
29660
  stage: source.stage,
29389
29661
  prefetchedEvents: source.events != null,
29390
- eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29391
- filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29392
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29662
+ eventSurface: selected ? "all" : normalizeEventSurfaceScope(source.eventSurface),
29663
+ filterEventPresets: selected ? null : normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29664
+ scheduleScope: selected ? "any" : normalizeEventScheduleScope(source.scheduleScope),
29393
29665
  calendarContext: {
29394
29666
  timeZone,
29395
29667
  initialToday: source.calendarWindow?.initialToday ?? getLocalScheduleDate(now, timeZone)
@@ -29455,6 +29727,7 @@ const eventListingHydrationSchema = z.object({
29455
29727
  eventSurface: eventSurfaceScopeSchema,
29456
29728
  filterEventPresets: z.string().nullable(),
29457
29729
  scheduleScope: eventScheduleScopeSchema,
29730
+ seriesIds: z.string().nullable().optional(),
29458
29731
  filterCategoryIds: z.string().nullable().optional(),
29459
29732
  filterStaffMemberId: z.string().nullable().optional(),
29460
29733
  filterVenueId: z.string().nullable().optional(),
@@ -29515,6 +29788,7 @@ const eventListingBlockRuntime = defineProgressiveBlockRuntime({
29515
29788
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29516
29789
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29517
29790
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29791
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29518
29792
  filterCategoryIds: normalizeEventCategoryIdsCsv(source.filterCategoryIds),
29519
29793
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29520
29794
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
@@ -29888,6 +30162,65 @@ const eventListingBlockDefinition = {
29888
30162
  } }
29889
30163
  };
29890
30164
  //#endregion
30165
+ //#region ../blocks/src/system/blocks/events/eventSelectionFields.ts
30166
+ const eventSelectionFields = [{
30167
+ id: "eventSelection",
30168
+ type: "select",
30169
+ label: "Events to show",
30170
+ required: false,
30171
+ multiple: false,
30172
+ defaultValue: "matching",
30173
+ options: [{
30174
+ value: "matching",
30175
+ label: "All matching events"
30176
+ }, {
30177
+ value: "selected",
30178
+ label: "Selected events"
30179
+ }],
30180
+ ui: { intent: "behavior" }
30181
+ }, createSiteOptionSelectField({
30182
+ id: "selectedEventSeriesIds",
30183
+ label: "Selected events",
30184
+ description: "Show upcoming dates for these events. Other event filters do not apply.",
30185
+ required: false,
30186
+ multiple: true,
30187
+ defaultValue: [],
30188
+ optionSource: "eventSeries",
30189
+ ui: {
30190
+ intent: "behavior",
30191
+ searchThreshold: 1,
30192
+ visibleWhen: {
30193
+ field: "eventSelection",
30194
+ equals: "selected"
30195
+ }
30196
+ }
30197
+ })];
30198
+ function withEventSelectionVisibility(field) {
30199
+ if (![
30200
+ "eventSurface",
30201
+ "filterEventPresets",
30202
+ "scheduleScope",
30203
+ "filterCategoryIds",
30204
+ "filterStaffMemberId",
30205
+ "filterVenueId",
30206
+ "showFilters",
30207
+ "showCategoryFilter",
30208
+ "showVenueFilter",
30209
+ "showStaffFilter"
30210
+ ].includes(field.id)) return field;
30211
+ const visibleWhen = field.ui?.visibleWhen;
30212
+ return {
30213
+ ...field,
30214
+ ui: {
30215
+ ...field.ui,
30216
+ visibleWhen: { allOf: [{
30217
+ field: "eventSelection",
30218
+ notEquals: "selected"
30219
+ }, ...visibleWhen ? [visibleWhen] : []] }
30220
+ }
30221
+ };
30222
+ }
30223
+ //#endregion
29891
30224
  //#region ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
29892
30225
  const eventCalendarSourceSchema = z.object({
29893
30226
  ...eventCollectionSourceSchemaShape,
@@ -29970,19 +30303,59 @@ const eventCalendarBlockRuntime = defineProgressiveBlockRuntime({
29970
30303
  //#region ../blocks/src/system/blocks/events/eventCalendarDataLoaders.ts
29971
30304
  const scopeParams = {
29972
30305
  siteId: { $bind: { from: "$root.siteId" } },
30306
+ seriesIds: { $bind: {
30307
+ from: "content",
30308
+ transforms: [{
30309
+ id: "events.calendarSelectionParam",
30310
+ options: { key: "seriesIds" }
30311
+ }]
30312
+ } },
29973
30313
  stage: { $bind: {
29974
30314
  from: "$root.previewStage",
29975
30315
  fallback: "published"
29976
30316
  } },
29977
- eventSurface: { $bind: { from: "content.eventSurface" } },
30317
+ eventSurface: { $bind: {
30318
+ from: "content",
30319
+ transforms: [{
30320
+ id: "events.calendarSelectionParam",
30321
+ options: { key: "eventSurface" }
30322
+ }, { id: "value.csv" }]
30323
+ } },
29978
30324
  eventPresets: { $bind: {
29979
- from: "content.filterEventPresets",
29980
- transforms: [{ id: "value.csv" }]
30325
+ from: "content",
30326
+ transforms: [{
30327
+ id: "events.calendarSelectionParam",
30328
+ options: { key: "filterEventPresets" }
30329
+ }, { id: "value.csv" }]
30330
+ } },
30331
+ scheduleScope: { $bind: {
30332
+ from: "content",
30333
+ transforms: [{
30334
+ id: "events.calendarSelectionParam",
30335
+ options: { key: "scheduleScope" }
30336
+ }, { id: "value.csv" }]
30337
+ } },
30338
+ categoryIds: { $bind: {
30339
+ from: "content",
30340
+ transforms: [{
30341
+ id: "events.calendarSelectionParam",
30342
+ options: { key: "filterCategoryIds" }
30343
+ }, { id: "value.csv" }]
29981
30344
  } },
29982
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
29983
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
29984
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
29985
- venueId: { $bind: { from: "content.filterVenueId" } }
30345
+ staffMemberId: { $bind: {
30346
+ from: "content",
30347
+ transforms: [{
30348
+ id: "events.calendarSelectionParam",
30349
+ options: { key: "filterStaffMemberId" }
30350
+ }, { id: "value.csv" }]
30351
+ } },
30352
+ venueId: { $bind: {
30353
+ from: "content",
30354
+ transforms: [{
30355
+ id: "events.calendarSelectionParam",
30356
+ options: { key: "filterVenueId" }
30357
+ }, { id: "value.csv" }]
30358
+ } }
29986
30359
  };
29987
30360
  /** Combined renders two jobs; calendar-only variants never pay for the list seed. */
29988
30361
  const eventCalendarDataLoaders = {
@@ -30112,6 +30485,13 @@ const eventCalendarLayout = [styledSection({
30112
30485
  from: "content.defaultCalendarView",
30113
30486
  fallback: "month"
30114
30487
  } },
30488
+ seriesIds: { $bind: {
30489
+ from: "content",
30490
+ transforms: [{
30491
+ id: "events.calendarSelectionParam",
30492
+ options: { key: "seriesIds" }
30493
+ }]
30494
+ } },
30115
30495
  showFilters: { $bind: {
30116
30496
  from: "content.showFilters",
30117
30497
  fallback: true
@@ -30133,17 +30513,47 @@ const eventCalendarLayout = [styledSection({
30133
30513
  fallback: true
30134
30514
  } },
30135
30515
  eventSurface: { $bind: {
30136
- from: "content.eventSurface",
30137
- fallback: "all"
30516
+ from: "content",
30517
+ transforms: [{
30518
+ id: "events.calendarSelectionParam",
30519
+ options: { key: "eventSurface" }
30520
+ }]
30521
+ } },
30522
+ filterEventPresets: { $bind: {
30523
+ from: "content",
30524
+ transforms: [{
30525
+ id: "events.calendarSelectionParam",
30526
+ options: { key: "filterEventPresets" }
30527
+ }]
30138
30528
  } },
30139
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
30140
30529
  scheduleScope: { $bind: {
30141
- from: "content.scheduleScope",
30142
- fallback: "any"
30530
+ from: "content",
30531
+ transforms: [{
30532
+ id: "events.calendarSelectionParam",
30533
+ options: { key: "scheduleScope" }
30534
+ }]
30535
+ } },
30536
+ filterCategoryIds: { $bind: {
30537
+ from: "content",
30538
+ transforms: [{
30539
+ id: "events.calendarSelectionParam",
30540
+ options: { key: "filterCategoryIds" }
30541
+ }]
30542
+ } },
30543
+ filterStaffMemberId: { $bind: {
30544
+ from: "content",
30545
+ transforms: [{
30546
+ id: "events.calendarSelectionParam",
30547
+ options: { key: "filterStaffMemberId" }
30548
+ }]
30549
+ } },
30550
+ filterVenueId: { $bind: {
30551
+ from: "content",
30552
+ transforms: [{
30553
+ id: "events.calendarSelectionParam",
30554
+ options: { key: "filterVenueId" }
30555
+ }]
30143
30556
  } },
30144
- filterCategoryIds: { $bind: { from: "content.filterCategoryIds" } },
30145
- filterStaffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
30146
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
30147
30557
  cardRole: { $bind: {
30148
30558
  from: "content._cardStyles.role",
30149
30559
  fallback: "default"
@@ -30647,6 +31057,7 @@ const eventCalendarAdditionalFields = [
30647
31057
  }
30648
31058
  }
30649
31059
  },
31060
+ ...eventSelectionFields,
30650
31061
  {
30651
31062
  id: "eventSurface",
30652
31063
  type: "select",
@@ -30856,7 +31267,7 @@ const eventCalendarBlockDefinition = {
30856
31267
  titleSource: "heading",
30857
31268
  description: "Display events with calendar, list, or combined views with filtering",
30858
31269
  skipSectionStyles: true,
30859
- additionalFields: eventCalendarAdditionalFields,
31270
+ additionalFields: eventCalendarAdditionalFields.map(withEventSelectionVisibility),
30860
31271
  styleTokens: {
30861
31272
  background: "surface",
30862
31273
  typography: "body",
@@ -35010,6 +35421,15 @@ const newsletterFieldSchema = z.object({
35010
35421
  placeholder: z.string().optional()
35011
35422
  });
35012
35423
  const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
35424
+ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
35425
+ const parsed = parseMailingListContentVersionId(value);
35426
+ if (parsed) return parsed;
35427
+ ctx.addIssue({
35428
+ code: z.ZodIssueCode.custom,
35429
+ message: "Invalid mailing-list content version ID"
35430
+ });
35431
+ return z.NEVER;
35432
+ });
35013
35433
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
35014
35434
  const newsletterSourceCommonSchema = z.object({
35015
35435
  siteId: z.string().optional(),
@@ -35023,7 +35443,8 @@ const newsletterSourceCommonSchema = z.object({
35023
35443
  const newsletterSourceSchema = z.discriminatedUnion("source", [
35024
35444
  newsletterSourceCommonSchema.extend({
35025
35445
  source: z.literal("block"),
35026
- blockId: z.string().nullable().optional()
35446
+ blockId: z.string().nullable().optional(),
35447
+ contentVersionId: z.string().nullable().optional()
35027
35448
  }),
35028
35449
  newsletterSourceCommonSchema.extend({
35029
35450
  source: z.literal("signed-footer"),
@@ -35039,6 +35460,7 @@ const newsletterDisplaySchema = z.object({
35039
35460
  availability: z.enum(["ready", "unavailable"]),
35040
35461
  className: z.string().nullable(),
35041
35462
  buttonLabel: z.string(),
35463
+ successMessage: z.string(),
35042
35464
  buttonVariant: newsletterButtonVariantSchema,
35043
35465
  privacyNote: z.string().nullable(),
35044
35466
  fields: z.array(newsletterFieldSchema),
@@ -35053,7 +35475,8 @@ const newsletterHydrationSchema = z.object({
35053
35475
  tag: z.literal("block-source"),
35054
35476
  sourceRef: z.object({
35055
35477
  tag: z.literal("block_ref"),
35056
- blockId: mailingListSignupBlockIdSchema
35478
+ blockId: mailingListSignupBlockIdSchema,
35479
+ contentVersionId: mailingListContentVersionIdSchema
35057
35480
  }).nullable()
35058
35481
  }),
35059
35482
  z.object({
@@ -35092,6 +35515,7 @@ function buildNewsletterDisplay(source) {
35092
35515
  fields: { preset: "emailOnly" },
35093
35516
  includeOptionalPhone: false,
35094
35517
  buttonLabel: "Subscribe",
35518
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
35095
35519
  privacyNote: null
35096
35520
  };
35097
35521
  const targeting = source.targeting ?? { mode: "default" };
@@ -35101,6 +35525,7 @@ function buildNewsletterDisplay(source) {
35101
35525
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
35102
35526
  className: source.className ?? null,
35103
35527
  buttonLabel: form.buttonLabel,
35528
+ successMessage: form.successMessage,
35104
35529
  buttonVariant: source.buttonVariant ?? "primary",
35105
35530
  privacyNote: form.privacyNote,
35106
35531
  fields: getGlobalFormFields(form),
@@ -35131,7 +35556,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
35131
35556
  function projectNewsletterFormHydrationTarget(source) {
35132
35557
  switch (source.source) {
35133
35558
  case "block": {
35134
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
35559
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
35135
35560
  if (sourceRef?.tag === "block_ref") return {
35136
35561
  tag: "block-source",
35137
35562
  sourceRef
@@ -37265,6 +37690,26 @@ const linksTransforms = [{
37265
37690
  //#endregion
37266
37691
  //#region ../blocks/src/system/transforms/registry/index.ts
37267
37692
  const builtinTransformDefinitions = [
37693
+ {
37694
+ id: "events.calendarSelectionParam",
37695
+ kind: "formatter",
37696
+ summary: "Resolve selected events instead of discovery filters",
37697
+ schema: z.object({ key: z.enum([
37698
+ "seriesIds",
37699
+ "eventSurface",
37700
+ "filterEventPresets",
37701
+ "scheduleScope",
37702
+ "filterCategoryIds",
37703
+ "filterStaffMemberId",
37704
+ "filterVenueId"
37705
+ ]) }),
37706
+ run(value, { key }) {
37707
+ const content = asPartialObject(value) ?? {};
37708
+ const selection = resolveEventSelection(content.eventSelection, content.selectedEventSeriesIds);
37709
+ if (selection.kind === "selected") return key === "seriesIds" ? selection.seriesIds : void 0;
37710
+ return key === "seriesIds" ? void 0 : content[key];
37711
+ }
37712
+ },
37268
37713
  {
37269
37714
  id: "events.calendarReadEnabled",
37270
37715
  kind: "formatter",
@@ -37622,7 +38067,17 @@ const riverbankSiteConfigInputSchema = z.object({
37622
38067
  z.object({
37623
38068
  config: riverbankSiteConfigInputSchema,
37624
38069
  forceContentTypes: z.boolean().optional(),
37625
- mode: z.enum(["apply", "preview"]).optional()
38070
+ mode: z.enum(["apply", "preview"]).optional(),
38071
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
38072
+ if (value === void 0) return void 0;
38073
+ const parsed = parseMailingListProviderScope(value);
38074
+ if (parsed.ok) return parsed.value;
38075
+ ctx.addIssue({
38076
+ code: "custom",
38077
+ message: "Invalid mailing-list provider scope"
38078
+ });
38079
+ return z.NEVER;
38080
+ }).optional()
37626
38081
  }).strict();
37627
38082
  //#endregion
37628
38083
  //#region ../api/src/sdkThemeWire.ts