@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
@@ -1359,10 +1359,12 @@ const unsafeAsApiKeyId = (id) => id;
1359
1359
  const unsafeAsEventOfferingId = (id) => id;
1360
1360
  const unsafeAsEventSeriesId = (id) => id;
1361
1361
  const unsafeAsUserId = (id) => id;
1362
+ const unsafeAsContentVersionId = (id) => id;
1362
1363
  const parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
1363
1364
  const parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
1364
1365
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
1365
1366
  const parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
1367
+ const parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
1366
1368
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
1367
1369
  //#endregion
1368
1370
  //#region ../core/src/assert-never.ts
@@ -1596,7 +1598,7 @@ function parseEventPageSurfaceDestinationMode(value) {
1596
1598
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
1597
1599
  }
1598
1600
  function parseEventPageSurfaceSubject(value) {
1599
- if (!isRecord$11(value)) return err({ kind: "notObject" });
1601
+ if (!isRecord$12(value)) return err({ kind: "notObject" });
1600
1602
  switch (value.kind) {
1601
1603
  case "eventSeries": {
1602
1604
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -1651,7 +1653,7 @@ function parseEventSeriesIdList(values) {
1651
1653
  }
1652
1654
  return ok(parsed);
1653
1655
  }
1654
- function isRecord$11(value) {
1656
+ function isRecord$12(value) {
1655
1657
  return typeof value === "object" && value !== null && !Array.isArray(value);
1656
1658
  }
1657
1659
  //#endregion
@@ -1822,7 +1824,7 @@ function toLocationCoordinates(value) {
1822
1824
  }
1823
1825
  //#endregion
1824
1826
  //#region ../core/src/rich-text.ts
1825
- function isRecord$10(value) {
1827
+ function isRecord$11(value) {
1826
1828
  return typeof value === "object" && value !== null && !Array.isArray(value);
1827
1829
  }
1828
1830
  function hasOnlyKeys(value, allowed) {
@@ -1842,15 +1844,15 @@ function isDenseArrayOf(value, predicate) {
1842
1844
  return true;
1843
1845
  }
1844
1846
  function isTipTapMark(value) {
1845
- return isRecord$10(value) && hasOnlyKeys(value, markKeys) && typeof value.type === "string" && value.type.length > 0 && (value.attrs === void 0 || isRecord$10(value.attrs));
1847
+ return isRecord$11(value) && hasOnlyKeys(value, markKeys) && typeof value.type === "string" && value.type.length > 0 && (value.attrs === void 0 || isRecord$11(value.attrs));
1846
1848
  }
1847
1849
  function isTipTapNode(value) {
1848
- if (!isRecord$10(value) || !hasOnlyKeys(value, nodeKeys) || typeof value.type !== "string" || value.type.length === 0 || value.type === "doc" || value.attrs !== void 0 && !isRecord$10(value.attrs) || value.marks !== void 0 && (!Array.isArray(value.marks) || !isDenseArrayOf(value.marks, isTipTapMark)) || value.content !== void 0 && (!Array.isArray(value.content) || !isDenseArrayOf(value.content, isTipTapNode))) return false;
1850
+ if (!isRecord$11(value) || !hasOnlyKeys(value, nodeKeys) || typeof value.type !== "string" || value.type.length === 0 || value.type === "doc" || value.attrs !== void 0 && !isRecord$11(value.attrs) || value.marks !== void 0 && (!Array.isArray(value.marks) || !isDenseArrayOf(value.marks, isTipTapMark)) || value.content !== void 0 && (!Array.isArray(value.content) || !isDenseArrayOf(value.content, isTipTapNode))) return false;
1849
1851
  if (value.type === "text") return typeof value.text === "string" && value.text.length > 0 && value.content === void 0;
1850
1852
  return value.text === void 0;
1851
1853
  }
1852
1854
  function isCanonicalRichTextDoc(value) {
1853
- return isRecord$10(value) && hasOnlyKeys(value, rootKeys) && value.type === "doc" && Array.isArray(value.content) && isDenseArrayOf(value.content, isTipTapNode);
1855
+ return isRecord$11(value) && hasOnlyKeys(value, rootKeys) && value.type === "doc" && Array.isArray(value.content) && isDenseArrayOf(value.content, isTipTapNode);
1854
1856
  }
1855
1857
  //#endregion
1856
1858
  //#region ../core/src/mailing-list-identifiers.ts
@@ -1867,16 +1869,47 @@ function parsePositiveInteger(value) {
1867
1869
  function parseNewsletterListId(value) {
1868
1870
  return parseTrimmedMatchingString(value, UUID_PATTERN);
1869
1871
  }
1872
+ function parseMailchimpAccountId(value) {
1873
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1874
+ }
1870
1875
  function parseMailchimpAudienceId(value) {
1871
1876
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1872
1877
  }
1873
1878
  function parseMailchimpInterestId(value) {
1874
1879
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1875
1880
  }
1881
+ function parseBrevoAccountId(value) {
1882
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1883
+ }
1876
1884
  function parseBrevoListId(value) {
1877
1885
  return parsePositiveInteger(value);
1878
1886
  }
1879
1887
  //#endregion
1888
+ //#region ../core/src/mailing-list-setup.ts
1889
+ function isRecord$10(value) {
1890
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1891
+ }
1892
+ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
1893
+ function parseMailingListProviderScope(value) {
1894
+ if (!isRecord$10(value)) return err("invalid_mailing_list_provider_scope");
1895
+ if (value.provider === "native") return ok({ provider: "native" });
1896
+ if (value.provider === "brevo") {
1897
+ const accountId = parseBrevoAccountId(value.accountId);
1898
+ return accountId !== null ? ok({
1899
+ provider: "brevo",
1900
+ accountId
1901
+ }) : err("invalid_mailing_list_provider_scope");
1902
+ }
1903
+ if (value.provider === "mailchimp") {
1904
+ const accountId = parseMailchimpAccountId(value.accountId);
1905
+ return accountId !== null ? ok({
1906
+ provider: "mailchimp",
1907
+ accountId
1908
+ }) : err("invalid_mailing_list_provider_scope");
1909
+ }
1910
+ return err("invalid_mailing_list_provider_scope");
1911
+ }
1912
+ //#endregion
1880
1913
  //#region ../core/src/mailing-list-setup-parser.ts
1881
1914
  function parseMailingListGlobalForm(value) {
1882
1915
  if (!isRecord$9(value)) return formError("shape");
@@ -1885,12 +1918,15 @@ function parseMailingListGlobalForm(value) {
1885
1918
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
1886
1919
  const buttonLabel = parseRequiredString(value.buttonLabel);
1887
1920
  if (buttonLabel === null) return formError("buttonLabel");
1921
+ const successMessage = parseRequiredString(value.successMessage);
1922
+ if (successMessage === null) return formError("successMessage");
1888
1923
  const privacyNote = parseOptionalString(value.privacyNote);
1889
1924
  if (privacyNote === void 0) return formError("privacyNote");
1890
1925
  return ok({
1891
1926
  fields,
1892
1927
  includeOptionalPhone: value.includeOptionalPhone,
1893
1928
  buttonLabel,
1929
+ successMessage,
1894
1930
  privacyNote
1895
1931
  });
1896
1932
  }
@@ -2220,11 +2256,17 @@ function parseMailingListSignedSourceToken(value) {
2220
2256
  const parsed = typeof value === "string" ? value.trim() : "";
2221
2257
  return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
2222
2258
  }
2223
- function buildMailingListSignupBlockSourceRef(blockId) {
2224
- const parsed = parseMailingListBlockId(blockId);
2225
- return parsed !== null ? {
2259
+ function parseMailingListContentVersionId(value) {
2260
+ const parsed = parseContentVersionId(value);
2261
+ return parsed.ok ? parsed.value : null;
2262
+ }
2263
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
2264
+ const parsedBlockId = parseMailingListBlockId(blockId);
2265
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
2266
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
2226
2267
  tag: "block_ref",
2227
- blockId: parsed
2268
+ blockId: parsedBlockId,
2269
+ contentVersionId: parsedContentVersionId
2228
2270
  } : null;
2229
2271
  }
2230
2272
  //#endregion
@@ -2729,6 +2771,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
2729
2771
  auth: "public",
2730
2772
  responseKind: "json"
2731
2773
  },
2774
+ getPublicBookingServiceBySlug: {
2775
+ path: "/public/bookings/services/by-slug/{slug}",
2776
+ method: "GET",
2777
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
2778
+ tags: [TAG_TEMPLATES.publicBookingServices],
2779
+ auth: "public",
2780
+ responseKind: "json"
2781
+ },
2732
2782
  getPublicBookingResourcesReference: {
2733
2783
  path: "/public/bookings/resources/reference",
2734
2784
  method: "GET",
@@ -3281,16 +3331,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3281
3331
  responseKind: "json"
3282
3332
  }
3283
3333
  });
3334
+ //#endregion
3335
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
3336
+ /**
3337
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
3338
+ *
3339
+ * Every route here is reached before there is an account, so none of them can
3340
+ * be scoped to a site or a user: the token is the whole credential. They are
3341
+ * kept together so that stays obvious.
3342
+ */
3343
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3344
+ createPublicOnboardingAttempt: {
3345
+ path: "/public/onboarding/attempts",
3346
+ method: "POST",
3347
+ auth: "public",
3348
+ errors: [],
3349
+ responseKind: "json"
3350
+ },
3351
+ createPublicOnboardingLogoUploadUrl: {
3352
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
3353
+ method: "POST",
3354
+ auth: "public",
3355
+ errors: [],
3356
+ responseKind: "json"
3357
+ },
3358
+ uploadPublicOnboardingLogo: {
3359
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
3360
+ method: "POST",
3361
+ auth: "public",
3362
+ errors: [],
3363
+ responseKind: "json"
3364
+ },
3365
+ getPublicOnboardingAttempt: {
3366
+ path: "/public/onboarding/attempts/{attemptToken}",
3367
+ method: "GET",
3368
+ auth: "public",
3369
+ errors: [],
3370
+ responseKind: "json"
3371
+ },
3372
+ getPublicOnboardingAttemptProgress: {
3373
+ path: "/public/onboarding/attempts/{attemptToken}/status",
3374
+ method: "GET",
3375
+ auth: "public",
3376
+ errors: [],
3377
+ responseKind: "json"
3378
+ },
3379
+ updatePublicOnboardingAttempt: {
3380
+ path: "/public/onboarding/attempts/{attemptToken}",
3381
+ method: "PATCH",
3382
+ auth: "public",
3383
+ errors: [],
3384
+ responseKind: "json"
3385
+ },
3386
+ runPublicOnboardingAttempt: {
3387
+ path: "/public/onboarding/attempts/{attemptToken}/run",
3388
+ method: "POST",
3389
+ auth: "public",
3390
+ errors: [],
3391
+ responseKind: "json"
3392
+ },
3393
+ resendPublicOnboardingAttemptConfirmation: {
3394
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
3395
+ method: "POST",
3396
+ auth: "public",
3397
+ errors: [],
3398
+ responseKind: "json"
3399
+ }
3400
+ });
3401
+ //#endregion
3402
+ //#region ../api/src/billingEndpointDefinitions.ts
3403
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
3404
+ adminChangePlan: {
3405
+ path: "/admin/billing/plan",
3406
+ method: "POST",
3407
+ tags: ["admin", "billing"],
3408
+ auth: "admin",
3409
+ responseKind: "json"
3410
+ },
3411
+ changePlan: {
3412
+ path: "/billing/plan/change",
3413
+ method: "POST",
3414
+ tags: ["billing"],
3415
+ auth: "user",
3416
+ responseKind: "json"
3417
+ },
3418
+ createBillingPortalSession: {
3419
+ path: "/billing/portal/session",
3420
+ method: "POST",
3421
+ tags: ["billing"],
3422
+ auth: "user",
3423
+ responseKind: "json"
3424
+ }
3425
+ });
3284
3426
  ({
3285
3427
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
3428
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
3286
3429
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
3287
3430
  ...GIFTING_ENDPOINT_DEFINITIONS,
3288
- ...PUBLIC_READ_ENDPOINT_DEFINITIONS
3431
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
3432
+ ...BILLING_ENDPOINT_DEFINITIONS
3289
3433
  }), 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, {
3290
3434
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
3291
3435
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
3292
3436
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
3293
- }, 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 };
3437
+ }, 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 };
3294
3438
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
3295
3439
  z.object({
3296
3440
  accessToken: z.string().min(1).max(4096),
@@ -5930,7 +6074,7 @@ const BUTTON_CONTRAST_POLICY = {
5930
6074
  nonTextMinimumRatio: 3,
5931
6075
  gradientSamplesPerSegment: 20,
5932
6076
  alphaBackgrounds: "reject-without-known-surface",
5933
- disabled: "retain-full-colour-contract"
6077
+ disabled: "validated-colour-pair-with-muted-control-opacity"
5934
6078
  };
5935
6079
  function validateButtonSurfaceContrast(input) {
5936
6080
  const ratio = contrastRatio(input.buttonPaint, input.surfaceHex);
@@ -6456,59 +6600,6 @@ function interpolateHex(startHex, endHex, position) {
6456
6600
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
6457
6601
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
6458
6602
  }
6459
- shadeBackgroundEffect({
6460
- id: "darken-background",
6461
- name: "Darken on Hover",
6462
- description: "Darkens the background color on hover",
6463
- label: "Darken Amount (shade step)",
6464
- shadeDirection: 1
6465
- });
6466
- shadeBackgroundEffect({
6467
- id: "lighten-background",
6468
- name: "Lighten on Hover",
6469
- description: "Lightens the background color on hover",
6470
- label: "Lighten Amount (shade step)",
6471
- shadeDirection: -1
6472
- });
6473
- function shadeBackgroundEffect(config) {
6474
- return {
6475
- id: config.id,
6476
- name: config.name,
6477
- description: config.description,
6478
- category: "background",
6479
- pseudoElement: "none",
6480
- applicableTo: ["button"],
6481
- customizableOption: {
6482
- name: "amount",
6483
- type: "select",
6484
- label: config.label,
6485
- default: 100,
6486
- options: [
6487
- 0,
6488
- 100,
6489
- 200,
6490
- 300,
6491
- 400,
6492
- 500,
6493
- 600,
6494
- 700,
6495
- 800,
6496
- 900
6497
- ]
6498
- },
6499
- isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
6500
- generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
6501
- if (buttonConfig.background.type !== "solid") return "";
6502
- const amount = (options.amount || 100) * config.shadeDirection;
6503
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
6504
- return `
6505
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
6506
- background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
6507
- }
6508
- `;
6509
- }
6510
- };
6511
- }
6512
6603
  //#endregion
6513
6604
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
6514
6605
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
@@ -6793,6 +6884,59 @@ function mergeStyles(...styles) {
6793
6884
  }
6794
6885
  return Object.keys(merged).length ? merged : void 0;
6795
6886
  }
6887
+ shadeBackgroundEffect({
6888
+ id: "darken-background",
6889
+ name: "Darken on Hover",
6890
+ description: "Darkens the background color on hover",
6891
+ label: "Darken Amount (shade step)",
6892
+ shadeDirection: 1
6893
+ });
6894
+ shadeBackgroundEffect({
6895
+ id: "lighten-background",
6896
+ name: "Lighten on Hover",
6897
+ description: "Lightens the background color on hover",
6898
+ label: "Lighten Amount (shade step)",
6899
+ shadeDirection: -1
6900
+ });
6901
+ function shadeBackgroundEffect(config) {
6902
+ return {
6903
+ id: config.id,
6904
+ name: config.name,
6905
+ description: config.description,
6906
+ category: "background",
6907
+ pseudoElement: "none",
6908
+ applicableTo: ["button"],
6909
+ customizableOption: {
6910
+ name: "amount",
6911
+ type: "select",
6912
+ label: config.label,
6913
+ default: 100,
6914
+ options: [
6915
+ 0,
6916
+ 100,
6917
+ 200,
6918
+ 300,
6919
+ 400,
6920
+ 500,
6921
+ 600,
6922
+ 700,
6923
+ 800,
6924
+ 900
6925
+ ]
6926
+ },
6927
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
6928
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
6929
+ if (buttonConfig.background.type !== "solid") return "";
6930
+ const amount = (options.amount || 100) * config.shadeDirection;
6931
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
6932
+ return `
6933
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
6934
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
6935
+ }
6936
+ `;
6937
+ }
6938
+ };
6939
+ }
6796
6940
  //#endregion
6797
6941
  //#region ../theme-core/src/utils/tokenOrColor.ts
6798
6942
  /**
@@ -10215,8 +10359,14 @@ const headerInteractionPillPaletteValues = [
10215
10359
  "accent"
10216
10360
  ];
10217
10361
  /**
10218
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
10219
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
10362
+ * "No pill": a colour change on hover rather than a filled background.
10363
+ *
10364
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
10365
+ * foreground-adaptive style that is not the end of the story: the hover colour
10366
+ * is derived from the resolved opening foreground at render time, paired with
10367
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
10368
+ * whatever brand token the recipe happened to name. See
10369
+ * `applyOpeningForeground`.
10220
10370
  *
10221
10371
  * It exists because "a colour change on hover, no filled background" was not
10222
10372
  * expressible in the vocabulary, and it is what
@@ -16266,6 +16416,7 @@ function isDisplayMediaKind(kind) {
16266
16416
  }
16267
16417
  const siteOptionSources = [
16268
16418
  "eventCategories",
16419
+ "eventSeries",
16269
16420
  "venues",
16270
16421
  "staffMembers"
16271
16422
  ];
@@ -27136,7 +27287,8 @@ const appointmentServicesBlockDefinition = {
27136
27287
  el("appointment-services", {
27137
27288
  sectionHeading: { $bind: { from: "content.heading" } },
27138
27289
  services: { $bind: { from: "data.services" } },
27139
- pathname: { $bind: { from: "$root.pathname" } }
27290
+ pathname: { $bind: { from: "$root.pathname" } },
27291
+ servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
27140
27292
  })
27141
27293
  ], { gap: "lg" })
27142
27294
  })]
@@ -27516,6 +27668,28 @@ const bookingRequirementConsentFieldSchema = z.object({
27516
27668
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
27517
27669
  //#endregion
27518
27670
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
27671
+ const publicEventLoaderQuerySchemaShape = {
27672
+ limit: z.string().optional(),
27673
+ from: z.string().optional(),
27674
+ to: z.string().optional(),
27675
+ afterStartsAt: z.string().optional(),
27676
+ afterId: z.string().optional(),
27677
+ categoryIds: z.string().optional(),
27678
+ venueId: z.string().optional(),
27679
+ staffMemberId: z.string().optional(),
27680
+ eventSurface: z.string().optional(),
27681
+ eventPresets: z.string().optional(),
27682
+ scheduleScope: z.string().optional(),
27683
+ seriesId: z.string().optional(),
27684
+ seriesIds: z.string().optional(),
27685
+ runSeriesId: z.string().optional(),
27686
+ seriesSlug: z.string().optional(),
27687
+ includeOccurrenceId: z.string().optional(),
27688
+ readIntent: z.string().optional(),
27689
+ detailLevel: z.string().optional(),
27690
+ readProfile: z.string().optional()
27691
+ };
27692
+ z.object(publicEventLoaderQuerySchemaShape);
27519
27693
  const eventPresetSchema = z.enum([
27520
27694
  "event",
27521
27695
  "class",
@@ -28318,6 +28492,44 @@ function toWholeSeriesRegistrationEvents(events) {
28318
28492
  return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
28319
28493
  }
28320
28494
  //#endregion
28495
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
28496
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
28497
+ const eventRecoveryRequestSchema = z.object({
28498
+ ...stringEventQueryShape,
28499
+ limit: z.coerce.number().int().positive().optional(),
28500
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
28501
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
28502
+ detailLevel: z.enum(["full", "listing"]).optional(),
28503
+ stage: z.enum(["preview", "published"]).optional()
28504
+ });
28505
+ function resolveEventRegistrationEventSource(input) {
28506
+ if (input.wholeSeriesRunEvents != null) return {
28507
+ kind: "loaded",
28508
+ events: input.wholeSeriesRunEvents
28509
+ };
28510
+ if (input.events != null) return {
28511
+ kind: "loaded",
28512
+ events: input.events
28513
+ };
28514
+ return {
28515
+ kind: "unresolved",
28516
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
28517
+ };
28518
+ }
28519
+ const eventLoaderFailureSchema = z.object({
28520
+ endpoint: z.literal("listPublicEvents"),
28521
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
28522
+ });
28523
+ function parseEventLoaderRecoveryRequest(value) {
28524
+ const parsed = eventLoaderFailureSchema.safeParse(value);
28525
+ if (!parsed.success) return null;
28526
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
28527
+ return {
28528
+ ...params,
28529
+ stage: stage ?? "published"
28530
+ };
28531
+ }
28532
+ //#endregion
28321
28533
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28322
28534
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
28323
28535
  "Date",
@@ -28335,8 +28547,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
28335
28547
  const eventRegistrationHydrationSchemaShape = {
28336
28548
  occurrenceContext: occurrenceContextSchema.optional(),
28337
28549
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
28338
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28339
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28340
28550
  maxTickets: z.string().optional(),
28341
28551
  showVenue: z.boolean().optional(),
28342
28552
  showCapacity: z.boolean().optional(),
@@ -28348,12 +28558,22 @@ const eventRegistrationHydrationSchemaShape = {
28348
28558
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
28349
28559
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
28350
28560
  };
28561
+ const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
28562
+ kind: z.literal("loaded"),
28563
+ events: z.array(eventRegistrationPublicEventSchema)
28564
+ }), z.object({
28565
+ kind: z.literal("unresolved"),
28566
+ request: eventRecoveryRequestSchema.nullable()
28567
+ })]);
28351
28568
  const eventRegistrationSourceSchema = z.object({
28352
28569
  siteId: z.string().optional(),
28353
28570
  apiBaseUrl: z.string().optional(),
28354
28571
  portalToken: z.string().nullable().optional(),
28355
28572
  previewToken: z.string().nullable().optional(),
28356
28573
  ...eventRegistrationHydrationSchemaShape,
28574
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28575
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28576
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
28357
28577
  className: z.string().nullable().optional(),
28358
28578
  buttonText: z.string().nullable().optional(),
28359
28579
  maxTickets: z.string().nullable().optional(),
@@ -28374,7 +28594,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
28374
28594
  titleText: z.string(),
28375
28595
  bodyText: z.string()
28376
28596
  })]);
28377
- const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
28597
+ const eventRegistrationHydrationSchema = z.object({
28598
+ ...eventRegistrationHydrationSchemaShape,
28599
+ eventSource: eventRegistrationEventSourceSchema
28600
+ });
28378
28601
  const eventRegistrationRenderSchema = z.object({
28379
28602
  display: eventRegistrationDisplaySchema,
28380
28603
  hydration: eventRegistrationHydrationSchema
@@ -28433,16 +28656,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
28433
28656
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
28434
28657
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
28435
28658
  }
28436
- function scopeEventRegistrationSourceEvents(source) {
28437
- return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
28659
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
28660
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
28438
28661
  occurrenceContext: source.occurrenceContext,
28439
28662
  subject: source.subject
28440
28663
  });
28441
28664
  }
28442
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
28443
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
28444
- return [...scopedSourceEvents];
28445
- }
28446
28665
  /**
28447
28666
  * The one run this surface is registering for, when the scoped events describe
28448
28667
  * exactly one. More than one run means the visitor still has to choose.
@@ -28482,14 +28701,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
28482
28701
  render: createZodCodec(eventRegistrationRenderSchema)
28483
28702
  },
28484
28703
  buildRender: (source) => {
28485
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
28486
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
28704
+ const eventSource = resolveEventRegistrationEventSource({
28705
+ events: source.events,
28706
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
28707
+ failures: source.eventLoaderFailures
28708
+ });
28709
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
28487
28710
  return {
28488
28711
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
28489
28712
  hydration: {
28490
28713
  occurrenceContext: source.occurrenceContext ?? null,
28491
28714
  subject: source.subject ?? null,
28492
- events,
28715
+ eventSource: eventSource.kind === "loaded" ? {
28716
+ ...eventSource,
28717
+ events: [...scopedSourceEvents]
28718
+ } : eventSource,
28493
28719
  maxTickets: source.maxTickets ?? void 0,
28494
28720
  showVenue: source.showVenue,
28495
28721
  showCapacity: source.showCapacity,
@@ -28665,6 +28891,7 @@ const eventRegistrationBlockDefinition = {
28665
28891
  } },
28666
28892
  events: { $bind: { from: "data.events" } },
28667
28893
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
28894
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
28668
28895
  sitePasses: { $bind: { from: "data.sitePasses" } },
28669
28896
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
28670
28897
  stage: { $bind: {
@@ -29150,6 +29377,35 @@ const eventSpotlightBlockDefinition = {
29150
29377
  } }
29151
29378
  };
29152
29379
  //#endregion
29380
+ //#region ../blocks/src/system/blocks/events/shared/eventSelection.ts
29381
+ /** Invalid saved selections fail closed rather than widening discovery. */
29382
+ function resolveEventSelection(mode, value) {
29383
+ if (mode !== "selected") return { kind: "matching" };
29384
+ const candidates = Array.isArray(value) ? value : typeof value === "string" ? value.split(",").filter(Boolean) : [];
29385
+ const ids = [];
29386
+ for (const candidate of candidates) {
29387
+ if (typeof candidate !== "string") return {
29388
+ kind: "selected",
29389
+ seriesIds: []
29390
+ };
29391
+ const parsed = parseEventSeriesId(candidate.trim());
29392
+ if (!parsed.ok) return {
29393
+ kind: "selected",
29394
+ seriesIds: []
29395
+ };
29396
+ ids.push(parsed.value);
29397
+ }
29398
+ return {
29399
+ kind: "selected",
29400
+ seriesIds: [...new Set(ids)].sort()
29401
+ };
29402
+ }
29403
+ /** Undefined means discovery; an empty string is an explicitly empty selection. */
29404
+ function eventSeriesScopeCsv(value) {
29405
+ if (value == null) return void 0;
29406
+ return typeof value === "string" ? value : value.join(",");
29407
+ }
29408
+ //#endregion
29153
29409
  //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
29154
29410
  /**
29155
29411
  * Layout classes for event listing containers and cards. Presentation
@@ -29278,6 +29534,7 @@ z.object({
29278
29534
  eventSurface: z.enum(eventSurfaceScopeValues).optional(),
29279
29535
  eventPresets: z.string().optional(),
29280
29536
  scheduleScope: z.enum(eventScheduleScopeValues).optional(),
29537
+ seriesIds: z.string().optional(),
29281
29538
  categoryIds: z.string().optional(),
29282
29539
  venueId: z.string().transform(normalizeCalendarFilterId).optional(),
29283
29540
  staffMemberId: z.string().transform(normalizeCalendarFilterId).optional()
@@ -29340,6 +29597,7 @@ const eventCollectionFilterSourceSchemaShape = {
29340
29597
  eventSurface: eventSurfaceScopeSchema$1.nullable().optional(),
29341
29598
  filterEventPresets: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29342
29599
  scheduleScope: eventScheduleScopeSchema$1.nullable().optional(),
29600
+ seriesIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29343
29601
  filterCategoryIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29344
29602
  filterStaffMemberId: z.string().nullable().optional(),
29345
29603
  filterVenueId: z.string().nullable().optional()
@@ -29386,6 +29644,7 @@ const eventCollectionDisplaySchemaShape = {
29386
29644
  eventSurface: eventSurfaceScopeSchema$1,
29387
29645
  filterEventPresets: z.string().nullable(),
29388
29646
  scheduleScope: eventScheduleScopeSchema$1,
29647
+ seriesIds: z.string().nullable().optional(),
29389
29648
  filterCategoryIds: z.string().nullable(),
29390
29649
  filterStaffMemberId: z.string().nullable(),
29391
29650
  filterVenueId: z.string().nullable(),
@@ -29433,11 +29692,15 @@ function buildEventCollectionDisplay(source) {
29433
29692
  };
29434
29693
  }
29435
29694
  function buildEventCollectionFilterDisplay(source) {
29436
- return {
29437
- showFilters: source.showFilters ?? true,
29438
- showCategoryFilter: source.showCategoryFilter ?? "auto",
29439
- showVenueFilter: source.showVenueFilter ?? false,
29440
- showStaffFilter: source.showStaffFilter ?? true,
29695
+ const selected = source.seriesIds != null;
29696
+ const matchingFilters = selected ? {
29697
+ eventSurface: "all",
29698
+ filterEventPresets: null,
29699
+ scheduleScope: "any",
29700
+ filterCategoryIds: null,
29701
+ filterStaffMemberId: null,
29702
+ filterVenueId: null
29703
+ } : {
29441
29704
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29442
29705
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29443
29706
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
@@ -29445,6 +29708,14 @@ function buildEventCollectionFilterDisplay(source) {
29445
29708
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29446
29709
  filterVenueId: normalizeEventVenueId(source.filterVenueId)
29447
29710
  };
29711
+ return {
29712
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29713
+ showFilters: selected ? false : source.showFilters ?? true,
29714
+ showCategoryFilter: source.showCategoryFilter ?? "auto",
29715
+ showVenueFilter: source.showVenueFilter ?? false,
29716
+ showStaffFilter: source.showStaffFilter ?? true,
29717
+ ...matchingFilters
29718
+ };
29448
29719
  }
29449
29720
  function buildEventCollectionPresentationDisplay(source) {
29450
29721
  return {
@@ -29459,14 +29730,15 @@ function buildEventCollectionPresentationDisplay(source) {
29459
29730
  }
29460
29731
  function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
29461
29732
  const timeZone = source.calendarWindow?.scope.timeZone ?? toBookingTimeZone(source.bookingTimeZone);
29733
+ const selected = source.seriesIds != null;
29462
29734
  return {
29463
29735
  calendarWindow: source.calendarWindow ?? void 0,
29464
29736
  siteId: source.siteId,
29465
29737
  stage: source.stage,
29466
29738
  prefetchedEvents: source.events != null,
29467
- eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29468
- filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29469
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29739
+ eventSurface: selected ? "all" : normalizeEventSurfaceScope(source.eventSurface),
29740
+ filterEventPresets: selected ? null : normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29741
+ scheduleScope: selected ? "any" : normalizeEventScheduleScope(source.scheduleScope),
29470
29742
  calendarContext: {
29471
29743
  timeZone,
29472
29744
  initialToday: source.calendarWindow?.initialToday ?? getLocalScheduleDate(now, timeZone)
@@ -29532,6 +29804,7 @@ const eventListingHydrationSchema = z.object({
29532
29804
  eventSurface: eventSurfaceScopeSchema,
29533
29805
  filterEventPresets: z.string().nullable(),
29534
29806
  scheduleScope: eventScheduleScopeSchema,
29807
+ seriesIds: z.string().nullable().optional(),
29535
29808
  filterCategoryIds: z.string().nullable().optional(),
29536
29809
  filterStaffMemberId: z.string().nullable().optional(),
29537
29810
  filterVenueId: z.string().nullable().optional(),
@@ -29592,6 +29865,7 @@ const eventListingBlockRuntime = defineProgressiveBlockRuntime({
29592
29865
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29593
29866
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29594
29867
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29868
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29595
29869
  filterCategoryIds: normalizeEventCategoryIdsCsv(source.filterCategoryIds),
29596
29870
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29597
29871
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
@@ -29965,6 +30239,65 @@ const eventListingBlockDefinition = {
29965
30239
  } }
29966
30240
  };
29967
30241
  //#endregion
30242
+ //#region ../blocks/src/system/blocks/events/eventSelectionFields.ts
30243
+ const eventSelectionFields = [{
30244
+ id: "eventSelection",
30245
+ type: "select",
30246
+ label: "Events to show",
30247
+ required: false,
30248
+ multiple: false,
30249
+ defaultValue: "matching",
30250
+ options: [{
30251
+ value: "matching",
30252
+ label: "All matching events"
30253
+ }, {
30254
+ value: "selected",
30255
+ label: "Selected events"
30256
+ }],
30257
+ ui: { intent: "behavior" }
30258
+ }, createSiteOptionSelectField({
30259
+ id: "selectedEventSeriesIds",
30260
+ label: "Selected events",
30261
+ description: "Show upcoming dates for these events. Other event filters do not apply.",
30262
+ required: false,
30263
+ multiple: true,
30264
+ defaultValue: [],
30265
+ optionSource: "eventSeries",
30266
+ ui: {
30267
+ intent: "behavior",
30268
+ searchThreshold: 1,
30269
+ visibleWhen: {
30270
+ field: "eventSelection",
30271
+ equals: "selected"
30272
+ }
30273
+ }
30274
+ })];
30275
+ function withEventSelectionVisibility(field) {
30276
+ if (![
30277
+ "eventSurface",
30278
+ "filterEventPresets",
30279
+ "scheduleScope",
30280
+ "filterCategoryIds",
30281
+ "filterStaffMemberId",
30282
+ "filterVenueId",
30283
+ "showFilters",
30284
+ "showCategoryFilter",
30285
+ "showVenueFilter",
30286
+ "showStaffFilter"
30287
+ ].includes(field.id)) return field;
30288
+ const visibleWhen = field.ui?.visibleWhen;
30289
+ return {
30290
+ ...field,
30291
+ ui: {
30292
+ ...field.ui,
30293
+ visibleWhen: { allOf: [{
30294
+ field: "eventSelection",
30295
+ notEquals: "selected"
30296
+ }, ...visibleWhen ? [visibleWhen] : []] }
30297
+ }
30298
+ };
30299
+ }
30300
+ //#endregion
29968
30301
  //#region ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
29969
30302
  const eventCalendarSourceSchema = z.object({
29970
30303
  ...eventCollectionSourceSchemaShape,
@@ -30047,19 +30380,59 @@ const eventCalendarBlockRuntime = defineProgressiveBlockRuntime({
30047
30380
  //#region ../blocks/src/system/blocks/events/eventCalendarDataLoaders.ts
30048
30381
  const scopeParams = {
30049
30382
  siteId: { $bind: { from: "$root.siteId" } },
30383
+ seriesIds: { $bind: {
30384
+ from: "content",
30385
+ transforms: [{
30386
+ id: "events.calendarSelectionParam",
30387
+ options: { key: "seriesIds" }
30388
+ }]
30389
+ } },
30050
30390
  stage: { $bind: {
30051
30391
  from: "$root.previewStage",
30052
30392
  fallback: "published"
30053
30393
  } },
30054
- eventSurface: { $bind: { from: "content.eventSurface" } },
30394
+ eventSurface: { $bind: {
30395
+ from: "content",
30396
+ transforms: [{
30397
+ id: "events.calendarSelectionParam",
30398
+ options: { key: "eventSurface" }
30399
+ }, { id: "value.csv" }]
30400
+ } },
30055
30401
  eventPresets: { $bind: {
30056
- from: "content.filterEventPresets",
30057
- transforms: [{ id: "value.csv" }]
30402
+ from: "content",
30403
+ transforms: [{
30404
+ id: "events.calendarSelectionParam",
30405
+ options: { key: "filterEventPresets" }
30406
+ }, { id: "value.csv" }]
30407
+ } },
30408
+ scheduleScope: { $bind: {
30409
+ from: "content",
30410
+ transforms: [{
30411
+ id: "events.calendarSelectionParam",
30412
+ options: { key: "scheduleScope" }
30413
+ }, { id: "value.csv" }]
30414
+ } },
30415
+ categoryIds: { $bind: {
30416
+ from: "content",
30417
+ transforms: [{
30418
+ id: "events.calendarSelectionParam",
30419
+ options: { key: "filterCategoryIds" }
30420
+ }, { id: "value.csv" }]
30058
30421
  } },
30059
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
30060
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
30061
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
30062
- venueId: { $bind: { from: "content.filterVenueId" } }
30422
+ staffMemberId: { $bind: {
30423
+ from: "content",
30424
+ transforms: [{
30425
+ id: "events.calendarSelectionParam",
30426
+ options: { key: "filterStaffMemberId" }
30427
+ }, { id: "value.csv" }]
30428
+ } },
30429
+ venueId: { $bind: {
30430
+ from: "content",
30431
+ transforms: [{
30432
+ id: "events.calendarSelectionParam",
30433
+ options: { key: "filterVenueId" }
30434
+ }, { id: "value.csv" }]
30435
+ } }
30063
30436
  };
30064
30437
  /** Combined renders two jobs; calendar-only variants never pay for the list seed. */
30065
30438
  const eventCalendarDataLoaders = {
@@ -30189,6 +30562,13 @@ const eventCalendarLayout = [styledSection({
30189
30562
  from: "content.defaultCalendarView",
30190
30563
  fallback: "month"
30191
30564
  } },
30565
+ seriesIds: { $bind: {
30566
+ from: "content",
30567
+ transforms: [{
30568
+ id: "events.calendarSelectionParam",
30569
+ options: { key: "seriesIds" }
30570
+ }]
30571
+ } },
30192
30572
  showFilters: { $bind: {
30193
30573
  from: "content.showFilters",
30194
30574
  fallback: true
@@ -30210,17 +30590,47 @@ const eventCalendarLayout = [styledSection({
30210
30590
  fallback: true
30211
30591
  } },
30212
30592
  eventSurface: { $bind: {
30213
- from: "content.eventSurface",
30214
- fallback: "all"
30593
+ from: "content",
30594
+ transforms: [{
30595
+ id: "events.calendarSelectionParam",
30596
+ options: { key: "eventSurface" }
30597
+ }]
30598
+ } },
30599
+ filterEventPresets: { $bind: {
30600
+ from: "content",
30601
+ transforms: [{
30602
+ id: "events.calendarSelectionParam",
30603
+ options: { key: "filterEventPresets" }
30604
+ }]
30215
30605
  } },
30216
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
30217
30606
  scheduleScope: { $bind: {
30218
- from: "content.scheduleScope",
30219
- fallback: "any"
30607
+ from: "content",
30608
+ transforms: [{
30609
+ id: "events.calendarSelectionParam",
30610
+ options: { key: "scheduleScope" }
30611
+ }]
30612
+ } },
30613
+ filterCategoryIds: { $bind: {
30614
+ from: "content",
30615
+ transforms: [{
30616
+ id: "events.calendarSelectionParam",
30617
+ options: { key: "filterCategoryIds" }
30618
+ }]
30619
+ } },
30620
+ filterStaffMemberId: { $bind: {
30621
+ from: "content",
30622
+ transforms: [{
30623
+ id: "events.calendarSelectionParam",
30624
+ options: { key: "filterStaffMemberId" }
30625
+ }]
30626
+ } },
30627
+ filterVenueId: { $bind: {
30628
+ from: "content",
30629
+ transforms: [{
30630
+ id: "events.calendarSelectionParam",
30631
+ options: { key: "filterVenueId" }
30632
+ }]
30220
30633
  } },
30221
- filterCategoryIds: { $bind: { from: "content.filterCategoryIds" } },
30222
- filterStaffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
30223
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
30224
30634
  cardRole: { $bind: {
30225
30635
  from: "content._cardStyles.role",
30226
30636
  fallback: "default"
@@ -30724,6 +31134,7 @@ const eventCalendarAdditionalFields = [
30724
31134
  }
30725
31135
  }
30726
31136
  },
31137
+ ...eventSelectionFields,
30727
31138
  {
30728
31139
  id: "eventSurface",
30729
31140
  type: "select",
@@ -30933,7 +31344,7 @@ const eventCalendarBlockDefinition = {
30933
31344
  titleSource: "heading",
30934
31345
  description: "Display events with calendar, list, or combined views with filtering",
30935
31346
  skipSectionStyles: true,
30936
- additionalFields: eventCalendarAdditionalFields,
31347
+ additionalFields: eventCalendarAdditionalFields.map(withEventSelectionVisibility),
30937
31348
  styleTokens: {
30938
31349
  background: "surface",
30939
31350
  typography: "body",
@@ -35087,6 +35498,15 @@ const newsletterFieldSchema = z.object({
35087
35498
  placeholder: z.string().optional()
35088
35499
  });
35089
35500
  const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
35501
+ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
35502
+ const parsed = parseMailingListContentVersionId(value);
35503
+ if (parsed) return parsed;
35504
+ ctx.addIssue({
35505
+ code: z.ZodIssueCode.custom,
35506
+ message: "Invalid mailing-list content version ID"
35507
+ });
35508
+ return z.NEVER;
35509
+ });
35090
35510
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
35091
35511
  const newsletterSourceCommonSchema = z.object({
35092
35512
  siteId: z.string().optional(),
@@ -35100,7 +35520,8 @@ const newsletterSourceCommonSchema = z.object({
35100
35520
  const newsletterSourceSchema = z.discriminatedUnion("source", [
35101
35521
  newsletterSourceCommonSchema.extend({
35102
35522
  source: z.literal("block"),
35103
- blockId: z.string().nullable().optional()
35523
+ blockId: z.string().nullable().optional(),
35524
+ contentVersionId: z.string().nullable().optional()
35104
35525
  }),
35105
35526
  newsletterSourceCommonSchema.extend({
35106
35527
  source: z.literal("signed-footer"),
@@ -35116,6 +35537,7 @@ const newsletterDisplaySchema = z.object({
35116
35537
  availability: z.enum(["ready", "unavailable"]),
35117
35538
  className: z.string().nullable(),
35118
35539
  buttonLabel: z.string(),
35540
+ successMessage: z.string(),
35119
35541
  buttonVariant: newsletterButtonVariantSchema,
35120
35542
  privacyNote: z.string().nullable(),
35121
35543
  fields: z.array(newsletterFieldSchema),
@@ -35130,7 +35552,8 @@ const newsletterHydrationSchema = z.object({
35130
35552
  tag: z.literal("block-source"),
35131
35553
  sourceRef: z.object({
35132
35554
  tag: z.literal("block_ref"),
35133
- blockId: mailingListSignupBlockIdSchema
35555
+ blockId: mailingListSignupBlockIdSchema,
35556
+ contentVersionId: mailingListContentVersionIdSchema
35134
35557
  }).nullable()
35135
35558
  }),
35136
35559
  z.object({
@@ -35169,6 +35592,7 @@ function buildNewsletterDisplay(source) {
35169
35592
  fields: { preset: "emailOnly" },
35170
35593
  includeOptionalPhone: false,
35171
35594
  buttonLabel: "Subscribe",
35595
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
35172
35596
  privacyNote: null
35173
35597
  };
35174
35598
  const targeting = source.targeting ?? { mode: "default" };
@@ -35178,6 +35602,7 @@ function buildNewsletterDisplay(source) {
35178
35602
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
35179
35603
  className: source.className ?? null,
35180
35604
  buttonLabel: form.buttonLabel,
35605
+ successMessage: form.successMessage,
35181
35606
  buttonVariant: source.buttonVariant ?? "primary",
35182
35607
  privacyNote: form.privacyNote,
35183
35608
  fields: getGlobalFormFields(form),
@@ -35208,7 +35633,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
35208
35633
  function projectNewsletterFormHydrationTarget(source) {
35209
35634
  switch (source.source) {
35210
35635
  case "block": {
35211
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
35636
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
35212
35637
  if (sourceRef?.tag === "block_ref") return {
35213
35638
  tag: "block-source",
35214
35639
  sourceRef
@@ -37342,6 +37767,26 @@ const linksTransforms = [{
37342
37767
  //#endregion
37343
37768
  //#region ../blocks/src/system/transforms/registry/index.ts
37344
37769
  const builtinTransformDefinitions = [
37770
+ {
37771
+ id: "events.calendarSelectionParam",
37772
+ kind: "formatter",
37773
+ summary: "Resolve selected events instead of discovery filters",
37774
+ schema: z.object({ key: z.enum([
37775
+ "seriesIds",
37776
+ "eventSurface",
37777
+ "filterEventPresets",
37778
+ "scheduleScope",
37779
+ "filterCategoryIds",
37780
+ "filterStaffMemberId",
37781
+ "filterVenueId"
37782
+ ]) }),
37783
+ run(value, { key }) {
37784
+ const content = asPartialObject(value) ?? {};
37785
+ const selection = resolveEventSelection(content.eventSelection, content.selectedEventSeriesIds);
37786
+ if (selection.kind === "selected") return key === "seriesIds" ? selection.seriesIds : void 0;
37787
+ return key === "seriesIds" ? void 0 : content[key];
37788
+ }
37789
+ },
37345
37790
  {
37346
37791
  id: "events.calendarReadEnabled",
37347
37792
  kind: "formatter",
@@ -37699,7 +38144,17 @@ const riverbankSiteConfigInputSchema = z.object({
37699
38144
  z.object({
37700
38145
  config: riverbankSiteConfigInputSchema,
37701
38146
  forceContentTypes: z.boolean().optional(),
37702
- mode: z.enum(["apply", "preview"]).optional()
38147
+ mode: z.enum(["apply", "preview"]).optional(),
38148
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
38149
+ if (value === void 0) return void 0;
38150
+ const parsed = parseMailingListProviderScope(value);
38151
+ if (parsed.ok) return parsed.value;
38152
+ ctx.addIssue({
38153
+ code: "custom",
38154
+ message: "Invalid mailing-list provider scope"
38155
+ });
38156
+ return z.NEVER;
38157
+ }).optional()
37703
38158
  }).strict();
37704
38159
  //#endregion
37705
38160
  //#region ../api/src/sdkThemeWire.ts