@riverbankcms/sdk 0.138.0 → 0.139.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 (208) hide show
  1. package/README.md +11 -15
  2. package/dist/{PreviewEditorSidebar-BVPur_CU.mjs → PreviewEditorSidebar-BDeenhi3.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DLhWX8oh.mjs → PreviewEditorUI-DSRhgjF5.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BguJY1SW.mjs → PreviewQueryProvider-D2K8GLUG.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Tda6qw4z.mjs → SdkPreviewModeRuntime-CL7wSnYu.mjs} +47 -27
  6. package/dist/{SiteChromeCustomizeContext-BHFgMjde.mjs → SiteChromeCustomizeContext-BhDn-5ir.mjs} +7771 -5863
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +99 -330
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +9 -30
  9. package/dist/_dts/api/src/billing.d.ts +10 -3
  10. package/dist/_dts/api/src/contentRuntime.d.ts +8 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +182 -103
  12. package/dist/_dts/api/src/footerSettings.d.ts +2 -5
  13. package/dist/_dts/api/src/index.d.ts +11 -9
  14. package/dist/_dts/api/src/mailchimpIntegration.d.ts +2 -59
  15. package/dist/_dts/api/src/mailingListIntegration.d.ts +117 -0
  16. package/dist/_dts/api/src/navigation/locations.d.ts +1 -0
  17. package/dist/_dts/api/src/navigation.d.ts +1 -26
  18. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +109 -2
  19. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +185 -0
  20. package/dist/_dts/api/src/privacyPolicy.d.ts +74 -2
  21. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +6 -6
  22. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +1 -1
  23. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +2 -4
  24. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +10 -24
  25. package/dist/_dts/api/src/publicReadEndpointDefinitions.d.ts +73 -0
  26. package/dist/_dts/api/src/schemas/site-api-keys.d.ts +1 -1
  27. package/dist/_dts/api/src/sdkContracts.d.ts +2 -10
  28. package/dist/_dts/api/src/sdkThemeWire.d.ts +2 -2
  29. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +0 -29
  30. package/dist/_dts/api/src/siteOnboarding.d.ts +91 -228
  31. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -9
  32. package/dist/_dts/api/src/siteSettings.d.ts +20 -1
  33. package/dist/_dts/api/src/types.d.ts +5 -4
  34. package/dist/_dts/billing/src/membership/index.d.ts +14 -7
  35. package/dist/_dts/billing/src/plans/display.d.ts +15 -0
  36. package/dist/_dts/billing/src/plans/registry.d.ts +2 -0
  37. package/dist/_dts/billing/src/plans/standing.d.ts +19 -0
  38. package/dist/_dts/billing/src/plans/types.d.ts +1 -7
  39. package/dist/_dts/billing/src/subscriptions/evidence.d.ts +12 -0
  40. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +31 -0
  41. package/dist/_dts/billing/src/subscriptions/store.d.ts +23 -5
  42. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -15
  43. package/dist/_dts/blocks/src/client.d.ts +1 -1
  44. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +32 -16
  45. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +4 -0
  46. package/dist/_dts/blocks/src/pageRenderingMode.d.ts +12 -6
  47. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +11 -0
  48. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +39 -66
  49. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +39 -114
  50. package/dist/_dts/blocks/src/system/blocks/offerings-preview/catalogue.d.ts +18 -0
  51. package/dist/_dts/blocks/src/system/blocks/offerings-preview/fields.d.ts +2 -0
  52. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +4 -0
  53. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +7 -13
  54. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
  56. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +2 -74
  58. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +33 -100
  59. package/dist/_dts/blocks/src/system/runtime/api/types/newsletter.d.ts +5 -15
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -24
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -12
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +3 -0
  63. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +1 -1
  64. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarToday.d.ts +22 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +51 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +2 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +0 -1
  68. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +28 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/bookability.d.ts +9 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +14 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/duration.d.ts +2 -0
  72. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +4 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/location.d.ts +2 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/quickDates.d.ts +16 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.d.ts +9 -1
  76. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +2 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayHeaders.d.ts +4 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  79. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +5 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -1
  81. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventQuickDates.d.ts +15 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +7 -3
  83. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +1 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +2 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +1 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/useHydrationReady.d.ts +6 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +3 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +56 -33
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -3
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +13 -31
  91. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-catalogue.d.ts +14 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-content.d.ts +23 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +4 -2
  94. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +5 -0
  95. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
  96. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +5 -12
  97. package/dist/_dts/commerce/src/purchase/stripeCommissionMetadata.d.ts +34 -0
  98. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +6 -24
  99. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +1 -2
  100. package/dist/_dts/core/src/footer-engagement.d.ts +2 -6
  101. package/dist/_dts/core/src/index.d.ts +9 -1
  102. package/dist/_dts/core/src/mailing-list-identifiers.d.ts +21 -0
  103. package/dist/_dts/core/src/mailing-list-runtime.d.ts +42 -0
  104. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +14 -0
  105. package/dist/_dts/core/src/mailing-list-setup.d.ts +129 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +244 -0
  107. package/dist/_dts/core/src/mailing-list-targeting-parser.d.ts +12 -0
  108. package/dist/_dts/core/src/mailing-list-targeting.d.ts +93 -0
  109. package/dist/_dts/core/src/navigation-locations.d.ts +28 -0
  110. package/dist/_dts/core/src/public-profile.d.ts +9 -1
  111. package/dist/_dts/core/src/public-read-cache-contract.d.ts +45 -0
  112. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +529 -373
  113. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +11 -0
  115. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/index.d.ts +3 -0
  117. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +6 -0
  118. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -0
  119. package/dist/_dts/sdk/src/client/publicAppointmentReadOperations.d.ts +12 -0
  120. package/dist/_dts/sdk/src/client/publicEventReadOperations.d.ts +2 -1
  121. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +11 -4
  122. package/dist/_dts/sdk/src/config/content-types.d.ts +3 -13
  123. package/dist/_dts/sdk/src/config/content-validation.d.ts +5 -8
  124. package/dist/_dts/sdk/src/constants.d.ts +3 -3
  125. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +12 -31
  127. package/dist/_dts/sdk/src/navigation/index.d.ts +11 -29
  128. package/dist/_dts/sdk/src/next/index.d.ts +4 -4
  129. package/dist/_dts/sdk/src/prebuild/types.d.ts +1 -5
  130. package/dist/_dts/sdk/src/public-api/contracts.d.ts +33 -16
  131. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -0
  132. package/dist/_dts/sdk/src/rendering/client.d.ts +3 -20
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -0
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +4 -0
  135. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +1 -0
  136. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  137. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  140. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +41 -0
  141. package/dist/_dts/theme-core/src/index.d.ts +1 -0
  142. package/dist/_dts/theme-core/src/runtime/buildThemeRuntime.d.ts +0 -1
  143. package/dist/_dts/theme-core/src/tokens/tokens.d.ts +7 -0
  144. package/dist/_dts/ui/src/badge.d.ts +1 -1
  145. package/dist/_dts/ui/src/callout.d.ts +1 -1
  146. package/dist/client/{BookingConsentAgreement-DQUik1Mx.mjs → BookingConsentAgreement-CZvTDtsK.mjs} +2 -2
  147. package/dist/client/{DiscountCodeDisclosure-CU67Q4vH.mjs → DiscountCodeDisclosure-D-DsLCMU.mjs} +1 -1
  148. package/dist/client/{EventCombined.client-a02TXUgg.mjs → EventCombined.client-dWqgd5ZO.mjs} +443 -199
  149. package/dist/client/{EventListing.client-99qx7jFl.mjs → EventListing.client-BMRa9IYp.mjs} +2 -2
  150. package/dist/client/{LeafletStaticMap-CWzcq73L.mjs → LeafletStaticMap-D21W9kBZ.mjs} +1 -1
  151. package/dist/client/{accordion-D1nb3-Oj.mjs → accordion-FxF_ta47.mjs} +1 -1
  152. package/dist/client/{bookingForm-BGrmLhaO.mjs → bookingForm-YnwW4TGw.mjs} +5 -5
  153. package/dist/client/bookings.mjs +43 -2
  154. package/dist/client/{carousel-DSmOx3ad.mjs → carousel-vng7fFT5.mjs} +1 -1
  155. package/dist/client/{cart-COWeOIUk.mjs → cart-DEPDsjNk.mjs} +3 -3
  156. package/dist/client/{checkout-CeysaIJK.mjs → checkout-CZRWu9rW.mjs} +3 -3
  157. package/dist/client/client.mjs +3331 -1407
  158. package/dist/client/{context-DBzX85Xc.mjs → context-DvU_WUmd.mjs} +4 -3
  159. package/dist/client/{dates-DCYhZBlW.mjs → dates-wnPMiRl5.mjs} +21 -3
  160. package/dist/client/{eventCalendar-BgsN73Ul.mjs → eventCalendar-BA3Q5L15.mjs} +80 -78
  161. package/dist/client/{eventCombined-DcZQAMQP.mjs → eventCombined-51wgR-1R.mjs} +3 -3
  162. package/dist/client/{eventDetails-BWwGJ54l.mjs → eventDetails-modaetpm.mjs} +4 -4
  163. package/dist/client/{eventListing-DqYqV8vp.mjs → eventListing-D8t2J3Kv.mjs} +3 -3
  164. package/dist/client/{eventRegistration-DQGDgu_e.mjs → eventRegistration-CYqtkCE_.mjs} +49 -9
  165. package/dist/client/{form-ClfpasVT.mjs → form-CBKXN5In.mjs} +2 -2
  166. package/dist/client/{headerSection-BuOMe98N.mjs → headerSection-DylDqNrs.mjs} +2 -2
  167. package/dist/client/hooks.mjs +1259 -555
  168. package/dist/client/{locationMap-CEqu_sfa.mjs → locationMap-CvWrG0vZ.mjs} +2 -2
  169. package/dist/client/{newsletterForm-IbrHjMxy.mjs → newsletterForm-Btwk70zw.mjs} +117 -38
  170. package/dist/client/{pricing-xj7MPZlK.mjs → pricing-Uzw-GQ6Y.mjs} +1 -1
  171. package/dist/client/{productDetail-vxqTt5Xj.mjs → productDetail-JLcUYKnd.mjs} +3 -3
  172. package/dist/client/{productList-OTdZu8sb.mjs → productList-FM0cbUzj.mjs} +3 -3
  173. package/dist/client/{propsDecoder-CY9gGEF7.mjs → propsDecoder-DYzafZb2.mjs} +592 -152
  174. package/dist/client/rendering/client.mjs +2259 -835
  175. package/dist/client/rendering/islands.mjs +17 -17
  176. package/dist/client/rendering.mjs +3308 -1236
  177. package/dist/client/{scrollToBlock--BFV6kl-.mjs → scrollToBlock-CvXszexS.mjs} +1 -1
  178. package/dist/client/{shop-CP4YbDL9.mjs → shop-BIcjvy5a.mjs} +6 -6
  179. package/dist/client/{shop-commerce-APs4XBXE.mjs → shop-commerce-BZQsy7xw.mjs} +5 -5
  180. package/dist/client/{shop-commerce-store-CAVLxLFr.mjs → shop-commerce-store-D5V7XAb5.mjs} +1 -1
  181. package/dist/client/{shopShared-BnSRrwXI.mjs → shopShared-DowkXevB.mjs} +3 -3
  182. package/dist/client/{useEventFilters-1a1by4c8.mjs → useEventFilters-oMoTw_JE.mjs} +56 -9
  183. package/dist/preview-next/before-render.mjs +238 -111
  184. package/dist/preview-next/client/runtime.mjs +4 -4
  185. package/dist/preview-next/keepAlive.mjs +238 -111
  186. package/dist/preview-next/middleware.mjs +238 -111
  187. package/dist/{previewAuthStore-BkEgnYPP.mjs → previewAuthStore-COUyAKaX.mjs} +238 -111
  188. package/dist/{sdk-runtime-DwGfsT0S.mjs → sdk-runtime-D4k2LSGF.mjs} +2 -2
  189. package/dist/{separator-BeqDLneQ.mjs → separator-UGtpag4Z.mjs} +1 -1
  190. package/dist/server/components.mjs +2697 -1023
  191. package/dist/server/config-validation.mjs +2424 -1720
  192. package/dist/server/config.mjs +2429 -1724
  193. package/dist/server/data.mjs +1164 -454
  194. package/dist/server/index.mjs +364 -280
  195. package/dist/server/navigation.mjs +16 -47
  196. package/dist/server/next.mjs +2915 -1380
  197. package/dist/server/page-converter.mjs +969 -522
  198. package/dist/server/prebuild.mjs +2 -3
  199. package/dist/server/rendering/server.mjs +2704 -1030
  200. package/dist/server/rendering.mjs +2742 -1063
  201. package/dist/server/routing.mjs +1386 -595
  202. package/dist/server/server.mjs +2878 -2324
  203. package/dist/server/theme-bridge.mjs +292 -24
  204. package/dist/styles/index.css +289 -25
  205. package/package.json +1 -1
  206. package/dist/_dts/api/src/navigation/identity.d.ts +0 -59
  207. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +0 -291
  208. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +0 -38
@@ -164,6 +164,7 @@ var init_block_kinds = __esmMin((() => {
164
164
  "block.form",
165
165
  "block.contact-newsletter",
166
166
  "block.appointment-booking",
167
+ "block.appointment-services",
167
168
  "block.weekly-slot-availability",
168
169
  "block.event-registration",
169
170
  "block.event-details",
@@ -560,13 +561,13 @@ function parseUuidBrand(value, unsafeConstructor) {
560
561
  if (typeof value !== "string") return err$1({ kind: "not_string" });
561
562
  const normalized = value.trim().toLowerCase();
562
563
  if (normalized.length === 0) return err$1({ kind: "empty_string" });
563
- if (!UUID_PATTERN.test(normalized)) return err$1({ kind: "invalid_uuid" });
564
+ if (!UUID_PATTERN$1.test(normalized)) return err$1({ kind: "invalid_uuid" });
564
565
  return ok$1(unsafeConstructor(normalized));
565
566
  }
566
- var UUID_PATTERN, unsafeAsSiteId, unsafeAsApiKeyId, unsafeAsEventOfferingId, unsafeAsEventSeriesId, unsafeAsStorageBucketName, unsafeAsPositiveByteCount$1, unsafeAsPositiveSeconds, unsafeAsUserId, parseSiteId, parseApiKeyId, parseEventOfferingId, parseUserId, parseEventSeriesId;
567
+ var UUID_PATTERN$1, unsafeAsSiteId, unsafeAsApiKeyId, unsafeAsEventOfferingId, unsafeAsEventSeriesId, unsafeAsStorageBucketName, unsafeAsPositiveByteCount$1, unsafeAsPositiveSeconds, unsafeAsUserId, parseSiteId, parseApiKeyId, parseEventOfferingId, parseUserId, parseEventSeriesId;
567
568
  var init_branded = __esmMin((() => {
568
569
  init_result();
569
- UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
570
+ UUID_PATTERN$1 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
570
571
  unsafeAsSiteId = (id) => id;
571
572
  unsafeAsApiKeyId = (id) => id;
572
573
  unsafeAsEventOfferingId = (id) => id;
@@ -586,7 +587,7 @@ var init_branded = __esmMin((() => {
586
587
  var init_date_math = __esmMin((() => {}));
587
588
  //#endregion
588
589
  //#region ../core/src/duration.ts
589
- var init_duration = __esmMin((() => {}));
590
+ var init_duration$1 = __esmMin((() => {}));
590
591
  //#endregion
591
592
  //#region ../core/src/demo-capability-policy.ts
592
593
  var init_demo_capability_policy = __esmMin((() => {}));
@@ -850,7 +851,7 @@ function parseEventPageSurfaceDestinationMode(value) {
850
851
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
851
852
  }
852
853
  function parseEventPageSurfaceSubject(value) {
853
- if (!isRecord$13(value)) return err$1({ kind: "notObject" });
854
+ if (!isRecord$15(value)) return err$1({ kind: "notObject" });
854
855
  switch (value.kind) {
855
856
  case "eventSeries": {
856
857
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -905,7 +906,7 @@ function parseEventSeriesIdList(values) {
905
906
  }
906
907
  return ok$1(parsed);
907
908
  }
908
- function isRecord$13(value) {
909
+ function isRecord$15(value) {
909
910
  return typeof value === "object" && value !== null && !Array.isArray(value);
910
911
  }
911
912
  var init_event_page_surface_subject = __esmMin((() => {
@@ -1117,7 +1118,7 @@ function toLocationCoordinates(value) {
1117
1118
  lng: value.lng
1118
1119
  };
1119
1120
  }
1120
- var init_location = __esmMin((() => {}));
1121
+ var init_location$1 = __esmMin((() => {}));
1121
1122
  //#endregion
1122
1123
  //#region ../core/src/business-address.ts
1123
1124
  var init_business_address = __esmMin((() => {}));
@@ -1152,14 +1153,11 @@ var init_public_profile = __esmMin((() => {}));
1152
1153
  //#region ../core/src/rich-text.ts
1153
1154
  var init_rich_text = __esmMin((() => {}));
1154
1155
  //#endregion
1155
- //#region ../core/src/newsletter-signup-destination.ts
1156
- function parseNewsletterSignupDestinationProvider(value) {
1157
- return value === "riverbank" || value === "mailchimp" ? value : null;
1158
- }
1159
- var init_newsletter_signup_destination$1 = __esmMin((() => {}));
1156
+ //#region ../core/src/footer-composition.ts
1157
+ var init_footer_composition = __esmMin((() => {}));
1160
1158
  //#endregion
1161
- //#region ../core/src/footer-engagement.ts
1162
- var init_footer_engagement = __esmMin((() => {}));
1159
+ //#region ../core/src/footer-navigation-layout.ts
1160
+ var init_footer_navigation_layout = __esmMin((() => {}));
1163
1161
  var init_footer_arrangement = __esmMin((() => {
1164
1162
  new Map([
1165
1163
  "brand",
@@ -1175,16 +1173,406 @@ var init_footer_arrangement = __esmMin((() => {
1175
1173
  ].map((kind, index) => [kind, index]));
1176
1174
  }));
1177
1175
  //#endregion
1178
- //#region ../core/src/footer-composition.ts
1179
- var init_footer_composition = __esmMin((() => {
1180
- init_footer_arrangement();
1176
+ //#region ../core/src/footer-composition-types.ts
1177
+ var init_footer_composition_types = __esmMin((() => {}));
1178
+ //#endregion
1179
+ //#region ../core/src/footer-engagement.ts
1180
+ var init_footer_engagement = __esmMin((() => {}));
1181
+ //#endregion
1182
+ //#region ../core/src/mailing-list-identifiers.ts
1183
+ function parseTrimmedMatchingString(value, pattern) {
1184
+ if (typeof value !== "string") return null;
1185
+ const trimmed = value.trim();
1186
+ return pattern.test(trimmed) ? trimmed : null;
1187
+ }
1188
+ function parsePositiveInteger(value) {
1189
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
1190
+ }
1191
+ function parseNewsletterListId(value) {
1192
+ return parseTrimmedMatchingString(value, UUID_PATTERN);
1193
+ }
1194
+ function parseMailchimpAudienceId(value) {
1195
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1196
+ }
1197
+ function parseMailchimpInterestId(value) {
1198
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1199
+ }
1200
+ function parseBrevoListId(value) {
1201
+ return parsePositiveInteger(value);
1202
+ }
1203
+ var UUID_PATTERN, OPAQUE_ID_PATTERN;
1204
+ var init_mailing_list_identifiers = __esmMin((() => {
1205
+ UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
1206
+ OPAQUE_ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/u;
1181
1207
  }));
1182
1208
  //#endregion
1183
- //#region ../core/src/footer-navigation-layout.ts
1184
- var init_footer_navigation_layout = __esmMin((() => {}));
1209
+ //#region ../core/src/mailing-list-setup.ts
1210
+ var init_mailing_list_setup = __esmMin((() => {}));
1185
1211
  //#endregion
1186
- //#region ../core/src/footer-composition-types.ts
1187
- var init_footer_composition_types = __esmMin((() => {}));
1212
+ //#region ../core/src/mailing-list-setup-parser.ts
1213
+ function parseMailingListGlobalForm(value) {
1214
+ if (!isRecord$14(value)) return formError("shape");
1215
+ const fields = parseGlobalFields(value.fields);
1216
+ if (fields === null) return formError("fields");
1217
+ if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
1218
+ const buttonLabel = parseRequiredString(value.buttonLabel);
1219
+ if (buttonLabel === null) return formError("buttonLabel");
1220
+ const privacyNote = parseOptionalString(value.privacyNote);
1221
+ if (privacyNote === void 0) return formError("privacyNote");
1222
+ return ok$1({
1223
+ fields,
1224
+ includeOptionalPhone: value.includeOptionalPhone,
1225
+ buttonLabel,
1226
+ privacyNote
1227
+ });
1228
+ }
1229
+ function parseGlobalFields(value) {
1230
+ if (!isRecord$14(value) || typeof value.preset !== "string") return null;
1231
+ switch (value.preset) {
1232
+ case "emailOnly": return { preset: "emailOnly" };
1233
+ case "emailName": return isRequirement(value.name) ? {
1234
+ preset: "emailName",
1235
+ name: value.name
1236
+ } : null;
1237
+ case "emailFirstLast": return isRequirement(value.firstName) && isRequirement(value.lastName) ? {
1238
+ preset: "emailFirstLast",
1239
+ firstName: value.firstName,
1240
+ lastName: value.lastName
1241
+ } : null;
1242
+ case "emailNameCompany": return isRequirement(value.name) && isRequirement(value.company) ? {
1243
+ preset: "emailNameCompany",
1244
+ name: value.name,
1245
+ company: value.company
1246
+ } : null;
1247
+ default: return null;
1248
+ }
1249
+ }
1250
+ function parseMailingListSetupRevision(value) {
1251
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
1252
+ }
1253
+ function parseRequiredString(value) {
1254
+ if (typeof value !== "string") return null;
1255
+ const trimmed = value.trim();
1256
+ return trimmed.length > 0 ? trimmed : null;
1257
+ }
1258
+ function parseOptionalString(value) {
1259
+ if (value === null || value === void 0) return null;
1260
+ if (typeof value !== "string") return void 0;
1261
+ const trimmed = value.trim();
1262
+ return trimmed.length > 0 ? trimmed : null;
1263
+ }
1264
+ function isRequirement(value) {
1265
+ return value === "required" || value === "optional";
1266
+ }
1267
+ function isRecord$14(value) {
1268
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1269
+ }
1270
+ function formError(field) {
1271
+ return err$1({
1272
+ tag: "invalid_mailing_list_global_form",
1273
+ field
1274
+ });
1275
+ }
1276
+ var init_mailing_list_setup_parser = __esmMin((() => {
1277
+ init_result();
1278
+ }));
1279
+ //#endregion
1280
+ //#region ../core/src/mailing-list-targeting.ts
1281
+ function planMailingListChoicePresentation(targeting) {
1282
+ if (targeting.mode === "default" || targeting.selection.tag === "fixed") return { tag: "hidden" };
1283
+ switch (targeting.provider) {
1284
+ case "native": return targeting.selection.offeredTopicIds.length === 1 ? {
1285
+ tag: "automatic",
1286
+ selection: {
1287
+ provider: "native",
1288
+ topicIds: targeting.selection.offeredTopicIds
1289
+ }
1290
+ } : {
1291
+ tag: "visitor_choice",
1292
+ provider: "native",
1293
+ optionCount: targeting.selection.offeredTopicIds.length
1294
+ };
1295
+ case "brevo": return targeting.selection.offeredListIds.length === 1 ? {
1296
+ tag: "automatic",
1297
+ selection: {
1298
+ provider: "brevo",
1299
+ listIds: targeting.selection.offeredListIds
1300
+ }
1301
+ } : {
1302
+ tag: "visitor_choice",
1303
+ provider: "brevo",
1304
+ optionCount: targeting.selection.offeredListIds.length
1305
+ };
1306
+ case "mailchimp": return targeting.selection.offeredInterestIds.length === 1 ? {
1307
+ tag: "automatic",
1308
+ selection: {
1309
+ provider: "mailchimp",
1310
+ interestIds: targeting.selection.offeredInterestIds
1311
+ }
1312
+ } : {
1313
+ tag: "visitor_choice",
1314
+ provider: "mailchimp",
1315
+ optionCount: targeting.selection.offeredInterestIds.length
1316
+ };
1317
+ }
1318
+ }
1319
+ var init_mailing_list_targeting = __esmMin((() => {}));
1320
+ //#endregion
1321
+ //#region ../core/src/mailing-list-runtime.ts
1322
+ function parseMailingListRuntimeContext(value) {
1323
+ if (!isRecord$13(value)) return invalidRuntimeContext();
1324
+ if (value.tag === "not_configured") return ok$1({ tag: "not_configured" });
1325
+ if (value.tag !== "configured") return invalidRuntimeContext();
1326
+ const revision = parseMailingListSetupRevision(value.revision);
1327
+ const form = parseMailingListGlobalForm(value.form);
1328
+ const provider = parseRuntimeProvider(value.provider);
1329
+ if (revision === null || !form.ok || provider === null) return invalidRuntimeContext();
1330
+ return ok$1({
1331
+ tag: "configured",
1332
+ revision,
1333
+ form: form.value,
1334
+ provider
1335
+ });
1336
+ }
1337
+ function parseRuntimeProvider(value) {
1338
+ if (!isRecord$13(value)) return null;
1339
+ switch (value.provider) {
1340
+ case "native": return parseNativeRuntimeProvider(value);
1341
+ case "brevo": return parseBrevoRuntimeProvider(value);
1342
+ case "mailchimp": return parseMailchimpRuntimeProvider(value);
1343
+ default: return null;
1344
+ }
1345
+ }
1346
+ function parseNativeRuntimeProvider(value) {
1347
+ const defaultTopicId = parseNewsletterListId(value.defaultTopicId);
1348
+ const topics = parseNamedItems(value.topics, parseNewsletterListId);
1349
+ return defaultTopicId !== null && topics !== null ? {
1350
+ provider: "native",
1351
+ defaultTopicId,
1352
+ topics
1353
+ } : null;
1354
+ }
1355
+ function parseBrevoRuntimeProvider(value) {
1356
+ const defaultListId = parseBrevoListId(value.defaultListId);
1357
+ const lists = parseNamedItems(value.lists, parseBrevoListId);
1358
+ return defaultListId !== null && lists !== null ? {
1359
+ provider: "brevo",
1360
+ defaultListId,
1361
+ lists
1362
+ } : null;
1363
+ }
1364
+ function parseMailchimpRuntimeProvider(value) {
1365
+ if (!Array.isArray(value.audiences)) return null;
1366
+ const defaultAudienceId = parseMailchimpAudienceId(value.defaultAudienceId);
1367
+ if (defaultAudienceId === null) return null;
1368
+ const audiences = [];
1369
+ for (const audience of value.audiences) {
1370
+ if (!isRecord$13(audience)) return null;
1371
+ const id = parseMailchimpAudienceId(audience.id);
1372
+ const name = parseName(audience.name);
1373
+ if (id === null || name === null || !Array.isArray(audience.interests)) return null;
1374
+ const interests = parseMailchimpInterests(audience.interests);
1375
+ if (interests === null) return null;
1376
+ audiences.push({
1377
+ id,
1378
+ name,
1379
+ interests
1380
+ });
1381
+ }
1382
+ return {
1383
+ provider: "mailchimp",
1384
+ defaultAudienceId,
1385
+ audiences
1386
+ };
1387
+ }
1388
+ function parseMailchimpInterests(value) {
1389
+ const interests = [];
1390
+ for (const interest of value) {
1391
+ if (!isRecord$13(interest)) return null;
1392
+ const id = parseMailchimpInterestId(interest.id);
1393
+ const name = parseName(interest.name);
1394
+ const categoryName = parseName(interest.categoryName);
1395
+ if (id === null || name === null || categoryName === null) return null;
1396
+ interests.push({
1397
+ id,
1398
+ name,
1399
+ categoryName
1400
+ });
1401
+ }
1402
+ return interests;
1403
+ }
1404
+ function parseNamedItems(value, parseId) {
1405
+ if (!Array.isArray(value)) return null;
1406
+ const items = [];
1407
+ for (const item of value) {
1408
+ if (!isRecord$13(item)) return null;
1409
+ const id = parseId(item.id);
1410
+ const name = parseName(item.name);
1411
+ if (id === null || name === null) return null;
1412
+ items.push({
1413
+ id,
1414
+ name
1415
+ });
1416
+ }
1417
+ return items;
1418
+ }
1419
+ function parseName(value) {
1420
+ if (typeof value !== "string") return null;
1421
+ const name = value.trim();
1422
+ return name.length > 0 ? name : null;
1423
+ }
1424
+ function isRecord$13(value) {
1425
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1426
+ }
1427
+ function invalidRuntimeContext() {
1428
+ return err$1({ tag: "invalid_mailing_list_runtime_context" });
1429
+ }
1430
+ var init_mailing_list_runtime = __esmMin((() => {
1431
+ init_mailing_list_identifiers();
1432
+ init_mailing_list_setup_parser();
1433
+ init_result();
1434
+ }));
1435
+ //#endregion
1436
+ //#region ../core/src/mailing-list-targeting-parser.ts
1437
+ function parseMailingListPlacementTargeting(value) {
1438
+ if (!isRecord$12(value)) return targetingError("shape");
1439
+ if (value.mode === "default") return ok$1({ mode: "default" });
1440
+ if (value.mode !== "custom") return targetingError("mode");
1441
+ if (!isRecord$12(value.selection)) return targetingError("selection");
1442
+ switch (value.provider) {
1443
+ case "native": return parseNativeTargeting(value.selection);
1444
+ case "brevo": return parseBrevoTargeting(value.selection);
1445
+ case "mailchimp": return parseMailchimpTargeting(value, value.selection);
1446
+ default: return targetingError("provider");
1447
+ }
1448
+ }
1449
+ function parseNativeTargeting(selection) {
1450
+ if (selection.tag === "fixed") {
1451
+ const topicIds = parseNonEmptyUniqueIds(selection.topicIds, parseNewsletterListId);
1452
+ return topicIds.ok ? ok$1({
1453
+ mode: "custom",
1454
+ provider: "native",
1455
+ selection: {
1456
+ tag: "fixed",
1457
+ topicIds: topicIds.value
1458
+ }
1459
+ }) : topicIds;
1460
+ }
1461
+ if (selection.tag === "visitor_choice") {
1462
+ const offeredTopicIds = parseNonEmptyUniqueIds(selection.offeredTopicIds, parseNewsletterListId);
1463
+ return offeredTopicIds.ok ? ok$1({
1464
+ mode: "custom",
1465
+ provider: "native",
1466
+ selection: {
1467
+ tag: "visitor_choice",
1468
+ offeredTopicIds: offeredTopicIds.value
1469
+ }
1470
+ }) : offeredTopicIds;
1471
+ }
1472
+ return targetingError("selection");
1473
+ }
1474
+ function parseBrevoTargeting(selection) {
1475
+ if (selection.tag === "fixed") {
1476
+ const listIds = parseNonEmptyUniqueIds(selection.listIds, parseBrevoListId);
1477
+ return listIds.ok ? ok$1({
1478
+ mode: "custom",
1479
+ provider: "brevo",
1480
+ selection: {
1481
+ tag: "fixed",
1482
+ listIds: listIds.value
1483
+ }
1484
+ }) : listIds;
1485
+ }
1486
+ if (selection.tag === "visitor_choice") {
1487
+ const offeredListIds = parseNonEmptyUniqueIds(selection.offeredListIds, parseBrevoListId);
1488
+ return offeredListIds.ok ? ok$1({
1489
+ mode: "custom",
1490
+ provider: "brevo",
1491
+ selection: {
1492
+ tag: "visitor_choice",
1493
+ offeredListIds: offeredListIds.value
1494
+ }
1495
+ }) : offeredListIds;
1496
+ }
1497
+ return targetingError("selection");
1498
+ }
1499
+ function parseMailchimpTargeting(value, selection) {
1500
+ const audienceId = parseMailchimpAudienceId(value.audienceId);
1501
+ if (audienceId === null) return targetingError("audienceId");
1502
+ if (selection.tag === "fixed") {
1503
+ const interestIds = parseUniqueIds(selection.interestIds, parseMailchimpInterestId);
1504
+ return interestIds.ok ? ok$1({
1505
+ mode: "custom",
1506
+ provider: "mailchimp",
1507
+ audienceId,
1508
+ selection: {
1509
+ tag: "fixed",
1510
+ interestIds: interestIds.value
1511
+ }
1512
+ }) : interestIds;
1513
+ }
1514
+ if (selection.tag === "visitor_choice") {
1515
+ const offeredInterestIds = parseNonEmptyUniqueIds(selection.offeredInterestIds, parseMailchimpInterestId);
1516
+ return offeredInterestIds.ok ? ok$1({
1517
+ mode: "custom",
1518
+ provider: "mailchimp",
1519
+ audienceId,
1520
+ selection: {
1521
+ tag: "visitor_choice",
1522
+ offeredInterestIds: offeredInterestIds.value
1523
+ }
1524
+ }) : offeredInterestIds;
1525
+ }
1526
+ return targetingError("selection");
1527
+ }
1528
+ function parseNonEmptyUniqueIds(value, parseId) {
1529
+ const parsed = parseUniqueIds(value, parseId);
1530
+ if (!parsed.ok) return parsed;
1531
+ const [first, ...rest] = parsed.value;
1532
+ return first === void 0 ? targetingError("targets") : ok$1([first, ...rest]);
1533
+ }
1534
+ function parseUniqueIds(value, parseId) {
1535
+ if (!Array.isArray(value)) return targetingError("targets");
1536
+ const parsed = [];
1537
+ for (const item of value) {
1538
+ const id = parseId(item);
1539
+ if (id === null) return targetingError("targets");
1540
+ if (parsed.includes(id)) return targetingError("duplicate_target");
1541
+ parsed.push(id);
1542
+ }
1543
+ return ok$1(parsed);
1544
+ }
1545
+ function isRecord$12(value) {
1546
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1547
+ }
1548
+ function targetingError(field) {
1549
+ return err$1({
1550
+ tag: "invalid_mailing_list_targeting",
1551
+ field
1552
+ });
1553
+ }
1554
+ var init_mailing_list_targeting_parser = __esmMin((() => {
1555
+ init_mailing_list_identifiers();
1556
+ init_result();
1557
+ }));
1558
+ //#endregion
1559
+ //#region ../core/src/mailing-list-submission.ts
1560
+ function parseMailingListBlockId(value) {
1561
+ const parsed = typeof value === "string" ? value.trim() : "";
1562
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(parsed) ? parsed : null;
1563
+ }
1564
+ function parseMailingListSignedSourceToken(value) {
1565
+ const parsed = typeof value === "string" ? value.trim() : "";
1566
+ return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
1567
+ }
1568
+ function buildMailingListSignupBlockSourceRef(blockId) {
1569
+ const parsed = parseMailingListBlockId(blockId);
1570
+ return parsed !== null ? {
1571
+ tag: "block_ref",
1572
+ blockId: parsed
1573
+ } : null;
1574
+ }
1575
+ var init_mailing_list_submission = __esmMin((() => {}));
1188
1576
  //#endregion
1189
1577
  //#region ../core/src/number-input.ts
1190
1578
  var init_number_input = __esmMin((() => {}));
@@ -1289,6 +1677,60 @@ function orderedLiveRunSessions(sessions) {
1289
1677
  }
1290
1678
  var init_whole_series_run_schedule = __esmMin((() => {}));
1291
1679
  //#endregion
1680
+ //#region ../core/src/public-read-cache-contract.ts
1681
+ function availability(transport) {
1682
+ return {
1683
+ kind: "live",
1684
+ reason: "booking_correctness",
1685
+ freshness: "availability",
1686
+ transport
1687
+ };
1688
+ }
1689
+ function content(tags, transport = "direct") {
1690
+ return {
1691
+ kind: "tagged",
1692
+ tags,
1693
+ freshness: "content",
1694
+ transport
1695
+ };
1696
+ }
1697
+ function getPublicReadCachePolicy(endpoint) {
1698
+ return PUBLIC_READ_CACHE_POLICIES[endpoint];
1699
+ }
1700
+ function publicReadFreshnessSeconds(endpoint) {
1701
+ return getPublicReadCachePolicy(endpoint).freshness === "availability" ? 60 : PUBLIC_CONTENT_FRESHNESS_SECONDS;
1702
+ }
1703
+ var PUBLIC_CONTENT_FRESHNESS_SECONDS, PUBLIC_READ_CACHE_POLICIES;
1704
+ var init_public_read_cache_contract = __esmMin((() => {
1705
+ PUBLIC_CONTENT_FRESHNESS_SECONDS = 3600;
1706
+ PUBLIC_READ_CACHE_POLICIES = {
1707
+ listPublishedEntries: content(["published_content"]),
1708
+ getPublishedEntryPreview: content(["published_content"]),
1709
+ listPublicEvents: availability("direct"),
1710
+ listPublicEventCalendarWindow: availability("direct"),
1711
+ listPublicRecurringSchedule: availability("batch_only"),
1712
+ getPublicEventDetails: availability("batch_only"),
1713
+ resolveEventSubroute: availability("direct"),
1714
+ listPublicRouteCandidates: content(["published_content"], "batch_only"),
1715
+ listPublicTeamMembers: content(["public_team_members"]),
1716
+ listPublicProducts: availability("direct"),
1717
+ listPublicPasses: availability("direct"),
1718
+ listPublicMemberships: availability("direct"),
1719
+ getPublicFormById: content(["site_forms"]),
1720
+ getPublicBookingServices: availability("direct"),
1721
+ getPublicBookingService: availability("direct"),
1722
+ getPublicBookingResourcesReference: availability("direct"),
1723
+ getPublicBookingAvailableDates: availability("direct"),
1724
+ getPublicBookingAvailableSlots: availability("direct"),
1725
+ getPublicWeeklySlotAvailability: availability("direct"),
1726
+ listPublicForms: content(["site_forms"]),
1727
+ checkRedirect: content([]),
1728
+ getPublicRoutableContent: content(["published_content"]),
1729
+ getPublicSitemapRoutes: content(["published_content"])
1730
+ };
1731
+ new Set(Object.keys(PUBLIC_READ_CACHE_POLICIES));
1732
+ }));
1733
+ //#endregion
1292
1734
  //#region ../core/src/event-series-behaviour.ts
1293
1735
  var WHOLE_SERIES_EVENT_PRESET_VALUES, SURFACE_EVENT_PRESET_VALUES;
1294
1736
  var init_event_series_behaviour = __esmMin((() => {
@@ -1603,11 +2045,14 @@ var init_booking_verticals = __esmMin((() => {
1603
2045
  init_booking_vertical_config();
1604
2046
  }));
1605
2047
  //#endregion
2048
+ //#region ../core/src/navigation-locations.ts
2049
+ var init_navigation_locations = __esmMin((() => {}));
2050
+ //#endregion
1606
2051
  //#region ../core/src/index.ts
1607
2052
  var init_src$4 = __esmMin((() => {
1608
2053
  init_branded();
1609
2054
  init_date_math();
1610
- init_duration();
2055
+ init_duration$1();
1611
2056
  init_demo_capability_policy();
1612
2057
  init_demo_claim_access();
1613
2058
  init_demo_lifecycle_status();
@@ -1628,7 +2073,7 @@ var init_src$4 = __esmMin((() => {
1628
2073
  init_dated_offering_settlement();
1629
2074
  init_person_records();
1630
2075
  init_rectification();
1631
- init_location();
2076
+ init_location$1();
1632
2077
  init_business_address();
1633
2078
  init_result();
1634
2079
  init_assert_never();
@@ -1647,7 +2092,13 @@ var init_src$4 = __esmMin((() => {
1647
2092
  init_footer_arrangement();
1648
2093
  init_footer_composition_types();
1649
2094
  init_footer_engagement();
1650
- init_newsletter_signup_destination$1();
2095
+ init_mailing_list_identifiers();
2096
+ init_mailing_list_setup();
2097
+ init_mailing_list_setup_parser();
2098
+ init_mailing_list_targeting();
2099
+ init_mailing_list_runtime();
2100
+ init_mailing_list_targeting_parser();
2101
+ init_mailing_list_submission();
1651
2102
  init_number_input();
1652
2103
  init_field_errors();
1653
2104
  init_form_submission_preview();
@@ -1666,8 +2117,10 @@ var init_src$4 = __esmMin((() => {
1666
2117
  init_secret();
1667
2118
  init_site_route_target();
1668
2119
  init_whole_series_run_schedule();
2120
+ init_public_read_cache_contract();
1669
2121
  init_booking_verticals();
1670
2122
  init_event_series_behaviour();
2123
+ init_navigation_locations();
1671
2124
  }));
1672
2125
  //#endregion
1673
2126
  //#region ../media-core/src/types.ts
@@ -1826,7 +2279,7 @@ var init_videoSlotPolicy = __esmMin((() => {}));
1826
2279
  var init_identifiers = __esmMin((() => {}));
1827
2280
  //#endregion
1828
2281
  //#region ../media-core/src/typeGuards.ts
1829
- function isRecord$12(value) {
2282
+ function isRecord$11(value) {
1830
2283
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
1831
2284
  }
1832
2285
  var init_typeGuards$1 = __esmMin((() => {}));
@@ -1955,8 +2408,8 @@ function walkAndCollectImageAttrs(value, out, location = "") {
1955
2408
  value.forEach((item, index) => walkAndCollectImageAttrs(item, out, `${location}[${index}]`));
1956
2409
  return;
1957
2410
  }
1958
- if (!isRecord$12(value)) return;
1959
- if (value.type === "image" && isRecord$12(value.attrs)) out.push({
2411
+ if (!isRecord$11(value)) return;
2412
+ if (value.type === "image" && isRecord$11(value.attrs)) out.push({
1960
2413
  attrs: value.attrs,
1961
2414
  location: location ? `${location}.attrs` : "attrs"
1962
2415
  });
@@ -7464,7 +7917,7 @@ var init_interactionPalette = __esmMin((() => {
7464
7917
  //#endregion
7465
7918
  //#region ../theme-core/src/boxBackgroundSchema.ts
7466
7919
  function normalizeAuthoringOpacity(value) {
7467
- if (!isRecord$11(value)) return value;
7920
+ if (!isRecord$10(value)) return value;
7468
7921
  return {
7469
7922
  ...value,
7470
7923
  opacity: normalizeOpacity(value.opacity)
@@ -7473,7 +7926,7 @@ function normalizeAuthoringOpacity(value) {
7473
7926
  function normalizeOpacity(value) {
7474
7927
  return typeof value === "number" && value > 1 && value <= 100 ? value / 100 : value;
7475
7928
  }
7476
- function isRecord$11(value) {
7929
+ function isRecord$10(value) {
7477
7930
  return typeof value === "object" && value !== null && !Array.isArray(value);
7478
7931
  }
7479
7932
  var boxBackgroundOverlaySchema, commonSchema, mediaPresentationSchema, boxBackgroundSchema;
@@ -8299,7 +8752,7 @@ var init_media$3 = __esmMin((() => {
8299
8752
  /**
8300
8753
  * Strict record guard: excludes null, primitives, and arrays.
8301
8754
  */
8302
- function isRecord$10(value) {
8755
+ function isRecord$9(value) {
8303
8756
  return typeof value === "object" && value !== null && !Array.isArray(value);
8304
8757
  }
8305
8758
  /**
@@ -8918,6 +9371,14 @@ var init_calendarWindow = __esmMin((() => {
8918
9371
  var init_contracts$2 = __esmMin((() => {
8919
9372
  init_calendarWindow();
8920
9373
  }));
9374
+ //#endregion
9375
+ //#region ../api/src/apiEndpointTypes.ts
9376
+ function allowedDemoMutationPolicy() {
9377
+ return {
9378
+ classification: "allowed",
9379
+ publicMessage: ""
9380
+ };
9381
+ }
8921
9382
  function blockedDemoMutationPolicy(classification, publicMessage) {
8922
9383
  if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
8923
9384
  return {
@@ -8925,12 +9386,13 @@ function blockedDemoMutationPolicy(classification, publicMessage) {
8925
9386
  publicMessage
8926
9387
  };
8927
9388
  }
8928
- var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED;
9389
+ var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED, DEMO_MUTATION_ALLOWED;
8929
9390
  var init_demoMutationPolicies = __esmMin((() => {
8930
9391
  init_apiEndpointTypes();
8931
9392
  DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
8932
9393
  DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
8933
9394
  blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
9395
+ DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
8934
9396
  }));
8935
9397
  //#endregion
8936
9398
  //#region ../api/src/cache-tags.ts
@@ -9885,14 +10347,117 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
9885
10347
  responseKind: "json",
9886
10348
  errors: ["auth:forbidden", "server:internal_error"]
9887
10349
  },
9888
- getMailchimpSignupSyncHealth: {
9889
- path: "/sites/{siteId}/integrations/mailchimp/signup-sync-health",
10350
+ getMailingListSetup: {
10351
+ path: "/sites/{siteId}/mailing-list/setup",
10352
+ method: "GET",
10353
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10354
+ auth: "user",
10355
+ responseKind: "json",
10356
+ errors: ["auth:forbidden", "server:internal_error"]
10357
+ },
10358
+ getMailingListAuthoringContext: {
10359
+ path: "/sites/{siteId}/mailing-list/authoring-context",
10360
+ method: "GET",
10361
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10362
+ auth: "user",
10363
+ responseKind: "json",
10364
+ errors: ["auth:forbidden", "server:internal_error"]
10365
+ },
10366
+ previewMailingListSetupChange: {
10367
+ path: "/sites/{siteId}/mailing-list/setup/preview",
10368
+ method: "POST",
10369
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10370
+ auth: "user",
10371
+ responseKind: "json",
10372
+ demoMutation: DEMO_MUTATION_ALLOWED,
10373
+ errors: [
10374
+ "auth:forbidden",
10375
+ "validation:invalid_input",
10376
+ "server:internal_error"
10377
+ ]
10378
+ },
10379
+ applyMailingListSetupChange: {
10380
+ path: "/sites/{siteId}/mailing-list/setup",
10381
+ method: "PUT",
10382
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10383
+ auth: "user",
10384
+ responseKind: "json",
10385
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10386
+ errors: [
10387
+ "auth:forbidden",
10388
+ "validation:invalid_input",
10389
+ "resource:conflict",
10390
+ "server:internal_error"
10391
+ ]
10392
+ },
10393
+ getMailingListProviderCatalog: {
10394
+ path: "/sites/{siteId}/mailing-list/providers/{provider}/catalog",
10395
+ method: "GET",
10396
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10397
+ auth: "user",
10398
+ responseKind: "json",
10399
+ errors: [
10400
+ "auth:forbidden",
10401
+ "validation:invalid_input",
10402
+ "server:internal_error"
10403
+ ]
10404
+ },
10405
+ refreshMailingListProviderCatalog: {
10406
+ path: "/sites/{siteId}/mailing-list/providers/{provider}/catalog/refresh",
10407
+ method: "POST",
10408
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10409
+ auth: "user",
10410
+ responseKind: "json",
10411
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10412
+ errors: [
10413
+ "auth:forbidden",
10414
+ "validation:invalid_input",
10415
+ "server:internal_error"
10416
+ ]
10417
+ },
10418
+ getMailingListProviderHealth: {
10419
+ path: "/sites/{siteId}/mailing-list/health",
10420
+ method: "GET",
10421
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10422
+ auth: "user",
10423
+ responseKind: "json",
10424
+ errors: ["auth:forbidden", "server:internal_error"]
10425
+ },
10426
+ getBrevoConnection: {
10427
+ path: "/sites/{siteId}/integrations/brevo/connection",
9890
10428
  method: "GET",
9891
10429
  tags: [TAG_TEMPLATES.site],
9892
10430
  auth: "user",
9893
10431
  responseKind: "json",
9894
10432
  errors: ["auth:forbidden", "server:internal_error"]
9895
10433
  },
10434
+ connectBrevo: {
10435
+ path: "/sites/{siteId}/integrations/brevo/connection",
10436
+ method: "PUT",
10437
+ tags: [TAG_TEMPLATES.site],
10438
+ auth: "user",
10439
+ responseKind: "json",
10440
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10441
+ errors: [
10442
+ "auth:forbidden",
10443
+ "validation:invalid_input",
10444
+ "resource:conflict",
10445
+ "server:internal_error"
10446
+ ]
10447
+ },
10448
+ disconnectBrevo: {
10449
+ path: "/sites/{siteId}/integrations/brevo/disconnect",
10450
+ method: "POST",
10451
+ tags: [TAG_TEMPLATES.site],
10452
+ auth: "user",
10453
+ responseKind: "json",
10454
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10455
+ errors: [
10456
+ "auth:forbidden",
10457
+ "resource:conflict",
10458
+ "server:internal_error"
10459
+ ]
10460
+ },
9896
10461
  getMailchimpConnection: {
9897
10462
  path: "/sites/{siteId}/integrations/mailchimp/connection",
9898
10463
  method: "GET",
@@ -10121,6 +10686,7 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
10121
10686
  var PUBLIC_EVENT_ENDPOINT_DEFINITIONS;
10122
10687
  var init_publicEventEndpointDefinitions = __esmMin((() => {
10123
10688
  init_cache_tags();
10689
+ init_src$4();
10124
10690
  init_defineEndpointDefinitions();
10125
10691
  PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10126
10692
  listPublicEventCalendarWindow: {
@@ -10153,7 +10719,7 @@ var init_publicEventEndpointDefinitions = __esmMin((() => {
10153
10719
  resolveEventSubroute: {
10154
10720
  path: "/public/sites/{siteId}/events/subroutes/resolve",
10155
10721
  method: "GET",
10156
- revalidate: 60,
10722
+ revalidate: publicReadFreshnessSeconds("resolveEventSubroute"),
10157
10723
  tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
10158
10724
  auth: "public",
10159
10725
  responseKind: "json",
@@ -10189,12 +10755,13 @@ var init_publicEventCheckoutEndpointDefinitions = __esmMin((() => {
10189
10755
  var PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS;
10190
10756
  var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10191
10757
  init_cache_tags();
10758
+ init_src$4();
10192
10759
  init_defineEndpointDefinitions();
10193
10760
  PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10194
10761
  getPublicBookingServices: {
10195
10762
  path: "/public/bookings/services",
10196
10763
  method: "GET",
10197
- revalidate: 60,
10764
+ revalidate: publicReadFreshnessSeconds("getPublicBookingServices"),
10198
10765
  tags: [TAG_TEMPLATES.publicBookingServices],
10199
10766
  auth: "public",
10200
10767
  responseKind: "json"
@@ -10202,7 +10769,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10202
10769
  getPublicBookingService: {
10203
10770
  path: "/public/bookings/services/{serviceId}",
10204
10771
  method: "GET",
10205
- revalidate: 60,
10772
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
10206
10773
  tags: [TAG_TEMPLATES.publicBookingServices],
10207
10774
  auth: "public",
10208
10775
  responseKind: "json"
@@ -10210,7 +10777,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10210
10777
  getPublicBookingResourcesReference: {
10211
10778
  path: "/public/bookings/resources/reference",
10212
10779
  method: "GET",
10213
- revalidate: 60,
10780
+ revalidate: publicReadFreshnessSeconds("getPublicBookingResourcesReference"),
10214
10781
  tags: [TAG_TEMPLATES.publicBookingServices],
10215
10782
  auth: "public",
10216
10783
  responseKind: "json"
@@ -10218,7 +10785,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10218
10785
  getPublicBookingAvailableDates: {
10219
10786
  path: "/public/bookings/availability/dates",
10220
10787
  method: "GET",
10221
- revalidate: 60,
10788
+ revalidate: publicReadFreshnessSeconds("getPublicBookingAvailableDates"),
10222
10789
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10223
10790
  auth: "public",
10224
10791
  responseKind: "json"
@@ -10226,7 +10793,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10226
10793
  getPublicBookingAvailableSlots: {
10227
10794
  path: "/public/bookings/availability/slots",
10228
10795
  method: "GET",
10229
- revalidate: 60,
10796
+ revalidate: publicReadFreshnessSeconds("getPublicBookingAvailableSlots"),
10230
10797
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10231
10798
  auth: "public",
10232
10799
  responseKind: "json"
@@ -10234,7 +10801,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10234
10801
  getPublicWeeklySlotAvailability: {
10235
10802
  path: "/public/bookings/weekly-slot-availability",
10236
10803
  method: "GET",
10237
- revalidate: 60,
10804
+ revalidate: publicReadFreshnessSeconds("getPublicWeeklySlotAvailability"),
10238
10805
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10239
10806
  auth: "public",
10240
10807
  responseKind: "json",
@@ -10701,6 +11268,82 @@ var init_sdkMediaEndpointDefinitions = __esmMin((() => {
10701
11268
  }
10702
11269
  });
10703
11270
  }));
11271
+ //#endregion
11272
+ //#region ../api/src/publicReadEndpointDefinitions.ts
11273
+ var PUBLIC_READ_ENDPOINT_DEFINITIONS;
11274
+ var init_publicReadEndpointDefinitions = __esmMin((() => {
11275
+ init_src$4();
11276
+ init_cache_tags();
11277
+ init_defineEndpointDefinitions();
11278
+ PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
11279
+ getPublishedEntryPreview: {
11280
+ path: "/public/content/{siteId}/{type}/{slug}/preview",
11281
+ method: "GET",
11282
+ revalidate: publicReadFreshnessSeconds("getPublishedEntryPreview"),
11283
+ tags: ["content-{siteId}-{type}-{slug}"],
11284
+ auth: "public",
11285
+ responseKind: "json"
11286
+ },
11287
+ listPublishedEntries: {
11288
+ path: "/public/content/{siteId}/{type}/entries",
11289
+ method: "GET",
11290
+ revalidate: publicReadFreshnessSeconds("listPublishedEntries"),
11291
+ tags: ["content-{siteId}-{type}"],
11292
+ auth: "public",
11293
+ responseKind: "json"
11294
+ },
11295
+ getPublicFormById: {
11296
+ path: "/public/forms/{formId}",
11297
+ method: "GET",
11298
+ revalidate: publicReadFreshnessSeconds("getPublicFormById"),
11299
+ tags: [TAG_TEMPLATES.formById],
11300
+ auth: "public",
11301
+ responseKind: "json"
11302
+ },
11303
+ listPublicEvents: {
11304
+ path: "/public/sites/{siteId}/events",
11305
+ method: "GET",
11306
+ revalidate: publicReadFreshnessSeconds("listPublicEvents"),
11307
+ tags: [TAG_TEMPLATES.publicEvents],
11308
+ auth: "public",
11309
+ responseKind: "json"
11310
+ },
11311
+ listPublicTeamMembers: {
11312
+ path: "/public/sites/{siteId}/team-members",
11313
+ method: "GET",
11314
+ revalidate: publicReadFreshnessSeconds("listPublicTeamMembers"),
11315
+ tags: [TAG_TEMPLATES.publicTeamMembers],
11316
+ errors: [],
11317
+ auth: "public",
11318
+ responseKind: "json"
11319
+ },
11320
+ listPublicPasses: {
11321
+ path: "/public/sites/{siteId}/bookings/products/passes",
11322
+ method: "GET",
11323
+ revalidate: publicReadFreshnessSeconds("listPublicPasses"),
11324
+ tags: [TAG_TEMPLATES.publicPasses],
11325
+ auth: "public",
11326
+ responseKind: "json"
11327
+ },
11328
+ listPublicMemberships: {
11329
+ path: "/public/sites/{siteId}/bookings/products/memberships",
11330
+ method: "GET",
11331
+ revalidate: publicReadFreshnessSeconds("listPublicMemberships"),
11332
+ tags: [TAG_TEMPLATES.publicMemberships],
11333
+ auth: "public",
11334
+ responseKind: "json"
11335
+ },
11336
+ listPublicProducts: {
11337
+ path: "/public/sites/{siteId}/products",
11338
+ method: "GET",
11339
+ revalidate: publicReadFreshnessSeconds("listPublicProducts"),
11340
+ tags: [TAG_TEMPLATES.publicProducts],
11341
+ errors: [],
11342
+ auth: "public",
11343
+ responseKind: "json"
11344
+ }
11345
+ });
11346
+ }));
10704
11347
  var init_endpoints = __esmMin((() => {
10705
11348
  init_demoMutationPolicies();
10706
11349
  init_cache_tags();
@@ -10717,15 +11360,17 @@ var init_endpoints = __esmMin((() => {
10717
11360
  init_giftingEndpointDefinitions();
10718
11361
  init_sdkEndpointDefinitions();
10719
11362
  init_sdkMediaEndpointDefinitions();
11363
+ init_publicReadEndpointDefinitions();
10720
11364
  ({
10721
11365
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
10722
11366
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
10723
- ...GIFTING_ENDPOINT_DEFINITIONS
11367
+ ...GIFTING_ENDPOINT_DEFINITIONS,
11368
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS
10724
11369
  }), 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, {
10725
11370
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
10726
11371
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
10727
11372
  ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
10728
- }, 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.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.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.formById, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, 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 };
11373
+ }, 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 };
10729
11374
  }));
10730
11375
  var init_preview_auth = __esmMin((() => {
10731
11376
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
@@ -21831,7 +22476,7 @@ var init_semantic = __esmMin((() => {
21831
22476
  }));
21832
22477
  //#endregion
21833
22478
  //#region ../blocks/src/system/icons/value.ts
21834
- function isRecord$9(value) {
22479
+ function isRecord$8(value) {
21835
22480
  return typeof value === "object" && value !== null && !Array.isArray(value);
21836
22481
  }
21837
22482
  function parseBlockIconValue(value) {
@@ -21839,7 +22484,7 @@ function parseBlockIconValue(value) {
21839
22484
  kind: "semantic",
21840
22485
  iconId: value
21841
22486
  };
21842
- if (!isRecord$9(value)) return NO_BLOCK_ICON_VALUE;
22487
+ if (!isRecord$8(value)) return NO_BLOCK_ICON_VALUE;
21843
22488
  switch (value.kind) {
21844
22489
  case "none": return NO_BLOCK_ICON_VALUE;
21845
22490
  case "semantic": return isSemanticIconId$1(value.iconId) ? {
@@ -27510,102 +28155,31 @@ var init_newsletterForm = __esmMin((() => {
27510
28155
  description: "Newsletter subscription form with preset field configurations.",
27511
28156
  fields: [
27512
28157
  {
27513
- id: "destinationProvider",
27514
- type: "select",
27515
- label: "Send signups to",
27516
- description: "Choose where new subscribers from this form should go.",
27517
- defaultValue: "riverbank",
27518
- required: false,
27519
- ui: { intent: "behavior" },
27520
- options: [{
27521
- value: "riverbank",
27522
- label: "Riverbank newsletter"
27523
- }]
27524
- },
27525
- {
27526
- id: "listId",
27527
- type: "reference",
27528
- label: "Newsletter list",
27529
- description: "Select the list new subscribers should be added to.",
27530
- required: false,
27531
- referenceKind: "newsletterList",
27532
- allowManualEntry: false,
27533
- ui: {
27534
- intent: "behavior",
27535
- visibleWhen: {
27536
- field: "destinationProvider",
27537
- equals: "riverbank"
27538
- }
27539
- }
27540
- },
27541
- {
27542
- id: "mailchimpAudienceId",
27543
- type: "reference",
27544
- label: "Mailchimp audience",
27545
- description: "Choose the Mailchimp audience for new subscribers.",
27546
- required: false,
27547
- referenceKind: "mailchimpAudience",
27548
- allowManualEntry: false,
27549
- ui: {
27550
- intent: "behavior",
27551
- visibleWhen: {
27552
- field: "destinationProvider",
27553
- equals: "mailchimp"
27554
- }
27555
- }
27556
- },
27557
- {
27558
- id: "mailchimpTags",
27559
- type: "text",
27560
- label: "Mailchimp tags",
27561
- description: "Optional tags to apply in Mailchimp, separated by commas or semicolons.",
28158
+ id: "targeting",
28159
+ type: "group",
28160
+ label: "Mailing-list targeting",
28161
+ description: "Choose what kind of emails people signing up here will receive.",
28162
+ defaultValue: { mode: "default" },
28163
+ required: true,
27562
28164
  ui: {
27563
28165
  intent: "behavior",
27564
- visibleWhen: {
27565
- field: "destinationProvider",
27566
- equals: "mailchimp"
27567
- }
27568
- }
27569
- },
27570
- {
27571
- id: "preset",
27572
- type: "select",
27573
- label: "Form fields",
27574
- description: "Choose which fields to collect.",
27575
- defaultValue: "emailOnly",
27576
- ui: { intent: "display" },
27577
- options: [
27578
- {
27579
- value: "emailOnly",
27580
- label: "Email only"
27581
- },
27582
- {
27583
- value: "emailName",
27584
- label: "Email + Name"
27585
- },
27586
- {
27587
- value: "emailFirstLast",
27588
- label: "Email + First/Last Name"
27589
- },
27590
- {
27591
- value: "emailNameCompany",
27592
- label: "Email + Name + Company (B2B)"
27593
- }
27594
- ]
27595
- },
27596
- {
27597
- id: "includePhone",
27598
- type: "boolean",
27599
- label: "Include phone field (optional)",
27600
- description: "Adds an optional phone field to the selected preset (never required).",
27601
- defaultValue: false,
27602
- ui: { intent: "display" }
27603
- },
27604
- {
27605
- id: "buttonLabel",
27606
- type: "text",
27607
- label: "Button label",
27608
- defaultValue: "Subscribe"
28166
+ widget: "mailingListTargeting"
28167
+ },
28168
+ schema: { fields: [{
28169
+ id: "mode",
28170
+ type: "select",
28171
+ label: "Mode",
28172
+ required: true,
28173
+ defaultValue: "default",
28174
+ options: [{
28175
+ value: "default",
28176
+ label: "Default"
28177
+ }, {
28178
+ value: "custom",
28179
+ label: "Custom"
28180
+ }],
28181
+ ui: { hidden: true }
28182
+ }] }
27609
28183
  },
27610
28184
  createButtonVariantField({
27611
28185
  id: "buttonVariant",
@@ -27613,46 +28187,42 @@ var init_newsletterForm = __esmMin((() => {
27613
28187
  defaultValue: "primary"
27614
28188
  }),
27615
28189
  {
27616
- id: "successMessage",
28190
+ id: "mailingListSource",
27617
28191
  type: "text",
27618
- label: "Success message",
27619
- description: "Shown after successful subscription.",
27620
- defaultValue: "Thanks for subscribing!"
27621
- },
27622
- {
27623
- id: "privacyNote",
27624
- type: "text",
27625
- label: "Privacy note",
27626
- description: "Optional small text below the form (e.g., privacy policy link)."
28192
+ label: "Mailing-list source",
28193
+ ui: {
28194
+ hidden: true,
28195
+ intent: "behavior"
28196
+ }
27627
28197
  },
27628
28198
  {
27629
- id: "tags",
28199
+ id: "mailingListSourceToken",
27630
28200
  type: "text",
27631
- label: "Tags (optional)",
27632
- description: "Optional tags to apply on subscribe (comma or semicolon separated).",
28201
+ label: "Mailing-list source token",
27633
28202
  ui: {
27634
- intent: "behavior",
27635
- visibleWhen: {
27636
- field: "destinationProvider",
27637
- equals: "riverbank"
27638
- }
28203
+ hidden: true,
28204
+ intent: "behavior"
27639
28205
  }
27640
28206
  }
27641
28207
  ],
27642
28208
  layout: [el$1("newsletter-form", withApiBindings$1({
27643
- source: "block",
27644
- destinationProvider: { $bind: { from: "destinationProvider" } },
27645
- listId: { $bind: { from: "listId" } },
27646
- preset: { $bind: { from: "preset" } },
27647
- includePhone: { $bind: { from: "includePhone" } },
27648
- buttonLabel: { $bind: { from: "buttonLabel" } },
28209
+ source: { $bind: {
28210
+ from: "mailingListSource",
28211
+ fallback: "block"
28212
+ } },
28213
+ sourceRef: {
28214
+ tag: "signed_source_ref",
28215
+ token: { $bind: { from: "mailingListSourceToken" } }
28216
+ },
28217
+ targeting: { $bind: {
28218
+ from: "targeting",
28219
+ fallback: { mode: "default" }
28220
+ } },
28221
+ mailingList: { $bind: { from: "$root.mailingList" } },
27649
28222
  buttonVariant: { $bind: {
27650
28223
  from: "buttonVariant",
27651
28224
  fallback: "primary"
27652
28225
  } },
27653
- successMessage: { $bind: { from: "successMessage" } },
27654
- privacyNote: { $bind: { from: "privacyNote" } },
27655
- tags: { $bind: { from: "tags" } },
27656
28226
  spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
27657
28227
  }), [])]
27658
28228
  });
@@ -30011,14 +30581,19 @@ var init_contact_newsletter = __esmMin((() => {
30011
30581
  as: "h2",
30012
30582
  className: "newsletter-copy-title"
30013
30583
  }, when("newsletterTitle"), bind$1("newsletterTitle")), richText({ className: "newsletter-copy-subtitle rb-prose rb-max-w-none" }, when("newsletterSubtitle"), bind$1("newsletterSubtitle"))]), el$1("newsletter-form", withApiBindings$1({
30014
- source: "block",
30015
- listId: { $bind: { from: "listId" } },
30016
- preset: { $bind: { from: "preset" } },
30017
- includePhone: { $bind: { from: "includePhone" } },
30018
- buttonLabel: { $bind: { from: "newsletterButtonLabel" } },
30019
- successMessage: { $bind: { from: "newsletterSuccessMessage" } },
30020
- privacyNote: { $bind: { from: "newsletterPrivacyNote" } },
30021
- tags: { $bind: { from: "newsletterTags" } },
30584
+ source: { $bind: {
30585
+ from: "mailingListSource",
30586
+ fallback: "block"
30587
+ } },
30588
+ sourceRef: {
30589
+ tag: "signed_source_ref",
30590
+ token: { $bind: { from: "mailingListSourceToken" } }
30591
+ },
30592
+ targeting: { $bind: {
30593
+ from: "targeting",
30594
+ fallback: { mode: "default" }
30595
+ } },
30596
+ mailingList: { $bind: { from: "$root.mailingList" } },
30022
30597
  spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
30023
30598
  }), [])])])], { className: "contact-newsletter-container" }),
30024
30599
  baseClass: "",
@@ -30053,79 +30628,55 @@ var init_contact_newsletter = __esmMin((() => {
30053
30628
  label: "Newsletter intro"
30054
30629
  },
30055
30630
  {
30056
- id: "listId",
30057
- type: "reference",
30058
- label: "Newsletter list",
30059
- description: "Select the list new subscribers should be added to.",
30631
+ id: "targeting",
30632
+ type: "group",
30633
+ label: "Mailing-list targeting",
30634
+ description: "Choose what kind of emails people signing up here will receive.",
30060
30635
  required: true,
30061
- referenceKind: "newsletterList",
30062
- allowManualEntry: false,
30063
- ui: { intent: "behavior" }
30064
- },
30065
- {
30066
- id: "preset",
30067
- type: "select",
30068
- label: "Newsletter fields",
30069
- defaultValue: "emailOnly",
30070
- ui: { intent: "display" },
30071
- options: [
30072
- {
30073
- value: "emailOnly",
30074
- label: "Email only"
30075
- },
30076
- {
30077
- value: "emailName",
30078
- label: "Email + Name"
30079
- },
30080
- {
30081
- value: "emailFirstLast",
30082
- label: "Email + First/Last Name"
30083
- },
30084
- {
30085
- value: "emailNameCompany",
30086
- label: "Email + Name + Company (B2B)"
30087
- }
30088
- ]
30089
- },
30090
- {
30091
- id: "includePhone",
30092
- type: "boolean",
30093
- label: "Include phone field",
30094
- defaultValue: false,
30095
- ui: { intent: "display" }
30096
- },
30097
- {
30098
- id: "newsletterButtonLabel",
30099
- type: "text",
30100
- label: "Newsletter button label",
30101
- defaultValue: "Subscribe",
30102
- ui: { intent: "display" }
30103
- },
30104
- {
30105
- id: "newsletterSuccessMessage",
30106
- type: "text",
30107
- label: "Newsletter success message",
30108
- defaultValue: "Thanks for subscribing!",
30109
- ui: { intent: "behavior" }
30636
+ defaultValue: { mode: "default" },
30637
+ ui: {
30638
+ intent: "behavior",
30639
+ widget: "mailingListTargeting"
30640
+ },
30641
+ schema: { fields: [{
30642
+ id: "mode",
30643
+ type: "select",
30644
+ label: "Mode",
30645
+ required: true,
30646
+ defaultValue: "default",
30647
+ options: [{
30648
+ value: "default",
30649
+ label: "Default"
30650
+ }, {
30651
+ value: "custom",
30652
+ label: "Custom"
30653
+ }],
30654
+ ui: { hidden: true }
30655
+ }] }
30110
30656
  },
30111
30657
  {
30112
- id: "newsletterPrivacyNote",
30658
+ id: "contactTitle",
30113
30659
  type: "text",
30114
- label: "Privacy note",
30115
- ui: { intent: "display" }
30660
+ label: "Contact title",
30661
+ defaultValue: "Get in touch"
30116
30662
  },
30117
30663
  {
30118
- id: "newsletterTags",
30664
+ id: "mailingListSource",
30119
30665
  type: "text",
30120
- label: "Newsletter tags",
30121
- description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
30122
- ui: { intent: "behavior" }
30666
+ label: "Mailing-list source",
30667
+ ui: {
30668
+ hidden: true,
30669
+ intent: "behavior"
30670
+ }
30123
30671
  },
30124
30672
  {
30125
- id: "contactTitle",
30673
+ id: "mailingListSourceToken",
30126
30674
  type: "text",
30127
- label: "Contact title",
30128
- defaultValue: "Get in touch"
30675
+ label: "Mailing-list source token",
30676
+ ui: {
30677
+ hidden: true,
30678
+ intent: "behavior"
30679
+ }
30129
30680
  },
30130
30681
  {
30131
30682
  id: "contactIntro",
@@ -30305,7 +30856,7 @@ var init_faq = __esmMin((() => {
30305
30856
  function toUnknownArray(value) {
30306
30857
  return Array.isArray(value) ? value : [];
30307
30858
  }
30308
- var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, jsonArrayTransform, csvTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, mapTokenOptionsSchema, mapTokenTransform, formattingTransforms;
30859
+ var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, booleanNotTransform, jsonArrayTransform, csvTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, mapTokenOptionsSchema, mapTokenTransform, equalsTransform, formattingTransforms;
30309
30860
  var init_formatting = __esmMin((() => {
30310
30861
  uppercaseTransform = {
30311
30862
  id: "string.uppercase",
@@ -30345,6 +30896,12 @@ var init_formatting = __esmMin((() => {
30345
30896
  summary: "Get the length of an array",
30346
30897
  run: (value) => Array.isArray(value) ? value.length : 0
30347
30898
  };
30899
+ booleanNotTransform = {
30900
+ id: "boolean.not",
30901
+ kind: "formatter",
30902
+ summary: "Invert a boolean value; fail closed to false for other inputs",
30903
+ run: (value) => typeof value === "boolean" ? !value : false
30904
+ };
30348
30905
  jsonArrayTransform = {
30349
30906
  id: "value.jsonArray",
30350
30907
  kind: "formatter",
@@ -30413,11 +30970,20 @@ var init_formatting = __esmMin((() => {
30413
30970
  return role ? `rgb(var(--tb-${role}))` : void 0;
30414
30971
  }
30415
30972
  };
30973
+ equalsTransform = {
30974
+ id: "value.equals",
30975
+ kind: "formatter",
30976
+ summary: "Compare a value to a fixed string",
30977
+ schema: z.object({ value: z.string() }),
30978
+ run: (value, options) => value === options.value
30979
+ };
30416
30980
  formattingTransforms = [
30981
+ equalsTransform,
30417
30982
  uppercaseTransform,
30418
30983
  fallbackTransform,
30419
30984
  dateFormatShort,
30420
30985
  arrayLengthTransform,
30986
+ booleanNotTransform,
30421
30987
  jsonArrayTransform,
30422
30988
  csvTransform,
30423
30989
  marqueeLoopTransform,
@@ -31466,16 +32032,16 @@ var init_media$1 = __esmMin((() => {
31466
32032
  //#region ../blocks/src/system/transforms/registry/content.ts
31467
32033
  function getSiteName(context) {
31468
32034
  const viewModel = context.viewModel;
31469
- if (!isRecord$10(viewModel)) return null;
32035
+ if (!isRecord$9(viewModel)) return null;
31470
32036
  const site = viewModel.site;
31471
- if (isRecord$10(site) && typeof site.title === "string") {
32037
+ if (isRecord$9(site) && typeof site.title === "string") {
31472
32038
  const title = site.title.trim();
31473
32039
  return title.length > 0 ? title : null;
31474
32040
  }
31475
32041
  const root = viewModel.$root;
31476
- if (isRecord$10(root)) {
32042
+ if (isRecord$9(root)) {
31477
32043
  const rootSite = root.site;
31478
- if (isRecord$10(rootSite) && typeof rootSite.title === "string") {
32044
+ if (isRecord$9(rootSite) && typeof rootSite.title === "string") {
31479
32045
  const title = rootSite.title.trim();
31480
32046
  if (title.length > 0) return title;
31481
32047
  }
@@ -31497,7 +32063,7 @@ function replaceTokenText(input, allowedTokens, tokenValues) {
31497
32063
  });
31498
32064
  }
31499
32065
  function visitRichTextNode(node, allowedTokens, tokenValues) {
31500
- if (!isRecord$10(node)) return node;
32066
+ if (!isRecord$9(node)) return node;
31501
32067
  let changed = false;
31502
32068
  const nextNode = { ...node };
31503
32069
  if (nextNode.type === "text" && typeof nextNode.text === "string") {
@@ -31518,7 +32084,7 @@ function visitRichTextNode(node, allowedTokens, tokenValues) {
31518
32084
  return changed ? nextNode : node;
31519
32085
  }
31520
32086
  function interpolateRichTextTokens(value, options, context) {
31521
- if (!isRecord$10(value)) return value;
32087
+ if (!isRecord$9(value)) return value;
31522
32088
  return visitRichTextNode(value, new Set(options.tokens), {
31523
32089
  year: String((/* @__PURE__ */ new Date()).getFullYear()),
31524
32090
  site_name: getSiteName(context)
@@ -31924,13 +32490,9 @@ var init_site_footer = __esmMin((() => {
31924
32490
  };
31925
32491
  footerMailingListBindings = {
31926
32492
  source: { $bind: { from: "module.engagement.runtime.source" } },
31927
- destinationRef: { $bind: { from: "module.engagement.runtime.destinationRef" } },
31928
- listId: { $bind: { from: "module.engagement.runtime.listId" } },
31929
- preset: { $bind: { from: "module.engagement.runtime.preset" } },
31930
- includePhone: { $bind: { from: "module.engagement.runtime.includePhone" } },
31931
- buttonLabel: { $bind: { from: "module.engagement.runtime.buttonLabel" } },
31932
- successMessage: { $bind: { from: "module.engagement.runtime.successMessage" } },
31933
- privacyNote: { $bind: { from: "module.engagement.runtime.privacyNote" } }
32493
+ sourceRef: { $bind: { from: "module.engagement.runtime.sourceRef" } },
32494
+ mailingList: { $bind: { from: "module.engagement.runtime.mailingList" } },
32495
+ targeting: { $bind: { from: "module.engagement.runtime.targeting" } }
31934
32496
  };
31935
32497
  footerSpamProtectionBinding = { spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } } };
31936
32498
  brandLogo = link({
@@ -33684,6 +34246,89 @@ var init_appointment_booking = __esmMin((() => {
33684
34246
  };
33685
34247
  }));
33686
34248
  //#endregion
34249
+ //#region ../blocks/src/system/blocks/appointment-services.tsx
34250
+ var appointmentServicesManifest, appointmentServicesBlockDefinition;
34251
+ var init_appointment_services = __esmMin((() => {
34252
+ init_builder$1();
34253
+ init_styledSection();
34254
+ init_fragments$1();
34255
+ init_boxStyles$1();
34256
+ init_defineBlock();
34257
+ appointmentServicesManifest = createBlockManifest({
34258
+ id: "block.appointment-services",
34259
+ version: "1.0.0",
34260
+ title: "Appointment Services",
34261
+ titleSource: "heading",
34262
+ description: "List public appointment services with booking links",
34263
+ skipSectionStyles: true,
34264
+ additionalFields: [
34265
+ {
34266
+ id: "heading",
34267
+ type: "text",
34268
+ label: "Heading",
34269
+ required: false,
34270
+ multiline: false,
34271
+ defaultValue: "Appointments",
34272
+ ui: { intent: "content" }
34273
+ },
34274
+ {
34275
+ id: "description",
34276
+ type: "richText",
34277
+ label: "Description",
34278
+ required: false,
34279
+ ui: { intent: "content" }
34280
+ },
34281
+ sectionStylesField({
34282
+ id: "_sectionStyles",
34283
+ label: "Section styles",
34284
+ renderInHeader: false
34285
+ })
34286
+ ],
34287
+ styleTokens: {
34288
+ background: "surface",
34289
+ typography: "body",
34290
+ spacing: "md"
34291
+ },
34292
+ behaviours: {
34293
+ supportsThemeSwitching: true,
34294
+ inlineEditing: true,
34295
+ animation: false,
34296
+ paletteHidden: false
34297
+ },
34298
+ category: "interactive",
34299
+ contentSource: { kind: "inline" },
34300
+ tags: [
34301
+ "booking",
34302
+ "appointment",
34303
+ "services",
34304
+ "scheduling"
34305
+ ],
34306
+ icon: "CalendarDays",
34307
+ layout: [styledSection({
34308
+ baseClass: "",
34309
+ spacing: "spacious",
34310
+ children: sectionContainer([
34311
+ text({ as: "h2" }, bind$1("content.heading"), when("content.heading")),
34312
+ richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description")),
34313
+ el$1("appointment-services", {
34314
+ sectionHeading: { $bind: { from: "content.heading" } },
34315
+ services: { $bind: { from: "data.services" } },
34316
+ pathname: { $bind: { from: "$root.pathname" } }
34317
+ })
34318
+ ], { gap: "lg" })
34319
+ })]
34320
+ });
34321
+ appointmentServicesBlockDefinition = {
34322
+ manifest: appointmentServicesManifest,
34323
+ dataSchemas: { services: z.unknown().optional() },
34324
+ dataLoaders: { services: {
34325
+ endpoint: "getPublicBookingServices",
34326
+ params: { siteId: { $bind: { from: "$root.siteId" } } },
34327
+ mode: "server"
34328
+ } }
34329
+ };
34330
+ }));
34331
+ //#endregion
33687
34332
  //#region ../blocks/src/system/blocks/weekly-slot-availability.ts
33688
34333
  var weeklySlotAvailabilityManifest, weeklySlotAvailabilityOptionSchema, weeklySlotAvailabilityDataSchema, weeklySlotAvailabilityBlockDefinition;
33689
34334
  var init_weekly_slot_availability = __esmMin((() => {
@@ -33950,7 +34595,7 @@ var init_runGrouping = __esmMin((() => {}));
33950
34595
  //#endregion
33951
34596
  //#region ../blocks/src/system/blocks/events/shared/fields.ts
33952
34597
  var cardStylingFields, eventDisplayFields, emptyStateField, sectionHeaderFields, layoutField, columnsField;
33953
- var init_fields = __esmMin((() => {
34598
+ var init_fields$1 = __esmMin((() => {
33954
34599
  init_button();
33955
34600
  init_boxStyles$1();
33956
34601
  cardStylingFields = [
@@ -34096,7 +34741,7 @@ var init_shared$2 = __esmMin((() => {
34096
34741
  init_types$2();
34097
34742
  init_schemas();
34098
34743
  init_runGrouping();
34099
- init_fields();
34744
+ init_fields$1();
34100
34745
  init_filtering();
34101
34746
  init_layout$1();
34102
34747
  }));
@@ -34220,6 +34865,9 @@ var init_eventScope = __esmMin((() => {
34220
34865
  //#region ../blocks/src/system/runtime/nodes/events/domain/capacity.ts
34221
34866
  var init_capacity = __esmMin((() => {}));
34222
34867
  //#endregion
34868
+ //#region ../blocks/src/system/runtime/nodes/events/domain/bookability.ts
34869
+ var init_bookability = __esmMin((() => {}));
34870
+ //#endregion
34223
34871
  //#region ../blocks/src/system/runtime/nodes/events/domain/cta.ts
34224
34872
  var init_cta$1 = __esmMin((() => {}));
34225
34873
  //#endregion
@@ -34227,11 +34875,11 @@ var init_cta$1 = __esmMin((() => {}));
34227
34875
  var init_dates = __esmMin((() => {}));
34228
34876
  //#endregion
34229
34877
  //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
34230
- function isRecord$8(value) {
34878
+ function isRecord$7(value) {
34231
34879
  return typeof value === "object" && value !== null && !Array.isArray(value);
34232
34880
  }
34233
34881
  function isRuntimeEventDestination(value) {
34234
- if (!isRecord$8(value) || typeof value.kind !== "string") return false;
34882
+ if (!isRecord$7(value) || typeof value.kind !== "string") return false;
34235
34883
  if (value.kind === "native") return (value.mode === "cms-managed" || value.mode === "system-managed") && typeof value.path === "string";
34236
34884
  return value.kind === "external" && typeof value.url === "string" && typeof value.label === "string";
34237
34885
  }
@@ -34245,20 +34893,33 @@ function resolveRuntimeEventDestination(event) {
34245
34893
  }
34246
34894
  var init_destination = __esmMin((() => {}));
34247
34895
  //#endregion
34896
+ //#region ../blocks/src/system/runtime/nodes/events/domain/duration.ts
34897
+ var init_duration = __esmMin((() => {}));
34898
+ //#endregion
34899
+ //#region ../blocks/src/system/runtime/nodes/events/domain/location.ts
34900
+ var init_location = __esmMin((() => {}));
34901
+ //#endregion
34248
34902
  //#region ../blocks/src/system/runtime/nodes/events/domain/people.ts
34249
34903
  var init_people = __esmMin((() => {}));
34250
34904
  //#endregion
34251
34905
  //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
34252
34906
  var init_pricing = __esmMin((() => {}));
34253
34907
  //#endregion
34908
+ //#region ../blocks/src/system/runtime/nodes/events/domain/quickDates.ts
34909
+ var init_quickDates = __esmMin((() => {}));
34910
+ //#endregion
34254
34911
  //#region ../blocks/src/system/runtime/nodes/events/domain/index.ts
34255
34912
  var init_domain = __esmMin((() => {
34256
34913
  init_capacity();
34914
+ init_bookability();
34257
34915
  init_cta$1();
34258
34916
  init_dates();
34259
34917
  init_destination();
34918
+ init_duration();
34919
+ init_location();
34260
34920
  init_people();
34261
34921
  init_pricing();
34922
+ init_quickDates();
34262
34923
  }));
34263
34924
  //#endregion
34264
34925
  //#region ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
@@ -34384,8 +35045,8 @@ var init_registrationEventAdapter = __esmMin((() => {
34384
35045
  }));
34385
35046
  //#endregion
34386
35047
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
34387
- function buildEventRegistrationDisplay(source) {
34388
- const selectedRun = resolveSelectedWholeSeriesRun(source);
35048
+ function buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents) {
35049
+ const selectedRun = resolveSelectedWholeSeriesRun(scopedSourceEvents);
34389
35050
  if (selectedRun && (!selectedRun.run.enrollmentOpen || toWholeSeriesRegistrationEvent(selectedRun) === null)) return {
34390
35051
  kind: "event-registration",
34391
35052
  state: "registration-closed",
@@ -34393,7 +35054,7 @@ function buildEventRegistrationDisplay(source) {
34393
35054
  titleText: "Registration closed",
34394
35055
  bodyText: "This run is no longer open for bookings."
34395
35056
  };
34396
- const stepLabels = buildEventRegistrationShellStepLabels(source);
35057
+ const stepLabels = buildEventRegistrationShellStepLabels(source, scopedSourceEvents);
34397
35058
  return {
34398
35059
  kind: "event-registration",
34399
35060
  state: "generic-shell",
@@ -34404,8 +35065,8 @@ function buildEventRegistrationDisplay(source) {
34404
35065
  summaryButtonText: source.buttonText?.trim() || "Register"
34405
35066
  };
34406
35067
  }
34407
- function buildEventRegistrationShellStepLabels(source) {
34408
- const selectedRun = resolveSelectedWholeSeriesRun(source);
35068
+ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
35069
+ const selectedRun = resolveSelectedWholeSeriesRun(scopedSourceEvents);
34409
35070
  if (selectedRun) {
34410
35071
  const selectedEvent = toWholeSeriesRegistrationEvent(selectedRun);
34411
35072
  if (!selectedEvent) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
@@ -34415,7 +35076,7 @@ function buildEventRegistrationShellStepLabels(source) {
34415
35076
  event: selectedEvent
34416
35077
  })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
34417
35078
  }
34418
- const scopedEvents = scopeEventRegistrationEvents(source);
35079
+ const scopedEvents = toScopedEventRegistrationEvents(scopedSourceEvents);
34419
35080
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
34420
35081
  const preSelectedEvent = findPreSelectedEvent({
34421
35082
  scopedEvents,
@@ -34428,31 +35089,25 @@ function buildEventRegistrationShellStepLabels(source) {
34428
35089
  event: preSelectedEvent
34429
35090
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
34430
35091
  }
34431
- function scopeEventRegistrationEvents(source) {
34432
- const scoped = scopeEventRegistrationSourceEvents(source);
34433
- return [...toRegistrationEvents(scoped), ...toWholeSeriesRegistrationEvents(scoped)];
35092
+ function toScopedEventRegistrationEvents(scopedSourceEvents) {
35093
+ return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
34434
35094
  }
34435
- /**
34436
- * Every event this surface may register for, from both of its loads.
34437
- *
34438
- * The date page and the run read answer different questions and can name the
34439
- * same occurrence, so the two lists are joined and any occurrence that arrives
34440
- * twice is kept once, in the order the date page gave it.
34441
- */
34442
35095
  function scopeEventRegistrationSourceEvents(source) {
34443
- const byOccurrenceId = /* @__PURE__ */ new Map();
34444
- for (const event of [...source.events ?? [], ...source.wholeSeriesRunEvents ?? []]) if (!byOccurrenceId.has(event.occurrenceId)) byOccurrenceId.set(event.occurrenceId, event);
34445
- return resolveEventRegistrationScopedEvents([...byOccurrenceId.values()], {
35096
+ return resolveEventRegistrationScopedEvents(source.wholeSeriesRunEvents ?? source.events ?? [], {
34446
35097
  occurrenceContext: source.occurrenceContext,
34447
35098
  subject: source.subject
34448
35099
  });
34449
35100
  }
35101
+ function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
35102
+ if (source.events == null && source.wholeSeriesRunEvents == null) return null;
35103
+ return [...scopedSourceEvents];
35104
+ }
34450
35105
  /**
34451
35106
  * The one run this surface is registering for, when the scoped events describe
34452
35107
  * exactly one. More than one run means the visitor still has to choose.
34453
35108
  */
34454
- function resolveSelectedWholeSeriesRun(source) {
34455
- const runs = groupPublicEventsByRun(scopeEventRegistrationSourceEvents(source));
35109
+ function resolveSelectedWholeSeriesRun(scopedSourceEvents) {
35110
+ const runs = groupPublicEventsByRun(scopedSourceEvents);
34456
35111
  return runs.length === 1 ? runs[0] : null;
34457
35112
  }
34458
35113
  function shellLabelForRegistrationStep(step, events) {
@@ -34480,13 +35135,13 @@ function buildEventRegistrationShellBodyText(stepLabels) {
34480
35135
  return "Preparing dates, tickets, and booking details.";
34481
35136
  }
34482
35137
  function normalizeEventRegistrationEventInput(value) {
34483
- if (!isRecord$7(value)) return value;
35138
+ if (!isRecord$6(value)) return value;
34484
35139
  return {
34485
35140
  ...value,
34486
35141
  destination: resolveRuntimeEventDestination(value)
34487
35142
  };
34488
35143
  }
34489
- function isRecord$7(value) {
35144
+ function isRecord$6(value) {
34490
35145
  return typeof value === "object" && value !== null && !Array.isArray(value);
34491
35146
  }
34492
35147
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, eventRegistrationPublicEventSchema, eventRegistrationHydrationSchemaShape, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationBlockRuntime;
@@ -34577,9 +35232,10 @@ var init_event_registration_interactive = __esmMin((() => {
34577
35232
  render: createZodCodec(eventRegistrationRenderSchema)
34578
35233
  },
34579
35234
  buildRender: (source) => {
34580
- const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
35235
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
35236
+ const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
34581
35237
  return {
34582
- display: buildEventRegistrationDisplay(source),
35238
+ display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
34583
35239
  hydration: {
34584
35240
  occurrenceContext: source.occurrenceContext ?? null,
34585
35241
  subject: source.subject ?? null,
@@ -34786,6 +35442,11 @@ var init_event_registration = __esmMin((() => {
34786
35442
  dataLoaders: {
34787
35443
  events: {
34788
35444
  endpoint: "listPublicEvents",
35445
+ when: { $bind: {
35446
+ from: "$root.subject.isWholeSeriesBooking",
35447
+ fallback: true,
35448
+ transforms: [{ id: "boolean.not" }]
35449
+ } },
34789
35450
  params: {
34790
35451
  siteId: { $bind: { from: "$root.siteId" } },
34791
35452
  limit: "50",
@@ -34807,13 +35468,9 @@ var init_event_registration = __esmMin((() => {
34807
35468
  /**
34808
35469
  * The runs this page can register for, finished ones included.
34809
35470
  *
34810
- * The `events` page above is date-bounded, so a run whose first session has
34811
- * passed contributes no rows to it and the surface would have nothing to
34812
- * render as closed. This asks for runs instead, and only on a page whose
34813
- * subject books whole runs. It is scoped exactly like the date page — same
34814
- * series, same run subroute — because scope and grain are separate
34815
- * questions. The two lists are joined by occurrence, so a run that appears
34816
- * in both is still one run.
35471
+ * A run read is the sole Event source on a whole-series surface. It is
35472
+ * status-bounded rather than date-bounded, so completed runs can still
35473
+ * render their closed state and every run carries its complete schedule.
34817
35474
  */
34818
35475
  wholeSeriesRunEvents: {
34819
35476
  endpoint: "listPublicEvents",
@@ -37562,7 +38219,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
37562
38219
  return keys.length >= 2 ? keys : [];
37563
38220
  }
37564
38221
  function normalizeOfferingsPreviewContentForWrite(value) {
37565
- if (!isRecord$6(value)) return null;
38222
+ if (!isRecord$5(value)) return null;
37566
38223
  const groupOrderValue = value.groupOrder;
37567
38224
  if (Array.isArray(groupOrderValue)) {
37568
38225
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -37575,7 +38232,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
37575
38232
  ...value,
37576
38233
  groupOrder: []
37577
38234
  };
37578
- const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord$6) : []);
38235
+ const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord$5) : []);
37579
38236
  return legacyOrder.length > 0 ? {
37580
38237
  ...value,
37581
38238
  groupOrder: legacyOrder
@@ -37589,7 +38246,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
37589
38246
  }
37590
38247
  return keys;
37591
38248
  }
37592
- function isRecord$6(value) {
38249
+ function isRecord$5(value) {
37593
38250
  return typeof value === "object" && value !== null && !Array.isArray(value);
37594
38251
  }
37595
38252
  var OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT, OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE, OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS, OFFERINGS_PREVIEW_AUTHORABLE_SOURCE_KEYS, OFFERINGS_PREVIEW_SOURCE_KEYS;
@@ -37631,124 +38288,18 @@ var init_model = __esmMin((() => {
37631
38288
  }]));
37632
38289
  }));
37633
38290
  //#endregion
37634
- //#region ../blocks/src/system/blocks/offerings-preview/index.ts
37635
- /**
37636
- * One row per whole-series run, finished runs included.
37637
- *
37638
- * A page of dates cannot answer this: a finished run has no upcoming date, and
37639
- * a long run would spend the whole page on its own sessions. `readIntent:
37640
- * 'runs'` asks for runs instead, so `itemLimit` counts run cards rather than
37641
- * dates, and each card arrives with the run's complete schedule.
37642
- */
37643
- function wholeSeriesRunLoader() {
37644
- return eventPresetLoader(WHOLE_SERIES_EVENT_PRESETS_PARAM, { readIntent: "runs" });
37645
- }
37646
- function eventPresetLoader(eventPresets, extraParams = {}) {
37647
- return {
37648
- endpoint: "listPublicEvents",
37649
- params: {
37650
- siteId: { $bind: { from: "$root.siteId" } },
37651
- limit: { $bind: {
37652
- from: "content.itemLimit",
37653
- fallback: "3"
37654
- } },
37655
- stage: { $bind: {
37656
- from: "$root.previewStage",
37657
- fallback: "published"
37658
- } },
37659
- detailLevel: "listing",
37660
- readProfile: "listing-card",
37661
- eventPresets,
37662
- ...extraParams
37663
- },
37664
- mode: "server"
37665
- };
37666
- }
38291
+ //#region ../blocks/src/system/blocks/offerings-preview/fields.ts
37667
38292
  function labelForOfferingPreviewSourceKey(sourceKey) {
37668
38293
  const eventDefinition = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.find((definition) => definition.sourceKey === sourceKey);
37669
38294
  if (eventDefinition) return eventDefinition.label;
37670
38295
  return "Courses";
37671
38296
  }
37672
- function normalizeOfferingsPreviewBlockContent(value) {
37673
- const record = normalizeOfferingsPreviewContentForWrite(value);
37674
- if (!record) return {};
37675
- const normalized = {};
37676
- if (typeof record.heading === "string" || record.heading === null) normalized.heading = record.heading;
37677
- if ("description" in record) normalized.description = record.description;
37678
- if (isOfferingsPreviewItemLimit(record.itemLimit)) normalized.itemLimit = record.itemLimit;
37679
- if (Array.isArray(record.groupOrder)) normalized.groupOrder = record.groupOrder.filter(isOfferingsPreviewSourceKey);
37680
- else if (record.groupOrder === null) normalized.groupOrder = null;
37681
- if (Array.isArray(record.groupOverrides)) normalized.groupOverrides = record.groupOverrides.flatMap(normalizeOfferingsPreviewGroupOverride);
37682
- else if (record.groupOverrides === null) normalized.groupOverrides = null;
37683
- const cardStyles = normalizeCardStylesContent(record._cardStyles);
37684
- if (cardStyles !== void 0) normalized._cardStyles = cardStyles;
37685
- if (isButtonVariant(record.buttonVariant)) normalized.buttonVariant = record.buttonVariant;
37686
- if (typeof record.buttonText === "string" || record.buttonText === null) normalized.buttonText = record.buttonText;
37687
- if (typeof record.emptyMessage === "string" || record.emptyMessage === null) normalized.emptyMessage = record.emptyMessage;
37688
- const sectionStyles = normalizeSectionStylesContent(record._sectionStyles);
37689
- if (sectionStyles !== void 0) normalized._sectionStyles = sectionStyles;
37690
- return normalized;
37691
- }
37692
- function isOfferingsPreviewItemLimit(value) {
37693
- return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
37694
- }
37695
- function normalizeOfferingsPreviewGroupOverride(value) {
37696
- if (!isRecord$5(value)) return [];
37697
- const override = {};
37698
- if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) override.sourceKey = value.sourceKey;
37699
- if (typeof value.title === "string" || value.title === null) override.title = value.title;
37700
- if (typeof value.intro === "string" || value.intro === null) override.intro = value.intro;
37701
- if (typeof value.hidden === "boolean" || value.hidden === null) override.hidden = value.hidden;
37702
- if (value.presentation === "compact-list" || value.presentation === "single-card" || value.presentation === "featured-summary" || value.presentation === null) override.presentation = value.presentation;
37703
- if (value.ctaMode === "auto" || value.ctaMode === "custom" || value.ctaMode === "hidden" || value.ctaMode === null) override.ctaMode = value.ctaMode;
37704
- if (typeof value.ctaHref === "string" || value.ctaHref === null) override.ctaHref = value.ctaHref;
37705
- if (typeof value.ctaLabel === "string" || value.ctaLabel === null) override.ctaLabel = value.ctaLabel;
37706
- return [override];
37707
- }
37708
- function isButtonVariant(value) {
37709
- return value === null || isBlockButtonRole(value);
37710
- }
37711
- function normalizeCardStylesContent(value) {
37712
- return normalizeBoxStylesContent(value);
37713
- }
37714
- function normalizeSectionStylesContent(value) {
37715
- return normalizeBoxStylesContent(value);
37716
- }
37717
- function normalizeBoxStylesContent(value) {
37718
- if (value === null) return null;
37719
- if (!isRecord$5(value)) return void 0;
37720
- const { background: _background, ...rest } = value;
37721
- const background = parseBackgroundContent(value.background);
37722
- return {
37723
- ...rest,
37724
- ...background ? { background } : {}
37725
- };
37726
- }
37727
- function isRecord$5(value) {
37728
- return typeof value === "object" && value !== null && !Array.isArray(value);
37729
- }
37730
- var WHOLE_SERIES_EVENT_PRESETS_PARAM, publicRouteCandidatesSchema, groupOverrideFields, offeringsPreviewFields, offeringsPreviewEventDataBindings, offeringsPreviewConfig, offeringsPreviewManifest, optionalPublicEventsArraySchema, offeringsPreviewEventDataSchemas, offeringsPreviewEventDataLoaders, offeringsPreviewBlockDefinition;
37731
- var init_offerings_preview = __esmMin((() => {
37732
- init_src$4();
37733
- init_link();
37734
- init_builder$1();
37735
- init_styledSection();
37736
- init_fragments$1();
37737
- init_boxStyles$1();
37738
- init_backgroundContent();
37739
- init_defineBlock();
38297
+ var groupOverrideFields, offeringsPreviewFields;
38298
+ var init_fields = __esmMin((() => {
37740
38299
  init_shared$2();
37741
- init_buttonRoles();
38300
+ init_boxStyles$1();
37742
38301
  init_button();
37743
38302
  init_model();
37744
- WHOLE_SERIES_EVENT_PRESETS_PARAM = WHOLE_SERIES_EVENT_PRESET_VALUES.join(",");
37745
- publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
37746
- entityId: z.string(),
37747
- path: z.string(),
37748
- title: z.string(),
37749
- kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
37750
- contentTypeKey: z.string().nullable().optional()
37751
- })) });
37752
38303
  groupOverrideFields = [
37753
38304
  {
37754
38305
  id: "sourceKey",
@@ -37954,7 +38505,163 @@ var init_offerings_preview = __esmMin((() => {
37954
38505
  renderInHeader: false
37955
38506
  })
37956
38507
  ];
38508
+ }));
38509
+ //#endregion
38510
+ //#region ../blocks/src/system/blocks/offerings-preview/index.ts
38511
+ function offeringsPreviewHeaderNodes() {
38512
+ return [text({
38513
+ as: "h2",
38514
+ className: { $bind: {
38515
+ from: "content.displayMode",
38516
+ fallback: "rb-text-center",
38517
+ transforms: [{
38518
+ id: "value.equals",
38519
+ options: { value: "catalogue" }
38520
+ }, {
38521
+ id: "ui.conditionalClass",
38522
+ options: {
38523
+ whenTrue: "rb-text-left",
38524
+ whenFalse: "rb-text-center"
38525
+ }
38526
+ }]
38527
+ } }
38528
+ }, bind$1("content.heading"), when("content.heading")), richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description"))];
38529
+ }
38530
+ /**
38531
+ * One row per whole-series run, finished runs included.
38532
+ *
38533
+ * A page of dates cannot answer this: a finished run has no upcoming date, and
38534
+ * a long run would spend the whole page on its own sessions. `readIntent:
38535
+ * 'runs'` asks for runs instead, so `itemLimit` counts run cards rather than
38536
+ * dates, and each card arrives with the run's complete schedule.
38537
+ */
38538
+ function wholeSeriesRunLoader() {
38539
+ return eventPresetLoader(WHOLE_SERIES_EVENT_PRESETS_PARAM, { readIntent: "runs" });
38540
+ }
38541
+ function eventPresetLoader(eventPresets, extraParams = {}) {
38542
+ return {
38543
+ endpoint: "listPublicEvents",
38544
+ when: previewMode,
38545
+ params: {
38546
+ siteId: { $bind: { from: "$root.siteId" } },
38547
+ limit: { $bind: {
38548
+ from: "content.itemLimit",
38549
+ fallback: "3"
38550
+ } },
38551
+ stage: { $bind: {
38552
+ from: "$root.previewStage",
38553
+ fallback: "published"
38554
+ } },
38555
+ detailLevel: "listing",
38556
+ readProfile: "listing-card",
38557
+ eventPresets,
38558
+ ...extraParams
38559
+ },
38560
+ mode: "server"
38561
+ };
38562
+ }
38563
+ function normalizeOfferingsPreviewBlockContent(value) {
38564
+ const record = normalizeOfferingsPreviewContentForWrite(value);
38565
+ if (!record) return { displayMode: DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE };
38566
+ const normalized = { displayMode: normalizeOfferingsPreviewDisplayMode(record.displayMode) };
38567
+ if (typeof record.heading === "string" || record.heading === null) normalized.heading = record.heading;
38568
+ if ("description" in record) normalized.description = record.description;
38569
+ if (isOfferingsPreviewItemLimit(record.itemLimit)) normalized.itemLimit = record.itemLimit;
38570
+ if (Array.isArray(record.groupOrder)) normalized.groupOrder = record.groupOrder.filter(isOfferingsPreviewSourceKey);
38571
+ else if (record.groupOrder === null) normalized.groupOrder = null;
38572
+ if (Array.isArray(record.groupOverrides)) normalized.groupOverrides = record.groupOverrides.flatMap(normalizeOfferingsPreviewGroupOverride);
38573
+ else if (record.groupOverrides === null) normalized.groupOverrides = null;
38574
+ const cardStyles = normalizeCardStylesContent(record._cardStyles);
38575
+ if (cardStyles !== void 0) normalized._cardStyles = cardStyles;
38576
+ if (isButtonVariant(record.buttonVariant)) normalized.buttonVariant = record.buttonVariant;
38577
+ if (typeof record.buttonText === "string" || record.buttonText === null) normalized.buttonText = record.buttonText;
38578
+ if (typeof record.emptyMessage === "string" || record.emptyMessage === null) normalized.emptyMessage = record.emptyMessage;
38579
+ const sectionStyles = normalizeSectionStylesContent(record._sectionStyles);
38580
+ if (sectionStyles !== void 0) normalized._sectionStyles = sectionStyles;
38581
+ return normalized;
38582
+ }
38583
+ function normalizeOfferingsPreviewDisplayMode(value) {
38584
+ return value === "catalogue" ? "catalogue" : DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE;
38585
+ }
38586
+ function isOfferingsPreviewItemLimit(value) {
38587
+ return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
38588
+ }
38589
+ function normalizeOfferingsPreviewGroupOverride(value) {
38590
+ if (!isRecord$4(value)) return [];
38591
+ const override = {};
38592
+ if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) override.sourceKey = value.sourceKey;
38593
+ if (typeof value.title === "string" || value.title === null) override.title = value.title;
38594
+ if (typeof value.intro === "string" || value.intro === null) override.intro = value.intro;
38595
+ if (typeof value.hidden === "boolean" || value.hidden === null) override.hidden = value.hidden;
38596
+ if (value.presentation === "compact-list" || value.presentation === "single-card" || value.presentation === "featured-summary" || value.presentation === null) override.presentation = value.presentation;
38597
+ if (value.ctaMode === "auto" || value.ctaMode === "custom" || value.ctaMode === "hidden" || value.ctaMode === null) override.ctaMode = value.ctaMode;
38598
+ if (typeof value.ctaHref === "string" || value.ctaHref === null) override.ctaHref = value.ctaHref;
38599
+ if (typeof value.ctaLabel === "string" || value.ctaLabel === null) override.ctaLabel = value.ctaLabel;
38600
+ return [override];
38601
+ }
38602
+ function isButtonVariant(value) {
38603
+ return value === null || isBlockButtonRole(value);
38604
+ }
38605
+ function normalizeCardStylesContent(value) {
38606
+ return normalizeBoxStylesContent(value);
38607
+ }
38608
+ function normalizeSectionStylesContent(value) {
38609
+ return normalizeBoxStylesContent(value);
38610
+ }
38611
+ function normalizeBoxStylesContent(value) {
38612
+ if (value === null) return null;
38613
+ if (!isRecord$4(value)) return void 0;
38614
+ const { background: _background, ...rest } = value;
38615
+ const background = parseBackgroundContent(value.background);
38616
+ return {
38617
+ ...rest,
38618
+ ...background ? { background } : {}
38619
+ };
38620
+ }
38621
+ function isRecord$4(value) {
38622
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38623
+ }
38624
+ var WHOLE_SERIES_EVENT_PRESETS_PARAM, publicRouteCandidatesSchema, offeringsPreviewEventDataBindings, DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE, displayModeBinding, catalogueMode, previewMode, offeringsPreviewConfig, offeringsPreviewManifest, optionalPublicEventsArraySchema, offeringsPreviewEventDataSchemas, offeringsPreviewEventDataLoaders, offeringsPreviewBlockDefinition;
38625
+ var init_offerings_preview = __esmMin((() => {
38626
+ init_fields();
38627
+ init_src$4();
38628
+ init_link();
38629
+ init_builder$1();
38630
+ init_styledSection();
38631
+ init_fragments$1();
38632
+ init_backgroundContent();
38633
+ init_defineBlock();
38634
+ init_shared$2();
38635
+ init_buttonRoles();
38636
+ init_model();
38637
+ WHOLE_SERIES_EVENT_PRESETS_PARAM = WHOLE_SERIES_EVENT_PRESET_VALUES.join(",");
38638
+ publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
38639
+ entityId: z.string(),
38640
+ path: z.string(),
38641
+ title: z.string(),
38642
+ kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
38643
+ contentTypeKey: z.string().nullable().optional()
38644
+ })) });
37957
38645
  offeringsPreviewEventDataBindings = Object.fromEntries(OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.dataKey, { $bind: { from: `data.${definition.dataKey}` } }]));
38646
+ DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE = "preview";
38647
+ displayModeBinding = {
38648
+ from: "content.displayMode",
38649
+ fallback: DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE
38650
+ };
38651
+ catalogueMode = { $bind: {
38652
+ ...displayModeBinding,
38653
+ transforms: [{
38654
+ id: "value.equals",
38655
+ options: { value: "catalogue" }
38656
+ }]
38657
+ } };
38658
+ previewMode = { $bind: {
38659
+ ...displayModeBinding,
38660
+ transforms: [{
38661
+ id: "value.equals",
38662
+ options: { value: "preview" }
38663
+ }]
38664
+ } };
37958
38665
  offeringsPreviewConfig = {
37959
38666
  id: "block.offerings-preview",
37960
38667
  version: "1.0.0",
@@ -37985,48 +38692,45 @@ var init_offerings_preview = __esmMin((() => {
37985
38692
  ],
37986
38693
  icon: "PanelsTopLeft",
37987
38694
  layout: [styledSection({
37988
- children: sectionContainer([
37989
- text({
37990
- as: "h2",
37991
- className: "rb-text-center"
37992
- }, bind$1("content.heading"), when("content.heading")),
37993
- richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description")),
37994
- el$1("offerings-preview", {
37995
- bookingOfferingPresets: { $bind: {
37996
- from: "$root.bookingOfferingPresets",
37997
- fallback: []
37998
- } },
37999
- groupOverrides: { $bind: {
38000
- from: "content.groupOverrides",
38001
- fallback: []
38002
- } },
38003
- groupOrder: { $bind: { from: "content.groupOrder" } },
38004
- cardStyles: { $bind: { from: "content._cardStyles" } },
38005
- itemLimit: { $bind: {
38006
- from: "content.itemLimit",
38007
- fallback: "3"
38008
- } },
38009
- buttonVariant: { $bind: {
38010
- from: "content.buttonVariant",
38011
- fallback: "primary"
38012
- } },
38013
- buttonText: { $bind: {
38014
- from: "content.buttonText",
38015
- fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT
38016
- } },
38017
- emptyMessage: { $bind: {
38018
- from: "content.emptyMessage",
38019
- fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
38020
- } },
38021
- previewStage: { $bind: {
38022
- from: "$root.previewStage",
38023
- fallback: "published"
38024
- } },
38025
- routeCandidates: { $bind: { from: "data.routeCandidates" } },
38026
- wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
38027
- ...offeringsPreviewEventDataBindings
38028
- })
38029
- ], { gap: "lg" }),
38695
+ children: sectionContainer([el$1("offerings-preview", {
38696
+ displayMode: { $bind: displayModeBinding },
38697
+ pathname: { $bind: { from: "$root.pathname" } },
38698
+ catalogueEvents: { $bind: { from: "data.catalogueEvents" } },
38699
+ quickDateEvents: { $bind: { from: "data.quickDateEvents" } },
38700
+ bookingOfferingPresets: { $bind: {
38701
+ from: "$root.bookingOfferingPresets",
38702
+ fallback: []
38703
+ } },
38704
+ groupOverrides: { $bind: {
38705
+ from: "content.groupOverrides",
38706
+ fallback: []
38707
+ } },
38708
+ groupOrder: { $bind: { from: "content.groupOrder" } },
38709
+ cardStyles: { $bind: { from: "content._cardStyles" } },
38710
+ itemLimit: { $bind: {
38711
+ from: "content.itemLimit",
38712
+ fallback: "3"
38713
+ } },
38714
+ buttonVariant: { $bind: {
38715
+ from: "content.buttonVariant",
38716
+ fallback: "primary"
38717
+ } },
38718
+ buttonText: { $bind: {
38719
+ from: "content.buttonText",
38720
+ fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT
38721
+ } },
38722
+ emptyMessage: { $bind: {
38723
+ from: "content.emptyMessage",
38724
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
38725
+ } },
38726
+ previewStage: { $bind: {
38727
+ from: "$root.previewStage",
38728
+ fallback: "published"
38729
+ } },
38730
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
38731
+ wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
38732
+ ...offeringsPreviewEventDataBindings
38733
+ }, offeringsPreviewHeaderNodes())], { gap: "lg" }),
38030
38734
  baseClass: "",
38031
38735
  spacing: "comfortable"
38032
38736
  })]
@@ -38041,16 +38745,48 @@ var init_offerings_preview = __esmMin((() => {
38041
38745
  dataSchemas: {
38042
38746
  ...offeringsPreviewEventDataSchemas,
38043
38747
  routeCandidates: publicRouteCandidatesSchema.optional(),
38044
- wholeSeriesRunEvents: optionalPublicEventsArraySchema
38748
+ wholeSeriesRunEvents: optionalPublicEventsArraySchema,
38749
+ catalogueEvents: optionalPublicEventsArraySchema,
38750
+ quickDateEvents: optionalPublicEventsArraySchema
38045
38751
  },
38046
38752
  dataLoaders: {
38047
38753
  ...offeringsPreviewEventDataLoaders,
38048
38754
  routeCandidates: {
38049
38755
  endpoint: "listPublicRouteCandidates",
38756
+ when: previewMode,
38050
38757
  params: {},
38051
38758
  mode: "server"
38052
38759
  },
38053
- wholeSeriesRunEvents: wholeSeriesRunLoader()
38760
+ wholeSeriesRunEvents: wholeSeriesRunLoader(),
38761
+ catalogueEvents: {
38762
+ endpoint: "listPublicEvents",
38763
+ when: catalogueMode,
38764
+ params: {
38765
+ stage: { $bind: {
38766
+ from: "$root.previewStage",
38767
+ fallback: "published"
38768
+ } },
38769
+ detailLevel: "listing",
38770
+ readProfile: "listing-card",
38771
+ readIntent: "catalogue"
38772
+ },
38773
+ mode: "server"
38774
+ },
38775
+ quickDateEvents: {
38776
+ endpoint: "listPublicEvents",
38777
+ when: catalogueMode,
38778
+ params: {
38779
+ stage: { $bind: {
38780
+ from: "$root.previewStage",
38781
+ fallback: "published"
38782
+ } },
38783
+ detailLevel: "listing",
38784
+ readProfile: "listing-card",
38785
+ readIntent: "occurrences",
38786
+ limit: 40
38787
+ },
38788
+ mode: "server"
38789
+ }
38054
38790
  }
38055
38791
  };
38056
38792
  }));
@@ -41397,87 +42133,13 @@ var init_gifting = __esmMin((() => {
41397
42133
  };
41398
42134
  }));
41399
42135
  //#endregion
41400
- //#region ../blocks/src/system/blocks/newsletter-signup-destination.ts
41401
- function parseNewsletterSignupBlockId(value) {
41402
- const trimmed = parseTrimmedString(value);
41403
- return trimmed && BLOCK_ID_PATTERN.test(trimmed) ? trimmed : null;
41404
- }
41405
- function parseSignedNewsletterDestinationRef(value) {
41406
- const trimmed = parseTrimmedString(value);
41407
- return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
41408
- }
41409
- function buildNewsletterSignupBlockRef(blockId) {
41410
- const parsed = parseNewsletterSignupBlockId(blockId);
41411
- return parsed ? {
41412
- tag: "block_ref",
41413
- blockId: parsed
41414
- } : null;
41415
- }
41416
- function normalizeNewsletterSignupEditorValuesForDestination(values) {
41417
- const destinationProvider = parseNewsletterSignupDestinationProvider(values.destinationProvider) ?? "riverbank";
41418
- if (destinationProvider === "mailchimp") return {
41419
- destinationProvider,
41420
- mailchimpAudienceId: values.mailchimpAudienceId,
41421
- mailchimpTags: values.mailchimpTags
41422
- };
41423
- return {
41424
- destinationProvider,
41425
- listId: values.listId,
41426
- tags: values.tags
41427
- };
41428
- }
41429
- function deriveNewsletterSignupRuntimeSource(values) {
41430
- const normalized = normalizeNewsletterSignupEditorValuesForDestination(values);
41431
- if (normalized.destinationProvider === "mailchimp") return {
41432
- destinationProvider: "mailchimp",
41433
- listId: null,
41434
- tags: null
41435
- };
41436
- return {
41437
- destinationProvider: "riverbank",
41438
- listId: parseTrimmedString(normalized.listId),
41439
- tags: parseTrimmedString(normalized.tags)
41440
- };
41441
- }
41442
- function sanitizeNewsletterSignupPublicContent(content) {
41443
- if (!isRecord$4(content)) return content;
41444
- const provider = parseNewsletterSignupDestinationProvider(content.destinationProvider) ?? getProviderFromExplicitDestination(content.destination);
41445
- const { destination: _destination, destinationProvider: _destinationProvider, mailchimpAudienceId: _mailchimpAudienceId, mailchimpTags: _mailchimpTags, listId, tags, ...publicContent } = content;
41446
- const mutablePublicContent = { ...publicContent };
41447
- if (provider !== "mailchimp") {
41448
- if ("listId" in content) mutablePublicContent.listId = listId;
41449
- if ("tags" in content) mutablePublicContent.tags = tags;
41450
- }
41451
- return mutablePublicContent;
41452
- }
41453
- function getProviderFromExplicitDestination(destination) {
41454
- if (!isRecord$4(destination) || typeof destination.tag !== "string") return null;
41455
- if (destination.tag === "riverbank_list") return "riverbank";
41456
- if (destination.tag === "mailchimp_audience") return "mailchimp";
41457
- return null;
41458
- }
41459
- function parseTrimmedString(value) {
41460
- if (typeof value !== "string") return null;
41461
- const trimmed = value.trim();
41462
- return trimmed.length > 0 ? trimmed : null;
41463
- }
41464
- function isRecord$4(value) {
41465
- return typeof value === "object" && value !== null;
41466
- }
41467
- var BLOCK_ID_PATTERN, SIGNED_DESTINATION_REF_PATTERN;
41468
- var init_newsletter_signup_destination = __esmMin((() => {
41469
- init_src$4();
41470
- BLOCK_ID_PATTERN = /^[A-Za-z0-9._:-]{1,200}$/;
41471
- SIGNED_DESTINATION_REF_PATTERN = /^[A-Za-z0-9._~-]{16,1000}$/;
41472
- }));
41473
- //#endregion
41474
42136
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
41475
42137
  /**
41476
42138
  * Get form fields based on preset configuration.
41477
42139
  */
41478
- function getPresetFields(preset, options) {
41479
- const includePhone = Boolean(options?.includePhone);
41480
- switch (preset) {
42140
+ function getGlobalFormFields(form) {
42141
+ const includePhone = form.includeOptionalPhone;
42142
+ switch (form.fields.preset) {
41481
42143
  case "emailOnly": return withOptionalPhone([{
41482
42144
  id: "email",
41483
42145
  type: "email",
@@ -41495,7 +42157,7 @@ function getPresetFields(preset, options) {
41495
42157
  id: "name",
41496
42158
  type: "text",
41497
42159
  label: "Name",
41498
- required: false,
42160
+ required: form.fields.name === "required",
41499
42161
  placeholder: "Your name"
41500
42162
  }], includePhone);
41501
42163
  case "emailFirstLast": return withOptionalPhone([
@@ -41510,14 +42172,14 @@ function getPresetFields(preset, options) {
41510
42172
  id: "firstName",
41511
42173
  type: "text",
41512
42174
  label: "First Name",
41513
- required: false,
42175
+ required: form.fields.firstName === "required",
41514
42176
  placeholder: "First name"
41515
42177
  },
41516
42178
  {
41517
42179
  id: "lastName",
41518
42180
  type: "text",
41519
42181
  label: "Last Name",
41520
- required: false,
42182
+ required: form.fields.lastName === "required",
41521
42183
  placeholder: "Last name"
41522
42184
  }
41523
42185
  ], includePhone);
@@ -41533,14 +42195,14 @@ function getPresetFields(preset, options) {
41533
42195
  id: "name",
41534
42196
  type: "text",
41535
42197
  label: "Name",
41536
- required: false,
42198
+ required: form.fields.name === "required",
41537
42199
  placeholder: "Your name"
41538
42200
  },
41539
42201
  {
41540
42202
  id: "company",
41541
42203
  type: "text",
41542
42204
  label: "Company",
41543
- required: false,
42205
+ required: form.fields.company === "required",
41544
42206
  placeholder: "Company name"
41545
42207
  }
41546
42208
  ], includePhone);
@@ -41561,68 +42223,142 @@ var init_newsletter_form_types = __esmMin((() => {}));
41561
42223
  //#endregion
41562
42224
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
41563
42225
  function buildNewsletterDisplay(source) {
41564
- const preset = source.preset ?? "emailOnly";
41565
- const includePhone = source.includePhone ?? false;
42226
+ const context = source.mailingList;
42227
+ const form = context?.tag === "configured" ? context.form : {
42228
+ fields: { preset: "emailOnly" },
42229
+ includeOptionalPhone: false,
42230
+ buttonLabel: "Subscribe",
42231
+ privacyNote: null
42232
+ };
42233
+ const targeting = source.targeting ?? { mode: "default" };
42234
+ const choices = resolveRuntimeChoices(context, targeting);
41566
42235
  return {
41567
42236
  kind: "newsletter-form",
42237
+ availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
41568
42238
  className: source.className ?? null,
41569
- buttonLabel: source.buttonLabel?.trim() || "Subscribe",
42239
+ buttonLabel: form.buttonLabel,
41570
42240
  buttonVariant: source.buttonVariant ?? "primary",
41571
- successMessage: source.successMessage ?? "Thanks for subscribing!",
41572
- privacyNote: source.privacyNote ?? null,
41573
- fields: getPresetFields(preset, { includePhone })
42241
+ privacyNote: form.privacyNote,
42242
+ fields: getGlobalFormFields(form),
42243
+ choices
41574
42244
  };
41575
42245
  }
41576
42246
  function projectNewsletterFormHydrationTarget(source) {
41577
42247
  switch (source.source) {
41578
42248
  case "block": {
41579
- const destinationRef = buildNewsletterSignupBlockRef(source.blockId);
41580
- if (destinationRef?.tag === "block_ref") return {
42249
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
42250
+ if (sourceRef?.tag === "block_ref") return {
41581
42251
  tag: "block-source",
41582
- destinationRef
42252
+ sourceRef
41583
42253
  };
41584
42254
  return {
41585
- tag: "legacy-direct-list",
41586
- listId: source.listId ?? null
42255
+ tag: "block-source",
42256
+ sourceRef: null
41587
42257
  };
41588
42258
  }
41589
42259
  case "signed-footer": return {
41590
42260
  tag: "signed-footer-source",
41591
- destinationRef: source.destinationRef
41592
- };
41593
- case "legacy-direct-list": return {
41594
- tag: "legacy-direct-list",
41595
- listId: source.listId
42261
+ sourceRef: source.sourceRef
41596
42262
  };
42263
+ case "preview": return { tag: "preview" };
41597
42264
  default: return assertNever$4(source);
41598
42265
  }
41599
42266
  }
41600
- function parseRequiredNewsletterSignupBlockId(value) {
41601
- const parsed = parseNewsletterSignupBlockId(value);
41602
- if (!parsed) throw new Error("Newsletter signup block destination ref requires blockId");
42267
+ function resolveRuntimeChoices(context, targeting) {
42268
+ if (context?.tag !== "configured" || targeting.mode !== "custom" || targeting.selection.tag !== "visitor_choice" || context.provider.provider !== targeting.provider) return [];
42269
+ switch (targeting.provider) {
42270
+ case "native": {
42271
+ const offered = new Set(targeting.selection.offeredTopicIds);
42272
+ return context.provider.provider === "native" ? context.provider.topics.filter((item) => offered.has(item.id)).map((item) => ({
42273
+ id: item.id,
42274
+ label: item.name
42275
+ })) : [];
42276
+ }
42277
+ case "brevo": {
42278
+ const offered = new Set(targeting.selection.offeredListIds);
42279
+ return context.provider.provider === "brevo" ? context.provider.lists.filter((item) => offered.has(item.id)).map((item) => ({
42280
+ id: String(item.id),
42281
+ label: item.name
42282
+ })) : [];
42283
+ }
42284
+ case "mailchimp": {
42285
+ const offered = new Set(targeting.selection.offeredInterestIds);
42286
+ return (context.provider.provider === "mailchimp" ? context.provider.audiences.find((item) => item.id === targeting.audienceId) : void 0)?.interests.filter((item) => offered.has(item.id)).map((item) => ({
42287
+ id: item.id,
42288
+ label: item.name
42289
+ })) ?? [];
42290
+ }
42291
+ }
42292
+ }
42293
+ function runtimeTargetingIsAvailable(context, targeting, choices) {
42294
+ if (context?.tag !== "configured") return false;
42295
+ const provider = context.provider;
42296
+ if (targeting.mode === "default") switch (provider.provider) {
42297
+ case "native": return provider.topics.some((item) => item.id === provider.defaultTopicId);
42298
+ case "brevo": return provider.lists.some((item) => item.id === provider.defaultListId);
42299
+ case "mailchimp": return provider.audiences.some((item) => item.id === provider.defaultAudienceId);
42300
+ }
42301
+ if (targeting.provider !== provider.provider) return false;
42302
+ switch (targeting.provider) {
42303
+ case "native": return provider.provider === "native" && nativeTargetIsAvailable(provider, targeting, choices);
42304
+ case "brevo": return provider.provider === "brevo" && brevoTargetIsAvailable(provider, targeting, choices);
42305
+ case "mailchimp": return provider.provider === "mailchimp" && mailchimpTargetIsAvailable(provider, targeting, choices);
42306
+ }
42307
+ }
42308
+ function nativeTargetIsAvailable(provider, targeting, choices) {
42309
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.topicIds : targeting.selection.offeredTopicIds;
42310
+ return ids.every((id) => provider.topics.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42311
+ }
42312
+ function brevoTargetIsAvailable(provider, targeting, choices) {
42313
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.listIds : targeting.selection.offeredListIds;
42314
+ return ids.every((id) => provider.lists.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42315
+ }
42316
+ function mailchimpTargetIsAvailable(provider, targeting, choices) {
42317
+ const audience = provider.audiences.find((item) => item.id === targeting.audienceId);
42318
+ if (!audience) return false;
42319
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.interestIds : targeting.selection.offeredInterestIds;
42320
+ return ids.every((id) => audience.interests.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42321
+ }
42322
+ function parseRequiredMailingListSignupBlockId(value) {
42323
+ const parsed = parseMailingListBlockId(value);
42324
+ if (!parsed) throw new Error("Mailing-list signup block source ref requires blockId");
41603
42325
  return parsed;
41604
42326
  }
41605
- function parseRequiredSignedNewsletterDestinationRef(value) {
41606
- const parsed = parseSignedNewsletterDestinationRef(value);
41607
- if (!parsed) throw new Error("Newsletter signup signed destination ref requires token");
42327
+ function parseRequiredMailingListSignedSourceToken(value) {
42328
+ const parsed = parseMailingListSignedSourceToken(value);
42329
+ if (!parsed) throw new Error("Mailing-list signup signed source ref requires token");
41608
42330
  return parsed;
41609
42331
  }
41610
- var newsletterPresetSchema, newsletterDestinationProviderSchema, newsletterButtonVariantSchema, newsletterFieldSchema, newsletterSignupBlockIdSchema, signedNewsletterDestinationRefSchema, newsletterSourceCommonSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
42332
+ var newsletterButtonVariantSchema, mailingListContextSchema, mailingListTargetingSchema, newsletterFieldSchema, mailingListSignupBlockIdSchema, signedMailingListSourceTokenSchema, newsletterSourceCommonSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
41611
42333
  var init_newsletter_form_interactive = __esmMin((() => {
41612
42334
  init_src$4();
41613
42335
  init_islands();
41614
42336
  init_runtime$1();
41615
- init_newsletter_signup_destination();
41616
42337
  init_newsletter_form_types();
41617
42338
  init_buttonRoles();
41618
- newsletterPresetSchema = z.enum([
41619
- "emailOnly",
41620
- "emailName",
41621
- "emailFirstLast",
41622
- "emailNameCompany"
41623
- ]);
41624
- newsletterDestinationProviderSchema = z.enum(["riverbank", "mailchimp"]);
41625
42339
  newsletterButtonVariantSchema = blockButtonRoleSchema;
42340
+ mailingListContextSchema = z.unknown().transform((value, ctx) => {
42341
+ const parsed = parseMailingListRuntimeContext(value);
42342
+ if (!parsed.ok) {
42343
+ ctx.addIssue({
42344
+ code: z.ZodIssueCode.custom,
42345
+ message: "Invalid mailing-list runtime context"
42346
+ });
42347
+ return z.NEVER;
42348
+ }
42349
+ return parsed.value;
42350
+ });
42351
+ mailingListTargetingSchema = z.unknown().transform((value, ctx) => {
42352
+ const parsed = parseMailingListPlacementTargeting(value);
42353
+ if (!parsed.ok) {
42354
+ ctx.addIssue({
42355
+ code: z.ZodIssueCode.custom,
42356
+ message: "Invalid mailing-list targeting"
42357
+ });
42358
+ return z.NEVER;
42359
+ }
42360
+ return parsed.value;
42361
+ });
41626
42362
  newsletterFieldSchema = z.object({
41627
42363
  id: z.string(),
41628
42364
  type: z.enum(["email", "text"]),
@@ -41630,73 +42366,73 @@ var init_newsletter_form_interactive = __esmMin((() => {
41630
42366
  required: z.boolean(),
41631
42367
  placeholder: z.string().optional()
41632
42368
  });
41633
- newsletterSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
41634
- signedNewsletterDestinationRefSchema = z.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
42369
+ mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
42370
+ signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
41635
42371
  newsletterSourceCommonSchema = z.object({
41636
42372
  siteId: z.string().optional(),
41637
42373
  apiBaseUrl: z.string().optional(),
41638
- preset: newsletterPresetSchema.optional(),
41639
- includePhone: z.boolean().optional(),
41640
- buttonLabel: z.string().nullable().optional(),
42374
+ mailingList: mailingListContextSchema.optional(),
42375
+ targeting: mailingListTargetingSchema.optional(),
41641
42376
  buttonVariant: newsletterButtonVariantSchema.nullable().optional(),
41642
- successMessage: z.string().nullable().optional(),
41643
- privacyNote: z.string().nullable().optional(),
41644
- tags: z.string().nullable().optional(),
41645
42377
  spamProtectionEnabled: z.boolean().optional(),
41646
42378
  className: z.string().nullable().optional()
41647
42379
  });
41648
42380
  newsletterSourceSchema = z.discriminatedUnion("source", [
41649
42381
  newsletterSourceCommonSchema.extend({
41650
42382
  source: z.literal("block"),
41651
- blockId: z.string().nullable().optional(),
41652
- listId: z.string().nullable().optional(),
41653
- destinationProvider: newsletterDestinationProviderSchema.nullable().optional()
42383
+ blockId: z.string().nullable().optional()
41654
42384
  }),
41655
42385
  newsletterSourceCommonSchema.extend({
41656
42386
  source: z.literal("signed-footer"),
41657
- destinationRef: z.object({
41658
- tag: z.literal("signed_destination_ref"),
41659
- token: signedNewsletterDestinationRefSchema
42387
+ sourceRef: z.object({
42388
+ tag: z.literal("signed_source_ref"),
42389
+ token: signedMailingListSourceTokenSchema
41660
42390
  })
41661
42391
  }),
41662
- newsletterSourceCommonSchema.extend({
41663
- source: z.literal("legacy-direct-list"),
41664
- listId: z.string().nullable()
41665
- })
42392
+ newsletterSourceCommonSchema.extend({ source: z.literal("preview") })
41666
42393
  ]);
41667
42394
  newsletterDisplaySchema = z.object({
41668
42395
  kind: z.literal("newsletter-form"),
42396
+ availability: z.enum(["ready", "unavailable"]),
41669
42397
  className: z.string().nullable(),
41670
42398
  buttonLabel: z.string(),
41671
42399
  buttonVariant: newsletterButtonVariantSchema,
41672
- successMessage: z.string().nullable(),
41673
42400
  privacyNote: z.string().nullable(),
41674
- fields: z.array(newsletterFieldSchema)
42401
+ fields: z.array(newsletterFieldSchema),
42402
+ choices: z.array(z.object({
42403
+ id: z.string(),
42404
+ label: z.string()
42405
+ }))
41675
42406
  });
41676
42407
  newsletterHydrationSchema = z.object({
41677
42408
  target: z.discriminatedUnion("tag", [
41678
42409
  z.object({
41679
42410
  tag: z.literal("block-source"),
41680
- destinationRef: z.object({
42411
+ sourceRef: z.object({
41681
42412
  tag: z.literal("block_ref"),
41682
- blockId: newsletterSignupBlockIdSchema
42413
+ blockId: mailingListSignupBlockIdSchema
41683
42414
  }).nullable()
41684
42415
  }),
41685
42416
  z.object({
41686
42417
  tag: z.literal("signed-footer-source"),
41687
- destinationRef: z.object({
41688
- tag: z.literal("signed_destination_ref"),
41689
- token: signedNewsletterDestinationRefSchema
42418
+ sourceRef: z.object({
42419
+ tag: z.literal("signed_source_ref"),
42420
+ token: signedMailingListSourceTokenSchema
41690
42421
  })
41691
42422
  }),
41692
- z.object({
41693
- tag: z.literal("legacy-direct-list"),
41694
- listId: z.string().nullable()
41695
- })
42423
+ z.object({ tag: z.literal("preview") })
42424
+ ]),
42425
+ setupRevision: z.number().int().positive().nullable(),
42426
+ choiceProvider: z.enum([
42427
+ "native",
42428
+ "brevo",
42429
+ "mailchimp"
42430
+ ]).nullable(),
42431
+ choicePresentation: z.enum([
42432
+ "hidden",
42433
+ "automatic",
42434
+ "visitor_choice"
41696
42435
  ]),
41697
- preset: newsletterPresetSchema,
41698
- includePhone: z.boolean(),
41699
- tags: z.string().nullable().optional(),
41700
42436
  spamProtectionEnabled: z.boolean().optional()
41701
42437
  });
41702
42438
  newsletterRenderSchema = z.object({
@@ -41714,14 +42450,15 @@ var init_newsletter_form_interactive = __esmMin((() => {
41714
42450
  render: createZodCodec(newsletterRenderSchema)
41715
42451
  },
41716
42452
  buildRender: (source) => {
41717
- const runtimeSource = source.source === "block" ? deriveNewsletterSignupRuntimeSource(source) : null;
42453
+ const targeting = source.targeting ?? { mode: "default" };
42454
+ const presentation = planMailingListChoicePresentation(targeting);
41718
42455
  return {
41719
42456
  display: buildNewsletterDisplay(source),
41720
42457
  hydration: {
41721
42458
  target: projectNewsletterFormHydrationTarget(source),
41722
- preset: source.preset ?? "emailOnly",
41723
- includePhone: source.includePhone ?? false,
41724
- tags: runtimeSource ? runtimeSource.tags : source.tags,
42459
+ setupRevision: source.mailingList?.tag === "configured" ? source.mailingList.revision : null,
42460
+ choiceProvider: targeting.mode === "custom" ? targeting.provider : null,
42461
+ choicePresentation: presentation.tag,
41725
42462
  spamProtectionEnabled: source.spamProtectionEnabled
41726
42463
  }
41727
42464
  };
@@ -41730,6 +42467,19 @@ var init_newsletter_form_interactive = __esmMin((() => {
41730
42467
  }));
41731
42468
  //#endregion
41732
42469
  //#region ../blocks/src/system/blocks/newsletter-signup.ts
42470
+ function sanitizeNewsletterSignupPublicContent(content) {
42471
+ if (typeof content !== "object" || content === null || Array.isArray(content)) return content;
42472
+ const value = content;
42473
+ return {
42474
+ title: value.title,
42475
+ subtitle: value.subtitle,
42476
+ targeting: value.targeting,
42477
+ buttonVariant: value.buttonVariant,
42478
+ mailingListSource: value.mailingListSource,
42479
+ mailingListSourceToken: value.mailingListSourceToken,
42480
+ _sectionStyles: value._sectionStyles
42481
+ };
42482
+ }
41733
42483
  var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, newsletterSignupManifest, newsletterSignupBlockDefinition;
41734
42484
  var init_newsletter_signup = __esmMin((() => {
41735
42485
  init_fragments$1();
@@ -41738,7 +42488,6 @@ var init_newsletter_signup = __esmMin((() => {
41738
42488
  init_defineBlock();
41739
42489
  init_fragments();
41740
42490
  init_newsletter_form_interactive();
41741
- init_newsletter_signup_destination();
41742
42491
  stackedComposition = composeFragments([{ fragment: newsletterCopyFragment }, { fragment: newsletterFormFragment }]);
41743
42492
  stackedLayout = styledSection({
41744
42493
  children: sectionContainer(stackedComposition.layout, {
@@ -42724,6 +43473,7 @@ var init_blocks$1 = __esmMin((() => {
42724
43473
  init_feature_cards();
42725
43474
  init_media_text();
42726
43475
  init_appointment_booking();
43476
+ init_appointment_services();
42727
43477
  init_weekly_slot_availability();
42728
43478
  init_event_registration();
42729
43479
  init_event_details();
@@ -43216,6 +43966,14 @@ var init_blocks$1 = __esmMin((() => {
43216
43966
  weight: "standard"
43217
43967
  })]
43218
43968
  })),
43969
+ withDesignCapability("block.appointment-services", appointmentServicesBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43970
+ flow: conversionFlow,
43971
+ layoutProfiles: [layoutProfile({
43972
+ variantKey: "default",
43973
+ family: "stack",
43974
+ weight: "standard"
43975
+ })]
43976
+ })),
43219
43977
  withDesignCapability("block.weekly-slot-availability", weeklySlotAvailabilityBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43220
43978
  flow: offeringsFlow,
43221
43979
  layoutProfiles: [layoutProfile({
@@ -45732,6 +46490,38 @@ var init_siteBanner = __esmMin((() => {
45732
46490
  content: []
45733
46491
  }]
45734
46492
  };
46493
+ })), EU_MEMBER_COUNTRIES;
46494
+ var init_privacyPolicy = __esmMin((() => {
46495
+ EU_MEMBER_COUNTRIES = [
46496
+ "AT",
46497
+ "BE",
46498
+ "BG",
46499
+ "HR",
46500
+ "CY",
46501
+ "CZ",
46502
+ "DK",
46503
+ "EE",
46504
+ "FI",
46505
+ "FR",
46506
+ "DE",
46507
+ "GR",
46508
+ "HU",
46509
+ "IE",
46510
+ "IT",
46511
+ "LV",
46512
+ "LT",
46513
+ "LU",
46514
+ "MT",
46515
+ "NL",
46516
+ "PL",
46517
+ "PT",
46518
+ "RO",
46519
+ "SK",
46520
+ "SI",
46521
+ "ES",
46522
+ "SE"
46523
+ ];
46524
+ new Set(EU_MEMBER_COUNTRIES);
45735
46525
  }));
45736
46526
  //#endregion
45737
46527
  //#region ../api/src/analytics.ts
@@ -45926,7 +46716,6 @@ var init_dashboardTeamMemberNav = __esmMin((() => {
45926
46716
  var init_dashboardBookingsNav = __esmMin((() => {
45927
46717
  init_staffAccess();
45928
46718
  }));
45929
- var init_identity = __esmMin((() => {}));
45930
46719
  //#endregion
45931
46720
  //#region ../api/src/navigation/dashboardDemoNav.ts
45932
46721
  var init_dashboardDemoNav = __esmMin((() => {
@@ -45943,7 +46732,6 @@ var init_navigation = __esmMin((() => {
45943
46732
  init_permissions();
45944
46733
  init_dashboardTeamMemberNav();
45945
46734
  init_dashboardBookingsNav();
45946
- init_identity();
45947
46735
  init_dashboardDemoNav();
45948
46736
  init_src$2();
45949
46737
  }));
@@ -46091,6 +46879,7 @@ var init_src = __esmMin((() => {
46091
46879
  init_types();
46092
46880
  init_siteBanner();
46093
46881
  init_siteOnboarding();
46882
+ init_privacyPolicy();
46094
46883
  init_analytics();
46095
46884
  init_publicProducts();
46096
46885
  init_contentEntries();
@@ -46556,6 +47345,7 @@ function buildSiteRenderSupport(site, mediaAssets) {
46556
47345
  site: site.site,
46557
47346
  sdkConfig: site.sdkConfig ?? null,
46558
47347
  bookingOfferingPresets: site.bookingOfferingPresets ?? [],
47348
+ mailingList: site.mailingList,
46559
47349
  bookingTimeZone: site.bookingTimeZone ?? "UTC",
46560
47350
  ...customBlocks ? { customBlocks } : {},
46561
47351
  supabaseUrl: site.supabaseUrl,
@@ -46808,6 +47598,7 @@ async function loadPageWithDeps(deps, params) {
46808
47598
  siteId,
46809
47599
  resolvedData,
46810
47600
  bookingOfferingPresets: support.bookingOfferingPresets,
47601
+ mailingList: support.mailingList,
46811
47602
  bookingTimeZone: support.bookingTimeZone,
46812
47603
  supabaseUrl: support.supabaseUrl,
46813
47604
  ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {},