@riverbankcms/sdk 0.139.0 → 0.140.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 (196) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-BDeenhi3.mjs → PreviewEditorSidebar-CUyTzd5z.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DSRhgjF5.mjs → PreviewEditorUI-Agkw4v5i.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-D2K8GLUG.mjs → PreviewQueryProvider-CN0ewic5.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CL7wSnYu.mjs → SdkPreviewModeRuntime-DdbeAdS8.mjs} +22 -8
  6. package/dist/{SiteChromeCustomizeContext-BhDn-5ir.mjs → SiteChromeCustomizeContext-CqGOz-Kv.mjs} +2053 -1110
  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 +8 -3
  20. package/dist/_dts/api/src/endpoints.d.ts +93 -64
  21. package/dist/_dts/api/src/event-destination-policy.d.ts +2 -1
  22. package/dist/_dts/api/src/footerSettings.d.ts +9 -6
  23. package/dist/_dts/api/src/index.d.ts +5 -6
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  26. package/dist/_dts/api/src/mailingListIntegration.d.ts +8 -2
  27. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  28. package/dist/_dts/api/src/navigation/types.d.ts +1 -1
  29. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +25 -0
  30. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +32 -32
  31. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +8 -0
  32. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +1 -0
  33. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +11 -3
  34. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +3 -29
  35. package/dist/_dts/api/src/publicOnboardingAttemptEndpointDefinitions.d.ts +65 -0
  36. package/dist/_dts/api/src/saveOutcome.d.ts +20 -0
  37. package/dist/_dts/api/src/sdkContracts.d.ts +3 -22
  38. package/dist/_dts/api/src/sdkPushContracts.d.ts +18 -0
  39. package/dist/_dts/api/src/sdkThemeWire.d.ts +44 -44
  40. package/dist/_dts/api/src/settings/permissions.d.ts +12 -0
  41. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +9 -5
  42. package/dist/_dts/api/src/siteOnboarding.d.ts +2 -9
  43. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +2 -4
  44. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -1
  45. package/dist/_dts/api/src/siteSettings.d.ts +20 -7
  46. package/dist/_dts/api/src/types.d.ts +77 -77
  47. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -37
  48. package/dist/_dts/billing/src/membership/index.d.ts +3 -0
  49. package/dist/_dts/billing/src/plans/types.d.ts +3 -0
  50. package/dist/_dts/billing/src/site-arrangements.d.ts +14 -3
  51. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  52. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +2 -0
  53. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -0
  54. package/dist/_dts/blocks/src/portal/types.d.ts +2 -4
  55. package/dist/_dts/blocks/src/portal/waitlist-types.d.ts +35 -0
  56. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -0
  57. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  58. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  59. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
  60. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/data/types.d.ts +9 -0
  62. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  63. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -28
  64. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  65. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +7 -3
  66. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -2
  68. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +30 -6
  69. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +15 -3
  70. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +43 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +1 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +2 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/checkoutRecovery.d.ts +14 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +56 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -8
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useCheckoutRecovery.d.ts +8 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -7
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +10 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +18 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.client.d.ts +1 -1
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +4 -2
  83. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +1 -0
  85. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +1 -0
  86. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -6
  87. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  88. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +2 -0
  89. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  90. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +27 -4
  91. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -1
  92. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +3 -1
  93. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -0
  94. package/dist/_dts/core/src/branded.d.ts +0 -8
  95. package/dist/_dts/core/src/index.d.ts +1 -0
  96. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +1 -1
  97. package/dist/_dts/core/src/mailing-list-setup.d.ts +14 -1
  98. package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -27
  99. package/dist/_dts/core/src/participants.d.ts +2 -29
  100. package/dist/_dts/core/src/public-experience.d.ts +4 -0
  101. package/dist/_dts/core/src/public-profile.d.ts +27 -1
  102. package/dist/_dts/core/src/site-route-target.d.ts +9 -2
  103. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +293 -606
  104. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListGlobalSettingsSummary.d.ts +10 -0
  105. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +3 -2
  106. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +3 -2
  107. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +3 -2
  108. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +19 -0
  109. package/dist/_dts/sdk/src/public-api/contracts.d.ts +14 -20
  110. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  111. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
  112. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +7 -1
  113. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +1 -0
  114. package/dist/_dts/sdk/src/version.d.ts +1 -1
  115. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  116. package/dist/_dts/theme-core/src/cards/types.d.ts +21 -21
  117. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  118. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +8 -2
  119. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -2
  120. package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
  121. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +54 -54
  122. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -4
  123. package/dist/_dts/theme-core/src/schema.d.ts +84 -84
  124. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  126. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +77 -0
  127. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  128. package/dist/_dts/theme-core/src/typography/generateTypographyCss.d.ts +2 -2
  129. package/dist/_dts/ui/src/lib/use-delayed-flag.d.ts +9 -0
  130. package/dist/_dts/ui/src/pending-button.d.ts +10 -0
  131. package/dist/client/{BookingConsentAgreement-CZvTDtsK.mjs → BookingConsentAgreement-CuKa82V4.mjs} +4 -4
  132. package/dist/client/{DiscountCodeDisclosure-D-DsLCMU.mjs → DiscountCodeDisclosure-BbYieKWB.mjs} +1 -1
  133. package/dist/client/{EventCombined.client-dWqgd5ZO.mjs → EventCombined.client-LTfR1Aby.mjs} +6 -6
  134. package/dist/client/{EventListing.client-BMRa9IYp.mjs → EventListing.client-DUHpYSuo.mjs} +2 -2
  135. package/dist/client/{LeafletStaticMap-D21W9kBZ.mjs → LeafletStaticMap-CHRupL6m.mjs} +1 -1
  136. package/dist/client/{accordion-FxF_ta47.mjs → accordion-6HiIFxNL.mjs} +1 -1
  137. package/dist/client/{bookingForm-YnwW4TGw.mjs → bookingForm-Dlmid43H.mjs} +7 -7
  138. package/dist/client/bookings.mjs +325 -140
  139. package/dist/client/{carousel-vng7fFT5.mjs → carousel-DmkZRRq_.mjs} +2 -2
  140. package/dist/client/{carousel.client-59G_WMr4.mjs → carousel.client-DQTjCVQT.mjs} +1 -1
  141. package/dist/client/{cart-DEPDsjNk.mjs → cart-CIC24330.mjs} +3 -3
  142. package/dist/client/{checkout-CZRWu9rW.mjs → checkout-D1Zw9imo.mjs} +3 -3
  143. package/dist/client/{checkoutUrls-BuseL0dw.mjs → checkoutUrls-FL6lRkrt.mjs} +1 -1
  144. package/dist/client/client.mjs +1717 -882
  145. package/dist/client/{colorStyles-CrxJrPjJ.mjs → colorStyles-3013aRAY.mjs} +3 -1
  146. package/dist/client/{context-DvU_WUmd.mjs → context-Cy1OayHx.mjs} +6 -19
  147. package/dist/client/{dates-wnPMiRl5.mjs → dates-aDcfoLHr.mjs} +2 -2
  148. package/dist/client/{eventCalendar-BA3Q5L15.mjs → eventCalendar-FQxMPAjf.mjs} +8 -8
  149. package/dist/client/{eventCombined-51wgR-1R.mjs → eventCombined-Dr3ac6Hb.mjs} +3 -3
  150. package/dist/client/{eventDetails-modaetpm.mjs → eventDetails-D-AzUHFQ.mjs} +4 -4
  151. package/dist/client/{eventListing-D8t2J3Kv.mjs → eventListing-B3XxBf3i.mjs} +3 -3
  152. package/dist/client/{eventRegistration-CYqtkCE_.mjs → eventRegistration-I6EaokFD.mjs} +500 -152
  153. package/dist/client/{form-CBKXN5In.mjs → form-BbWckVWY.mjs} +3 -3
  154. package/dist/client/{headerSection-DylDqNrs.mjs → headerSection-C9qU4Y7x.mjs} +2 -2
  155. package/dist/client/hooks.mjs +445 -180
  156. package/dist/client/{locationMap-CvWrG0vZ.mjs → locationMap-CLCShvlG.mjs} +3 -3
  157. package/dist/client/{media-BOHuueS5.mjs → media-DHpfFwd3.mjs} +1 -1
  158. package/dist/client/{newsletterForm-Btwk70zw.mjs → newsletterForm-Briukxzi.mjs} +130 -87
  159. package/dist/client/{pricing-Uzw-GQ6Y.mjs → pricing-Copadu-2.mjs} +1 -1
  160. package/dist/client/{productDetail-JLcUYKnd.mjs → productDetail-oujlRd-r.mjs} +3 -3
  161. package/dist/client/{productList-FM0cbUzj.mjs → productList-BRiIRUcd.mjs} +3 -3
  162. package/dist/client/{propsDecoder-DYzafZb2.mjs → propsDecoder-CB2KS_ko.mjs} +130 -24
  163. package/dist/client/rendering/client.mjs +911 -400
  164. package/dist/client/rendering/islands.mjs +19 -19
  165. package/dist/client/rendering.mjs +1696 -818
  166. package/dist/client/{scrollToBlock-CvXszexS.mjs → scrollToBlock-B1IS1_ua.mjs} +1 -1
  167. package/dist/client/{shop-BIcjvy5a.mjs → shop-Vn6yNFED.mjs} +6 -6
  168. package/dist/client/{shop-commerce-BZQsy7xw.mjs → shop-commerce-BVTqipYp.mjs} +7 -7
  169. package/dist/client/{shop-commerce-store-D5V7XAb5.mjs → shop-commerce-store-BVnJVy7v.mjs} +1 -1
  170. package/dist/client/{shopShared-DowkXevB.mjs → shopShared-COIeK77T.mjs} +4 -4
  171. package/dist/client/{useEventFilters-oMoTw_JE.mjs → useEventFilters-DzIUcS9n.mjs} +7 -7
  172. package/dist/preview-next/before-render.mjs +119 -64
  173. package/dist/preview-next/client/runtime.mjs +4 -4
  174. package/dist/preview-next/keepAlive.mjs +119 -64
  175. package/dist/preview-next/middleware.mjs +119 -64
  176. package/dist/{previewAuthStore-COUyAKaX.mjs → previewAuthStore-Gjb6r6vz.mjs} +119 -64
  177. package/dist/{sdk-runtime-D4k2LSGF.mjs → sdk-runtime-CnCLvZRv.mjs} +2 -2
  178. package/dist/{separator-UGtpag4Z.mjs → separator-DKDRJ1oH.mjs} +1 -1
  179. package/dist/server/components.mjs +787 -323
  180. package/dist/server/config-validation.mjs +328 -79
  181. package/dist/server/config.mjs +332 -83
  182. package/dist/server/data.mjs +441 -180
  183. package/dist/server/index.mjs +126 -66
  184. package/dist/server/next.mjs +1031 -595
  185. package/dist/server/page-converter.mjs +183 -74
  186. package/dist/server/prebuild.mjs +1 -1
  187. package/dist/server/rendering/server.mjs +1068 -592
  188. package/dist/server/rendering.mjs +802 -324
  189. package/dist/server/routing.mjs +506 -214
  190. package/dist/server/server.mjs +468 -244
  191. package/dist/server/theme-bridge.mjs +433 -100
  192. package/dist/server/theme.mjs +8 -2
  193. package/dist/styles/index.css +237 -43
  194. package/package.json +1 -1
  195. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +0 -29
  196. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +0 -13
@@ -29,10 +29,12 @@ const unsafeAsApiKeyId = (id) => id;
29
29
  const unsafeAsEventOfferingId = (id) => id;
30
30
  const unsafeAsEventSeriesId = (id) => id;
31
31
  const unsafeAsUserId = (id) => id;
32
+ const unsafeAsContentVersionId = (id) => id;
32
33
  const parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
33
34
  const parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
34
35
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
35
36
  const parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
37
+ const parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
36
38
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
37
39
  //#endregion
38
40
  //#region ../core/src/assert-never.ts
@@ -266,7 +268,7 @@ function parseEventPageSurfaceDestinationMode(value) {
266
268
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
267
269
  }
268
270
  function parseEventPageSurfaceSubject(value) {
269
- if (!isRecord$12(value)) return err({ kind: "notObject" });
271
+ if (!isRecord$13(value)) return err({ kind: "notObject" });
270
272
  switch (value.kind) {
271
273
  case "eventSeries": {
272
274
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -321,7 +323,7 @@ function parseEventSeriesIdList(values) {
321
323
  }
322
324
  return ok(parsed);
323
325
  }
324
- function isRecord$12(value) {
326
+ function isRecord$13(value) {
325
327
  return typeof value === "object" && value !== null && !Array.isArray(value);
326
328
  }
327
329
  //#endregion
@@ -505,16 +507,47 @@ function parsePositiveInteger(value) {
505
507
  function parseNewsletterListId(value) {
506
508
  return parseTrimmedMatchingString(value, UUID_PATTERN);
507
509
  }
510
+ function parseMailchimpAccountId(value) {
511
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
512
+ }
508
513
  function parseMailchimpAudienceId(value) {
509
514
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
510
515
  }
511
516
  function parseMailchimpInterestId(value) {
512
517
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
513
518
  }
519
+ function parseBrevoAccountId(value) {
520
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
521
+ }
514
522
  function parseBrevoListId(value) {
515
523
  return parsePositiveInteger(value);
516
524
  }
517
525
  //#endregion
526
+ //#region ../core/src/mailing-list-setup.ts
527
+ function isRecord$12(value) {
528
+ return typeof value === "object" && value !== null && !Array.isArray(value);
529
+ }
530
+ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
531
+ function parseMailingListProviderScope(value) {
532
+ if (!isRecord$12(value)) return err("invalid_mailing_list_provider_scope");
533
+ if (value.provider === "native") return ok({ provider: "native" });
534
+ if (value.provider === "brevo") {
535
+ const accountId = parseBrevoAccountId(value.accountId);
536
+ return accountId !== null ? ok({
537
+ provider: "brevo",
538
+ accountId
539
+ }) : err("invalid_mailing_list_provider_scope");
540
+ }
541
+ if (value.provider === "mailchimp") {
542
+ const accountId = parseMailchimpAccountId(value.accountId);
543
+ return accountId !== null ? ok({
544
+ provider: "mailchimp",
545
+ accountId
546
+ }) : err("invalid_mailing_list_provider_scope");
547
+ }
548
+ return err("invalid_mailing_list_provider_scope");
549
+ }
550
+ //#endregion
518
551
  //#region ../core/src/mailing-list-setup-parser.ts
519
552
  function parseMailingListGlobalForm(value) {
520
553
  if (!isRecord$11(value)) return formError("shape");
@@ -523,12 +556,15 @@ function parseMailingListGlobalForm(value) {
523
556
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
524
557
  const buttonLabel = parseRequiredString(value.buttonLabel);
525
558
  if (buttonLabel === null) return formError("buttonLabel");
559
+ const successMessage = parseRequiredString(value.successMessage);
560
+ if (successMessage === null) return formError("successMessage");
526
561
  const privacyNote = parseOptionalString(value.privacyNote);
527
562
  if (privacyNote === void 0) return formError("privacyNote");
528
563
  return ok({
529
564
  fields,
530
565
  includeOptionalPhone: value.includeOptionalPhone,
531
566
  buttonLabel,
567
+ successMessage,
532
568
  privacyNote
533
569
  });
534
570
  }
@@ -858,11 +894,17 @@ function parseMailingListSignedSourceToken(value) {
858
894
  const parsed = typeof value === "string" ? value.trim() : "";
859
895
  return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
860
896
  }
861
- function buildMailingListSignupBlockSourceRef(blockId) {
862
- const parsed = parseMailingListBlockId(blockId);
863
- return parsed !== null ? {
897
+ function parseMailingListContentVersionId(value) {
898
+ const parsed = parseContentVersionId(value);
899
+ return parsed.ok ? parsed.value : null;
900
+ }
901
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
902
+ const parsedBlockId = parseMailingListBlockId(blockId);
903
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
904
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
864
905
  tag: "block_ref",
865
- blockId: parsed
906
+ blockId: parsedBlockId,
907
+ contentVersionId: parsedContentVersionId
866
908
  } : null;
867
909
  }
868
910
  //#endregion
@@ -2971,59 +3013,108 @@ function interpolateHex(startHex, endHex, position) {
2971
3013
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
2972
3014
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
2973
3015
  }
2974
- shadeBackgroundEffect({
2975
- id: "darken-background",
2976
- name: "Darken on Hover",
2977
- description: "Darkens the background color on hover",
2978
- label: "Darken Amount (shade step)",
2979
- shadeDirection: 1
2980
- });
2981
- shadeBackgroundEffect({
2982
- id: "lighten-background",
2983
- name: "Lighten on Hover",
2984
- description: "Lightens the background color on hover",
2985
- label: "Lighten Amount (shade step)",
2986
- shadeDirection: -1
2987
- });
2988
- function shadeBackgroundEffect(config) {
2989
- return {
2990
- id: config.id,
2991
- name: config.name,
2992
- description: config.description,
2993
- category: "background",
2994
- pseudoElement: "none",
2995
- applicableTo: ["button"],
2996
- customizableOption: {
2997
- name: "amount",
2998
- type: "select",
2999
- label: config.label,
3000
- default: 100,
3001
- options: [
3002
- 0,
3003
- 100,
3004
- 200,
3005
- 300,
3006
- 400,
3007
- 500,
3008
- 600,
3009
- 700,
3010
- 800,
3011
- 900
3012
- ]
3016
+ //#endregion
3017
+ //#region ../theme-core/src/tokens/tokens.ts
3018
+ const defaultThemeTokens = {
3019
+ color: {
3020
+ "background/base": "#ffffff",
3021
+ "background/elevated": "#f5f5f5",
3022
+ "surface/base": "#ffffff",
3023
+ "surface/subtle": "#f9f9fb",
3024
+ "surface/inverted": "#111111",
3025
+ "content/primary": "#111111",
3026
+ "content/secondary": "#3f3f46",
3027
+ "accent/primary": "#2563eb",
3028
+ "accent/secondary": "#1d4ed8",
3029
+ "border/base": "#e5e7eb"
3030
+ },
3031
+ typography: {
3032
+ "display/hero": {
3033
+ fontSize: "clamp(48px, 8vw, 96px)",
3034
+ lineHeight: "1.05",
3035
+ fontWeight: "700"
3013
3036
  },
3014
- isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3015
- generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3016
- if (buttonConfig.background.type !== "solid") return "";
3017
- const amount = (options.amount || 100) * config.shadeDirection;
3018
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3019
- return `
3020
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3021
- background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3022
- }
3023
- `;
3037
+ "display/section": {
3038
+ fontSize: "clamp(40px, 6vw, 72px)",
3039
+ lineHeight: "1.1",
3040
+ fontWeight: "700"
3041
+ },
3042
+ "heading/large": {
3043
+ fontSize: "clamp(32px, 4vw, 48px)",
3044
+ lineHeight: "1.2",
3045
+ fontWeight: "600"
3046
+ },
3047
+ "heading/medium": {
3048
+ fontSize: "clamp(24px, 3vw, 32px)",
3049
+ lineHeight: "1.25",
3050
+ fontWeight: "600"
3051
+ },
3052
+ "heading/small": {
3053
+ fontSize: "20px",
3054
+ lineHeight: "1.3",
3055
+ fontWeight: "600"
3056
+ },
3057
+ "body/normal": {
3058
+ fontSize: "16px",
3059
+ lineHeight: "1.6",
3060
+ fontWeight: "400"
3061
+ },
3062
+ "body/small": {
3063
+ fontSize: "14px",
3064
+ lineHeight: "1.5",
3065
+ fontWeight: "400"
3066
+ },
3067
+ caption: {
3068
+ fontSize: "12px",
3069
+ lineHeight: "1.4",
3070
+ fontWeight: "500"
3024
3071
  }
3025
- };
3026
- }
3072
+ },
3073
+ spacing: {
3074
+ none: "0px",
3075
+ "3xs": "4px",
3076
+ "2xs": "8px",
3077
+ xs: "12px",
3078
+ sm: "16px",
3079
+ md: "24px",
3080
+ lg: "32px",
3081
+ xl: "40px",
3082
+ "2xl": "56px",
3083
+ "3xl": "72px"
3084
+ },
3085
+ radius: {
3086
+ none: "0px",
3087
+ xs: "2px",
3088
+ sm: "4px",
3089
+ md: "8px",
3090
+ lg: "12px",
3091
+ pill: "999px",
3092
+ full: "9999px"
3093
+ },
3094
+ shadow: {
3095
+ none: "none",
3096
+ soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
3097
+ medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
3098
+ strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
3099
+ },
3100
+ palette: {
3101
+ surface: "#ffffff",
3102
+ "neutral-50": "#f9fafb",
3103
+ "neutral-900": "#111827",
3104
+ primary: "#2563eb",
3105
+ "primary-50": "#eff6ff",
3106
+ "primary-500": "#2563eb",
3107
+ "primary-900": "#1d4ed8",
3108
+ secondary: "#9333ea",
3109
+ "secondary-50": "#f3e8ff",
3110
+ "secondary-500": "#9333ea",
3111
+ "secondary-900": "#4c1d95",
3112
+ accent: "#f97316",
3113
+ "accent-50": "#fff7ed",
3114
+ "accent-500": "#f97316",
3115
+ "accent-900": "#7c2d12"
3116
+ }
3117
+ };
3027
3118
  //#endregion
3028
3119
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
3029
3120
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
@@ -3308,6 +3399,59 @@ function mergeStyles(...styles) {
3308
3399
  }
3309
3400
  return Object.keys(merged).length ? merged : void 0;
3310
3401
  }
3402
+ shadeBackgroundEffect({
3403
+ id: "darken-background",
3404
+ name: "Darken on Hover",
3405
+ description: "Darkens the background color on hover",
3406
+ label: "Darken Amount (shade step)",
3407
+ shadeDirection: 1
3408
+ });
3409
+ shadeBackgroundEffect({
3410
+ id: "lighten-background",
3411
+ name: "Lighten on Hover",
3412
+ description: "Lightens the background color on hover",
3413
+ label: "Lighten Amount (shade step)",
3414
+ shadeDirection: -1
3415
+ });
3416
+ function shadeBackgroundEffect(config) {
3417
+ return {
3418
+ id: config.id,
3419
+ name: config.name,
3420
+ description: config.description,
3421
+ category: "background",
3422
+ pseudoElement: "none",
3423
+ applicableTo: ["button"],
3424
+ customizableOption: {
3425
+ name: "amount",
3426
+ type: "select",
3427
+ label: config.label,
3428
+ default: 100,
3429
+ options: [
3430
+ 0,
3431
+ 100,
3432
+ 200,
3433
+ 300,
3434
+ 400,
3435
+ 500,
3436
+ 600,
3437
+ 700,
3438
+ 800,
3439
+ 900
3440
+ ]
3441
+ },
3442
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3443
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3444
+ if (buttonConfig.background.type !== "solid") return "";
3445
+ const amount = (options.amount || 100) * config.shadeDirection;
3446
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3447
+ return `
3448
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3449
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3450
+ }
3451
+ `;
3452
+ }
3453
+ };
3454
+ }
3311
3455
  //#endregion
3312
3456
  //#region ../theme-core/src/utils/tokenOrColor.ts
3313
3457
  /**
@@ -6730,8 +6874,14 @@ const headerInteractionPillPaletteValues = [
6730
6874
  "accent"
6731
6875
  ];
6732
6876
  /**
6733
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
6734
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
6877
+ * "No pill": a colour change on hover rather than a filled background.
6878
+ *
6879
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
6880
+ * foreground-adaptive style that is not the end of the story: the hover colour
6881
+ * is derived from the resolved opening foreground at render time, paired with
6882
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
6883
+ * whatever brand token the recipe happened to name. See
6884
+ * `applyOpeningForeground`.
6735
6885
  *
6736
6886
  * It exists because "a colour change on hover, no filled background" was not
6737
6887
  * expressible in the vocabulary, and it is what
@@ -7723,6 +7873,28 @@ const bookingRequirementConsentFieldSchema = z.object({
7723
7873
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
7724
7874
  //#endregion
7725
7875
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
7876
+ const publicEventLoaderQuerySchemaShape = {
7877
+ limit: z.string().optional(),
7878
+ from: z.string().optional(),
7879
+ to: z.string().optional(),
7880
+ afterStartsAt: z.string().optional(),
7881
+ afterId: z.string().optional(),
7882
+ categoryIds: z.string().optional(),
7883
+ venueId: z.string().optional(),
7884
+ staffMemberId: z.string().optional(),
7885
+ eventSurface: z.string().optional(),
7886
+ eventPresets: z.string().optional(),
7887
+ scheduleScope: z.string().optional(),
7888
+ seriesId: z.string().optional(),
7889
+ seriesIds: z.string().optional(),
7890
+ runSeriesId: z.string().optional(),
7891
+ seriesSlug: z.string().optional(),
7892
+ includeOccurrenceId: z.string().optional(),
7893
+ readIntent: z.string().optional(),
7894
+ detailLevel: z.string().optional(),
7895
+ readProfile: z.string().optional()
7896
+ };
7897
+ z.object(publicEventLoaderQuerySchemaShape);
7726
7898
  const eventPresetSchema = z.enum([
7727
7899
  "event",
7728
7900
  "class",
@@ -9565,6 +9737,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
9565
9737
  auth: "public",
9566
9738
  responseKind: "json"
9567
9739
  },
9740
+ getPublicBookingServiceBySlug: {
9741
+ path: "/public/bookings/services/by-slug/{slug}",
9742
+ method: "GET",
9743
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
9744
+ tags: [TAG_TEMPLATES.publicBookingServices],
9745
+ auth: "public",
9746
+ responseKind: "json"
9747
+ },
9568
9748
  getPublicBookingResourcesReference: {
9569
9749
  path: "/public/bookings/resources/reference",
9570
9750
  method: "GET",
@@ -10117,16 +10297,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10117
10297
  responseKind: "json"
10118
10298
  }
10119
10299
  });
10300
+ //#endregion
10301
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
10302
+ /**
10303
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
10304
+ *
10305
+ * Every route here is reached before there is an account, so none of them can
10306
+ * be scoped to a site or a user: the token is the whole credential. They are
10307
+ * kept together so that stays obvious.
10308
+ */
10309
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10310
+ createPublicOnboardingAttempt: {
10311
+ path: "/public/onboarding/attempts",
10312
+ method: "POST",
10313
+ auth: "public",
10314
+ errors: [],
10315
+ responseKind: "json"
10316
+ },
10317
+ createPublicOnboardingLogoUploadUrl: {
10318
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
10319
+ method: "POST",
10320
+ auth: "public",
10321
+ errors: [],
10322
+ responseKind: "json"
10323
+ },
10324
+ uploadPublicOnboardingLogo: {
10325
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
10326
+ method: "POST",
10327
+ auth: "public",
10328
+ errors: [],
10329
+ responseKind: "json"
10330
+ },
10331
+ getPublicOnboardingAttempt: {
10332
+ path: "/public/onboarding/attempts/{attemptToken}",
10333
+ method: "GET",
10334
+ auth: "public",
10335
+ errors: [],
10336
+ responseKind: "json"
10337
+ },
10338
+ getPublicOnboardingAttemptProgress: {
10339
+ path: "/public/onboarding/attempts/{attemptToken}/status",
10340
+ method: "GET",
10341
+ auth: "public",
10342
+ errors: [],
10343
+ responseKind: "json"
10344
+ },
10345
+ updatePublicOnboardingAttempt: {
10346
+ path: "/public/onboarding/attempts/{attemptToken}",
10347
+ method: "PATCH",
10348
+ auth: "public",
10349
+ errors: [],
10350
+ responseKind: "json"
10351
+ },
10352
+ runPublicOnboardingAttempt: {
10353
+ path: "/public/onboarding/attempts/{attemptToken}/run",
10354
+ method: "POST",
10355
+ auth: "public",
10356
+ errors: [],
10357
+ responseKind: "json"
10358
+ },
10359
+ resendPublicOnboardingAttemptConfirmation: {
10360
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
10361
+ method: "POST",
10362
+ auth: "public",
10363
+ errors: [],
10364
+ responseKind: "json"
10365
+ }
10366
+ });
10367
+ //#endregion
10368
+ //#region ../api/src/billingEndpointDefinitions.ts
10369
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10370
+ adminChangePlan: {
10371
+ path: "/admin/billing/plan",
10372
+ method: "POST",
10373
+ tags: ["admin", "billing"],
10374
+ auth: "admin",
10375
+ responseKind: "json"
10376
+ },
10377
+ changePlan: {
10378
+ path: "/billing/plan/change",
10379
+ method: "POST",
10380
+ tags: ["billing"],
10381
+ auth: "user",
10382
+ responseKind: "json"
10383
+ },
10384
+ createBillingPortalSession: {
10385
+ path: "/billing/portal/session",
10386
+ method: "POST",
10387
+ tags: ["billing"],
10388
+ auth: "user",
10389
+ responseKind: "json"
10390
+ }
10391
+ });
10120
10392
  ({
10121
10393
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
10394
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
10122
10395
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
10123
10396
  ...GIFTING_ENDPOINT_DEFINITIONS,
10124
- ...PUBLIC_READ_ENDPOINT_DEFINITIONS
10397
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
10398
+ ...BILLING_ENDPOINT_DEFINITIONS
10125
10399
  }), 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, {
10126
10400
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
10127
10401
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
10128
10402
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
10129
- }, 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 };
10403
+ }, 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 };
10130
10404
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
10131
10405
  z.object({
10132
10406
  accessToken: z.string().min(1).max(4096),
@@ -12395,108 +12669,6 @@ function assertUniqueLayoutProfileKeys(profiles) {
12395
12669
  if (duplicates.length > 0) throw new Error(`Duplicate block layout design profiles: ${duplicates.join(", ")}`);
12396
12670
  }
12397
12671
  //#endregion
12398
- //#region ../theme-core/src/tokens/tokens.ts
12399
- const defaultThemeTokens = {
12400
- color: {
12401
- "background/base": "#ffffff",
12402
- "background/elevated": "#f5f5f5",
12403
- "surface/base": "#ffffff",
12404
- "surface/subtle": "#f9f9fb",
12405
- "surface/inverted": "#111111",
12406
- "content/primary": "#111111",
12407
- "content/secondary": "#3f3f46",
12408
- "accent/primary": "#2563eb",
12409
- "accent/secondary": "#1d4ed8",
12410
- "border/base": "#e5e7eb"
12411
- },
12412
- typography: {
12413
- "display/hero": {
12414
- fontSize: "clamp(48px, 8vw, 96px)",
12415
- lineHeight: "1.05",
12416
- fontWeight: "700"
12417
- },
12418
- "display/section": {
12419
- fontSize: "clamp(40px, 6vw, 72px)",
12420
- lineHeight: "1.1",
12421
- fontWeight: "700"
12422
- },
12423
- "heading/large": {
12424
- fontSize: "clamp(32px, 4vw, 48px)",
12425
- lineHeight: "1.2",
12426
- fontWeight: "600"
12427
- },
12428
- "heading/medium": {
12429
- fontSize: "clamp(24px, 3vw, 32px)",
12430
- lineHeight: "1.25",
12431
- fontWeight: "600"
12432
- },
12433
- "heading/small": {
12434
- fontSize: "20px",
12435
- lineHeight: "1.3",
12436
- fontWeight: "600"
12437
- },
12438
- "body/normal": {
12439
- fontSize: "16px",
12440
- lineHeight: "1.6",
12441
- fontWeight: "400"
12442
- },
12443
- "body/small": {
12444
- fontSize: "14px",
12445
- lineHeight: "1.5",
12446
- fontWeight: "400"
12447
- },
12448
- caption: {
12449
- fontSize: "12px",
12450
- lineHeight: "1.4",
12451
- fontWeight: "500"
12452
- }
12453
- },
12454
- spacing: {
12455
- none: "0px",
12456
- "3xs": "4px",
12457
- "2xs": "8px",
12458
- xs: "12px",
12459
- sm: "16px",
12460
- md: "24px",
12461
- lg: "32px",
12462
- xl: "40px",
12463
- "2xl": "56px",
12464
- "3xl": "72px"
12465
- },
12466
- radius: {
12467
- none: "0px",
12468
- xs: "2px",
12469
- sm: "4px",
12470
- md: "8px",
12471
- lg: "12px",
12472
- pill: "999px",
12473
- full: "9999px"
12474
- },
12475
- shadow: {
12476
- none: "none",
12477
- soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
12478
- medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
12479
- strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
12480
- },
12481
- palette: {
12482
- surface: "#ffffff",
12483
- "neutral-50": "#f9fafb",
12484
- "neutral-900": "#111827",
12485
- primary: "#2563eb",
12486
- "primary-50": "#eff6ff",
12487
- "primary-500": "#2563eb",
12488
- "primary-900": "#1d4ed8",
12489
- secondary: "#9333ea",
12490
- "secondary-50": "#f3e8ff",
12491
- "secondary-500": "#9333ea",
12492
- "secondary-900": "#4c1d95",
12493
- accent: "#f97316",
12494
- "accent-50": "#fff7ed",
12495
- "accent-500": "#f97316",
12496
- "accent-900": "#7c2d12"
12497
- }
12498
- };
12499
- //#endregion
12500
12672
  //#region ../theme-core/src/site-styles/backgroundAppearance.ts
12501
12673
  const backgroundAppearanceQuickColorTokenNames = [
12502
12674
  "background",
@@ -28335,6 +28507,44 @@ function toWholeSeriesRegistrationEvents(events) {
28335
28507
  return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
28336
28508
  }
28337
28509
  //#endregion
28510
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
28511
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
28512
+ const eventRecoveryRequestSchema = z.object({
28513
+ ...stringEventQueryShape,
28514
+ limit: z.coerce.number().int().positive().optional(),
28515
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
28516
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
28517
+ detailLevel: z.enum(["full", "listing"]).optional(),
28518
+ stage: z.enum(["preview", "published"]).optional()
28519
+ });
28520
+ function resolveEventRegistrationEventSource(input) {
28521
+ if (input.wholeSeriesRunEvents != null) return {
28522
+ kind: "loaded",
28523
+ events: input.wholeSeriesRunEvents
28524
+ };
28525
+ if (input.events != null) return {
28526
+ kind: "loaded",
28527
+ events: input.events
28528
+ };
28529
+ return {
28530
+ kind: "unresolved",
28531
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
28532
+ };
28533
+ }
28534
+ const eventLoaderFailureSchema = z.object({
28535
+ endpoint: z.literal("listPublicEvents"),
28536
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
28537
+ });
28538
+ function parseEventLoaderRecoveryRequest(value) {
28539
+ const parsed = eventLoaderFailureSchema.safeParse(value);
28540
+ if (!parsed.success) return null;
28541
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
28542
+ return {
28543
+ ...params,
28544
+ stage: stage ?? "published"
28545
+ };
28546
+ }
28547
+ //#endregion
28338
28548
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28339
28549
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
28340
28550
  "Date",
@@ -28352,8 +28562,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
28352
28562
  const eventRegistrationHydrationSchemaShape = {
28353
28563
  occurrenceContext: occurrenceContextSchema.optional(),
28354
28564
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
28355
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28356
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28357
28565
  maxTickets: z.string().optional(),
28358
28566
  showVenue: z.boolean().optional(),
28359
28567
  showCapacity: z.boolean().optional(),
@@ -28365,12 +28573,22 @@ const eventRegistrationHydrationSchemaShape = {
28365
28573
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
28366
28574
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
28367
28575
  };
28576
+ const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
28577
+ kind: z.literal("loaded"),
28578
+ events: z.array(eventRegistrationPublicEventSchema)
28579
+ }), z.object({
28580
+ kind: z.literal("unresolved"),
28581
+ request: eventRecoveryRequestSchema.nullable()
28582
+ })]);
28368
28583
  const eventRegistrationSourceSchema = z.object({
28369
28584
  siteId: z.string().optional(),
28370
28585
  apiBaseUrl: z.string().optional(),
28371
28586
  portalToken: z.string().nullable().optional(),
28372
28587
  previewToken: z.string().nullable().optional(),
28373
28588
  ...eventRegistrationHydrationSchemaShape,
28589
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28590
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
28591
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
28374
28592
  className: z.string().nullable().optional(),
28375
28593
  buttonText: z.string().nullable().optional(),
28376
28594
  maxTickets: z.string().nullable().optional(),
@@ -28391,7 +28609,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
28391
28609
  titleText: z.string(),
28392
28610
  bodyText: z.string()
28393
28611
  })]);
28394
- const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
28612
+ const eventRegistrationHydrationSchema = z.object({
28613
+ ...eventRegistrationHydrationSchemaShape,
28614
+ eventSource: eventRegistrationEventSourceSchema
28615
+ });
28395
28616
  const eventRegistrationRenderSchema = z.object({
28396
28617
  display: eventRegistrationDisplaySchema,
28397
28618
  hydration: eventRegistrationHydrationSchema
@@ -28450,16 +28671,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
28450
28671
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
28451
28672
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
28452
28673
  }
28453
- function scopeEventRegistrationSourceEvents(source) {
28454
- return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
28674
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
28675
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
28455
28676
  occurrenceContext: source.occurrenceContext,
28456
28677
  subject: source.subject
28457
28678
  });
28458
28679
  }
28459
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
28460
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
28461
- return [...scopedSourceEvents];
28462
- }
28463
28680
  /**
28464
28681
  * The one run this surface is registering for, when the scoped events describe
28465
28682
  * exactly one. More than one run means the visitor still has to choose.
@@ -28499,14 +28716,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
28499
28716
  render: createZodCodec(eventRegistrationRenderSchema)
28500
28717
  },
28501
28718
  buildRender: (source) => {
28502
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
28503
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
28719
+ const eventSource = resolveEventRegistrationEventSource({
28720
+ events: source.events,
28721
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
28722
+ failures: source.eventLoaderFailures
28723
+ });
28724
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
28504
28725
  return {
28505
28726
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
28506
28727
  hydration: {
28507
28728
  occurrenceContext: source.occurrenceContext ?? null,
28508
28729
  subject: source.subject ?? null,
28509
- events,
28730
+ eventSource: eventSource.kind === "loaded" ? {
28731
+ ...eventSource,
28732
+ events: [...scopedSourceEvents]
28733
+ } : eventSource,
28510
28734
  maxTickets: source.maxTickets ?? void 0,
28511
28735
  showVenue: source.showVenue,
28512
28736
  showCapacity: source.showCapacity,
@@ -28682,6 +28906,7 @@ const eventRegistrationBlockDefinition = {
28682
28906
  } },
28683
28907
  events: { $bind: { from: "data.events" } },
28684
28908
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
28909
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
28685
28910
  sitePasses: { $bind: { from: "data.sitePasses" } },
28686
28911
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
28687
28912
  stage: { $bind: {
@@ -35237,6 +35462,15 @@ const newsletterFieldSchema = z.object({
35237
35462
  placeholder: z.string().optional()
35238
35463
  });
35239
35464
  const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
35465
+ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
35466
+ const parsed = parseMailingListContentVersionId(value);
35467
+ if (parsed) return parsed;
35468
+ ctx.addIssue({
35469
+ code: z.ZodIssueCode.custom,
35470
+ message: "Invalid mailing-list content version ID"
35471
+ });
35472
+ return z.NEVER;
35473
+ });
35240
35474
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
35241
35475
  const newsletterSourceCommonSchema = z.object({
35242
35476
  siteId: z.string().optional(),
@@ -35250,7 +35484,8 @@ const newsletterSourceCommonSchema = z.object({
35250
35484
  const newsletterSourceSchema = z.discriminatedUnion("source", [
35251
35485
  newsletterSourceCommonSchema.extend({
35252
35486
  source: z.literal("block"),
35253
- blockId: z.string().nullable().optional()
35487
+ blockId: z.string().nullable().optional(),
35488
+ contentVersionId: z.string().nullable().optional()
35254
35489
  }),
35255
35490
  newsletterSourceCommonSchema.extend({
35256
35491
  source: z.literal("signed-footer"),
@@ -35266,6 +35501,7 @@ const newsletterDisplaySchema = z.object({
35266
35501
  availability: z.enum(["ready", "unavailable"]),
35267
35502
  className: z.string().nullable(),
35268
35503
  buttonLabel: z.string(),
35504
+ successMessage: z.string(),
35269
35505
  buttonVariant: newsletterButtonVariantSchema,
35270
35506
  privacyNote: z.string().nullable(),
35271
35507
  fields: z.array(newsletterFieldSchema),
@@ -35280,7 +35516,8 @@ const newsletterHydrationSchema = z.object({
35280
35516
  tag: z.literal("block-source"),
35281
35517
  sourceRef: z.object({
35282
35518
  tag: z.literal("block_ref"),
35283
- blockId: mailingListSignupBlockIdSchema
35519
+ blockId: mailingListSignupBlockIdSchema,
35520
+ contentVersionId: mailingListContentVersionIdSchema
35284
35521
  }).nullable()
35285
35522
  }),
35286
35523
  z.object({
@@ -35319,6 +35556,7 @@ function buildNewsletterDisplay(source) {
35319
35556
  fields: { preset: "emailOnly" },
35320
35557
  includeOptionalPhone: false,
35321
35558
  buttonLabel: "Subscribe",
35559
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
35322
35560
  privacyNote: null
35323
35561
  };
35324
35562
  const targeting = source.targeting ?? { mode: "default" };
@@ -35328,6 +35566,7 @@ function buildNewsletterDisplay(source) {
35328
35566
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
35329
35567
  className: source.className ?? null,
35330
35568
  buttonLabel: form.buttonLabel,
35569
+ successMessage: form.successMessage,
35331
35570
  buttonVariant: source.buttonVariant ?? "primary",
35332
35571
  privacyNote: form.privacyNote,
35333
35572
  fields: getGlobalFormFields(form),
@@ -35358,7 +35597,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
35358
35597
  function projectNewsletterFormHydrationTarget(source) {
35359
35598
  switch (source.source) {
35360
35599
  case "block": {
35361
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
35600
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
35362
35601
  if (sourceRef?.tag === "block_ref") return {
35363
35602
  tag: "block-source",
35364
35603
  sourceRef
@@ -37898,8 +38137,12 @@ function shouldSkipResolvedLoader(input) {
37898
38137
  * ```
37899
38138
  */
37900
38139
  async function prefetchBlockData$1(page, context, options) {
38140
+ return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
38141
+ }
38142
+ async function prefetchBlockDataWithFailures(page, context, options) {
37901
38143
  const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
37902
38144
  const results = {};
38145
+ const loaderFailures = {};
37903
38146
  const tasks = [];
37904
38147
  for (const block of page.blocks) {
37905
38148
  const blockId = block.id;
@@ -37947,6 +38190,11 @@ async function prefetchBlockData$1(page, context, options) {
37947
38190
  const blockResults = results[blockId] ?? (results[blockId] = {});
37948
38191
  blockResults[key] = data;
37949
38192
  } catch (error) {
38193
+ const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
38194
+ blockFailures[key] = {
38195
+ endpoint,
38196
+ params
38197
+ };
37950
38198
  if (onError) onError(error, {
37951
38199
  block: block.kind,
37952
38200
  loader: key
@@ -37956,7 +38204,10 @@ async function prefetchBlockData$1(page, context, options) {
37956
38204
  }
37957
38205
  }
37958
38206
  if (tasks.length > 0) await Promise.all(tasks);
37959
- return results;
38207
+ return {
38208
+ resolvedData: results,
38209
+ loaderFailures
38210
+ };
37960
38211
  }
37961
38212
  //#endregion
37962
38213
  //#region ../blocks/src/system/data/loaderEndpoints.ts
@@ -38306,7 +38557,17 @@ const riverbankSiteConfigInputSchema = z.object({
38306
38557
  z.object({
38307
38558
  config: riverbankSiteConfigInputSchema,
38308
38559
  forceContentTypes: z.boolean().optional(),
38309
- mode: z.enum(["apply", "preview"]).optional()
38560
+ mode: z.enum(["apply", "preview"]).optional(),
38561
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
38562
+ if (value === void 0) return void 0;
38563
+ const parsed = parseMailingListProviderScope(value);
38564
+ if (parsed.ok) return parsed.value;
38565
+ ctx.addIssue({
38566
+ code: "custom",
38567
+ message: "Invalid mailing-list provider scope"
38568
+ });
38569
+ return z.NEVER;
38570
+ }).optional()
38310
38571
  }).strict();
38311
38572
  //#endregion
38312
38573
  //#region ../api/src/sdkThemeWire.ts