@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
@@ -36,10 +36,12 @@ const unsafeAsStorageBucketName = (value) => value;
36
36
  const unsafeAsStoragePath = (value) => value;
37
37
  const unsafeAsPositiveByteCount = (value) => value;
38
38
  const unsafeAsUserId = (id) => id;
39
+ const unsafeAsContentVersionId = (id) => id;
39
40
  const parseSiteId = (value) => parseUuidBrand$1(value, unsafeAsSiteId);
40
41
  const parseApiKeyId = (value) => parseUuidBrand$1(value, unsafeAsApiKeyId);
41
42
  const parseEventOfferingId = (value) => parseUuidBrand$1(value, unsafeAsEventOfferingId);
42
43
  const parseUserId = (value) => parseUuidBrand$1(value, unsafeAsUserId);
44
+ const parseContentVersionId = (value) => parseUuidBrand$1(value, unsafeAsContentVersionId);
43
45
  const parseEventSeriesId = (value) => parseUuidBrand$1(value, unsafeAsEventSeriesId);
44
46
  //#endregion
45
47
  //#region ../core/src/assert-never.ts
@@ -312,7 +314,7 @@ function parseEventPageSurfaceDestinationMode(value) {
312
314
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
313
315
  }
314
316
  function parseEventPageSurfaceSubject(value) {
315
- if (!isRecord$39(value)) return err$3({ kind: "notObject" });
317
+ if (!isRecord$40(value)) return err$3({ kind: "notObject" });
316
318
  switch (value.kind) {
317
319
  case "eventSeries": {
318
320
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -367,7 +369,7 @@ function parseEventSeriesIdList(values) {
367
369
  }
368
370
  return ok$3(parsed);
369
371
  }
370
- function isRecord$39(value) {
372
+ function isRecord$40(value) {
371
373
  return typeof value === "object" && value !== null && !Array.isArray(value);
372
374
  }
373
375
  //#endregion
@@ -611,7 +613,7 @@ function toLocationCoordinates(value) {
611
613
  }
612
614
  //#endregion
613
615
  //#region ../core/src/rich-text.ts
614
- function isRecord$37(value) {
616
+ function isRecord$38(value) {
615
617
  return typeof value === "object" && value !== null && !Array.isArray(value);
616
618
  }
617
619
  function hasOnlyKeys(value, allowed) {
@@ -630,10 +632,10 @@ function isDenseArrayOf(value, predicate) {
630
632
  return true;
631
633
  }
632
634
  function isTipTapMark(value) {
633
- return isRecord$37(value) && hasOnlyKeys(value, markKeys) && typeof value.type === "string" && value.type.length > 0 && (value.attrs === void 0 || isRecord$37(value.attrs));
635
+ return isRecord$38(value) && hasOnlyKeys(value, markKeys) && typeof value.type === "string" && value.type.length > 0 && (value.attrs === void 0 || isRecord$38(value.attrs));
634
636
  }
635
637
  function isTipTapNode(value) {
636
- if (!isRecord$37(value) || !hasOnlyKeys(value, nodeKeys) || typeof value.type !== "string" || value.type.length === 0 || value.type === "doc" || value.attrs !== void 0 && !isRecord$37(value.attrs) || value.marks !== void 0 && (!Array.isArray(value.marks) || !isDenseArrayOf(value.marks, isTipTapMark)) || value.content !== void 0 && (!Array.isArray(value.content) || !isDenseArrayOf(value.content, isTipTapNode))) return false;
638
+ if (!isRecord$38(value) || !hasOnlyKeys(value, nodeKeys) || typeof value.type !== "string" || value.type.length === 0 || value.type === "doc" || value.attrs !== void 0 && !isRecord$38(value.attrs) || value.marks !== void 0 && (!Array.isArray(value.marks) || !isDenseArrayOf(value.marks, isTipTapMark)) || value.content !== void 0 && (!Array.isArray(value.content) || !isDenseArrayOf(value.content, isTipTapNode))) return false;
637
639
  if (value.type === "text") return typeof value.text === "string" && value.text.length > 0 && value.content === void 0;
638
640
  return value.text === void 0;
639
641
  }
@@ -652,22 +654,28 @@ function parsePositiveInteger(value) {
652
654
  function parseNewsletterListId(value) {
653
655
  return parseTrimmedMatchingString(value, UUID_PATTERN$2);
654
656
  }
657
+ function parseMailchimpAccountId(value) {
658
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
659
+ }
655
660
  function parseMailchimpAudienceId$1(value) {
656
661
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
657
662
  }
658
663
  function parseMailchimpInterestId(value) {
659
664
  return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
660
665
  }
666
+ function parseBrevoAccountId(value) {
667
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
668
+ }
661
669
  function parseBrevoListId(value) {
662
670
  return parsePositiveInteger(value);
663
671
  }
664
672
  //#endregion
665
673
  //#region ../core/src/mailing-list-targeting-parser.ts
666
674
  function parseMailingListPlacementTargeting(value) {
667
- if (!isRecord$36(value)) return targetingError("shape");
675
+ if (!isRecord$37(value)) return targetingError("shape");
668
676
  if (value.mode === "default") return ok$3({ mode: "default" });
669
677
  if (value.mode !== "custom") return targetingError("mode");
670
- if (!isRecord$36(value.selection)) return targetingError("selection");
678
+ if (!isRecord$37(value.selection)) return targetingError("selection");
671
679
  switch (value.provider) {
672
680
  case "native": return parseNativeTargeting(value.selection);
673
681
  case "brevo": return parseBrevoTargeting(value.selection);
@@ -771,7 +779,7 @@ function parseUniqueIds(value, parseId) {
771
779
  }
772
780
  return ok$3(parsed);
773
781
  }
774
- function isRecord$36(value) {
782
+ function isRecord$37(value) {
775
783
  return typeof value === "object" && value !== null && !Array.isArray(value);
776
784
  }
777
785
  function targetingError(field) {
@@ -793,6 +801,31 @@ new Map([
793
801
  "legal"
794
802
  ].map((kind, index) => [kind, index]));
795
803
  //#endregion
804
+ //#region ../core/src/mailing-list-setup.ts
805
+ function isRecord$34(value) {
806
+ return typeof value === "object" && value !== null && !Array.isArray(value);
807
+ }
808
+ const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
809
+ function parseMailingListProviderScope(value) {
810
+ if (!isRecord$34(value)) return err$3("invalid_mailing_list_provider_scope");
811
+ if (value.provider === "native") return ok$3({ provider: "native" });
812
+ if (value.provider === "brevo") {
813
+ const accountId = parseBrevoAccountId(value.accountId);
814
+ return accountId !== null ? ok$3({
815
+ provider: "brevo",
816
+ accountId
817
+ }) : err$3("invalid_mailing_list_provider_scope");
818
+ }
819
+ if (value.provider === "mailchimp") {
820
+ const accountId = parseMailchimpAccountId(value.accountId);
821
+ return accountId !== null ? ok$3({
822
+ provider: "mailchimp",
823
+ accountId
824
+ }) : err$3("invalid_mailing_list_provider_scope");
825
+ }
826
+ return err$3("invalid_mailing_list_provider_scope");
827
+ }
828
+ //#endregion
796
829
  //#region ../core/src/mailing-list-setup-parser.ts
797
830
  function parseMailingListGlobalForm(value) {
798
831
  if (!isRecord$33(value)) return formError("shape");
@@ -801,12 +834,15 @@ function parseMailingListGlobalForm(value) {
801
834
  if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
802
835
  const buttonLabel = parseRequiredString(value.buttonLabel);
803
836
  if (buttonLabel === null) return formError("buttonLabel");
837
+ const successMessage = parseRequiredString(value.successMessage);
838
+ if (successMessage === null) return formError("successMessage");
804
839
  const privacyNote = parseOptionalString(value.privacyNote);
805
840
  if (privacyNote === void 0) return formError("privacyNote");
806
841
  return ok$3({
807
842
  fields,
808
843
  includeOptionalPhone: value.includeOptionalPhone,
809
844
  buttonLabel,
845
+ successMessage,
810
846
  privacyNote
811
847
  });
812
848
  }
@@ -1013,11 +1049,17 @@ function parseMailingListSignedSourceToken(value) {
1013
1049
  const parsed = typeof value === "string" ? value.trim() : "";
1014
1050
  return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
1015
1051
  }
1016
- function buildMailingListSignupBlockSourceRef(blockId) {
1017
- const parsed = parseMailingListBlockId(blockId);
1018
- return parsed !== null ? {
1052
+ function parseMailingListContentVersionId(value) {
1053
+ const parsed = parseContentVersionId(value);
1054
+ return parsed.ok ? parsed.value : null;
1055
+ }
1056
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
1057
+ const parsedBlockId = parseMailingListBlockId(blockId);
1058
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
1059
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
1019
1060
  tag: "block_ref",
1020
- blockId: parsed
1061
+ blockId: parsedBlockId,
1062
+ contentVersionId: parsedContentVersionId
1021
1063
  } : null;
1022
1064
  }
1023
1065
  function sortStableJsonValue(value) {
@@ -4309,29 +4351,6 @@ function contrastRatio(hex1, hex2) {
4309
4351
  return (hi + .05) / (lo + .05);
4310
4352
  }
4311
4353
  //#endregion
4312
- //#region ../theme-core/src/palette/utils/onColor.ts
4313
- const BACKGROUND_ROLE_NAMES = /* @__PURE__ */ new Set([
4314
- "primary",
4315
- "secondary",
4316
- "accent",
4317
- "success",
4318
- "warning",
4319
- "destructive",
4320
- "info",
4321
- "background",
4322
- "surface",
4323
- "surfaceAlt",
4324
- "muted",
4325
- "neutral"
4326
- ]);
4327
- function onColorTokenName(backgroundToken) {
4328
- return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
4329
- }
4330
- function isOnColorBackgroundCandidateToken(token) {
4331
- const role = token.match(/^(.*?)(?:-\d{2,3})?$/)?.[1] ?? token;
4332
- return BACKGROUND_ROLE_NAMES.has(role);
4333
- }
4334
- //#endregion
4335
4354
  //#region ../theme-core/src/tokens/colorTokenParts.ts
4336
4355
  function parseOpacityPercent(source) {
4337
4356
  const trimmed = source.trim();
@@ -4369,6 +4388,141 @@ function parseColorTokenParts(source) {
4369
4388
  opacityPercent
4370
4389
  };
4371
4390
  }
4391
+ const defaultThemeTokens = {
4392
+ color: {
4393
+ "background/base": "#ffffff",
4394
+ "background/elevated": "#f5f5f5",
4395
+ "surface/base": "#ffffff",
4396
+ "surface/subtle": "#f9f9fb",
4397
+ "surface/inverted": "#111111",
4398
+ "content/primary": "#111111",
4399
+ "content/secondary": "#3f3f46",
4400
+ "accent/primary": "#2563eb",
4401
+ "accent/secondary": "#1d4ed8",
4402
+ "border/base": "#e5e7eb"
4403
+ },
4404
+ typography: {
4405
+ "display/hero": {
4406
+ fontSize: "clamp(48px, 8vw, 96px)",
4407
+ lineHeight: "1.05",
4408
+ fontWeight: "700"
4409
+ },
4410
+ "display/section": {
4411
+ fontSize: "clamp(40px, 6vw, 72px)",
4412
+ lineHeight: "1.1",
4413
+ fontWeight: "700"
4414
+ },
4415
+ "heading/large": {
4416
+ fontSize: "clamp(32px, 4vw, 48px)",
4417
+ lineHeight: "1.2",
4418
+ fontWeight: "600"
4419
+ },
4420
+ "heading/medium": {
4421
+ fontSize: "clamp(24px, 3vw, 32px)",
4422
+ lineHeight: "1.25",
4423
+ fontWeight: "600"
4424
+ },
4425
+ "heading/small": {
4426
+ fontSize: "20px",
4427
+ lineHeight: "1.3",
4428
+ fontWeight: "600"
4429
+ },
4430
+ "body/normal": {
4431
+ fontSize: "16px",
4432
+ lineHeight: "1.6",
4433
+ fontWeight: "400"
4434
+ },
4435
+ "body/small": {
4436
+ fontSize: "14px",
4437
+ lineHeight: "1.5",
4438
+ fontWeight: "400"
4439
+ },
4440
+ caption: {
4441
+ fontSize: "12px",
4442
+ lineHeight: "1.4",
4443
+ fontWeight: "500"
4444
+ }
4445
+ },
4446
+ spacing: {
4447
+ none: "0px",
4448
+ "3xs": "4px",
4449
+ "2xs": "8px",
4450
+ xs: "12px",
4451
+ sm: "16px",
4452
+ md: "24px",
4453
+ lg: "32px",
4454
+ xl: "40px",
4455
+ "2xl": "56px",
4456
+ "3xl": "72px"
4457
+ },
4458
+ radius: {
4459
+ none: "0px",
4460
+ xs: "2px",
4461
+ sm: "4px",
4462
+ md: "8px",
4463
+ lg: "12px",
4464
+ pill: "999px",
4465
+ full: "9999px"
4466
+ },
4467
+ shadow: {
4468
+ none: "none",
4469
+ soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
4470
+ medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
4471
+ strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
4472
+ },
4473
+ palette: {
4474
+ surface: "#ffffff",
4475
+ "neutral-50": "#f9fafb",
4476
+ "neutral-900": "#111827",
4477
+ primary: "#2563eb",
4478
+ "primary-50": "#eff6ff",
4479
+ "primary-500": "#2563eb",
4480
+ "primary-900": "#1d4ed8",
4481
+ secondary: "#9333ea",
4482
+ "secondary-50": "#f3e8ff",
4483
+ "secondary-500": "#9333ea",
4484
+ "secondary-900": "#4c1d95",
4485
+ accent: "#f97316",
4486
+ "accent-50": "#fff7ed",
4487
+ "accent-500": "#f97316",
4488
+ "accent-900": "#7c2d12"
4489
+ }
4490
+ };
4491
+ /**
4492
+ * Project the expanded semantic palette into the token buckets consumed by
4493
+ * runtime transforms. Keep this mapping shared by full themes and the
4494
+ * tokens-only hosted-booking runtime so the two paths cannot drift.
4495
+ */
4496
+ function buildThemeTokens(palette) {
4497
+ const tokens = cloneThemeTokens(defaultThemeTokens);
4498
+ const paletteStrings = {};
4499
+ for (const [key, value] of Object.entries(palette)) if (typeof value === "string" && value.trim().length > 0) paletteStrings[key] = value;
4500
+ tokens.palette = paletteStrings;
4501
+ const resolveColor = (...keys) => {
4502
+ for (const key of keys) {
4503
+ const value = paletteStrings[key];
4504
+ if (value) return value;
4505
+ }
4506
+ };
4507
+ const assignColor = (token, ...keys) => {
4508
+ const value = resolveColor(...keys);
4509
+ if (value) tokens.color[token] = value;
4510
+ };
4511
+ assignColor("background/base", "background", "surface", "primary-50");
4512
+ assignColor("background/elevated", "surface", "background");
4513
+ assignColor("surface/base", "surface", "background");
4514
+ assignColor("surface/subtle", "neutral-100", "surface", "background");
4515
+ assignColor("surface/inverted", "neutral-900", "text", "primary-900");
4516
+ assignColor("content/primary", "text", "body", "neutral-900");
4517
+ assignColor("content/secondary", "mutedText", "secondary", "neutral-600");
4518
+ assignColor("accent/primary", "primary", "accent");
4519
+ assignColor("accent/secondary", "accent", "secondary", "primary-400");
4520
+ assignColor("border/base", "border", "neutral-300");
4521
+ return tokens;
4522
+ }
4523
+ function cloneThemeTokens(source) {
4524
+ return JSON.parse(JSON.stringify(source));
4525
+ }
4372
4526
  //#endregion
4373
4527
  //#region ../theme-core/src/tokens/blockColorTokens.ts
4374
4528
  const blockColorTokenNames = [
@@ -4479,6 +4633,101 @@ function parseThemeColorToken(value) {
4479
4633
  }
4480
4634
  const themeColorTokenSchema = z$1.string().min(1).refine((value) => Boolean(isThemeColorToken(value)), "Expected a known Theme V2 color token");
4481
4635
  //#endregion
4636
+ //#region ../theme-core/src/tokens/resolver.ts
4637
+ /**
4638
+ * Resolves theme tokens to CSS variables
4639
+ *
4640
+ * This resolver ensures all button styles use theme tokens (not hardcoded colors)
4641
+ * so that changing the palette automatically updates all buttons.
4642
+ */
4643
+ var TokenResolver = class {
4644
+ constructor(theme) {
4645
+ this.theme = theme;
4646
+ }
4647
+ /**
4648
+ * Resolve a color token to a CSS variable reference wrapped in rgb()
4649
+ *
4650
+ * @param token - Token name (e.g., 'primary-500', 'white', 'text-900')
4651
+ * @returns CSS rgb() function with var reference (e.g., 'rgb(var(--tb-primary-500))')
4652
+ *
4653
+ * Note: CSS variables are stored as RGB channels (e.g., "37 99 235") following Tailwind convention,
4654
+ * so we must wrap them with rgb() to create a valid color value.
4655
+ *
4656
+ * @example
4657
+ * resolver.getColor('primary-500') // => 'rgb(var(--tb-primary-500))'
4658
+ * resolver.getColor('white') // => 'rgb(var(--tb-white))'
4659
+ */
4660
+ getColor(token) {
4661
+ if (!this.tokenExists(token)) console.warn(`[TokenResolver] Color token "${token}" not found in theme palette. Button may render incorrectly.`);
4662
+ return rgbColorValue(token);
4663
+ }
4664
+ /**
4665
+ * Adjust a color token's shade by a given amount
4666
+ *
4667
+ * @param token - Base token (e.g., 'primary-500')
4668
+ * @param amount - Shade adjustment (+100 = darker, -100 = lighter)
4669
+ * @returns Adjusted token name (e.g., 'primary-600')
4670
+ *
4671
+ * @example
4672
+ * resolver.adjustShade('primary-500', 100) // => 'primary-600' (darker)
4673
+ * resolver.adjustShade('primary-500', -100) // => 'primary-400' (lighter)
4674
+ */
4675
+ adjustShade(token, amount) {
4676
+ const parts = token.split("-");
4677
+ if (parts.length < 2) return `${token}-${Math.max(100, Math.min(900, 500 + amount))}`;
4678
+ const base = parts.slice(0, -1).join("-");
4679
+ const shade = parseInt(parts[parts.length - 1] ?? "", 10);
4680
+ if (isNaN(shade)) {
4681
+ console.warn(`[TokenResolver] Cannot adjust shade for non-shade token "${token}". Returning original token.`);
4682
+ return token;
4683
+ }
4684
+ return `${base}-${Math.max(100, Math.min(900, shade + amount))}`;
4685
+ }
4686
+ /**
4687
+ * Check if a token exists in the theme palette
4688
+ *
4689
+ * @param token - Token name to check
4690
+ * @returns True if token exists in theme
4691
+ */
4692
+ tokenExists(token) {
4693
+ if ([
4694
+ "white",
4695
+ "black",
4696
+ "transparent"
4697
+ ].includes(token)) return true;
4698
+ const parts = token.split("-");
4699
+ if (parts.length >= 2) {
4700
+ const lastPart = parts[parts.length - 1] ?? "";
4701
+ const shade = parseInt(lastPart, 10);
4702
+ if (!isNaN(shade) && shade >= 100 && shade <= 900 && shade % 100 === 0) return true;
4703
+ }
4704
+ return true;
4705
+ }
4706
+ };
4707
+ //#endregion
4708
+ //#region ../theme-core/src/palette/utils/onColor.ts
4709
+ const BACKGROUND_ROLE_NAMES = /* @__PURE__ */ new Set([
4710
+ "primary",
4711
+ "secondary",
4712
+ "accent",
4713
+ "success",
4714
+ "warning",
4715
+ "destructive",
4716
+ "info",
4717
+ "background",
4718
+ "surface",
4719
+ "surfaceAlt",
4720
+ "muted",
4721
+ "neutral"
4722
+ ]);
4723
+ function onColorTokenName(backgroundToken) {
4724
+ return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
4725
+ }
4726
+ function isOnColorBackgroundCandidateToken(token) {
4727
+ const role = token.match(/^(.*?)(?:-\d{2,3})?$/)?.[1] ?? token;
4728
+ return BACKGROUND_ROLE_NAMES.has(role);
4729
+ }
4730
+ //#endregion
4482
4731
  //#region ../theme-core/src/palette/colors.ts
4483
4732
  const HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
4484
4733
  const NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
@@ -6152,213 +6401,6 @@ function assertUniqueLayoutProfileKeys(profiles) {
6152
6401
  });
6153
6402
  if (duplicates.length > 0) throw new Error(`Duplicate block layout design profiles: ${duplicates.join(", ")}`);
6154
6403
  }
6155
- const defaultThemeTokens = {
6156
- color: {
6157
- "background/base": "#ffffff",
6158
- "background/elevated": "#f5f5f5",
6159
- "surface/base": "#ffffff",
6160
- "surface/subtle": "#f9f9fb",
6161
- "surface/inverted": "#111111",
6162
- "content/primary": "#111111",
6163
- "content/secondary": "#3f3f46",
6164
- "accent/primary": "#2563eb",
6165
- "accent/secondary": "#1d4ed8",
6166
- "border/base": "#e5e7eb"
6167
- },
6168
- typography: {
6169
- "display/hero": {
6170
- fontSize: "clamp(48px, 8vw, 96px)",
6171
- lineHeight: "1.05",
6172
- fontWeight: "700"
6173
- },
6174
- "display/section": {
6175
- fontSize: "clamp(40px, 6vw, 72px)",
6176
- lineHeight: "1.1",
6177
- fontWeight: "700"
6178
- },
6179
- "heading/large": {
6180
- fontSize: "clamp(32px, 4vw, 48px)",
6181
- lineHeight: "1.2",
6182
- fontWeight: "600"
6183
- },
6184
- "heading/medium": {
6185
- fontSize: "clamp(24px, 3vw, 32px)",
6186
- lineHeight: "1.25",
6187
- fontWeight: "600"
6188
- },
6189
- "heading/small": {
6190
- fontSize: "20px",
6191
- lineHeight: "1.3",
6192
- fontWeight: "600"
6193
- },
6194
- "body/normal": {
6195
- fontSize: "16px",
6196
- lineHeight: "1.6",
6197
- fontWeight: "400"
6198
- },
6199
- "body/small": {
6200
- fontSize: "14px",
6201
- lineHeight: "1.5",
6202
- fontWeight: "400"
6203
- },
6204
- caption: {
6205
- fontSize: "12px",
6206
- lineHeight: "1.4",
6207
- fontWeight: "500"
6208
- }
6209
- },
6210
- spacing: {
6211
- none: "0px",
6212
- "3xs": "4px",
6213
- "2xs": "8px",
6214
- xs: "12px",
6215
- sm: "16px",
6216
- md: "24px",
6217
- lg: "32px",
6218
- xl: "40px",
6219
- "2xl": "56px",
6220
- "3xl": "72px"
6221
- },
6222
- radius: {
6223
- none: "0px",
6224
- xs: "2px",
6225
- sm: "4px",
6226
- md: "8px",
6227
- lg: "12px",
6228
- pill: "999px",
6229
- full: "9999px"
6230
- },
6231
- shadow: {
6232
- none: "none",
6233
- soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
6234
- medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
6235
- strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
6236
- },
6237
- palette: {
6238
- surface: "#ffffff",
6239
- "neutral-50": "#f9fafb",
6240
- "neutral-900": "#111827",
6241
- primary: "#2563eb",
6242
- "primary-50": "#eff6ff",
6243
- "primary-500": "#2563eb",
6244
- "primary-900": "#1d4ed8",
6245
- secondary: "#9333ea",
6246
- "secondary-50": "#f3e8ff",
6247
- "secondary-500": "#9333ea",
6248
- "secondary-900": "#4c1d95",
6249
- accent: "#f97316",
6250
- "accent-50": "#fff7ed",
6251
- "accent-500": "#f97316",
6252
- "accent-900": "#7c2d12"
6253
- }
6254
- };
6255
- /**
6256
- * Project the expanded semantic palette into the token buckets consumed by
6257
- * runtime transforms. Keep this mapping shared by full themes and the
6258
- * tokens-only hosted-booking runtime so the two paths cannot drift.
6259
- */
6260
- function buildThemeTokens(palette) {
6261
- const tokens = cloneThemeTokens(defaultThemeTokens);
6262
- const paletteStrings = {};
6263
- for (const [key, value] of Object.entries(palette)) if (typeof value === "string" && value.trim().length > 0) paletteStrings[key] = value;
6264
- tokens.palette = paletteStrings;
6265
- const resolveColor = (...keys) => {
6266
- for (const key of keys) {
6267
- const value = paletteStrings[key];
6268
- if (value) return value;
6269
- }
6270
- };
6271
- const assignColor = (token, ...keys) => {
6272
- const value = resolveColor(...keys);
6273
- if (value) tokens.color[token] = value;
6274
- };
6275
- assignColor("background/base", "background", "surface", "primary-50");
6276
- assignColor("background/elevated", "surface", "background");
6277
- assignColor("surface/base", "surface", "background");
6278
- assignColor("surface/subtle", "neutral-100", "surface", "background");
6279
- assignColor("surface/inverted", "neutral-900", "text", "primary-900");
6280
- assignColor("content/primary", "text", "body", "neutral-900");
6281
- assignColor("content/secondary", "mutedText", "secondary", "neutral-600");
6282
- assignColor("accent/primary", "primary", "accent");
6283
- assignColor("accent/secondary", "accent", "secondary", "primary-400");
6284
- assignColor("border/base", "border", "neutral-300");
6285
- return tokens;
6286
- }
6287
- function cloneThemeTokens(source) {
6288
- return JSON.parse(JSON.stringify(source));
6289
- }
6290
- //#endregion
6291
- //#region ../theme-core/src/tokens/resolver.ts
6292
- /**
6293
- * Resolves theme tokens to CSS variables
6294
- *
6295
- * This resolver ensures all button styles use theme tokens (not hardcoded colors)
6296
- * so that changing the palette automatically updates all buttons.
6297
- */
6298
- var TokenResolver = class {
6299
- constructor(theme) {
6300
- this.theme = theme;
6301
- }
6302
- /**
6303
- * Resolve a color token to a CSS variable reference wrapped in rgb()
6304
- *
6305
- * @param token - Token name (e.g., 'primary-500', 'white', 'text-900')
6306
- * @returns CSS rgb() function with var reference (e.g., 'rgb(var(--tb-primary-500))')
6307
- *
6308
- * Note: CSS variables are stored as RGB channels (e.g., "37 99 235") following Tailwind convention,
6309
- * so we must wrap them with rgb() to create a valid color value.
6310
- *
6311
- * @example
6312
- * resolver.getColor('primary-500') // => 'rgb(var(--tb-primary-500))'
6313
- * resolver.getColor('white') // => 'rgb(var(--tb-white))'
6314
- */
6315
- getColor(token) {
6316
- if (!this.tokenExists(token)) console.warn(`[TokenResolver] Color token "${token}" not found in theme palette. Button may render incorrectly.`);
6317
- return `rgb(var(--tb-${token}))`;
6318
- }
6319
- /**
6320
- * Adjust a color token's shade by a given amount
6321
- *
6322
- * @param token - Base token (e.g., 'primary-500')
6323
- * @param amount - Shade adjustment (+100 = darker, -100 = lighter)
6324
- * @returns Adjusted token name (e.g., 'primary-600')
6325
- *
6326
- * @example
6327
- * resolver.adjustShade('primary-500', 100) // => 'primary-600' (darker)
6328
- * resolver.adjustShade('primary-500', -100) // => 'primary-400' (lighter)
6329
- */
6330
- adjustShade(token, amount) {
6331
- const parts = token.split("-");
6332
- if (parts.length < 2) return `${token}-${Math.max(100, Math.min(900, 500 + amount))}`;
6333
- const base = parts.slice(0, -1).join("-");
6334
- const shade = parseInt(parts[parts.length - 1] ?? "", 10);
6335
- if (isNaN(shade)) {
6336
- console.warn(`[TokenResolver] Cannot adjust shade for non-shade token "${token}". Returning original token.`);
6337
- return token;
6338
- }
6339
- return `${base}-${Math.max(100, Math.min(900, shade + amount))}`;
6340
- }
6341
- /**
6342
- * Check if a token exists in the theme palette
6343
- *
6344
- * @param token - Token name to check
6345
- * @returns True if token exists in theme
6346
- */
6347
- tokenExists(token) {
6348
- if ([
6349
- "white",
6350
- "black",
6351
- "transparent"
6352
- ].includes(token)) return true;
6353
- const parts = token.split("-");
6354
- if (parts.length >= 2) {
6355
- const lastPart = parts[parts.length - 1] ?? "";
6356
- const shade = parseInt(lastPart, 10);
6357
- if (!isNaN(shade) && shade >= 100 && shade <= 900 && shade % 100 === 0) return true;
6358
- }
6359
- return true;
6360
- }
6361
- };
6362
6404
  //#endregion
6363
6405
  //#region ../theme-core/src/site-styles/backgroundAppearance.ts
6364
6406
  const backgroundAppearanceQuickColorTokenNames = [
@@ -11980,8 +12022,14 @@ const headerInteractionPillPaletteValues = [
11980
12022
  "accent"
11981
12023
  ];
11982
12024
  /**
11983
- * "No pill": the nav link keeps whatever hover treatment its recipe compiled,
11984
- * and the palette step writes nothing at all (#1318 Phase 4c decision 2).
12025
+ * "No pill": a colour change on hover rather than a filled background.
12026
+ *
12027
+ * The palette step writes nothing (#1318 Phase 4c decision 2), but on a
12028
+ * foreground-adaptive style that is not the end of the story: the hover colour
12029
+ * is derived from the resolved opening foreground at render time, paired with
12030
+ * the resting colour, so `quiet` resolves to a definite colour rather than to
12031
+ * whatever brand token the recipe happened to name. See
12032
+ * `applyOpeningForeground`.
11985
12033
  *
11986
12034
  * It exists because "a colour change on hover, no filled background" was not
11987
12035
  * expressible in the vocabulary, and it is what
@@ -27772,6 +27820,28 @@ const bookingRequirementConsentFieldSchema = z$1.object({
27772
27820
  const bookingConsentCarrierSchema = z$1.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
27773
27821
  //#endregion
27774
27822
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
27823
+ const publicEventLoaderQuerySchemaShape = {
27824
+ limit: z$1.string().optional(),
27825
+ from: z$1.string().optional(),
27826
+ to: z$1.string().optional(),
27827
+ afterStartsAt: z$1.string().optional(),
27828
+ afterId: z$1.string().optional(),
27829
+ categoryIds: z$1.string().optional(),
27830
+ venueId: z$1.string().optional(),
27831
+ staffMemberId: z$1.string().optional(),
27832
+ eventSurface: z$1.string().optional(),
27833
+ eventPresets: z$1.string().optional(),
27834
+ scheduleScope: z$1.string().optional(),
27835
+ seriesId: z$1.string().optional(),
27836
+ seriesIds: z$1.string().optional(),
27837
+ runSeriesId: z$1.string().optional(),
27838
+ seriesSlug: z$1.string().optional(),
27839
+ includeOccurrenceId: z$1.string().optional(),
27840
+ readIntent: z$1.string().optional(),
27841
+ detailLevel: z$1.string().optional(),
27842
+ readProfile: z$1.string().optional()
27843
+ };
27844
+ z$1.object(publicEventLoaderQuerySchemaShape);
27775
27845
  const eventPresetSchema = z$1.enum([
27776
27846
  "event",
27777
27847
  "class",
@@ -31220,7 +31290,7 @@ const publicPricingSchema = z$1.object({
31220
31290
  singlePriceAmount: z$1.number().nullable(),
31221
31291
  slidingMinAmount: z$1.number().nullable(),
31222
31292
  slidingMaxAmount: z$1.number().nullable(),
31223
- options: z$1.array(publicPricingOptionSchema)
31293
+ options: z$1.array(publicPricingOptionSchema).readonly()
31224
31294
  });
31225
31295
  const publicAppointmentServiceSchema = z$1.object({
31226
31296
  id: z$1.string().min(1),
@@ -37879,6 +37949,44 @@ function toWholeSeriesRegistrationEvents(events) {
37879
37949
  return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
37880
37950
  }
37881
37951
  //#endregion
37952
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
37953
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
37954
+ const eventRecoveryRequestSchema = z$1.object({
37955
+ ...stringEventQueryShape,
37956
+ limit: z$1.coerce.number().int().positive().optional(),
37957
+ eventSurface: z$1.enum(eventSurfaceScopeValues).optional(),
37958
+ scheduleScope: z$1.enum(eventScheduleScopeValues).optional(),
37959
+ detailLevel: z$1.enum(["full", "listing"]).optional(),
37960
+ stage: z$1.enum(["preview", "published"]).optional()
37961
+ });
37962
+ function resolveEventRegistrationEventSource(input) {
37963
+ if (input.wholeSeriesRunEvents != null) return {
37964
+ kind: "loaded",
37965
+ events: input.wholeSeriesRunEvents
37966
+ };
37967
+ if (input.events != null) return {
37968
+ kind: "loaded",
37969
+ events: input.events
37970
+ };
37971
+ return {
37972
+ kind: "unresolved",
37973
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
37974
+ };
37975
+ }
37976
+ const eventLoaderFailureSchema = z$1.object({
37977
+ endpoint: z$1.literal("listPublicEvents"),
37978
+ params: eventRecoveryRequestSchema.extend({ siteId: z$1.string().optional() })
37979
+ });
37980
+ function parseEventLoaderRecoveryRequest(value) {
37981
+ const parsed = eventLoaderFailureSchema.safeParse(value);
37982
+ if (!parsed.success) return null;
37983
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
37984
+ return {
37985
+ ...params,
37986
+ stage: stage ?? "published"
37987
+ };
37988
+ }
37989
+ //#endregion
37882
37990
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
37883
37991
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
37884
37992
  "Date",
@@ -37896,8 +38004,6 @@ const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistra
37896
38004
  const eventRegistrationHydrationSchemaShape = {
37897
38005
  occurrenceContext: occurrenceContextSchema.optional(),
37898
38006
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
37899
- events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
37900
- wholeSeriesRunEvents: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
37901
38007
  maxTickets: z$1.string().optional(),
37902
38008
  showVenue: z$1.boolean().optional(),
37903
38009
  showCapacity: z$1.boolean().optional(),
@@ -37909,12 +38015,22 @@ const eventRegistrationHydrationSchemaShape = {
37909
38015
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
37910
38016
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
37911
38017
  };
38018
+ const eventRegistrationEventSourceSchema = z$1.discriminatedUnion("kind", [z$1.object({
38019
+ kind: z$1.literal("loaded"),
38020
+ events: z$1.array(eventRegistrationPublicEventSchema)
38021
+ }), z$1.object({
38022
+ kind: z$1.literal("unresolved"),
38023
+ request: eventRecoveryRequestSchema.nullable()
38024
+ })]);
37912
38025
  const eventRegistrationSourceSchema = z$1.object({
37913
38026
  siteId: z$1.string().optional(),
37914
38027
  apiBaseUrl: z$1.string().optional(),
37915
38028
  portalToken: z$1.string().nullable().optional(),
37916
38029
  previewToken: z$1.string().nullable().optional(),
37917
38030
  ...eventRegistrationHydrationSchemaShape,
38031
+ events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
38032
+ wholeSeriesRunEvents: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
38033
+ eventLoaderFailures: z$1.record(z$1.string(), z$1.unknown()).nullable().optional(),
37918
38034
  className: z$1.string().nullable().optional(),
37919
38035
  buttonText: z$1.string().nullable().optional(),
37920
38036
  maxTickets: z$1.string().nullable().optional(),
@@ -37935,7 +38051,10 @@ const eventRegistrationDisplaySchema = z$1.discriminatedUnion("state", [z$1.obje
37935
38051
  titleText: z$1.string(),
37936
38052
  bodyText: z$1.string()
37937
38053
  })]);
37938
- const eventRegistrationHydrationSchema = z$1.object(eventRegistrationHydrationSchemaShape);
38054
+ const eventRegistrationHydrationSchema = z$1.object({
38055
+ ...eventRegistrationHydrationSchemaShape,
38056
+ eventSource: eventRegistrationEventSourceSchema
38057
+ });
37939
38058
  const eventRegistrationRenderSchema = z$1.object({
37940
38059
  display: eventRegistrationDisplaySchema,
37941
38060
  hydration: eventRegistrationHydrationSchema
@@ -37994,16 +38113,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
37994
38113
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
37995
38114
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
37996
38115
  }
37997
- function scopeEventRegistrationSourceEvents(source) {
37998
- return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
38116
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
38117
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
37999
38118
  occurrenceContext: source.occurrenceContext,
38000
38119
  subject: source.subject
38001
38120
  });
38002
38121
  }
38003
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
38004
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
38005
- return [...scopedSourceEvents];
38006
- }
38007
38122
  /**
38008
38123
  * The one run this surface is registering for, when the scoped events describe
38009
38124
  * exactly one. More than one run means the visitor still has to choose.
@@ -38043,14 +38158,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
38043
38158
  render: createZodCodec(eventRegistrationRenderSchema)
38044
38159
  },
38045
38160
  buildRender: (source) => {
38046
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
38047
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
38161
+ const eventSource = resolveEventRegistrationEventSource({
38162
+ events: source.events,
38163
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
38164
+ failures: source.eventLoaderFailures
38165
+ });
38166
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
38048
38167
  return {
38049
38168
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
38050
38169
  hydration: {
38051
38170
  occurrenceContext: source.occurrenceContext ?? null,
38052
38171
  subject: source.subject ?? null,
38053
- events,
38172
+ eventSource: eventSource.kind === "loaded" ? {
38173
+ ...eventSource,
38174
+ events: [...scopedSourceEvents]
38175
+ } : eventSource,
38054
38176
  maxTickets: source.maxTickets ?? void 0,
38055
38177
  showVenue: source.showVenue,
38056
38178
  showCapacity: source.showCapacity,
@@ -38240,6 +38362,7 @@ const eventRegistrationBlockDefinition = {
38240
38362
  } },
38241
38363
  events: { $bind: { from: "data.events" } },
38242
38364
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
38365
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
38243
38366
  sitePasses: { $bind: { from: "data.sitePasses" } },
38244
38367
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
38245
38368
  stage: { $bind: {
@@ -40222,6 +40345,15 @@ const newsletterFieldSchema = z$1.object({
40222
40345
  placeholder: z$1.string().optional()
40223
40346
  });
40224
40347
  const mailingListSignupBlockIdSchema = z$1.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
40348
+ const mailingListContentVersionIdSchema = z$1.string().transform((value, ctx) => {
40349
+ const parsed = parseMailingListContentVersionId(value);
40350
+ if (parsed) return parsed;
40351
+ ctx.addIssue({
40352
+ code: z$1.ZodIssueCode.custom,
40353
+ message: "Invalid mailing-list content version ID"
40354
+ });
40355
+ return z$1.NEVER;
40356
+ });
40225
40357
  const signedMailingListSourceTokenSchema = z$1.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
40226
40358
  const newsletterSourceCommonSchema = z$1.object({
40227
40359
  siteId: z$1.string().optional(),
@@ -40235,7 +40367,8 @@ const newsletterSourceCommonSchema = z$1.object({
40235
40367
  const newsletterSourceSchema = z$1.discriminatedUnion("source", [
40236
40368
  newsletterSourceCommonSchema.extend({
40237
40369
  source: z$1.literal("block"),
40238
- blockId: z$1.string().nullable().optional()
40370
+ blockId: z$1.string().nullable().optional(),
40371
+ contentVersionId: z$1.string().nullable().optional()
40239
40372
  }),
40240
40373
  newsletterSourceCommonSchema.extend({
40241
40374
  source: z$1.literal("signed-footer"),
@@ -40251,6 +40384,7 @@ const newsletterDisplaySchema = z$1.object({
40251
40384
  availability: z$1.enum(["ready", "unavailable"]),
40252
40385
  className: z$1.string().nullable(),
40253
40386
  buttonLabel: z$1.string(),
40387
+ successMessage: z$1.string(),
40254
40388
  buttonVariant: newsletterButtonVariantSchema,
40255
40389
  privacyNote: z$1.string().nullable(),
40256
40390
  fields: z$1.array(newsletterFieldSchema),
@@ -40265,7 +40399,8 @@ const newsletterHydrationSchema = z$1.object({
40265
40399
  tag: z$1.literal("block-source"),
40266
40400
  sourceRef: z$1.object({
40267
40401
  tag: z$1.literal("block_ref"),
40268
- blockId: mailingListSignupBlockIdSchema
40402
+ blockId: mailingListSignupBlockIdSchema,
40403
+ contentVersionId: mailingListContentVersionIdSchema
40269
40404
  }).nullable()
40270
40405
  }),
40271
40406
  z$1.object({
@@ -40304,6 +40439,7 @@ function buildNewsletterDisplay(source) {
40304
40439
  fields: { preset: "emailOnly" },
40305
40440
  includeOptionalPhone: false,
40306
40441
  buttonLabel: "Subscribe",
40442
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
40307
40443
  privacyNote: null
40308
40444
  };
40309
40445
  const targeting = source.targeting ?? { mode: "default" };
@@ -40313,6 +40449,7 @@ function buildNewsletterDisplay(source) {
40313
40449
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
40314
40450
  className: source.className ?? null,
40315
40451
  buttonLabel: form.buttonLabel,
40452
+ successMessage: form.successMessage,
40316
40453
  buttonVariant: source.buttonVariant ?? "primary",
40317
40454
  privacyNote: form.privacyNote,
40318
40455
  fields: getGlobalFormFields(form),
@@ -40343,7 +40480,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
40343
40480
  function projectNewsletterFormHydrationTarget(source) {
40344
40481
  switch (source.source) {
40345
40482
  case "block": {
40346
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
40483
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
40347
40484
  if (sourceRef?.tag === "block_ref") return {
40348
40485
  tag: "block-source",
40349
40486
  sourceRef
@@ -42757,9 +42894,10 @@ function cx(...classes) {
42757
42894
  * Server-safe placeholder for event registration.
42758
42895
  * Provides a static container for island hydration without importing client hooks.
42759
42896
  */
42760
- function EventRegistrationSSR({ blockId, subject, children, ...sourceProps }) {
42897
+ function EventRegistrationSSR({ blockId, subject, loaderFailures, children, ...sourceProps }) {
42761
42898
  const islandProps = buildEventRegistrationInteractiveIslandProps({
42762
42899
  ...sourceProps,
42900
+ eventLoaderFailures: blockId ? loaderFailures?.[blockId] : void 0,
42763
42901
  subject: normalizeEventRegistrationPageSurfaceSubject(subject)
42764
42902
  });
42765
42903
  const display = islandProps.render.display;
@@ -43092,7 +43230,7 @@ function NewsletterFormSSR(props) {
43092
43230
  className: clsx("newsletter-form-ssr", className),
43093
43231
  children: /* @__PURE__ */ jsx("p", {
43094
43232
  role: "status",
43095
- children: "Mailing-list signup is not available right now."
43233
+ children: "We can’t accept signups right now. Please try again later."
43096
43234
  })
43097
43235
  });
43098
43236
  const renderField = (field) => {
@@ -43138,14 +43276,18 @@ function NewsletterFormSSR(props) {
43138
43276
  children: [
43139
43277
  fields.map(renderField),
43140
43278
  islandProps.render.hydration.choicePresentation === "visitor_choice" ? /* @__PURE__ */ jsxs("fieldset", {
43141
- className: "newsletter-topics",
43142
- children: [/* @__PURE__ */ jsx("legend", { children: "What would you like to hear about?" }), display.choices.map((choice) => /* @__PURE__ */ jsxs("label", {
43143
- className: "newsletter-topic-choice",
43279
+ className: "fb-fieldset newsletter-topics",
43280
+ children: [/* @__PURE__ */ jsx("legend", {
43281
+ className: "form-label",
43282
+ children: "What would you like to hear about?"
43283
+ }), display.choices.map((choice) => /* @__PURE__ */ jsxs("label", {
43284
+ className: "fb-inline form-label newsletter-topic-choice",
43144
43285
  children: [/* @__PURE__ */ jsx("input", {
43145
43286
  type: "checkbox",
43146
43287
  name: "mailingListChoice",
43147
- value: choice.id
43148
- }), choice.label]
43288
+ value: choice.id,
43289
+ className: "form-checkbox"
43290
+ }), /* @__PURE__ */ jsx("span", { children: choice.label })]
43149
43291
  }, choice.id))]
43150
43292
  }) : null,
43151
43293
  /* @__PURE__ */ jsx("div", {
@@ -44134,6 +44276,18 @@ function resolveChildren(nodes, context) {
44134
44276
  function isReactNode(value) {
44135
44277
  return value !== null && value !== void 0;
44136
44278
  }
44279
+ function resolveNodeMetadata(nodeType, context) {
44280
+ return {
44281
+ pathBase: context.pathBase,
44282
+ blockId: context.blockId,
44283
+ blockKind: context.blockKind,
44284
+ blockContent: context.blockContent,
44285
+ fragmentRegistry: context.fragmentRegistry,
44286
+ previewAuthoring: context.previewAuthoring,
44287
+ ...nodeType.toLowerCase() === "newsletter-form" ? { contentVersionId: context.contentVersionId } : {},
44288
+ ...nodeType === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {}
44289
+ };
44290
+ }
44137
44291
  /**
44138
44292
  * Resolves a node definition into a React element.
44139
44293
  * Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
@@ -44169,13 +44323,7 @@ function resolveNode(node, context, indexFallback) {
44169
44323
  const elementProps = {
44170
44324
  ...props,
44171
44325
  key: node.key ?? indexFallback,
44172
- pathBase: context.pathBase,
44173
- blockId: context.blockId,
44174
- blockKind: context.blockKind,
44175
- blockContent: context.blockContent,
44176
- ...node.type === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {},
44177
- fragmentRegistry: context.fragmentRegistry,
44178
- previewAuthoring: context.previewAuthoring
44326
+ ...resolveNodeMetadata(node.type, context)
44179
44327
  };
44180
44328
  const element = React.createElement(component, elementProps, ...children);
44181
44329
  if (headingDecorationPlan.kind === "skip") return element;
@@ -48185,7 +48333,7 @@ function pageBlockPosition(index, blockCount) {
48185
48333
  //#endregion
48186
48334
  //#region ../blocks/src/pageRendererContracts.ts
48187
48335
  function buildPageRendererRootRuntime(dataContext) {
48188
- const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false } = dataContext ?? {};
48336
+ const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false, loaderFailures = {} } = dataContext ?? {};
48189
48337
  return {
48190
48338
  siteId,
48191
48339
  pageId,
@@ -48196,7 +48344,8 @@ function buildPageRendererRootRuntime(dataContext) {
48196
48344
  portalToken,
48197
48345
  bookingOfferingPresets,
48198
48346
  mailingList,
48199
- eventRegistrationOverlayEnabled
48347
+ eventRegistrationOverlayEnabled,
48348
+ loaderFailures
48200
48349
  };
48201
48350
  }
48202
48351
  //#endregion
@@ -57466,7 +57615,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path) {
57466
57615
  }
57467
57616
  function makeDefaultBlockComponent(args) {
57468
57617
  const { manifest } = args;
57469
- return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
57618
+ return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, contentVersionId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
57470
57619
  const perf = beginBlockRenderMeasurement();
57471
57620
  if (!theme) throw new Error("Block rendering requires theme tokens; none were provided to makeDefaultBlockComponent");
57472
57621
  if (!registry) throw new Error("Block rendering requires a component registry; none was provided");
@@ -57486,6 +57635,7 @@ function makeDefaultBlockComponent(args) {
57486
57635
  theme: withButtonSystem(theme, themeConfig),
57487
57636
  pathBase,
57488
57637
  blockId,
57638
+ contentVersionId,
57489
57639
  blockKind,
57490
57640
  blockContent: mergedContent,
57491
57641
  blockBindings,
@@ -58279,6 +58429,7 @@ function buildBlockOverrideProps(input) {
58279
58429
  ...blockSubjectProps(dataContext),
58280
58430
  imageResolveContext: input.imageResolveContext,
58281
58431
  blockId: block.id ?? null,
58432
+ contentVersionId: block.contentVersionId ?? null,
58282
58433
  blockKind: block.kind
58283
58434
  };
58284
58435
  }
@@ -58379,6 +58530,7 @@ function toPresentationPage(page) {
58379
58530
  id: block.id,
58380
58531
  kind: block.kind,
58381
58532
  purpose: block.purpose,
58533
+ ...block.contentVersionId ? { contentVersionId: block.contentVersionId } : {},
58382
58534
  ...block.bindings ? { bindings: block.bindings } : {}
58383
58535
  };
58384
58536
  return block.admission.kind === "renderable" ? {
@@ -68632,7 +68784,9 @@ const containerResponsiveThemeCss = `/*
68632
68784
  text-align: left;
68633
68785
  }
68634
68786
 
68635
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__subtitle {
68787
+ :where(.theme-scope)
68788
+ :where([data-block="customer-portal"])
68789
+ .cp-login__subtitle {
68636
68790
  color: var(--cp-muted);
68637
68791
  font-size: 0.9375rem;
68638
68792
  text-align: left;
@@ -68659,7 +68813,9 @@ const containerResponsiveThemeCss = `/*
68659
68813
  text-align: left;
68660
68814
  }
68661
68815
 
68662
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link {
68816
+ :where(.theme-scope)
68817
+ :where([data-block="customer-portal"])
68818
+ .cp-login__reset-link {
68663
68819
  appearance: none;
68664
68820
  background: none;
68665
68821
  border: 0;
@@ -68673,11 +68829,15 @@ const containerResponsiveThemeCss = `/*
68673
68829
  text-underline-offset: 0.15em;
68674
68830
  }
68675
68831
 
68676
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:hover {
68832
+ :where(.theme-scope)
68833
+ :where([data-block="customer-portal"])
68834
+ .cp-login__reset-link:hover {
68677
68835
  color: var(--cp-text);
68678
68836
  }
68679
68837
 
68680
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:focus-visible {
68838
+ :where(.theme-scope)
68839
+ :where([data-block="customer-portal"])
68840
+ .cp-login__reset-link:focus-visible {
68681
68841
  outline: 2px solid currentColor;
68682
68842
  outline-offset: 3px;
68683
68843
  }
@@ -68722,7 +68882,9 @@ const containerResponsiveThemeCss = `/*
68722
68882
  border-bottom: none;
68723
68883
  }
68724
68884
 
68725
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-header__welcome {
68885
+ :where(.theme-scope)
68886
+ :where([data-block="customer-portal"])
68887
+ .cp-header__welcome {
68726
68888
  font-size: 1.125rem;
68727
68889
  font-weight: 500;
68728
68890
  }
@@ -68738,8 +68900,14 @@ const containerResponsiveThemeCss = `/*
68738
68900
  }
68739
68901
 
68740
68902
  @keyframes cp-fade-in {
68741
- from { opacity: 0; transform: translateY(4px); }
68742
- to { opacity: 1; transform: translateY(0); }
68903
+ from {
68904
+ opacity: 0;
68905
+ transform: translateY(4px);
68906
+ }
68907
+ to {
68908
+ opacity: 1;
68909
+ transform: translateY(0);
68910
+ }
68743
68911
  }
68744
68912
 
68745
68913
  /* Empty state */
@@ -68828,6 +68996,77 @@ const containerResponsiveThemeCss = `/*
68828
68996
  margin-top: 1rem;
68829
68997
  }
68830
68998
 
68999
+ /* Event waitlists */
69000
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-list {
69001
+ display: grid;
69002
+ gap: 1rem;
69003
+ }
69004
+
69005
+ :where(.theme-scope)
69006
+ :where([data-block="customer-portal"])
69007
+ .cp-waitlists
69008
+ > .cp-alert {
69009
+ margin-bottom: 1rem;
69010
+ }
69011
+
69012
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-card {
69013
+ transition:
69014
+ border-color 180ms ease,
69015
+ box-shadow 180ms ease;
69016
+ }
69017
+
69018
+ :where(.theme-scope)
69019
+ :where([data-block="customer-portal"])
69020
+ .cp-waitlist-card--focused {
69021
+ border-color: var(--cp-primary);
69022
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cp-primary) 22%, transparent);
69023
+ }
69024
+
69025
+ :where(.theme-scope)
69026
+ :where([data-block="customer-portal"])
69027
+ .cp-waitlist-card__summary,
69028
+ :where(.theme-scope)
69029
+ :where([data-block="customer-portal"])
69030
+ .cp-waitlist-card__position {
69031
+ font-weight: 600;
69032
+ }
69033
+
69034
+ :where(.theme-scope)
69035
+ :where([data-block="customer-portal"])
69036
+ .cp-waitlist-card
69037
+ .cp-card-body
69038
+ p {
69039
+ margin: 0.4rem 0;
69040
+ }
69041
+
69042
+ @container rb-site (max-width: 640px) {
69043
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
69044
+ :where(.theme-scope)
69045
+ :where([data-block="customer-portal"])
69046
+ .cp-waitlist-card
69047
+ .cp-card-header {
69048
+ flex-direction: column-reverse;
69049
+ }
69050
+
69051
+ :where(.theme-scope)
69052
+ :where([data-block="customer-portal"])
69053
+ .cp-waitlist-card
69054
+ .cp-card-actions {
69055
+ align-items: stretch;
69056
+ flex-direction: column;
69057
+ }
69058
+
69059
+ :where(.theme-scope)
69060
+ :where([data-block="customer-portal"])
69061
+ .cp-waitlist-card
69062
+ .cp-card-actions
69063
+ > * {
69064
+ justify-content: center;
69065
+ text-align: center;
69066
+ }
69067
+ }
69068
+ }
69069
+
68831
69070
  /* Badge */
68832
69071
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-badge {
68833
69072
  display: inline-flex;
@@ -68964,11 +69203,18 @@ const containerResponsiveThemeCss = `/*
68964
69203
  background: rgba(var(--tb-border), 0.2);
68965
69204
  }
68966
69205
 
68967
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table tbody tr:last-child td {
69206
+ :where(.theme-scope)
69207
+ :where([data-block="customer-portal"])
69208
+ .cp-table
69209
+ tbody
69210
+ tr:last-child
69211
+ td {
68968
69212
  border-bottom: none;
68969
69213
  }
68970
69214
 
68971
- :where(.theme-scope) :where([data-block="customer-portal"]) :is(.cp-row--past, .cp-row--muted) {
69215
+ :where(.theme-scope)
69216
+ :where([data-block="customer-portal"])
69217
+ :is(.cp-row--past, .cp-row--muted) {
68972
69218
  opacity: 0.65;
68973
69219
  }
68974
69220
 
@@ -68981,7 +69227,9 @@ const containerResponsiveThemeCss = `/*
68981
69227
  line-height: 1.2;
68982
69228
  }
68983
69229
 
68984
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__badges {
69230
+ :where(.theme-scope)
69231
+ :where([data-block="customer-portal"])
69232
+ .cp-row-title__badges {
68985
69233
  margin-left: auto;
68986
69234
  display: flex;
68987
69235
  flex-wrap: wrap;
@@ -68989,7 +69237,9 @@ const containerResponsiveThemeCss = `/*
68989
69237
  gap: 0.375rem;
68990
69238
  }
68991
69239
 
68992
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__text {
69240
+ :where(.theme-scope)
69241
+ :where([data-block="customer-portal"])
69242
+ .cp-row-title__text {
68993
69243
  min-width: 0;
68994
69244
  }
68995
69245
 
@@ -69009,12 +69259,16 @@ const containerResponsiveThemeCss = `/*
69009
69259
  line-height: 1.35;
69010
69260
  }
69011
69261
 
69012
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--success {
69262
+ :where(.theme-scope)
69263
+ :where([data-block="customer-portal"])
69264
+ .cp-row-note--success {
69013
69265
  border-left-color: rgb(var(--tb-success));
69014
69266
  color: rgb(var(--tb-success));
69015
69267
  }
69016
69268
 
69017
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--error {
69269
+ :where(.theme-scope)
69270
+ :where([data-block="customer-portal"])
69271
+ .cp-row-note--error {
69018
69272
  border-left-color: rgb(var(--tb-destructive));
69019
69273
  color: rgb(var(--tb-destructive));
69020
69274
  }
@@ -69033,16 +69287,23 @@ const containerResponsiveThemeCss = `/*
69033
69287
  white-space: nowrap;
69034
69288
  }
69035
69289
 
69036
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-col-actions .btn-sm {
69290
+ :where(.theme-scope)
69291
+ :where([data-block="customer-portal"])
69292
+ .cp-col-actions
69293
+ .btn-sm {
69037
69294
  white-space: nowrap;
69038
69295
  }
69039
69296
 
69040
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link {
69297
+ :where(.theme-scope)
69298
+ :where([data-block="customer-portal"])
69299
+ .cp-row-title__link {
69041
69300
  color: inherit;
69042
69301
  text-decoration: none;
69043
69302
  }
69044
69303
 
69045
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link:hover {
69304
+ :where(.theme-scope)
69305
+ :where([data-block="customer-portal"])
69306
+ .cp-row-title__link:hover {
69046
69307
  text-decoration: underline;
69047
69308
  text-decoration-thickness: 2px;
69048
69309
  text-underline-offset: 2px;
@@ -69064,7 +69325,9 @@ const containerResponsiveThemeCss = `/*
69064
69325
  }
69065
69326
 
69066
69327
  /* Profile actions */
69067
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__actions {
69328
+ :where(.theme-scope)
69329
+ :where([data-block="customer-portal"])
69330
+ .cp-profile__actions {
69068
69331
  display: flex;
69069
69332
  gap: 0.75rem;
69070
69333
  margin-top: 1rem;
@@ -69131,28 +69394,39 @@ const containerResponsiveThemeCss = `/*
69131
69394
  gap: 0.375rem;
69132
69395
  }
69133
69396
 
69134
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__index {
69397
+ :where(.theme-scope)
69398
+ :where([data-block="customer-portal"])
69399
+ .cp-guest-edit-row__index {
69135
69400
  font-size: 0.75rem;
69136
69401
  font-weight: 500;
69137
69402
  color: var(--cp-muted);
69138
69403
  }
69139
69404
 
69140
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields {
69405
+ :where(.theme-scope)
69406
+ :where([data-block="customer-portal"])
69407
+ .cp-guest-edit-row__fields {
69141
69408
  display: flex;
69142
69409
  gap: 0.5rem;
69143
69410
  }
69144
69411
 
69145
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields input {
69412
+ :where(.theme-scope)
69413
+ :where([data-block="customer-portal"])
69414
+ .cp-guest-edit-row__fields
69415
+ input {
69146
69416
  flex: 1;
69147
69417
  min-width: 0;
69148
69418
  }
69149
69419
 
69150
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__error {
69420
+ :where(.theme-scope)
69421
+ :where([data-block="customer-portal"])
69422
+ .cp-guest-edit-row__error {
69151
69423
  font-size: 0.75rem;
69152
69424
  color: var(--cp-error);
69153
69425
  }
69154
69426
 
69155
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guests__actions {
69427
+ :where(.theme-scope)
69428
+ :where([data-block="customer-portal"])
69429
+ .cp-guests__actions {
69156
69430
  display: flex;
69157
69431
  gap: 0.5rem;
69158
69432
  margin-top: 0.5rem;
@@ -69166,13 +69440,18 @@ const containerResponsiveThemeCss = `/*
69166
69440
  }
69167
69441
 
69168
69442
  /* In the actions modal, tiles sit on a surface modal, so use "background" for contrast. */
69169
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-list :where(.rb-tile) {
69443
+ :where(.theme-scope)
69444
+ :where([data-block="customer-portal"])
69445
+ .cp-actions-list
69446
+ :where(.rb-tile) {
69170
69447
  --rb-event-tile-bg: rgb(var(--tb-background));
69171
69448
  --rb-event-tile-border: rgb(var(--tb-border));
69172
69449
  }
69173
69450
 
69174
69451
  /* Actions trigger: icon-only kebab button */
69175
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-trigger.btn-sm {
69452
+ :where(.theme-scope)
69453
+ :where([data-block="customer-portal"])
69454
+ .cp-actions-trigger.btn-sm {
69176
69455
  padding: 0.35rem !important;
69177
69456
  line-height: 1 !important;
69178
69457
  min-width: 32px;
@@ -69196,17 +69475,24 @@ const containerResponsiveThemeCss = `/*
69196
69475
  gap: 0.25rem;
69197
69476
  }
69198
69477
 
69199
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__title {
69478
+ :where(.theme-scope)
69479
+ :where([data-block="customer-portal"])
69480
+ .cp-action-tile__title {
69200
69481
  font-weight: 600;
69201
69482
  font-size: 0.9375rem;
69202
69483
  }
69203
69484
 
69204
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__desc {
69485
+ :where(.theme-scope)
69486
+ :where([data-block="customer-portal"])
69487
+ .cp-action-tile__desc {
69205
69488
  font-size: 0.875rem;
69206
69489
  line-height: 1.35;
69207
69490
  }
69208
69491
 
69209
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile--danger .cp-action-tile__title {
69492
+ :where(.theme-scope)
69493
+ :where([data-block="customer-portal"])
69494
+ .cp-action-tile--danger
69495
+ .cp-action-tile__title {
69210
69496
  color: rgb(var(--tb-destructive));
69211
69497
  }
69212
69498
 
@@ -69228,7 +69514,9 @@ const containerResponsiveThemeCss = `/*
69228
69514
  text-decoration: underline;
69229
69515
  }
69230
69516
 
69231
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-btn--link:hover {
69517
+ :where(.theme-scope)
69518
+ :where([data-block="customer-portal"])
69519
+ .cp-btn--link:hover {
69232
69520
  color: var(--cp-primary-hover);
69233
69521
  }
69234
69522
 
@@ -69267,34 +69555,48 @@ const containerResponsiveThemeCss = `/*
69267
69555
  margin-top: 0.75rem;
69268
69556
  }
69269
69557
 
69270
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__title {
69558
+ :where(.theme-scope)
69559
+ :where([data-block="customer-portal"])
69560
+ .cp-cancel-confirm__title {
69271
69561
  font-weight: 600;
69272
69562
  margin-bottom: 0.5rem;
69273
69563
  }
69274
69564
 
69275
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__message {
69565
+ :where(.theme-scope)
69566
+ :where([data-block="customer-portal"])
69567
+ .cp-cancel-confirm__message {
69276
69568
  margin-bottom: 0.25rem;
69277
69569
  }
69278
69570
 
69279
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__warning {
69571
+ :where(.theme-scope)
69572
+ :where([data-block="customer-portal"])
69573
+ .cp-cancel-confirm__warning {
69280
69574
  margin-bottom: 0.75rem;
69281
69575
  }
69282
69576
 
69283
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__actions {
69577
+ :where(.theme-scope)
69578
+ :where([data-block="customer-portal"])
69579
+ .cp-cancel-confirm__actions {
69284
69580
  display: flex;
69285
69581
  gap: 0.75rem;
69286
69582
  }
69287
69583
 
69288
69584
  /* Membership actions */
69289
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-membership-actions {
69585
+ :where(.theme-scope)
69586
+ :where([data-block="customer-portal"])
69587
+ .cp-membership-actions {
69290
69588
  margin-top: 0.75rem;
69291
69589
  }
69292
69590
 
69293
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-section-actions {
69591
+ :where(.theme-scope)
69592
+ :where([data-block="customer-portal"])
69593
+ .cp-section-actions {
69294
69594
  margin-top: 1rem;
69295
69595
  }
69296
69596
 
69297
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-card-subtitle--spaced {
69597
+ :where(.theme-scope)
69598
+ :where([data-block="customer-portal"])
69599
+ .cp-card-subtitle--spaced {
69298
69600
  margin-top: 0.75rem;
69299
69601
  }
69300
69602
 
@@ -69318,9 +69620,18 @@ const containerResponsiveThemeCss = `/*
69318
69620
  display: none;
69319
69621
  }
69320
69622
 
69321
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-guests,
69322
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-tickets,
69323
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-actions {
69623
+ :where(.theme-scope)
69624
+ :where([data-block="customer-portal"])
69625
+ .cp-table
69626
+ :is(th, td).cp-col-guests,
69627
+ :where(.theme-scope)
69628
+ :where([data-block="customer-portal"])
69629
+ .cp-table
69630
+ :is(th, td).cp-col-tickets,
69631
+ :where(.theme-scope)
69632
+ :where([data-block="customer-portal"])
69633
+ .cp-table
69634
+ :is(th, td).cp-col-actions {
69324
69635
  display: none;
69325
69636
  }
69326
69637
 
@@ -69329,24 +69640,34 @@ const containerResponsiveThemeCss = `/*
69329
69640
  }
69330
69641
 
69331
69642
  /* Make the cell a positioning context for the kebab */
69332
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row > td:first-child {
69643
+ :where(.theme-scope)
69644
+ :where([data-block="customer-portal"])
69645
+ .cp-row
69646
+ > td:first-child {
69333
69647
  position: relative;
69334
69648
  padding-right: 2.5rem;
69335
69649
  }
69336
69650
 
69337
69651
  /* Position kebab in top-right of the cell */
69338
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions {
69652
+ :where(.theme-scope)
69653
+ :where([data-block="customer-portal"])
69654
+ .cp-row-mobile-actions {
69339
69655
  position: absolute;
69340
69656
  top: 0.5rem;
69341
69657
  right: 0.5rem;
69342
69658
  margin-top: 0;
69343
69659
  }
69344
69660
 
69345
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions .btn-sm {
69661
+ :where(.theme-scope)
69662
+ :where([data-block="customer-portal"])
69663
+ .cp-row-mobile-actions
69664
+ .btn-sm {
69346
69665
  width: auto;
69347
69666
  }
69348
69667
 
69349
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__edit {
69668
+ :where(.theme-scope)
69669
+ :where([data-block="customer-portal"])
69670
+ .cp-profile__edit {
69350
69671
  align-self: stretch;
69351
69672
  }
69352
69673
  }
@@ -69794,6 +70115,30 @@ const containerResponsiveThemeCss = `/*
69794
70115
  gap: 0.25rem;
69795
70116
  }
69796
70117
 
70118
+ /* Topic choices (visitor picks what to hear about). Same treatment as the
70119
+ form block's .fb-fieldset / .fb-inline, defined here because the newsletter
70120
+ form also renders inside contact-newsletter and the site footer. */
70121
+ :where(.theme-scope) .newsletter-topics {
70122
+ display: flex;
70123
+ flex-direction: column;
70124
+ gap: 0.5rem;
70125
+ border: none;
70126
+ padding: 0;
70127
+ margin: 0;
70128
+ min-width: 0;
70129
+ }
70130
+
70131
+ :where(.theme-scope) .newsletter-topics > legend {
70132
+ padding: 0;
70133
+ margin-bottom: 0.25rem;
70134
+ }
70135
+
70136
+ :where(.theme-scope) .newsletter-topic-choice {
70137
+ display: flex;
70138
+ align-items: center;
70139
+ gap: 0.5rem;
70140
+ }
70141
+
69797
70142
  /* Required indicator */
69798
70143
  :where(.theme-scope) .newsletter-required {
69799
70144
  color: rgb(var(--tb-primary));
@@ -69843,6 +70188,10 @@ const containerResponsiveThemeCss = `/*
69843
70188
  flex-shrink: 0;
69844
70189
  }
69845
70190
 
70191
+ :where(.theme-scope) .newsletter-inline .newsletter-topics {
70192
+ flex-basis: 100%;
70193
+ }
70194
+
69846
70195
  /* Mobile fallback for inline variant */
69847
70196
  @container rb-site (max-width: 640px) {
69848
70197
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
@@ -72359,7 +72708,7 @@ function PageContent(props) {
72359
72708
  previewToken,
72360
72709
  resolvedData,
72361
72710
  bookingOfferingPresets: bookingOfferingPresets ?? [],
72362
- mailingList,
72711
+ mailingList: mailingList ?? dataContext?.mailingList,
72363
72712
  bookingTimeZone: resolveSdkBookingTimeZone(bookingTimeZone),
72364
72713
  routes: routeMap,
72365
72714
  pagesByIdentifier,
@@ -74206,8 +74555,12 @@ function shouldSkipResolvedLoader(input) {
74206
74555
  * ```
74207
74556
  */
74208
74557
  async function prefetchBlockData$1(page, context, options) {
74558
+ return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
74559
+ }
74560
+ async function prefetchBlockDataWithFailures(page, context, options) {
74209
74561
  const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
74210
74562
  const results = {};
74563
+ const loaderFailures = {};
74211
74564
  const tasks = [];
74212
74565
  for (const block of page.blocks) {
74213
74566
  const blockId = block.id;
@@ -74255,6 +74608,11 @@ async function prefetchBlockData$1(page, context, options) {
74255
74608
  const blockResults = results[blockId] ?? (results[blockId] = {});
74256
74609
  blockResults[key] = data;
74257
74610
  } catch (error) {
74611
+ const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
74612
+ blockFailures[key] = {
74613
+ endpoint,
74614
+ params
74615
+ };
74258
74616
  if (onError) onError(error, {
74259
74617
  block: block.kind,
74260
74618
  loader: key
@@ -74264,7 +74622,10 @@ async function prefetchBlockData$1(page, context, options) {
74264
74622
  }
74265
74623
  }
74266
74624
  if (tasks.length > 0) await Promise.all(tasks);
74267
- return results;
74625
+ return {
74626
+ resolvedData: results,
74627
+ loaderFailures
74628
+ };
74268
74629
  }
74269
74630
  //#endregion
74270
74631
  //#region ../blocks/src/system/data/loaderEndpoints.ts
@@ -74451,9 +74812,11 @@ function convertPageResponseBlock(block) {
74451
74812
  if (typeof block.id !== "string" && block.id !== null) throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
74452
74813
  if (typeof block.kind !== "string") throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
74453
74814
  if (typeof block.purpose !== "string") throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
74815
+ 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}`);
74454
74816
  const admission = readInvalidBlockAdmission(block.admission);
74455
74817
  return {
74456
74818
  id: block.id,
74819
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
74457
74820
  kind: block.kind,
74458
74821
  purpose: block.purpose,
74459
74822
  content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
@@ -74486,6 +74849,7 @@ function projectRenderablePageOutline(page) {
74486
74849
  ...page,
74487
74850
  blocks: page.blocks.flatMap((block) => block.admission.kind === "renderable" ? [{
74488
74851
  id: block.id,
74852
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
74489
74853
  kind: block.kind,
74490
74854
  purpose: block.purpose,
74491
74855
  content: block.admission.content,
@@ -74496,6 +74860,7 @@ function projectRenderablePageOutline(page) {
74496
74860
  function admitSdkRuntimePageBlock(block, customBlocks) {
74497
74861
  const base = {
74498
74862
  id: block.id,
74863
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
74499
74864
  kind: block.kind,
74500
74865
  purpose: block.purpose,
74501
74866
  ...block.bindings ? { bindings: block.bindings } : {}
@@ -76241,6 +76606,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
76241
76606
  auth: "public",
76242
76607
  responseKind: "json"
76243
76608
  },
76609
+ getPublicBookingServiceBySlug: {
76610
+ path: "/public/bookings/services/by-slug/{slug}",
76611
+ method: "GET",
76612
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
76613
+ tags: [TAG_TEMPLATES.publicBookingServices],
76614
+ auth: "public",
76615
+ responseKind: "json"
76616
+ },
76244
76617
  getPublicBookingResourcesReference: {
76245
76618
  path: "/public/bookings/resources/reference",
76246
76619
  method: "GET",
@@ -76793,16 +77166,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
76793
77166
  responseKind: "json"
76794
77167
  }
76795
77168
  });
77169
+ //#endregion
77170
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
77171
+ /**
77172
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
77173
+ *
77174
+ * Every route here is reached before there is an account, so none of them can
77175
+ * be scoped to a site or a user: the token is the whole credential. They are
77176
+ * kept together so that stays obvious.
77177
+ */
77178
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
77179
+ createPublicOnboardingAttempt: {
77180
+ path: "/public/onboarding/attempts",
77181
+ method: "POST",
77182
+ auth: "public",
77183
+ errors: [],
77184
+ responseKind: "json"
77185
+ },
77186
+ createPublicOnboardingLogoUploadUrl: {
77187
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
77188
+ method: "POST",
77189
+ auth: "public",
77190
+ errors: [],
77191
+ responseKind: "json"
77192
+ },
77193
+ uploadPublicOnboardingLogo: {
77194
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
77195
+ method: "POST",
77196
+ auth: "public",
77197
+ errors: [],
77198
+ responseKind: "json"
77199
+ },
77200
+ getPublicOnboardingAttempt: {
77201
+ path: "/public/onboarding/attempts/{attemptToken}",
77202
+ method: "GET",
77203
+ auth: "public",
77204
+ errors: [],
77205
+ responseKind: "json"
77206
+ },
77207
+ getPublicOnboardingAttemptProgress: {
77208
+ path: "/public/onboarding/attempts/{attemptToken}/status",
77209
+ method: "GET",
77210
+ auth: "public",
77211
+ errors: [],
77212
+ responseKind: "json"
77213
+ },
77214
+ updatePublicOnboardingAttempt: {
77215
+ path: "/public/onboarding/attempts/{attemptToken}",
77216
+ method: "PATCH",
77217
+ auth: "public",
77218
+ errors: [],
77219
+ responseKind: "json"
77220
+ },
77221
+ runPublicOnboardingAttempt: {
77222
+ path: "/public/onboarding/attempts/{attemptToken}/run",
77223
+ method: "POST",
77224
+ auth: "public",
77225
+ errors: [],
77226
+ responseKind: "json"
77227
+ },
77228
+ resendPublicOnboardingAttemptConfirmation: {
77229
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
77230
+ method: "POST",
77231
+ auth: "public",
77232
+ errors: [],
77233
+ responseKind: "json"
77234
+ }
77235
+ });
77236
+ //#endregion
77237
+ //#region ../api/src/billingEndpointDefinitions.ts
77238
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
77239
+ adminChangePlan: {
77240
+ path: "/admin/billing/plan",
77241
+ method: "POST",
77242
+ tags: ["admin", "billing"],
77243
+ auth: "admin",
77244
+ responseKind: "json"
77245
+ },
77246
+ changePlan: {
77247
+ path: "/billing/plan/change",
77248
+ method: "POST",
77249
+ tags: ["billing"],
77250
+ auth: "user",
77251
+ responseKind: "json"
77252
+ },
77253
+ createBillingPortalSession: {
77254
+ path: "/billing/portal/session",
77255
+ method: "POST",
77256
+ tags: ["billing"],
77257
+ auth: "user",
77258
+ responseKind: "json"
77259
+ }
77260
+ });
76796
77261
  ({
76797
77262
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
77263
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
76798
77264
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
76799
77265
  ...GIFTING_ENDPOINT_DEFINITIONS,
76800
- ...PUBLIC_READ_ENDPOINT_DEFINITIONS
77266
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
77267
+ ...BILLING_ENDPOINT_DEFINITIONS
76801
77268
  }), 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, {
76802
77269
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
76803
77270
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
76804
77271
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
76805
- }, 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 };
77272
+ }, 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 };
76806
77273
  z$1.object({ refreshToken: z$1.string().min(1).max(4096) }).strict();
76807
77274
  z$1.object({
76808
77275
  accessToken: z$1.string().min(1).max(4096),
@@ -77359,7 +77826,17 @@ const riverbankSiteConfigInputSchema = z$1.object({
77359
77826
  z$1.object({
77360
77827
  config: riverbankSiteConfigInputSchema,
77361
77828
  forceContentTypes: z$1.boolean().optional(),
77362
- mode: z$1.enum(["apply", "preview"]).optional()
77829
+ mode: z$1.enum(["apply", "preview"]).optional(),
77830
+ expectedMailingListProviderScope: z$1.unknown().transform((value, ctx) => {
77831
+ if (value === void 0) return void 0;
77832
+ const parsed = parseMailingListProviderScope(value);
77833
+ if (parsed.ok) return parsed.value;
77834
+ ctx.addIssue({
77835
+ code: "custom",
77836
+ message: "Invalid mailing-list provider scope"
77837
+ });
77838
+ return z$1.NEVER;
77839
+ }).optional()
77363
77840
  }).strict();
77364
77841
  //#endregion
77365
77842
  //#region ../api/src/sdkThemeWire.ts
@@ -81988,6 +82465,7 @@ function readEntrySlotKey(block) {
81988
82465
  function admitEntrySlotBlock(block, customBlocks) {
81989
82466
  const base = {
81990
82467
  id: block.id ?? block.blockId ?? null,
82468
+ contentVersionId: block.contentVersionId,
81991
82469
  kind: block.kind,
81992
82470
  purpose: block.purpose,
81993
82471
  ...isRecord(block.bindings) ? { bindings: block.bindings } : {}