@riverbankcms/sdk 0.138.0 → 0.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +12 -16
  2. package/dist/{PreviewEditorSidebar-BVPur_CU.mjs → PreviewEditorSidebar-CUyTzd5z.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DLhWX8oh.mjs → PreviewEditorUI-Agkw4v5i.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BguJY1SW.mjs → PreviewQueryProvider-CN0ewic5.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-Tda6qw4z.mjs → SdkPreviewModeRuntime-DdbeAdS8.mjs} +62 -28
  6. package/dist/{SiteChromeCustomizeContext-BHFgMjde.mjs → SiteChromeCustomizeContext-CqGOz-Kv.mjs} +8467 -5616
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +264 -495
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +221 -242
  9. package/dist/_dts/api/src/accessAdmin.d.ts +74 -104
  10. package/dist/_dts/api/src/aiEndpoints.d.ts +5 -1
  11. package/dist/_dts/api/src/authSubmission.d.ts +46 -0
  12. package/dist/_dts/api/src/billing.d.ts +18 -7
  13. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +23 -0
  14. package/dist/_dts/api/src/billingEndpointTypes.d.ts +26 -0
  15. package/dist/_dts/api/src/blocks.d.ts +2 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +1 -2
  17. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +8 -1
  18. package/dist/_dts/api/src/communications.d.ts +0 -1
  19. package/dist/_dts/api/src/contentRuntime.d.ts +16 -4
  20. package/dist/_dts/api/src/endpoints.d.ts +275 -167
  21. package/dist/_dts/api/src/event-destination-policy.d.ts +2 -1
  22. package/dist/_dts/api/src/footerSettings.d.ts +10 -10
  23. package/dist/_dts/api/src/index.d.ts +11 -10
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  26. package/dist/_dts/api/src/mailchimpIntegration.d.ts +2 -59
  27. package/dist/_dts/api/src/mailingListIntegration.d.ts +123 -0
  28. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  29. package/dist/_dts/api/src/navigation/locations.d.ts +1 -0
  30. package/dist/_dts/api/src/navigation/types.d.ts +1 -1
  31. package/dist/_dts/api/src/navigation.d.ts +1 -26
  32. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +109 -2
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +25 -0
  34. package/dist/_dts/api/src/onboarding/surfaceData.d.ts +185 -0
  35. package/dist/_dts/api/src/privacyPolicy.d.ts +74 -2
  36. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +14 -6
  37. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +1 -1
  38. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +1 -0
  39. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +11 -3
  40. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +2 -4
  41. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +9 -49
  42. package/dist/_dts/api/src/publicOnboardingAttemptEndpointDefinitions.d.ts +65 -0
  43. package/dist/_dts/api/src/publicReadEndpointDefinitions.d.ts +73 -0
  44. package/dist/_dts/api/src/saveOutcome.d.ts +20 -0
  45. package/dist/_dts/api/src/schemas/site-api-keys.d.ts +1 -1
  46. package/dist/_dts/api/src/sdkContracts.d.ts +5 -32
  47. package/dist/_dts/api/src/sdkPushContracts.d.ts +18 -0
  48. package/dist/_dts/api/src/sdkThemeWire.d.ts +46 -46
  49. package/dist/_dts/api/src/settings/permissions.d.ts +12 -0
  50. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +9 -34
  51. package/dist/_dts/api/src/siteOnboarding.d.ts +84 -228
  52. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +3 -13
  53. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -1
  54. package/dist/_dts/api/src/siteSettings.d.ts +38 -6
  55. package/dist/_dts/api/src/types.d.ts +78 -77
  56. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -37
  57. package/dist/_dts/billing/src/membership/index.d.ts +17 -7
  58. package/dist/_dts/billing/src/plans/display.d.ts +15 -0
  59. package/dist/_dts/billing/src/plans/registry.d.ts +2 -0
  60. package/dist/_dts/billing/src/plans/standing.d.ts +19 -0
  61. package/dist/_dts/billing/src/plans/types.d.ts +4 -7
  62. package/dist/_dts/billing/src/site-arrangements.d.ts +14 -3
  63. package/dist/_dts/billing/src/subscriptions/evidence.d.ts +12 -0
  64. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +31 -0
  65. package/dist/_dts/billing/src/subscriptions/store.d.ts +23 -5
  66. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -15
  67. package/dist/_dts/blocks/src/client.d.ts +1 -1
  68. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +48 -20
  69. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +2 -0
  70. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +9 -0
  71. package/dist/_dts/blocks/src/pageRenderingMode.d.ts +12 -6
  72. package/dist/_dts/blocks/src/portal/types.d.ts +2 -4
  73. package/dist/_dts/blocks/src/portal/waitlist-types.d.ts +35 -0
  74. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +11 -0
  75. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +39 -66
  76. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -0
  77. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  78. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  79. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +39 -114
  80. package/dist/_dts/blocks/src/system/blocks/offerings-preview/catalogue.d.ts +18 -0
  81. package/dist/_dts/blocks/src/system/blocks/offerings-preview/fields.d.ts +2 -0
  82. package/dist/_dts/blocks/src/system/blocks/offerings-preview/index.d.ts +4 -0
  83. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +7 -13
  84. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  85. package/dist/_dts/blocks/src/system/data/index.d.ts +4 -4
  86. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  87. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +2 -1
  88. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +2 -74
  89. package/dist/_dts/blocks/src/system/data/types.d.ts +9 -0
  90. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +33 -100
  91. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  92. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -28
  93. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +7 -3
  95. package/dist/_dts/blocks/src/system/runtime/api/types/newsletter.d.ts +5 -15
  96. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  97. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -2
  98. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +78 -30
  99. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +39 -15
  100. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +3 -0
  101. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +1 -1
  102. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarToday.d.ts +22 -0
  103. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +94 -0
  104. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +1 -2
  105. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +2 -0
  106. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/checkoutRecovery.d.ts +14 -0
  107. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +56 -0
  108. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -8
  109. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useCheckoutRecovery.d.ts +8 -0
  110. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -7
  111. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +12 -2
  112. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +18 -0
  113. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.client.d.ts +1 -1
  114. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -7
  115. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +4 -2
  116. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +28 -0
  117. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/bookability.d.ts +9 -0
  118. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +14 -0
  119. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/duration.d.ts +2 -0
  120. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +4 -0
  121. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/location.d.ts +2 -0
  122. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/quickDates.d.ts +16 -0
  123. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/AgendaEventCard.d.ts +9 -1
  124. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.d.ts +2 -0
  125. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/CalendarDayHeaders.d.ts +4 -0
  126. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DayEventsModal.d.ts +2 -1
  127. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +5 -0
  128. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +2 -1
  129. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventQuickDates.d.ts +15 -0
  130. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +7 -3
  131. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekTimetableView.d.ts +1 -0
  132. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +2 -0
  133. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/timetableModel.d.ts +1 -0
  134. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/useHydrationReady.d.ts +6 -0
  135. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.state.d.ts +3 -0
  136. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +62 -33
  137. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -3
  138. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +14 -31
  139. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-catalogue.d.ts +14 -0
  140. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview-content.d.ts +23 -0
  141. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +4 -2
  142. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +1 -0
  143. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -6
  144. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  145. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +2 -0
  146. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +5 -0
  147. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  148. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
  149. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +32 -16
  150. package/dist/_dts/commerce/src/purchase/stripeCommissionMetadata.d.ts +34 -0
  151. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -1
  152. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +6 -24
  153. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +3 -1
  154. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +4 -2
  155. package/dist/_dts/core/src/branded.d.ts +0 -8
  156. package/dist/_dts/core/src/footer-engagement.d.ts +2 -6
  157. package/dist/_dts/core/src/index.d.ts +10 -1
  158. package/dist/_dts/core/src/mailing-list-identifiers.d.ts +21 -0
  159. package/dist/_dts/core/src/mailing-list-runtime.d.ts +42 -0
  160. package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +14 -0
  161. package/dist/_dts/core/src/mailing-list-setup.d.ts +142 -0
  162. package/dist/_dts/core/src/mailing-list-submission.d.ts +224 -0
  163. package/dist/_dts/core/src/mailing-list-targeting-parser.d.ts +12 -0
  164. package/dist/_dts/core/src/mailing-list-targeting.d.ts +93 -0
  165. package/dist/_dts/core/src/navigation-locations.d.ts +28 -0
  166. package/dist/_dts/core/src/participants.d.ts +2 -29
  167. package/dist/_dts/core/src/public-experience.d.ts +4 -0
  168. package/dist/_dts/core/src/public-profile.d.ts +35 -1
  169. package/dist/_dts/core/src/public-read-cache-contract.d.ts +45 -0
  170. package/dist/_dts/core/src/site-route-target.d.ts +9 -2
  171. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +797 -954
  172. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  173. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListGlobalSettingsSummary.d.ts +10 -0
  174. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +12 -0
  175. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +14 -0
  176. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/index.d.ts +3 -0
  177. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +7 -0
  178. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +19 -0
  179. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -0
  180. package/dist/_dts/sdk/src/client/publicAppointmentReadOperations.d.ts +12 -0
  181. package/dist/_dts/sdk/src/client/publicEventReadOperations.d.ts +2 -1
  182. package/dist/_dts/sdk/src/client/publicLoaderCacheAccess.d.ts +11 -4
  183. package/dist/_dts/sdk/src/config/content-types.d.ts +3 -13
  184. package/dist/_dts/sdk/src/config/content-validation.d.ts +5 -8
  185. package/dist/_dts/sdk/src/constants.d.ts +3 -3
  186. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  187. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +12 -31
  188. package/dist/_dts/sdk/src/navigation/index.d.ts +11 -29
  189. package/dist/_dts/sdk/src/next/index.d.ts +4 -4
  190. package/dist/_dts/sdk/src/prebuild/types.d.ts +1 -5
  191. package/dist/_dts/sdk/src/public-api/contracts.d.ts +44 -33
  192. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +5 -0
  193. package/dist/_dts/sdk/src/rendering/client.d.ts +3 -20
  194. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +5 -0
  195. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +4 -0
  196. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +8 -1
  197. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +1 -0
  198. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
  199. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  200. package/dist/_dts/sdk/src/version.d.ts +1 -1
  201. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  202. package/dist/_dts/theme-core/src/cards/types.d.ts +21 -21
  203. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  204. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +8 -2
  205. package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -2
  206. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +41 -0
  207. package/dist/_dts/theme-core/src/index.d.ts +1 -0
  208. package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
  209. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +54 -54
  210. package/dist/_dts/theme-core/src/runtime/buildThemeRuntime.d.ts +0 -1
  211. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -4
  212. package/dist/_dts/theme-core/src/schema.d.ts +84 -84
  213. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
  214. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  215. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +77 -0
  216. package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
  217. package/dist/_dts/theme-core/src/tokens/tokens.d.ts +7 -0
  218. package/dist/_dts/theme-core/src/typography/generateTypographyCss.d.ts +2 -2
  219. package/dist/_dts/ui/src/badge.d.ts +1 -1
  220. package/dist/_dts/ui/src/callout.d.ts +1 -1
  221. package/dist/_dts/ui/src/lib/use-delayed-flag.d.ts +9 -0
  222. package/dist/_dts/ui/src/pending-button.d.ts +10 -0
  223. package/dist/client/{BookingConsentAgreement-DQUik1Mx.mjs → BookingConsentAgreement-CuKa82V4.mjs} +4 -4
  224. package/dist/client/{DiscountCodeDisclosure-CU67Q4vH.mjs → DiscountCodeDisclosure-BbYieKWB.mjs} +1 -1
  225. package/dist/client/{EventCombined.client-a02TXUgg.mjs → EventCombined.client-LTfR1Aby.mjs} +444 -200
  226. package/dist/client/{EventListing.client-99qx7jFl.mjs → EventListing.client-DUHpYSuo.mjs} +2 -2
  227. package/dist/client/{LeafletStaticMap-CWzcq73L.mjs → LeafletStaticMap-CHRupL6m.mjs} +1 -1
  228. package/dist/client/{accordion-D1nb3-Oj.mjs → accordion-6HiIFxNL.mjs} +1 -1
  229. package/dist/client/{bookingForm-BGrmLhaO.mjs → bookingForm-Dlmid43H.mjs} +7 -7
  230. package/dist/client/bookings.mjs +368 -142
  231. package/dist/client/{carousel-DSmOx3ad.mjs → carousel-DmkZRRq_.mjs} +2 -2
  232. package/dist/client/{carousel.client-59G_WMr4.mjs → carousel.client-DQTjCVQT.mjs} +1 -1
  233. package/dist/client/{cart-COWeOIUk.mjs → cart-CIC24330.mjs} +3 -3
  234. package/dist/client/{checkout-CeysaIJK.mjs → checkout-D1Zw9imo.mjs} +3 -3
  235. package/dist/client/{checkoutUrls-BuseL0dw.mjs → checkoutUrls-FL6lRkrt.mjs} +1 -1
  236. package/dist/client/client.mjs +5017 -2258
  237. package/dist/client/{colorStyles-CrxJrPjJ.mjs → colorStyles-3013aRAY.mjs} +3 -1
  238. package/dist/client/{context-DBzX85Xc.mjs → context-Cy1OayHx.mjs} +9 -21
  239. package/dist/client/{dates-DCYhZBlW.mjs → dates-aDcfoLHr.mjs} +21 -3
  240. package/dist/client/{eventCalendar-BgsN73Ul.mjs → eventCalendar-FQxMPAjf.mjs} +81 -79
  241. package/dist/client/{eventCombined-DcZQAMQP.mjs → eventCombined-Dr3ac6Hb.mjs} +3 -3
  242. package/dist/client/{eventDetails-BWwGJ54l.mjs → eventDetails-D-AzUHFQ.mjs} +4 -4
  243. package/dist/client/{eventListing-DqYqV8vp.mjs → eventListing-B3XxBf3i.mjs} +3 -3
  244. package/dist/client/{eventRegistration-DQGDgu_e.mjs → eventRegistration-I6EaokFD.mjs} +543 -155
  245. package/dist/client/{form-ClfpasVT.mjs → form-BbWckVWY.mjs} +3 -3
  246. package/dist/client/{headerSection-BuOMe98N.mjs → headerSection-C9qU4Y7x.mjs} +2 -2
  247. package/dist/client/hooks.mjs +1685 -716
  248. package/dist/client/{locationMap-CEqu_sfa.mjs → locationMap-CLCShvlG.mjs} +3 -3
  249. package/dist/client/{media-BOHuueS5.mjs → media-DHpfFwd3.mjs} +1 -1
  250. package/dist/client/newsletterForm-Briukxzi.mjs +444 -0
  251. package/dist/client/{pricing-xj7MPZlK.mjs → pricing-Copadu-2.mjs} +1 -1
  252. package/dist/client/{productDetail-vxqTt5Xj.mjs → productDetail-oujlRd-r.mjs} +3 -3
  253. package/dist/client/{productList-OTdZu8sb.mjs → productList-BRiIRUcd.mjs} +3 -3
  254. package/dist/client/{propsDecoder-CY9gGEF7.mjs → propsDecoder-CB2KS_ko.mjs} +706 -160
  255. package/dist/client/rendering/client.mjs +3161 -1226
  256. package/dist/client/rendering/islands.mjs +19 -19
  257. package/dist/client/rendering.mjs +4864 -1914
  258. package/dist/client/{scrollToBlock--BFV6kl-.mjs → scrollToBlock-B1IS1_ua.mjs} +1 -1
  259. package/dist/client/{shop-CP4YbDL9.mjs → shop-Vn6yNFED.mjs} +6 -6
  260. package/dist/client/{shop-commerce-APs4XBXE.mjs → shop-commerce-BVTqipYp.mjs} +7 -7
  261. package/dist/client/{shop-commerce-store-CAVLxLFr.mjs → shop-commerce-store-BVnJVy7v.mjs} +1 -1
  262. package/dist/client/{shopShared-BnSRrwXI.mjs → shopShared-COIeK77T.mjs} +4 -4
  263. package/dist/client/{useEventFilters-1a1by4c8.mjs → useEventFilters-DzIUcS9n.mjs} +58 -11
  264. package/dist/preview-next/before-render.mjs +357 -175
  265. package/dist/preview-next/client/runtime.mjs +4 -4
  266. package/dist/preview-next/keepAlive.mjs +357 -175
  267. package/dist/preview-next/middleware.mjs +357 -175
  268. package/dist/{previewAuthStore-BkEgnYPP.mjs → previewAuthStore-Gjb6r6vz.mjs} +357 -175
  269. package/dist/{sdk-runtime-DwGfsT0S.mjs → sdk-runtime-CnCLvZRv.mjs} +2 -2
  270. package/dist/{separator-BeqDLneQ.mjs → separator-DKDRJ1oH.mjs} +1 -1
  271. package/dist/server/components.mjs +3389 -1251
  272. package/dist/server/config-validation.mjs +2737 -1784
  273. package/dist/server/config.mjs +2742 -1788
  274. package/dist/server/data.mjs +1586 -615
  275. package/dist/server/index.mjs +496 -352
  276. package/dist/server/navigation.mjs +16 -47
  277. package/dist/server/next.mjs +3978 -2007
  278. package/dist/server/page-converter.mjs +1109 -553
  279. package/dist/server/prebuild.mjs +2 -3
  280. package/dist/server/rendering/server.mjs +4101 -1951
  281. package/dist/server/rendering.mjs +3416 -1259
  282. package/dist/server/routing.mjs +1869 -786
  283. package/dist/server/server.mjs +3260 -2482
  284. package/dist/server/theme-bridge.mjs +725 -124
  285. package/dist/server/theme.mjs +8 -2
  286. package/dist/styles/index.css +526 -68
  287. package/package.json +1 -1
  288. package/dist/_dts/api/src/navigation/identity.d.ts +0 -59
  289. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +0 -291
  290. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +0 -29
  291. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +0 -13
  292. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +0 -38
  293. package/dist/client/newsletterForm-IbrHjMxy.mjs +0 -322
@@ -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, unsafeAsContentVersionId, parseSiteId, parseApiKeyId, parseEventOfferingId, parseUserId, parseContentVersionId, 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;
@@ -575,10 +576,12 @@ var init_branded = __esmMin((() => {
575
576
  unsafeAsPositiveByteCount$1 = (value) => value;
576
577
  unsafeAsPositiveSeconds = (value) => value;
577
578
  unsafeAsUserId = (id) => id;
579
+ unsafeAsContentVersionId = (id) => id;
578
580
  parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
579
581
  parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
580
582
  parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
581
583
  parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
584
+ parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
582
585
  parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
583
586
  }));
584
587
  //#endregion
@@ -586,7 +589,7 @@ var init_branded = __esmMin((() => {
586
589
  var init_date_math = __esmMin((() => {}));
587
590
  //#endregion
588
591
  //#region ../core/src/duration.ts
589
- var init_duration = __esmMin((() => {}));
592
+ var init_duration$1 = __esmMin((() => {}));
590
593
  //#endregion
591
594
  //#region ../core/src/demo-capability-policy.ts
592
595
  var init_demo_capability_policy = __esmMin((() => {}));
@@ -850,7 +853,7 @@ function parseEventPageSurfaceDestinationMode(value) {
850
853
  return value === "cms-managed" || value === "system-managed" ? value : void 0;
851
854
  }
852
855
  function parseEventPageSurfaceSubject(value) {
853
- if (!isRecord$13(value)) return err$1({ kind: "notObject" });
856
+ if (!isRecord$16(value)) return err$1({ kind: "notObject" });
854
857
  switch (value.kind) {
855
858
  case "eventSeries": {
856
859
  const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
@@ -905,7 +908,7 @@ function parseEventSeriesIdList(values) {
905
908
  }
906
909
  return ok$1(parsed);
907
910
  }
908
- function isRecord$13(value) {
911
+ function isRecord$16(value) {
909
912
  return typeof value === "object" && value !== null && !Array.isArray(value);
910
913
  }
911
914
  var init_event_page_surface_subject = __esmMin((() => {
@@ -1117,7 +1120,7 @@ function toLocationCoordinates(value) {
1117
1120
  lng: value.lng
1118
1121
  };
1119
1122
  }
1120
- var init_location = __esmMin((() => {}));
1123
+ var init_location$1 = __esmMin((() => {}));
1121
1124
  //#endregion
1122
1125
  //#region ../core/src/business-address.ts
1123
1126
  var init_business_address = __esmMin((() => {}));
@@ -1149,17 +1152,17 @@ var init_public_url_validation = __esmMin((() => {}));
1149
1152
  //#region ../core/src/public-profile.ts
1150
1153
  var init_public_profile = __esmMin((() => {}));
1151
1154
  //#endregion
1155
+ //#region ../core/src/public-experience.ts
1156
+ var init_public_experience = __esmMin((() => {}));
1157
+ //#endregion
1152
1158
  //#region ../core/src/rich-text.ts
1153
1159
  var init_rich_text = __esmMin((() => {}));
1154
1160
  //#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((() => {}));
1161
+ //#region ../core/src/footer-composition.ts
1162
+ var init_footer_composition = __esmMin((() => {}));
1160
1163
  //#endregion
1161
- //#region ../core/src/footer-engagement.ts
1162
- var init_footer_engagement = __esmMin((() => {}));
1164
+ //#region ../core/src/footer-navigation-layout.ts
1165
+ var init_footer_navigation_layout = __esmMin((() => {}));
1163
1166
  var init_footer_arrangement = __esmMin((() => {
1164
1167
  new Map([
1165
1168
  "brand",
@@ -1175,16 +1178,450 @@ var init_footer_arrangement = __esmMin((() => {
1175
1178
  ].map((kind, index) => [kind, index]));
1176
1179
  }));
1177
1180
  //#endregion
1178
- //#region ../core/src/footer-composition.ts
1179
- var init_footer_composition = __esmMin((() => {
1180
- init_footer_arrangement();
1181
+ //#region ../core/src/footer-composition-types.ts
1182
+ var init_footer_composition_types = __esmMin((() => {}));
1183
+ //#endregion
1184
+ //#region ../core/src/footer-engagement.ts
1185
+ var init_footer_engagement = __esmMin((() => {}));
1186
+ //#endregion
1187
+ //#region ../core/src/mailing-list-identifiers.ts
1188
+ function parseTrimmedMatchingString(value, pattern) {
1189
+ if (typeof value !== "string") return null;
1190
+ const trimmed = value.trim();
1191
+ return pattern.test(trimmed) ? trimmed : null;
1192
+ }
1193
+ function parsePositiveInteger(value) {
1194
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
1195
+ }
1196
+ function parseNewsletterListId(value) {
1197
+ return parseTrimmedMatchingString(value, UUID_PATTERN);
1198
+ }
1199
+ function parseMailchimpAccountId(value) {
1200
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1201
+ }
1202
+ function parseMailchimpAudienceId(value) {
1203
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1204
+ }
1205
+ function parseMailchimpInterestId(value) {
1206
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1207
+ }
1208
+ function parseBrevoAccountId(value) {
1209
+ return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
1210
+ }
1211
+ function parseBrevoListId(value) {
1212
+ return parsePositiveInteger(value);
1213
+ }
1214
+ var UUID_PATTERN, OPAQUE_ID_PATTERN;
1215
+ var init_mailing_list_identifiers = __esmMin((() => {
1216
+ 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;
1217
+ OPAQUE_ID_PATTERN = /^[A-Za-z0-9_-]{1,100}$/u;
1181
1218
  }));
1182
1219
  //#endregion
1183
- //#region ../core/src/footer-navigation-layout.ts
1184
- var init_footer_navigation_layout = __esmMin((() => {}));
1220
+ //#region ../core/src/mailing-list-setup.ts
1221
+ function isRecord$15(value) {
1222
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1223
+ }
1224
+ function parseMailingListProviderScope(value) {
1225
+ if (!isRecord$15(value)) return err$1("invalid_mailing_list_provider_scope");
1226
+ if (value.provider === "native") return ok$1({ provider: "native" });
1227
+ if (value.provider === "brevo") {
1228
+ const accountId = parseBrevoAccountId(value.accountId);
1229
+ return accountId !== null ? ok$1({
1230
+ provider: "brevo",
1231
+ accountId
1232
+ }) : err$1("invalid_mailing_list_provider_scope");
1233
+ }
1234
+ if (value.provider === "mailchimp") {
1235
+ const accountId = parseMailchimpAccountId(value.accountId);
1236
+ return accountId !== null ? ok$1({
1237
+ provider: "mailchimp",
1238
+ accountId
1239
+ }) : err$1("invalid_mailing_list_provider_scope");
1240
+ }
1241
+ return err$1("invalid_mailing_list_provider_scope");
1242
+ }
1243
+ var DEFAULT_MAILING_LIST_SUCCESS_MESSAGE;
1244
+ var init_mailing_list_setup = __esmMin((() => {
1245
+ init_mailing_list_identifiers();
1246
+ init_result();
1247
+ DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
1248
+ }));
1249
+ //#endregion
1250
+ //#region ../core/src/mailing-list-setup-parser.ts
1251
+ function parseMailingListGlobalForm(value) {
1252
+ if (!isRecord$14(value)) return formError("shape");
1253
+ const fields = parseGlobalFields(value.fields);
1254
+ if (fields === null) return formError("fields");
1255
+ if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
1256
+ const buttonLabel = parseRequiredString(value.buttonLabel);
1257
+ if (buttonLabel === null) return formError("buttonLabel");
1258
+ const successMessage = parseRequiredString(value.successMessage);
1259
+ if (successMessage === null) return formError("successMessage");
1260
+ const privacyNote = parseOptionalString(value.privacyNote);
1261
+ if (privacyNote === void 0) return formError("privacyNote");
1262
+ return ok$1({
1263
+ fields,
1264
+ includeOptionalPhone: value.includeOptionalPhone,
1265
+ buttonLabel,
1266
+ successMessage,
1267
+ privacyNote
1268
+ });
1269
+ }
1270
+ function parseGlobalFields(value) {
1271
+ if (!isRecord$14(value) || typeof value.preset !== "string") return null;
1272
+ switch (value.preset) {
1273
+ case "emailOnly": return { preset: "emailOnly" };
1274
+ case "emailName": return isRequirement(value.name) ? {
1275
+ preset: "emailName",
1276
+ name: value.name
1277
+ } : null;
1278
+ case "emailFirstLast": return isRequirement(value.firstName) && isRequirement(value.lastName) ? {
1279
+ preset: "emailFirstLast",
1280
+ firstName: value.firstName,
1281
+ lastName: value.lastName
1282
+ } : null;
1283
+ case "emailNameCompany": return isRequirement(value.name) && isRequirement(value.company) ? {
1284
+ preset: "emailNameCompany",
1285
+ name: value.name,
1286
+ company: value.company
1287
+ } : null;
1288
+ default: return null;
1289
+ }
1290
+ }
1291
+ function parseMailingListSetupRevision(value) {
1292
+ return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
1293
+ }
1294
+ function parseRequiredString(value) {
1295
+ if (typeof value !== "string") return null;
1296
+ const trimmed = value.trim();
1297
+ return trimmed.length > 0 ? trimmed : null;
1298
+ }
1299
+ function parseOptionalString(value) {
1300
+ if (value === null || value === void 0) return null;
1301
+ if (typeof value !== "string") return void 0;
1302
+ const trimmed = value.trim();
1303
+ return trimmed.length > 0 ? trimmed : null;
1304
+ }
1305
+ function isRequirement(value) {
1306
+ return value === "required" || value === "optional";
1307
+ }
1308
+ function isRecord$14(value) {
1309
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1310
+ }
1311
+ function formError(field) {
1312
+ return err$1({
1313
+ tag: "invalid_mailing_list_global_form",
1314
+ field
1315
+ });
1316
+ }
1317
+ var init_mailing_list_setup_parser = __esmMin((() => {
1318
+ init_result();
1319
+ }));
1185
1320
  //#endregion
1186
- //#region ../core/src/footer-composition-types.ts
1187
- var init_footer_composition_types = __esmMin((() => {}));
1321
+ //#region ../core/src/mailing-list-targeting.ts
1322
+ function planMailingListChoicePresentation(targeting) {
1323
+ if (targeting.mode === "default" || targeting.selection.tag === "fixed") return { tag: "hidden" };
1324
+ switch (targeting.provider) {
1325
+ case "native": return targeting.selection.offeredTopicIds.length === 1 ? {
1326
+ tag: "automatic",
1327
+ selection: {
1328
+ provider: "native",
1329
+ topicIds: targeting.selection.offeredTopicIds
1330
+ }
1331
+ } : {
1332
+ tag: "visitor_choice",
1333
+ provider: "native",
1334
+ optionCount: targeting.selection.offeredTopicIds.length
1335
+ };
1336
+ case "brevo": return targeting.selection.offeredListIds.length === 1 ? {
1337
+ tag: "automatic",
1338
+ selection: {
1339
+ provider: "brevo",
1340
+ listIds: targeting.selection.offeredListIds
1341
+ }
1342
+ } : {
1343
+ tag: "visitor_choice",
1344
+ provider: "brevo",
1345
+ optionCount: targeting.selection.offeredListIds.length
1346
+ };
1347
+ case "mailchimp": return targeting.selection.offeredInterestIds.length === 1 ? {
1348
+ tag: "automatic",
1349
+ selection: {
1350
+ provider: "mailchimp",
1351
+ interestIds: targeting.selection.offeredInterestIds
1352
+ }
1353
+ } : {
1354
+ tag: "visitor_choice",
1355
+ provider: "mailchimp",
1356
+ optionCount: targeting.selection.offeredInterestIds.length
1357
+ };
1358
+ }
1359
+ }
1360
+ var init_mailing_list_targeting = __esmMin((() => {}));
1361
+ //#endregion
1362
+ //#region ../core/src/mailing-list-runtime.ts
1363
+ function parseMailingListRuntimeContext(value) {
1364
+ if (!isRecord$13(value)) return invalidRuntimeContext();
1365
+ if (value.tag === "not_configured") return ok$1({ tag: "not_configured" });
1366
+ if (value.tag !== "configured") return invalidRuntimeContext();
1367
+ const revision = parseMailingListSetupRevision(value.revision);
1368
+ const form = parseMailingListGlobalForm(value.form);
1369
+ const provider = parseRuntimeProvider(value.provider);
1370
+ if (revision === null || !form.ok || provider === null) return invalidRuntimeContext();
1371
+ return ok$1({
1372
+ tag: "configured",
1373
+ revision,
1374
+ form: form.value,
1375
+ provider
1376
+ });
1377
+ }
1378
+ function parseRuntimeProvider(value) {
1379
+ if (!isRecord$13(value)) return null;
1380
+ switch (value.provider) {
1381
+ case "native": return parseNativeRuntimeProvider(value);
1382
+ case "brevo": return parseBrevoRuntimeProvider(value);
1383
+ case "mailchimp": return parseMailchimpRuntimeProvider(value);
1384
+ default: return null;
1385
+ }
1386
+ }
1387
+ function parseNativeRuntimeProvider(value) {
1388
+ const defaultTopicId = parseNewsletterListId(value.defaultTopicId);
1389
+ const topics = parseNamedItems(value.topics, parseNewsletterListId);
1390
+ return defaultTopicId !== null && topics !== null ? {
1391
+ provider: "native",
1392
+ defaultTopicId,
1393
+ topics
1394
+ } : null;
1395
+ }
1396
+ function parseBrevoRuntimeProvider(value) {
1397
+ const defaultListId = parseBrevoListId(value.defaultListId);
1398
+ const lists = parseNamedItems(value.lists, parseBrevoListId);
1399
+ return defaultListId !== null && lists !== null ? {
1400
+ provider: "brevo",
1401
+ defaultListId,
1402
+ lists
1403
+ } : null;
1404
+ }
1405
+ function parseMailchimpRuntimeProvider(value) {
1406
+ if (!Array.isArray(value.audiences)) return null;
1407
+ const defaultAudienceId = parseMailchimpAudienceId(value.defaultAudienceId);
1408
+ if (defaultAudienceId === null) return null;
1409
+ const audiences = [];
1410
+ for (const audience of value.audiences) {
1411
+ if (!isRecord$13(audience)) return null;
1412
+ const id = parseMailchimpAudienceId(audience.id);
1413
+ const name = parseName(audience.name);
1414
+ if (id === null || name === null || !Array.isArray(audience.interests)) return null;
1415
+ const interests = parseMailchimpInterests(audience.interests);
1416
+ if (interests === null) return null;
1417
+ audiences.push({
1418
+ id,
1419
+ name,
1420
+ interests
1421
+ });
1422
+ }
1423
+ return {
1424
+ provider: "mailchimp",
1425
+ defaultAudienceId,
1426
+ audiences
1427
+ };
1428
+ }
1429
+ function parseMailchimpInterests(value) {
1430
+ const interests = [];
1431
+ for (const interest of value) {
1432
+ if (!isRecord$13(interest)) return null;
1433
+ const id = parseMailchimpInterestId(interest.id);
1434
+ const name = parseName(interest.name);
1435
+ const categoryName = parseName(interest.categoryName);
1436
+ if (id === null || name === null || categoryName === null) return null;
1437
+ interests.push({
1438
+ id,
1439
+ name,
1440
+ categoryName
1441
+ });
1442
+ }
1443
+ return interests;
1444
+ }
1445
+ function parseNamedItems(value, parseId) {
1446
+ if (!Array.isArray(value)) return null;
1447
+ const items = [];
1448
+ for (const item of value) {
1449
+ if (!isRecord$13(item)) return null;
1450
+ const id = parseId(item.id);
1451
+ const name = parseName(item.name);
1452
+ if (id === null || name === null) return null;
1453
+ items.push({
1454
+ id,
1455
+ name
1456
+ });
1457
+ }
1458
+ return items;
1459
+ }
1460
+ function parseName(value) {
1461
+ if (typeof value !== "string") return null;
1462
+ const name = value.trim();
1463
+ return name.length > 0 ? name : null;
1464
+ }
1465
+ function isRecord$13(value) {
1466
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1467
+ }
1468
+ function invalidRuntimeContext() {
1469
+ return err$1({ tag: "invalid_mailing_list_runtime_context" });
1470
+ }
1471
+ var init_mailing_list_runtime = __esmMin((() => {
1472
+ init_mailing_list_identifiers();
1473
+ init_mailing_list_setup_parser();
1474
+ init_result();
1475
+ }));
1476
+ //#endregion
1477
+ //#region ../core/src/mailing-list-targeting-parser.ts
1478
+ function parseMailingListPlacementTargeting(value) {
1479
+ if (!isRecord$12(value)) return targetingError("shape");
1480
+ if (value.mode === "default") return ok$1({ mode: "default" });
1481
+ if (value.mode !== "custom") return targetingError("mode");
1482
+ if (!isRecord$12(value.selection)) return targetingError("selection");
1483
+ switch (value.provider) {
1484
+ case "native": return parseNativeTargeting(value.selection);
1485
+ case "brevo": return parseBrevoTargeting(value.selection);
1486
+ case "mailchimp": return parseMailchimpTargeting(value, value.selection);
1487
+ default: return targetingError("provider");
1488
+ }
1489
+ }
1490
+ function parseNativeTargeting(selection) {
1491
+ if (selection.tag === "fixed") {
1492
+ const topicIds = parseNonEmptyUniqueIds(selection.topicIds, parseNewsletterListId);
1493
+ return topicIds.ok ? ok$1({
1494
+ mode: "custom",
1495
+ provider: "native",
1496
+ selection: {
1497
+ tag: "fixed",
1498
+ topicIds: topicIds.value
1499
+ }
1500
+ }) : topicIds;
1501
+ }
1502
+ if (selection.tag === "visitor_choice") {
1503
+ const offeredTopicIds = parseNonEmptyUniqueIds(selection.offeredTopicIds, parseNewsletterListId);
1504
+ return offeredTopicIds.ok ? ok$1({
1505
+ mode: "custom",
1506
+ provider: "native",
1507
+ selection: {
1508
+ tag: "visitor_choice",
1509
+ offeredTopicIds: offeredTopicIds.value
1510
+ }
1511
+ }) : offeredTopicIds;
1512
+ }
1513
+ return targetingError("selection");
1514
+ }
1515
+ function parseBrevoTargeting(selection) {
1516
+ if (selection.tag === "fixed") {
1517
+ const listIds = parseNonEmptyUniqueIds(selection.listIds, parseBrevoListId);
1518
+ return listIds.ok ? ok$1({
1519
+ mode: "custom",
1520
+ provider: "brevo",
1521
+ selection: {
1522
+ tag: "fixed",
1523
+ listIds: listIds.value
1524
+ }
1525
+ }) : listIds;
1526
+ }
1527
+ if (selection.tag === "visitor_choice") {
1528
+ const offeredListIds = parseNonEmptyUniqueIds(selection.offeredListIds, parseBrevoListId);
1529
+ return offeredListIds.ok ? ok$1({
1530
+ mode: "custom",
1531
+ provider: "brevo",
1532
+ selection: {
1533
+ tag: "visitor_choice",
1534
+ offeredListIds: offeredListIds.value
1535
+ }
1536
+ }) : offeredListIds;
1537
+ }
1538
+ return targetingError("selection");
1539
+ }
1540
+ function parseMailchimpTargeting(value, selection) {
1541
+ const audienceId = parseMailchimpAudienceId(value.audienceId);
1542
+ if (audienceId === null) return targetingError("audienceId");
1543
+ if (selection.tag === "fixed") {
1544
+ const interestIds = parseUniqueIds(selection.interestIds, parseMailchimpInterestId);
1545
+ return interestIds.ok ? ok$1({
1546
+ mode: "custom",
1547
+ provider: "mailchimp",
1548
+ audienceId,
1549
+ selection: {
1550
+ tag: "fixed",
1551
+ interestIds: interestIds.value
1552
+ }
1553
+ }) : interestIds;
1554
+ }
1555
+ if (selection.tag === "visitor_choice") {
1556
+ const offeredInterestIds = parseNonEmptyUniqueIds(selection.offeredInterestIds, parseMailchimpInterestId);
1557
+ return offeredInterestIds.ok ? ok$1({
1558
+ mode: "custom",
1559
+ provider: "mailchimp",
1560
+ audienceId,
1561
+ selection: {
1562
+ tag: "visitor_choice",
1563
+ offeredInterestIds: offeredInterestIds.value
1564
+ }
1565
+ }) : offeredInterestIds;
1566
+ }
1567
+ return targetingError("selection");
1568
+ }
1569
+ function parseNonEmptyUniqueIds(value, parseId) {
1570
+ const parsed = parseUniqueIds(value, parseId);
1571
+ if (!parsed.ok) return parsed;
1572
+ const [first, ...rest] = parsed.value;
1573
+ return first === void 0 ? targetingError("targets") : ok$1([first, ...rest]);
1574
+ }
1575
+ function parseUniqueIds(value, parseId) {
1576
+ if (!Array.isArray(value)) return targetingError("targets");
1577
+ const parsed = [];
1578
+ for (const item of value) {
1579
+ const id = parseId(item);
1580
+ if (id === null) return targetingError("targets");
1581
+ if (parsed.includes(id)) return targetingError("duplicate_target");
1582
+ parsed.push(id);
1583
+ }
1584
+ return ok$1(parsed);
1585
+ }
1586
+ function isRecord$12(value) {
1587
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1588
+ }
1589
+ function targetingError(field) {
1590
+ return err$1({
1591
+ tag: "invalid_mailing_list_targeting",
1592
+ field
1593
+ });
1594
+ }
1595
+ var init_mailing_list_targeting_parser = __esmMin((() => {
1596
+ init_mailing_list_identifiers();
1597
+ init_result();
1598
+ }));
1599
+ //#endregion
1600
+ //#region ../core/src/mailing-list-submission.ts
1601
+ function parseMailingListBlockId(value) {
1602
+ const parsed = typeof value === "string" ? value.trim() : "";
1603
+ 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;
1604
+ }
1605
+ function parseMailingListSignedSourceToken(value) {
1606
+ const parsed = typeof value === "string" ? value.trim() : "";
1607
+ return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
1608
+ }
1609
+ function parseMailingListContentVersionId(value) {
1610
+ const parsed = parseContentVersionId(value);
1611
+ return parsed.ok ? parsed.value : null;
1612
+ }
1613
+ function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
1614
+ const parsedBlockId = parseMailingListBlockId(blockId);
1615
+ const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
1616
+ return parsedBlockId !== null && parsedContentVersionId !== null ? {
1617
+ tag: "block_ref",
1618
+ blockId: parsedBlockId,
1619
+ contentVersionId: parsedContentVersionId
1620
+ } : null;
1621
+ }
1622
+ var init_mailing_list_submission = __esmMin((() => {
1623
+ init_branded();
1624
+ }));
1188
1625
  //#endregion
1189
1626
  //#region ../core/src/number-input.ts
1190
1627
  var init_number_input = __esmMin((() => {}));
@@ -1289,6 +1726,60 @@ function orderedLiveRunSessions(sessions) {
1289
1726
  }
1290
1727
  var init_whole_series_run_schedule = __esmMin((() => {}));
1291
1728
  //#endregion
1729
+ //#region ../core/src/public-read-cache-contract.ts
1730
+ function availability(transport) {
1731
+ return {
1732
+ kind: "live",
1733
+ reason: "booking_correctness",
1734
+ freshness: "availability",
1735
+ transport
1736
+ };
1737
+ }
1738
+ function content(tags, transport = "direct") {
1739
+ return {
1740
+ kind: "tagged",
1741
+ tags,
1742
+ freshness: "content",
1743
+ transport
1744
+ };
1745
+ }
1746
+ function getPublicReadCachePolicy(endpoint) {
1747
+ return PUBLIC_READ_CACHE_POLICIES[endpoint];
1748
+ }
1749
+ function publicReadFreshnessSeconds(endpoint) {
1750
+ return getPublicReadCachePolicy(endpoint).freshness === "availability" ? 60 : PUBLIC_CONTENT_FRESHNESS_SECONDS;
1751
+ }
1752
+ var PUBLIC_CONTENT_FRESHNESS_SECONDS, PUBLIC_READ_CACHE_POLICIES;
1753
+ var init_public_read_cache_contract = __esmMin((() => {
1754
+ PUBLIC_CONTENT_FRESHNESS_SECONDS = 3600;
1755
+ PUBLIC_READ_CACHE_POLICIES = {
1756
+ listPublishedEntries: content(["published_content"]),
1757
+ getPublishedEntryPreview: content(["published_content"]),
1758
+ listPublicEvents: availability("direct"),
1759
+ listPublicEventCalendarWindow: availability("direct"),
1760
+ listPublicRecurringSchedule: availability("batch_only"),
1761
+ getPublicEventDetails: availability("batch_only"),
1762
+ resolveEventSubroute: availability("direct"),
1763
+ listPublicRouteCandidates: content(["published_content"], "batch_only"),
1764
+ listPublicTeamMembers: content(["public_team_members"]),
1765
+ listPublicProducts: availability("direct"),
1766
+ listPublicPasses: availability("direct"),
1767
+ listPublicMemberships: availability("direct"),
1768
+ getPublicFormById: content(["site_forms"]),
1769
+ getPublicBookingServices: availability("direct"),
1770
+ getPublicBookingService: availability("direct"),
1771
+ getPublicBookingResourcesReference: availability("direct"),
1772
+ getPublicBookingAvailableDates: availability("direct"),
1773
+ getPublicBookingAvailableSlots: availability("direct"),
1774
+ getPublicWeeklySlotAvailability: availability("direct"),
1775
+ listPublicForms: content(["site_forms"]),
1776
+ checkRedirect: content([]),
1777
+ getPublicRoutableContent: content(["published_content"]),
1778
+ getPublicSitemapRoutes: content(["published_content"])
1779
+ };
1780
+ new Set(Object.keys(PUBLIC_READ_CACHE_POLICIES));
1781
+ }));
1782
+ //#endregion
1292
1783
  //#region ../core/src/event-series-behaviour.ts
1293
1784
  var WHOLE_SERIES_EVENT_PRESET_VALUES, SURFACE_EVENT_PRESET_VALUES;
1294
1785
  var init_event_series_behaviour = __esmMin((() => {
@@ -1603,11 +2094,14 @@ var init_booking_verticals = __esmMin((() => {
1603
2094
  init_booking_vertical_config();
1604
2095
  }));
1605
2096
  //#endregion
2097
+ //#region ../core/src/navigation-locations.ts
2098
+ var init_navigation_locations = __esmMin((() => {}));
2099
+ //#endregion
1606
2100
  //#region ../core/src/index.ts
1607
2101
  var init_src$4 = __esmMin((() => {
1608
2102
  init_branded();
1609
2103
  init_date_math();
1610
- init_duration();
2104
+ init_duration$1();
1611
2105
  init_demo_capability_policy();
1612
2106
  init_demo_claim_access();
1613
2107
  init_demo_lifecycle_status();
@@ -1628,7 +2122,7 @@ var init_src$4 = __esmMin((() => {
1628
2122
  init_dated_offering_settlement();
1629
2123
  init_person_records();
1630
2124
  init_rectification();
1631
- init_location();
2125
+ init_location$1();
1632
2126
  init_business_address();
1633
2127
  init_result();
1634
2128
  init_assert_never();
@@ -1641,13 +2135,20 @@ var init_src$4 = __esmMin((() => {
1641
2135
  init_participant_identity();
1642
2136
  init_public_url_validation();
1643
2137
  init_public_profile();
2138
+ init_public_experience();
1644
2139
  init_rich_text();
1645
2140
  init_footer_composition();
1646
2141
  init_footer_navigation_layout();
1647
2142
  init_footer_arrangement();
1648
2143
  init_footer_composition_types();
1649
2144
  init_footer_engagement();
1650
- init_newsletter_signup_destination$1();
2145
+ init_mailing_list_identifiers();
2146
+ init_mailing_list_setup();
2147
+ init_mailing_list_setup_parser();
2148
+ init_mailing_list_targeting();
2149
+ init_mailing_list_runtime();
2150
+ init_mailing_list_targeting_parser();
2151
+ init_mailing_list_submission();
1651
2152
  init_number_input();
1652
2153
  init_field_errors();
1653
2154
  init_form_submission_preview();
@@ -1666,8 +2167,10 @@ var init_src$4 = __esmMin((() => {
1666
2167
  init_secret();
1667
2168
  init_site_route_target();
1668
2169
  init_whole_series_run_schedule();
2170
+ init_public_read_cache_contract();
1669
2171
  init_booking_verticals();
1670
2172
  init_event_series_behaviour();
2173
+ init_navigation_locations();
1671
2174
  }));
1672
2175
  //#endregion
1673
2176
  //#region ../media-core/src/types.ts
@@ -1826,7 +2329,7 @@ var init_videoSlotPolicy = __esmMin((() => {}));
1826
2329
  var init_identifiers = __esmMin((() => {}));
1827
2330
  //#endregion
1828
2331
  //#region ../media-core/src/typeGuards.ts
1829
- function isRecord$12(value) {
2332
+ function isRecord$11(value) {
1830
2333
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
1831
2334
  }
1832
2335
  var init_typeGuards$1 = __esmMin((() => {}));
@@ -1955,8 +2458,8 @@ function walkAndCollectImageAttrs(value, out, location = "") {
1955
2458
  value.forEach((item, index) => walkAndCollectImageAttrs(item, out, `${location}[${index}]`));
1956
2459
  return;
1957
2460
  }
1958
- if (!isRecord$12(value)) return;
1959
- if (value.type === "image" && isRecord$12(value.attrs)) out.push({
2461
+ if (!isRecord$11(value)) return;
2462
+ if (value.type === "image" && isRecord$11(value.attrs)) out.push({
1960
2463
  attrs: value.attrs,
1961
2464
  location: location ? `${location}.attrs` : "attrs"
1962
2465
  });
@@ -3672,82 +4175,125 @@ var init_classNames = __esmMin((() => {
3672
4175
  init_types$13();
3673
4176
  }));
3674
4177
  //#endregion
3675
- //#region ../theme-core/src/buttons/effects/presets/background.ts
3676
- function shadeBackgroundEffect(config) {
3677
- return {
3678
- id: config.id,
3679
- name: config.name,
3680
- description: config.description,
3681
- category: "background",
3682
- pseudoElement: "none",
3683
- applicableTo: ["button"],
3684
- customizableOption: {
3685
- name: "amount",
3686
- type: "select",
3687
- label: config.label,
3688
- default: 100,
3689
- options: [
3690
- 0,
3691
- 100,
3692
- 200,
3693
- 300,
3694
- 400,
3695
- 500,
3696
- 600,
3697
- 700,
3698
- 800,
3699
- 900
3700
- ]
4178
+ //#region ../theme-core/src/tokens/tokens.ts
4179
+ var defaultThemeTokens;
4180
+ var init_tokens$1 = __esmMin((() => {
4181
+ defaultThemeTokens = {
4182
+ color: {
4183
+ "background/base": "#ffffff",
4184
+ "background/elevated": "#f5f5f5",
4185
+ "surface/base": "#ffffff",
4186
+ "surface/subtle": "#f9f9fb",
4187
+ "surface/inverted": "#111111",
4188
+ "content/primary": "#111111",
4189
+ "content/secondary": "#3f3f46",
4190
+ "accent/primary": "#2563eb",
4191
+ "accent/secondary": "#1d4ed8",
4192
+ "border/base": "#e5e7eb"
3701
4193
  },
3702
- isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3703
- generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3704
- if (buttonConfig.background.type !== "solid") return "";
3705
- const amount = (options.amount || 100) * config.shadeDirection;
3706
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3707
- return `
3708
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3709
- background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3710
- }
3711
- `;
4194
+ typography: {
4195
+ "display/hero": {
4196
+ fontSize: "clamp(48px, 8vw, 96px)",
4197
+ lineHeight: "1.05",
4198
+ fontWeight: "700"
4199
+ },
4200
+ "display/section": {
4201
+ fontSize: "clamp(40px, 6vw, 72px)",
4202
+ lineHeight: "1.1",
4203
+ fontWeight: "700"
4204
+ },
4205
+ "heading/large": {
4206
+ fontSize: "clamp(32px, 4vw, 48px)",
4207
+ lineHeight: "1.2",
4208
+ fontWeight: "600"
4209
+ },
4210
+ "heading/medium": {
4211
+ fontSize: "clamp(24px, 3vw, 32px)",
4212
+ lineHeight: "1.25",
4213
+ fontWeight: "600"
4214
+ },
4215
+ "heading/small": {
4216
+ fontSize: "20px",
4217
+ lineHeight: "1.3",
4218
+ fontWeight: "600"
4219
+ },
4220
+ "body/normal": {
4221
+ fontSize: "16px",
4222
+ lineHeight: "1.6",
4223
+ fontWeight: "400"
4224
+ },
4225
+ "body/small": {
4226
+ fontSize: "14px",
4227
+ lineHeight: "1.5",
4228
+ fontWeight: "400"
4229
+ },
4230
+ caption: {
4231
+ fontSize: "12px",
4232
+ lineHeight: "1.4",
4233
+ fontWeight: "500"
4234
+ }
4235
+ },
4236
+ spacing: {
4237
+ none: "0px",
4238
+ "3xs": "4px",
4239
+ "2xs": "8px",
4240
+ xs: "12px",
4241
+ sm: "16px",
4242
+ md: "24px",
4243
+ lg: "32px",
4244
+ xl: "40px",
4245
+ "2xl": "56px",
4246
+ "3xl": "72px"
4247
+ },
4248
+ radius: {
4249
+ none: "0px",
4250
+ xs: "2px",
4251
+ sm: "4px",
4252
+ md: "8px",
4253
+ lg: "12px",
4254
+ pill: "999px",
4255
+ full: "9999px"
4256
+ },
4257
+ shadow: {
4258
+ none: "none",
4259
+ soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
4260
+ medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
4261
+ strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
4262
+ },
4263
+ palette: {
4264
+ surface: "#ffffff",
4265
+ "neutral-50": "#f9fafb",
4266
+ "neutral-900": "#111827",
4267
+ primary: "#2563eb",
4268
+ "primary-50": "#eff6ff",
4269
+ "primary-500": "#2563eb",
4270
+ "primary-900": "#1d4ed8",
4271
+ secondary: "#9333ea",
4272
+ "secondary-50": "#f3e8ff",
4273
+ "secondary-500": "#9333ea",
4274
+ "secondary-900": "#4c1d95",
4275
+ accent: "#f97316",
4276
+ "accent-50": "#fff7ed",
4277
+ "accent-500": "#f97316",
4278
+ "accent-900": "#7c2d12"
3712
4279
  }
3713
4280
  };
3714
- }
3715
- var init_background$3 = __esmMin((() => {
3716
- shadeBackgroundEffect({
3717
- id: "darken-background",
3718
- name: "Darken on Hover",
3719
- description: "Darkens the background color on hover",
3720
- label: "Darken Amount (shade step)",
3721
- shadeDirection: 1
3722
- });
3723
- shadeBackgroundEffect({
3724
- id: "lighten-background",
3725
- name: "Lighten on Hover",
3726
- description: "Lightens the background color on hover",
3727
- label: "Lighten Amount (shade step)",
3728
- shadeDirection: -1
3729
- });
3730
4281
  }));
3731
4282
  //#endregion
3732
- //#region ../theme-core/src/buttons/effects/registry.ts
3733
- var init_registry$8 = __esmMin((() => {
3734
- init_background$3();
3735
- init_effectClassification();
3736
- }));
3737
- //#endregion
3738
- //#region ../theme-core/src/interactive/generateEffectsCSS.ts
3739
- var init_generateEffectsCSS = __esmMin((() => {
3740
- init_registry$8();
4283
+ //#region ../theme-core/src/tokens/index.ts
4284
+ var init_tokens = __esmMin((() => {
4285
+ init_tokens$1();
4286
+ init_blockColorTokens();
4287
+ init_themeColorTokens();
4288
+ init_colorTokenParts();
4289
+ init_resolver$2();
3741
4290
  }));
3742
4291
  //#endregion
3743
- //#region ../theme-core/src/buttons/generateDefaultButtonSystem.ts
3744
- var init_generateDefaultButtonSystem = __esmMin((() => {
3745
- init_types$13();
4292
+ //#region ../theme-core/src/surfaces/foregroundInteraction.ts
4293
+ var init_foregroundInteraction = __esmMin((() => {
4294
+ init_tokens();
3746
4295
  }));
3747
4296
  //#endregion
3748
- //#region ../theme-core/src/buttons/affordanceIcons.ts
3749
- var init_affordanceIcons = __esmMin((() => {}));
3750
- //#endregion
3751
4297
  //#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
3752
4298
  /** Resolve an opaque colour, compositing alpha against an explicit underlay. */
3753
4299
  function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
@@ -3952,6 +4498,7 @@ var init_resolveSurfaceForeground = __esmMin((() => {
3952
4498
  //#region ../theme-core/src/surfaces/index.ts
3953
4499
  var init_surfaces = __esmMin((() => {
3954
4500
  init_foregroundContract();
4501
+ init_foregroundInteraction();
3955
4502
  init_foregroundRoles();
3956
4503
  init_resolveSurfaceForeground();
3957
4504
  }));
@@ -4057,6 +4604,87 @@ var init_colorStyles = __esmMin((() => {
4057
4604
  };
4058
4605
  }));
4059
4606
  //#endregion
4607
+ //#region ../theme-core/src/tokens/resolver.ts
4608
+ var init_resolver$2 = __esmMin((() => {
4609
+ init_colorStyles();
4610
+ }));
4611
+ //#endregion
4612
+ //#region ../theme-core/src/buttons/effects/presets/background.ts
4613
+ function shadeBackgroundEffect(config) {
4614
+ return {
4615
+ id: config.id,
4616
+ name: config.name,
4617
+ description: config.description,
4618
+ category: "background",
4619
+ pseudoElement: "none",
4620
+ applicableTo: ["button"],
4621
+ customizableOption: {
4622
+ name: "amount",
4623
+ type: "select",
4624
+ label: config.label,
4625
+ default: 100,
4626
+ options: [
4627
+ 0,
4628
+ 100,
4629
+ 200,
4630
+ 300,
4631
+ 400,
4632
+ 500,
4633
+ 600,
4634
+ 700,
4635
+ 800,
4636
+ 900
4637
+ ]
4638
+ },
4639
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
4640
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
4641
+ if (buttonConfig.background.type !== "solid") return "";
4642
+ const amount = (options.amount || 100) * config.shadeDirection;
4643
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
4644
+ return `
4645
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
4646
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
4647
+ }
4648
+ `;
4649
+ }
4650
+ };
4651
+ }
4652
+ var init_background$3 = __esmMin((() => {
4653
+ shadeBackgroundEffect({
4654
+ id: "darken-background",
4655
+ name: "Darken on Hover",
4656
+ description: "Darkens the background color on hover",
4657
+ label: "Darken Amount (shade step)",
4658
+ shadeDirection: 1
4659
+ });
4660
+ shadeBackgroundEffect({
4661
+ id: "lighten-background",
4662
+ name: "Lighten on Hover",
4663
+ description: "Lightens the background color on hover",
4664
+ label: "Lighten Amount (shade step)",
4665
+ shadeDirection: -1
4666
+ });
4667
+ }));
4668
+ //#endregion
4669
+ //#region ../theme-core/src/buttons/effects/registry.ts
4670
+ var init_registry$8 = __esmMin((() => {
4671
+ init_background$3();
4672
+ init_effectClassification();
4673
+ }));
4674
+ //#endregion
4675
+ //#region ../theme-core/src/interactive/generateEffectsCSS.ts
4676
+ var init_generateEffectsCSS = __esmMin((() => {
4677
+ init_registry$8();
4678
+ }));
4679
+ //#endregion
4680
+ //#region ../theme-core/src/buttons/generateDefaultButtonSystem.ts
4681
+ var init_generateDefaultButtonSystem = __esmMin((() => {
4682
+ init_types$13();
4683
+ }));
4684
+ //#endregion
4685
+ //#region ../theme-core/src/buttons/affordanceIcons.ts
4686
+ var init_affordanceIcons = __esmMin((() => {}));
4687
+ //#endregion
4060
4688
  //#region ../theme-core/src/utils/tokenOrColor.ts
4061
4689
  function isCssColorLiteral(value) {
4062
4690
  const trimmed = value.trim();
@@ -4494,6 +5122,7 @@ var init_resolvedButtonCss = __esmMin((() => {
4494
5122
  var init_generateButtonCss = __esmMin((() => {
4495
5123
  init_types$13();
4496
5124
  init_classNames();
5125
+ init_resolver$2();
4497
5126
  init_generateEffectsCSS();
4498
5127
  init_generateDefaultButtonSystem();
4499
5128
  init_resolveButtonColourStates();
@@ -6542,6 +7171,7 @@ var init_roles = __esmMin((() => {
6542
7171
  //#endregion
6543
7172
  //#region ../theme-core/src/cards/generateCardCss.ts
6544
7173
  var init_generateCardCss = __esmMin((() => {
7174
+ init_resolver$2();
6545
7175
  init_roles();
6546
7176
  init_types$12();
6547
7177
  init_surfaces();
@@ -7464,7 +8094,7 @@ var init_interactionPalette = __esmMin((() => {
7464
8094
  //#endregion
7465
8095
  //#region ../theme-core/src/boxBackgroundSchema.ts
7466
8096
  function normalizeAuthoringOpacity(value) {
7467
- if (!isRecord$11(value)) return value;
8097
+ if (!isRecord$10(value)) return value;
7468
8098
  return {
7469
8099
  ...value,
7470
8100
  opacity: normalizeOpacity(value.opacity)
@@ -7473,7 +8103,7 @@ function normalizeAuthoringOpacity(value) {
7473
8103
  function normalizeOpacity(value) {
7474
8104
  return typeof value === "number" && value > 1 && value <= 100 ? value / 100 : value;
7475
8105
  }
7476
- function isRecord$11(value) {
8106
+ function isRecord$10(value) {
7477
8107
  return typeof value === "object" && value !== null && !Array.isArray(value);
7478
8108
  }
7479
8109
  var boxBackgroundOverlaySchema, commonSchema, mediaPresentationSchema, boxBackgroundSchema;
@@ -8299,7 +8929,7 @@ var init_media$3 = __esmMin((() => {
8299
8929
  /**
8300
8930
  * Strict record guard: excludes null, primitives, and arrays.
8301
8931
  */
8302
- function isRecord$10(value) {
8932
+ function isRecord$9(value) {
8303
8933
  return typeof value === "object" && value !== null && !Array.isArray(value);
8304
8934
  }
8305
8935
  /**
@@ -8450,15 +9080,34 @@ var init_bookingConsent = __esmMin((() => {
8450
9080
  checkboxLabel: z.string().min(1)
8451
9081
  });
8452
9082
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
8453
- }));
8454
- //#endregion
8455
- //#region ../blocks/src/system/blocks/events/shared/schemas.ts
8456
- var eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCurrencySchema, publicCentsSchema, publicPositiveCentsSchema, publicIsoDateTimeSchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventPricingOptionAvailabilitySchema, publicEventPricingOptionSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventBookingAvailabilitySchema, publicRunSessionSchema, publicWholeSeriesRunSchema, publicEventBaseSchema, publicEventSchema, publicEventsArraySchema;
9083
+ })), publicEventLoaderQuerySchemaShape, eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCurrencySchema, publicCentsSchema, publicPositiveCentsSchema, publicIsoDateTimeSchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventPricingOptionAvailabilitySchema, publicEventPricingOptionSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventBookingAvailabilitySchema, publicRunSessionSchema, publicWholeSeriesRunSchema, publicEventBaseSchema, publicEventSchema, publicEventsArraySchema;
8457
9084
  var init_schemas = __esmMin((() => {
8458
9085
  init_media$3();
8459
9086
  init_richTextSchema();
8460
9087
  init_bookingPaymentTerms();
8461
9088
  init_bookingConsent();
9089
+ publicEventLoaderQuerySchemaShape = {
9090
+ limit: z.string().optional(),
9091
+ from: z.string().optional(),
9092
+ to: z.string().optional(),
9093
+ afterStartsAt: z.string().optional(),
9094
+ afterId: z.string().optional(),
9095
+ categoryIds: z.string().optional(),
9096
+ venueId: z.string().optional(),
9097
+ staffMemberId: z.string().optional(),
9098
+ eventSurface: z.string().optional(),
9099
+ eventPresets: z.string().optional(),
9100
+ scheduleScope: z.string().optional(),
9101
+ seriesId: z.string().optional(),
9102
+ seriesIds: z.string().optional(),
9103
+ runSeriesId: z.string().optional(),
9104
+ seriesSlug: z.string().optional(),
9105
+ includeOccurrenceId: z.string().optional(),
9106
+ readIntent: z.string().optional(),
9107
+ detailLevel: z.string().optional(),
9108
+ readProfile: z.string().optional()
9109
+ };
9110
+ z.object(publicEventLoaderQuerySchemaShape);
8462
9111
  eventPresetSchema = z.enum([
8463
9112
  "event",
8464
9113
  "class",
@@ -8918,6 +9567,14 @@ var init_calendarWindow = __esmMin((() => {
8918
9567
  var init_contracts$2 = __esmMin((() => {
8919
9568
  init_calendarWindow();
8920
9569
  }));
9570
+ //#endregion
9571
+ //#region ../api/src/apiEndpointTypes.ts
9572
+ function allowedDemoMutationPolicy() {
9573
+ return {
9574
+ classification: "allowed",
9575
+ publicMessage: ""
9576
+ };
9577
+ }
8921
9578
  function blockedDemoMutationPolicy(classification, publicMessage) {
8922
9579
  if (publicMessage.trim() === "") throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
8923
9580
  return {
@@ -8925,12 +9582,13 @@ function blockedDemoMutationPolicy(classification, publicMessage) {
8925
9582
  publicMessage
8926
9583
  };
8927
9584
  }
8928
- var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED;
9585
+ var init_apiEndpointTypes = __esmMin((() => {})), DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED, DEMO_MUTATION_ALLOWED;
8929
9586
  var init_demoMutationPolicies = __esmMin((() => {
8930
9587
  init_apiEndpointTypes();
8931
9588
  DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy("blocked-hidden", "This action is not available in demo sites.");
8932
9589
  DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy("blocked-disabled", "This setting is disabled in demo sites.");
8933
9590
  blockedDemoMutationPolicy("internal-only", "This internal operation is not available in demo sites.");
9591
+ DEMO_MUTATION_ALLOWED = allowedDemoMutationPolicy();
8934
9592
  }));
8935
9593
  //#endregion
8936
9594
  //#region ../api/src/cache-tags.ts
@@ -9885,14 +10543,117 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
9885
10543
  responseKind: "json",
9886
10544
  errors: ["auth:forbidden", "server:internal_error"]
9887
10545
  },
9888
- getMailchimpSignupSyncHealth: {
9889
- path: "/sites/{siteId}/integrations/mailchimp/signup-sync-health",
10546
+ getMailingListSetup: {
10547
+ path: "/sites/{siteId}/mailing-list/setup",
10548
+ method: "GET",
10549
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10550
+ auth: "user",
10551
+ responseKind: "json",
10552
+ errors: ["auth:forbidden", "server:internal_error"]
10553
+ },
10554
+ getMailingListAuthoringContext: {
10555
+ path: "/sites/{siteId}/mailing-list/authoring-context",
10556
+ method: "GET",
10557
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10558
+ auth: "user",
10559
+ responseKind: "json",
10560
+ errors: ["auth:forbidden", "server:internal_error"]
10561
+ },
10562
+ previewMailingListSetupChange: {
10563
+ path: "/sites/{siteId}/mailing-list/setup/preview",
10564
+ method: "POST",
10565
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10566
+ auth: "user",
10567
+ responseKind: "json",
10568
+ demoMutation: DEMO_MUTATION_ALLOWED,
10569
+ errors: [
10570
+ "auth:forbidden",
10571
+ "validation:invalid_input",
10572
+ "server:internal_error"
10573
+ ]
10574
+ },
10575
+ applyMailingListSetupChange: {
10576
+ path: "/sites/{siteId}/mailing-list/setup",
10577
+ method: "PUT",
10578
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10579
+ auth: "user",
10580
+ responseKind: "json",
10581
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10582
+ errors: [
10583
+ "auth:forbidden",
10584
+ "validation:invalid_input",
10585
+ "resource:conflict",
10586
+ "server:internal_error"
10587
+ ]
10588
+ },
10589
+ getMailingListProviderCatalog: {
10590
+ path: "/sites/{siteId}/mailing-list/providers/{provider}/catalog",
10591
+ method: "GET",
10592
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10593
+ auth: "user",
10594
+ responseKind: "json",
10595
+ errors: [
10596
+ "auth:forbidden",
10597
+ "validation:invalid_input",
10598
+ "server:internal_error"
10599
+ ]
10600
+ },
10601
+ refreshMailingListProviderCatalog: {
10602
+ path: "/sites/{siteId}/mailing-list/providers/{provider}/catalog/refresh",
10603
+ method: "POST",
10604
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10605
+ auth: "user",
10606
+ responseKind: "json",
10607
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10608
+ errors: [
10609
+ "auth:forbidden",
10610
+ "validation:invalid_input",
10611
+ "server:internal_error"
10612
+ ]
10613
+ },
10614
+ getMailingListProviderHealth: {
10615
+ path: "/sites/{siteId}/mailing-list/health",
10616
+ method: "GET",
10617
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
10618
+ auth: "user",
10619
+ responseKind: "json",
10620
+ errors: ["auth:forbidden", "server:internal_error"]
10621
+ },
10622
+ getBrevoConnection: {
10623
+ path: "/sites/{siteId}/integrations/brevo/connection",
9890
10624
  method: "GET",
9891
10625
  tags: [TAG_TEMPLATES.site],
9892
10626
  auth: "user",
9893
10627
  responseKind: "json",
9894
10628
  errors: ["auth:forbidden", "server:internal_error"]
9895
10629
  },
10630
+ connectBrevo: {
10631
+ path: "/sites/{siteId}/integrations/brevo/connection",
10632
+ method: "PUT",
10633
+ tags: [TAG_TEMPLATES.site],
10634
+ auth: "user",
10635
+ responseKind: "json",
10636
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10637
+ errors: [
10638
+ "auth:forbidden",
10639
+ "validation:invalid_input",
10640
+ "resource:conflict",
10641
+ "server:internal_error"
10642
+ ]
10643
+ },
10644
+ disconnectBrevo: {
10645
+ path: "/sites/{siteId}/integrations/brevo/disconnect",
10646
+ method: "POST",
10647
+ tags: [TAG_TEMPLATES.site],
10648
+ auth: "user",
10649
+ responseKind: "json",
10650
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
10651
+ errors: [
10652
+ "auth:forbidden",
10653
+ "resource:conflict",
10654
+ "server:internal_error"
10655
+ ]
10656
+ },
9896
10657
  getMailchimpConnection: {
9897
10658
  path: "/sites/{siteId}/integrations/mailchimp/connection",
9898
10659
  method: "GET",
@@ -10121,6 +10882,7 @@ var init_newsletterEndpointDefinitions = __esmMin((() => {
10121
10882
  var PUBLIC_EVENT_ENDPOINT_DEFINITIONS;
10122
10883
  var init_publicEventEndpointDefinitions = __esmMin((() => {
10123
10884
  init_cache_tags();
10885
+ init_src$4();
10124
10886
  init_defineEndpointDefinitions();
10125
10887
  PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10126
10888
  listPublicEventCalendarWindow: {
@@ -10153,7 +10915,7 @@ var init_publicEventEndpointDefinitions = __esmMin((() => {
10153
10915
  resolveEventSubroute: {
10154
10916
  path: "/public/sites/{siteId}/events/subroutes/resolve",
10155
10917
  method: "GET",
10156
- revalidate: 60,
10918
+ revalidate: publicReadFreshnessSeconds("resolveEventSubroute"),
10157
10919
  tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
10158
10920
  auth: "public",
10159
10921
  responseKind: "json",
@@ -10189,12 +10951,13 @@ var init_publicEventCheckoutEndpointDefinitions = __esmMin((() => {
10189
10951
  var PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS;
10190
10952
  var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10191
10953
  init_cache_tags();
10954
+ init_src$4();
10192
10955
  init_defineEndpointDefinitions();
10193
10956
  PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
10194
10957
  getPublicBookingServices: {
10195
10958
  path: "/public/bookings/services",
10196
10959
  method: "GET",
10197
- revalidate: 60,
10960
+ revalidate: publicReadFreshnessSeconds("getPublicBookingServices"),
10198
10961
  tags: [TAG_TEMPLATES.publicBookingServices],
10199
10962
  auth: "public",
10200
10963
  responseKind: "json"
@@ -10202,7 +10965,15 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10202
10965
  getPublicBookingService: {
10203
10966
  path: "/public/bookings/services/{serviceId}",
10204
10967
  method: "GET",
10205
- revalidate: 60,
10968
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
10969
+ tags: [TAG_TEMPLATES.publicBookingServices],
10970
+ auth: "public",
10971
+ responseKind: "json"
10972
+ },
10973
+ getPublicBookingServiceBySlug: {
10974
+ path: "/public/bookings/services/by-slug/{slug}",
10975
+ method: "GET",
10976
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
10206
10977
  tags: [TAG_TEMPLATES.publicBookingServices],
10207
10978
  auth: "public",
10208
10979
  responseKind: "json"
@@ -10210,7 +10981,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10210
10981
  getPublicBookingResourcesReference: {
10211
10982
  path: "/public/bookings/resources/reference",
10212
10983
  method: "GET",
10213
- revalidate: 60,
10984
+ revalidate: publicReadFreshnessSeconds("getPublicBookingResourcesReference"),
10214
10985
  tags: [TAG_TEMPLATES.publicBookingServices],
10215
10986
  auth: "public",
10216
10987
  responseKind: "json"
@@ -10218,7 +10989,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10218
10989
  getPublicBookingAvailableDates: {
10219
10990
  path: "/public/bookings/availability/dates",
10220
10991
  method: "GET",
10221
- revalidate: 60,
10992
+ revalidate: publicReadFreshnessSeconds("getPublicBookingAvailableDates"),
10222
10993
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10223
10994
  auth: "public",
10224
10995
  responseKind: "json"
@@ -10226,7 +10997,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10226
10997
  getPublicBookingAvailableSlots: {
10227
10998
  path: "/public/bookings/availability/slots",
10228
10999
  method: "GET",
10229
- revalidate: 60,
11000
+ revalidate: publicReadFreshnessSeconds("getPublicBookingAvailableSlots"),
10230
11001
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10231
11002
  auth: "public",
10232
11003
  responseKind: "json"
@@ -10234,7 +11005,7 @@ var init_publicBookingAvailabilityEndpointDefinitions = __esmMin((() => {
10234
11005
  getPublicWeeklySlotAvailability: {
10235
11006
  path: "/public/bookings/weekly-slot-availability",
10236
11007
  method: "GET",
10237
- revalidate: 60,
11008
+ revalidate: publicReadFreshnessSeconds("getPublicWeeklySlotAvailability"),
10238
11009
  tags: [TAG_TEMPLATES.publicBookingAvailability, TAG_TEMPLATES.publicBookingServices],
10239
11010
  auth: "public",
10240
11011
  responseKind: "json",
@@ -10701,6 +11472,175 @@ var init_sdkMediaEndpointDefinitions = __esmMin((() => {
10701
11472
  }
10702
11473
  });
10703
11474
  }));
11475
+ //#endregion
11476
+ //#region ../api/src/publicReadEndpointDefinitions.ts
11477
+ var PUBLIC_READ_ENDPOINT_DEFINITIONS;
11478
+ var init_publicReadEndpointDefinitions = __esmMin((() => {
11479
+ init_src$4();
11480
+ init_cache_tags();
11481
+ init_defineEndpointDefinitions();
11482
+ PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
11483
+ getPublishedEntryPreview: {
11484
+ path: "/public/content/{siteId}/{type}/{slug}/preview",
11485
+ method: "GET",
11486
+ revalidate: publicReadFreshnessSeconds("getPublishedEntryPreview"),
11487
+ tags: ["content-{siteId}-{type}-{slug}"],
11488
+ auth: "public",
11489
+ responseKind: "json"
11490
+ },
11491
+ listPublishedEntries: {
11492
+ path: "/public/content/{siteId}/{type}/entries",
11493
+ method: "GET",
11494
+ revalidate: publicReadFreshnessSeconds("listPublishedEntries"),
11495
+ tags: ["content-{siteId}-{type}"],
11496
+ auth: "public",
11497
+ responseKind: "json"
11498
+ },
11499
+ getPublicFormById: {
11500
+ path: "/public/forms/{formId}",
11501
+ method: "GET",
11502
+ revalidate: publicReadFreshnessSeconds("getPublicFormById"),
11503
+ tags: [TAG_TEMPLATES.formById],
11504
+ auth: "public",
11505
+ responseKind: "json"
11506
+ },
11507
+ listPublicEvents: {
11508
+ path: "/public/sites/{siteId}/events",
11509
+ method: "GET",
11510
+ revalidate: publicReadFreshnessSeconds("listPublicEvents"),
11511
+ tags: [TAG_TEMPLATES.publicEvents],
11512
+ auth: "public",
11513
+ responseKind: "json"
11514
+ },
11515
+ listPublicTeamMembers: {
11516
+ path: "/public/sites/{siteId}/team-members",
11517
+ method: "GET",
11518
+ revalidate: publicReadFreshnessSeconds("listPublicTeamMembers"),
11519
+ tags: [TAG_TEMPLATES.publicTeamMembers],
11520
+ errors: [],
11521
+ auth: "public",
11522
+ responseKind: "json"
11523
+ },
11524
+ listPublicPasses: {
11525
+ path: "/public/sites/{siteId}/bookings/products/passes",
11526
+ method: "GET",
11527
+ revalidate: publicReadFreshnessSeconds("listPublicPasses"),
11528
+ tags: [TAG_TEMPLATES.publicPasses],
11529
+ auth: "public",
11530
+ responseKind: "json"
11531
+ },
11532
+ listPublicMemberships: {
11533
+ path: "/public/sites/{siteId}/bookings/products/memberships",
11534
+ method: "GET",
11535
+ revalidate: publicReadFreshnessSeconds("listPublicMemberships"),
11536
+ tags: [TAG_TEMPLATES.publicMemberships],
11537
+ auth: "public",
11538
+ responseKind: "json"
11539
+ },
11540
+ listPublicProducts: {
11541
+ path: "/public/sites/{siteId}/products",
11542
+ method: "GET",
11543
+ revalidate: publicReadFreshnessSeconds("listPublicProducts"),
11544
+ tags: [TAG_TEMPLATES.publicProducts],
11545
+ errors: [],
11546
+ auth: "public",
11547
+ responseKind: "json"
11548
+ }
11549
+ });
11550
+ }));
11551
+ //#endregion
11552
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
11553
+ var PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS;
11554
+ var init_publicOnboardingAttemptEndpointDefinitions = __esmMin((() => {
11555
+ init_defineEndpointDefinitions();
11556
+ PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
11557
+ createPublicOnboardingAttempt: {
11558
+ path: "/public/onboarding/attempts",
11559
+ method: "POST",
11560
+ auth: "public",
11561
+ errors: [],
11562
+ responseKind: "json"
11563
+ },
11564
+ createPublicOnboardingLogoUploadUrl: {
11565
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
11566
+ method: "POST",
11567
+ auth: "public",
11568
+ errors: [],
11569
+ responseKind: "json"
11570
+ },
11571
+ uploadPublicOnboardingLogo: {
11572
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
11573
+ method: "POST",
11574
+ auth: "public",
11575
+ errors: [],
11576
+ responseKind: "json"
11577
+ },
11578
+ getPublicOnboardingAttempt: {
11579
+ path: "/public/onboarding/attempts/{attemptToken}",
11580
+ method: "GET",
11581
+ auth: "public",
11582
+ errors: [],
11583
+ responseKind: "json"
11584
+ },
11585
+ getPublicOnboardingAttemptProgress: {
11586
+ path: "/public/onboarding/attempts/{attemptToken}/status",
11587
+ method: "GET",
11588
+ auth: "public",
11589
+ errors: [],
11590
+ responseKind: "json"
11591
+ },
11592
+ updatePublicOnboardingAttempt: {
11593
+ path: "/public/onboarding/attempts/{attemptToken}",
11594
+ method: "PATCH",
11595
+ auth: "public",
11596
+ errors: [],
11597
+ responseKind: "json"
11598
+ },
11599
+ runPublicOnboardingAttempt: {
11600
+ path: "/public/onboarding/attempts/{attemptToken}/run",
11601
+ method: "POST",
11602
+ auth: "public",
11603
+ errors: [],
11604
+ responseKind: "json"
11605
+ },
11606
+ resendPublicOnboardingAttemptConfirmation: {
11607
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
11608
+ method: "POST",
11609
+ auth: "public",
11610
+ errors: [],
11611
+ responseKind: "json"
11612
+ }
11613
+ });
11614
+ }));
11615
+ //#endregion
11616
+ //#region ../api/src/billingEndpointDefinitions.ts
11617
+ var BILLING_ENDPOINT_DEFINITIONS;
11618
+ var init_billingEndpointDefinitions = __esmMin((() => {
11619
+ init_defineEndpointDefinitions();
11620
+ BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
11621
+ adminChangePlan: {
11622
+ path: "/admin/billing/plan",
11623
+ method: "POST",
11624
+ tags: ["admin", "billing"],
11625
+ auth: "admin",
11626
+ responseKind: "json"
11627
+ },
11628
+ changePlan: {
11629
+ path: "/billing/plan/change",
11630
+ method: "POST",
11631
+ tags: ["billing"],
11632
+ auth: "user",
11633
+ responseKind: "json"
11634
+ },
11635
+ createBillingPortalSession: {
11636
+ path: "/billing/portal/session",
11637
+ method: "POST",
11638
+ tags: ["billing"],
11639
+ auth: "user",
11640
+ responseKind: "json"
11641
+ }
11642
+ });
11643
+ }));
10704
11644
  var init_endpoints = __esmMin((() => {
10705
11645
  init_demoMutationPolicies();
10706
11646
  init_cache_tags();
@@ -10717,15 +11657,21 @@ var init_endpoints = __esmMin((() => {
10717
11657
  init_giftingEndpointDefinitions();
10718
11658
  init_sdkEndpointDefinitions();
10719
11659
  init_sdkMediaEndpointDefinitions();
11660
+ init_publicReadEndpointDefinitions();
11661
+ init_publicOnboardingAttemptEndpointDefinitions();
11662
+ init_billingEndpointDefinitions();
10720
11663
  ({
10721
11664
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
11665
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
10722
11666
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
10723
- ...GIFTING_ENDPOINT_DEFINITIONS
11667
+ ...GIFTING_ENDPOINT_DEFINITIONS,
11668
+ ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
11669
+ ...BILLING_ENDPOINT_DEFINITIONS
10724
11670
  }), 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
11671
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
10726
11672
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
10727
11673
  ...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 };
11674
+ }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicBookingServices, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
10729
11675
  }));
10730
11676
  var init_preview_auth = __esmMin((() => {
10731
11677
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
@@ -14369,119 +15315,6 @@ var init_blockFlow = __esmMin((() => {
14369
15315
  init_types$7();
14370
15316
  }));
14371
15317
  //#endregion
14372
- //#region ../theme-core/src/tokens/tokens.ts
14373
- var defaultThemeTokens;
14374
- var init_tokens$1 = __esmMin((() => {
14375
- defaultThemeTokens = {
14376
- color: {
14377
- "background/base": "#ffffff",
14378
- "background/elevated": "#f5f5f5",
14379
- "surface/base": "#ffffff",
14380
- "surface/subtle": "#f9f9fb",
14381
- "surface/inverted": "#111111",
14382
- "content/primary": "#111111",
14383
- "content/secondary": "#3f3f46",
14384
- "accent/primary": "#2563eb",
14385
- "accent/secondary": "#1d4ed8",
14386
- "border/base": "#e5e7eb"
14387
- },
14388
- typography: {
14389
- "display/hero": {
14390
- fontSize: "clamp(48px, 8vw, 96px)",
14391
- lineHeight: "1.05",
14392
- fontWeight: "700"
14393
- },
14394
- "display/section": {
14395
- fontSize: "clamp(40px, 6vw, 72px)",
14396
- lineHeight: "1.1",
14397
- fontWeight: "700"
14398
- },
14399
- "heading/large": {
14400
- fontSize: "clamp(32px, 4vw, 48px)",
14401
- lineHeight: "1.2",
14402
- fontWeight: "600"
14403
- },
14404
- "heading/medium": {
14405
- fontSize: "clamp(24px, 3vw, 32px)",
14406
- lineHeight: "1.25",
14407
- fontWeight: "600"
14408
- },
14409
- "heading/small": {
14410
- fontSize: "20px",
14411
- lineHeight: "1.3",
14412
- fontWeight: "600"
14413
- },
14414
- "body/normal": {
14415
- fontSize: "16px",
14416
- lineHeight: "1.6",
14417
- fontWeight: "400"
14418
- },
14419
- "body/small": {
14420
- fontSize: "14px",
14421
- lineHeight: "1.5",
14422
- fontWeight: "400"
14423
- },
14424
- caption: {
14425
- fontSize: "12px",
14426
- lineHeight: "1.4",
14427
- fontWeight: "500"
14428
- }
14429
- },
14430
- spacing: {
14431
- none: "0px",
14432
- "3xs": "4px",
14433
- "2xs": "8px",
14434
- xs: "12px",
14435
- sm: "16px",
14436
- md: "24px",
14437
- lg: "32px",
14438
- xl: "40px",
14439
- "2xl": "56px",
14440
- "3xl": "72px"
14441
- },
14442
- radius: {
14443
- none: "0px",
14444
- xs: "2px",
14445
- sm: "4px",
14446
- md: "8px",
14447
- lg: "12px",
14448
- pill: "999px",
14449
- full: "9999px"
14450
- },
14451
- shadow: {
14452
- none: "none",
14453
- soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
14454
- medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
14455
- strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
14456
- },
14457
- palette: {
14458
- surface: "#ffffff",
14459
- "neutral-50": "#f9fafb",
14460
- "neutral-900": "#111827",
14461
- primary: "#2563eb",
14462
- "primary-50": "#eff6ff",
14463
- "primary-500": "#2563eb",
14464
- "primary-900": "#1d4ed8",
14465
- secondary: "#9333ea",
14466
- "secondary-50": "#f3e8ff",
14467
- "secondary-500": "#9333ea",
14468
- "secondary-900": "#4c1d95",
14469
- accent: "#f97316",
14470
- "accent-50": "#fff7ed",
14471
- "accent-500": "#f97316",
14472
- "accent-900": "#7c2d12"
14473
- }
14474
- };
14475
- }));
14476
- //#endregion
14477
- //#region ../theme-core/src/tokens/index.ts
14478
- var init_tokens = __esmMin((() => {
14479
- init_tokens$1();
14480
- init_blockColorTokens();
14481
- init_themeColorTokens();
14482
- init_colorTokenParts();
14483
- }));
14484
- //#endregion
14485
15318
  //#region ../theme-core/src/site-styles/backgroundAppearance.ts
14486
15319
  function parseBackgroundAppearanceColorToken(value) {
14487
15320
  if (typeof value !== "string") return null;
@@ -18481,6 +19314,7 @@ var init_headerPreferencesPersistence = __esmMin((() => {
18481
19314
  //#endregion
18482
19315
  //#region ../theme-core/src/site-styles/headerOpeningForeground.ts
18483
19316
  var init_headerOpeningForeground = __esmMin((() => {
19317
+ init_foregroundInteraction();
18484
19318
  init_tokens();
18485
19319
  }));
18486
19320
  //#endregion
@@ -18914,6 +19748,7 @@ var init_legacyNavLinkStyle = __esmMin((() => {
18914
19748
  //#endregion
18915
19749
  //#region ../theme-core/src/header/generateHeaderCss.ts
18916
19750
  var init_generateHeaderCss = __esmMin((() => {
19751
+ init_resolver$2();
18917
19752
  init_generateNavLinkCSS();
18918
19753
  init_siteChromeNavPreferences();
18919
19754
  init_shared$4();
@@ -18932,6 +19767,7 @@ var init_header = __esmMin((() => {
18932
19767
  //#endregion
18933
19768
  //#region ../theme-core/src/footer/generateFooterCss.ts
18934
19769
  var init_generateFooterCss = __esmMin((() => {
19770
+ init_resolver$2();
18935
19771
  init_generateNavLinkCSS();
18936
19772
  init_presets$1();
18937
19773
  }));
@@ -19655,6 +20491,7 @@ var init_buildThemeRuntimeFromBridge = __esmMin((() => {
19655
20491
  init_core$1();
19656
20492
  init_core$2();
19657
20493
  init_status();
20494
+ init_typography$1();
19658
20495
  init_blocks$2();
19659
20496
  z.object({
19660
20497
  tokens: z.record(z.string(), z.string()),
@@ -21831,7 +22668,7 @@ var init_semantic = __esmMin((() => {
21831
22668
  }));
21832
22669
  //#endregion
21833
22670
  //#region ../blocks/src/system/icons/value.ts
21834
- function isRecord$9(value) {
22671
+ function isRecord$8(value) {
21835
22672
  return typeof value === "object" && value !== null && !Array.isArray(value);
21836
22673
  }
21837
22674
  function parseBlockIconValue(value) {
@@ -21839,7 +22676,7 @@ function parseBlockIconValue(value) {
21839
22676
  kind: "semantic",
21840
22677
  iconId: value
21841
22678
  };
21842
- if (!isRecord$9(value)) return NO_BLOCK_ICON_VALUE;
22679
+ if (!isRecord$8(value)) return NO_BLOCK_ICON_VALUE;
21843
22680
  switch (value.kind) {
21844
22681
  case "none": return NO_BLOCK_ICON_VALUE;
21845
22682
  case "semantic": return isSemanticIconId$1(value.iconId) ? {
@@ -27510,102 +28347,31 @@ var init_newsletterForm = __esmMin((() => {
27510
28347
  description: "Newsletter subscription form with preset field configurations.",
27511
28348
  fields: [
27512
28349
  {
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.",
28350
+ id: "targeting",
28351
+ type: "group",
28352
+ label: "Mailing-list targeting",
28353
+ description: "Choose what kind of emails people signing up here will receive.",
28354
+ defaultValue: { mode: "default" },
28355
+ required: true,
27562
28356
  ui: {
27563
28357
  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"
28358
+ widget: "mailingListTargeting"
28359
+ },
28360
+ schema: { fields: [{
28361
+ id: "mode",
28362
+ type: "select",
28363
+ label: "Mode",
28364
+ required: true,
28365
+ defaultValue: "default",
28366
+ options: [{
28367
+ value: "default",
28368
+ label: "Default"
28369
+ }, {
28370
+ value: "custom",
28371
+ label: "Custom"
28372
+ }],
28373
+ ui: { hidden: true }
28374
+ }] }
27609
28375
  },
27610
28376
  createButtonVariantField({
27611
28377
  id: "buttonVariant",
@@ -27613,46 +28379,42 @@ var init_newsletterForm = __esmMin((() => {
27613
28379
  defaultValue: "primary"
27614
28380
  }),
27615
28381
  {
27616
- id: "successMessage",
28382
+ id: "mailingListSource",
27617
28383
  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)."
28384
+ label: "Mailing-list source",
28385
+ ui: {
28386
+ hidden: true,
28387
+ intent: "behavior"
28388
+ }
27627
28389
  },
27628
28390
  {
27629
- id: "tags",
28391
+ id: "mailingListSourceToken",
27630
28392
  type: "text",
27631
- label: "Tags (optional)",
27632
- description: "Optional tags to apply on subscribe (comma or semicolon separated).",
28393
+ label: "Mailing-list source token",
27633
28394
  ui: {
27634
- intent: "behavior",
27635
- visibleWhen: {
27636
- field: "destinationProvider",
27637
- equals: "riverbank"
27638
- }
28395
+ hidden: true,
28396
+ intent: "behavior"
27639
28397
  }
27640
28398
  }
27641
28399
  ],
27642
28400
  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" } },
28401
+ source: { $bind: {
28402
+ from: "mailingListSource",
28403
+ fallback: "block"
28404
+ } },
28405
+ sourceRef: {
28406
+ tag: "signed_source_ref",
28407
+ token: { $bind: { from: "mailingListSourceToken" } }
28408
+ },
28409
+ targeting: { $bind: {
28410
+ from: "targeting",
28411
+ fallback: { mode: "default" }
28412
+ } },
28413
+ mailingList: { $bind: { from: "$root.mailingList" } },
27649
28414
  buttonVariant: { $bind: {
27650
28415
  from: "buttonVariant",
27651
28416
  fallback: "primary"
27652
28417
  } },
27653
- successMessage: { $bind: { from: "successMessage" } },
27654
- privacyNote: { $bind: { from: "privacyNote" } },
27655
- tags: { $bind: { from: "tags" } },
27656
28418
  spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
27657
28419
  }), [])]
27658
28420
  });
@@ -30011,14 +30773,19 @@ var init_contact_newsletter = __esmMin((() => {
30011
30773
  as: "h2",
30012
30774
  className: "newsletter-copy-title"
30013
30775
  }, 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" } },
30776
+ source: { $bind: {
30777
+ from: "mailingListSource",
30778
+ fallback: "block"
30779
+ } },
30780
+ sourceRef: {
30781
+ tag: "signed_source_ref",
30782
+ token: { $bind: { from: "mailingListSourceToken" } }
30783
+ },
30784
+ targeting: { $bind: {
30785
+ from: "targeting",
30786
+ fallback: { mode: "default" }
30787
+ } },
30788
+ mailingList: { $bind: { from: "$root.mailingList" } },
30022
30789
  spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } }
30023
30790
  }), [])])])], { className: "contact-newsletter-container" }),
30024
30791
  baseClass: "",
@@ -30053,79 +30820,55 @@ var init_contact_newsletter = __esmMin((() => {
30053
30820
  label: "Newsletter intro"
30054
30821
  },
30055
30822
  {
30056
- id: "listId",
30057
- type: "reference",
30058
- label: "Newsletter list",
30059
- description: "Select the list new subscribers should be added to.",
30823
+ id: "targeting",
30824
+ type: "group",
30825
+ label: "Mailing-list targeting",
30826
+ description: "Choose what kind of emails people signing up here will receive.",
30060
30827
  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" }
30828
+ defaultValue: { mode: "default" },
30829
+ ui: {
30830
+ intent: "behavior",
30831
+ widget: "mailingListTargeting"
30832
+ },
30833
+ schema: { fields: [{
30834
+ id: "mode",
30835
+ type: "select",
30836
+ label: "Mode",
30837
+ required: true,
30838
+ defaultValue: "default",
30839
+ options: [{
30840
+ value: "default",
30841
+ label: "Default"
30842
+ }, {
30843
+ value: "custom",
30844
+ label: "Custom"
30845
+ }],
30846
+ ui: { hidden: true }
30847
+ }] }
30110
30848
  },
30111
30849
  {
30112
- id: "newsletterPrivacyNote",
30850
+ id: "contactTitle",
30113
30851
  type: "text",
30114
- label: "Privacy note",
30115
- ui: { intent: "display" }
30852
+ label: "Contact title",
30853
+ defaultValue: "Get in touch"
30116
30854
  },
30117
30855
  {
30118
- id: "newsletterTags",
30856
+ id: "mailingListSource",
30119
30857
  type: "text",
30120
- label: "Newsletter tags",
30121
- description: "Optional tags to apply on subscribe, separated by comma or semicolon.",
30122
- ui: { intent: "behavior" }
30858
+ label: "Mailing-list source",
30859
+ ui: {
30860
+ hidden: true,
30861
+ intent: "behavior"
30862
+ }
30123
30863
  },
30124
30864
  {
30125
- id: "contactTitle",
30865
+ id: "mailingListSourceToken",
30126
30866
  type: "text",
30127
- label: "Contact title",
30128
- defaultValue: "Get in touch"
30867
+ label: "Mailing-list source token",
30868
+ ui: {
30869
+ hidden: true,
30870
+ intent: "behavior"
30871
+ }
30129
30872
  },
30130
30873
  {
30131
30874
  id: "contactIntro",
@@ -30305,7 +31048,7 @@ var init_faq = __esmMin((() => {
30305
31048
  function toUnknownArray(value) {
30306
31049
  return Array.isArray(value) ? value : [];
30307
31050
  }
30308
- var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, jsonArrayTransform, csvTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, mapTokenOptionsSchema, mapTokenTransform, formattingTransforms;
31051
+ var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, booleanNotTransform, jsonArrayTransform, csvTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, mapTokenOptionsSchema, mapTokenTransform, equalsTransform, formattingTransforms;
30309
31052
  var init_formatting = __esmMin((() => {
30310
31053
  uppercaseTransform = {
30311
31054
  id: "string.uppercase",
@@ -30345,6 +31088,12 @@ var init_formatting = __esmMin((() => {
30345
31088
  summary: "Get the length of an array",
30346
31089
  run: (value) => Array.isArray(value) ? value.length : 0
30347
31090
  };
31091
+ booleanNotTransform = {
31092
+ id: "boolean.not",
31093
+ kind: "formatter",
31094
+ summary: "Invert a boolean value; fail closed to false for other inputs",
31095
+ run: (value) => typeof value === "boolean" ? !value : false
31096
+ };
30348
31097
  jsonArrayTransform = {
30349
31098
  id: "value.jsonArray",
30350
31099
  kind: "formatter",
@@ -30413,11 +31162,20 @@ var init_formatting = __esmMin((() => {
30413
31162
  return role ? `rgb(var(--tb-${role}))` : void 0;
30414
31163
  }
30415
31164
  };
31165
+ equalsTransform = {
31166
+ id: "value.equals",
31167
+ kind: "formatter",
31168
+ summary: "Compare a value to a fixed string",
31169
+ schema: z.object({ value: z.string() }),
31170
+ run: (value, options) => value === options.value
31171
+ };
30416
31172
  formattingTransforms = [
31173
+ equalsTransform,
30417
31174
  uppercaseTransform,
30418
31175
  fallbackTransform,
30419
31176
  dateFormatShort,
30420
31177
  arrayLengthTransform,
31178
+ booleanNotTransform,
30421
31179
  jsonArrayTransform,
30422
31180
  csvTransform,
30423
31181
  marqueeLoopTransform,
@@ -31466,16 +32224,16 @@ var init_media$1 = __esmMin((() => {
31466
32224
  //#region ../blocks/src/system/transforms/registry/content.ts
31467
32225
  function getSiteName(context) {
31468
32226
  const viewModel = context.viewModel;
31469
- if (!isRecord$10(viewModel)) return null;
32227
+ if (!isRecord$9(viewModel)) return null;
31470
32228
  const site = viewModel.site;
31471
- if (isRecord$10(site) && typeof site.title === "string") {
32229
+ if (isRecord$9(site) && typeof site.title === "string") {
31472
32230
  const title = site.title.trim();
31473
32231
  return title.length > 0 ? title : null;
31474
32232
  }
31475
32233
  const root = viewModel.$root;
31476
- if (isRecord$10(root)) {
32234
+ if (isRecord$9(root)) {
31477
32235
  const rootSite = root.site;
31478
- if (isRecord$10(rootSite) && typeof rootSite.title === "string") {
32236
+ if (isRecord$9(rootSite) && typeof rootSite.title === "string") {
31479
32237
  const title = rootSite.title.trim();
31480
32238
  if (title.length > 0) return title;
31481
32239
  }
@@ -31497,7 +32255,7 @@ function replaceTokenText(input, allowedTokens, tokenValues) {
31497
32255
  });
31498
32256
  }
31499
32257
  function visitRichTextNode(node, allowedTokens, tokenValues) {
31500
- if (!isRecord$10(node)) return node;
32258
+ if (!isRecord$9(node)) return node;
31501
32259
  let changed = false;
31502
32260
  const nextNode = { ...node };
31503
32261
  if (nextNode.type === "text" && typeof nextNode.text === "string") {
@@ -31518,7 +32276,7 @@ function visitRichTextNode(node, allowedTokens, tokenValues) {
31518
32276
  return changed ? nextNode : node;
31519
32277
  }
31520
32278
  function interpolateRichTextTokens(value, options, context) {
31521
- if (!isRecord$10(value)) return value;
32279
+ if (!isRecord$9(value)) return value;
31522
32280
  return visitRichTextNode(value, new Set(options.tokens), {
31523
32281
  year: String((/* @__PURE__ */ new Date()).getFullYear()),
31524
32282
  site_name: getSiteName(context)
@@ -31924,13 +32682,9 @@ var init_site_footer = __esmMin((() => {
31924
32682
  };
31925
32683
  footerMailingListBindings = {
31926
32684
  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" } }
32685
+ sourceRef: { $bind: { from: "module.engagement.runtime.sourceRef" } },
32686
+ mailingList: { $bind: { from: "module.engagement.runtime.mailingList" } },
32687
+ targeting: { $bind: { from: "module.engagement.runtime.targeting" } }
31934
32688
  };
31935
32689
  footerSpamProtectionBinding = { spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } } };
31936
32690
  brandLogo = link({
@@ -33684,6 +34438,89 @@ var init_appointment_booking = __esmMin((() => {
33684
34438
  };
33685
34439
  }));
33686
34440
  //#endregion
34441
+ //#region ../blocks/src/system/blocks/appointment-services.tsx
34442
+ var appointmentServicesManifest, appointmentServicesBlockDefinition;
34443
+ var init_appointment_services = __esmMin((() => {
34444
+ init_builder$1();
34445
+ init_styledSection();
34446
+ init_fragments$1();
34447
+ init_boxStyles$1();
34448
+ init_defineBlock();
34449
+ appointmentServicesManifest = createBlockManifest({
34450
+ id: "block.appointment-services",
34451
+ version: "1.0.0",
34452
+ title: "Appointment Services",
34453
+ titleSource: "heading",
34454
+ description: "List public appointment services with booking links",
34455
+ skipSectionStyles: true,
34456
+ additionalFields: [
34457
+ {
34458
+ id: "heading",
34459
+ type: "text",
34460
+ label: "Heading",
34461
+ required: false,
34462
+ multiline: false,
34463
+ defaultValue: "Appointments",
34464
+ ui: { intent: "content" }
34465
+ },
34466
+ {
34467
+ id: "description",
34468
+ type: "richText",
34469
+ label: "Description",
34470
+ required: false,
34471
+ ui: { intent: "content" }
34472
+ },
34473
+ sectionStylesField({
34474
+ id: "_sectionStyles",
34475
+ label: "Section styles",
34476
+ renderInHeader: false
34477
+ })
34478
+ ],
34479
+ styleTokens: {
34480
+ background: "surface",
34481
+ typography: "body",
34482
+ spacing: "md"
34483
+ },
34484
+ behaviours: {
34485
+ supportsThemeSwitching: true,
34486
+ inlineEditing: true,
34487
+ animation: false,
34488
+ paletteHidden: false
34489
+ },
34490
+ category: "interactive",
34491
+ contentSource: { kind: "inline" },
34492
+ tags: [
34493
+ "booking",
34494
+ "appointment",
34495
+ "services",
34496
+ "scheduling"
34497
+ ],
34498
+ icon: "CalendarDays",
34499
+ layout: [styledSection({
34500
+ baseClass: "",
34501
+ spacing: "spacious",
34502
+ children: sectionContainer([
34503
+ text({ as: "h2" }, bind$1("content.heading"), when("content.heading")),
34504
+ richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description")),
34505
+ el$1("appointment-services", {
34506
+ sectionHeading: { $bind: { from: "content.heading" } },
34507
+ services: { $bind: { from: "data.services" } },
34508
+ pathname: { $bind: { from: "$root.pathname" } }
34509
+ })
34510
+ ], { gap: "lg" })
34511
+ })]
34512
+ });
34513
+ appointmentServicesBlockDefinition = {
34514
+ manifest: appointmentServicesManifest,
34515
+ dataSchemas: { services: z.unknown().optional() },
34516
+ dataLoaders: { services: {
34517
+ endpoint: "getPublicBookingServices",
34518
+ params: { siteId: { $bind: { from: "$root.siteId" } } },
34519
+ mode: "server"
34520
+ } }
34521
+ };
34522
+ }));
34523
+ //#endregion
33687
34524
  //#region ../blocks/src/system/blocks/weekly-slot-availability.ts
33688
34525
  var weeklySlotAvailabilityManifest, weeklySlotAvailabilityOptionSchema, weeklySlotAvailabilityDataSchema, weeklySlotAvailabilityBlockDefinition;
33689
34526
  var init_weekly_slot_availability = __esmMin((() => {
@@ -33950,7 +34787,7 @@ var init_runGrouping = __esmMin((() => {}));
33950
34787
  //#endregion
33951
34788
  //#region ../blocks/src/system/blocks/events/shared/fields.ts
33952
34789
  var cardStylingFields, eventDisplayFields, emptyStateField, sectionHeaderFields, layoutField, columnsField;
33953
- var init_fields = __esmMin((() => {
34790
+ var init_fields$1 = __esmMin((() => {
33954
34791
  init_button();
33955
34792
  init_boxStyles$1();
33956
34793
  cardStylingFields = [
@@ -34096,7 +34933,7 @@ var init_shared$2 = __esmMin((() => {
34096
34933
  init_types$2();
34097
34934
  init_schemas();
34098
34935
  init_runGrouping();
34099
- init_fields();
34936
+ init_fields$1();
34100
34937
  init_filtering();
34101
34938
  init_layout$1();
34102
34939
  }));
@@ -34220,6 +35057,9 @@ var init_eventScope = __esmMin((() => {
34220
35057
  //#region ../blocks/src/system/runtime/nodes/events/domain/capacity.ts
34221
35058
  var init_capacity = __esmMin((() => {}));
34222
35059
  //#endregion
35060
+ //#region ../blocks/src/system/runtime/nodes/events/domain/bookability.ts
35061
+ var init_bookability = __esmMin((() => {}));
35062
+ //#endregion
34223
35063
  //#region ../blocks/src/system/runtime/nodes/events/domain/cta.ts
34224
35064
  var init_cta$1 = __esmMin((() => {}));
34225
35065
  //#endregion
@@ -34227,11 +35067,11 @@ var init_cta$1 = __esmMin((() => {}));
34227
35067
  var init_dates = __esmMin((() => {}));
34228
35068
  //#endregion
34229
35069
  //#region ../blocks/src/system/runtime/nodes/events/domain/destination.ts
34230
- function isRecord$8(value) {
35070
+ function isRecord$7(value) {
34231
35071
  return typeof value === "object" && value !== null && !Array.isArray(value);
34232
35072
  }
34233
35073
  function isRuntimeEventDestination(value) {
34234
- if (!isRecord$8(value) || typeof value.kind !== "string") return false;
35074
+ if (!isRecord$7(value) || typeof value.kind !== "string") return false;
34235
35075
  if (value.kind === "native") return (value.mode === "cms-managed" || value.mode === "system-managed") && typeof value.path === "string";
34236
35076
  return value.kind === "external" && typeof value.url === "string" && typeof value.label === "string";
34237
35077
  }
@@ -34245,20 +35085,33 @@ function resolveRuntimeEventDestination(event) {
34245
35085
  }
34246
35086
  var init_destination = __esmMin((() => {}));
34247
35087
  //#endregion
35088
+ //#region ../blocks/src/system/runtime/nodes/events/domain/duration.ts
35089
+ var init_duration = __esmMin((() => {}));
35090
+ //#endregion
35091
+ //#region ../blocks/src/system/runtime/nodes/events/domain/location.ts
35092
+ var init_location = __esmMin((() => {}));
35093
+ //#endregion
34248
35094
  //#region ../blocks/src/system/runtime/nodes/events/domain/people.ts
34249
35095
  var init_people = __esmMin((() => {}));
34250
35096
  //#endregion
34251
35097
  //#region ../blocks/src/system/runtime/nodes/events/domain/pricing.ts
34252
35098
  var init_pricing = __esmMin((() => {}));
34253
35099
  //#endregion
35100
+ //#region ../blocks/src/system/runtime/nodes/events/domain/quickDates.ts
35101
+ var init_quickDates = __esmMin((() => {}));
35102
+ //#endregion
34254
35103
  //#region ../blocks/src/system/runtime/nodes/events/domain/index.ts
34255
35104
  var init_domain = __esmMin((() => {
34256
35105
  init_capacity();
35106
+ init_bookability();
34257
35107
  init_cta$1();
34258
35108
  init_dates();
34259
35109
  init_destination();
35110
+ init_duration();
35111
+ init_location();
34260
35112
  init_people();
34261
35113
  init_pricing();
35114
+ init_quickDates();
34262
35115
  }));
34263
35116
  //#endregion
34264
35117
  //#region ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
@@ -34383,9 +35236,52 @@ var init_registrationEventAdapter = __esmMin((() => {
34383
35236
  init_runGrouping();
34384
35237
  }));
34385
35238
  //#endregion
35239
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
35240
+ function resolveEventRegistrationEventSource(input) {
35241
+ if (input.wholeSeriesRunEvents != null) return {
35242
+ kind: "loaded",
35243
+ events: input.wholeSeriesRunEvents
35244
+ };
35245
+ if (input.events != null) return {
35246
+ kind: "loaded",
35247
+ events: input.events
35248
+ };
35249
+ return {
35250
+ kind: "unresolved",
35251
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
35252
+ };
35253
+ }
35254
+ function parseEventLoaderRecoveryRequest(value) {
35255
+ const parsed = eventLoaderFailureSchema.safeParse(value);
35256
+ if (!parsed.success) return null;
35257
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
35258
+ return {
35259
+ ...params,
35260
+ stage: stage ?? "published"
35261
+ };
35262
+ }
35263
+ var _rawLimit, _rawEventSurface, _rawScheduleScope, _rawDetailLevel, stringEventQueryShape, eventRecoveryRequestSchema, eventLoaderFailureSchema;
35264
+ var init_eventSourceRecovery = __esmMin((() => {
35265
+ init_schemas();
35266
+ init_filtering();
35267
+ ({limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape} = publicEventLoaderQuerySchemaShape);
35268
+ eventRecoveryRequestSchema = z.object({
35269
+ ...stringEventQueryShape,
35270
+ limit: z.coerce.number().int().positive().optional(),
35271
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
35272
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
35273
+ detailLevel: z.enum(["full", "listing"]).optional(),
35274
+ stage: z.enum(["preview", "published"]).optional()
35275
+ });
35276
+ eventLoaderFailureSchema = z.object({
35277
+ endpoint: z.literal("listPublicEvents"),
35278
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
35279
+ });
35280
+ }));
35281
+ //#endregion
34386
35282
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
34387
- function buildEventRegistrationDisplay(source) {
34388
- const selectedRun = resolveSelectedWholeSeriesRun(source);
35283
+ function buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents) {
35284
+ const selectedRun = resolveSelectedWholeSeriesRun(scopedSourceEvents);
34389
35285
  if (selectedRun && (!selectedRun.run.enrollmentOpen || toWholeSeriesRegistrationEvent(selectedRun) === null)) return {
34390
35286
  kind: "event-registration",
34391
35287
  state: "registration-closed",
@@ -34393,7 +35289,7 @@ function buildEventRegistrationDisplay(source) {
34393
35289
  titleText: "Registration closed",
34394
35290
  bodyText: "This run is no longer open for bookings."
34395
35291
  };
34396
- const stepLabels = buildEventRegistrationShellStepLabels(source);
35292
+ const stepLabels = buildEventRegistrationShellStepLabels(source, scopedSourceEvents);
34397
35293
  return {
34398
35294
  kind: "event-registration",
34399
35295
  state: "generic-shell",
@@ -34404,8 +35300,8 @@ function buildEventRegistrationDisplay(source) {
34404
35300
  summaryButtonText: source.buttonText?.trim() || "Register"
34405
35301
  };
34406
35302
  }
34407
- function buildEventRegistrationShellStepLabels(source) {
34408
- const selectedRun = resolveSelectedWholeSeriesRun(source);
35303
+ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
35304
+ const selectedRun = resolveSelectedWholeSeriesRun(scopedSourceEvents);
34409
35305
  if (selectedRun) {
34410
35306
  const selectedEvent = toWholeSeriesRegistrationEvent(selectedRun);
34411
35307
  if (!selectedEvent) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
@@ -34415,7 +35311,7 @@ function buildEventRegistrationShellStepLabels(source) {
34415
35311
  event: selectedEvent
34416
35312
  })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
34417
35313
  }
34418
- const scopedEvents = scopeEventRegistrationEvents(source);
35314
+ const scopedEvents = toScopedEventRegistrationEvents(scopedSourceEvents);
34419
35315
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
34420
35316
  const preSelectedEvent = findPreSelectedEvent({
34421
35317
  scopedEvents,
@@ -34428,21 +35324,11 @@ function buildEventRegistrationShellStepLabels(source) {
34428
35324
  event: preSelectedEvent
34429
35325
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
34430
35326
  }
34431
- function scopeEventRegistrationEvents(source) {
34432
- const scoped = scopeEventRegistrationSourceEvents(source);
34433
- return [...toRegistrationEvents(scoped), ...toWholeSeriesRegistrationEvents(scoped)];
35327
+ function toScopedEventRegistrationEvents(scopedSourceEvents) {
35328
+ return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
34434
35329
  }
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
- 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()], {
35330
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
35331
+ return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
34446
35332
  occurrenceContext: source.occurrenceContext,
34447
35333
  subject: source.subject
34448
35334
  });
@@ -34451,8 +35337,8 @@ function scopeEventRegistrationSourceEvents(source) {
34451
35337
  * The one run this surface is registering for, when the scoped events describe
34452
35338
  * exactly one. More than one run means the visitor still has to choose.
34453
35339
  */
34454
- function resolveSelectedWholeSeriesRun(source) {
34455
- const runs = groupPublicEventsByRun(scopeEventRegistrationSourceEvents(source));
35340
+ function resolveSelectedWholeSeriesRun(scopedSourceEvents) {
35341
+ const runs = groupPublicEventsByRun(scopedSourceEvents);
34456
35342
  return runs.length === 1 ? runs[0] : null;
34457
35343
  }
34458
35344
  function shellLabelForRegistrationStep(step, events) {
@@ -34480,16 +35366,16 @@ function buildEventRegistrationShellBodyText(stepLabels) {
34480
35366
  return "Preparing dates, tickets, and booking details.";
34481
35367
  }
34482
35368
  function normalizeEventRegistrationEventInput(value) {
34483
- if (!isRecord$7(value)) return value;
35369
+ if (!isRecord$6(value)) return value;
34484
35370
  return {
34485
35371
  ...value,
34486
35372
  destination: resolveRuntimeEventDestination(value)
34487
35373
  };
34488
35374
  }
34489
- function isRecord$7(value) {
35375
+ function isRecord$6(value) {
34490
35376
  return typeof value === "object" && value !== null && !Array.isArray(value);
34491
35377
  }
34492
- var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, eventRegistrationPublicEventSchema, eventRegistrationHydrationSchemaShape, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationBlockRuntime;
35378
+ var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS, EVENT_REGISTRATION_SHELL_STEP_LABELS, eventRegistrationPublicEventSchema, eventRegistrationHydrationSchemaShape, eventRegistrationEventSourceSchema, eventRegistrationSourceSchema, eventRegistrationDisplaySchema, eventRegistrationHydrationSchema, eventRegistrationRenderSchema, eventRegistrationBlockRuntime;
34493
35379
  var init_event_registration_interactive = __esmMin((() => {
34494
35380
  init_schemas();
34495
35381
  init_runGrouping();
@@ -34503,6 +35389,7 @@ var init_event_registration_interactive = __esmMin((() => {
34503
35389
  init_wizardSteps();
34504
35390
  init_registrationDerivations();
34505
35391
  init_registrationEventAdapter();
35392
+ init_eventSourceRecovery();
34506
35393
  EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
34507
35394
  "Date",
34508
35395
  "Tickets",
@@ -34519,8 +35406,6 @@ var init_event_registration_interactive = __esmMin((() => {
34519
35406
  eventRegistrationHydrationSchemaShape = {
34520
35407
  occurrenceContext: occurrenceContextSchema.optional(),
34521
35408
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
34522
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
34523
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
34524
35409
  maxTickets: z.string().optional(),
34525
35410
  showVenue: z.boolean().optional(),
34526
35411
  showCapacity: z.boolean().optional(),
@@ -34532,12 +35417,22 @@ var init_event_registration_interactive = __esmMin((() => {
34532
35417
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
34533
35418
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
34534
35419
  };
35420
+ eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
35421
+ kind: z.literal("loaded"),
35422
+ events: z.array(eventRegistrationPublicEventSchema)
35423
+ }), z.object({
35424
+ kind: z.literal("unresolved"),
35425
+ request: eventRecoveryRequestSchema.nullable()
35426
+ })]);
34535
35427
  eventRegistrationSourceSchema = z.object({
34536
35428
  siteId: z.string().optional(),
34537
35429
  apiBaseUrl: z.string().optional(),
34538
35430
  portalToken: z.string().nullable().optional(),
34539
35431
  previewToken: z.string().nullable().optional(),
34540
35432
  ...eventRegistrationHydrationSchemaShape,
35433
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
35434
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
35435
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
34541
35436
  className: z.string().nullable().optional(),
34542
35437
  buttonText: z.string().nullable().optional(),
34543
35438
  maxTickets: z.string().nullable().optional(),
@@ -34558,7 +35453,10 @@ var init_event_registration_interactive = __esmMin((() => {
34558
35453
  titleText: z.string(),
34559
35454
  bodyText: z.string()
34560
35455
  })]);
34561
- eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
35456
+ eventRegistrationHydrationSchema = z.object({
35457
+ ...eventRegistrationHydrationSchemaShape,
35458
+ eventSource: eventRegistrationEventSourceSchema
35459
+ });
34562
35460
  eventRegistrationRenderSchema = z.object({
34563
35461
  display: eventRegistrationDisplaySchema,
34564
35462
  hydration: eventRegistrationHydrationSchema
@@ -34577,13 +35475,21 @@ var init_event_registration_interactive = __esmMin((() => {
34577
35475
  render: createZodCodec(eventRegistrationRenderSchema)
34578
35476
  },
34579
35477
  buildRender: (source) => {
34580
- const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
35478
+ const eventSource = resolveEventRegistrationEventSource({
35479
+ events: source.events,
35480
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
35481
+ failures: source.eventLoaderFailures
35482
+ });
35483
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
34581
35484
  return {
34582
- display: buildEventRegistrationDisplay(source),
35485
+ display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
34583
35486
  hydration: {
34584
35487
  occurrenceContext: source.occurrenceContext ?? null,
34585
35488
  subject: source.subject ?? null,
34586
- events,
35489
+ eventSource: eventSource.kind === "loaded" ? {
35490
+ ...eventSource,
35491
+ events: [...scopedSourceEvents]
35492
+ } : eventSource,
34587
35493
  maxTickets: source.maxTickets ?? void 0,
34588
35494
  showVenue: source.showVenue,
34589
35495
  showCapacity: source.showCapacity,
@@ -34763,6 +35669,7 @@ var init_event_registration = __esmMin((() => {
34763
35669
  } },
34764
35670
  events: { $bind: { from: "data.events" } },
34765
35671
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
35672
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
34766
35673
  sitePasses: { $bind: { from: "data.sitePasses" } },
34767
35674
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
34768
35675
  stage: { $bind: {
@@ -34786,6 +35693,11 @@ var init_event_registration = __esmMin((() => {
34786
35693
  dataLoaders: {
34787
35694
  events: {
34788
35695
  endpoint: "listPublicEvents",
35696
+ when: { $bind: {
35697
+ from: "$root.subject.isWholeSeriesBooking",
35698
+ fallback: true,
35699
+ transforms: [{ id: "boolean.not" }]
35700
+ } },
34789
35701
  params: {
34790
35702
  siteId: { $bind: { from: "$root.siteId" } },
34791
35703
  limit: "50",
@@ -34807,13 +35719,9 @@ var init_event_registration = __esmMin((() => {
34807
35719
  /**
34808
35720
  * The runs this page can register for, finished ones included.
34809
35721
  *
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.
35722
+ * A run read is the sole Event source on a whole-series surface. It is
35723
+ * status-bounded rather than date-bounded, so completed runs can still
35724
+ * render their closed state and every run carries its complete schedule.
34817
35725
  */
34818
35726
  wholeSeriesRunEvents: {
34819
35727
  endpoint: "listPublicEvents",
@@ -37562,7 +38470,7 @@ function inferLegacyOfferingsPreviewGroupOrder(overrides) {
37562
38470
  return keys.length >= 2 ? keys : [];
37563
38471
  }
37564
38472
  function normalizeOfferingsPreviewContentForWrite(value) {
37565
- if (!isRecord$6(value)) return null;
38473
+ if (!isRecord$5(value)) return null;
37566
38474
  const groupOrderValue = value.groupOrder;
37567
38475
  if (Array.isArray(groupOrderValue)) {
37568
38476
  const normalized = normalizeOfferingsPreviewGroupOrder(groupOrderValue);
@@ -37575,7 +38483,7 @@ function normalizeOfferingsPreviewContentForWrite(value) {
37575
38483
  ...value,
37576
38484
  groupOrder: []
37577
38485
  };
37578
- const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord$6) : []);
38486
+ const legacyOrder = inferLegacyOfferingsPreviewGroupOrder(Array.isArray(value.groupOverrides) ? value.groupOverrides.filter(isRecord$5) : []);
37579
38487
  return legacyOrder.length > 0 ? {
37580
38488
  ...value,
37581
38489
  groupOrder: legacyOrder
@@ -37589,7 +38497,7 @@ function uniqueOfferingsPreviewSourceKeys(values) {
37589
38497
  }
37590
38498
  return keys;
37591
38499
  }
37592
- function isRecord$6(value) {
38500
+ function isRecord$5(value) {
37593
38501
  return typeof value === "object" && value !== null && !Array.isArray(value);
37594
38502
  }
37595
38503
  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 +38539,18 @@ var init_model = __esmMin((() => {
37631
38539
  }]));
37632
38540
  }));
37633
38541
  //#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
- }
38542
+ //#region ../blocks/src/system/blocks/offerings-preview/fields.ts
37667
38543
  function labelForOfferingPreviewSourceKey(sourceKey) {
37668
38544
  const eventDefinition = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.find((definition) => definition.sourceKey === sourceKey);
37669
38545
  if (eventDefinition) return eventDefinition.label;
37670
38546
  return "Courses";
37671
38547
  }
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();
38548
+ var groupOverrideFields, offeringsPreviewFields;
38549
+ var init_fields = __esmMin((() => {
37740
38550
  init_shared$2();
37741
- init_buttonRoles();
38551
+ init_boxStyles$1();
37742
38552
  init_button();
37743
38553
  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
38554
  groupOverrideFields = [
37753
38555
  {
37754
38556
  id: "sourceKey",
@@ -37954,7 +38756,163 @@ var init_offerings_preview = __esmMin((() => {
37954
38756
  renderInHeader: false
37955
38757
  })
37956
38758
  ];
38759
+ }));
38760
+ //#endregion
38761
+ //#region ../blocks/src/system/blocks/offerings-preview/index.ts
38762
+ function offeringsPreviewHeaderNodes() {
38763
+ return [text({
38764
+ as: "h2",
38765
+ className: { $bind: {
38766
+ from: "content.displayMode",
38767
+ fallback: "rb-text-center",
38768
+ transforms: [{
38769
+ id: "value.equals",
38770
+ options: { value: "catalogue" }
38771
+ }, {
38772
+ id: "ui.conditionalClass",
38773
+ options: {
38774
+ whenTrue: "rb-text-left",
38775
+ whenFalse: "rb-text-center"
38776
+ }
38777
+ }]
38778
+ } }
38779
+ }, bind$1("content.heading"), when("content.heading")), richText({ className: "rb-prose rb-max-w-none" }, bind$1("content.description"), when("content.description"))];
38780
+ }
38781
+ /**
38782
+ * One row per whole-series run, finished runs included.
38783
+ *
38784
+ * A page of dates cannot answer this: a finished run has no upcoming date, and
38785
+ * a long run would spend the whole page on its own sessions. `readIntent:
38786
+ * 'runs'` asks for runs instead, so `itemLimit` counts run cards rather than
38787
+ * dates, and each card arrives with the run's complete schedule.
38788
+ */
38789
+ function wholeSeriesRunLoader() {
38790
+ return eventPresetLoader(WHOLE_SERIES_EVENT_PRESETS_PARAM, { readIntent: "runs" });
38791
+ }
38792
+ function eventPresetLoader(eventPresets, extraParams = {}) {
38793
+ return {
38794
+ endpoint: "listPublicEvents",
38795
+ when: previewMode,
38796
+ params: {
38797
+ siteId: { $bind: { from: "$root.siteId" } },
38798
+ limit: { $bind: {
38799
+ from: "content.itemLimit",
38800
+ fallback: "3"
38801
+ } },
38802
+ stage: { $bind: {
38803
+ from: "$root.previewStage",
38804
+ fallback: "published"
38805
+ } },
38806
+ detailLevel: "listing",
38807
+ readProfile: "listing-card",
38808
+ eventPresets,
38809
+ ...extraParams
38810
+ },
38811
+ mode: "server"
38812
+ };
38813
+ }
38814
+ function normalizeOfferingsPreviewBlockContent(value) {
38815
+ const record = normalizeOfferingsPreviewContentForWrite(value);
38816
+ if (!record) return { displayMode: DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE };
38817
+ const normalized = { displayMode: normalizeOfferingsPreviewDisplayMode(record.displayMode) };
38818
+ if (typeof record.heading === "string" || record.heading === null) normalized.heading = record.heading;
38819
+ if ("description" in record) normalized.description = record.description;
38820
+ if (isOfferingsPreviewItemLimit(record.itemLimit)) normalized.itemLimit = record.itemLimit;
38821
+ if (Array.isArray(record.groupOrder)) normalized.groupOrder = record.groupOrder.filter(isOfferingsPreviewSourceKey);
38822
+ else if (record.groupOrder === null) normalized.groupOrder = null;
38823
+ if (Array.isArray(record.groupOverrides)) normalized.groupOverrides = record.groupOverrides.flatMap(normalizeOfferingsPreviewGroupOverride);
38824
+ else if (record.groupOverrides === null) normalized.groupOverrides = null;
38825
+ const cardStyles = normalizeCardStylesContent(record._cardStyles);
38826
+ if (cardStyles !== void 0) normalized._cardStyles = cardStyles;
38827
+ if (isButtonVariant(record.buttonVariant)) normalized.buttonVariant = record.buttonVariant;
38828
+ if (typeof record.buttonText === "string" || record.buttonText === null) normalized.buttonText = record.buttonText;
38829
+ if (typeof record.emptyMessage === "string" || record.emptyMessage === null) normalized.emptyMessage = record.emptyMessage;
38830
+ const sectionStyles = normalizeSectionStylesContent(record._sectionStyles);
38831
+ if (sectionStyles !== void 0) normalized._sectionStyles = sectionStyles;
38832
+ return normalized;
38833
+ }
38834
+ function normalizeOfferingsPreviewDisplayMode(value) {
38835
+ return value === "catalogue" ? "catalogue" : DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE;
38836
+ }
38837
+ function isOfferingsPreviewItemLimit(value) {
38838
+ return value === "1" || value === "2" || value === "3" || value === "4" || value === "5" || value === "6" || value === null;
38839
+ }
38840
+ function normalizeOfferingsPreviewGroupOverride(value) {
38841
+ if (!isRecord$4(value)) return [];
38842
+ const override = {};
38843
+ if (isOfferingsPreviewSourceKey(value.sourceKey) || value.sourceKey === null) override.sourceKey = value.sourceKey;
38844
+ if (typeof value.title === "string" || value.title === null) override.title = value.title;
38845
+ if (typeof value.intro === "string" || value.intro === null) override.intro = value.intro;
38846
+ if (typeof value.hidden === "boolean" || value.hidden === null) override.hidden = value.hidden;
38847
+ if (value.presentation === "compact-list" || value.presentation === "single-card" || value.presentation === "featured-summary" || value.presentation === null) override.presentation = value.presentation;
38848
+ if (value.ctaMode === "auto" || value.ctaMode === "custom" || value.ctaMode === "hidden" || value.ctaMode === null) override.ctaMode = value.ctaMode;
38849
+ if (typeof value.ctaHref === "string" || value.ctaHref === null) override.ctaHref = value.ctaHref;
38850
+ if (typeof value.ctaLabel === "string" || value.ctaLabel === null) override.ctaLabel = value.ctaLabel;
38851
+ return [override];
38852
+ }
38853
+ function isButtonVariant(value) {
38854
+ return value === null || isBlockButtonRole(value);
38855
+ }
38856
+ function normalizeCardStylesContent(value) {
38857
+ return normalizeBoxStylesContent(value);
38858
+ }
38859
+ function normalizeSectionStylesContent(value) {
38860
+ return normalizeBoxStylesContent(value);
38861
+ }
38862
+ function normalizeBoxStylesContent(value) {
38863
+ if (value === null) return null;
38864
+ if (!isRecord$4(value)) return void 0;
38865
+ const { background: _background, ...rest } = value;
38866
+ const background = parseBackgroundContent(value.background);
38867
+ return {
38868
+ ...rest,
38869
+ ...background ? { background } : {}
38870
+ };
38871
+ }
38872
+ function isRecord$4(value) {
38873
+ return typeof value === "object" && value !== null && !Array.isArray(value);
38874
+ }
38875
+ var WHOLE_SERIES_EVENT_PRESETS_PARAM, publicRouteCandidatesSchema, offeringsPreviewEventDataBindings, DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE, displayModeBinding, catalogueMode, previewMode, offeringsPreviewConfig, offeringsPreviewManifest, optionalPublicEventsArraySchema, offeringsPreviewEventDataSchemas, offeringsPreviewEventDataLoaders, offeringsPreviewBlockDefinition;
38876
+ var init_offerings_preview = __esmMin((() => {
38877
+ init_fields();
38878
+ init_src$4();
38879
+ init_link();
38880
+ init_builder$1();
38881
+ init_styledSection();
38882
+ init_fragments$1();
38883
+ init_backgroundContent();
38884
+ init_defineBlock();
38885
+ init_shared$2();
38886
+ init_buttonRoles();
38887
+ init_model();
38888
+ WHOLE_SERIES_EVENT_PRESETS_PARAM = WHOLE_SERIES_EVENT_PRESET_VALUES.join(",");
38889
+ publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
38890
+ entityId: z.string(),
38891
+ path: z.string(),
38892
+ title: z.string(),
38893
+ kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
38894
+ contentTypeKey: z.string().nullable().optional()
38895
+ })) });
37957
38896
  offeringsPreviewEventDataBindings = Object.fromEntries(OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.dataKey, { $bind: { from: `data.${definition.dataKey}` } }]));
38897
+ DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE = "preview";
38898
+ displayModeBinding = {
38899
+ from: "content.displayMode",
38900
+ fallback: DEFAULT_OFFERINGS_PREVIEW_DISPLAY_MODE
38901
+ };
38902
+ catalogueMode = { $bind: {
38903
+ ...displayModeBinding,
38904
+ transforms: [{
38905
+ id: "value.equals",
38906
+ options: { value: "catalogue" }
38907
+ }]
38908
+ } };
38909
+ previewMode = { $bind: {
38910
+ ...displayModeBinding,
38911
+ transforms: [{
38912
+ id: "value.equals",
38913
+ options: { value: "preview" }
38914
+ }]
38915
+ } };
37958
38916
  offeringsPreviewConfig = {
37959
38917
  id: "block.offerings-preview",
37960
38918
  version: "1.0.0",
@@ -37985,48 +38943,45 @@ var init_offerings_preview = __esmMin((() => {
37985
38943
  ],
37986
38944
  icon: "PanelsTopLeft",
37987
38945
  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" }),
38946
+ children: sectionContainer([el$1("offerings-preview", {
38947
+ displayMode: { $bind: displayModeBinding },
38948
+ pathname: { $bind: { from: "$root.pathname" } },
38949
+ catalogueEvents: { $bind: { from: "data.catalogueEvents" } },
38950
+ quickDateEvents: { $bind: { from: "data.quickDateEvents" } },
38951
+ bookingOfferingPresets: { $bind: {
38952
+ from: "$root.bookingOfferingPresets",
38953
+ fallback: []
38954
+ } },
38955
+ groupOverrides: { $bind: {
38956
+ from: "content.groupOverrides",
38957
+ fallback: []
38958
+ } },
38959
+ groupOrder: { $bind: { from: "content.groupOrder" } },
38960
+ cardStyles: { $bind: { from: "content._cardStyles" } },
38961
+ itemLimit: { $bind: {
38962
+ from: "content.itemLimit",
38963
+ fallback: "3"
38964
+ } },
38965
+ buttonVariant: { $bind: {
38966
+ from: "content.buttonVariant",
38967
+ fallback: "primary"
38968
+ } },
38969
+ buttonText: { $bind: {
38970
+ from: "content.buttonText",
38971
+ fallback: OFFERINGS_PREVIEW_DEFAULT_BUTTON_TEXT
38972
+ } },
38973
+ emptyMessage: { $bind: {
38974
+ from: "content.emptyMessage",
38975
+ fallback: OFFERINGS_PREVIEW_DEFAULT_EMPTY_MESSAGE
38976
+ } },
38977
+ previewStage: { $bind: {
38978
+ from: "$root.previewStage",
38979
+ fallback: "published"
38980
+ } },
38981
+ routeCandidates: { $bind: { from: "data.routeCandidates" } },
38982
+ wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
38983
+ ...offeringsPreviewEventDataBindings
38984
+ }, offeringsPreviewHeaderNodes())], { gap: "lg" }),
38030
38985
  baseClass: "",
38031
38986
  spacing: "comfortable"
38032
38987
  })]
@@ -38041,16 +38996,48 @@ var init_offerings_preview = __esmMin((() => {
38041
38996
  dataSchemas: {
38042
38997
  ...offeringsPreviewEventDataSchemas,
38043
38998
  routeCandidates: publicRouteCandidatesSchema.optional(),
38044
- wholeSeriesRunEvents: optionalPublicEventsArraySchema
38999
+ wholeSeriesRunEvents: optionalPublicEventsArraySchema,
39000
+ catalogueEvents: optionalPublicEventsArraySchema,
39001
+ quickDateEvents: optionalPublicEventsArraySchema
38045
39002
  },
38046
39003
  dataLoaders: {
38047
39004
  ...offeringsPreviewEventDataLoaders,
38048
39005
  routeCandidates: {
38049
39006
  endpoint: "listPublicRouteCandidates",
39007
+ when: previewMode,
38050
39008
  params: {},
38051
39009
  mode: "server"
38052
39010
  },
38053
- wholeSeriesRunEvents: wholeSeriesRunLoader()
39011
+ wholeSeriesRunEvents: wholeSeriesRunLoader(),
39012
+ catalogueEvents: {
39013
+ endpoint: "listPublicEvents",
39014
+ when: catalogueMode,
39015
+ params: {
39016
+ stage: { $bind: {
39017
+ from: "$root.previewStage",
39018
+ fallback: "published"
39019
+ } },
39020
+ detailLevel: "listing",
39021
+ readProfile: "listing-card",
39022
+ readIntent: "catalogue"
39023
+ },
39024
+ mode: "server"
39025
+ },
39026
+ quickDateEvents: {
39027
+ endpoint: "listPublicEvents",
39028
+ when: catalogueMode,
39029
+ params: {
39030
+ stage: { $bind: {
39031
+ from: "$root.previewStage",
39032
+ fallback: "published"
39033
+ } },
39034
+ detailLevel: "listing",
39035
+ readProfile: "listing-card",
39036
+ readIntent: "occurrences",
39037
+ limit: 40
39038
+ },
39039
+ mode: "server"
39040
+ }
38054
39041
  }
38055
39042
  };
38056
39043
  }));
@@ -41397,87 +42384,13 @@ var init_gifting = __esmMin((() => {
41397
42384
  };
41398
42385
  }));
41399
42386
  //#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
42387
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
41475
42388
  /**
41476
42389
  * Get form fields based on preset configuration.
41477
42390
  */
41478
- function getPresetFields(preset, options) {
41479
- const includePhone = Boolean(options?.includePhone);
41480
- switch (preset) {
42391
+ function getGlobalFormFields(form) {
42392
+ const includePhone = form.includeOptionalPhone;
42393
+ switch (form.fields.preset) {
41481
42394
  case "emailOnly": return withOptionalPhone([{
41482
42395
  id: "email",
41483
42396
  type: "email",
@@ -41495,7 +42408,7 @@ function getPresetFields(preset, options) {
41495
42408
  id: "name",
41496
42409
  type: "text",
41497
42410
  label: "Name",
41498
- required: false,
42411
+ required: form.fields.name === "required",
41499
42412
  placeholder: "Your name"
41500
42413
  }], includePhone);
41501
42414
  case "emailFirstLast": return withOptionalPhone([
@@ -41510,14 +42423,14 @@ function getPresetFields(preset, options) {
41510
42423
  id: "firstName",
41511
42424
  type: "text",
41512
42425
  label: "First Name",
41513
- required: false,
42426
+ required: form.fields.firstName === "required",
41514
42427
  placeholder: "First name"
41515
42428
  },
41516
42429
  {
41517
42430
  id: "lastName",
41518
42431
  type: "text",
41519
42432
  label: "Last Name",
41520
- required: false,
42433
+ required: form.fields.lastName === "required",
41521
42434
  placeholder: "Last name"
41522
42435
  }
41523
42436
  ], includePhone);
@@ -41533,14 +42446,14 @@ function getPresetFields(preset, options) {
41533
42446
  id: "name",
41534
42447
  type: "text",
41535
42448
  label: "Name",
41536
- required: false,
42449
+ required: form.fields.name === "required",
41537
42450
  placeholder: "Your name"
41538
42451
  },
41539
42452
  {
41540
42453
  id: "company",
41541
42454
  type: "text",
41542
42455
  label: "Company",
41543
- required: false,
42456
+ required: form.fields.company === "required",
41544
42457
  placeholder: "Company name"
41545
42458
  }
41546
42459
  ], includePhone);
@@ -41561,68 +42474,144 @@ var init_newsletter_form_types = __esmMin((() => {}));
41561
42474
  //#endregion
41562
42475
  //#region ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
41563
42476
  function buildNewsletterDisplay(source) {
41564
- const preset = source.preset ?? "emailOnly";
41565
- const includePhone = source.includePhone ?? false;
42477
+ const context = source.mailingList;
42478
+ const form = context?.tag === "configured" ? context.form : {
42479
+ fields: { preset: "emailOnly" },
42480
+ includeOptionalPhone: false,
42481
+ buttonLabel: "Subscribe",
42482
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
42483
+ privacyNote: null
42484
+ };
42485
+ const targeting = source.targeting ?? { mode: "default" };
42486
+ const choices = resolveRuntimeChoices(context, targeting);
41566
42487
  return {
41567
42488
  kind: "newsletter-form",
42489
+ availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
41568
42490
  className: source.className ?? null,
41569
- buttonLabel: source.buttonLabel?.trim() || "Subscribe",
42491
+ buttonLabel: form.buttonLabel,
42492
+ successMessage: form.successMessage,
41570
42493
  buttonVariant: source.buttonVariant ?? "primary",
41571
- successMessage: source.successMessage ?? "Thanks for subscribing!",
41572
- privacyNote: source.privacyNote ?? null,
41573
- fields: getPresetFields(preset, { includePhone })
42494
+ privacyNote: form.privacyNote,
42495
+ fields: getGlobalFormFields(form),
42496
+ choices
41574
42497
  };
41575
42498
  }
41576
42499
  function projectNewsletterFormHydrationTarget(source) {
41577
42500
  switch (source.source) {
41578
42501
  case "block": {
41579
- const destinationRef = buildNewsletterSignupBlockRef(source.blockId);
41580
- if (destinationRef?.tag === "block_ref") return {
42502
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
42503
+ if (sourceRef?.tag === "block_ref") return {
41581
42504
  tag: "block-source",
41582
- destinationRef
42505
+ sourceRef
41583
42506
  };
41584
42507
  return {
41585
- tag: "legacy-direct-list",
41586
- listId: source.listId ?? null
42508
+ tag: "block-source",
42509
+ sourceRef: null
41587
42510
  };
41588
42511
  }
41589
42512
  case "signed-footer": return {
41590
42513
  tag: "signed-footer-source",
41591
- destinationRef: source.destinationRef
41592
- };
41593
- case "legacy-direct-list": return {
41594
- tag: "legacy-direct-list",
41595
- listId: source.listId
42514
+ sourceRef: source.sourceRef
41596
42515
  };
42516
+ case "preview": return { tag: "preview" };
41597
42517
  default: return assertNever$4(source);
41598
42518
  }
41599
42519
  }
41600
- function parseRequiredNewsletterSignupBlockId(value) {
41601
- const parsed = parseNewsletterSignupBlockId(value);
41602
- if (!parsed) throw new Error("Newsletter signup block destination ref requires blockId");
42520
+ function resolveRuntimeChoices(context, targeting) {
42521
+ if (context?.tag !== "configured" || targeting.mode !== "custom" || targeting.selection.tag !== "visitor_choice" || context.provider.provider !== targeting.provider) return [];
42522
+ switch (targeting.provider) {
42523
+ case "native": {
42524
+ const offered = new Set(targeting.selection.offeredTopicIds);
42525
+ return context.provider.provider === "native" ? context.provider.topics.filter((item) => offered.has(item.id)).map((item) => ({
42526
+ id: item.id,
42527
+ label: item.name
42528
+ })) : [];
42529
+ }
42530
+ case "brevo": {
42531
+ const offered = new Set(targeting.selection.offeredListIds);
42532
+ return context.provider.provider === "brevo" ? context.provider.lists.filter((item) => offered.has(item.id)).map((item) => ({
42533
+ id: String(item.id),
42534
+ label: item.name
42535
+ })) : [];
42536
+ }
42537
+ case "mailchimp": {
42538
+ const offered = new Set(targeting.selection.offeredInterestIds);
42539
+ 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) => ({
42540
+ id: item.id,
42541
+ label: item.name
42542
+ })) ?? [];
42543
+ }
42544
+ }
42545
+ }
42546
+ function runtimeTargetingIsAvailable(context, targeting, choices) {
42547
+ if (context?.tag !== "configured") return false;
42548
+ const provider = context.provider;
42549
+ if (targeting.mode === "default") switch (provider.provider) {
42550
+ case "native": return provider.topics.some((item) => item.id === provider.defaultTopicId);
42551
+ case "brevo": return provider.lists.some((item) => item.id === provider.defaultListId);
42552
+ case "mailchimp": return provider.audiences.some((item) => item.id === provider.defaultAudienceId);
42553
+ }
42554
+ if (targeting.provider !== provider.provider) return false;
42555
+ switch (targeting.provider) {
42556
+ case "native": return provider.provider === "native" && nativeTargetIsAvailable(provider, targeting, choices);
42557
+ case "brevo": return provider.provider === "brevo" && brevoTargetIsAvailable(provider, targeting, choices);
42558
+ case "mailchimp": return provider.provider === "mailchimp" && mailchimpTargetIsAvailable(provider, targeting, choices);
42559
+ }
42560
+ }
42561
+ function nativeTargetIsAvailable(provider, targeting, choices) {
42562
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.topicIds : targeting.selection.offeredTopicIds;
42563
+ return ids.every((id) => provider.topics.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42564
+ }
42565
+ function brevoTargetIsAvailable(provider, targeting, choices) {
42566
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.listIds : targeting.selection.offeredListIds;
42567
+ return ids.every((id) => provider.lists.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42568
+ }
42569
+ function mailchimpTargetIsAvailable(provider, targeting, choices) {
42570
+ const audience = provider.audiences.find((item) => item.id === targeting.audienceId);
42571
+ if (!audience) return false;
42572
+ const ids = targeting.selection.tag === "fixed" ? targeting.selection.interestIds : targeting.selection.offeredInterestIds;
42573
+ return ids.every((id) => audience.interests.some((item) => item.id === id)) && (targeting.selection.tag !== "visitor_choice" || choices.length === ids.length);
42574
+ }
42575
+ function parseRequiredMailingListSignupBlockId(value) {
42576
+ const parsed = parseMailingListBlockId(value);
42577
+ if (!parsed) throw new Error("Mailing-list signup block source ref requires blockId");
41603
42578
  return parsed;
41604
42579
  }
41605
- function parseRequiredSignedNewsletterDestinationRef(value) {
41606
- const parsed = parseSignedNewsletterDestinationRef(value);
41607
- if (!parsed) throw new Error("Newsletter signup signed destination ref requires token");
42580
+ function parseRequiredMailingListSignedSourceToken(value) {
42581
+ const parsed = parseMailingListSignedSourceToken(value);
42582
+ if (!parsed) throw new Error("Mailing-list signup signed source ref requires token");
41608
42583
  return parsed;
41609
42584
  }
41610
- var newsletterPresetSchema, newsletterDestinationProviderSchema, newsletterButtonVariantSchema, newsletterFieldSchema, newsletterSignupBlockIdSchema, signedNewsletterDestinationRefSchema, newsletterSourceCommonSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
42585
+ var newsletterButtonVariantSchema, mailingListContextSchema, mailingListTargetingSchema, newsletterFieldSchema, mailingListSignupBlockIdSchema, mailingListContentVersionIdSchema, signedMailingListSourceTokenSchema, newsletterSourceCommonSchema, newsletterSourceSchema, newsletterDisplaySchema, newsletterHydrationSchema, newsletterRenderSchema, newsletterFormBlockRuntime;
41611
42586
  var init_newsletter_form_interactive = __esmMin((() => {
41612
42587
  init_src$4();
41613
42588
  init_islands();
41614
42589
  init_runtime$1();
41615
- init_newsletter_signup_destination();
41616
42590
  init_newsletter_form_types();
41617
42591
  init_buttonRoles();
41618
- newsletterPresetSchema = z.enum([
41619
- "emailOnly",
41620
- "emailName",
41621
- "emailFirstLast",
41622
- "emailNameCompany"
41623
- ]);
41624
- newsletterDestinationProviderSchema = z.enum(["riverbank", "mailchimp"]);
41625
42592
  newsletterButtonVariantSchema = blockButtonRoleSchema;
42593
+ mailingListContextSchema = z.unknown().transform((value, ctx) => {
42594
+ const parsed = parseMailingListRuntimeContext(value);
42595
+ if (!parsed.ok) {
42596
+ ctx.addIssue({
42597
+ code: z.ZodIssueCode.custom,
42598
+ message: "Invalid mailing-list runtime context"
42599
+ });
42600
+ return z.NEVER;
42601
+ }
42602
+ return parsed.value;
42603
+ });
42604
+ mailingListTargetingSchema = z.unknown().transform((value, ctx) => {
42605
+ const parsed = parseMailingListPlacementTargeting(value);
42606
+ if (!parsed.ok) {
42607
+ ctx.addIssue({
42608
+ code: z.ZodIssueCode.custom,
42609
+ message: "Invalid mailing-list targeting"
42610
+ });
42611
+ return z.NEVER;
42612
+ }
42613
+ return parsed.value;
42614
+ });
41626
42615
  newsletterFieldSchema = z.object({
41627
42616
  id: z.string(),
41628
42617
  type: z.enum(["email", "text"]),
@@ -41630,18 +42619,23 @@ var init_newsletter_form_interactive = __esmMin((() => {
41630
42619
  required: z.boolean(),
41631
42620
  placeholder: z.string().optional()
41632
42621
  });
41633
- newsletterSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
41634
- signedNewsletterDestinationRefSchema = z.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
42622
+ mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
42623
+ mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
42624
+ const parsed = parseMailingListContentVersionId(value);
42625
+ if (parsed) return parsed;
42626
+ ctx.addIssue({
42627
+ code: z.ZodIssueCode.custom,
42628
+ message: "Invalid mailing-list content version ID"
42629
+ });
42630
+ return z.NEVER;
42631
+ });
42632
+ signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
41635
42633
  newsletterSourceCommonSchema = z.object({
41636
42634
  siteId: z.string().optional(),
41637
42635
  apiBaseUrl: z.string().optional(),
41638
- preset: newsletterPresetSchema.optional(),
41639
- includePhone: z.boolean().optional(),
41640
- buttonLabel: z.string().nullable().optional(),
42636
+ mailingList: mailingListContextSchema.optional(),
42637
+ targeting: mailingListTargetingSchema.optional(),
41641
42638
  buttonVariant: newsletterButtonVariantSchema.nullable().optional(),
41642
- successMessage: z.string().nullable().optional(),
41643
- privacyNote: z.string().nullable().optional(),
41644
- tags: z.string().nullable().optional(),
41645
42639
  spamProtectionEnabled: z.boolean().optional(),
41646
42640
  className: z.string().nullable().optional()
41647
42641
  });
@@ -41649,54 +42643,61 @@ var init_newsletter_form_interactive = __esmMin((() => {
41649
42643
  newsletterSourceCommonSchema.extend({
41650
42644
  source: z.literal("block"),
41651
42645
  blockId: z.string().nullable().optional(),
41652
- listId: z.string().nullable().optional(),
41653
- destinationProvider: newsletterDestinationProviderSchema.nullable().optional()
42646
+ contentVersionId: z.string().nullable().optional()
41654
42647
  }),
41655
42648
  newsletterSourceCommonSchema.extend({
41656
42649
  source: z.literal("signed-footer"),
41657
- destinationRef: z.object({
41658
- tag: z.literal("signed_destination_ref"),
41659
- token: signedNewsletterDestinationRefSchema
42650
+ sourceRef: z.object({
42651
+ tag: z.literal("signed_source_ref"),
42652
+ token: signedMailingListSourceTokenSchema
41660
42653
  })
41661
42654
  }),
41662
- newsletterSourceCommonSchema.extend({
41663
- source: z.literal("legacy-direct-list"),
41664
- listId: z.string().nullable()
41665
- })
42655
+ newsletterSourceCommonSchema.extend({ source: z.literal("preview") })
41666
42656
  ]);
41667
42657
  newsletterDisplaySchema = z.object({
41668
42658
  kind: z.literal("newsletter-form"),
42659
+ availability: z.enum(["ready", "unavailable"]),
41669
42660
  className: z.string().nullable(),
41670
42661
  buttonLabel: z.string(),
42662
+ successMessage: z.string(),
41671
42663
  buttonVariant: newsletterButtonVariantSchema,
41672
- successMessage: z.string().nullable(),
41673
42664
  privacyNote: z.string().nullable(),
41674
- fields: z.array(newsletterFieldSchema)
42665
+ fields: z.array(newsletterFieldSchema),
42666
+ choices: z.array(z.object({
42667
+ id: z.string(),
42668
+ label: z.string()
42669
+ }))
41675
42670
  });
41676
42671
  newsletterHydrationSchema = z.object({
41677
42672
  target: z.discriminatedUnion("tag", [
41678
42673
  z.object({
41679
42674
  tag: z.literal("block-source"),
41680
- destinationRef: z.object({
42675
+ sourceRef: z.object({
41681
42676
  tag: z.literal("block_ref"),
41682
- blockId: newsletterSignupBlockIdSchema
42677
+ blockId: mailingListSignupBlockIdSchema,
42678
+ contentVersionId: mailingListContentVersionIdSchema
41683
42679
  }).nullable()
41684
42680
  }),
41685
42681
  z.object({
41686
42682
  tag: z.literal("signed-footer-source"),
41687
- destinationRef: z.object({
41688
- tag: z.literal("signed_destination_ref"),
41689
- token: signedNewsletterDestinationRefSchema
42683
+ sourceRef: z.object({
42684
+ tag: z.literal("signed_source_ref"),
42685
+ token: signedMailingListSourceTokenSchema
41690
42686
  })
41691
42687
  }),
41692
- z.object({
41693
- tag: z.literal("legacy-direct-list"),
41694
- listId: z.string().nullable()
41695
- })
42688
+ z.object({ tag: z.literal("preview") })
42689
+ ]),
42690
+ setupRevision: z.number().int().positive().nullable(),
42691
+ choiceProvider: z.enum([
42692
+ "native",
42693
+ "brevo",
42694
+ "mailchimp"
42695
+ ]).nullable(),
42696
+ choicePresentation: z.enum([
42697
+ "hidden",
42698
+ "automatic",
42699
+ "visitor_choice"
41696
42700
  ]),
41697
- preset: newsletterPresetSchema,
41698
- includePhone: z.boolean(),
41699
- tags: z.string().nullable().optional(),
41700
42701
  spamProtectionEnabled: z.boolean().optional()
41701
42702
  });
41702
42703
  newsletterRenderSchema = z.object({
@@ -41714,14 +42715,15 @@ var init_newsletter_form_interactive = __esmMin((() => {
41714
42715
  render: createZodCodec(newsletterRenderSchema)
41715
42716
  },
41716
42717
  buildRender: (source) => {
41717
- const runtimeSource = source.source === "block" ? deriveNewsletterSignupRuntimeSource(source) : null;
42718
+ const targeting = source.targeting ?? { mode: "default" };
42719
+ const presentation = planMailingListChoicePresentation(targeting);
41718
42720
  return {
41719
42721
  display: buildNewsletterDisplay(source),
41720
42722
  hydration: {
41721
42723
  target: projectNewsletterFormHydrationTarget(source),
41722
- preset: source.preset ?? "emailOnly",
41723
- includePhone: source.includePhone ?? false,
41724
- tags: runtimeSource ? runtimeSource.tags : source.tags,
42724
+ setupRevision: source.mailingList?.tag === "configured" ? source.mailingList.revision : null,
42725
+ choiceProvider: targeting.mode === "custom" ? targeting.provider : null,
42726
+ choicePresentation: presentation.tag,
41725
42727
  spamProtectionEnabled: source.spamProtectionEnabled
41726
42728
  }
41727
42729
  };
@@ -41730,6 +42732,19 @@ var init_newsletter_form_interactive = __esmMin((() => {
41730
42732
  }));
41731
42733
  //#endregion
41732
42734
  //#region ../blocks/src/system/blocks/newsletter-signup.ts
42735
+ function sanitizeNewsletterSignupPublicContent(content) {
42736
+ if (typeof content !== "object" || content === null || Array.isArray(content)) return content;
42737
+ const value = content;
42738
+ return {
42739
+ title: value.title,
42740
+ subtitle: value.subtitle,
42741
+ targeting: value.targeting,
42742
+ buttonVariant: value.buttonVariant,
42743
+ mailingListSource: value.mailingListSource,
42744
+ mailingListSourceToken: value.mailingListSourceToken,
42745
+ _sectionStyles: value._sectionStyles
42746
+ };
42747
+ }
41733
42748
  var stackedComposition, stackedLayout, inlineLayout, editorialSplitLayout, newsletterSignupManifest, newsletterSignupBlockDefinition;
41734
42749
  var init_newsletter_signup = __esmMin((() => {
41735
42750
  init_fragments$1();
@@ -41738,7 +42753,6 @@ var init_newsletter_signup = __esmMin((() => {
41738
42753
  init_defineBlock();
41739
42754
  init_fragments();
41740
42755
  init_newsletter_form_interactive();
41741
- init_newsletter_signup_destination();
41742
42756
  stackedComposition = composeFragments([{ fragment: newsletterCopyFragment }, { fragment: newsletterFormFragment }]);
41743
42757
  stackedLayout = styledSection({
41744
42758
  children: sectionContainer(stackedComposition.layout, {
@@ -42724,6 +43738,7 @@ var init_blocks$1 = __esmMin((() => {
42724
43738
  init_feature_cards();
42725
43739
  init_media_text();
42726
43740
  init_appointment_booking();
43741
+ init_appointment_services();
42727
43742
  init_weekly_slot_availability();
42728
43743
  init_event_registration();
42729
43744
  init_event_details();
@@ -43216,6 +44231,14 @@ var init_blocks$1 = __esmMin((() => {
43216
44231
  weight: "standard"
43217
44232
  })]
43218
44233
  })),
44234
+ withDesignCapability("block.appointment-services", appointmentServicesBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
44235
+ flow: conversionFlow,
44236
+ layoutProfiles: [layoutProfile({
44237
+ variantKey: "default",
44238
+ family: "stack",
44239
+ weight: "standard"
44240
+ })]
44241
+ })),
43219
44242
  withDesignCapability("block.weekly-slot-availability", weeklySlotAvailabilityBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43220
44243
  flow: offeringsFlow,
43221
44244
  layoutProfiles: [layoutProfile({
@@ -44513,8 +45536,12 @@ function shouldSkipResolvedLoader(input) {
44513
45536
  * ```
44514
45537
  */
44515
45538
  async function prefetchBlockData$1(page, context, options) {
45539
+ return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
45540
+ }
45541
+ async function prefetchBlockDataWithFailures(page, context, options) {
44516
45542
  const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
44517
45543
  const results = {};
45544
+ const loaderFailures = {};
44518
45545
  const tasks = [];
44519
45546
  for (const block of page.blocks) {
44520
45547
  const blockId = block.id;
@@ -44562,6 +45589,11 @@ async function prefetchBlockData$1(page, context, options) {
44562
45589
  const blockResults = results[blockId] ?? (results[blockId] = {});
44563
45590
  blockResults[key] = data;
44564
45591
  } catch (error) {
45592
+ const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
45593
+ blockFailures[key] = {
45594
+ endpoint,
45595
+ params
45596
+ };
44565
45597
  if (onError) onError(error, {
44566
45598
  block: block.kind,
44567
45599
  loader: key
@@ -44571,7 +45603,10 @@ async function prefetchBlockData$1(page, context, options) {
44571
45603
  }
44572
45604
  }
44573
45605
  if (tasks.length > 0) await Promise.all(tasks);
44574
- return results;
45606
+ return {
45607
+ resolvedData: results,
45608
+ loaderFailures
45609
+ };
44575
45610
  }
44576
45611
  var init_prefetchBlockData$1 = __esmMin((() => {
44577
45612
  init_registry$3();
@@ -44735,6 +45770,7 @@ function unsafeRetypeZodSchema(schema) {
44735
45770
  var navIdListSchema, dashboardNavVisibilityBaseSchema, dashboardNavVisibilityRolesSchema, dashboardNavVisibilitySchema, dashboardNavigationConfigSchema, dashboardConfigSchema, fieldDefinitionInputSchema, sdkLoaderEndpointSchema, loaderFallbackScalarSchema, loaderParamBindingSchema, loaderParamValueSchema, sdkConfigLoaderSchema, sdkDataLoadersSchema, sdkCustomBlockIdSchema, sdkCustomBlockInputSchema, sdkBlockFieldExtensionInputSchema, sdkBlockFieldExtensionsInputSchema, sdkThemePaletteSchema, sdkThemeConfigSchema, sdkSectionBackgroundSchema, sdkSectionOptionsConfigSchema, sdkContainerOptionsConfigSchema, sdkSiteStyleConfigSchema, sdkSiteLayoutConfigSchema, sdkFieldSelectOptionSchema, sdkBlockFieldConfigSchema, sdkBlockFieldOptionsMapSchema, sdkContentTypeTemplateConfigSchema, sdkContentTypeOrderingConfigSchema, sdkContentTypeConfigSchema, sdkContentConfigSchema, SDK_WORKFLOW_ID_PATTERN, SDK_WORKFLOW_ENDPOINT_PATTERN, sdkWorkflowIdSchema, sdkWorkflowEndpointSchema, sdkWorkflowManualTriggerSchema, sdkWorkflowTriggerFieldSchema, sdkWorkflowFieldChangedConditionSchema, sdkWorkflowFieldEmptyConditionSchema, sdkWorkflowEntryDraftUpdatedTriggerSchema, sdkWorkflowTriggerSchema, sdkWorkflowConfirmationSchema, sdkWorkflowConfigSchema, sdkWorkflowsSchema, riverbankSiteConfigInputSchema;
44736
45771
  var init_contracts = __esmMin((() => {
44737
45772
  init_src$2();
45773
+ init_src$4();
44738
45774
  navIdListSchema = z.preprocess((value) => {
44739
45775
  if (!Array.isArray(value)) return void 0;
44740
45776
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
@@ -44966,7 +46002,17 @@ var init_contracts = __esmMin((() => {
44966
46002
  z.object({
44967
46003
  config: riverbankSiteConfigInputSchema,
44968
46004
  forceContentTypes: z.boolean().optional(),
44969
- mode: z.enum(["apply", "preview"]).optional()
46005
+ mode: z.enum(["apply", "preview"]).optional(),
46006
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
46007
+ if (value === void 0) return void 0;
46008
+ const parsed = parseMailingListProviderScope(value);
46009
+ if (parsed.ok) return parsed.value;
46010
+ ctx.addIssue({
46011
+ code: "custom",
46012
+ message: "Invalid mailing-list provider scope"
46013
+ });
46014
+ return z.NEVER;
46015
+ }).optional()
44970
46016
  }).strict();
44971
46017
  }));
44972
46018
  //#endregion
@@ -45732,6 +46778,38 @@ var init_siteBanner = __esmMin((() => {
45732
46778
  content: []
45733
46779
  }]
45734
46780
  };
46781
+ })), EU_MEMBER_COUNTRIES;
46782
+ var init_privacyPolicy = __esmMin((() => {
46783
+ EU_MEMBER_COUNTRIES = [
46784
+ "AT",
46785
+ "BE",
46786
+ "BG",
46787
+ "HR",
46788
+ "CY",
46789
+ "CZ",
46790
+ "DK",
46791
+ "EE",
46792
+ "FI",
46793
+ "FR",
46794
+ "DE",
46795
+ "GR",
46796
+ "HU",
46797
+ "IE",
46798
+ "IT",
46799
+ "LV",
46800
+ "LT",
46801
+ "LU",
46802
+ "MT",
46803
+ "NL",
46804
+ "PL",
46805
+ "PT",
46806
+ "RO",
46807
+ "SK",
46808
+ "SI",
46809
+ "ES",
46810
+ "SE"
46811
+ ];
46812
+ new Set(EU_MEMBER_COUNTRIES);
45735
46813
  }));
45736
46814
  //#endregion
45737
46815
  //#region ../api/src/analytics.ts
@@ -45926,7 +47004,6 @@ var init_dashboardTeamMemberNav = __esmMin((() => {
45926
47004
  var init_dashboardBookingsNav = __esmMin((() => {
45927
47005
  init_staffAccess();
45928
47006
  }));
45929
- var init_identity = __esmMin((() => {}));
45930
47007
  //#endregion
45931
47008
  //#region ../api/src/navigation/dashboardDemoNav.ts
45932
47009
  var init_dashboardDemoNav = __esmMin((() => {
@@ -45943,7 +47020,6 @@ var init_navigation = __esmMin((() => {
45943
47020
  init_permissions();
45944
47021
  init_dashboardTeamMemberNav();
45945
47022
  init_dashboardBookingsNav();
45946
- init_identity();
45947
47023
  init_dashboardDemoNav();
45948
47024
  init_src$2();
45949
47025
  }));
@@ -46091,6 +47167,7 @@ var init_src = __esmMin((() => {
46091
47167
  init_types();
46092
47168
  init_siteBanner();
46093
47169
  init_siteOnboarding();
47170
+ init_privacyPolicy();
46094
47171
  init_analytics();
46095
47172
  init_publicProducts();
46096
47173
  init_contentEntries();
@@ -46556,6 +47633,7 @@ function buildSiteRenderSupport(site, mediaAssets) {
46556
47633
  site: site.site,
46557
47634
  sdkConfig: site.sdkConfig ?? null,
46558
47635
  bookingOfferingPresets: site.bookingOfferingPresets ?? [],
47636
+ mailingList: site.mailingList,
46559
47637
  bookingTimeZone: site.bookingTimeZone ?? "UTC",
46560
47638
  ...customBlocks ? { customBlocks } : {},
46561
47639
  supabaseUrl: site.supabaseUrl,
@@ -46573,9 +47651,11 @@ function convertPageResponseBlock(block) {
46573
47651
  if (typeof block.id !== "string" && block.id !== null) throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
46574
47652
  if (typeof block.kind !== "string") throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
46575
47653
  if (typeof block.purpose !== "string") throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
47654
+ if (block.contentVersionId !== void 0 && block.contentVersionId !== null && typeof block.contentVersionId !== "string") throw new Error(`Invalid content version id in page: expected string or null, got ${typeof block.contentVersionId}`);
46576
47655
  const admission = readInvalidBlockAdmission(block.admission);
46577
47656
  return {
46578
47657
  id: block.id,
47658
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
46579
47659
  kind: block.kind,
46580
47660
  purpose: block.purpose,
46581
47661
  content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
@@ -46608,6 +47688,7 @@ function projectRenderablePageOutline(page) {
46608
47688
  ...page,
46609
47689
  blocks: page.blocks.flatMap((block) => block.admission.kind === "renderable" ? [{
46610
47690
  id: block.id,
47691
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
46611
47692
  kind: block.kind,
46612
47693
  purpose: block.purpose,
46613
47694
  content: block.admission.content,
@@ -46618,6 +47699,7 @@ function projectRenderablePageOutline(page) {
46618
47699
  function admitSdkRuntimePageBlock(block, customBlocks) {
46619
47700
  const base = {
46620
47701
  id: block.id,
47702
+ ...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
46621
47703
  kind: block.kind,
46622
47704
  purpose: block.purpose,
46623
47705
  ...block.bindings ? { bindings: block.bindings } : {}
@@ -46808,6 +47890,7 @@ async function loadPageWithDeps(deps, params) {
46808
47890
  siteId,
46809
47891
  resolvedData,
46810
47892
  bookingOfferingPresets: support.bookingOfferingPresets,
47893
+ mailingList: support.mailingList,
46811
47894
  bookingTimeZone: support.bookingTimeZone,
46812
47895
  supabaseUrl: support.supabaseUrl,
46813
47896
  ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {},