@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
@@ -30,10 +30,12 @@ const unsafeAsApiKeyId = (id) => id;
30
30
  const unsafeAsEventOfferingId = (id) => id;
31
31
  const unsafeAsEventSeriesId = (id) => id;
32
32
  const unsafeAsUserId = (id) => id;
33
+ const unsafeAsContentVersionId = (id) => id;
33
34
  const parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
34
35
  const parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
35
36
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
36
37
  const parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
38
+ const parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
37
39
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
38
40
  //#endregion
39
41
  //#region ../core/src/assert-never.ts
@@ -267,7 +269,7 @@ function parseEventPageSurfaceDestinationMode(value) {
267
269
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
268
270
  }
269
271
  function parseEventPageSurfaceSubject(value) {
270
- if (!isRecord$15(value)) return err({ kind: "notObject" });
272
+ if (!isRecord$16(value)) return err({ kind: "notObject" });
271
273
  switch (value.kind) {
272
274
  case "eventSeries": {
273
275
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -322,7 +324,7 @@ function parseEventSeriesIdList(values) {
322
324
  }
323
325
  return ok(parsed);
324
326
  }
325
- function isRecord$15(value) {
327
+ function isRecord$16(value) {
326
328
  return typeof value === "object" && value !== null && !Array.isArray(value);
327
329
  }
328
330
  //#endregion
@@ -506,16 +508,47 @@ function parsePositiveInteger(value) {
506
508
  function parseNewsletterListId(value) {
507
509
  return parseTrimmedMatchingString(value, UUID_PATTERN);
508
510
  }
511
+ function parseMailchimpAccountId(value) {
512
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
513
+ }
509
514
  function parseMailchimpAudienceId(value) {
510
515
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
511
516
  }
512
517
  function parseMailchimpInterestId(value) {
513
518
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
514
519
  }
520
+ function parseBrevoAccountId(value) {
521
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
522
+ }
515
523
  function parseBrevoListId(value) {
516
524
  return parsePositiveInteger(value);
517
525
  }
518
526
  //#endregion
527
+ //#region ../core/src/mailing-list-setup.ts
528
+ function isRecord$15(value) {
529
+ return typeof value === "object" && value !== null && !Array.isArray(value);
530
+ }
531
+ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
532
+ function parseMailingListProviderScope(value) {
533
+ if (!isRecord$15(value)) return err("invalid_mailing_list_provider_scope");
534
+ if (value.provider === "native") return ok({ provider: "native" });
535
+ if (value.provider === "brevo") {
536
+ const accountId = parseBrevoAccountId(value.accountId);
537
+ return accountId !== null ? ok({
538
+ provider: "brevo",
539
+ accountId
540
+ }) : err("invalid_mailing_list_provider_scope");
541
+ }
542
+ if (value.provider === "mailchimp") {
543
+ const accountId = parseMailchimpAccountId(value.accountId);
544
+ return accountId !== null ? ok({
545
+ provider: "mailchimp",
546
+ accountId
547
+ }) : err("invalid_mailing_list_provider_scope");
548
+ }
549
+ return err("invalid_mailing_list_provider_scope");
550
+ }
551
+ //#endregion
519
552
  //#region ../core/src/mailing-list-setup-parser.ts
520
553
  function parseMailingListGlobalForm(value) {
521
554
  if (!isRecord$14(value)) return formError("shape");
@@ -524,12 +557,15 @@ function parseMailingListGlobalForm(value) {
524
557
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
525
558
  const buttonLabel = parseRequiredString(value.buttonLabel);
526
559
  if (buttonLabel === null) return formError("buttonLabel");
560
+ const successMessage = parseRequiredString(value.successMessage);
561
+ if (successMessage === null) return formError("successMessage");
527
562
  const privacyNote = parseOptionalString(value.privacyNote);
528
563
  if (privacyNote === void 0) return formError("privacyNote");
529
564
  return ok({
530
565
  fields,
531
566
  includeOptionalPhone: value.includeOptionalPhone,
532
567
  buttonLabel,
568
+ successMessage,
533
569
  privacyNote
534
570
  });
535
571
  }
@@ -859,11 +895,17 @@ function parseMailingListSignedSourceToken(value) {
859
895
  const parsed = typeof value === "string" ? value.trim() : "";
860
896
  return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
861
897
  }
862
- function buildMailingListSignupBlockSourceRef(blockId) {
863
- const parsed = parseMailingListBlockId(blockId);
864
- return parsed !== null ? {
898
+ function parseMailingListContentVersionId(value) {
899
+ const parsed = parseContentVersionId(value);
900
+ return parsed.ok ? parsed.value : null;
901
+ }
902
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
903
+ const parsedBlockId = parseMailingListBlockId(blockId);
904
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
905
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
865
906
  tag: "block_ref",
866
- blockId: parsed
907
+ blockId: parsedBlockId,
908
+ contentVersionId: parsedContentVersionId
867
909
  } : null;
868
910
  }
869
911
  //#endregion
@@ -3008,59 +3050,108 @@ function interpolateHex(startHex, endHex, position) {
3008
3050
  const channel = (from, to) => Math.round(from + (to - from) * position).toString(16).padStart(2, "0");
3009
3051
  return `#${channel(start.r, end.r)}${channel(start.g, end.g)}${channel(start.b, end.b)}`;
3010
3052
  }
3011
- shadeBackgroundEffect({
3012
- id: "darken-background",
3013
- name: "Darken on Hover",
3014
- description: "Darkens the background color on hover",
3015
- label: "Darken Amount (shade step)",
3016
- shadeDirection: 1
3017
- });
3018
- shadeBackgroundEffect({
3019
- id: "lighten-background",
3020
- name: "Lighten on Hover",
3021
- description: "Lightens the background color on hover",
3022
- label: "Lighten Amount (shade step)",
3023
- shadeDirection: -1
3024
- });
3025
- function shadeBackgroundEffect(config) {
3026
- return {
3027
- id: config.id,
3028
- name: config.name,
3029
- description: config.description,
3030
- category: "background",
3031
- pseudoElement: "none",
3032
- applicableTo: ["button"],
3033
- customizableOption: {
3034
- name: "amount",
3035
- type: "select",
3036
- label: config.label,
3037
- default: 100,
3038
- options: [
3039
- 0,
3040
- 100,
3041
- 200,
3042
- 300,
3043
- 400,
3044
- 500,
3045
- 600,
3046
- 700,
3047
- 800,
3048
- 900
3049
- ]
3053
+ //#endregion
3054
+ //#region ../theme-core/src/tokens/tokens.ts
3055
+ const defaultThemeTokens = {
3056
+ color: {
3057
+ "background/base": "#ffffff",
3058
+ "background/elevated": "#f5f5f5",
3059
+ "surface/base": "#ffffff",
3060
+ "surface/subtle": "#f9f9fb",
3061
+ "surface/inverted": "#111111",
3062
+ "content/primary": "#111111",
3063
+ "content/secondary": "#3f3f46",
3064
+ "accent/primary": "#2563eb",
3065
+ "accent/secondary": "#1d4ed8",
3066
+ "border/base": "#e5e7eb"
3067
+ },
3068
+ typography: {
3069
+ "display/hero": {
3070
+ fontSize: "clamp(48px, 8vw, 96px)",
3071
+ lineHeight: "1.05",
3072
+ fontWeight: "700"
3050
3073
  },
3051
- isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3052
- generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3053
- if (buttonConfig.background.type !== "solid") return "";
3054
- const amount = (options.amount || 100) * config.shadeDirection;
3055
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3056
- return `
3057
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3058
- background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3059
- }
3060
- `;
3074
+ "display/section": {
3075
+ fontSize: "clamp(40px, 6vw, 72px)",
3076
+ lineHeight: "1.1",
3077
+ fontWeight: "700"
3078
+ },
3079
+ "heading/large": {
3080
+ fontSize: "clamp(32px, 4vw, 48px)",
3081
+ lineHeight: "1.2",
3082
+ fontWeight: "600"
3083
+ },
3084
+ "heading/medium": {
3085
+ fontSize: "clamp(24px, 3vw, 32px)",
3086
+ lineHeight: "1.25",
3087
+ fontWeight: "600"
3088
+ },
3089
+ "heading/small": {
3090
+ fontSize: "20px",
3091
+ lineHeight: "1.3",
3092
+ fontWeight: "600"
3093
+ },
3094
+ "body/normal": {
3095
+ fontSize: "16px",
3096
+ lineHeight: "1.6",
3097
+ fontWeight: "400"
3098
+ },
3099
+ "body/small": {
3100
+ fontSize: "14px",
3101
+ lineHeight: "1.5",
3102
+ fontWeight: "400"
3103
+ },
3104
+ caption: {
3105
+ fontSize: "12px",
3106
+ lineHeight: "1.4",
3107
+ fontWeight: "500"
3061
3108
  }
3062
- };
3063
- }
3109
+ },
3110
+ spacing: {
3111
+ none: "0px",
3112
+ "3xs": "4px",
3113
+ "2xs": "8px",
3114
+ xs: "12px",
3115
+ sm: "16px",
3116
+ md: "24px",
3117
+ lg: "32px",
3118
+ xl: "40px",
3119
+ "2xl": "56px",
3120
+ "3xl": "72px"
3121
+ },
3122
+ radius: {
3123
+ none: "0px",
3124
+ xs: "2px",
3125
+ sm: "4px",
3126
+ md: "8px",
3127
+ lg: "12px",
3128
+ pill: "999px",
3129
+ full: "9999px"
3130
+ },
3131
+ shadow: {
3132
+ none: "none",
3133
+ soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
3134
+ medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
3135
+ strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
3136
+ },
3137
+ palette: {
3138
+ surface: "#ffffff",
3139
+ "neutral-50": "#f9fafb",
3140
+ "neutral-900": "#111827",
3141
+ primary: "#2563eb",
3142
+ "primary-50": "#eff6ff",
3143
+ "primary-500": "#2563eb",
3144
+ "primary-900": "#1d4ed8",
3145
+ secondary: "#9333ea",
3146
+ "secondary-50": "#f3e8ff",
3147
+ "secondary-500": "#9333ea",
3148
+ "secondary-900": "#4c1d95",
3149
+ accent: "#f97316",
3150
+ "accent-50": "#fff7ed",
3151
+ "accent-500": "#f97316",
3152
+ "accent-900": "#7c2d12"
3153
+ }
3154
+ };
3064
3155
  //#endregion
3065
3156
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
3066
3157
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
@@ -3345,6 +3436,59 @@ function mergeStyles(...styles) {
3345
3436
  }
3346
3437
  return Object.keys(merged).length ? merged : void 0;
3347
3438
  }
3439
+ shadeBackgroundEffect({
3440
+ id: "darken-background",
3441
+ name: "Darken on Hover",
3442
+ description: "Darkens the background color on hover",
3443
+ label: "Darken Amount (shade step)",
3444
+ shadeDirection: 1
3445
+ });
3446
+ shadeBackgroundEffect({
3447
+ id: "lighten-background",
3448
+ name: "Lighten on Hover",
3449
+ description: "Lightens the background color on hover",
3450
+ label: "Lighten Amount (shade step)",
3451
+ shadeDirection: -1
3452
+ });
3453
+ function shadeBackgroundEffect(config) {
3454
+ return {
3455
+ id: config.id,
3456
+ name: config.name,
3457
+ description: config.description,
3458
+ category: "background",
3459
+ pseudoElement: "none",
3460
+ applicableTo: ["button"],
3461
+ customizableOption: {
3462
+ name: "amount",
3463
+ type: "select",
3464
+ label: config.label,
3465
+ default: 100,
3466
+ options: [
3467
+ 0,
3468
+ 100,
3469
+ 200,
3470
+ 300,
3471
+ 400,
3472
+ 500,
3473
+ 600,
3474
+ 700,
3475
+ 800,
3476
+ 900
3477
+ ]
3478
+ },
3479
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3480
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3481
+ if (buttonConfig.background.type !== "solid") return "";
3482
+ const amount = (options.amount || 100) * config.shadeDirection;
3483
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3484
+ return `
3485
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3486
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3487
+ }
3488
+ `;
3489
+ }
3490
+ };
3491
+ }
3348
3492
  //#endregion
3349
3493
  //#region ../theme-core/src/utils/tokenOrColor.ts
3350
3494
  /**
@@ -6766,8 +6910,14 @@ const headerInteractionPillPaletteValues = [
6766
6910
  "accent"
6767
6911
  ];
6768
6912
  /**
6769
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
6770
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
6913
+ * "No pill": a colour change on hover rather than a filled background.
6914
+ *
6915
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
6916
+ * foreground-adaptive style that is not the end of the story: the hover colour
6917
+ * is derived from the resolved opening foreground at render time, paired with
6918
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
6919
+ * whatever brand token the recipe happened to name. See
6920
+ * `applyOpeningForeground`.
6771
6921
  *
6772
6922
  * It exists because "a colour change on hover, no filled background" was not
6773
6923
  * expressible in the vocabulary, and it is what
@@ -7769,6 +7919,28 @@ const bookingRequirementConsentFieldSchema = z.object({
7769
7919
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
7770
7920
  //#endregion
7771
7921
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
7922
+ const publicEventLoaderQuerySchemaShape = {
7923
+ limit: z.string().optional(),
7924
+ from: z.string().optional(),
7925
+ to: z.string().optional(),
7926
+ afterStartsAt: z.string().optional(),
7927
+ afterId: z.string().optional(),
7928
+ categoryIds: z.string().optional(),
7929
+ venueId: z.string().optional(),
7930
+ staffMemberId: z.string().optional(),
7931
+ eventSurface: z.string().optional(),
7932
+ eventPresets: z.string().optional(),
7933
+ scheduleScope: z.string().optional(),
7934
+ seriesId: z.string().optional(),
7935
+ seriesIds: z.string().optional(),
7936
+ runSeriesId: z.string().optional(),
7937
+ seriesSlug: z.string().optional(),
7938
+ includeOccurrenceId: z.string().optional(),
7939
+ readIntent: z.string().optional(),
7940
+ detailLevel: z.string().optional(),
7941
+ readProfile: z.string().optional()
7942
+ };
7943
+ z.object(publicEventLoaderQuerySchemaShape);
7772
7944
  const eventPresetSchema = z.enum([
7773
7945
  "event",
7774
7946
  "class",
@@ -9611,6 +9783,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
9611
9783
  auth: "public",
9612
9784
  responseKind: "json"
9613
9785
  },
9786
+ getPublicBookingServiceBySlug: {
9787
+ path: "/public/bookings/services/by-slug/{slug}",
9788
+ method: "GET",
9789
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
9790
+ tags: [TAG_TEMPLATES.publicBookingServices],
9791
+ auth: "public",
9792
+ responseKind: "json"
9793
+ },
9614
9794
  getPublicBookingResourcesReference: {
9615
9795
  path: "/public/bookings/resources/reference",
9616
9796
  method: "GET",
@@ -10163,16 +10343,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10163
10343
  responseKind: "json"
10164
10344
  }
10165
10345
  });
10346
+ //#endregion
10347
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
10348
+ /**
10349
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
10350
+ *
10351
+ * Every route here is reached before there is an account, so none of them can
10352
+ * be scoped to a site or a user: the token is the whole credential. They are
10353
+ * kept together so that stays obvious.
10354
+ */
10355
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10356
+ createPublicOnboardingAttempt: {
10357
+ path: "/public/onboarding/attempts",
10358
+ method: "POST",
10359
+ auth: "public",
10360
+ errors: [],
10361
+ responseKind: "json"
10362
+ },
10363
+ createPublicOnboardingLogoUploadUrl: {
10364
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
10365
+ method: "POST",
10366
+ auth: "public",
10367
+ errors: [],
10368
+ responseKind: "json"
10369
+ },
10370
+ uploadPublicOnboardingLogo: {
10371
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
10372
+ method: "POST",
10373
+ auth: "public",
10374
+ errors: [],
10375
+ responseKind: "json"
10376
+ },
10377
+ getPublicOnboardingAttempt: {
10378
+ path: "/public/onboarding/attempts/{attemptToken}",
10379
+ method: "GET",
10380
+ auth: "public",
10381
+ errors: [],
10382
+ responseKind: "json"
10383
+ },
10384
+ getPublicOnboardingAttemptProgress: {
10385
+ path: "/public/onboarding/attempts/{attemptToken}/status",
10386
+ method: "GET",
10387
+ auth: "public",
10388
+ errors: [],
10389
+ responseKind: "json"
10390
+ },
10391
+ updatePublicOnboardingAttempt: {
10392
+ path: "/public/onboarding/attempts/{attemptToken}",
10393
+ method: "PATCH",
10394
+ auth: "public",
10395
+ errors: [],
10396
+ responseKind: "json"
10397
+ },
10398
+ runPublicOnboardingAttempt: {
10399
+ path: "/public/onboarding/attempts/{attemptToken}/run",
10400
+ method: "POST",
10401
+ auth: "public",
10402
+ errors: [],
10403
+ responseKind: "json"
10404
+ },
10405
+ resendPublicOnboardingAttemptConfirmation: {
10406
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
10407
+ method: "POST",
10408
+ auth: "public",
10409
+ errors: [],
10410
+ responseKind: "json"
10411
+ }
10412
+ });
10413
+ //#endregion
10414
+ //#region ../api/src/billingEndpointDefinitions.ts
10415
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10416
+ adminChangePlan: {
10417
+ path: "/admin/billing/plan",
10418
+ method: "POST",
10419
+ tags: ["admin", "billing"],
10420
+ auth: "admin",
10421
+ responseKind: "json"
10422
+ },
10423
+ changePlan: {
10424
+ path: "/billing/plan/change",
10425
+ method: "POST",
10426
+ tags: ["billing"],
10427
+ auth: "user",
10428
+ responseKind: "json"
10429
+ },
10430
+ createBillingPortalSession: {
10431
+ path: "/billing/portal/session",
10432
+ method: "POST",
10433
+ tags: ["billing"],
10434
+ auth: "user",
10435
+ responseKind: "json"
10436
+ }
10437
+ });
10166
10438
  ({
10167
10439
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
10440
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
10168
10441
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
10169
10442
  ...GIFTING_ENDPOINT_DEFINITIONS,
10170
- ...PUBLIC_READ_ENDPOINT_DEFINITIONS
10443
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
10444
+ ...BILLING_ENDPOINT_DEFINITIONS
10171
10445
  }), 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, {
10172
10446
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
10173
10447
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
10174
10448
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
10175
- }, 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 };
10449
+ }, 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 };
10176
10450
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
10177
10451
  z.object({
10178
10452
  accessToken: z.string().min(1).max(4096),
@@ -12441,108 +12715,6 @@ function assertUniqueLayoutProfileKeys(profiles) {
12441
12715
  if (duplicates.length > 0) throw new Error(`Duplicate block layout design profiles: ${duplicates.join(", ")}`);
12442
12716
  }
12443
12717
  //#endregion
12444
- //#region ../theme-core/src/tokens/tokens.ts
12445
- const defaultThemeTokens = {
12446
- color: {
12447
- "background/base": "#ffffff",
12448
- "background/elevated": "#f5f5f5",
12449
- "surface/base": "#ffffff",
12450
- "surface/subtle": "#f9f9fb",
12451
- "surface/inverted": "#111111",
12452
- "content/primary": "#111111",
12453
- "content/secondary": "#3f3f46",
12454
- "accent/primary": "#2563eb",
12455
- "accent/secondary": "#1d4ed8",
12456
- "border/base": "#e5e7eb"
12457
- },
12458
- typography: {
12459
- "display/hero": {
12460
- fontSize: "clamp(48px, 8vw, 96px)",
12461
- lineHeight: "1.05",
12462
- fontWeight: "700"
12463
- },
12464
- "display/section": {
12465
- fontSize: "clamp(40px, 6vw, 72px)",
12466
- lineHeight: "1.1",
12467
- fontWeight: "700"
12468
- },
12469
- "heading/large": {
12470
- fontSize: "clamp(32px, 4vw, 48px)",
12471
- lineHeight: "1.2",
12472
- fontWeight: "600"
12473
- },
12474
- "heading/medium": {
12475
- fontSize: "clamp(24px, 3vw, 32px)",
12476
- lineHeight: "1.25",
12477
- fontWeight: "600"
12478
- },
12479
- "heading/small": {
12480
- fontSize: "20px",
12481
- lineHeight: "1.3",
12482
- fontWeight: "600"
12483
- },
12484
- "body/normal": {
12485
- fontSize: "16px",
12486
- lineHeight: "1.6",
12487
- fontWeight: "400"
12488
- },
12489
- "body/small": {
12490
- fontSize: "14px",
12491
- lineHeight: "1.5",
12492
- fontWeight: "400"
12493
- },
12494
- caption: {
12495
- fontSize: "12px",
12496
- lineHeight: "1.4",
12497
- fontWeight: "500"
12498
- }
12499
- },
12500
- spacing: {
12501
- none: "0px",
12502
- "3xs": "4px",
12503
- "2xs": "8px",
12504
- xs: "12px",
12505
- sm: "16px",
12506
- md: "24px",
12507
- lg: "32px",
12508
- xl: "40px",
12509
- "2xl": "56px",
12510
- "3xl": "72px"
12511
- },
12512
- radius: {
12513
- none: "0px",
12514
- xs: "2px",
12515
- sm: "4px",
12516
- md: "8px",
12517
- lg: "12px",
12518
- pill: "999px",
12519
- full: "9999px"
12520
- },
12521
- shadow: {
12522
- none: "none",
12523
- soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
12524
- medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
12525
- strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
12526
- },
12527
- palette: {
12528
- surface: "#ffffff",
12529
- "neutral-50": "#f9fafb",
12530
- "neutral-900": "#111827",
12531
- primary: "#2563eb",
12532
- "primary-50": "#eff6ff",
12533
- "primary-500": "#2563eb",
12534
- "primary-900": "#1d4ed8",
12535
- secondary: "#9333ea",
12536
- "secondary-50": "#f3e8ff",
12537
- "secondary-500": "#9333ea",
12538
- "secondary-900": "#4c1d95",
12539
- accent: "#f97316",
12540
- "accent-50": "#fff7ed",
12541
- "accent-500": "#f97316",
12542
- "accent-900": "#7c2d12"
12543
- }
12544
- };
12545
- //#endregion
12546
12718
  //#region ../theme-core/src/site-styles/backgroundAppearance.ts
12547
12719
  const backgroundAppearanceQuickColorTokenNames = [
12548
12720
  "background",
@@ -30196,6 +30368,44 @@ function toWholeSeriesRegistrationEvents(events) {
30196
30368
  return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
30197
30369
  }
30198
30370
  //#endregion
30371
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
30372
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
30373
+ const eventRecoveryRequestSchema = z.object({
30374
+ ...stringEventQueryShape,
30375
+ limit: z.coerce.number().int().positive().optional(),
30376
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
30377
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
30378
+ detailLevel: z.enum(["full", "listing"]).optional(),
30379
+ stage: z.enum(["preview", "published"]).optional()
30380
+ });
30381
+ function resolveEventRegistrationEventSource(input) {
30382
+ if (input.wholeSeriesRunEvents != null) return {
30383
+ kind: "loaded",
30384
+ events: input.wholeSeriesRunEvents
30385
+ };
30386
+ if (input.events != null) return {
30387
+ kind: "loaded",
30388
+ events: input.events
30389
+ };
30390
+ return {
30391
+ kind: "unresolved",
30392
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
30393
+ };
30394
+ }
30395
+ const eventLoaderFailureSchema = z.object({
30396
+ endpoint: z.literal("listPublicEvents"),
30397
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
30398
+ });
30399
+ function parseEventLoaderRecoveryRequest(value) {
30400
+ const parsed = eventLoaderFailureSchema.safeParse(value);
30401
+ if (!parsed.success) return null;
30402
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
30403
+ return {
30404
+ ...params,
30405
+ stage: stage ?? "published"
30406
+ };
30407
+ }
30408
+ //#endregion
30199
30409
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
30200
30410
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
30201
30411
  "Date",
@@ -30213,8 +30423,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
30213
30423
  const eventRegistrationHydrationSchemaShape = {
30214
30424
  occurrenceContext: occurrenceContextSchema.optional(),
30215
30425
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
30216
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
30217
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
30218
30426
  maxTickets: z.string().optional(),
30219
30427
  showVenue: z.boolean().optional(),
30220
30428
  showCapacity: z.boolean().optional(),
@@ -30226,12 +30434,22 @@ const eventRegistrationHydrationSchemaShape = {
30226
30434
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
30227
30435
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
30228
30436
  };
30437
+ const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
30438
+ kind: z.literal("loaded"),
30439
+ events: z.array(eventRegistrationPublicEventSchema)
30440
+ }), z.object({
30441
+ kind: z.literal("unresolved"),
30442
+ request: eventRecoveryRequestSchema.nullable()
30443
+ })]);
30229
30444
  const eventRegistrationSourceSchema = z.object({
30230
30445
  siteId: z.string().optional(),
30231
30446
  apiBaseUrl: z.string().optional(),
30232
30447
  portalToken: z.string().nullable().optional(),
30233
30448
  previewToken: z.string().nullable().optional(),
30234
30449
  ...eventRegistrationHydrationSchemaShape,
30450
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
30451
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
30452
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
30235
30453
  className: z.string().nullable().optional(),
30236
30454
  buttonText: z.string().nullable().optional(),
30237
30455
  maxTickets: z.string().nullable().optional(),
@@ -30252,7 +30470,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
30252
30470
  titleText: z.string(),
30253
30471
  bodyText: z.string()
30254
30472
  })]);
30255
- const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
30473
+ const eventRegistrationHydrationSchema = z.object({
30474
+ ...eventRegistrationHydrationSchemaShape,
30475
+ eventSource: eventRegistrationEventSourceSchema
30476
+ });
30256
30477
  const eventRegistrationRenderSchema = z.object({
30257
30478
  display: eventRegistrationDisplaySchema,
30258
30479
  hydration: eventRegistrationHydrationSchema
@@ -30311,16 +30532,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
30311
30532
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
30312
30533
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
30313
30534
  }
30314
- function scopeEventRegistrationSourceEvents(source) {
30315
- return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
30535
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
30536
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
30316
30537
  occurrenceContext: source.occurrenceContext,
30317
30538
  subject: source.subject
30318
30539
  });
30319
30540
  }
30320
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
30321
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
30322
- return [...scopedSourceEvents];
30323
- }
30324
30541
  /**
30325
30542
  * The one run this surface is registering for, when the scoped events describe
30326
30543
  * exactly one. More than one run means the visitor still has to choose.
@@ -30360,14 +30577,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
30360
30577
  render: createZodCodec(eventRegistrationRenderSchema)
30361
30578
  },
30362
30579
  buildRender: (source) => {
30363
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
30364
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
30580
+ const eventSource = resolveEventRegistrationEventSource({
30581
+ events: source.events,
30582
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
30583
+ failures: source.eventLoaderFailures
30584
+ });
30585
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
30365
30586
  return {
30366
30587
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
30367
30588
  hydration: {
30368
30589
  occurrenceContext: source.occurrenceContext ?? null,
30369
30590
  subject: source.subject ?? null,
30370
- events,
30591
+ eventSource: eventSource.kind === "loaded" ? {
30592
+ ...eventSource,
30593
+ events: [...scopedSourceEvents]
30594
+ } : eventSource,
30371
30595
  maxTickets: source.maxTickets ?? void 0,
30372
30596
  showVenue: source.showVenue,
30373
30597
  showCapacity: source.showCapacity,
@@ -30543,6 +30767,7 @@ const eventRegistrationBlockDefinition = {
30543
30767
  } },
30544
30768
  events: { $bind: { from: "data.events" } },
30545
30769
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
30770
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
30546
30771
  sitePasses: { $bind: { from: "data.sitePasses" } },
30547
30772
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
30548
30773
  stage: { $bind: {
@@ -37098,6 +37323,15 @@ const newsletterFieldSchema = z.object({
37098
37323
  placeholder: z.string().optional()
37099
37324
  });
37100
37325
  const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
37326
+ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
37327
+ const parsed = parseMailingListContentVersionId(value);
37328
+ if (parsed) return parsed;
37329
+ ctx.addIssue({
37330
+ code: z.ZodIssueCode.custom,
37331
+ message: "Invalid mailing-list content version ID"
37332
+ });
37333
+ return z.NEVER;
37334
+ });
37101
37335
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
37102
37336
  const newsletterSourceCommonSchema = z.object({
37103
37337
  siteId: z.string().optional(),
@@ -37111,7 +37345,8 @@ const newsletterSourceCommonSchema = z.object({
37111
37345
  const newsletterSourceSchema = z.discriminatedUnion("source", [
37112
37346
  newsletterSourceCommonSchema.extend({
37113
37347
  source: z.literal("block"),
37114
- blockId: z.string().nullable().optional()
37348
+ blockId: z.string().nullable().optional(),
37349
+ contentVersionId: z.string().nullable().optional()
37115
37350
  }),
37116
37351
  newsletterSourceCommonSchema.extend({
37117
37352
  source: z.literal("signed-footer"),
@@ -37127,6 +37362,7 @@ const newsletterDisplaySchema = z.object({
37127
37362
  availability: z.enum(["ready", "unavailable"]),
37128
37363
  className: z.string().nullable(),
37129
37364
  buttonLabel: z.string(),
37365
+ successMessage: z.string(),
37130
37366
  buttonVariant: newsletterButtonVariantSchema,
37131
37367
  privacyNote: z.string().nullable(),
37132
37368
  fields: z.array(newsletterFieldSchema),
@@ -37141,7 +37377,8 @@ const newsletterHydrationSchema = z.object({
37141
37377
  tag: z.literal("block-source"),
37142
37378
  sourceRef: z.object({
37143
37379
  tag: z.literal("block_ref"),
37144
- blockId: mailingListSignupBlockIdSchema
37380
+ blockId: mailingListSignupBlockIdSchema,
37381
+ contentVersionId: mailingListContentVersionIdSchema
37145
37382
  }).nullable()
37146
37383
  }),
37147
37384
  z.object({
@@ -37180,6 +37417,7 @@ function buildNewsletterDisplay(source) {
37180
37417
  fields: { preset: "emailOnly" },
37181
37418
  includeOptionalPhone: false,
37182
37419
  buttonLabel: "Subscribe",
37420
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
37183
37421
  privacyNote: null
37184
37422
  };
37185
37423
  const targeting = source.targeting ?? { mode: "default" };
@@ -37189,6 +37427,7 @@ function buildNewsletterDisplay(source) {
37189
37427
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
37190
37428
  className: source.className ?? null,
37191
37429
  buttonLabel: form.buttonLabel,
37430
+ successMessage: form.successMessage,
37192
37431
  buttonVariant: source.buttonVariant ?? "primary",
37193
37432
  privacyNote: form.privacyNote,
37194
37433
  fields: getGlobalFormFields(form),
@@ -37219,7 +37458,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
37219
37458
  function projectNewsletterFormHydrationTarget(source) {
37220
37459
  switch (source.source) {
37221
37460
  case "block": {
37222
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
37461
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
37223
37462
  if (sourceRef?.tag === "block_ref") return {
37224
37463
  tag: "block-source",
37225
37464
  sourceRef
@@ -39773,8 +40012,12 @@ function shouldSkipResolvedLoader(input) {
39773
40012
  * ```
39774
40013
  */
39775
40014
  async function prefetchBlockData$1(page, context, options) {
40015
+ return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
40016
+ }
40017
+ async function prefetchBlockDataWithFailures(page, context, options) {
39776
40018
  const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
39777
40019
  const results = {};
40020
+ const loaderFailures = {};
39778
40021
  const tasks = [];
39779
40022
  for (const block of page.blocks) {
39780
40023
  const blockId = block.id;
@@ -39822,6 +40065,11 @@ async function prefetchBlockData$1(page, context, options) {
39822
40065
  const blockResults = results[blockId] ?? (results[blockId] = {});
39823
40066
  blockResults[key] = data;
39824
40067
  } catch (error) {
40068
+ const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
40069
+ blockFailures[key] = {
40070
+ endpoint,
40071
+ params
40072
+ };
39825
40073
  if (onError) onError(error, {
39826
40074
  block: block.kind,
39827
40075
  loader: key
@@ -39831,7 +40079,10 @@ async function prefetchBlockData$1(page, context, options) {
39831
40079
  }
39832
40080
  }
39833
40081
  if (tasks.length > 0) await Promise.all(tasks);
39834
- return results;
40082
+ return {
40083
+ resolvedData: results,
40084
+ loaderFailures
40085
+ };
39835
40086
  }
39836
40087
  //#endregion
39837
40088
  //#region ../blocks/src/system/data/loaderEndpoints.ts
@@ -40181,7 +40432,17 @@ const riverbankSiteConfigInputSchema = z.object({
40181
40432
  z.object({
40182
40433
  config: riverbankSiteConfigInputSchema,
40183
40434
  forceContentTypes: z.boolean().optional(),
40184
- mode: z.enum(["apply", "preview"]).optional()
40435
+ mode: z.enum(["apply", "preview"]).optional(),
40436
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
40437
+ if (value === void 0) return void 0;
40438
+ const parsed = parseMailingListProviderScope(value);
40439
+ if (parsed.ok) return parsed.value;
40440
+ ctx.addIssue({
40441
+ code: "custom",
40442
+ message: "Invalid mailing-list provider scope"
40443
+ });
40444
+ return z.NEVER;
40445
+ }).optional()
40185
40446
  }).strict();
40186
40447
  //#endregion
40187
40448
  //#region ../api/src/sdkThemeWire.ts
@@ -41315,9 +41576,11 @@ function convertPageResponseBlock(block) {
41315
41576
  if (typeof block.id !== "string" && block.id !== null) throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
41316
41577
  if (typeof block.kind !== "string") throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
41317
41578
  if (typeof block.purpose !== "string") throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
41579
+ if (block.contentVersionId !== void 0 && block.contentVersionId !== null && typeof block.contentVersionId !== "string") throw new Error(`Invalid content version id in page: expected string or null, got ${typeof block.contentVersionId}`);
41318
41580
  const admission = readInvalidBlockAdmission(block.admission);
41319
41581
  return {
41320
41582
  id: block.id,
41583
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
41321
41584
  kind: block.kind,
41322
41585
  purpose: block.purpose,
41323
41586
  content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
@@ -41350,6 +41613,7 @@ function projectRenderablePageOutline(page) {
41350
41613
  ...page,
41351
41614
  blocks: page.blocks.flatMap((block) => block.admission.kind === "renderable" ? [{
41352
41615
  id: block.id,
41616
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
41353
41617
  kind: block.kind,
41354
41618
  purpose: block.purpose,
41355
41619
  content: block.admission.content,
@@ -41360,6 +41624,7 @@ function projectRenderablePageOutline(page) {
41360
41624
  function admitSdkRuntimePageBlock(block, customBlocks) {
41361
41625
  const base = {
41362
41626
  id: block.id,
41627
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
41363
41628
  kind: block.kind,
41364
41629
  purpose: block.purpose,
41365
41630
  ...block.bindings ? { bindings: block.bindings } : {}