@riverbankcms/sdk 0.132.0 → 0.134.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 (159) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/{PreviewEditorSidebar-DKQ5eFK9.mjs → PreviewEditorSidebar-DfRhJPFQ.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-CNTcOjCC.mjs → PreviewEditorUI-Dppxcr_g.mjs} +2 -2
  4. package/dist/{SdkPreviewModeRuntime-DJu3qu33.mjs → SdkPreviewModeRuntime-8CyGCXir.mjs} +46 -15
  5. package/dist/{SiteChromeCustomizeContext-2TzT3vbj.mjs → SiteChromeCustomizeContext-DVMTMvqA.mjs} +497 -169
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +384 -384
  7. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +219 -219
  8. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +1 -1
  10. package/dist/_dts/api/src/bookingOperations.d.ts +2 -14
  11. package/dist/_dts/api/src/bookings.d.ts +2 -2
  12. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  13. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +2 -2
  14. package/dist/_dts/api/src/endpoints.d.ts +3 -3
  15. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  16. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -6
  17. package/dist/_dts/api/src/navigation/linkResolver.d.ts +6 -2
  18. package/dist/_dts/api/src/navigation/types.d.ts +23 -6
  19. package/dist/_dts/api/src/navigation.d.ts +1 -1
  20. package/dist/_dts/api/src/publicBookingService.d.ts +15 -0
  21. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +3 -1
  22. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +2 -0
  23. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  24. package/dist/_dts/api/src/sdkThemeWire.d.ts +50 -50
  25. package/dist/_dts/api/src/siteBanner.d.ts +4 -2
  26. package/dist/_dts/api/src/types.d.ts +1 -1
  27. package/dist/_dts/api/src/webhooks.d.ts +12 -12
  28. package/dist/_dts/blocks/src/client.d.ts +1 -1
  29. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +28 -72
  30. package/dist/_dts/blocks/src/index.d.ts +3 -2
  31. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +2 -2
  32. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  33. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +36 -14
  34. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -0
  35. package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +3 -3
  36. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +4 -4
  38. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +148 -148
  39. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -1
  40. package/dist/_dts/blocks/src/system/blocks/shared/bookingConsent.d.ts +36 -0
  41. package/dist/_dts/blocks/src/system/manifest/hydrateLinks.d.ts +9 -2
  42. package/dist/_dts/blocks/src/system/manifest/resolveBlockData.d.ts +8 -0
  43. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +79 -79
  44. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -11
  45. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +2 -0
  46. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +1 -0
  47. package/dist/_dts/blocks/src/system/runtime/components/multi-step/DynamicFormFields.d.ts +3 -19
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.d.ts +2 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.consent.d.ts +10 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.field-values.d.ts +4 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.fields.d.ts +21 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +2 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +38 -144
  55. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -19
  56. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -2
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +2 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +18 -1
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -4
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/validation.d.ts +2 -1
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +2 -1
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +2 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +34 -12
  64. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingConsentAgreement.d.ts +7 -0
  65. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  66. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  67. package/dist/_dts/content-model/src/content-types/schema.d.ts +4 -4
  68. package/dist/_dts/core/src/booking-consent.d.ts +8 -0
  69. package/dist/_dts/core/src/index.d.ts +1 -0
  70. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +9 -3
  71. package/dist/_dts/db/src/schemas/forms.d.ts +21 -21
  72. package/dist/_dts/db/src/types/jsonb.d.ts +1 -1
  73. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +2 -1
  74. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +2 -1
  75. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +3 -2
  76. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +3 -4
  77. package/dist/_dts/media-core/src/usageScanner.d.ts +1 -1
  78. package/dist/_dts/sdk/src/bookings/types.d.ts +7 -89
  79. package/dist/_dts/sdk/src/config/validation.d.ts +30 -30
  80. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -36
  81. package/dist/_dts/sdk/src/contracts/rendering.d.ts +1 -1
  82. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +9 -9
  83. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -19
  84. package/dist/_dts/sdk/src/version.d.ts +1 -1
  85. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  86. package/dist/_dts/theme-core/src/buttons/types.d.ts +12 -12
  87. package/dist/_dts/theme-core/src/cards/types.d.ts +5 -5
  88. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +72 -72
  89. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  90. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
  92. package/dist/_dts/theme-core/src/schema.d.ts +82 -82
  93. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  95. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  96. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
  97. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  98. package/dist/_dts/ui/src/badge.d.ts +1 -1
  99. package/dist/_dts/ui/src/button.d.ts +1 -1
  100. package/dist/_dts/ui/src/callout.d.ts +1 -1
  101. package/dist/_dts/ui/src/card.d.ts +1 -1
  102. package/dist/client/{StepIndicator-CGixP_LW.mjs → BookingConsentAgreement-BxgpGEFD.mjs} +26 -4
  103. package/dist/client/{DiscountCodeDisclosure-DO7llLxm.mjs → DiscountCodeDisclosure-CfuPOHD0.mjs} +1 -1
  104. package/dist/client/{EventCombined.client-xID7zN__.mjs → EventCombined.client-DB8Qfzi-.mjs} +3 -3
  105. package/dist/client/{EventListing.client-CriBslp0.mjs → EventListing.client-DD4X8hp4.mjs} +2 -2
  106. package/dist/client/{LeafletStaticMap-DYmHnM8g.mjs → LeafletStaticMap-QhgIBQbv.mjs} +1 -1
  107. package/dist/client/{WholeSeriesRegistrationWizard-BEjzSiOA.mjs → WholeSeriesRegistrationWizard-DwtC7bCs.mjs} +72 -22
  108. package/dist/client/{accordion-CgFbnnnQ.mjs → accordion-DFXpLvwg.mjs} +1 -1
  109. package/dist/client/{bookingForm-dUyGpbxc.mjs → bookingForm-sI05d3lk.mjs} +73 -47
  110. package/dist/client/bookings.mjs +989 -140
  111. package/dist/client/{carousel-BvBwkUzx.mjs → carousel-wjyWTZCh.mjs} +1 -1
  112. package/dist/client/{cart-DiZENT2E.mjs → cart-DCwdpA4i.mjs} +3 -3
  113. package/dist/client/{checkout-Dq13KIgR.mjs → checkout-DTDW3l0R.mjs} +3 -3
  114. package/dist/client/checkoutUrls-DQYC_Br-.mjs +187 -0
  115. package/dist/client/client.mjs +556 -237
  116. package/dist/client/{context-B83PiNzm.mjs → context-TSK1CGx8.mjs} +1 -14
  117. package/dist/client/{courseRegistration-CKC5NmyH.mjs → courseRegistration-A-Tg7qw_.mjs} +3 -3
  118. package/dist/client/{eventCalendar-BF0Jatfw.mjs → eventCalendar-B0Zg-i_w.mjs} +5 -5
  119. package/dist/client/{eventCombined-BuoCF8je.mjs → eventCombined-B8Y2wizd.mjs} +3 -3
  120. package/dist/client/{eventDetails-CKwh0S9s.mjs → eventDetails-DPDOwURJ.mjs} +3 -3
  121. package/dist/client/{eventListing-eUxaWFaB.mjs → eventListing-CjBcmSLn.mjs} +3 -3
  122. package/dist/client/{eventRegistration-CfkNOkPb.mjs → eventRegistration-CK30HsAq.mjs} +111 -64
  123. package/dist/client/{form-C17H1c_H.mjs → form-CUXfsABE.mjs} +2 -2
  124. package/dist/client/{headerSection-DEwUmrtt.mjs → headerSection-N-mN3rjr.mjs} +2 -2
  125. package/dist/client/hooks.mjs +106 -3
  126. package/dist/client/{locationMap-Pf2QwuvW.mjs → locationMap-oiIDQMBt.mjs} +2 -2
  127. package/dist/client/{newsletterForm-BWQAH5Sv.mjs → newsletterForm-CkQ2tTrM.mjs} +2 -2
  128. package/dist/client/{pricing-CVdvbopJ.mjs → pricing-Caa0QWzh.mjs} +1 -1
  129. package/dist/client/{productDetail-BZi1Fa_G.mjs → productDetail-CnidyrsN.mjs} +3 -3
  130. package/dist/client/{productList-qq-55DNk.mjs → productList-CttYcS_S.mjs} +3 -3
  131. package/dist/client/{propsDecoder-BxmqPKdP.mjs → propsDecoder-CeUMxI9a.mjs} +211 -100
  132. package/dist/client/rendering/client.mjs +428 -151
  133. package/dist/client/rendering/islands.mjs +18 -18
  134. package/dist/client/rendering.mjs +643 -324
  135. package/dist/client/{scrollToBlock-B3CcKdtG.mjs → scrollToBlock-lPr1oqxB.mjs} +1 -1
  136. package/dist/client/{shop-DNWJPut5.mjs → shop-DXQtMo2O.mjs} +6 -6
  137. package/dist/client/{shop-commerce-BhvQCosS.mjs → shop-commerce-quDL411J.mjs} +7 -164
  138. package/dist/client/{shop-commerce-store-B04sCNnW.mjs → shop-commerce-store-Dnu-8Iub.mjs} +1 -1
  139. package/dist/client/{shopShared-DNNgZlmW.mjs → shopShared-BWPUURvG.mjs} +3 -3
  140. package/dist/client/{useEventFilters-CUmhE24_.mjs → useEventFilters-DRhWp2_5.mjs} +3 -3
  141. package/dist/client/{usePolling-M5jG675x.mjs → usePolling-UN4WKnaM.mjs} +2 -2
  142. package/dist/preview-next/client/runtime.mjs +3 -3
  143. package/dist/{sdk-runtime-BEXb1wqo.mjs → sdk-runtime-Ca5RD78X.mjs} +1 -1
  144. package/dist/{separator-DGMuip1D.mjs → separator-CMhj6BTi.mjs} +1 -1
  145. package/dist/server/components.mjs +117 -37
  146. package/dist/server/config-validation.mjs +106 -3
  147. package/dist/server/config.mjs +106 -3
  148. package/dist/server/data.mjs +106 -3
  149. package/dist/server/index.mjs +1 -1
  150. package/dist/server/next.mjs +186 -106
  151. package/dist/server/page-converter.mjs +105 -2
  152. package/dist/server/prebuild.mjs +1 -1
  153. package/dist/server/rendering/server.mjs +119 -37
  154. package/dist/server/rendering.mjs +117 -37
  155. package/dist/server/routing.mjs +132 -73
  156. package/dist/server/server.mjs +107 -4
  157. package/dist/server/theme-bridge.mjs +4 -4
  158. package/package.json +2 -2
  159. package/dist/client/checkoutUrls-Ct8Mxna3.mjs +0 -26
@@ -829,20 +829,7 @@ function createBlockApi(config) {
829
829
  const path = buildPath(WHOLE_SERIES.checkout.path, { siteId: sid });
830
830
  return request(WHOLE_SERIES.checkout, {
831
831
  path,
832
- body: {
833
- eventSeriesId: data.eventSeriesId,
834
- ...data.pricingOptionId ? { pricingOptionId: data.pricingOptionId } : {},
835
- ...data.selectedSlidingAmount !== void 0 ? { selectedSlidingAmount: data.selectedSlidingAmount } : {},
836
- email: data.email,
837
- name: data.name,
838
- phone: data.phone,
839
- formData: data.formData,
840
- altchaSolution: data.altchaSolution,
841
- discountCode: data.discountCode,
842
- successUrl: data.successUrl,
843
- cancelUrl: data.cancelUrl,
844
- claimToken: data.claimToken
845
- }
832
+ body: data
846
833
  });
847
834
  },
848
835
  async getWholeSeriesRegistrationStatus(params) {
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { t as BlockApiProvider } from "./context-B83PiNzm.mjs";
3
- import { o as WholeSeriesRegistrationErrorBoundary, t as WholeSeriesRegistrationWizard } from "./WholeSeriesRegistrationWizard-BEjzSiOA.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
3
+ import { o as WholeSeriesRegistrationErrorBoundary, t as WholeSeriesRegistrationWizard } from "./WholeSeriesRegistrationWizard-DwtC7bCs.mjs";
4
4
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
5
5
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
6
6
  import "react";
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
  import { D as clsx } from "./colorStyles-CrxJrPjJ.mjs";
3
- import { A as getEventRuntimeFiltersKey, B as formatTime, G as resolveEventLinkProps, J as getEventAvailabilityStatus, U as groupEventsByDate, X as getLocalMinuteOfDay, Y as getLocalDateKey, et as themeButtonClassName, k as buildEventRuntimeFilters, q as getEventAvailability, t as defineIslandPropsDecoder, w as buildEventCalendarListingRender, z as formatEventTeacherLine } from "./propsDecoder-BxmqPKdP.mjs";
4
- import { o as EventFilters, t as useEventFilters } from "./useEventFilters-CUmhE24_.mjs";
5
- import { a as CalendarDayCell, c as useCalendarEvents, d as getOrderedDayNames, f as getWeekCalendarDayTuple, h as isToday, i as WeekAgendaView, l as MONTH_NAMES, m as isSameLocalDay, o as EventModalProvider, p as getWeekCalendarDays, r as EventModals, s as useEventModal, t as EventCombinedClient, u as formatDateKey } from "./EventCombined.client-xID7zN__.mjs";
6
- import { t as BlockApiProvider } from "./context-B83PiNzm.mjs";
3
+ import { $ as themeButtonClassName, A as buildEventRuntimeFilters, B as formatEventTeacherLine, J as getEventAvailability, K as resolveEventLinkProps, T as buildEventCalendarListingRender, V as formatTime, W as groupEventsByDate, X as getLocalDateKey, Y as getEventAvailabilityStatus, Z as getLocalMinuteOfDay, j as getEventRuntimeFiltersKey, t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
4
+ import { o as EventFilters, t as useEventFilters } from "./useEventFilters-DRhWp2_5.mjs";
5
+ import { a as CalendarDayCell, c as useCalendarEvents, d as getOrderedDayNames, f as getWeekCalendarDayTuple, h as isToday, i as WeekAgendaView, l as MONTH_NAMES, m as isSameLocalDay, o as EventModalProvider, p as getWeekCalendarDays, r as EventModals, s as useEventModal, t as EventCombinedClient, u as formatDateKey } from "./EventCombined.client-DB8Qfzi-.mjs";
6
+ import { t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
7
7
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
8
8
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
9
- import { n as EventListingController } from "./EventListing.client-CriBslp0.mjs";
9
+ import { n as EventListingController } from "./EventListing.client-DD4X8hp4.mjs";
10
10
  import { useEffect, useId, useMemo, useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
  //#region ../calendar/src/lane-packing.ts
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { n as EventCombinedIslandClient } from "./EventCombined.client-xID7zN__.mjs";
3
- import { t as BlockApiProvider } from "./context-B83PiNzm.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { n as EventCombinedIslandClient } from "./EventCombined.client-DB8Qfzi-.mjs";
3
+ import { t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
4
4
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
5
5
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
6
6
  import "react";
@@ -1,7 +1,7 @@
1
- import { $ as resolveEventRegistrationScopedEvents, Ft as getBookingLocalDateKey, G as resolveEventLinkProps, Ht as publicEventPricingCurrency, I as formatEventDateParts, K as resolveRuntimeEventPricing, L as formatEventPrice, Rt as toBookingTimeZone, Wt as publicEventPricingType, qt as formatCurrencyAmount, t as defineIslandPropsDecoder, zt as toScheduledBookingDateTime } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { n as formatWholeSeriesPriceDisplay, r as resolveWholeSeriesPricingState, t as formatWholeSeriesPriceAmount } from "./pricing-CVdvbopJ.mjs";
1
+ import { Ht as toBookingTimeZone, Jt as publicEventPricingType, K as resolveEventLinkProps, Kt as publicEventPricingCurrency, L as formatEventDateParts, Q as resolveEventRegistrationScopedEvents, R as formatEventPrice, Ut as toScheduledBookingDateTime, Zt as formatCurrencyAmount, q as resolveRuntimeEventPricing, t as defineIslandPropsDecoder, zt as getBookingLocalDateKey } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { n as formatWholeSeriesPriceDisplay, r as resolveWholeSeriesPricingState, t as formatWholeSeriesPriceAmount } from "./pricing-Caa0QWzh.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
- import { t as LeafletStaticMap } from "./LeafletStaticMap-DYmHnM8g.mjs";
4
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-QhgIBQbv.mjs";
5
5
  import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region ../blocks/src/system/runtime/nodes/events/shared/eventProductEligibility.ts
@@ -1,8 +1,8 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { t as BlockApiProvider } from "./context-B83PiNzm.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
4
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
5
- import { t as EventListingClient } from "./EventListing.client-CriBslp0.mjs";
5
+ import { t as EventListingClient } from "./EventListing.client-DD4X8hp4.mjs";
6
6
  import "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  //#region src/rendering/islands/enhancers/eventListing.tsx
@@ -1,17 +1,17 @@
1
1
  "use client";
2
- import { n as buildBookingPaymentSelectionViewModel, r as resolveFlexibleBalanceInitialPaymentCents, t as usePolling } from "./usePolling-M5jG675x.mjs";
3
- import { $ as resolveEventRegistrationScopedEvents, At as formatBookingDate, C as getWizardStepsForContext, Gt as publicEventScalarPrice, Ht as publicEventPricingCurrency, K as resolveRuntimeEventPricing, Kt as publicEventTicketTypes, Nt as formatBookingTime, R as formatEventPriceDisplay, Rt as toBookingTimeZone, S as getStepNumber, St as assertNever, Ut as publicEventPricingMode, Wt as publicEventPricingType, _ as findPreSelectedEvent, b as resolveRegistrationTarget, et as themeButtonClassName, g as findEventByOccurrenceId, h as toRegistrationEvents, jt as formatBookingDateTime, qt as formatCurrencyAmount, t as defineIslandPropsDecoder, v as resolveDiscountContext, x as WIZARD_STEPS, y as resolveEventRequiresPayment, zt as toScheduledBookingDateTime } from "./propsDecoder-BxmqPKdP.mjs";
4
- import { n as useBlockApi, t as BlockApiProvider } from "./context-B83PiNzm.mjs";
2
+ import { n as buildBookingPaymentSelectionViewModel, r as resolveFlexibleBalanceInitialPaymentCents, t as usePolling } from "./usePolling-UN4WKnaM.mjs";
3
+ import { $ as themeButtonClassName, C as getWizardStepsForContext, Et as assertNever, Ft as formatBookingDateTime, Ht as toBookingTimeZone, Jt as publicEventPricingType, Kt as publicEventPricingCurrency, Lt as formatBookingTime, Pt as formatBookingDate, Q as resolveEventRegistrationScopedEvents, S as getStepNumber, Ut as toScheduledBookingDateTime, Xt as publicEventTicketTypes, Yt as publicEventScalarPrice, Zt as formatCurrencyAmount, _ as findPreSelectedEvent, b as resolveRegistrationTarget, g as findEventByOccurrenceId, h as toRegistrationEvents, q as resolveRuntimeEventPricing, qt as publicEventPricingMode, t as defineIslandPropsDecoder, v as resolveDiscountContext, w as planEventRegistrationSurface, x as WIZARD_STEPS, y as resolveEventRequiresPayment, z as formatEventPriceDisplay } from "./propsDecoder-CeUMxI9a.mjs";
4
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
5
5
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
6
- import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-B3CcKdtG.mjs";
7
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-DO7llLxm.mjs";
8
- import { n as SpinnerNode, r as formatPrice, t as StepIndicator$1 } from "./StepIndicator-CGixP_LW.mjs";
6
+ import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-lPr1oqxB.mjs";
7
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-CfuPOHD0.mjs";
8
+ import { i as formatPrice, n as StepIndicator$1, r as SpinnerNode, t as BookingConsentAgreement } from "./BookingConsentAgreement-BxgpGEFD.mjs";
9
9
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
10
10
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
11
- import { t as buildCheckoutReturnUrls } from "./checkoutUrls-Ct8Mxna3.mjs";
11
+ import { t as buildCheckoutReturnUrls } from "./checkoutUrls-DQYC_Br-.mjs";
12
12
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
13
13
  import { t as consumeSearchParam } from "./urlParams-D71VXFGx.mjs";
14
- import { a as MagicLinkForm, i as useWaitlistClaim, n as LoggedInAsUser, o as WholeSeriesRegistrationErrorBoundary, r as logoutPortal, s as ClockIcon, t as WholeSeriesRegistrationWizard } from "./WholeSeriesRegistrationWizard-BEjzSiOA.mjs";
14
+ import { a as MagicLinkForm, i as useWaitlistClaim, n as LoggedInAsUser, o as WholeSeriesRegistrationErrorBoundary, r as logoutPortal, s as ClockIcon, t as WholeSeriesRegistrationWizard } from "./WholeSeriesRegistrationWizard-DwtC7bCs.mjs";
15
15
  import { t as CrossIcon } from "./CrossIcon-Dn1KRKW5.mjs";
16
16
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
17
17
  import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-UNsfPcYq.mjs";
@@ -1365,13 +1365,72 @@ const GuestDetailsSection = ({ guests, errors, onChange, shake = false, onShakeE
1365
1365
  };
1366
1366
  //#endregion
1367
1367
  //#region ../blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.tsx
1368
+ function EventConsentField({ consent, error, formData, idBase, onChange }) {
1369
+ const errorId = `${idBase}-consent-error`;
1370
+ return /* @__PURE__ */ jsxs("div", {
1371
+ className: "er-field",
1372
+ children: [
1373
+ /* @__PURE__ */ jsx(BookingConsentAgreement, {
1374
+ agreement: consent.agreement,
1375
+ title: consent.title,
1376
+ titleId: `${idBase}-consent-title`
1377
+ }),
1378
+ /* @__PURE__ */ jsxs("label", {
1379
+ className: "er-label rb-flex rb-items-start rb-gap-2 rb-cursor-pointer",
1380
+ children: [
1381
+ /* @__PURE__ */ jsx("input", {
1382
+ "aria-describedby": error ? errorId : void 0,
1383
+ className: "form-checkbox rb-mt-0.5",
1384
+ checked: formData.consentAccepted === true,
1385
+ onChange: (event) => onChange({
1386
+ ...formData,
1387
+ consentAccepted: event.target.checked
1388
+ }),
1389
+ type: "checkbox"
1390
+ }),
1391
+ consent.checkboxLabel,
1392
+ " ",
1393
+ /* @__PURE__ */ jsx("span", {
1394
+ className: "er-required",
1395
+ children: "*"
1396
+ })
1397
+ ]
1398
+ }),
1399
+ error ? /* @__PURE__ */ jsx(FieldValidationMessage, {
1400
+ id: errorId,
1401
+ className: "er-error",
1402
+ children: error
1403
+ }) : null
1404
+ ]
1405
+ });
1406
+ }
1407
+ function resolveGuestDetailsChangeHandler(requireGuestDetails, ticketsCount, onGuestsChange) {
1408
+ return requireGuestDetails && ticketsCount > 1 && onGuestsChange ? onGuestsChange : null;
1409
+ }
1410
+ function NotesField({ id, onChange, value }) {
1411
+ return /* @__PURE__ */ jsxs("div", {
1412
+ className: "er-field",
1413
+ children: [/* @__PURE__ */ jsx("label", {
1414
+ className: "er-label",
1415
+ htmlFor: id,
1416
+ children: "Notes"
1417
+ }), /* @__PURE__ */ jsx("textarea", {
1418
+ id,
1419
+ value,
1420
+ onChange: (event) => onChange(event.target.value),
1421
+ className: "er-input",
1422
+ placeholder: "Any special requirements or notes (optional)",
1423
+ rows: 3
1424
+ })]
1425
+ });
1426
+ }
1368
1427
  /**
1369
1428
  * Attendee Details Step
1370
1429
  *
1371
1430
  * Collects attendee information: name, email, phone, and notes.
1372
1431
  * Validates required fields and displays errors.
1373
1432
  */
1374
- const AttendeeDetailsStep = ({ formData, onChange, errors, emailLocked = false, onLogout, ticketsCount = 1, requireGuestDetails = false, guests = [], onGuestsChange, guestErrors = {}, guestSectionShake = false, onGuestShakeEnd }) => {
1433
+ const AttendeeDetailsStep = ({ formData, onChange, errors, emailLocked = false, onLogout, ticketsCount = 1, requireGuestDetails = false, guests = [], onGuestsChange, guestErrors = {}, guestSectionShake = false, onGuestShakeEnd, consent }) => {
1375
1434
  const idBase = useId();
1376
1435
  const nameId = `${idBase}-name`;
1377
1436
  const emailId = `${idBase}-email`;
@@ -1387,7 +1446,7 @@ const AttendeeDetailsStep = ({ formData, onChange, errors, emailLocked = false,
1387
1446
  message: errors.email,
1388
1447
  messageId: emailErrorId
1389
1448
  });
1390
- const showGuestSection = requireGuestDetails && ticketsCount > 1 && onGuestsChange;
1449
+ const guestDetailsChangeHandler = resolveGuestDetailsChangeHandler(requireGuestDetails, ticketsCount, onGuestsChange);
1391
1450
  return /* @__PURE__ */ jsxs("div", {
1392
1451
  className: "rb-reg-stack er-stack",
1393
1452
  children: [
@@ -1480,29 +1539,26 @@ const AttendeeDetailsStep = ({ formData, onChange, errors, emailLocked = false,
1480
1539
  placeholder: "(optional)"
1481
1540
  })]
1482
1541
  }),
1483
- /* @__PURE__ */ jsxs("div", {
1484
- className: "er-field",
1485
- children: [/* @__PURE__ */ jsx("label", {
1486
- className: "er-label",
1487
- htmlFor: notesId,
1488
- children: "Notes"
1489
- }), /* @__PURE__ */ jsx("textarea", {
1490
- id: notesId,
1491
- value: formData.notes,
1492
- onChange: (e) => onChange({
1493
- ...formData,
1494
- notes: e.target.value
1495
- }),
1496
- className: "er-input",
1497
- placeholder: "Any special requirements or notes (optional)",
1498
- rows: 3
1499
- })]
1500
- })
1542
+ /* @__PURE__ */ jsx(NotesField, {
1543
+ id: notesId,
1544
+ value: formData.notes,
1545
+ onChange: (notes) => onChange({
1546
+ ...formData,
1547
+ notes
1548
+ })
1549
+ }),
1550
+ consent ? /* @__PURE__ */ jsx(EventConsentField, {
1551
+ consent,
1552
+ error: errors.consentAccepted,
1553
+ formData,
1554
+ idBase,
1555
+ onChange
1556
+ }) : null
1501
1557
  ] }),
1502
- showGuestSection && /* @__PURE__ */ jsx(GuestDetailsSection, {
1558
+ guestDetailsChangeHandler && /* @__PURE__ */ jsx(GuestDetailsSection, {
1503
1559
  guests,
1504
1560
  errors: guestErrors,
1505
- onChange: onGuestsChange,
1561
+ onChange: guestDetailsChangeHandler,
1506
1562
  shake: guestSectionShake,
1507
1563
  onShakeEnd: onGuestShakeEnd
1508
1564
  })
@@ -2274,6 +2330,9 @@ const VerifyingTimeoutStep = ({ onCheckAgain, supportEmail }) => {
2274
2330
  };
2275
2331
  //#endregion
2276
2332
  //#region ../blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardContent.tsx
2333
+ function getWizardConsent(wizard) {
2334
+ return (wizard.selectedEvent ?? wizard.preSelectedEvent)?.consent ?? null;
2335
+ }
2277
2336
  function EventRegistrationWizardContent(props) {
2278
2337
  const { wizard } = props;
2279
2338
  const showSpamProtection = props.showSpamProtection ?? isSpamProtectionEnabled();
@@ -2353,7 +2412,8 @@ function EventRegistrationWizardContent(props) {
2353
2412
  onGuestsChange: wizard.setGuests,
2354
2413
  guestErrors: wizard.guestErrors,
2355
2414
  guestSectionShake: wizard.guestSectionShake,
2356
- onGuestShakeEnd: wizard.handleGuestShakeEnd
2415
+ onGuestShakeEnd: wizard.handleGuestShakeEnd,
2416
+ consent: getWizardConsent(wizard)
2357
2417
  }),
2358
2418
  showSpamProtection && /* @__PURE__ */ jsx("div", {
2359
2419
  className: "er-altcha",
@@ -2721,11 +2781,21 @@ function EventRegistrationSummaryBar(props) {
2721
2781
  }
2722
2782
  //#endregion
2723
2783
  //#region ../blocks/src/system/runtime/nodes/event-registration/validation.ts
2724
- function validateFormData(formData) {
2784
+ function createInitialRegistrationFormData() {
2785
+ return {
2786
+ name: "",
2787
+ email: "",
2788
+ phone: "",
2789
+ notes: "",
2790
+ consentAccepted: false
2791
+ };
2792
+ }
2793
+ function validateFormData(formData, requiresConsent = false) {
2725
2794
  const errors = {};
2726
2795
  if (!formData.name.trim()) errors.name = "Name is required";
2727
2796
  if (!formData.email.trim()) errors.email = "Email is required";
2728
2797
  else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) errors.email = "Invalid email address";
2798
+ if (requiresConsent && formData.consentAccepted !== true) errors.consentAccepted = "Please read and accept the agreement before continuing.";
2729
2799
  return errors;
2730
2800
  }
2731
2801
  //#endregion
@@ -3381,6 +3451,7 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
3381
3451
  name: options.formData.name.trim(),
3382
3452
  phone: options.formData.phone.trim() || void 0,
3383
3453
  notes: options.formData.notes.trim() || void 0,
3454
+ consentAccepted: options.formData.consentAccepted,
3384
3455
  altchaSolution: options.altchaSolution,
3385
3456
  paymentMethod: method,
3386
3457
  customerPassId: method === "pass" ? passId : void 0,
@@ -3517,12 +3588,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
3517
3588
  const step = flowState.step;
3518
3589
  const paymentSelection = flowState.paymentSelection;
3519
3590
  const [selectedEvent, setSelectedEvent] = useState(preSelectedEvent ?? null);
3520
- const [formData, setFormData] = useState({
3521
- name: "",
3522
- email: "",
3523
- phone: "",
3524
- notes: ""
3525
- });
3591
+ const [formData, setFormData] = useState(createInitialRegistrationFormData);
3526
3592
  const [errors, setErrors] = useState({});
3527
3593
  const [guests, setGuests] = useState([]);
3528
3594
  const [guestErrors, setGuestErrors] = useState({});
@@ -3820,7 +3886,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
3820
3886
  guests
3821
3887
  ]);
3822
3888
  const validateForm = () => {
3823
- const newErrors = validateFormData(formData);
3889
+ const newErrors = validateFormData(formData, Boolean(currentEvent?.consent));
3824
3890
  setErrors(newErrors);
3825
3891
  const newGuestErrors = {};
3826
3892
  if (requireGuestDetails && guests.length > 0) {
@@ -4009,6 +4075,10 @@ function useEventRegistrationWizardWithDeps(options, deps) {
4009
4075
  });
4010
4076
  const handleEventSelect = (event) => {
4011
4077
  setSelectedEvent(event);
4078
+ setFormData((current) => ({
4079
+ ...current,
4080
+ consentAccepted: false
4081
+ }));
4012
4082
  const slidingScale = getSlidingScaleForEvent(event);
4013
4083
  setSelectedSlidingAmountInput(slidingScale?.suggestedAmount !== null && slidingScale?.suggestedAmount !== void 0 ? formatCentsAsCurrencyInput(slidingScale.suggestedAmount) : "");
4014
4084
  setSelectedAttendanceMode((event.deliveryMode ?? "in_person") === "hybrid" ? null : (event.deliveryMode ?? "in_person") === "online" ? "online" : "in_person");
@@ -4465,30 +4535,6 @@ function EventRegistrationWizard(props) {
4465
4535
  });
4466
4536
  }
4467
4537
  //#endregion
4468
- //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
4469
- function planEventRegistrationSurface(input) {
4470
- const scopedEvents = resolveEventRegistrationScopedEvents(input.events, {
4471
- occurrenceContext: input.occurrenceContext,
4472
- subject: input.subject
4473
- });
4474
- const bookingScopes = new Set(scopedEvents.map((event) => event.bookingScope));
4475
- if (!input.occurrenceContext && !input.subject && bookingScopes.has("single_occurrence")) return {
4476
- kind: "occurrence",
4477
- events: scopedEvents.filter((event) => event.bookingScope === "single_occurrence")
4478
- };
4479
- if (bookingScopes.size === 0 || bookingScopes.has("single_occurrence")) return bookingScopes.has("whole_series") ? { kind: "mixedBookingScopes" } : {
4480
- kind: "occurrence",
4481
- events: scopedEvents
4482
- };
4483
- const requiredSeriesIds = new Set(scopedEvents.map((event) => event.seriesId));
4484
- const offerings = input.wholeSeriesOfferings.filter((offering) => requiredSeriesIds.has(offering.eventSeriesId));
4485
- const loadedSeriesIds = new Set(offerings.map((offering) => offering.eventSeriesId));
4486
- return [...requiredSeriesIds].every((seriesId) => loadedSeriesIds.has(seriesId)) && offerings.length > 0 ? {
4487
- kind: "wholeSeries",
4488
- offerings
4489
- } : { kind: "unavailableWholeSeries" };
4490
- }
4491
- //#endregion
4492
4538
  //#region ../blocks/src/system/runtime/nodes/event-registration/PastOccurrenceNotice.tsx
4493
4539
  function isPastOccurrence(startsAt) {
4494
4540
  if (!startsAt) return false;
@@ -4568,7 +4614,8 @@ function toEventRegistrationClientProps(props, display) {
4568
4614
  const EventRegistrationClient = (clientProps) => {
4569
4615
  const surface = planEventRegistrationSurface({
4570
4616
  events: clientProps.events ?? [],
4571
- wholeSeriesOfferings: clientProps.wholeSeriesOffering ? [clientProps.wholeSeriesOffering] : clientProps.wholeSeriesOfferings ?? [],
4617
+ wholeSeriesOfferings: clientProps.wholeSeriesOfferings ?? [],
4618
+ wholeSeriesOffering: clientProps.wholeSeriesOffering,
4572
4619
  occurrenceContext: clientProps.occurrenceContext,
4573
4620
  subject: clientProps.subject
4574
4621
  });
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { D as clsx } from "./colorStyles-CrxJrPjJ.mjs";
3
- import { St as assertNever, Tt as ok, et as themeButtonClassName, t as defineIslandPropsDecoder, wt as err } from "./propsDecoder-BxmqPKdP.mjs";
4
- import { n as useBlockApi, t as BlockApiProvider } from "./context-B83PiNzm.mjs";
3
+ import { $ as themeButtonClassName, Et as assertNever, Ot as err, kt as ok, t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
4
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
5
5
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
6
6
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
7
7
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { T as staticHeaderChromeRuntime, et as themeButtonClassName, r as buildCartDisplay, t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
+ import { $ as themeButtonClassName, E as staticHeaderChromeRuntime, r as buildCartDisplay, t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
3
3
  import { t as resolveDedicatedCheckoutPath } from "./checkoutRoute-ClwHwYVA.mjs";
4
- import { n as useCommerceCart } from "./shop-commerce-store-B04sCNnW.mjs";
4
+ import { n as useCommerceCart } from "./shop-commerce-store-Dnu-8Iub.mjs";
5
5
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
6
6
  import * as React$1 from "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -2486,6 +2486,68 @@ z.object({
2486
2486
  monthlyCurrency: z.literal("gbp")
2487
2487
  });
2488
2488
  //#endregion
2489
+ //#region ../blocks/src/system/types/link.ts
2490
+ const nullableString = z.union([z.string().min(1), z.null()]);
2491
+ const RESOLVED_INTERNAL_LINK_ENTITY_TYPES = [
2492
+ "page",
2493
+ "content",
2494
+ "pageSurface"
2495
+ ];
2496
+ const resolvedInternalLinkKeys = [
2497
+ "entityId",
2498
+ "entityType",
2499
+ "href",
2500
+ "title",
2501
+ "typeLabel"
2502
+ ];
2503
+ const internalRouteOnlyLinkSchema = z.object({
2504
+ kind: z.literal("internal"),
2505
+ routeId: z.string().min(1)
2506
+ }).passthrough().superRefine((value, ctx) => {
2507
+ if (!resolvedInternalLinkKeys.some((key) => value[key] != null)) return;
2508
+ ctx.addIssue({
2509
+ code: "custom",
2510
+ message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
2511
+ });
2512
+ });
2513
+ const internalResolvedLinkSchema = z.object({
2514
+ kind: z.literal("internal"),
2515
+ routeId: z.string().min(1),
2516
+ entityId: z.string().min(1),
2517
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
2518
+ href: z.string().min(1),
2519
+ title: z.string().min(1),
2520
+ typeLabel: z.string().min(1),
2521
+ contentTypeKey: nullableString.optional(),
2522
+ contentTypeName: nullableString.optional(),
2523
+ updatedAt: nullableString.optional()
2524
+ }).passthrough();
2525
+ const internalLinkSchema = z.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
2526
+ const externalLinkSchema$1 = z.object({
2527
+ kind: z.literal("external"),
2528
+ href: z.string().min(1)
2529
+ }).passthrough();
2530
+ const customLinkSchema$1 = z.object({
2531
+ kind: z.literal("url"),
2532
+ href: z.string().min(1)
2533
+ }).passthrough();
2534
+ const pageLinkSchema$1 = z.object({
2535
+ kind: z.literal("page"),
2536
+ identifier: z.string().min(1)
2537
+ }).passthrough();
2538
+ const entryLinkSchema$1 = z.object({
2539
+ kind: z.literal("entry"),
2540
+ contentType: z.string().min(1),
2541
+ identifier: z.string().min(1)
2542
+ }).passthrough();
2543
+ z.union([
2544
+ internalLinkSchema,
2545
+ externalLinkSchema$1,
2546
+ customLinkSchema$1,
2547
+ pageLinkSchema$1,
2548
+ entryLinkSchema$1
2549
+ ]);
2550
+ //#endregion
2489
2551
  //#region ../api/src/navigation/contracts.ts
2490
2552
  /**
2491
2553
  * Canonical navigation/link Zod contracts.
@@ -2515,7 +2577,7 @@ const internalLinkPayloadSchema = z.object({
2515
2577
  kind: z.literal("internal"),
2516
2578
  routeId: z.string().uuid(),
2517
2579
  entityId: z.string().uuid(),
2518
- entityType: z.enum(["page", "content"]),
2580
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
2519
2581
  href: z.string().min(1),
2520
2582
  title: z.string().min(1),
2521
2583
  typeLabel: z.string().min(1),
@@ -26480,6 +26542,23 @@ const blockBookingPaymentCollectionOptionSchema = z.union([
26480
26542
  ]);
26481
26543
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
26482
26544
  //#endregion
26545
+ //#region ../blocks/src/system/blocks/shared/bookingConsent.ts
26546
+ const blockBookingConsentSchema = z.object({
26547
+ requirementId: z.string(),
26548
+ title: z.string(),
26549
+ agreement: RichTextDocSchema,
26550
+ checkboxLabel: z.string()
26551
+ });
26552
+ const bookingRequirementConsentFieldSchema = z.object({
26553
+ id: z.string(),
26554
+ label: z.string(),
26555
+ type: z.literal("booking_requirement_consent"),
26556
+ required: z.literal(true),
26557
+ agreement: RichTextDocSchema,
26558
+ checkboxLabel: z.string().min(1)
26559
+ });
26560
+ z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
26561
+ //#endregion
26483
26562
  //#region ../blocks/src/system/blocks/events/whole-series/schemas.ts
26484
26563
  const wholeSeriesVenueSchema = z.object({
26485
26564
  id: z.string(),
@@ -26544,6 +26623,7 @@ const publicWholeSeriesOfferingSchema = z.object({
26544
26623
  pricing: wholeSeriesPricingSchema,
26545
26624
  currency: z.string(),
26546
26625
  paymentTerms: blockBookingPaymentTermsSchema,
26626
+ consent: blockBookingConsentSchema.nullable(),
26547
26627
  enrollmentCapacity: z.number().nullable(),
26548
26628
  acceptsMemberships: z.boolean(),
26549
26629
  status: z.enum([
@@ -26861,6 +26941,7 @@ const publicEventSchema = z.object({
26861
26941
  timeZone: z.string(),
26862
26942
  pricing: publicEventPricingSchema,
26863
26943
  paymentTerms: blockBookingPaymentTermsSchema,
26944
+ consent: blockBookingConsentSchema.nullable(),
26864
26945
  accessRestriction: accessRestrictionSchema,
26865
26946
  allowedCategoryIds: z.array(z.string()),
26866
26947
  requireGuestDetails: z.boolean().optional(),
@@ -27209,6 +27290,25 @@ function resolveEventRegistrationScopedEvents(events, context) {
27209
27290
  return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
27210
27291
  }
27211
27292
  //#endregion
27293
+ //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
27294
+ function planEventRegistrationScope(input) {
27295
+ const subject = input.subject;
27296
+ const selectedRunOffering = input.wholeSeriesOffering;
27297
+ if (subject?.kind !== "eventOffering" || !selectedRunOffering) return {
27298
+ kind: "context",
27299
+ events: resolveEventRegistrationScopedEvents(input.events, {
27300
+ occurrenceContext: input.occurrenceContext,
27301
+ subject
27302
+ })
27303
+ };
27304
+ if (!(selectedRunOffering.eventOfferingId === subject.eventOfferingId && subject.availableEventSeriesIds.some((seriesId) => seriesId === selectedRunOffering.eventSeriesId))) return { kind: "invalidSelectedRun" };
27305
+ return {
27306
+ kind: "selectedRun",
27307
+ events: input.events.filter((event) => event.seriesId === selectedRunOffering.eventSeriesId),
27308
+ offering: selectedRunOffering
27309
+ };
27310
+ }
27311
+ //#endregion
27212
27312
  //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
27213
27313
  function isRecord$7(value) {
27214
27314
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -27622,10 +27722,13 @@ function buildEventRegistrationShellStepLabels(source) {
27622
27722
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
27623
27723
  }
27624
27724
  function scopeEventRegistrationEvents(source) {
27625
- return resolveEventRegistrationScopedEvents(toRegistrationEvents(source.events ?? []), {
27725
+ const scope = planEventRegistrationScope({
27726
+ events: toRegistrationEvents(source.events ?? []),
27727
+ wholeSeriesOffering: source.wholeSeriesOffering,
27626
27728
  occurrenceContext: source.occurrenceContext,
27627
27729
  subject: source.subject
27628
27730
  });
27731
+ return scope.kind === "invalidSelectedRun" ? [] : scope.events;
27629
27732
  }
27630
27733
  function shellLabelForRegistrationStep(step, events) {
27631
27734
  switch (step) {
@@ -31062,7 +31165,7 @@ const publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
31062
31165
  entityId: z.string(),
31063
31166
  path: z.string(),
31064
31167
  title: z.string(),
31065
- kind: z.enum(["page", "content"]),
31168
+ kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
31066
31169
  contentTypeKey: z.string().nullable().optional()
31067
31170
  })) });
31068
31171
  const groupOverrideFields = [
@@ -1,7 +1,7 @@
1
1
  import { i as textColorStyle } from "./colorStyles-CrxJrPjJ.mjs";
2
- import { et as themeButtonClassName, t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
+ import { $ as themeButtonClassName, t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
3
3
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
4
- import { t as LeafletStaticMap } from "./LeafletStaticMap-DYmHnM8g.mjs";
4
+ import { t as LeafletStaticMap } from "./LeafletStaticMap-QhgIBQbv.mjs";
5
5
  import "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region ../core/src/location.ts
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { D as clsx } from "./colorStyles-CrxJrPjJ.mjs";
3
- import { Jt as assertNever$1, St as assertNever, et as themeButtonClassName, t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
4
- import { n as useBlockApi, t as BlockApiProvider } from "./context-B83PiNzm.mjs";
3
+ import { $ as themeButtonClassName, Et as assertNever, Qt as assertNever$1, t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
4
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-TSK1CGx8.mjs";
5
5
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
6
6
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
7
7
  import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
@@ -1,4 +1,4 @@
1
- import { Vt as formatBookingPriceDisplay } from "./propsDecoder-BxmqPKdP.mjs";
1
+ import { Gt as formatBookingPriceDisplay } from "./propsDecoder-CeUMxI9a.mjs";
2
2
  //#region ../core/src/planner.ts
3
3
  /** Default clock for production callers that do not inject time explicitly. */
4
4
  const systemPlanningClock = { now: () => Date.now() };
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { r as ProductDetailController } from "./shop-commerce-BhvQCosS.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-DNNgZlmW.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { r as ProductDetailController } from "./shop-commerce-quDL411J.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-BWPUURvG.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-detail.client.tsx
@@ -1,6 +1,6 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-BxmqPKdP.mjs";
2
- import { i as ProductListController } from "./shop-commerce-BhvQCosS.mjs";
3
- import { t as mountShopBlockIsland } from "./shopShared-DNNgZlmW.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-CeUMxI9a.mjs";
2
+ import { i as ProductListController } from "./shop-commerce-quDL411J.mjs";
3
+ import { t as mountShopBlockIsland } from "./shopShared-BWPUURvG.mjs";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/product-list.client.tsx