@riverbankcms/sdk 0.132.0 → 0.135.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 (328) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DKQ5eFK9.mjs → PreviewEditorSidebar-roNY0GVy.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-CNTcOjCC.mjs → PreviewEditorUI-KboDbEh_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-DJu3qu33.mjs → SdkPreviewModeRuntime-DBrF7Caa.mjs} +48 -17
  7. package/dist/{SiteChromeCustomizeContext-2TzT3vbj.mjs → SiteChromeCustomizeContext-DrIEpJKn.mjs} +4351 -7964
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +549 -549
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +234 -234
  10. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  11. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +1 -1
  12. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  13. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  14. package/dist/_dts/api/src/bookingOperations.d.ts +111 -173
  15. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  17. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  18. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  19. package/dist/_dts/api/src/bookings.d.ts +7 -11
  20. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  21. package/dist/_dts/api/src/communications.d.ts +1 -1
  22. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  23. package/dist/_dts/api/src/endpoints.d.ts +30 -110
  24. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  25. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  26. package/dist/_dts/api/src/index.d.ts +3 -4
  27. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -6
  29. package/dist/_dts/api/src/navigation/linkResolver.d.ts +6 -2
  30. package/dist/_dts/api/src/navigation/types.d.ts +23 -6
  31. package/dist/_dts/api/src/navigation.d.ts +1 -1
  32. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  33. package/dist/_dts/api/src/publicBookingService.d.ts +15 -0
  34. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  35. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  36. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +88 -6
  37. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  38. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -98
  39. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  40. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  41. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  42. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  43. package/dist/_dts/api/src/sdkThemeWire.d.ts +50 -50
  44. package/dist/_dts/api/src/siteBanner.d.ts +4 -2
  45. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  46. package/dist/_dts/api/src/types.d.ts +2 -2
  47. package/dist/_dts/api/src/webhooks.d.ts +12 -12
  48. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  49. package/dist/_dts/blocks/src/client.d.ts +1 -6
  50. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  51. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +33 -166
  52. package/dist/_dts/blocks/src/index.d.ts +3 -2
  53. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  54. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  55. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +2 -2
  56. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  57. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  58. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +46 -24
  59. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -0
  60. package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +3 -3
  61. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +6 -0
  62. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  63. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +4 -4
  64. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +148 -148
  65. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +5 -4
  66. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  67. package/dist/_dts/blocks/src/system/blocks/shared/bookingConsent.d.ts +36 -0
  68. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/manifest/hydrateLinks.d.ts +9 -2
  70. package/dist/_dts/blocks/src/system/manifest/resolveBlockData.d.ts +8 -0
  71. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +79 -79
  72. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  74. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  75. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  76. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -11
  77. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  78. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +100 -59
  79. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  80. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  81. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  82. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  83. package/dist/_dts/blocks/src/system/runtime/components/multi-step/DynamicFormFields.d.ts +3 -19
  84. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  85. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  86. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  87. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  88. package/dist/_dts/blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.d.ts +2 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.consent.d.ts +10 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.field-values.d.ts +4 -0
  91. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.fields.d.ts +21 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +2 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +38 -144
  94. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -19
  95. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -2
  96. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  97. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +2 -0
  98. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  100. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  101. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  102. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  103. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  104. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  105. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  106. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  107. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  108. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  109. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  110. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  111. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +18 -1
  112. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  113. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  114. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  115. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  116. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  117. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +24 -9
  118. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  119. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  120. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/validation.d.ts +2 -1
  121. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  122. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  123. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  124. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +40 -18
  125. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  126. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  127. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingConsentAgreement.d.ts +7 -0
  128. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  129. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  130. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  131. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  132. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  133. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +2 -1
  134. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  135. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  136. package/dist/_dts/commerce/src/index.d.ts +16 -0
  137. package/dist/_dts/commerce/src/money.d.ts +122 -0
  138. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  139. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  140. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  141. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  142. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  143. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  144. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  145. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  146. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  147. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  148. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  149. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  150. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  151. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  152. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  153. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  154. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  155. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  156. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  157. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  158. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  159. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  160. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  161. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  162. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  163. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  164. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  165. package/dist/_dts/content-model/src/content-types/schema.d.ts +4 -4
  166. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  167. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  168. package/dist/_dts/core/src/booking-consent.d.ts +8 -0
  169. package/dist/_dts/core/src/branded.d.ts +3 -3
  170. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  171. package/dist/_dts/core/src/index.d.ts +1 -0
  172. package/dist/_dts/core/src/participants.d.ts +17 -17
  173. package/dist/_dts/core/src/rectification.d.ts +1 -1
  174. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +899 -2157
  175. package/dist/_dts/db/src/schemas/forms.d.ts +21 -21
  176. package/dist/_dts/db/src/types/jsonb.d.ts +1 -1
  177. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +2 -1
  178. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +2 -1
  179. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +3 -2
  180. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +3 -4
  181. package/dist/_dts/media-core/src/usageScanner.d.ts +1 -1
  182. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  183. package/dist/_dts/sdk/src/bookings/types.d.ts +8 -60
  184. package/dist/_dts/sdk/src/config/validation.d.ts +30 -30
  185. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -36
  186. package/dist/_dts/sdk/src/contracts/rendering.d.ts +1 -1
  187. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +9 -9
  188. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -19
  189. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  190. package/dist/_dts/sdk/src/version.d.ts +1 -1
  191. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  192. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  193. package/dist/_dts/theme-core/src/buttons/types.d.ts +12 -12
  194. package/dist/_dts/theme-core/src/cards/types.d.ts +5 -5
  195. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  196. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +72 -72
  197. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  198. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  199. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
  200. package/dist/_dts/theme-core/src/schema.d.ts +82 -82
  201. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  202. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  203. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
  204. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  205. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  206. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
  207. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  208. package/dist/_dts/ui/src/badge.d.ts +1 -1
  209. package/dist/_dts/ui/src/button.d.ts +1 -1
  210. package/dist/_dts/ui/src/callout.d.ts +1 -1
  211. package/dist/_dts/ui/src/card.d.ts +1 -1
  212. package/dist/client/{usePolling-M5jG675x.mjs → BookingConsentAgreement-BQqwi8Oa.mjs} +180 -4
  213. package/dist/client/{DiscountCodeDisclosure-DO7llLxm.mjs → DiscountCodeDisclosure-B97aMo0V.mjs} +13 -27
  214. package/dist/client/{EventCombined.client-xID7zN__.mjs → EventCombined.client-Bs2Iw9Q6.mjs} +3 -3
  215. package/dist/client/{EventListing.client-CriBslp0.mjs → EventListing.client-C4QUQdmg.mjs} +2 -2
  216. package/dist/client/{LeafletStaticMap-DYmHnM8g.mjs → LeafletStaticMap-CwWRk69M.mjs} +1 -1
  217. package/dist/client/{accordion-CgFbnnnQ.mjs → accordion-BA0j8Mpw.mjs} +1 -1
  218. package/dist/client/{bookingForm-dUyGpbxc.mjs → bookingForm-Br2e41H0.mjs} +72 -47
  219. package/dist/client/bookings.mjs +1987 -2132
  220. package/dist/client/{carousel-BvBwkUzx.mjs → carousel-B4dmwnpD.mjs} +1 -1
  221. package/dist/client/{cart-DiZENT2E.mjs → cart-B_ckGW4b.mjs} +3 -3
  222. package/dist/client/{checkout-Dq13KIgR.mjs → checkout-DAyspHdf.mjs} +3 -3
  223. package/dist/client/checkoutUrls-BuseL0dw.mjs +189 -0
  224. package/dist/client/client.mjs +5627 -9543
  225. package/dist/client/{context-B83PiNzm.mjs → context-DljQn8L5.mjs} +15 -82
  226. package/dist/client/{eventCalendar-BF0Jatfw.mjs → eventCalendar-pJu3FUod.mjs} +5 -5
  227. package/dist/client/{eventCombined-BuoCF8je.mjs → eventCombined-B6Kacm9F.mjs} +3 -3
  228. package/dist/client/{eventDetails-CKwh0S9s.mjs → eventDetails-CaX9z1pv.mjs} +8 -8
  229. package/dist/client/{eventListing-eUxaWFaB.mjs → eventListing-B9aXPO-I.mjs} +3 -3
  230. package/dist/client/{eventRegistration-CfkNOkPb.mjs → eventRegistration-CBSovBkg.mjs} +4550 -3671
  231. package/dist/client/{form-C17H1c_H.mjs → form-Cm0tu_7o.mjs} +2 -2
  232. package/dist/client/{headerSection-DEwUmrtt.mjs → headerSection-OgRtHeKS.mjs} +2 -2
  233. package/dist/client/hooks.mjs +535 -694
  234. package/dist/client/{locationMap-Pf2QwuvW.mjs → locationMap-DmjcYqNM.mjs} +2 -2
  235. package/dist/client/{newsletterForm-BWQAH5Sv.mjs → newsletterForm-D08OZQAC.mjs} +2 -2
  236. package/dist/client/{productDetail-BZi1Fa_G.mjs → productDetail-BqZeu2P4.mjs} +3 -3
  237. package/dist/client/{productList-qq-55DNk.mjs → productList-mNyIF9FG.mjs} +3 -3
  238. package/dist/client/{propsDecoder-BxmqPKdP.mjs → propsDecoder-DwHXRm9X.mjs} +4850 -4502
  239. package/dist/client/rendering/client.mjs +59921 -62298
  240. package/dist/client/rendering/islands.mjs +17 -19
  241. package/dist/client/rendering.mjs +6226 -10236
  242. package/dist/client/{scrollToBlock-B3CcKdtG.mjs → scrollToBlock-DtmdM3v-.mjs} +2 -2
  243. package/dist/client/{shop-DNWJPut5.mjs → shop-CNjZK16F.mjs} +6 -6
  244. package/dist/client/{shop-commerce-BhvQCosS.mjs → shop-commerce-DkNNao1J.mjs} +7 -164
  245. package/dist/client/{shop-commerce-store-B04sCNnW.mjs → shop-commerce-store-9WA--zuW.mjs} +1 -1
  246. package/dist/client/{shopShared-DNNgZlmW.mjs → shopShared-CHCVfccY.mjs} +3 -3
  247. package/dist/client/{useEventFilters-CUmhE24_.mjs → useEventFilters-DvuaB4ZN.mjs} +3 -3
  248. package/dist/preview-next/before-render.mjs +40 -161
  249. package/dist/preview-next/client/runtime.mjs +4 -4
  250. package/dist/preview-next/keepAlive.mjs +40 -161
  251. package/dist/preview-next/middleware.mjs +40 -161
  252. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  253. package/dist/{sdk-runtime-BEXb1wqo.mjs → sdk-runtime-3GhW4knb.mjs} +2 -2
  254. package/dist/{separator-DGMuip1D.mjs → separator-D3bCWYYb.mjs} +1 -1
  255. package/dist/server/components.mjs +634 -2969
  256. package/dist/server/config-validation.mjs +535 -694
  257. package/dist/server/config.mjs +535 -694
  258. package/dist/server/data.mjs +535 -694
  259. package/dist/server/index.mjs +41 -162
  260. package/dist/server/next.mjs +644 -2979
  261. package/dist/server/page-converter.mjs +435 -561
  262. package/dist/server/prebuild.mjs +1 -1
  263. package/dist/server/rendering/server.mjs +635 -2874
  264. package/dist/server/rendering.mjs +634 -2969
  265. package/dist/server/routing.mjs +706 -1138
  266. package/dist/server/server.mjs +549 -708
  267. package/dist/server/theme-bridge.mjs +152 -1635
  268. package/dist/styles/index.css +41 -1348
  269. package/package.json +2 -2
  270. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  271. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  272. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  273. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  274. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  275. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  276. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  277. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  278. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -133
  279. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  280. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  281. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  282. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  283. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  284. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  285. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  286. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  287. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  288. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  289. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  290. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  291. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  292. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  293. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  294. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  295. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  296. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  297. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  298. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  299. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  300. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  301. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  302. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  303. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -45
  304. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  305. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  306. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  307. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  308. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  309. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  310. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  311. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  312. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  313. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  314. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  315. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  316. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -323
  317. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  318. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  319. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  320. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  321. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  322. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  323. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  324. package/dist/client/StepIndicator-CGixP_LW.mjs +0 -138
  325. package/dist/client/WholeSeriesRegistrationWizard-BEjzSiOA.mjs +0 -2496
  326. package/dist/client/checkoutUrls-Ct8Mxna3.mjs +0 -26
  327. package/dist/client/courseRegistration-CKC5NmyH.mjs +0 -52
  328. package/dist/client/pricing-CVdvbopJ.mjs +0 -195
@@ -1343,69 +1343,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1343
1343
  }
1344
1344
  });
1345
1345
  //#endregion
1346
- //#region ../api/src/courseEndpointDefinitions.ts
1347
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1348
- listCourses: {
1349
- path: "/sites/{siteId}/bookings/courses",
1350
- method: "GET",
1351
- auth: "user",
1352
- responseKind: "json"
1353
- },
1354
- exportCoursesCsv: {
1355
- path: "/sites/{siteId}/bookings/courses/export.csv",
1356
- method: "GET",
1357
- tags: [
1358
- "site-{siteId}",
1359
- "bookings",
1360
- "courses-{siteId}"
1361
- ],
1362
- errors: [],
1363
- auth: "user",
1364
- responseKind: "blob"
1365
- },
1366
- createCourse: {
1367
- path: "/sites/{siteId}/bookings/courses",
1368
- method: "POST",
1369
- auth: "user",
1370
- responseKind: "json",
1371
- errors: [
1372
- "validation:invalid_input",
1373
- "resource:not_found",
1374
- "resource:already_exists",
1375
- "resource:conflict",
1376
- "server:internal_error"
1377
- ]
1378
- },
1379
- getCourse: {
1380
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1381
- method: "GET",
1382
- auth: "user",
1383
- responseKind: "json"
1384
- },
1385
- updateCourse: {
1386
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1387
- method: "PATCH",
1388
- auth: "user",
1389
- responseKind: "json",
1390
- errors: [
1391
- "validation:invalid_input",
1392
- "resource:not_found",
1393
- "resource:conflict",
1394
- "server:internal_error"
1395
- ]
1396
- },
1397
- deleteCourse: {
1398
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1399
- method: "DELETE",
1400
- auth: "user",
1401
- responseKind: "json",
1402
- errors: [
1403
- "validation:invalid_input",
1404
- "resource:not_found",
1405
- "resource:conflict",
1406
- "server:internal_error"
1407
- ]
1408
- },
1346
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
1347
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1409
1348
  deleteEventOffering: {
1410
1349
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
1411
1350
  method: "DELETE",
@@ -1418,20 +1357,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1418
1357
  "server:internal_error"
1419
1358
  ]
1420
1359
  },
1421
- duplicateCourse: {
1422
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
1423
- method: "POST",
1424
- auth: "user",
1425
- responseKind: "json",
1426
- errors: [
1427
- "validation:invalid_input",
1428
- "resource:not_found",
1429
- "resource:already_exists",
1430
- "server:internal_error"
1431
- ]
1432
- },
1433
- changeCourseContentOwnership: {
1434
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
1360
+ changeEventSeriesContentOwnership: {
1361
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
1435
1362
  method: "POST",
1436
1363
  auth: "user",
1437
1364
  responseKind: "json",
@@ -1442,8 +1369,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1442
1369
  "server:internal_error"
1443
1370
  ]
1444
1371
  },
1445
- addCourseEnrollment: {
1446
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1372
+ addEventSeriesRegistration: {
1373
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1447
1374
  method: "POST",
1448
1375
  auth: "user",
1449
1376
  responseKind: "json",
@@ -1454,33 +1381,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1454
1381
  "server:internal_error"
1455
1382
  ]
1456
1383
  },
1457
- listCourseEnrollments: {
1458
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1384
+ listEventSeriesRegistrations: {
1385
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1459
1386
  method: "GET",
1460
1387
  auth: "user",
1461
1388
  responseKind: "json"
1462
1389
  },
1463
- exportCourseEnrollmentsCsv: {
1464
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1390
+ exportEventSeriesRegistrationsCsv: {
1391
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
1465
1392
  method: "GET",
1466
1393
  auth: "user",
1467
1394
  errors: [],
1468
1395
  responseKind: "blob"
1469
1396
  },
1470
- exportCourseWaitlistCsv: {
1471
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1472
- method: "GET",
1473
- tags: [
1474
- "site-{siteId}",
1475
- "bookings",
1476
- "courses-{courseId}"
1477
- ],
1478
- auth: "user",
1479
- responseKind: "blob",
1480
- errors: []
1481
- },
1482
- updateCourseEnrollment: {
1483
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1397
+ updateEventSeriesRegistration: {
1398
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
1484
1399
  method: "PATCH",
1485
1400
  auth: "user",
1486
1401
  responseKind: "json",
@@ -1868,71 +1783,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1868
1783
  errors: ["resource:not_found", "server:internal_error"],
1869
1784
  auth: "public",
1870
1785
  responseKind: "json"
1871
- },
1872
- registerForWholeSeries: {
1873
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1874
- method: "POST",
1875
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1876
- errors: [
1877
- "auth:unauthenticated",
1878
- "auth:forbidden",
1879
- "validation:invalid_input",
1880
- "resource:not_found",
1881
- "resource:conflict",
1882
- "resource:already_exists",
1883
- "server:internal_error"
1884
- ],
1885
- auth: "public",
1886
- responseKind: "json"
1887
- },
1888
- checkWholeSeriesEligibility: {
1889
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1890
- method: "POST",
1891
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1892
- errors: [
1893
- "auth:unauthenticated",
1894
- "resource:not_found",
1895
- "resource:conflict",
1896
- "server:internal_error"
1897
- ],
1898
- auth: "public",
1899
- responseKind: "json"
1900
- },
1901
- createWholeSeriesCheckout: {
1902
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1786
+ }
1787
+ });
1788
+ //#endregion
1789
+ //#region ../api/src/publicEventEndpointDefinitions.ts
1790
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1791
+ getPublicEventRegistrationOptions: {
1792
+ path: "/public/sites/{siteId}/events/registration-options",
1903
1793
  method: "POST",
1904
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1794
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
1905
1795
  auth: "public",
1906
1796
  responseKind: "json",
1907
1797
  errors: [
1908
- "auth:unauthenticated",
1909
1798
  "validation:invalid_input",
1910
1799
  "resource:not_found",
1911
1800
  "resource:conflict",
1912
1801
  "server:internal_error"
1913
1802
  ]
1914
1803
  },
1915
- getWholeSeriesRegistrationStatus: {
1916
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1804
+ resolveEventSubroute: {
1805
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
1917
1806
  method: "GET",
1918
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1919
- errors: ["resource:not_found", "server:internal_error"],
1807
+ revalidate: 60,
1808
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1920
1809
  auth: "public",
1921
- responseKind: "json"
1810
+ responseKind: "json",
1811
+ errors: []
1922
1812
  }
1923
1813
  });
1924
1814
  //#endregion
1925
- //#region ../api/src/publicEventEndpointDefinitions.ts
1926
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
1927
- path: "/public/sites/{siteId}/events/subroutes/resolve",
1928
- method: "GET",
1929
- revalidate: 60,
1930
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1931
- auth: "public",
1932
- responseKind: "json",
1933
- errors: []
1934
- } });
1935
- //#endregion
1936
1815
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
1937
1816
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1938
1817
  listSiteApiKeys: {
@@ -2829,7 +2708,7 @@ const API_ENDPOINTS$1 = {
2829
2708
  },
2830
2709
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
2831
2710
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
2832
- ...COURSE_ENDPOINT_DEFINITIONS,
2711
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS,
2833
2712
  getSite: {
2834
2713
  path: "/sites",
2835
2714
  method: "GET",
@@ -6143,13 +6022,13 @@ const API_ENDPOINTS$1 = {
6143
6022
  "server:internal_error"
6144
6023
  ]
6145
6024
  },
6146
- refundCourseEnrollment: {
6147
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refund",
6025
+ refundEventSeriesRegistration: {
6026
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refund",
6148
6027
  method: "POST",
6149
6028
  tags: [
6150
6029
  "site-{siteId}",
6151
- "course-{courseId}",
6152
- "course-enrollment-{enrollmentId}",
6030
+ "event-series-{seriesId}",
6031
+ "event-series-registration-{registrationId}",
6153
6032
  "bookings"
6154
6033
  ],
6155
6034
  auth: "user",
@@ -6172,13 +6051,13 @@ const API_ENDPOINTS$1 = {
6172
6051
  auth: "user",
6173
6052
  responseKind: "json"
6174
6053
  },
6175
- listCourseEnrollmentRefunds: {
6176
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refunds",
6054
+ listEventSeriesRegistrationRefunds: {
6055
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refunds",
6177
6056
  method: "GET",
6178
6057
  tags: [
6179
6058
  "site-{siteId}",
6180
- "course-{courseId}",
6181
- "course-enrollment-{enrollmentId}",
6059
+ "event-series-{seriesId}",
6060
+ "event-series-registration-{registrationId}",
6182
6061
  "bookings"
6183
6062
  ],
6184
6063
  auth: "user",
@@ -7867,14 +7746,14 @@ const API_ENDPOINTS$1 = {
7867
7746
  errors: ["server:internal_error"]
7868
7747
  },
7869
7748
  portalGetWholeSeriesBookingQuestions: {
7870
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7749
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7871
7750
  method: "GET",
7872
7751
  auth: "public",
7873
7752
  responseKind: "json",
7874
7753
  errors: ["resource:not_found", "server:internal_error"]
7875
7754
  },
7876
7755
  portalUpdateWholeSeriesBookingQuestions: {
7877
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7756
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7878
7757
  method: "PUT",
7879
7758
  auth: "public",
7880
7759
  responseKind: "json",
@@ -7885,7 +7764,7 @@ const API_ENDPOINTS$1 = {
7885
7764
  ]
7886
7765
  },
7887
7766
  portalCreateWholeSeriesBookingQuestionsUploadUrl: {
7888
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload-url",
7767
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload-url",
7889
7768
  method: "POST",
7890
7769
  auth: "public",
7891
7770
  responseKind: "json",
@@ -7896,7 +7775,7 @@ const API_ENDPOINTS$1 = {
7896
7775
  ]
7897
7776
  },
7898
7777
  portalFinalizeWholeSeriesBookingQuestionsUpload: {
7899
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload",
7778
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload",
7900
7779
  method: "POST",
7901
7780
  auth: "public",
7902
7781
  responseKind: "json",
@@ -7907,7 +7786,7 @@ const API_ENDPOINTS$1 = {
7907
7786
  ]
7908
7787
  },
7909
7788
  portalCancelWholeSeriesRegistration: {
7910
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/cancel",
7789
+ path: "/portal/dated-offerings/whole-series/{registrationId}/cancel",
7911
7790
  method: "POST",
7912
7791
  auth: "public",
7913
7792
  responseKind: "json",
@@ -8401,7 +8280,7 @@ function publicEventPricingType(pricing) {
8401
8280
  case "single_paid":
8402
8281
  case "ticket_types":
8403
8282
  case "sliding_scale":
8404
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8283
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8405
8284
  case "external": return "external";
8406
8285
  }
8407
8286
  }
@@ -8412,14 +8291,14 @@ function publicEventPricingCurrency(pricing) {
8412
8291
  case "single_paid":
8413
8292
  case "ticket_types":
8414
8293
  case "sliding_scale": return pricing.currency;
8415
- case "course": return pricing.display.display.currency;
8294
+ case "whole_series": return pricing.display.display.currency;
8416
8295
  case "external": return null;
8417
8296
  }
8418
8297
  }
8419
8298
  function isFreePublicEventPriceDisplay(display) {
8420
8299
  switch (display.kind) {
8421
8300
  case "free": return true;
8422
- case "course": return display.display.kind === "free";
8301
+ case "whole_series": return display.display.kind === "free";
8423
8302
  case "exact":
8424
8303
  case "from":
8425
8304
  case "range":
@@ -8455,7 +8334,7 @@ function formatBookingPriceDisplay(display, options = {}) {
8455
8334
  case "mixed": return display.paidToAmount > display.paidFromAmount ? `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)} - ${formatCurrencyAmount(display.paidToAmount, display.currency, options)}` : `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)}`;
8456
8335
  case "unavailable": return "Pricing unavailable";
8457
8336
  case "external": return display.label;
8458
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
8337
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
8459
8338
  default: return assertNever$24(display);
8460
8339
  }
8461
8340
  }
@@ -9176,6 +9055,68 @@ z$1.object({
9176
9055
  monthlyCurrency: z$1.literal("gbp")
9177
9056
  });
9178
9057
  //#endregion
9058
+ //#region ../blocks/src/system/types/link.ts
9059
+ const nullableString = z$1.union([z$1.string().min(1), z$1.null()]);
9060
+ const RESOLVED_INTERNAL_LINK_ENTITY_TYPES = [
9061
+ "page",
9062
+ "content",
9063
+ "pageSurface"
9064
+ ];
9065
+ const resolvedInternalLinkKeys = [
9066
+ "entityId",
9067
+ "entityType",
9068
+ "href",
9069
+ "title",
9070
+ "typeLabel"
9071
+ ];
9072
+ const internalRouteOnlyLinkSchema = z$1.object({
9073
+ kind: z$1.literal("internal"),
9074
+ routeId: z$1.string().min(1)
9075
+ }).passthrough().superRefine((value, ctx) => {
9076
+ if (!resolvedInternalLinkKeys.some((key) => value[key] != null)) return;
9077
+ ctx.addIssue({
9078
+ code: "custom",
9079
+ message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
9080
+ });
9081
+ });
9082
+ const internalResolvedLinkSchema = z$1.object({
9083
+ kind: z$1.literal("internal"),
9084
+ routeId: z$1.string().min(1),
9085
+ entityId: z$1.string().min(1),
9086
+ entityType: z$1.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
9087
+ href: z$1.string().min(1),
9088
+ title: z$1.string().min(1),
9089
+ typeLabel: z$1.string().min(1),
9090
+ contentTypeKey: nullableString.optional(),
9091
+ contentTypeName: nullableString.optional(),
9092
+ updatedAt: nullableString.optional()
9093
+ }).passthrough();
9094
+ const internalLinkSchema = z$1.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
9095
+ const externalLinkSchema$1 = z$1.object({
9096
+ kind: z$1.literal("external"),
9097
+ href: z$1.string().min(1)
9098
+ }).passthrough();
9099
+ const customLinkSchema$1 = z$1.object({
9100
+ kind: z$1.literal("url"),
9101
+ href: z$1.string().min(1)
9102
+ }).passthrough();
9103
+ const pageLinkSchema$1 = z$1.object({
9104
+ kind: z$1.literal("page"),
9105
+ identifier: z$1.string().min(1)
9106
+ }).passthrough();
9107
+ const entryLinkSchema$1 = z$1.object({
9108
+ kind: z$1.literal("entry"),
9109
+ contentType: z$1.string().min(1),
9110
+ identifier: z$1.string().min(1)
9111
+ }).passthrough();
9112
+ const linkSchema = z$1.union([
9113
+ internalLinkSchema,
9114
+ externalLinkSchema$1,
9115
+ customLinkSchema$1,
9116
+ pageLinkSchema$1,
9117
+ entryLinkSchema$1
9118
+ ]);
9119
+ //#endregion
9179
9120
  //#region ../api/src/navigation/contracts.ts
9180
9121
  /**
9181
9122
  * Canonical navigation/link Zod contracts.
@@ -9205,7 +9146,7 @@ const internalLinkPayloadSchema = z$1.object({
9205
9146
  kind: z$1.literal("internal"),
9206
9147
  routeId: z$1.string().uuid(),
9207
9148
  entityId: z$1.string().uuid(),
9208
- entityType: z$1.enum(["page", "content"]),
9149
+ entityType: z$1.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
9209
9150
  href: z$1.string().min(1),
9210
9151
  title: z$1.string().min(1),
9211
9152
  typeLabel: z$1.string().min(1),
@@ -9213,37 +9154,37 @@ const internalLinkPayloadSchema = z$1.object({
9213
9154
  contentTypeName: z$1.string().nullable().optional(),
9214
9155
  updatedAt: z$1.string().nullable().optional()
9215
9156
  }).passthrough();
9216
- const externalLinkSchema$1 = z$1.object({
9157
+ const externalLinkSchema = z$1.object({
9217
9158
  kind: z$1.literal("external"),
9218
9159
  href: z$1.string().url()
9219
9160
  });
9220
- const customLinkSchema$1 = z$1.object({
9161
+ const customLinkSchema = z$1.object({
9221
9162
  kind: z$1.literal("url"),
9222
9163
  href: z$1.string().min(1)
9223
9164
  });
9224
- const pageLinkSchema$1 = z$1.object({
9165
+ const pageLinkSchema = z$1.object({
9225
9166
  kind: z$1.literal("page"),
9226
9167
  identifier: z$1.string().min(1)
9227
9168
  });
9228
- const entryLinkSchema$1 = z$1.object({
9169
+ const entryLinkSchema = z$1.object({
9229
9170
  kind: z$1.literal("entry"),
9230
9171
  contentType: z$1.string().min(1),
9231
9172
  identifier: z$1.string().min(1)
9232
9173
  });
9233
9174
  const linkPayloadSchema = z$1.discriminatedUnion("kind", [
9234
9175
  internalLinkPayloadSchema,
9235
- pageLinkSchema$1,
9236
- entryLinkSchema$1,
9237
- externalLinkSchema$1,
9238
- customLinkSchema$1,
9176
+ pageLinkSchema,
9177
+ entryLinkSchema,
9178
+ externalLinkSchema,
9179
+ customLinkSchema,
9239
9180
  portalLinkPayloadSchema,
9240
9181
  cartLinkPayloadSchema
9241
9182
  ]);
9242
9183
  const navigationLinkInputSchemaOptions = [
9243
- pageLinkSchema$1,
9244
- entryLinkSchema$1,
9245
- externalLinkSchema$1,
9246
- customLinkSchema$1,
9184
+ pageLinkSchema,
9185
+ entryLinkSchema,
9186
+ externalLinkSchema,
9187
+ customLinkSchema,
9247
9188
  portalLinkPayloadSchema,
9248
9189
  cartLinkPayloadSchema
9249
9190
  ];
@@ -18868,63 +18809,6 @@ z$1.object({
18868
18809
  themes: z$1.array(themeSchema).length(3)
18869
18810
  });
18870
18811
  //#endregion
18871
- //#region ../blocks/src/system/types/link.ts
18872
- const nullableString = z$1.union([z$1.string().min(1), z$1.null()]);
18873
- const resolvedInternalLinkKeys = [
18874
- "entityId",
18875
- "entityType",
18876
- "href",
18877
- "title",
18878
- "typeLabel"
18879
- ];
18880
- const internalRouteOnlyLinkSchema = z$1.object({
18881
- kind: z$1.literal("internal"),
18882
- routeId: z$1.string().min(1)
18883
- }).passthrough().superRefine((value, ctx) => {
18884
- if (!resolvedInternalLinkKeys.some((key) => value[key] != null)) return;
18885
- ctx.addIssue({
18886
- code: "custom",
18887
- message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
18888
- });
18889
- });
18890
- const internalResolvedLinkSchema = z$1.object({
18891
- kind: z$1.literal("internal"),
18892
- routeId: z$1.string().min(1),
18893
- entityId: z$1.string().min(1),
18894
- entityType: z$1.enum(["page", "content"]),
18895
- href: z$1.string().min(1),
18896
- title: z$1.string().min(1),
18897
- typeLabel: z$1.string().min(1),
18898
- contentTypeKey: nullableString.optional(),
18899
- contentTypeName: nullableString.optional(),
18900
- updatedAt: nullableString.optional()
18901
- }).passthrough();
18902
- const internalLinkSchema = z$1.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
18903
- const externalLinkSchema = z$1.object({
18904
- kind: z$1.literal("external"),
18905
- href: z$1.string().min(1)
18906
- }).passthrough();
18907
- const customLinkSchema = z$1.object({
18908
- kind: z$1.literal("url"),
18909
- href: z$1.string().min(1)
18910
- }).passthrough();
18911
- const pageLinkSchema = z$1.object({
18912
- kind: z$1.literal("page"),
18913
- identifier: z$1.string().min(1)
18914
- }).passthrough();
18915
- const entryLinkSchema = z$1.object({
18916
- kind: z$1.literal("entry"),
18917
- contentType: z$1.string().min(1),
18918
- identifier: z$1.string().min(1)
18919
- }).passthrough();
18920
- const linkSchema = z$1.union([
18921
- internalLinkSchema,
18922
- externalLinkSchema,
18923
- customLinkSchema,
18924
- pageLinkSchema,
18925
- entryLinkSchema
18926
- ]);
18927
- //#endregion
18928
18812
  //#region ../media-core/src/fileSafety.ts
18929
18813
  const CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f]/u;
18930
18814
  function containsUnsafePathSegmentCharacter(value) {
@@ -23402,7 +23286,7 @@ defineBlockAppearancePreset({
23402
23286
  id: "schedule-details-brand-depth",
23403
23287
  target: "events",
23404
23288
  label: "Brand-depth schedule details",
23405
- blockKinds: ["block.event-details", "block.course-details"],
23289
+ blockKinds: ["block.event-details"],
23406
23290
  design: {
23407
23291
  sectionSurface: "brand-depth-band",
23408
23292
  contentFrame: plainFrame,
@@ -30019,7 +29903,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
30019
29903
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
30020
29904
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
30021
29905
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
30022
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
30023
29906
  function bind(from, options) {
30024
29907
  return (node) => ({
30025
29908
  ...node,
@@ -40111,12 +39994,12 @@ const weeklySlotAvailabilityBlockDefinition = {
40111
39994
  };
40112
39995
  //#endregion
40113
39996
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
40114
- const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
40115
- const bookingInstalmentPlanSchema = z$1.union([
39997
+ const bookingDepositRefundPolicySchema$1 = z$1.enum(["refundable", "non_refundable"]);
39998
+ const bookingInstalmentPlanSchema$1 = z$1.union([
40116
39999
  z$1.object({
40117
40000
  kind: z$1.literal("deposit_plus_one_remainder"),
40118
40001
  depositAmountCents: z$1.number().int().min(0),
40119
- depositRefundability: bookingDepositRefundPolicySchema,
40002
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40120
40003
  remainderDueCount: z$1.number().int().positive(),
40121
40004
  intervalUnit: z$1.enum([
40122
40005
  "day",
@@ -40127,7 +40010,7 @@ const bookingInstalmentPlanSchema = z$1.union([
40127
40010
  z$1.object({
40128
40011
  kind: z$1.literal("deposit_plus_scheduled_instalments"),
40129
40012
  depositAmountCents: z$1.number().int().min(0),
40130
- depositRefundability: bookingDepositRefundPolicySchema,
40013
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40131
40014
  instalmentCount: z$1.number().int().positive(),
40132
40015
  intervalCount: z$1.number().int().positive(),
40133
40016
  intervalUnit: z$1.enum([
@@ -40147,31 +40030,47 @@ const bookingInstalmentPlanSchema = z$1.union([
40147
40030
  ])
40148
40031
  })
40149
40032
  ]);
40150
- const bookingFlexibleBalanceDueDateRuleSchema = z$1.union([z$1.object({
40033
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z$1.union([z$1.object({
40151
40034
  kind: z$1.literal("relative_to_start_date"),
40152
40035
  daysBeforeStart: z$1.number().int().positive()
40153
40036
  }), z$1.object({
40154
40037
  kind: z$1.literal("fixed_calendar_date"),
40155
40038
  dueAt: z$1.string().datetime()
40156
40039
  })]);
40157
- const bookingFlexibleBalanceConfigSchema = z$1.object({
40040
+ const bookingFlexibleBalanceConfigSchema$1 = z$1.object({
40158
40041
  upfrontAmountCents: z$1.number().int().min(0),
40159
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
40160
- depositRefundability: bookingDepositRefundPolicySchema
40042
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
40043
+ depositRefundability: bookingDepositRefundPolicySchema$1
40161
40044
  });
40162
40045
  const blockBookingPaymentCollectionOptionSchema = z$1.union([
40163
40046
  z$1.object({ kind: z$1.literal("upfront") }),
40164
40047
  z$1.object({ kind: z$1.literal("deferred_manual") }),
40165
40048
  z$1.object({
40166
40049
  kind: z$1.literal("instalment_plan"),
40167
- plan: bookingInstalmentPlanSchema
40050
+ plan: bookingInstalmentPlanSchema$1
40168
40051
  }),
40169
40052
  z$1.object({
40170
40053
  kind: z$1.literal("flexible_balance"),
40171
- config: bookingFlexibleBalanceConfigSchema
40054
+ config: bookingFlexibleBalanceConfigSchema$1
40172
40055
  })
40173
40056
  ]);
40174
40057
  const blockBookingPaymentTermsSchema = z$1.object({ allowedOptions: z$1.array(blockBookingPaymentCollectionOptionSchema).min(1) });
40058
+ const blockBookingConsentSchema = z$1.object({
40059
+ requirementId: z$1.string(),
40060
+ title: z$1.string(),
40061
+ agreement: RichTextDocSchema,
40062
+ checkboxLabel: z$1.string()
40063
+ });
40064
+ const bookingRequirementConsentFieldSchema = z$1.object({
40065
+ id: z$1.string(),
40066
+ label: z$1.string(),
40067
+ type: z$1.literal("booking_requirement_consent"),
40068
+ required: z$1.literal(true),
40069
+ agreement: RichTextDocSchema,
40070
+ checkboxLabel: z$1.string().min(1)
40071
+ });
40072
+ /** The two live public carriers for consent copy: Event data and appointment fields. */
40073
+ const bookingConsentCarrierSchema = z$1.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
40175
40074
  //#endregion
40176
40075
  //#region ../blocks/src/system/blocks/events/whole-series/pricing.ts
40177
40076
  function isSaleWindowOpen(option, now) {
@@ -40406,11 +40305,19 @@ const publicWholeSeriesOfferingSchema = z$1.object({
40406
40305
  title: z$1.string(),
40407
40306
  slug: z$1.string(),
40408
40307
  description: z$1.unknown().nullable(),
40308
+ deliveryMode: z$1.enum([
40309
+ "in_person",
40310
+ "online",
40311
+ "hybrid"
40312
+ ]),
40313
+ waitlistEnabled: z$1.boolean(),
40314
+ requireGuestDetails: z$1.boolean(),
40409
40315
  teamMembers: z$1.array(wholeSeriesTeamMemberSummarySchema).optional(),
40410
40316
  enrollmentOpen: z$1.boolean(),
40411
40317
  pricing: wholeSeriesPricingSchema,
40412
40318
  currency: z$1.string(),
40413
40319
  paymentTerms: blockBookingPaymentTermsSchema,
40320
+ consent: blockBookingConsentSchema.nullable(),
40414
40321
  enrollmentCapacity: z$1.number().nullable(),
40415
40322
  acceptsMemberships: z$1.boolean(),
40416
40323
  status: z$1.enum([
@@ -40520,7 +40427,7 @@ const mixedPriceDisplaySchema = z$1.object({
40520
40427
  paidToAmount: z$1.number(),
40521
40428
  currency: z$1.string()
40522
40429
  });
40523
- const publicCoursePriceDisplaySchema = z$1.discriminatedUnion("kind", [
40430
+ const publicWholeSeriesPriceDisplaySchema = z$1.discriminatedUnion("kind", [
40524
40431
  freePriceDisplaySchema,
40525
40432
  exactPriceDisplaySchema,
40526
40433
  fromPriceDisplaySchema,
@@ -40538,8 +40445,8 @@ z$1.discriminatedUnion("kind", [
40538
40445
  label: z$1.string()
40539
40446
  }),
40540
40447
  z$1.object({
40541
- kind: z$1.literal("course"),
40542
- display: publicCoursePriceDisplaySchema
40448
+ kind: z$1.literal("whole_series"),
40449
+ display: publicWholeSeriesPriceDisplaySchema
40543
40450
  })
40544
40451
  ]);
40545
40452
  const publicEventTicketTypePriceDisplaySchema = z$1.union([
@@ -40641,10 +40548,10 @@ const publicEventPricingSchema = z$1.discriminatedUnion("kind", [
40641
40548
  })
40642
40549
  }),
40643
40550
  z$1.object({
40644
- kind: z$1.literal("course"),
40551
+ kind: z$1.literal("whole_series"),
40645
40552
  display: z$1.object({
40646
- kind: z$1.literal("course"),
40647
- display: publicCoursePriceDisplaySchema
40553
+ kind: z$1.literal("whole_series"),
40554
+ display: publicWholeSeriesPriceDisplaySchema
40648
40555
  })
40649
40556
  }),
40650
40557
  z$1.object({
@@ -40728,6 +40635,7 @@ const publicEventSchema = z$1.object({
40728
40635
  timeZone: z$1.string(),
40729
40636
  pricing: publicEventPricingSchema,
40730
40637
  paymentTerms: blockBookingPaymentTermsSchema,
40638
+ consent: blockBookingConsentSchema.nullable(),
40731
40639
  accessRestriction: accessRestrictionSchema,
40732
40640
  allowedCategoryIds: z$1.array(z$1.string()),
40733
40641
  requireGuestDetails: z$1.boolean().optional(),
@@ -41086,7 +40994,8 @@ function resolveEventRegistrationScope(context) {
41086
40994
  };
41087
40995
  return { kind: "unscoped" };
41088
40996
  }
41089
- function applyEventRegistrationScope(events, scope) {
40997
+ function resolveEventRegistrationScopedEvents(events, context) {
40998
+ const scope = resolveEventRegistrationScope(context);
41090
40999
  switch (scope.kind) {
41091
41000
  case "occurrenceSeries":
41092
41001
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -41098,8 +41007,24 @@ function applyEventRegistrationScope(events, scope) {
41098
41007
  case "unscoped": return [...events];
41099
41008
  }
41100
41009
  }
41101
- function resolveEventRegistrationScopedEvents(events, context) {
41102
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
41010
+ //#endregion
41011
+ //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
41012
+ function planEventRegistrationScope(input) {
41013
+ const subject = input.subject;
41014
+ const selectedRunOffering = input.wholeSeriesOffering;
41015
+ if (subject?.kind !== "eventOffering" || !selectedRunOffering) return {
41016
+ kind: "context",
41017
+ events: resolveEventRegistrationScopedEvents(input.events, {
41018
+ occurrenceContext: input.occurrenceContext,
41019
+ subject
41020
+ })
41021
+ };
41022
+ if (!(selectedRunOffering.eventOfferingId === subject.eventOfferingId && subject.availableEventSeriesIds.some((seriesId) => seriesId === selectedRunOffering.eventSeriesId))) return { kind: "invalidSelectedRun" };
41023
+ return {
41024
+ kind: "selectedRun",
41025
+ events: input.events.filter((event) => event.seriesId === selectedRunOffering.eventSeriesId),
41026
+ offering: selectedRunOffering
41027
+ };
41103
41028
  }
41104
41029
  //#endregion
41105
41030
  //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
@@ -41175,14 +41100,14 @@ function isRecord$22(value) {
41175
41100
  }
41176
41101
  function isPublicEventPricing(value) {
41177
41102
  if (!isRecord$22(value) || typeof value.kind !== "string") return false;
41178
- return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "course" || value.kind === "external";
41103
+ return value.kind === "drop_in" || value.kind === "free_registration" || value.kind === "single_paid" || value.kind === "sliding_scale" || value.kind === "ticket_types" || value.kind === "whole_series" || value.kind === "external";
41179
41104
  }
41180
41105
  function isPublicEventTicketType(value) {
41181
41106
  return isRecord$22(value) && typeof value.id === "string";
41182
41107
  }
41183
41108
  function readTicketTypePriceDisplay(value, currency) {
41184
41109
  const display = readLegacyPriceDisplay(value, currency);
41185
- return display.kind === "course" || display.kind === "external" ? {
41110
+ return display.kind === "whole_series" || display.kind === "external" ? {
41186
41111
  kind: "unavailable",
41187
41112
  currency
41188
41113
  } : display;
@@ -41240,11 +41165,11 @@ function readLegacyPriceDisplay(value, currency) {
41240
41165
  kind: "unavailable",
41241
41166
  currency: displayCurrency
41242
41167
  };
41243
- case "course": return isRecord$22(value.display) ? {
41244
- kind: "course",
41168
+ case "whole_series": return isRecord$22(value.display) ? {
41169
+ kind: "whole_series",
41245
41170
  display: readCoursePriceDisplay(value.display, displayCurrency)
41246
41171
  } : {
41247
- kind: "course",
41172
+ kind: "whole_series",
41248
41173
  display: {
41249
41174
  kind: "unavailable",
41250
41175
  currency: displayCurrency
@@ -41367,7 +41292,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
41367
41292
  //#endregion
41368
41293
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
41369
41294
  function eventMatchesOccurrenceId(event, occurrenceId) {
41370
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
41295
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
41371
41296
  }
41372
41297
  function findPreSelectedEvent(input) {
41373
41298
  const occurrenceContext = input.occurrenceContext;
@@ -41393,12 +41318,127 @@ function toRegistrationEvent(event) {
41393
41318
  return {
41394
41319
  ...event,
41395
41320
  pricing: resolveRuntimeEventPricing(event),
41396
- publicEventId: event.id,
41397
- registrationOccurrenceId: event.occurrenceId
41321
+ selectionId: event.id,
41322
+ registrationSubject: {
41323
+ kind: "occurrence",
41324
+ occurrenceId: event.occurrenceId
41325
+ }
41398
41326
  };
41399
41327
  }
41400
41328
  function toRegistrationEvents(events) {
41401
- return events.map(toRegistrationEvent);
41329
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
41330
+ }
41331
+ function toWholeSeriesTicketType(option) {
41332
+ return {
41333
+ ...option,
41334
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
41335
+ attendanceScope: option.attendanceScope ?? void 0,
41336
+ availability: {
41337
+ kind: "available",
41338
+ remainingCapacity: option.capacityLimit
41339
+ }
41340
+ };
41341
+ }
41342
+ function toWholeSeriesPricing(offering) {
41343
+ const resolved = resolveWholeSeriesPricingState(offering);
41344
+ switch (offering.pricing.pricingStrategy) {
41345
+ case "free": return {
41346
+ kind: "free_registration",
41347
+ currency: offering.currency,
41348
+ display: {
41349
+ kind: "free",
41350
+ currency: offering.currency
41351
+ }
41352
+ };
41353
+ case "single": {
41354
+ const amount = offering.pricing.singlePriceAmount ?? 0;
41355
+ return amount === 0 ? {
41356
+ kind: "free_registration",
41357
+ currency: offering.currency,
41358
+ display: {
41359
+ kind: "free",
41360
+ currency: offering.currency
41361
+ }
41362
+ } : {
41363
+ kind: "single_paid",
41364
+ amount,
41365
+ currency: offering.currency,
41366
+ display: {
41367
+ kind: "exact",
41368
+ amount,
41369
+ currency: offering.currency
41370
+ }
41371
+ };
41372
+ }
41373
+ case "tiered": return {
41374
+ kind: "ticket_types",
41375
+ currency: offering.currency,
41376
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
41377
+ display: resolved.display
41378
+ };
41379
+ case "sliding_scale": return {
41380
+ kind: "sliding_scale",
41381
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41382
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41383
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
41384
+ currency: offering.currency,
41385
+ display: {
41386
+ kind: "range",
41387
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41388
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41389
+ currency: offering.currency
41390
+ }
41391
+ };
41392
+ }
41393
+ }
41394
+ function toAttendanceModes(offering) {
41395
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
41396
+ mode,
41397
+ capacity: offering.enrollmentCapacity,
41398
+ registeredCount: offering.enrolledCount,
41399
+ availableSpots: offering.availableSpots,
41400
+ waitlistEnabled: offering.waitlistEnabled
41401
+ }));
41402
+ }
41403
+ function toWholeSeriesRegistrationEvent(offering) {
41404
+ const firstSession = offering.sessions[0];
41405
+ const lastSession = offering.sessions[offering.sessions.length - 1];
41406
+ return {
41407
+ selectionId: offering.eventSeriesId,
41408
+ registrationSubject: {
41409
+ kind: "wholeSeries",
41410
+ eventSeriesId: offering.eventSeriesId,
41411
+ sessions: offering.sessions
41412
+ },
41413
+ seriesId: offering.eventSeriesId,
41414
+ title: offering.title,
41415
+ startsAt: firstSession?.startsAt ?? "",
41416
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
41417
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
41418
+ kind: "closed",
41419
+ reason: "enrollment_closed"
41420
+ },
41421
+ deliveryMode: offering.deliveryMode,
41422
+ attendanceModes: toAttendanceModes(offering),
41423
+ capacity: offering.enrollmentCapacity,
41424
+ registeredCount: offering.enrolledCount,
41425
+ availableSpots: offering.availableSpots,
41426
+ waitlistEnabled: offering.waitlistEnabled,
41427
+ venue: offering.venue ? {
41428
+ ...offering.venue,
41429
+ location: null
41430
+ } : null,
41431
+ eventCategory: null,
41432
+ teamMembers: offering.teamMembers,
41433
+ status: offering.status,
41434
+ timeZone: firstSession?.timeZone ?? "UTC",
41435
+ pricing: toWholeSeriesPricing(offering),
41436
+ paymentTerms: offering.paymentTerms,
41437
+ consent: offering.consent,
41438
+ requireGuestDetails: offering.requireGuestDetails,
41439
+ acceptsPasses: false,
41440
+ acceptsMemberships: offering.acceptsMemberships
41441
+ };
41402
41442
  }
41403
41443
  //#endregion
41404
41444
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -41424,11 +41464,7 @@ const eventRegistrationHydrationSchemaShape = {
41424
41464
  maxTickets: z$1.string().optional(),
41425
41465
  showVenue: z$1.boolean().optional(),
41426
41466
  showCapacity: z$1.boolean().optional(),
41427
- showSessions: z$1.boolean().optional(),
41428
- showPrice: z$1.boolean().optional(),
41429
41467
  successMessage: z$1.string().optional(),
41430
- waitlistMessage: z$1.string().optional(),
41431
- membershipMessage: z$1.string().optional(),
41432
41468
  buttonVariant: registrationButtonVariantSchema.optional(),
41433
41469
  overlayEnabled: z$1.boolean().optional(),
41434
41470
  spamProtectionEnabled: z$1.boolean().optional(),
@@ -41498,6 +41534,15 @@ function resolveWholeSeriesOffering(source) {
41498
41534
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
41499
41535
  }
41500
41536
  function buildEventRegistrationShellStepLabels(source) {
41537
+ const selectedOffering = resolveWholeSeriesOffering(source);
41538
+ if (selectedOffering) {
41539
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
41540
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
41541
+ eligibility: null,
41542
+ selectedTicketType: null,
41543
+ event: selectedEvent
41544
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
41545
+ }
41501
41546
  const scopedEvents = scopeEventRegistrationEvents(source);
41502
41547
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
41503
41548
  const preSelectedEvent = findPreSelectedEvent({
@@ -41512,10 +41557,13 @@ function buildEventRegistrationShellStepLabels(source) {
41512
41557
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
41513
41558
  }
41514
41559
  function scopeEventRegistrationEvents(source) {
41515
- return resolveEventRegistrationScopedEvents(toRegistrationEvents(source.events ?? []), {
41560
+ const scope = planEventRegistrationScope({
41561
+ events: toRegistrationEvents(source.events ?? []),
41562
+ wholeSeriesOffering: source.wholeSeriesOffering,
41516
41563
  occurrenceContext: source.occurrenceContext,
41517
41564
  subject: source.subject
41518
41565
  });
41566
+ return scope.kind === "invalidSelectedRun" ? [] : scope.events;
41519
41567
  }
41520
41568
  function shellLabelForRegistrationStep(step, events) {
41521
41569
  switch (step) {
@@ -41558,11 +41606,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41558
41606
  maxTickets: source.maxTickets ?? void 0,
41559
41607
  showVenue: source.showVenue,
41560
41608
  showCapacity: source.showCapacity,
41561
- showSessions: source.showSessions,
41562
- showPrice: source.showPrice,
41563
41609
  successMessage: source.successMessage,
41564
- waitlistMessage: source.waitlistMessage,
41565
- membershipMessage: source.membershipMessage,
41566
41610
  buttonVariant: source.buttonVariant,
41567
41611
  overlayEnabled: source.overlayEnabled,
41568
41612
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -41692,24 +41736,6 @@ const eventRegistrationBlockDefinition = {
41692
41736
  defaultValue: true,
41693
41737
  ui: { intent: "display" }
41694
41738
  },
41695
- {
41696
- id: "showSessions",
41697
- type: "boolean",
41698
- label: "Show complete schedule",
41699
- description: "Display every session for whole-series registrations",
41700
- required: false,
41701
- defaultValue: true,
41702
- ui: { intent: "display" }
41703
- },
41704
- {
41705
- id: "showPrice",
41706
- type: "boolean",
41707
- label: "Show price",
41708
- description: "Display the whole-series price",
41709
- required: false,
41710
- defaultValue: true,
41711
- ui: { intent: "display" }
41712
- },
41713
41739
  {
41714
41740
  id: "successMessage",
41715
41741
  type: "text",
@@ -41720,26 +41746,6 @@ const eventRegistrationBlockDefinition = {
41720
41746
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
41721
41747
  maxLength: 500
41722
41748
  },
41723
- {
41724
- id: "waitlistMessage",
41725
- type: "text",
41726
- label: "Waitlist message",
41727
- description: "Message shown after joining a whole-series waitlist",
41728
- required: false,
41729
- multiline: true,
41730
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
41731
- maxLength: 500
41732
- },
41733
- {
41734
- id: "membershipMessage",
41735
- type: "text",
41736
- label: "Membership registration message",
41737
- description: "Message shown when a whole-series place is covered by membership",
41738
- required: false,
41739
- multiline: true,
41740
- defaultValue: "Registered using your membership. Check your email for session details.",
41741
- maxLength: 500
41742
- },
41743
41749
  {
41744
41750
  id: "buttonText",
41745
41751
  type: "text",
@@ -41771,11 +41777,7 @@ const eventRegistrationBlockDefinition = {
41771
41777
  } },
41772
41778
  showVenue: { $bind: { from: "content.showVenue" } },
41773
41779
  showCapacity: { $bind: { from: "content.showCapacity" } },
41774
- showSessions: { $bind: { from: "content.showSessions" } },
41775
- showPrice: { $bind: { from: "content.showPrice" } },
41776
41780
  successMessage: { $bind: { from: "content.successMessage" } },
41777
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
41778
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
41779
41781
  buttonText: { $bind: {
41780
41782
  from: "content.buttonText",
41781
41783
  fallback: "Complete Registration"
@@ -41892,267 +41894,6 @@ const eventRegistrationBlockDefinition = {
41892
41894
  }
41893
41895
  };
41894
41896
  //#endregion
41895
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
41896
- const courseRegistrationHydrationSchemaShape = {
41897
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
41898
- courses: z$1.array(publicWholeSeriesOfferingSchema).nullable().optional(),
41899
- showSessions: z$1.boolean().optional(),
41900
- showPrice: z$1.boolean().optional(),
41901
- showCapacity: z$1.boolean().optional(),
41902
- showVenue: z$1.boolean().optional(),
41903
- successMessage: z$1.string().optional(),
41904
- waitlistMessage: z$1.string().optional(),
41905
- membershipMessage: z$1.string().optional(),
41906
- buttonVariant: registrationButtonVariantSchema.optional()
41907
- };
41908
- const courseRegistrationSourceSchema = z$1.object({
41909
- siteId: z$1.string().optional(),
41910
- apiBaseUrl: z$1.string().optional(),
41911
- portalToken: z$1.string().nullable().optional(),
41912
- ...courseRegistrationHydrationSchemaShape,
41913
- className: z$1.string().nullable().optional(),
41914
- buttonText: z$1.string().nullable().optional(),
41915
- stage: previewStageSchema.optional()
41916
- });
41917
- const courseRegistrationDisplaySchema = z$1.object({
41918
- kind: z$1.literal("course-registration"),
41919
- state: z$1.literal("shell"),
41920
- className: z$1.string().nullable(),
41921
- summaryButtonText: z$1.string()
41922
- });
41923
- const courseRegistrationHydrationSchema = z$1.object(courseRegistrationHydrationSchemaShape);
41924
- const courseRegistrationRenderSchema = z$1.object({
41925
- display: courseRegistrationDisplaySchema,
41926
- hydration: courseRegistrationHydrationSchema
41927
- });
41928
- z$1.object({
41929
- siteId: z$1.string().optional(),
41930
- apiBaseUrl: z$1.string().optional(),
41931
- portalToken: z$1.string().nullable().optional(),
41932
- stage: previewStageSchema.optional()
41933
- });
41934
- function buildCourseRegistrationDisplay(source) {
41935
- return {
41936
- kind: "course-registration",
41937
- state: "shell",
41938
- className: source.className ?? null,
41939
- summaryButtonText: source.buttonText?.trim() || "Sign up"
41940
- };
41941
- }
41942
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41943
- kind: "client-owned",
41944
- contracts: {
41945
- source: createZodCodec(courseRegistrationSourceSchema),
41946
- render: createZodCodec(courseRegistrationRenderSchema)
41947
- },
41948
- buildRender: (source) => ({
41949
- display: buildCourseRegistrationDisplay(source),
41950
- hydration: {
41951
- subject: source.subject ?? null,
41952
- courses: source.courses ?? null,
41953
- showSessions: source.showSessions,
41954
- showPrice: source.showPrice,
41955
- showCapacity: source.showCapacity,
41956
- showVenue: source.showVenue,
41957
- successMessage: source.successMessage,
41958
- waitlistMessage: source.waitlistMessage,
41959
- membershipMessage: source.membershipMessage,
41960
- buttonVariant: source.buttonVariant
41961
- }
41962
- })
41963
- });
41964
- function buildCourseRegistrationInteractiveIslandProps(props) {
41965
- return buildInteractiveIslandProps({
41966
- runtime: courseRegistrationBlockRuntime,
41967
- mode: "course-registration",
41968
- meta: {
41969
- siteId: props.siteId,
41970
- apiBaseUrl: props.apiBaseUrl,
41971
- portalToken: props.portalToken,
41972
- stage: props.stage
41973
- },
41974
- source: props
41975
- });
41976
- }
41977
- const courseRegistrationBlockDefinition = {
41978
- manifest: createBlockManifest({
41979
- id: "block.course-registration",
41980
- version: "1.0.0",
41981
- title: "Course Registration",
41982
- titleSource: "heading",
41983
- description: "Enrollment form for multi-session courses",
41984
- category: "interactive",
41985
- contentSource: { kind: "inline" },
41986
- tags: [
41987
- "courses",
41988
- "enrollment",
41989
- "booking",
41990
- "form",
41991
- "signup",
41992
- "education"
41993
- ],
41994
- icon: "GraduationCap",
41995
- styleTokens: {
41996
- background: "surface",
41997
- typography: "body",
41998
- spacing: "md"
41999
- },
42000
- behaviours: {
42001
- supportsThemeSwitching: true,
42002
- inlineEditing: false,
42003
- animation: false,
42004
- paletteHidden: false
42005
- },
42006
- additionalFields: [
42007
- {
42008
- id: "heading",
42009
- type: "text",
42010
- label: "Heading",
42011
- description: "Main heading for the registration form",
42012
- required: false,
42013
- multiline: false,
42014
- defaultValue: "Sign up"
42015
- },
42016
- {
42017
- id: "description",
42018
- type: "richText",
42019
- label: "Description",
42020
- description: "Optional introductory text",
42021
- required: false
42022
- },
42023
- {
42024
- id: "showSessions",
42025
- type: "boolean",
42026
- label: "Show sessions",
42027
- description: "Display the list of course sessions",
42028
- required: false,
42029
- defaultValue: true,
42030
- ui: { intent: "display" }
42031
- },
42032
- {
42033
- id: "showPrice",
42034
- type: "boolean",
42035
- label: "Show price",
42036
- description: "Display the course price",
42037
- required: false,
42038
- defaultValue: true,
42039
- ui: { intent: "display" }
42040
- },
42041
- {
42042
- id: "showCapacity",
42043
- type: "boolean",
42044
- label: "Show available spots",
42045
- description: "Display remaining enrollment capacity",
42046
- required: false,
42047
- defaultValue: true,
42048
- ui: { intent: "display" }
42049
- },
42050
- {
42051
- id: "showVenue",
42052
- type: "boolean",
42053
- label: "Show venue",
42054
- description: "Display venue information",
42055
- required: false,
42056
- defaultValue: true,
42057
- ui: { intent: "display" }
42058
- },
42059
- {
42060
- id: "successMessage",
42061
- type: "text",
42062
- label: "Success message",
42063
- description: "Message shown after successful enrollment",
42064
- required: false,
42065
- multiline: true,
42066
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
42067
- maxLength: 500
42068
- },
42069
- {
42070
- id: "waitlistMessage",
42071
- type: "text",
42072
- label: "Waitlist message",
42073
- description: "Message when added to waitlist",
42074
- required: false,
42075
- multiline: true,
42076
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
42077
- maxLength: 500
42078
- },
42079
- {
42080
- id: "membershipMessage",
42081
- type: "text",
42082
- label: "Membership enrollment message",
42083
- description: "Message when enrolled using a membership",
42084
- required: false,
42085
- multiline: true,
42086
- defaultValue: "Enrolled using your membership! Check your email for session details.",
42087
- maxLength: 500
42088
- },
42089
- {
42090
- id: "buttonText",
42091
- type: "text",
42092
- label: "Submit button text",
42093
- description: "Text for the enrollment submit button",
42094
- required: false,
42095
- multiline: false,
42096
- defaultValue: "Sign up",
42097
- maxLength: 40
42098
- },
42099
- createButtonVariantField()
42100
- ],
42101
- layout: [styledSection({
42102
- baseClass: "",
42103
- spacing: "spacious",
42104
- children: sectionContainer([
42105
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
42106
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
42107
- courseRegistration(withApiBindings({
42108
- subject: { $bind: {
42109
- from: "$root.subject",
42110
- fallback: null
42111
- } },
42112
- portalToken: { $bind: {
42113
- from: "$root.portalToken",
42114
- fallback: null
42115
- } },
42116
- showSessions: { $bind: { from: "content.showSessions" } },
42117
- showPrice: { $bind: { from: "content.showPrice" } },
42118
- showCapacity: { $bind: { from: "content.showCapacity" } },
42119
- showVenue: { $bind: { from: "content.showVenue" } },
42120
- successMessage: { $bind: { from: "content.successMessage" } },
42121
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
42122
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
42123
- buttonText: { $bind: {
42124
- from: "content.buttonText",
42125
- fallback: "Sign up"
42126
- } },
42127
- buttonVariant: { $bind: {
42128
- from: "content.buttonVariant",
42129
- fallback: "primary"
42130
- } },
42131
- courses: { $bind: { from: "data.courses" } },
42132
- stage: { $bind: {
42133
- from: "$root.previewStage",
42134
- fallback: "published"
42135
- } }
42136
- }))
42137
- ], { gap: "lg" })
42138
- })]
42139
- }),
42140
- runtime: courseRegistrationBlockRuntime,
42141
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42142
- dataLoaders: { courses: {
42143
- endpoint: "listPublicWholeSeriesOfferings",
42144
- params: {
42145
- siteId: { $bind: { from: "$root.siteId" } },
42146
- limit: "50",
42147
- stage: { $bind: {
42148
- from: "$root.previewStage",
42149
- fallback: "published"
42150
- } }
42151
- },
42152
- mode: "server"
42153
- } }
42154
- };
42155
- //#endregion
42156
41897
  //#region ../blocks/src/system/blocks/event-details.ts
42157
41898
  /**
42158
41899
  * Event Details Block
@@ -42399,200 +42140,6 @@ const eventDetailsBlockDefinition = {
42399
42140
  mode: "server"
42400
42141
  } }
42401
42142
  };
42402
- const courseDetailsBlockDefinition = {
42403
- manifest: createBlockManifest({
42404
- id: "block.course-details",
42405
- version: "1.0.0",
42406
- title: "Course Details",
42407
- titleSource: "heading",
42408
- description: "Schedule, venue, price, and enrollment status for a course",
42409
- category: "content",
42410
- contentSource: { kind: "entries" },
42411
- tags: [
42412
- "courses",
42413
- "schedule",
42414
- "sessions",
42415
- "venue",
42416
- "pricing"
42417
- ],
42418
- icon: "GraduationCap",
42419
- styleTokens: {
42420
- background: "surface",
42421
- typography: "body",
42422
- spacing: "md"
42423
- },
42424
- behaviours: {
42425
- supportsThemeSwitching: true,
42426
- inlineEditing: false,
42427
- animation: false,
42428
- paletteHidden: false
42429
- },
42430
- additionalFields: [
42431
- {
42432
- id: "heading",
42433
- type: "text",
42434
- label: "Heading",
42435
- description: "Optional heading shown above course details",
42436
- required: false,
42437
- multiline: false,
42438
- defaultValue: "Course details"
42439
- },
42440
- {
42441
- id: "showTitle",
42442
- type: "boolean",
42443
- label: "Show course title",
42444
- required: false,
42445
- defaultValue: false,
42446
- ui: { intent: "display" }
42447
- },
42448
- {
42449
- id: "showDescription",
42450
- type: "boolean",
42451
- label: "Show course description",
42452
- description: "Render the course description from the bookings course record",
42453
- required: false,
42454
- defaultValue: false,
42455
- ui: { intent: "display" }
42456
- },
42457
- {
42458
- id: "showSessions",
42459
- type: "boolean",
42460
- label: "Show sessions",
42461
- required: false,
42462
- defaultValue: true,
42463
- ui: { intent: "display" }
42464
- },
42465
- {
42466
- id: "sessionsLimit",
42467
- type: "select",
42468
- label: "Sessions limit",
42469
- required: false,
42470
- multiple: false,
42471
- defaultValue: "10",
42472
- options: [
42473
- {
42474
- value: "3",
42475
- label: "3 sessions"
42476
- },
42477
- {
42478
- value: "5",
42479
- label: "5 sessions"
42480
- },
42481
- {
42482
- value: "10",
42483
- label: "10 sessions"
42484
- },
42485
- {
42486
- value: "all",
42487
- label: "All sessions"
42488
- }
42489
- ],
42490
- ui: { intent: "display" }
42491
- },
42492
- {
42493
- id: "showVenue",
42494
- type: "boolean",
42495
- label: "Show venue",
42496
- required: false,
42497
- defaultValue: true,
42498
- ui: { intent: "display" }
42499
- },
42500
- {
42501
- id: "showPrice",
42502
- type: "boolean",
42503
- label: "Show price",
42504
- required: false,
42505
- defaultValue: true,
42506
- ui: { intent: "display" }
42507
- },
42508
- {
42509
- id: "showCapacity",
42510
- type: "boolean",
42511
- label: "Show capacity",
42512
- required: false,
42513
- defaultValue: true,
42514
- ui: { intent: "display" }
42515
- },
42516
- {
42517
- id: "showEnrollmentStatus",
42518
- type: "boolean",
42519
- label: "Show enrollment status",
42520
- required: false,
42521
- defaultValue: true,
42522
- ui: { intent: "display" }
42523
- },
42524
- {
42525
- id: "showMembershipNote",
42526
- type: "boolean",
42527
- label: "Show membership note",
42528
- description: "Indicate when memberships can be used for free enrollment",
42529
- required: false,
42530
- defaultValue: true,
42531
- ui: { intent: "display" }
42532
- }
42533
- ],
42534
- layout: [styledSection({
42535
- baseClass: "",
42536
- spacing: "spacious",
42537
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
42538
- subject: { $bind: {
42539
- from: "$root.subject",
42540
- fallback: null
42541
- } },
42542
- courses: { $bind: { from: "data.courses" } },
42543
- showTitle: { $bind: {
42544
- from: "content.showTitle",
42545
- fallback: false
42546
- } },
42547
- showDescription: { $bind: {
42548
- from: "content.showDescription",
42549
- fallback: false
42550
- } },
42551
- showSessions: { $bind: {
42552
- from: "content.showSessions",
42553
- fallback: true
42554
- } },
42555
- sessionsLimit: { $bind: {
42556
- from: "content.sessionsLimit",
42557
- fallback: "10"
42558
- } },
42559
- showVenue: { $bind: {
42560
- from: "content.showVenue",
42561
- fallback: true
42562
- } },
42563
- showPrice: { $bind: {
42564
- from: "content.showPrice",
42565
- fallback: true
42566
- } },
42567
- showCapacity: { $bind: {
42568
- from: "content.showCapacity",
42569
- fallback: true
42570
- } },
42571
- showEnrollmentStatus: { $bind: {
42572
- from: "content.showEnrollmentStatus",
42573
- fallback: true
42574
- } },
42575
- showMembershipNote: { $bind: {
42576
- from: "content.showMembershipNote",
42577
- fallback: true
42578
- } }
42579
- })], { gap: "lg" })
42580
- })]
42581
- }),
42582
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42583
- dataLoaders: { courses: {
42584
- endpoint: "listPublicWholeSeriesOfferings",
42585
- params: {
42586
- siteId: { $bind: { from: "$root.siteId" } },
42587
- limit: "50",
42588
- stage: { $bind: {
42589
- from: "$root.previewStage",
42590
- fallback: "published"
42591
- } }
42592
- },
42593
- mode: "server"
42594
- } }
42595
- };
42596
42143
  const eventSpotlightBlockDefinition = {
42597
42144
  manifest: createBlockManifest({
42598
42145
  id: "block.event-spotlight",
@@ -45122,7 +44669,7 @@ const EmptyState = ({ message = "No upcoming events scheduled.", className, hasA
45122
44669
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
45123
44670
  /**
45124
44671
  * Shared tile content for displaying date and time range.
45125
- * Used by event-details "Other dates" and course-details "Sessions".
44672
+ * Used by event-details "Other dates".
45126
44673
  */
45127
44674
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
45128
44675
  const { date, timeRange } = formatEventDateParts({
@@ -47546,6 +47093,7 @@ function normalizeGroupPresentation(value) {
47546
47093
  function resolveAutoCtaPath(source, routes) {
47547
47094
  const routeByNormalizedPath = /* @__PURE__ */ new Map();
47548
47095
  for (const route of routes ?? []) {
47096
+ if (route.kind === "pageSurface") continue;
47549
47097
  const normalized = normalizeRoutePath(route.path);
47550
47098
  if (normalized && !routeByNormalizedPath.has(normalized)) routeByNormalizedPath.set(normalized, route.path);
47551
47099
  }
@@ -47596,7 +47144,7 @@ const publicRouteCandidatesSchema = z$1.object({ routes: z$1.array(z$1.object({
47596
47144
  entityId: z$1.string(),
47597
47145
  path: z$1.string(),
47598
47146
  title: z$1.string(),
47599
- kind: z$1.enum(["page", "content"]),
47147
+ kind: z$1.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
47600
47148
  contentTypeKey: z$1.string().nullable().optional()
47601
47149
  })) });
47602
47150
  const groupOverrideFields = [
@@ -47873,7 +47421,7 @@ const offeringsPreviewManifest = createBlockManifest({
47873
47421
  fallback: "published"
47874
47422
  } },
47875
47423
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
47876
- courses: { $bind: { from: "data.courses" } },
47424
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
47877
47425
  ...offeringsPreviewEventDataBindings
47878
47426
  })
47879
47427
  ], { gap: "lg" }),
@@ -47890,7 +47438,7 @@ const offeringsPreviewBlockDefinition = {
47890
47438
  dataSchemas: {
47891
47439
  ...offeringsPreviewEventDataSchemas,
47892
47440
  routeCandidates: publicRouteCandidatesSchema.optional(),
47893
- courses: publicWholeSeriesOfferingsArraySchema.optional()
47441
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
47894
47442
  },
47895
47443
  dataLoaders: {
47896
47444
  ...offeringsPreviewEventDataLoaders,
@@ -47899,7 +47447,7 @@ const offeringsPreviewBlockDefinition = {
47899
47447
  params: {},
47900
47448
  mode: "server"
47901
47449
  },
47902
- courses: {
47450
+ wholeSeriesOfferings: {
47903
47451
  endpoint: "listPublicWholeSeriesOfferings",
47904
47452
  params: {
47905
47453
  siteId: { $bind: { from: "$root.siteId" } },
@@ -53001,22 +52549,6 @@ const systemBlockDefinitions = [
53001
52549
  weight: "standard"
53002
52550
  })]
53003
52551
  })),
53004
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
53005
- flow: conversionFlow,
53006
- layoutProfiles: [layoutProfile({
53007
- variantKey: "default",
53008
- family: "form",
53009
- weight: "standard"
53010
- })]
53011
- })),
53012
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
53013
- flow: offeringsFlow,
53014
- layoutProfiles: [layoutProfile({
53015
- variantKey: "default",
53016
- family: "stack",
53017
- weight: "standard"
53018
- })]
53019
- })),
53020
52552
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
53021
52553
  flow: offeringsFlow,
53022
52554
  layoutProfiles: [layoutProfile({
@@ -54008,7 +53540,7 @@ function normalizeRel(target, rel) {
54008
53540
  tokens.add("noreferrer");
54009
53541
  return Array.from(tokens).join(" ");
54010
53542
  }
54011
- function renderMarks(text, marks, key) {
53543
+ function renderMarks(text, marks, key, linkTarget) {
54012
53544
  if (!marks || marks.length === 0) return text;
54013
53545
  return marks.reduce((acc, mark) => {
54014
53546
  switch (mark.type) {
@@ -54021,7 +53553,8 @@ function renderMarks(text, marks, key) {
54021
53553
  const attrs = mark.attrs ?? {};
54022
53554
  const href = sanitizeHref(attrs.href);
54023
53555
  if (!href) return acc;
54024
- const target = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : void 0;
53556
+ const storedTarget = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : void 0;
53557
+ const target = linkTarget === "new-tab" ? "_blank" : storedTarget;
54025
53558
  return /* @__PURE__ */ jsx("a", {
54026
53559
  href,
54027
53560
  target,
@@ -54033,14 +53566,14 @@ function renderMarks(text, marks, key) {
54033
53566
  }
54034
53567
  }, text);
54035
53568
  }
54036
- function renderDoc(node, key, imageResolveContext) {
53569
+ function renderDoc(node, key, imageResolveContext, linkTarget) {
54037
53570
  if (!node || !node.type) return null;
54038
- const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext));
53571
+ const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext, linkTarget));
54039
53572
  switch (node.type) {
54040
53573
  case "doc": return /* @__PURE__ */ jsx(Fragment, { children });
54041
53574
  case "paragraph":
54042
53575
  if (!children && !node.text) return /* @__PURE__ */ jsx("p", {}, key);
54043
- return /* @__PURE__ */ jsx("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key) }, key);
53576
+ return /* @__PURE__ */ jsx("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key, linkTarget) }, key);
54044
53577
  case "heading": {
54045
53578
  const headingTag = `h${Math.min(Math.max(node.attrs?.level ?? 2, 1), 6)}`;
54046
53579
  return React.createElement(headingTag, { key }, children);
@@ -54082,14 +53615,14 @@ function renderDoc(node, key, imageResolveContext) {
54082
53615
  decoding: "async"
54083
53616
  }, key);
54084
53617
  }
54085
- case "text": return renderMarks(node.text ?? "", node.marks, key);
53618
+ case "text": return renderMarks(node.text ?? "", node.marks, key, linkTarget);
54086
53619
  default: return null;
54087
53620
  }
54088
53621
  }
54089
53622
  const DEFAULT_RICH_TEXT_CLASS = "rb-prose rb-max-w-none";
54090
- function RichText$1({ as: Comp = "div", className, doc, path }) {
53623
+ function RichText$1({ as: Comp = "div", className, doc, path, linkTarget = "stored" }) {
54091
53624
  const imageResolveContext = getCurrentResolveImageUrlContext() ?? null;
54092
- const content = doc ? renderDoc(doc, "doc", imageResolveContext) : null;
53625
+ const content = doc ? renderDoc(doc, "doc", imageResolveContext, linkTarget) : null;
54093
53626
  const dataAttributes = path ? { "data-builder-richtext": path } : void 0;
54094
53627
  return /* @__PURE__ */ jsx(Comp, {
54095
53628
  className: className?.trim() || DEFAULT_RICH_TEXT_CLASS,
@@ -55445,7 +54978,6 @@ function readBookingFieldType(value) {
55445
54978
  case "select":
55446
54979
  case "radio":
55447
54980
  case "checkbox":
55448
- case "booking_requirement_consent":
55449
54981
  case "tel":
55450
54982
  case "url":
55451
54983
  case "number":
@@ -55480,7 +55012,7 @@ function normalizeBookingSettings(value) {
55480
55012
  };
55481
55013
  }
55482
55014
  function isBookingFormService(value) {
55483
- return isRecord$13(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
55015
+ return isRecord$13(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string" && (value.consent === void 0 || blockBookingConsentSchema.safeParse(value.consent).success);
55484
55016
  }
55485
55017
  function readNonEmptyString(value) {
55486
55018
  if (typeof value !== "string") return null;
@@ -55505,6 +55037,15 @@ const bookingFieldOptionSchema = z$1.object({
55505
55037
  value: z$1.string(),
55506
55038
  label: z$1.string()
55507
55039
  });
55040
+ const standardBookingFieldRules = {
55041
+ options: z$1.array(bookingFieldOptionSchema).optional(),
55042
+ multiple: z$1.boolean().optional(),
55043
+ minLength: z$1.number().optional(),
55044
+ maxLength: z$1.number().optional(),
55045
+ pattern: z$1.string().optional(),
55046
+ min: z$1.number().optional(),
55047
+ max: z$1.number().optional()
55048
+ };
55508
55049
  const bookingFieldSchema = z$1.object({
55509
55050
  id: z$1.string(),
55510
55051
  label: z$1.string(),
@@ -55515,7 +55056,6 @@ const bookingFieldSchema = z$1.object({
55515
55056
  "select",
55516
55057
  "radio",
55517
55058
  "checkbox",
55518
- "booking_requirement_consent",
55519
55059
  "tel",
55520
55060
  "url",
55521
55061
  "number",
@@ -55525,13 +55065,7 @@ const bookingFieldSchema = z$1.object({
55525
55065
  required: z$1.boolean().optional(),
55526
55066
  placeholder: z$1.string().optional(),
55527
55067
  helpText: z$1.string().optional(),
55528
- options: z$1.array(bookingFieldOptionSchema).optional(),
55529
- multiple: z$1.boolean().optional(),
55530
- minLength: z$1.number().optional(),
55531
- maxLength: z$1.number().optional(),
55532
- pattern: z$1.string().optional(),
55533
- min: z$1.number().optional(),
55534
- max: z$1.number().optional()
55068
+ ...standardBookingFieldRules
55535
55069
  });
55536
55070
  const bookingSettingsSchema = z$1.object({
55537
55071
  type: z$1.literal("booking"),
@@ -55574,7 +55108,8 @@ const bookingServiceSchema = z$1.object({
55574
55108
  priceAmount: z$1.number().nullable().optional(),
55575
55109
  priceCurrency: z$1.string().nullable().optional(),
55576
55110
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
55577
- paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional()
55111
+ paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional(),
55112
+ consent: blockBookingConsentSchema.optional()
55578
55113
  });
55579
55114
  const bookingServicesSourceSchema = z$1.union([
55580
55115
  z$1.array(bookingServiceSchema),
@@ -55840,7 +55375,7 @@ function emptySelection(timeZone) {
55840
55375
  timeZone
55841
55376
  };
55842
55377
  }
55843
- function parseLimit$1(value, fallback) {
55378
+ function parseLimit(value, fallback) {
55844
55379
  if (value === "all") return Number.MAX_SAFE_INTEGER;
55845
55380
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
55846
55381
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -55923,7 +55458,7 @@ function selectEventDetails(args) {
55923
55458
  subject: args.subject
55924
55459
  }));
55925
55460
  const occurrenceContext = args.occurrenceContext ?? null;
55926
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
55461
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
55927
55462
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
55928
55463
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
55929
55464
  if (!candidate) return emptySelection(timeZone);
@@ -55999,8 +55534,8 @@ function resolveEventDetailsPresentation(input) {
55999
55534
  };
56000
55535
  }
56001
55536
  //#endregion
56002
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
56003
- function CoursePricingDisplay({ pricing, acceptedItems }) {
55537
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
55538
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
56004
55539
  return /* @__PURE__ */ jsxs("div", {
56005
55540
  className: "rb-mt-6",
56006
55541
  children: [
@@ -56012,7 +55547,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
56012
55547
  className: "rb-flex rb-flex-col rb-gap-2",
56013
55548
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56014
55549
  option.name,
56015
- ": ",
55550
+ ":",
55551
+ " ",
56016
55552
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56017
55553
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
56018
55554
  className: "rb-caption status-muted",
@@ -56033,7 +55569,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
56033
55569
  const label = preview.publicLabel.trim() || "Discount";
56034
55570
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
56035
55571
  }
56036
- function TeamMemberName$1({ name, profilePath }) {
55572
+ function TeamMemberName({ name, profilePath }) {
56037
55573
  return profilePath ? /* @__PURE__ */ jsx("a", {
56038
55574
  href: profilePath,
56039
55575
  className: "rb-hover-opacity-80",
@@ -56070,7 +55606,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
56070
55606
  children: "No registration required - just show up"
56071
55607
  })]
56072
55608
  });
56073
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
55609
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
56074
55610
  pricing: coursePricing,
56075
55611
  acceptedItems: [...acceptedItems]
56076
55612
  });
@@ -56145,7 +55681,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
56145
55681
  children: "With"
56146
55682
  }), /* @__PURE__ */ jsx("div", {
56147
55683
  className: "rb-flex rb-flex-col rb-gap-3",
56148
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
55684
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56149
55685
  name: member.name,
56150
55686
  profilePath: member.profilePath
56151
55687
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -56424,352 +55960,6 @@ function LocationMapSSR(props) {
56424
55960
  });
56425
55961
  }
56426
55962
  //#endregion
56427
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
56428
- /**
56429
- * Resolves native run-page ownership without falling back to entry or slug
56430
- * coincidence when a page-surface subject is present but invalid.
56431
- */
56432
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
56433
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
56434
- const parsed = parseEventPageSurfaceSubject(subjectValue);
56435
- if (!parsed.ok) return {
56436
- kind: "unsupported",
56437
- reason: parsed.error.kind
56438
- };
56439
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
56440
- const allowedSeriesIds = new Set(seriesIds);
56441
- return {
56442
- kind: "scoped",
56443
- subject: parsed.value,
56444
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
56445
- };
56446
- }
56447
- function eventSeriesIdsForSubject(subject) {
56448
- switch (subject.kind) {
56449
- case "eventSeries": return [subject.eventSeriesId];
56450
- case "eventOffering": return subject.availableEventSeriesIds;
56451
- default: return assertNever$24(subject);
56452
- }
56453
- }
56454
- //#endregion
56455
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
56456
- /** Temporary Course-block adapter over canonical Event run scoping. */
56457
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
56458
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
56459
- return scope.kind === "scoped" ? {
56460
- kind: "scoped",
56461
- subject: scope.subject,
56462
- courses: scope.runs
56463
- } : scope;
56464
- }
56465
- //#endregion
56466
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
56467
- function selectCourseDetails(args) {
56468
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
56469
- if (pageSurfaceScope.kind === "unsupported") return {
56470
- mode: "unsupportedPageSurfaceSubject",
56471
- selected: null,
56472
- scoped: []
56473
- };
56474
- if (pageSurfaceScope.kind === "scoped") {
56475
- const scoped = [...pageSurfaceScope.courses];
56476
- return {
56477
- mode: "pageSurfaceSubject",
56478
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
56479
- scoped
56480
- };
56481
- }
56482
- return {
56483
- mode: "unsupportedPageSurfaceSubject",
56484
- selected: null,
56485
- scoped: []
56486
- };
56487
- }
56488
- //#endregion
56489
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
56490
- function toValidDate(value) {
56491
- if (!value) return null;
56492
- const date = new Date(value);
56493
- return Number.isNaN(date.getTime()) ? null : date;
56494
- }
56495
- function getCourseDateRange(course) {
56496
- const datedSessions = (course.sessions ?? []).map((session) => ({
56497
- session,
56498
- start: toValidDate(session.startsAt),
56499
- end: toValidDate(session.endsAt)
56500
- })).filter((value) => value.start !== null || value.end !== null);
56501
- if (datedSessions.length === 0) return {
56502
- start: null,
56503
- end: null,
56504
- startIso: null,
56505
- endIso: null,
56506
- timeZone: null
56507
- };
56508
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
56509
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
56510
- return {
56511
- start: startSession?.start ?? null,
56512
- end: endSession?.end ?? null,
56513
- startIso: startSession?.session.startsAt ?? null,
56514
- endIso: endSession?.session.endsAt ?? null,
56515
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
56516
- };
56517
- }
56518
- function formatCourseDateRange(range) {
56519
- const { startIso, endIso, timeZone } = range;
56520
- const dateFormat = {
56521
- month: "numeric",
56522
- day: "numeric",
56523
- year: "numeric"
56524
- };
56525
- const effectiveTimeZone = toBookingTimeZone(timeZone);
56526
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
56527
- startsAt: iso,
56528
- timeZone: effectiveTimeZone
56529
- }), dateFormat);
56530
- const formatRangeDateOnly = (startsAt, endsAt) => {
56531
- const startText = formatSingleDate(startsAt);
56532
- const endText = formatSingleDate(endsAt);
56533
- return startText === endText ? startText : `${startText} – ${endText}`;
56534
- };
56535
- if (!startIso && !endIso) return "Dates TBD";
56536
- if (startIso && !endIso) return formatSingleDate(startIso);
56537
- if (!startIso && endIso) return formatSingleDate(endIso);
56538
- if (!startIso || !endIso) return "Dates TBD";
56539
- return formatRangeDateOnly(startIso, endIso);
56540
- }
56541
- //#endregion
56542
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
56543
- function TeamMemberName({ name, profilePath }) {
56544
- return profilePath ? /* @__PURE__ */ jsx("a", {
56545
- href: profilePath,
56546
- className: "rb-hover-opacity-80",
56547
- children: /* @__PURE__ */ jsx("strong", { children: name })
56548
- }) : /* @__PURE__ */ jsx("strong", { children: name });
56549
- }
56550
- function parseLimit(value, fallback) {
56551
- if (value === "all") return "all";
56552
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
56553
- return Number.isFinite(n) && n > 0 ? n : fallback;
56554
- }
56555
- function CourseDetailsView(props) {
56556
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
56557
- if (!course) return /* @__PURE__ */ jsx("p", {
56558
- className: "rb-caption status-muted",
56559
- children: emptyMessage
56560
- });
56561
- const pricing = resolveWholeSeriesPricingState(course);
56562
- const sessionLimit = parseLimit(sessionsLimit, 10);
56563
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
56564
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
56565
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
56566
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
56567
- const teamMembers = course.teamMembers ?? [];
56568
- return /* @__PURE__ */ jsxs("div", {
56569
- className: "rb-flex rb-flex-col rb-gap-6",
56570
- children: [
56571
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
56572
- /* @__PURE__ */ jsxs("div", {
56573
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
56574
- children: [/* @__PURE__ */ jsxs("div", {
56575
- className: "rb-flex rb-flex-col rb-gap-4",
56576
- children: [
56577
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56578
- className: "rb-label rb-mb-2",
56579
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
56580
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
56581
- className: "rb-flex rb-flex-col rb-gap-2",
56582
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56583
- option.name,
56584
- ": ",
56585
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56586
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
56587
- className: "rb-caption status-muted",
56588
- children: option.description
56589
- }) : null] }, option.id))
56590
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
56591
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56592
- className: "rb-label rb-mb-2",
56593
- children: "Spots"
56594
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
56595
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56596
- className: "rb-label rb-mb-2",
56597
- children: "Membership"
56598
- }), /* @__PURE__ */ jsx("p", {
56599
- className: "rb-caption status-muted",
56600
- children: "Eligible memberships can be used for free enrollment"
56601
- })] }),
56602
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56603
- className: "rb-label rb-mb-2",
56604
- children: "With"
56605
- }), /* @__PURE__ */ jsx("div", {
56606
- className: "rb-flex rb-flex-col rb-gap-3",
56607
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56608
- name: teamMember.name,
56609
- profilePath: teamMember.profilePath
56610
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
56611
- className: "rb-caption status-muted",
56612
- children: teamMember.summary
56613
- })] }, teamMember.id))
56614
- })] })
56615
- ]
56616
- }), /* @__PURE__ */ jsxs("div", {
56617
- className: "rb-flex rb-flex-col rb-gap-4",
56618
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
56619
- /* @__PURE__ */ jsx("div", {
56620
- className: "rb-label rb-mb-2",
56621
- children: "Venue"
56622
- }),
56623
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
56624
- course.venue.address && /* @__PURE__ */ jsx("p", {
56625
- className: "rb-caption status-muted",
56626
- children: course.venue.address
56627
- })
56628
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56629
- className: "rb-label rb-mb-2",
56630
- children: "Enrollment"
56631
- }), /* @__PURE__ */ jsx("p", {
56632
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
56633
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
56634
- })] })]
56635
- })]
56636
- }),
56637
- descriptionDoc && /* @__PURE__ */ jsx("div", {
56638
- className: "cd-description",
56639
- children: /* @__PURE__ */ jsx(RichText$1, { doc: descriptionDoc })
56640
- }),
56641
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
56642
- /* @__PURE__ */ jsx("div", {
56643
- className: "rb-label",
56644
- children: "Sessions"
56645
- }),
56646
- /* @__PURE__ */ jsx("div", {
56647
- className: "rb-mt-2 rb-tiles-grid",
56648
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
56649
- className: "rb-tile",
56650
- children: /* @__PURE__ */ jsx(DateTimeTile, {
56651
- startsAt: s.startsAt,
56652
- endsAt: s.endsAt
56653
- })
56654
- }, s.id))
56655
- }),
56656
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
56657
- className: "cd-sessions__more",
56658
- children: [
56659
- "Showing ",
56660
- visibleSessions.length,
56661
- " of ",
56662
- sortedSessions.length,
56663
- " sessions."
56664
- ]
56665
- })
56666
- ] })
56667
- ]
56668
- });
56669
- }
56670
- //#endregion
56671
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
56672
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
56673
- const selection = selectCourseDetails({
56674
- courses: courses ?? null,
56675
- subject
56676
- });
56677
- const parsedSubject = parseEventPageSurfaceSubject(subject);
56678
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
56679
- const now = /* @__PURE__ */ new Date();
56680
- const scopedWithRange = selection.scoped.map((c) => ({
56681
- course: c,
56682
- range: getCourseDateRange(c)
56683
- }));
56684
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
56685
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
56686
- });
56687
- const lastPastRun = scopedWithRange.filter(({ range }) => Boolean(range.end && range.end <= now)).sort((a, b) => (b.range.end?.getTime() ?? 0) - (a.range.end?.getTime() ?? 0))[0] ?? null;
56688
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
56689
- return /* @__PURE__ */ jsxs("div", {
56690
- className: `course-details ${className ?? ""}`.trim(),
56691
- "data-block": "course-details",
56692
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
56693
- course: selection.selected,
56694
- showTitle,
56695
- showDescription,
56696
- showSessions,
56697
- sessionsLimit,
56698
- showVenue,
56699
- showPrice,
56700
- showCapacity,
56701
- showEnrollmentStatus,
56702
- showMembershipNote
56703
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
56704
- className: "rb-flex rb-flex-col rb-gap-3",
56705
- children: [
56706
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56707
- className: "rb-label rb-mb-2",
56708
- children: "Upcoming runs"
56709
- }), /* @__PURE__ */ jsx("p", {
56710
- className: "rb-caption status-muted",
56711
- children: "Choose a run to see sessions and details."
56712
- })] }),
56713
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
56714
- className: "rb-flex rb-flex-col rb-gap-2",
56715
- children: nonPastRuns.map(({ course, range }) => {
56716
- const start = range.start;
56717
- const end = range.end;
56718
- const isInProgress = Boolean(start && end && start <= now && end > now);
56719
- return /* @__PURE__ */ jsx("li", {
56720
- className: "rb-rounded-md rb-border rb-p-3",
56721
- children: /* @__PURE__ */ jsx("div", {
56722
- className: "rb-flex rb-flex-col rb-gap-1",
56723
- children: /* @__PURE__ */ jsxs("div", {
56724
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
56725
- children: [/* @__PURE__ */ jsxs("div", {
56726
- className: "rb-min-w-0",
56727
- children: [/* @__PURE__ */ jsx("div", {
56728
- className: "rb-truncate",
56729
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
56730
- }), /* @__PURE__ */ jsx("div", {
56731
- className: "rb-caption status-muted",
56732
- children: formatCourseDateRange(range)
56733
- })]
56734
- }), /* @__PURE__ */ jsx("div", {
56735
- className: "rb-caption status-muted rb-shrink-0",
56736
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
56737
- })]
56738
- })
56739
- })
56740
- }, course.eventSeriesId);
56741
- })
56742
- }) : /* @__PURE__ */ jsx("p", {
56743
- className: "rb-caption status-muted",
56744
- children: "No upcoming runs."
56745
- }),
56746
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
56747
- className: "rb-caption status-muted",
56748
- children: [
56749
- "Last run: ",
56750
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
56751
- " (",
56752
- formatCourseDateRange(lastPastRun.range),
56753
- ")"
56754
- ]
56755
- }) : null
56756
- ]
56757
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
56758
- course: null,
56759
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
56760
- showTitle,
56761
- showDescription,
56762
- showSessions,
56763
- sessionsLimit,
56764
- showVenue,
56765
- showPrice,
56766
- showCapacity,
56767
- showEnrollmentStatus,
56768
- showMembershipNote
56769
- }), children]
56770
- });
56771
- }
56772
- //#endregion
56773
55963
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
56774
55964
  /**
56775
55965
  * EventSpotlight Component
@@ -56973,7 +56163,7 @@ function deriveCourseScheduleSummary(course) {
56973
56163
  sessionCount: sessions.length
56974
56164
  };
56975
56165
  }
56976
- function nextCourseSessionStart(course) {
56166
+ function nextWholeSeriesSessionStart(course) {
56977
56167
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
56978
56168
  }
56979
56169
  function occurrenceFromEvent(event) {
@@ -57127,7 +56317,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
57127
56317
  function buildItemDataMap(props) {
57128
56318
  const routeCandidates = props.routeCandidates?.routes ?? [];
57129
56319
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
57130
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
56320
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
57131
56321
  }
57132
56322
  function eventDataFromMaybeArray(events) {
57133
56323
  return events ? {
@@ -57181,8 +56371,8 @@ function renderOfferingGroupItems(presentation, items, options) {
57181
56371
  }
57182
56372
  }
57183
56373
  function compareCoursesByNextSession(left, right) {
57184
- const leftStart = nextCourseSessionStart(left);
57185
- const rightStart = nextCourseSessionStart(right);
56374
+ const leftStart = nextWholeSeriesSessionStart(left);
56375
+ const rightStart = nextWholeSeriesSessionStart(right);
57186
56376
  if (leftStart === null) return rightStart === null ? 0 : 1;
57187
56377
  if (rightStart === null) return -1;
57188
56378
  return leftStart.localeCompare(rightStart);
@@ -58121,45 +57311,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
58121
57311
  });
58122
57312
  }
58123
57313
  //#endregion
58124
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
58125
- /**
58126
- * Server-safe placeholder for course registration.
58127
- * Provides a static container for island hydration without importing client hooks.
58128
- */
58129
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
58130
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
58131
- siteId,
58132
- apiBaseUrl,
58133
- portalToken,
58134
- subject,
58135
- courses,
58136
- className,
58137
- showSessions,
58138
- showPrice,
58139
- showCapacity,
58140
- showVenue,
58141
- successMessage,
58142
- waitlistMessage,
58143
- membershipMessage,
58144
- buttonText,
58145
- buttonVariant,
58146
- stage
58147
- });
58148
- return /* @__PURE__ */ jsxs("div", {
58149
- className: `course-registration ${className ?? ""}`.trim(),
58150
- "data-block": "course-registration",
58151
- ...getIslandRootProps("course-registration", blockId),
58152
- children: [
58153
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
58154
- /* @__PURE__ */ jsx("div", {
58155
- className: "course-registration__summary",
58156
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
58157
- }),
58158
- children
58159
- ]
58160
- });
58161
- }
58162
- //#endregion
58163
57314
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
58164
57315
  function GiftingSSR({ blockId, ...rest }) {
58165
57316
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -59645,7 +58796,6 @@ const runtimeBackedBlockServerEntries = {
59645
58796
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
59646
58797
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
59647
58798
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
59648
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
59649
58799
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
59650
58800
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
59651
58801
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -59678,7 +58828,6 @@ const serverComponentRegistry = {
59678
58828
  "booking-form": BookingFormSSR,
59679
58829
  "event-details": EventDetailsSSR,
59680
58830
  "location-map": LocationMapSSR,
59681
- "course-details": CourseDetailsSSR,
59682
58831
  "event-spotlight": EventSpotlight,
59683
58832
  "event-combined": EventCombinedSSR,
59684
58833
  "offerings-preview": OfferingsPreviewNode,
@@ -61126,12 +60275,46 @@ function collectConstrainedVideoMediaValues(options) {
61126
60275
  */
61127
60276
  function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
61128
60277
  if (!routes || !manifest?.fields?.length) return content;
61129
- return hydrateValue(content, {
60278
+ return hydrateLinks(content, routes, pagesByIdentifier, entriesByIdentifier);
60279
+ }
60280
+ /** Hydrate identifier-aware links in data loaded after manifest content. */
60281
+ function hydrateLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
60282
+ return hydrateValue(value, {
61130
60283
  routes,
61131
60284
  pagesByIdentifier,
61132
60285
  entriesByIdentifier
61133
60286
  });
61134
60287
  }
60288
+ /**
60289
+ * Hydrate links only inside resolved booking-consent documents. Loader payloads are
60290
+ * otherwise opaque and may legitimately contain objects that resemble link values.
60291
+ */
60292
+ function hydrateResolvedBookingConsentLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
60293
+ return hydrateResolvedBookingConsentValue(value, {
60294
+ routes,
60295
+ pagesByIdentifier,
60296
+ entriesByIdentifier
60297
+ });
60298
+ }
60299
+ function hydrateResolvedBookingConsentValue(value, context) {
60300
+ if (Array.isArray(value)) {
60301
+ const hydratedItems = value.map((item) => hydrateResolvedBookingConsentValue(item, context));
60302
+ return hydratedItems.every((item, index) => item === value[index]) ? value : hydratedItems;
60303
+ }
60304
+ if (!isRecord$26(value)) return value;
60305
+ if (isBookingConsentCarrier(value)) {
60306
+ const agreement = hydrateValue(value.agreement, context);
60307
+ return agreement === value.agreement ? value : {
60308
+ ...value,
60309
+ agreement
60310
+ };
60311
+ }
60312
+ const hydratedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateResolvedBookingConsentValue(entry, context)]);
60313
+ return hydratedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(hydratedEntries);
60314
+ }
60315
+ function isBookingConsentCarrier(value) {
60316
+ return bookingConsentCarrierSchema.safeParse(value).success;
60317
+ }
61135
60318
  function hydrateValue(value, context) {
61136
60319
  try {
61137
60320
  if (Array.isArray(value)) {
@@ -61200,6 +60383,13 @@ function hydrateEntryLink(link, context) {
61200
60383
  };
61201
60384
  }
61202
60385
  //#endregion
60386
+ //#region ../blocks/src/system/manifest/resolveBlockData.ts
60387
+ function resolveBlockData$1(blockId, dataLoaders, dataContext, routes) {
60388
+ const raw = blockId ? dataContext?.resolvedData?.[blockId] : void 0;
60389
+ if (isRecord$26(raw)) return routes ? hydrateResolvedBookingConsentLinks(raw, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : raw;
60390
+ return dataLoaders && typeof dataLoaders === "object" && Object.keys(dataLoaders).length > 0 ? {} : void 0;
60391
+ }
60392
+ //#endregion
61203
60393
  //#region ../blocks/src/sdkBlockTransform.ts
61204
60394
  /**
61205
60395
  * Transforms an SDK custom block into a BlockManifest.
@@ -61794,8 +60984,8 @@ function generateInputCss({ themeId, theme, inputSystem }) {
61794
60984
  const radioSelector = `${rootSelector} .form-radio`;
61795
60985
  const checkableRules = [];
61796
60986
  checkableRules.push("appearance: none");
61797
- checkableRules.push("width: 1rem");
61798
- checkableRules.push("height: 1rem");
60987
+ checkableRules.push("width: 1.125rem");
60988
+ checkableRules.push("height: 1.125rem");
61799
60989
  checkableRules.push("flex-shrink: 0");
61800
60990
  checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
61801
60991
  if (inputSystem.base.background.type === "transparent") checkableRules.push("background-color: transparent");
@@ -64053,176 +63243,6 @@ ${root} {
64053
63243
  `;
64054
63244
  }
64055
63245
  //#endregion
64056
- //#region ../theme-core/src/blocks/vars/course-details.ts
64057
- /**
64058
- * Generate CSS variables for the course-details block.
64059
- *
64060
- * Variables defined:
64061
- * - Enrollment status colors (open/closed)
64062
- * - Capacity indicator colors (available/low/full)
64063
- * - Price display colors (free indicator)
64064
- */
64065
- function generateCourseDetailsVars({ themeId }) {
64066
- return `
64067
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
64068
- /* Enrollment status */
64069
- --cd-enrollment-open-text: rgb(var(--tb-success));
64070
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
64071
-
64072
- /* Capacity indicator */
64073
- --cd-capacity-available-text: rgb(var(--tb-success));
64074
- --cd-capacity-low-text: rgb(var(--tb-warning));
64075
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
64076
-
64077
- /* Price styling */
64078
- --cd-price-free-text: rgb(var(--tb-success));
64079
- }
64080
- `;
64081
- }
64082
- //#endregion
64083
- //#region ../theme-core/src/blocks/vars/course-registration.ts
64084
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
64085
- /* Temporary bridge while persisted Course blocks render the Event-owned
64086
- whole-series registration runtime. Removed with the Course block. */
64087
- --er-step-active: var(--cr-step-active);
64088
- --er-step-inactive: var(--cr-step-inactive);
64089
- --er-step-completed: var(--cr-step-completed);
64090
- --er-step-text: var(--cr-step-text);
64091
- --er-step-text-active: var(--cr-step-text-active);
64092
- --er-step-connector: var(--cr-step-connector);
64093
- --er-step-title-size: var(--cr-step-title-size);
64094
- --er-success-bg: var(--cr-success-bg);
64095
- --er-success-text: var(--cr-success-text);
64096
- --er-error-bg: var(--cr-error-bg);
64097
- --er-error-text: var(--cr-error-text);
64098
- --er-waitlist-bg: var(--cr-waitlist-bg);
64099
- --er-waitlist-text: var(--cr-waitlist-text);
64100
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
64101
- --er-capacity-available-text: var(--cr-capacity-available-text);
64102
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
64103
- --er-capacity-low-text: var(--cr-capacity-low-text);
64104
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
64105
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
64106
- --er-border: var(--cr-border);
64107
- --er-border-hover: var(--cr-border-hover);
64108
- --er-border-selected: var(--cr-border-selected);
64109
- --er-border-error: var(--cr-border-error);
64110
- --er-focus-ring: var(--cr-focus-ring);
64111
- --er-required: var(--cr-required);
64112
- --er-payment-border: var(--cr-payment-border);
64113
- --er-payment-border-hover: var(--cr-payment-border-hover);
64114
- --er-payment-border-selected: var(--cr-payment-border-selected);
64115
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
64116
- --er-check-bg: var(--cr-check-bg);
64117
- --er-check-text: var(--cr-check-text);
64118
- --er-summary-bg: var(--cr-summary-bg);
64119
- --er-summary-border: var(--cr-summary-border);
64120
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64121
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
64122
- `;
64123
- /**
64124
- * Generate CSS variables for the course-registration block.
64125
- *
64126
- * Variables defined:
64127
- * - Step indicator colors (active, inactive, completed, text, connector)
64128
- * - Success/error/waitlist state backgrounds and text colors
64129
- * - Capacity badge colors (available, low, sold-out)
64130
- * - Border colors for various interaction states
64131
- * - Input focus and required marker styling
64132
- * - Payment option card styling
64133
- * - Checkmark indicator colors
64134
- * - Summary styling
64135
- */
64136
- function generateCourseRegistrationVars({ themeId }) {
64137
- return `
64138
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
64139
- /* Step indicator */
64140
- --cr-step-active: rgb(var(--tb-primary));
64141
- --cr-step-inactive: rgb(var(--tb-mutedText));
64142
- --cr-step-completed: rgb(var(--tb-success));
64143
- --cr-step-text: rgb(255 255 255);
64144
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
64145
- --cr-step-connector: rgba(var(--tb-border), 0.5);
64146
-
64147
- /* Step title */
64148
- --cr-step-title-size: 1.5rem;
64149
-
64150
- /* State backgrounds with alpha */
64151
- --cr-success-bg: rgba(var(--tb-success), 0.1);
64152
- --cr-success-text: rgb(var(--tb-success));
64153
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64154
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
64155
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
64156
- --cr-waitlist-text: rgb(var(--tb-warning));
64157
-
64158
- /* Capacity badges */
64159
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
64160
- --cr-capacity-available-text: rgb(var(--tb-success));
64161
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
64162
- --cr-capacity-low-text: rgb(var(--tb-warning));
64163
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64164
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
64165
-
64166
- /* Borders */
64167
- --cr-border: rgb(var(--tb-border));
64168
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
64169
- --cr-border-selected: rgb(var(--tb-primary));
64170
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
64171
-
64172
- /* Input focus */
64173
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
64174
-
64175
- /* Required marker */
64176
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
64177
-
64178
- /* Payment option cards */
64179
- --cr-payment-border: rgb(var(--tb-border));
64180
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
64181
- --cr-payment-border-selected: rgb(var(--tb-primary));
64182
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
64183
-
64184
- /* Checkmark indicator */
64185
- --cr-check-bg: rgb(var(--tb-primary));
64186
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
64187
-
64188
- /* Summary */
64189
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
64190
- --cr-summary-border: rgb(var(--tb-border));
64191
-
64192
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
64193
-
64194
- /* Shared registration-surface mappings (issue 1174).
64195
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
64196
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
64197
- keep working unchanged. */
64198
- --rb-reg-radius: var(--rb-block-radius);
64199
- --rb-reg-border: var(--cr-border);
64200
- --rb-reg-border-hover: var(--cr-border-hover);
64201
- --rb-reg-border-selected: var(--cr-border-selected);
64202
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
64203
- --rb-reg-option-bg: rgb(var(--tb-background));
64204
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
64205
- --rb-reg-surface-bg: rgb(var(--tb-surface));
64206
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64207
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
64208
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
64209
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
64210
- --rb-reg-check-bg: var(--cr-check-bg);
64211
- --rb-reg-check-text: var(--cr-check-text);
64212
- --rb-reg-step-active: var(--cr-step-active);
64213
- --rb-reg-step-completed: var(--cr-step-completed);
64214
- --rb-reg-step-inactive: var(--cr-step-inactive);
64215
- --rb-reg-step-text: var(--cr-step-text);
64216
- --rb-reg-step-text-active: var(--cr-step-text-active);
64217
- --rb-reg-step-connector: var(--cr-step-connector);
64218
- --rb-reg-summary-bg: var(--cr-summary-bg);
64219
- --rb-reg-summary-border: var(--cr-summary-border);
64220
- --rb-reg-focus-ring: var(--cr-focus-ring);
64221
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
64222
- }
64223
- `;
64224
- }
64225
- //#endregion
64226
63246
  //#region ../theme-core/src/blocks/registry.ts
64227
63247
  /**
64228
63248
  * Global registry of block var generators.
@@ -64237,8 +63257,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
64237
63257
  blockVarRegistry.set("form", generateFormBlockVars);
64238
63258
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
64239
63259
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
64240
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
64241
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
64242
63260
  /**
64243
63261
  * Generate all Tier 3 block-specific CSS variables.
64244
63262
  *
@@ -65579,11 +64597,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources
65579
64597
  try {
65580
64598
  const routes = routeMap ?? dataContext?.routes;
65581
64599
  const hydratedContent = routes ? hydrateManifestLinks(definition.manifest, data, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : data;
65582
- const resolved = resolveBlockData$1({
65583
- block,
65584
- definition,
65585
- dataContext
65586
- });
64600
+ const resolved = resolveBlockData$1(block.id, definition.dataLoaders, dataContext, routes);
65587
64601
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
65588
64602
  const baseProps = {
65589
64603
  content: hydratedContent,
@@ -65673,12 +64687,6 @@ function shouldDebugCustomBlocks() {
65673
64687
  return false;
65674
64688
  }
65675
64689
  }
65676
- function resolveBlockData$1({ block, definition, dataContext }) {
65677
- const blockId = block.id ?? null;
65678
- const raw = blockId ? dataContext?.resolvedData?.[blockId] : void 0;
65679
- if (isObjectRecord$1(raw)) return { ...raw };
65680
- return definition.dataLoaders && Object.keys(definition.dataLoaders).length > 0 ? {} : void 0;
65681
- }
65682
64690
  /**
65683
64691
  * Resolves block content based on stage priority.
65684
64692
  * For draft/preview: draftContent takes priority over content.
@@ -70188,7 +69196,7 @@ const containerResponsiveThemeCss = `/*
70188
69196
  * Shared: Registration Surface (issue 1174)
70189
69197
  *
70190
69198
  * Wizard-surface primitives shared by the event-registration,
70191
- * course-registration and appointment-booking blocks: surface container,
69199
+ * appointment-booking blocks: surface container,
70192
69200
  * selectable option cards, step indicator, wizard actions row, on-surface
70193
69201
  * text ramp, layout stacks, summary box and skeleton shell lines.
70194
69202
  *
@@ -70231,7 +69239,7 @@ const containerResponsiveThemeCss = `/*
70231
69239
  }
70232
69240
 
70233
69241
  /* Surface container */
70234
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69242
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70235
69243
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
70236
69244
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70237
69245
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -70261,7 +69269,7 @@ const containerResponsiveThemeCss = `/*
70261
69269
  *
70262
69270
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
70263
69271
  * pairing is pinned by registration-surface-action-reset.test.ts. */
70264
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69272
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70265
69273
  --rb-action-primary-base-background-color: initial;
70266
69274
  --rb-action-primary-base-background-image: initial;
70267
69275
  --rb-action-primary-base-color: initial;
@@ -70369,7 +69377,7 @@ const containerResponsiveThemeCss = `/*
70369
69377
  }
70370
69378
 
70371
69379
  /* Selectable option card */
70372
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
69380
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
70373
69381
  position: relative;
70374
69382
  display: flex;
70375
69383
  align-items: flex-start;
@@ -70386,34 +69394,34 @@ const containerResponsiveThemeCss = `/*
70386
69394
  box-shadow var(--rb-block-transition, 150ms) ease;
70387
69395
  }
70388
69396
 
70389
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
69397
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
70390
69398
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
70391
69399
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
70392
69400
  }
70393
69401
 
70394
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
69402
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
70395
69403
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
70396
69404
  outline-offset: 2px;
70397
69405
  }
70398
69406
 
70399
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
69407
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
70400
69408
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70401
69409
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
70402
69410
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70403
69411
  }
70404
69412
 
70405
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
69413
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
70406
69414
  cursor: not-allowed;
70407
69415
  opacity: 0.7;
70408
69416
  }
70409
69417
 
70410
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
69418
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
70411
69419
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70412
69420
  box-shadow: none;
70413
69421
  }
70414
69422
 
70415
69423
  /* Check indicator */
70416
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
69424
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
70417
69425
  flex-shrink: 0;
70418
69426
  width: 1.25rem;
70419
69427
  height: 1.25rem;
@@ -70424,18 +69432,18 @@ const containerResponsiveThemeCss = `/*
70424
69432
  justify-content: center;
70425
69433
  }
70426
69434
 
70427
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
69435
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
70428
69436
  width: 0.75rem;
70429
69437
  height: 0.75rem;
70430
69438
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70431
69439
  }
70432
69440
 
70433
69441
  /* Step indicator */
70434
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
69442
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
70435
69443
  margin-bottom: 1.5rem;
70436
69444
  }
70437
69445
 
70438
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
69446
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
70439
69447
  display: flex;
70440
69448
  align-items: center;
70441
69449
  justify-content: center;
@@ -70445,13 +69453,13 @@ const containerResponsiveThemeCss = `/*
70445
69453
  margin: 0;
70446
69454
  }
70447
69455
 
70448
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
69456
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
70449
69457
  display: flex;
70450
69458
  align-items: center;
70451
69459
  gap: 0.5rem;
70452
69460
  }
70453
69461
 
70454
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
69462
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
70455
69463
  width: 1.75rem;
70456
69464
  height: 1.75rem;
70457
69465
  border-radius: 50%;
@@ -70465,47 +69473,47 @@ const containerResponsiveThemeCss = `/*
70465
69473
  transition: background-color var(--rb-block-transition, 150ms) ease;
70466
69474
  }
70467
69475
 
70468
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
69476
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
70469
69477
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
70470
69478
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70471
69479
  }
70472
69480
 
70473
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
69481
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
70474
69482
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
70475
69483
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70476
69484
  }
70477
69485
 
70478
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
69486
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
70479
69487
  width: 0.75rem;
70480
69488
  height: 0.75rem;
70481
69489
  }
70482
69490
 
70483
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
69491
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
70484
69492
  width: 2rem;
70485
69493
  height: 2px;
70486
69494
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
70487
69495
  }
70488
69496
 
70489
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69497
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70490
69498
  font-size: 0.75rem;
70491
69499
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70492
69500
  display: none;
70493
69501
  }
70494
69502
 
70495
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
69503
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
70496
69504
  font-weight: 500;
70497
69505
  }
70498
69506
 
70499
69507
  @container rb-site (min-width: 640px) {
70500
69508
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
70501
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69509
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70502
69510
  display: inline;
70503
69511
  }
70504
69512
  }
70505
69513
  }
70506
69514
 
70507
69515
  /* Wizard actions row */
70508
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
69516
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
70509
69517
  display: flex;
70510
69518
  justify-content: space-between;
70511
69519
  align-items: center;
@@ -70514,56 +69522,56 @@ const containerResponsiveThemeCss = `/*
70514
69522
  }
70515
69523
 
70516
69524
  /* When there's only one action (no back button), push it to the right */
70517
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
69525
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
70518
69526
  margin-inline-start: auto;
70519
69527
  }
70520
69528
 
70521
69529
  /* On-surface text ramp */
70522
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
69530
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
70523
69531
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70524
69532
  }
70525
69533
 
70526
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
69534
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
70527
69535
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
70528
69536
  }
70529
69537
 
70530
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
69538
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
70531
69539
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
70532
69540
  }
70533
69541
 
70534
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
69542
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
70535
69543
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
70536
69544
  }
70537
69545
 
70538
69546
  /* Layout stacks */
70539
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
69547
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
70540
69548
  display: flex;
70541
69549
  flex-direction: column;
70542
69550
  gap: 1rem;
70543
69551
  }
70544
69552
 
70545
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
69553
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
70546
69554
  gap: 0.75rem;
70547
69555
  }
70548
69556
 
70549
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
69557
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
70550
69558
  display: flex;
70551
69559
  align-items: center;
70552
69560
  gap: 1rem;
70553
69561
  }
70554
69562
 
70555
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
69563
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
70556
69564
  justify-content: space-between;
70557
69565
  align-items: flex-start;
70558
69566
  }
70559
69567
 
70560
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
69568
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
70561
69569
  display: grid;
70562
69570
  gap: 0.75rem;
70563
69571
  }
70564
69572
 
70565
69573
  /* Summary box */
70566
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
69574
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
70567
69575
  padding: 1rem;
70568
69576
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
70569
69577
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -70571,7 +69579,7 @@ const containerResponsiveThemeCss = `/*
70571
69579
  }
70572
69580
 
70573
69581
  /* Skeleton shell lines */
70574
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
69582
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
70575
69583
  height: 0.75rem;
70576
69584
  border-radius: 9999px;
70577
69585
  background: linear-gradient(
@@ -70582,24 +69590,24 @@ const containerResponsiveThemeCss = `/*
70582
69590
  );
70583
69591
  }
70584
69592
 
70585
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
69593
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
70586
69594
  width: min(26rem, 82%);
70587
69595
  }
70588
69596
 
70589
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
69597
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
70590
69598
  width: min(19rem, 68%);
70591
69599
  }
70592
69600
 
70593
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
69601
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
70594
69602
  width: min(14rem, 52%);
70595
69603
  }
70596
69604
 
70597
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
69605
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
70598
69606
  width: min(10rem, 42%);
70599
69607
  }
70600
69608
 
70601
69609
  /* Skeleton block (rectangular placeholder, pulses) */
70602
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69610
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70603
69611
  height: 2.5rem;
70604
69612
  width: 100%;
70605
69613
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -70617,7 +69625,7 @@ const containerResponsiveThemeCss = `/*
70617
69625
  }
70618
69626
 
70619
69627
  @media (prefers-reduced-motion: reduce) {
70620
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69628
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70621
69629
  animation: none;
70622
69630
  }
70623
69631
  }
@@ -76999,1536 +76007,225 @@ const containerResponsiveThemeCss = `/*
76999
76007
  cursor: not-allowed;
77000
76008
  }
77001
76009
 
77002
- /*
77003
- * Course Details (runtime node)
77004
- * Minimal rules - most styling via rb-* utilities
76010
+ /* =============================================================================
76011
+ * Block: Newsletter Signup
76012
+ * =============================================================================
77005
76013
  */
77006
76014
 
77007
- :where(.theme-scope) .course-details {
77008
- width: 100%;
77009
- max-width: 56.25rem; /* 900px */
77010
- margin-inline: auto;
76015
+ /* Newsletter copy styling */
76016
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
76017
+ font-size: 1.5rem;
76018
+ font-weight: 600;
77011
76019
  }
77012
76020
 
77013
- /* Description prose wrapper */
77014
- :where(.theme-scope) .course-details .cd-description {
77015
- margin-top: 1rem;
76021
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
76022
+ font-size: 1rem;
76023
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76024
+ opacity: 0.85;
77016
76025
  }
77017
76026
 
77018
- /* "Showing X of Y" text */
77019
- :where(.theme-scope) .course-details .cd-sessions__more {
77020
- margin-top: 0.5rem;
77021
- opacity: 0.7;
77022
- font-size: 0.875rem;
76027
+ /* Newsletter form container */
76028
+ :where(.theme-scope) .newsletter-form {
76029
+ width: 100%;
76030
+ max-width: 32rem;
76031
+ margin-left: auto;
76032
+ margin-right: auto;
77023
76033
  }
77024
76034
 
77025
- /* Enrollment status colors (using Tier 3 vars) */
77026
- :where(.theme-scope) .course-details .cd-enrollment--open {
77027
- color: var(--cd-enrollment-open-text);
76035
+ /* Newsletter form fields container */
76036
+ :where(.theme-scope) .newsletter-form-fields {
76037
+ display: flex;
76038
+ flex-direction: column;
76039
+ gap: var(--rb-gap-sm, 0.75rem);
77028
76040
  }
77029
76041
 
77030
- :where(.theme-scope) .course-details .cd-enrollment--closed {
77031
- color: var(--cd-enrollment-closed-text);
76042
+ /* Individual field styling */
76043
+ :where(.theme-scope) .newsletter-field {
76044
+ display: flex;
76045
+ flex-direction: column;
76046
+ gap: 0.25rem;
77032
76047
  }
77033
76048
 
77034
- /* =============================================================================
77035
- * Block: Event whole-series registration
77036
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
77037
- * =============================================================================
77038
- */
77039
-
77040
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
77041
- :where(.theme-scope)
77042
- :where(
77043
- [data-block='event-registration'],
77044
- [data-block='course-registration']
77045
- ) {
77046
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
77047
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
76049
+ /* Required indicator */
76050
+ :where(.theme-scope) .newsletter-required {
76051
+ color: rgb(var(--tb-primary));
76052
+ margin-left: 0.125rem;
77048
76053
  }
77049
76054
 
77050
- /* Container: base styling comes from the shared .rb-reg-surface
77051
- (registration-surface.css); these overrides preserve whole-series
77052
- whole-series registration's established look (fixed padding, centered). */
77053
- :where(.theme-scope)
77054
- :where([data-block='event-registration'], [data-block='course-registration'])
77055
- .er-whole-series-container {
77056
- padding: 1.5rem;
77057
- margin-inline: auto;
76055
+ /* Submit button container */
76056
+ :where(.theme-scope) .newsletter-submit {
76057
+ margin-top: 0.5rem;
77058
76058
  }
77059
76059
 
77060
- /* Empty/unavailable */
77061
- :where(.theme-scope)
77062
- :where([data-block='event-registration'], [data-block='course-registration'])
77063
- .er-whole-series-empty {
77064
- border-radius: var(--rb-block-radius);
77065
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
77066
- padding: 2.5rem;
77067
- text-align: center;
76060
+ /* ALTCHA widget container */
76061
+ :where(.theme-scope) .newsletter-altcha {
76062
+ margin-top: 0.75rem;
76063
+ display: flex;
76064
+ justify-content: center;
77068
76065
  }
77069
76066
 
77070
- :where(.theme-scope)
77071
- :where([data-block='event-registration'], [data-block='course-registration'])
77072
- .er-whole-series-empty__text {
77073
- opacity: 0.7;
76067
+ /* Privacy note */
76068
+ :where(.theme-scope) .newsletter-privacy-note {
76069
+ margin-top: 0.75rem;
76070
+ font-size: 1rem;
76071
+ line-height: 1.6;
76072
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76073
+ text-align: center;
77074
76074
  }
77075
76075
 
77076
76076
  /* =============================================================================
77077
- * Layout (two-column)
76077
+ * Inline Variant - Horizontal layout
77078
76078
  * =============================================================================
77079
76079
  */
77080
- :where(.theme-scope)
77081
- :where([data-block='event-registration'], [data-block='course-registration'])
77082
- .er-whole-series-layout {
77083
- display: grid;
77084
- gap: 1.5rem;
77085
- grid-template-columns: 1fr;
77086
- }
77087
76080
 
77088
- @container rb-site (min-width: 768px) {
77089
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77090
- :where(.theme-scope)
77091
- :where(
77092
- [data-block='event-registration'],
77093
- [data-block='course-registration']
77094
- )
77095
- .er-whole-series-layout--with-sidebar {
77096
- grid-template-columns: 1fr 280px;
77097
- }
77098
- }
76081
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76082
+ flex-direction: row;
76083
+ align-items: flex-end;
76084
+ flex-wrap: wrap;
76085
+ gap: var(--rb-gap-sm, 0.75rem);
77099
76086
  }
77100
76087
 
77101
- :where(.theme-scope)
77102
- :where([data-block='event-registration'], [data-block='course-registration'])
77103
- .er-whole-series-layout__main {
77104
- min-width: 0;
76088
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76089
+ flex: 1 1 auto;
76090
+ min-width: 10rem;
77105
76091
  }
77106
76092
 
77107
- :where(.theme-scope)
77108
- :where([data-block='event-registration'], [data-block='course-registration'])
77109
- .er-whole-series-layout__sidebar {
77110
- display: none;
76093
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
76094
+ margin-top: 0;
76095
+ flex-shrink: 0;
77111
76096
  }
77112
76097
 
77113
- @container rb-site (min-width: 768px) {
76098
+ /* Mobile fallback for inline variant */
76099
+ @container rb-site (max-width: 640px) {
77114
76100
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77115
- :where(.theme-scope)
77116
- :where(
77117
- [data-block='event-registration'],
77118
- [data-block='course-registration']
77119
- )
77120
- .er-whole-series-layout__sidebar {
77121
- display: block;
76101
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76102
+ flex-direction: column;
76103
+ }
76104
+
76105
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76106
+ min-width: 100%;
77122
76107
  }
77123
76108
  }
77124
76109
  }
77125
76110
 
77126
76111
  /* =============================================================================
77127
- * Step Indicator
76112
+ * Editorial Split Variant
77128
76113
  * =============================================================================
77129
76114
  */
77130
- :where(.theme-scope)
77131
- :where([data-block='event-registration'], [data-block='course-registration'])
77132
- .er-whole-series-steps {
77133
- display: flex;
77134
- align-items: center;
77135
- gap: 0.5rem;
77136
- margin-bottom: 1.5rem;
77137
- }
77138
76115
 
77139
- :where(.theme-scope)
77140
- :where([data-block='event-registration'], [data-block='course-registration'])
77141
- .er-whole-series-step {
77142
- display: flex;
76116
+ :where(.theme-scope) .newsletter-editorial-split {
76117
+ display: grid;
76118
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
76119
+ gap: clamp(2.5rem, 7vw, 7rem);
77143
76120
  align-items: center;
77144
- gap: 0.5rem;
76121
+ text-align: left;
77145
76122
  }
77146
76123
 
77147
- :where(.theme-scope)
77148
- :where([data-block='event-registration'], [data-block='course-registration'])
77149
- .er-whole-series-step-circle {
77150
- width: 1.75rem;
77151
- height: 1.75rem;
77152
- border-radius: 9999px;
76124
+ :where(.theme-scope) .newsletter-editorial-split-copy {
77153
76125
  display: flex;
77154
- align-items: center;
77155
- justify-content: center;
77156
- font-size: 0.75rem;
77157
- font-weight: 600;
77158
- background: var(--er-step-inactive);
77159
- color: var(--er-step-text);
77160
- transition: background-color 0.2s ease;
76126
+ flex-direction: column;
76127
+ gap: var(--rb-gap-sm, 0.75rem);
77161
76128
  }
77162
76129
 
77163
- :where(.theme-scope)
77164
- :where([data-block='event-registration'], [data-block='course-registration'])
77165
- .er-whole-series-step-circle--active {
77166
- background: var(--er-step-active);
77167
- color: var(--er-step-text-active);
76130
+ :where(.theme-scope) .newsletter-editorial-split-form {
76131
+ min-width: 0;
77168
76132
  }
77169
76133
 
77170
- :where(.theme-scope)
77171
- :where([data-block='event-registration'], [data-block='course-registration'])
77172
- .er-whole-series-step-circle--completed {
77173
- background: var(--er-step-completed);
77174
- color: var(--er-step-text);
76134
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
76135
+ max-width: none;
76136
+ margin-inline: 0;
77175
76137
  }
77176
76138
 
77177
- :where(.theme-scope)
77178
- :where([data-block='event-registration'], [data-block='course-registration'])
77179
- .er-whole-series-step-label {
77180
- font-size: 0.875rem;
76139
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
76140
+ font-size: clamp(2rem, 4vw, 3.5rem);
77181
76141
  font-weight: 500;
77182
- color: rgb(var(--tb-mutedText));
77183
- display: none;
77184
76142
  }
77185
76143
 
77186
- @container rb-site (min-width: 640px) {
76144
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
76145
+ text-align: left;
76146
+ }
76147
+
76148
+ @container rb-site (max-width: 767px) {
77187
76149
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77188
- :where(.theme-scope)
77189
- :where(
77190
- [data-block='event-registration'],
77191
- [data-block='course-registration']
77192
- )
77193
- .er-whole-series-step-label {
77194
- display: block;
76150
+ :where(.theme-scope) .newsletter-editorial-split {
76151
+ grid-template-columns: minmax(0, 1fr);
76152
+ gap: 2rem;
77195
76153
  }
77196
76154
  }
77197
76155
  }
77198
76156
 
77199
- :where(.theme-scope)
77200
- :where([data-block='event-registration'], [data-block='course-registration'])
77201
- .er-whole-series-step-label--active {
77202
- color: var(--er-on-surface);
77203
- font-weight: 600;
77204
- }
77205
-
77206
- :where(.theme-scope)
77207
- :where([data-block='event-registration'], [data-block='course-registration'])
77208
- .er-whole-series-step-connector {
77209
- flex: 1;
77210
- height: 2px;
77211
- background: var(--er-step-connector);
77212
- min-width: 1rem;
77213
- }
76157
+ /* =============================================================================
76158
+ * Success State
76159
+ * =============================================================================
76160
+ */
77214
76161
 
77215
- :where(.theme-scope)
77216
- :where([data-block='event-registration'], [data-block='course-registration'])
77217
- .er-whole-series-step-connector--completed {
77218
- background: var(--er-step-completed);
76162
+ :where(.theme-scope) .newsletter-success {
76163
+ text-align: center;
77219
76164
  }
77220
76165
 
77221
- :where(.theme-scope)
77222
- :where([data-block='event-registration'], [data-block='course-registration'])
77223
- .er-whole-series-step-check {
77224
- width: 0.875rem;
77225
- height: 0.875rem;
76166
+ :where(.theme-scope) .newsletter-success .fb-success {
76167
+ padding: 1rem 1.5rem;
76168
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
76169
+ border-radius: var(--radius-md, 0.5rem);
76170
+ color: rgb(var(--tb-text));
77226
76171
  }
77227
76172
 
77228
76173
  /* =============================================================================
77229
- * Lists
76174
+ * Block: Contact + Newsletter
77230
76175
  * =============================================================================
77231
76176
  */
77232
- :where(.theme-scope)
77233
- :where([data-block='event-registration'], [data-block='course-registration'])
77234
- .er-whole-series-run-list {
76177
+
76178
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
77235
76179
  display: grid;
77236
- gap: 1rem;
76180
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
76181
+ gap: clamp(2.5rem, 6vw, 4rem);
76182
+ align-items: start;
77237
76183
  }
77238
76184
 
77239
- /* =============================================================================
77240
- * Run cards
77241
- * =============================================================================
77242
- */
77243
- :where(.theme-scope)
77244
- :where([data-block='event-registration'], [data-block='course-registration'])
77245
- .er-whole-series-run-card {
77246
- border-radius: var(--rb-block-radius);
77247
- border: 1px solid var(--er-border);
77248
- padding: 1rem;
77249
- background: rgb(var(--tb-background));
77250
- cursor: pointer;
77251
- transition:
77252
- border-color var(--rb-block-transition) ease,
77253
- transform var(--rb-block-transition) ease;
76185
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
76186
+ min-width: 0;
77254
76187
  }
77255
76188
 
77256
- :where(.theme-scope)
77257
- :where([data-block='event-registration'], [data-block='course-registration'])
77258
- .er-whole-series-run-card:hover {
77259
- border-color: var(--er-border-hover);
77260
- transform: translateY(-1px);
76189
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
76190
+ margin-bottom: 1.5rem;
77261
76191
  }
77262
76192
 
77263
- :where(.theme-scope)
77264
- :where([data-block='event-registration'], [data-block='course-registration'])
77265
- .er-whole-series-run-card:focus-visible {
77266
- outline: 2px solid var(--er-focus-ring);
77267
- outline-offset: 2px;
76193
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
76194
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
76195
+ margin: 0 0 0.75rem;
77268
76196
  }
77269
76197
 
77270
- :where(.theme-scope)
77271
- :where([data-block='event-registration'], [data-block='course-registration'])
77272
- .er-whole-series-run-card--selected {
77273
- border-color: var(--er-border-selected);
77274
- box-shadow: 0 0 0 3px var(--er-focus-ring);
76198
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
76199
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
76200
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
77275
76201
  }
77276
76202
 
77277
- :where(.theme-scope)
77278
- :where([data-block='event-registration'], [data-block='course-registration'])
77279
- .er-whole-series-run-card__title {
77280
- margin: 0 0 0.25rem 0;
77281
- font-weight: 700;
77282
- font-size: 1.125rem;
76203
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
76204
+ display: flex;
76205
+ flex-direction: column;
76206
+ align-items: flex-start;
77283
76207
  }
77284
76208
 
77285
- :where(.theme-scope)
77286
- :where([data-block='event-registration'], [data-block='course-registration'])
77287
- .er-whole-series-run-card__status {
77288
- margin: 0.25rem 0 0 0;
77289
- opacity: 0.8;
76209
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
76210
+ max-width: none;
76211
+ margin-left: 0;
76212
+ margin-right: 0;
77290
76213
  }
77291
76214
 
77292
- :where(.theme-scope)
77293
- :where([data-block='event-registration'], [data-block='course-registration'])
77294
- .er-whole-series-run-card__sessions,
77295
- :where(.theme-scope)
77296
- :where([data-block='event-registration'], [data-block='course-registration'])
77297
- .er-whole-series-run-card__price,
77298
- :where(.theme-scope)
77299
- :where([data-block='event-registration'], [data-block='course-registration'])
77300
- .er-whole-series-run-card__capacity,
77301
- :where(.theme-scope)
77302
- :where([data-block='event-registration'], [data-block='course-registration'])
77303
- .er-whole-series-run-card__venue {
77304
- margin: 0.25rem 0 0 0;
77305
- opacity: 0.85;
76215
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
76216
+ text-align: left;
77306
76217
  }
77307
76218
 
77308
- /* =============================================================================
77309
- * Capacity Badges
77310
- * =============================================================================
77311
- */
77312
- :where(.theme-scope)
77313
- :where([data-block='event-registration'], [data-block='course-registration'])
77314
- .er-whole-series-capacity-badge {
77315
- display: inline-block;
77316
- padding: 0.125rem 0.5rem;
77317
- border-radius: 9999px;
77318
- font-size: 0.75rem;
77319
- font-weight: 500;
76219
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
76220
+ display: flex;
76221
+ flex-direction: column;
76222
+ gap: 1rem;
77320
76223
  }
77321
76224
 
77322
- :where(.theme-scope)
77323
- :where([data-block='event-registration'], [data-block='course-registration'])
77324
- .er-whole-series-capacity-badge--available {
77325
- background: var(--er-capacity-available-bg);
77326
- color: var(--er-capacity-available-text);
77327
- }
77328
-
77329
- :where(.theme-scope)
77330
- :where([data-block='event-registration'], [data-block='course-registration'])
77331
- .er-whole-series-capacity-badge--low {
77332
- background: var(--er-capacity-low-bg);
77333
- color: var(--er-capacity-low-text);
77334
- }
77335
-
77336
- :where(.theme-scope)
77337
- :where([data-block='event-registration'], [data-block='course-registration'])
77338
- .er-whole-series-capacity-badge--soldout {
77339
- background: var(--er-capacity-soldout-bg);
77340
- color: var(--er-capacity-soldout-text);
77341
- }
77342
-
77343
- /* =============================================================================
77344
- * Summary + Details
77345
- * =============================================================================
77346
- */
77347
- :where(.theme-scope)
77348
- :where([data-block='event-registration'], [data-block='course-registration'])
77349
- .er-whole-series-details {
77350
- display: grid;
77351
- gap: 1rem;
77352
- }
77353
-
77354
- :where(.theme-scope)
77355
- :where([data-block='event-registration'], [data-block='course-registration'])
77356
- .er-whole-series-summary {
77357
- border-radius: var(--rb-block-radius);
77358
- border: 1px solid var(--er-summary-border);
77359
- padding: 1rem;
77360
- background: var(--er-summary-bg);
77361
- }
77362
-
77363
- :where(.theme-scope)
77364
- :where([data-block='event-registration'], [data-block='course-registration'])
77365
- .er-whole-series-summary__title {
77366
- margin: 0;
77367
- font-size: 1.25rem;
77368
- font-weight: 800;
77369
- }
77370
-
77371
- :where(.theme-scope)
77372
- :where([data-block='event-registration'], [data-block='course-registration'])
77373
- .er-whole-series-summary__sessions-title {
77374
- margin: 0.75rem 0 0.5rem 0;
77375
- font-weight: 700;
77376
- }
77377
-
77378
- :where(.theme-scope)
77379
- :where([data-block='event-registration'], [data-block='course-registration'])
77380
- .er-whole-series-summary__sessions-list {
77381
- list-style: none;
77382
- padding: 0;
77383
- margin: 0;
77384
- display: grid;
77385
- gap: 0.35rem;
77386
- }
77387
-
77388
- :where(.theme-scope)
77389
- :where([data-block='event-registration'], [data-block='course-registration'])
77390
- .er-whole-series-summary__session {
77391
- opacity: 0.9;
77392
- }
77393
-
77394
- :where(.theme-scope)
77395
- :where([data-block='event-registration'], [data-block='course-registration'])
77396
- .er-whole-series-summary__venue,
77397
- :where(.theme-scope)
77398
- :where([data-block='event-registration'], [data-block='course-registration'])
77399
- .er-whole-series-summary__price,
77400
- :where(.theme-scope)
77401
- :where([data-block='event-registration'], [data-block='course-registration'])
77402
- .er-whole-series-summary__membership {
77403
- margin: 0.5rem 0 0 0;
77404
- opacity: 0.9;
77405
- }
77406
-
77407
- /* =============================================================================
77408
- * Form
77409
- * =============================================================================
77410
- */
77411
- :where(.theme-scope)
77412
- :where([data-block='event-registration'], [data-block='course-registration'])
77413
- .er-whole-series-form {
77414
- display: grid;
77415
- gap: 1rem;
77416
- }
77417
-
77418
- :where(.theme-scope)
77419
- :where([data-block='event-registration'], [data-block='course-registration'])
77420
- .er-whole-series-form__field {
77421
- display: grid;
77422
- gap: 0.35rem;
77423
- }
77424
-
77425
- :where(.theme-scope)
77426
- :where([data-block='event-registration'], [data-block='course-registration'])
77427
- .er-whole-series-form__label {
77428
- font-size: 0.875rem;
77429
- font-weight: 600;
77430
- }
77431
-
77432
- :where(.theme-scope)
77433
- :where([data-block='event-registration'], [data-block='course-registration'])
77434
- .er-whole-series-form__label--required::after {
77435
- content: ' *';
77436
- color: var(--er-required);
77437
- }
77438
-
77439
- :where(.theme-scope)
77440
- :where([data-block='event-registration'], [data-block='course-registration'])
77441
- .er-whole-series-form__input {
77442
- border-radius: calc(var(--rb-block-radius) * 0.6);
77443
- border: 1px solid var(--er-border);
77444
- padding: 0.6rem 0.75rem;
77445
- background: rgb(var(--tb-background));
77446
- color: rgb(var(--tb-foreground));
77447
- }
77448
-
77449
- :where(.theme-scope)
77450
- :where([data-block='event-registration'], [data-block='course-registration'])
77451
- .er-whole-series-form__textarea {
77452
- border-radius: calc(var(--rb-block-radius) * 0.6);
77453
- border: 1px solid var(--er-border);
77454
- padding: 0.6rem 0.75rem;
77455
- background: rgb(var(--tb-background));
77456
- color: rgb(var(--tb-foreground));
77457
- resize: vertical;
77458
- }
77459
-
77460
- :where(.theme-scope)
77461
- :where([data-block='event-registration'], [data-block='course-registration'])
77462
- .er-whole-series-form__input:focus,
77463
- :where(.theme-scope)
77464
- :where([data-block='event-registration'], [data-block='course-registration'])
77465
- .er-whole-series-form__textarea:focus {
77466
- outline: 2px solid var(--er-focus-ring);
77467
- outline-offset: 2px;
77468
- }
77469
-
77470
- :where(.theme-scope)
77471
- :where([data-block='event-registration'], [data-block='course-registration'])
77472
- .er-whole-series-form__input--error,
77473
- :where(.theme-scope)
77474
- :where([data-block='event-registration'], [data-block='course-registration'])
77475
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
77476
- border-color: var(--er-border-error);
77477
- }
77478
-
77479
- :where(.theme-scope)
77480
- :where([data-block='event-registration'], [data-block='course-registration'])
77481
- .er-whole-series-form__error {
77482
- font-size: 0.875rem;
77483
- color: var(--er-error-text);
77484
- }
77485
-
77486
- :where(.theme-scope)
77487
- :where([data-block='event-registration'], [data-block='course-registration'])
77488
- .er-whole-series-form__hint {
77489
- font-size: 0.875rem;
77490
- opacity: 0.7;
77491
- }
77492
-
77493
- /* Logged-in user hint with logout link */
77494
- :where(.theme-scope)
77495
- :where([data-block='event-registration'], [data-block='course-registration'])
77496
- .er-whole-series-logged-in-hint {
77497
- font-size: 0.875rem;
77498
- opacity: 0.7;
77499
- margin: 0.25rem 0 0 0;
77500
- }
77501
-
77502
- :where(.theme-scope)
77503
- :where([data-block='event-registration'], [data-block='course-registration'])
77504
- .er-whole-series-link {
77505
- background: none;
77506
- border: none;
77507
- padding: 0;
77508
- font-size: inherit;
77509
- color: rgb(var(--tb-primary));
77510
- cursor: pointer;
77511
- text-decoration: underline;
77512
- text-underline-offset: 2px;
77513
- }
77514
-
77515
- :where(.theme-scope)
77516
- :where([data-block='event-registration'], [data-block='course-registration'])
77517
- .er-whole-series-link:hover {
77518
- text-decoration: none;
77519
- }
77520
-
77521
- /* =============================================================================
77522
- * Actions
77523
- * =============================================================================
77524
- */
77525
- :where(.theme-scope)
77526
- :where([data-block='event-registration'], [data-block='course-registration'])
77527
- .er-whole-series-actions {
77528
- display: flex;
77529
- align-items: center;
77530
- justify-content: space-between;
77531
- gap: 0.75rem;
77532
- margin-top: 0.25rem;
77533
- }
77534
-
77535
- :where(.theme-scope)
77536
- :where([data-block='event-registration'], [data-block='course-registration'])
77537
- .er-whole-series-back-btn {
77538
- border: 0;
77539
- background: transparent;
77540
- color: var(--er-on-surface);
77541
- opacity: 0.8;
77542
- padding: 0.25rem 0.25rem;
77543
- cursor: pointer;
77544
- }
77545
-
77546
- :where(.theme-scope)
77547
- :where([data-block='event-registration'], [data-block='course-registration'])
77548
- .er-whole-series-back-btn:hover {
77549
- opacity: 1;
77550
- text-decoration: underline;
77551
- }
77552
-
77553
- /* =============================================================================
77554
- * Payment Options
77555
- * =============================================================================
77556
- */
77557
- :where(.theme-scope)
77558
- :where([data-block='event-registration'], [data-block='course-registration'])
77559
- .er-whole-series-payment__options {
77560
- display: grid;
77561
- gap: 0.5rem;
77562
- }
77563
-
77564
- :where(.theme-scope)
77565
- :where([data-block='event-registration'], [data-block='course-registration'])
77566
- .er-whole-series-payment__option {
77567
- display: flex;
77568
- align-items: center;
77569
- gap: 0.5rem;
77570
- }
77571
-
77572
- /* =============================================================================
77573
- * Payment Tiles (Card Grid)
77574
- * =============================================================================
77575
- */
77576
- :where(.theme-scope)
77577
- :where([data-block='event-registration'], [data-block='course-registration'])
77578
- .er-whole-series-payment-tiles {
77579
- display: grid;
77580
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
77581
- gap: 0.75rem;
77582
- }
77583
-
77584
- :where(.theme-scope)
77585
- :where([data-block='event-registration'], [data-block='course-registration'])
77586
- .er-whole-series-payment-tile {
77587
- border-radius: var(--rb-block-radius);
77588
- border: 1px solid var(--er-payment-border);
77589
- padding: 1rem;
77590
- background: rgb(var(--tb-background));
77591
- cursor: pointer;
77592
- transition:
77593
- border-color 0.15s ease,
77594
- box-shadow 0.15s ease,
77595
- background-color 0.15s ease;
77596
- position: relative;
77597
- }
77598
-
77599
- :where(.theme-scope)
77600
- :where([data-block='event-registration'], [data-block='course-registration'])
77601
- .er-whole-series-payment-tile:hover {
77602
- border-color: var(--er-payment-border-hover);
77603
- }
77604
-
77605
- :where(.theme-scope)
77606
- :where([data-block='event-registration'], [data-block='course-registration'])
77607
- .er-whole-series-payment-tile:focus-visible {
77608
- outline: 2px solid var(--er-focus-ring);
77609
- outline-offset: 2px;
77610
- }
77611
-
77612
- :where(.theme-scope)
77613
- :where([data-block='event-registration'], [data-block='course-registration'])
77614
- .er-whole-series-payment-tile--selected {
77615
- border-color: var(--er-payment-border-selected);
77616
- background: var(--er-payment-bg-selected);
77617
- box-shadow: 0 0 0 3px var(--er-focus-ring);
77618
- }
77619
-
77620
- :where(.theme-scope)
77621
- :where([data-block='event-registration'], [data-block='course-registration'])
77622
- .er-whole-series-payment-tile--upsell {
77623
- border-style: dashed;
77624
- }
77625
-
77626
- :where(.theme-scope)
77627
- :where([data-block='event-registration'], [data-block='course-registration'])
77628
- .er-whole-series-payment-tile__header {
77629
- display: flex;
77630
- align-items: flex-start;
77631
- justify-content: space-between;
77632
- gap: 0.5rem;
77633
- }
77634
-
77635
- :where(.theme-scope)
77636
- :where([data-block='event-registration'], [data-block='course-registration'])
77637
- .er-whole-series-payment-tile__name {
77638
- margin: 0;
77639
- font-weight: 600;
77640
- font-size: 1rem;
77641
- }
77642
-
77643
- :where(.theme-scope)
77644
- :where([data-block='event-registration'], [data-block='course-registration'])
77645
- .er-whole-series-payment-tile__description {
77646
- margin: 0.25rem 0 0 0;
77647
- font-size: 0.875rem;
77648
- opacity: 0.7;
77649
- }
77650
-
77651
- :where(.theme-scope)
77652
- :where([data-block='event-registration'], [data-block='course-registration'])
77653
- .er-whole-series-payment-tile__price {
77654
- font-weight: 600;
77655
- font-size: 0.875rem;
77656
- white-space: nowrap;
77657
- }
77658
-
77659
- :where(.theme-scope)
77660
- :where([data-block='event-registration'], [data-block='course-registration'])
77661
- .er-whole-series-payment-tile__badge {
77662
- display: inline-block;
77663
- padding: 0.125rem 0.5rem;
77664
- border-radius: 9999px;
77665
- font-size: 0.75rem;
77666
- font-weight: 500;
77667
- margin-top: 0.5rem;
77668
- }
77669
-
77670
- /* Checkmark indicator on selected tile */
77671
- :where(.theme-scope)
77672
- :where([data-block='event-registration'], [data-block='course-registration'])
77673
- .er-whole-series-payment-tile__check {
77674
- position: absolute;
77675
- top: 0.5rem;
77676
- right: 0.5rem;
77677
- width: 1.25rem;
77678
- height: 1.25rem;
77679
- border-radius: 9999px;
77680
- background: var(--er-check-bg);
77681
- color: var(--er-check-text);
77682
- display: flex;
77683
- align-items: center;
77684
- justify-content: center;
77685
- opacity: 0;
77686
- transition: opacity 0.15s ease;
77687
- }
77688
-
77689
- :where(.theme-scope)
77690
- :where([data-block='event-registration'], [data-block='course-registration'])
77691
- .er-whole-series-payment-tile--selected
77692
- .er-whole-series-payment-tile__check {
77693
- opacity: 1;
77694
- }
77695
-
77696
- /* =============================================================================
77697
- * Booking Mode Step
77698
- * =============================================================================
77699
- */
77700
- :where(.theme-scope)
77701
- :where([data-block='event-registration'], [data-block='course-registration'])
77702
- .er-whole-series-booking-mode {
77703
- display: grid;
77704
- gap: 1rem;
77705
- }
77706
-
77707
- :where(.theme-scope)
77708
- :where([data-block='event-registration'], [data-block='course-registration'])
77709
- .er-whole-series-booking-mode__title {
77710
- margin: 0;
77711
- font-size: var(--er-step-title-size);
77712
- font-weight: 700;
77713
- }
77714
-
77715
- :where(.theme-scope)
77716
- :where([data-block='event-registration'], [data-block='course-registration'])
77717
- .er-whole-series-booking-mode__subtitle {
77718
- margin: 0.25rem 0 0 0;
77719
- opacity: 0.7;
77720
- }
77721
-
77722
- :where(.theme-scope)
77723
- :where([data-block='event-registration'], [data-block='course-registration'])
77724
- .er-whole-series-booking-mode__link {
77725
- margin-top: 0.5rem;
77726
- font-size: 0.875rem;
77727
- }
77728
-
77729
- :where(.theme-scope)
77730
- :where([data-block='event-registration'], [data-block='course-registration'])
77731
- .er-whole-series-booking-mode__link
77732
- a {
77733
- color: rgb(var(--tb-primary));
77734
- text-decoration: underline;
77735
- cursor: pointer;
77736
- }
77737
-
77738
- :where(.theme-scope)
77739
- :where([data-block='event-registration'], [data-block='course-registration'])
77740
- .er-whole-series-booking-mode__link
77741
- a:hover {
77742
- text-decoration: none;
77743
- }
77744
-
77745
- /* =============================================================================
77746
- * Membership Hero
77747
- * =============================================================================
77748
- */
77749
- :where(.theme-scope)
77750
- :where([data-block='event-registration'], [data-block='course-registration'])
77751
- .er-whole-series-membership-hero {
77752
- border-radius: var(--rb-block-radius);
77753
- background: var(--er-success-bg);
77754
- border: 1px solid rgba(var(--tb-success), 0.2);
77755
- padding: 1.5rem;
77756
- text-align: center;
77757
- }
77758
-
77759
- :where(.theme-scope)
77760
- :where([data-block='event-registration'], [data-block='course-registration'])
77761
- .er-whole-series-membership-hero__icon {
77762
- font-size: 2rem;
77763
- margin-bottom: 0.75rem;
77764
- }
77765
-
77766
- :where(.theme-scope)
77767
- :where([data-block='event-registration'], [data-block='course-registration'])
77768
- .er-whole-series-membership-hero__title {
77769
- margin: 0;
77770
- font-size: 1.25rem;
77771
- font-weight: 700;
77772
- color: var(--er-success-text);
77773
- }
77774
-
77775
- :where(.theme-scope)
77776
- :where([data-block='event-registration'], [data-block='course-registration'])
77777
- .er-whole-series-membership-hero__subtitle {
77778
- margin: 0.25rem 0 0 0;
77779
- font-size: 0.875rem;
77780
- opacity: 0.8;
77781
- }
77782
-
77783
- /* =============================================================================
77784
- * Portal Auth Sidebar
77785
- * =============================================================================
77786
- */
77787
- :where(.theme-scope)
77788
- :where([data-block='event-registration'], [data-block='course-registration'])
77789
- .er-whole-series-portal-sidebar {
77790
- border-radius: var(--rb-block-radius);
77791
- border: 1px solid var(--er-border);
77792
- padding: 1.25rem;
77793
- background: rgb(var(--tb-surface));
77794
- color: var(--er-on-surface);
77795
- }
77796
-
77797
- :where(.theme-scope)
77798
- :where([data-block='event-registration'], [data-block='course-registration'])
77799
- .er-whole-series-portal-sidebar__icon {
77800
- font-size: 1.5rem;
77801
- margin-bottom: 0.5rem;
77802
- }
77803
-
77804
- :where(.theme-scope)
77805
- :where([data-block='event-registration'], [data-block='course-registration'])
77806
- .er-whole-series-portal-sidebar__title {
77807
- margin: 0;
77808
- font-size: 1rem;
77809
- font-weight: 600;
77810
- }
77811
-
77812
- :where(.theme-scope)
77813
- :where([data-block='event-registration'], [data-block='course-registration'])
77814
- .er-whole-series-portal-sidebar__text {
77815
- margin: 0.5rem 0 0 0;
77816
- font-size: 0.875rem;
77817
- opacity: 0.8;
77818
- }
77819
-
77820
- :where(.theme-scope)
77821
- :where([data-block='event-registration'], [data-block='course-registration'])
77822
- .er-whole-series-portal-sidebar__action {
77823
- margin-top: 1rem;
77824
- }
77825
-
77826
- :where(.theme-scope)
77827
- :where([data-block='event-registration'], [data-block='course-registration'])
77828
- .er-whole-series-portal-sidebar__link {
77829
- color: rgb(var(--tb-primary));
77830
- cursor: pointer;
77831
- text-decoration: underline;
77832
- font-size: 0.875rem;
77833
- }
77834
-
77835
- :where(.theme-scope)
77836
- :where([data-block='event-registration'], [data-block='course-registration'])
77837
- .er-whole-series-portal-sidebar__link:hover {
77838
- text-decoration: none;
77839
- }
77840
-
77841
- /* =============================================================================
77842
- * Modal (for Magic Link)
77843
- * =============================================================================
77844
- */
77845
- :where(.theme-scope)
77846
- :where([data-block='event-registration'], [data-block='course-registration'])
77847
- .er-whole-series-modal-overlay {
77848
- position: fixed;
77849
- inset: 0;
77850
- background: rgba(var(--tb-scrim), 0.5);
77851
- display: flex;
77852
- align-items: center;
77853
- justify-content: center;
77854
- z-index: 100;
77855
- animation: er-whole-series-fade-in 0.15s ease;
77856
- }
77857
-
77858
- :where(.theme-scope)
77859
- :where([data-block='event-registration'], [data-block='course-registration'])
77860
- .er-whole-series-modal {
77861
- background: rgb(var(--tb-surface));
77862
- color: var(--er-on-surface);
77863
- border-radius: var(--rb-block-radius);
77864
- padding: 1.5rem;
77865
- max-width: 28rem;
77866
- width: calc(100% - 2rem);
77867
- position: relative;
77868
- animation: er-whole-series-slide-up 0.2s ease;
77869
- }
77870
-
77871
- :where(.theme-scope)
77872
- :where([data-block='event-registration'], [data-block='course-registration'])
77873
- .er-whole-series-modal-close {
77874
- position: absolute;
77875
- top: 0.75rem;
77876
- right: 0.75rem;
77877
- background: transparent;
77878
- border: 0;
77879
- padding: 0.25rem;
77880
- cursor: pointer;
77881
- opacity: 0.6;
77882
- transition: opacity 0.15s ease;
77883
- }
77884
-
77885
- :where(.theme-scope)
77886
- :where([data-block='event-registration'], [data-block='course-registration'])
77887
- .er-whole-series-modal-close:hover {
77888
- opacity: 1;
77889
- }
77890
-
77891
- @keyframes er-whole-series-fade-in {
77892
- from {
77893
- opacity: 0;
77894
- }
77895
- to {
77896
- opacity: 1;
77897
- }
77898
- }
77899
-
77900
- @keyframes er-whole-series-slide-up {
77901
- from {
77902
- opacity: 0;
77903
- transform: translateY(10px);
77904
- }
77905
- to {
77906
- opacity: 1;
77907
- transform: translateY(0);
77908
- }
77909
- }
77910
-
77911
- /* Reduced motion */
77912
- @media (prefers-reduced-motion: reduce) {
77913
- :where(.theme-scope)
77914
- :where(
77915
- [data-block='event-registration'],
77916
- [data-block='course-registration']
77917
- )
77918
- .er-whole-series-modal-overlay,
77919
- :where(.theme-scope)
77920
- :where(
77921
- [data-block='event-registration'],
77922
- [data-block='course-registration']
77923
- )
77924
- .er-whole-series-modal {
77925
- animation: none;
77926
- }
77927
- }
77928
-
77929
- /* =============================================================================
77930
- * Center States
77931
- * =============================================================================
77932
- */
77933
- :where(.theme-scope)
77934
- :where([data-block='event-registration'], [data-block='course-registration'])
77935
- .er-whole-series-center {
77936
- display: grid;
77937
- place-items: center;
77938
- gap: 0.75rem;
77939
- padding: 2rem 0;
77940
- }
77941
-
77942
- /* =============================================================================
77943
- * Success/Waitlist/Error States
77944
- * =============================================================================
77945
- */
77946
- :where(.theme-scope)
77947
- :where([data-block='event-registration'], [data-block='course-registration'])
77948
- .er-whole-series-success,
77949
- :where(.theme-scope)
77950
- :where([data-block='event-registration'], [data-block='course-registration'])
77951
- .er-whole-series-waitlist,
77952
- :where(.theme-scope)
77953
- :where([data-block='event-registration'], [data-block='course-registration'])
77954
- .er-whole-series-error,
77955
- :where(.theme-scope)
77956
- :where([data-block='event-registration'], [data-block='course-registration'])
77957
- .er-whole-series-payment-failed {
77958
- text-align: center;
77959
- padding: 2rem 1rem;
77960
- }
77961
-
77962
- /* State icon color variants (layout from registration-surface.css) */
77963
- :where(.theme-scope)
77964
- :where([data-block='event-registration'], [data-block='course-registration'])
77965
- .rb-state-icon--success {
77966
- background: var(--er-success-bg);
77967
- color: var(--er-success-text);
77968
- }
77969
-
77970
- :where(.theme-scope)
77971
- :where([data-block='event-registration'], [data-block='course-registration'])
77972
- .rb-state-icon--error {
77973
- background: var(--er-error-bg);
77974
- color: var(--er-error-text);
77975
- }
77976
-
77977
- :where(.theme-scope)
77978
- :where([data-block='event-registration'], [data-block='course-registration'])
77979
- .rb-state-icon--waitlist,
77980
- :where(.theme-scope)
77981
- :where([data-block='event-registration'], [data-block='course-registration'])
77982
- .rb-state-icon--warning {
77983
- background: var(--er-waitlist-bg);
77984
- color: var(--er-waitlist-text);
77985
- }
77986
-
77987
- :where(.theme-scope)
77988
- :where([data-block='event-registration'], [data-block='course-registration'])
77989
- .er-whole-series-success__title,
77990
- :where(.theme-scope)
77991
- :where([data-block='event-registration'], [data-block='course-registration'])
77992
- .er-whole-series-waitlist__title,
77993
- :where(.theme-scope)
77994
- :where([data-block='event-registration'], [data-block='course-registration'])
77995
- .er-whole-series-error__title,
77996
- :where(.theme-scope)
77997
- :where([data-block='event-registration'], [data-block='course-registration'])
77998
- .er-whole-series-payment-failed__title {
77999
- margin: 0.75rem 0 0.5rem 0;
78000
- font-size: 1.125rem;
78001
- font-weight: 700;
78002
- }
78003
-
78004
- :where(.theme-scope)
78005
- :where([data-block='event-registration'], [data-block='course-registration'])
78006
- .er-whole-series-success__message,
78007
- :where(.theme-scope)
78008
- :where([data-block='event-registration'], [data-block='course-registration'])
78009
- .er-whole-series-waitlist__message,
78010
- :where(.theme-scope)
78011
- :where([data-block='event-registration'], [data-block='course-registration'])
78012
- .er-whole-series-error__message,
78013
- :where(.theme-scope)
78014
- :where([data-block='event-registration'], [data-block='course-registration'])
78015
- .er-whole-series-payment-failed__message {
78016
- margin: 0;
78017
- opacity: 0.7;
78018
- }
78019
-
78020
- :where(.theme-scope)
78021
- :where([data-block='event-registration'], [data-block='course-registration'])
78022
- .er-whole-series-success__membership {
78023
- margin-top: 0.5rem;
78024
- font-size: 0.875rem;
78025
- color: var(--er-success-text);
78026
- }
78027
-
78028
- :where(.theme-scope)
78029
- :where([data-block='event-registration'], [data-block='course-registration'])
78030
- .er-whole-series-error__retry,
78031
- :where(.theme-scope)
78032
- :where([data-block='event-registration'], [data-block='course-registration'])
78033
- .er-whole-series-payment-failed__retry {
78034
- margin-top: 1rem;
78035
- }
78036
-
78037
- /* =============================================================================
78038
- * Discount Code Section
78039
- * =============================================================================
78040
- */
78041
- :where(.theme-scope)
78042
- :where([data-block='event-registration'], [data-block='course-registration'])
78043
- .er-whole-series-discount {
78044
- margin-top: 0.5rem;
78045
- }
78046
-
78047
- :where(.theme-scope)
78048
- :where([data-block='event-registration'], [data-block='course-registration'])
78049
- .er-whole-series-discount__form {
78050
- display: grid;
78051
- gap: 0.5rem;
78052
- }
78053
-
78054
- :where(.theme-scope)
78055
- :where([data-block='event-registration'], [data-block='course-registration'])
78056
- .er-whole-series-discount__toggle {
78057
- background: transparent;
78058
- border: 0;
78059
- padding: 0;
78060
- color: rgb(var(--tb-primary));
78061
- cursor: pointer;
78062
- font-size: 0.875rem;
78063
- text-decoration: underline;
78064
- }
78065
-
78066
- :where(.theme-scope)
78067
- :where([data-block='event-registration'], [data-block='course-registration'])
78068
- .er-whole-series-discount__toggle:hover {
78069
- text-decoration: none;
78070
- }
78071
-
78072
- :where(.theme-scope)
78073
- :where([data-block='event-registration'], [data-block='course-registration'])
78074
- .er-whole-series-discount__label {
78075
- font-size: 0.875rem;
78076
- font-weight: 600;
78077
- }
78078
-
78079
- :where(.theme-scope)
78080
- :where([data-block='event-registration'], [data-block='course-registration'])
78081
- .er-whole-series-discount__row {
78082
- display: flex;
78083
- gap: 0.5rem;
78084
- }
78085
-
78086
- :where(.theme-scope)
78087
- :where([data-block='event-registration'], [data-block='course-registration'])
78088
- .er-whole-series-discount__input {
78089
- flex: 1;
78090
- border-radius: calc(var(--rb-block-radius) * 0.6);
78091
- border: 1px solid var(--er-border);
78092
- padding: 0.5rem 0.75rem;
78093
- background: rgb(var(--tb-background));
78094
- color: rgb(var(--tb-foreground));
78095
- font-size: 0.875rem;
78096
- }
78097
-
78098
- :where(.theme-scope)
78099
- :where([data-block='event-registration'], [data-block='course-registration'])
78100
- .er-whole-series-discount__input:focus {
78101
- outline: 2px solid var(--er-focus-ring);
78102
- outline-offset: 2px;
78103
- }
78104
-
78105
- :where(.theme-scope)
78106
- :where([data-block='event-registration'], [data-block='course-registration'])
78107
- .er-whole-series-discount__remove {
78108
- background: transparent;
78109
- border: 0;
78110
- padding: 0.25rem;
78111
- cursor: pointer;
78112
- opacity: 0.6;
78113
- }
78114
-
78115
- :where(.theme-scope)
78116
- :where([data-block='event-registration'], [data-block='course-registration'])
78117
- .er-whole-series-discount__apply {
78118
- background: transparent;
78119
- border: 0;
78120
- padding: 0.25rem;
78121
- cursor: pointer;
78122
- opacity: 0.8;
78123
- }
78124
-
78125
- :where(.theme-scope)
78126
- :where([data-block='event-registration'], [data-block='course-registration'])
78127
- .er-whole-series-discount__remove:hover {
78128
- opacity: 1;
78129
- }
78130
-
78131
- :where(.theme-scope)
78132
- :where([data-block='event-registration'], [data-block='course-registration'])
78133
- .er-whole-series-discount__apply:hover {
78134
- opacity: 1;
78135
- }
78136
-
78137
- :where(.theme-scope)
78138
- :where([data-block='event-registration'], [data-block='course-registration'])
78139
- .er-whole-series-discount__hint {
78140
- margin: 0;
78141
- font-size: 0.875rem;
78142
- opacity: 0.7;
78143
- }
78144
-
78145
- :where(.theme-scope)
78146
- :where([data-block='event-registration'], [data-block='course-registration'])
78147
- .er-whole-series-discount__feedback {
78148
- margin: 0;
78149
- font-size: 0.875rem;
78150
- }
78151
-
78152
- /* =============================================================================
78153
- * Altcha (Spam Protection)
78154
- * =============================================================================
78155
- */
78156
- :where(.theme-scope)
78157
- :where([data-block='event-registration'], [data-block='course-registration'])
78158
- .er-whole-series-altcha {
78159
- margin-top: 1rem;
78160
- }
78161
-
78162
- /* =============================================================================
78163
- * Magic Link Form
78164
- * =============================================================================
78165
- */
78166
- :where(.theme-scope)
78167
- :where([data-block='event-registration'], [data-block='course-registration'])
78168
- .er-whole-series-magic-link-form {
78169
- display: flex;
78170
- flex-direction: column;
78171
- gap: 0.75rem;
78172
- }
78173
-
78174
- :where(.theme-scope)
78175
- :where([data-block='event-registration'], [data-block='course-registration'])
78176
- .er-whole-series-magic-link-title {
78177
- margin: 0;
78178
- font-size: 1.25rem;
78179
- font-weight: 700;
78180
- }
78181
-
78182
- :where(.theme-scope)
78183
- :where([data-block='event-registration'], [data-block='course-registration'])
78184
- .er-whole-series-magic-link-success {
78185
- display: flex;
78186
- flex-direction: column;
78187
- gap: 0.75rem;
78188
- }
78189
-
78190
- :where(.theme-scope)
78191
- :where([data-block='event-registration'], [data-block='course-registration'])
78192
- .er-whole-series-portal-auth-text {
78193
- margin: 0;
78194
- font-size: 0.875rem;
78195
- opacity: 0.8;
78196
- }
78197
-
78198
- :where(.theme-scope)
78199
- :where([data-block='event-registration'], [data-block='course-registration'])
78200
- .er-whole-series-portal-auth-text--success {
78201
- color: var(--er-success-text);
78202
- }
78203
-
78204
- :where(.theme-scope)
78205
- :where([data-block='event-registration'], [data-block='course-registration'])
78206
- .er-whole-series-portal-auth-text--error {
78207
- color: var(--er-error-text);
78208
- }
78209
-
78210
- :where(.theme-scope)
78211
- :where([data-block='event-registration'], [data-block='course-registration'])
78212
- .er-whole-series-modal-btn {
78213
- border-radius: calc(var(--rb-block-radius) * 0.6);
78214
- border: 0;
78215
- padding: 0.6rem 1rem;
78216
- font-size: 0.875rem;
78217
- font-weight: 600;
78218
- cursor: pointer;
78219
- transition: opacity 0.15s ease;
78220
- background: rgb(var(--tb-primary));
78221
- color: rgb(var(--tb-primaryText, 255 255 255));
78222
- }
78223
-
78224
- :where(.theme-scope)
78225
- :where([data-block='event-registration'], [data-block='course-registration'])
78226
- .er-whole-series-modal-btn:hover {
78227
- opacity: 0.9;
78228
- }
78229
-
78230
- :where(.theme-scope)
78231
- :where([data-block='event-registration'], [data-block='course-registration'])
78232
- .er-whole-series-modal-btn:disabled {
78233
- opacity: 0.5;
78234
- cursor: not-allowed;
78235
- }
78236
-
78237
- :where(.theme-scope)
78238
- :where([data-block='event-registration'], [data-block='course-registration'])
78239
- .er-whole-series-modal-btn--secondary {
78240
- background: transparent;
78241
- color: var(--er-on-surface);
78242
- border: 1px solid var(--er-border);
78243
- }
78244
-
78245
- :where(.theme-scope)
78246
- :where([data-block='event-registration'], [data-block='course-registration'])
78247
- .er-whole-series-modal-btn--secondary:hover {
78248
- background: var(--er-on-surface-hover-bg);
78249
- }
78250
-
78251
- /* =============================================================================
78252
- * Utility Classes
78253
- * =============================================================================
78254
- */
78255
- :where(.theme-scope)
78256
- :where([data-block='event-registration'], [data-block='course-registration'])
78257
- .er-whole-series-text--muted {
78258
- opacity: 0.7;
78259
- }
78260
-
78261
- :where(.theme-scope)
78262
- :where([data-block='event-registration'], [data-block='course-registration'])
78263
- .er-whole-series-text--error {
78264
- color: var(--er-error-text);
78265
- }
78266
-
78267
- :where(.theme-scope)
78268
- :where([data-block='event-registration'], [data-block='course-registration'])
78269
- .er-whole-series-text--success {
78270
- color: var(--er-success-text);
78271
- }
78272
-
78273
- :where(.theme-scope)
78274
- :where([data-block='event-registration'], [data-block='course-registration'])
78275
- .er-whole-series-sr-only {
78276
- position: absolute;
78277
- width: 1px;
78278
- height: 1px;
78279
- padding: 0;
78280
- margin: -1px;
78281
- overflow: hidden;
78282
- clip: rect(0, 0, 0, 0);
78283
- white-space: nowrap;
78284
- border-width: 0;
78285
- }
78286
-
78287
- /* Stack utility */
78288
- :where(.theme-scope)
78289
- :where([data-block='event-registration'], [data-block='course-registration'])
78290
- .er-whole-series-stack {
78291
- display: flex;
78292
- flex-direction: column;
78293
- }
78294
-
78295
- :where(.theme-scope)
78296
- :where([data-block='event-registration'], [data-block='course-registration'])
78297
- .er-whole-series-stack--gap-sm {
78298
- gap: 0.5rem;
78299
- }
78300
-
78301
- :where(.theme-scope)
78302
- :where([data-block='event-registration'], [data-block='course-registration'])
78303
- .er-whole-series-stack--gap-md {
78304
- gap: 1rem;
78305
- }
78306
-
78307
- :where(.theme-scope)
78308
- :where([data-block='event-registration'], [data-block='course-registration'])
78309
- .er-whole-series-stack--gap-lg {
78310
- gap: 1.5rem;
78311
- }
78312
-
78313
- /* =============================================================================
78314
- * Block: Newsletter Signup
78315
- * =============================================================================
78316
- */
78317
-
78318
- /* Newsletter copy styling */
78319
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
78320
- font-size: 1.5rem;
78321
- font-weight: 600;
78322
- }
78323
-
78324
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
78325
- font-size: 1rem;
78326
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78327
- opacity: 0.85;
78328
- }
78329
-
78330
- /* Newsletter form container */
78331
- :where(.theme-scope) .newsletter-form {
78332
- width: 100%;
78333
- max-width: 32rem;
78334
- margin-left: auto;
78335
- margin-right: auto;
78336
- }
78337
-
78338
- /* Newsletter form fields container */
78339
- :where(.theme-scope) .newsletter-form-fields {
78340
- display: flex;
78341
- flex-direction: column;
78342
- gap: var(--rb-gap-sm, 0.75rem);
78343
- }
78344
-
78345
- /* Individual field styling */
78346
- :where(.theme-scope) .newsletter-field {
78347
- display: flex;
78348
- flex-direction: column;
78349
- gap: 0.25rem;
78350
- }
78351
-
78352
- /* Required indicator */
78353
- :where(.theme-scope) .newsletter-required {
78354
- color: rgb(var(--tb-primary));
78355
- margin-left: 0.125rem;
78356
- }
78357
-
78358
- /* Submit button container */
78359
- :where(.theme-scope) .newsletter-submit {
78360
- margin-top: 0.5rem;
78361
- }
78362
-
78363
- /* ALTCHA widget container */
78364
- :where(.theme-scope) .newsletter-altcha {
78365
- margin-top: 0.75rem;
78366
- display: flex;
78367
- justify-content: center;
78368
- }
78369
-
78370
- /* Privacy note */
78371
- :where(.theme-scope) .newsletter-privacy-note {
78372
- margin-top: 0.75rem;
78373
- font-size: 1rem;
78374
- line-height: 1.6;
78375
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78376
- text-align: center;
78377
- }
78378
-
78379
- /* =============================================================================
78380
- * Inline Variant - Horizontal layout
78381
- * =============================================================================
78382
- */
78383
-
78384
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78385
- flex-direction: row;
78386
- align-items: flex-end;
78387
- flex-wrap: wrap;
78388
- gap: var(--rb-gap-sm, 0.75rem);
78389
- }
78390
-
78391
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78392
- flex: 1 1 auto;
78393
- min-width: 10rem;
78394
- }
78395
-
78396
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
78397
- margin-top: 0;
78398
- flex-shrink: 0;
78399
- }
78400
-
78401
- /* Mobile fallback for inline variant */
78402
- @container rb-site (max-width: 640px) {
78403
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78404
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78405
- flex-direction: column;
78406
- }
78407
-
78408
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78409
- min-width: 100%;
78410
- }
78411
- }
78412
- }
78413
-
78414
- /* =============================================================================
78415
- * Editorial Split Variant
78416
- * =============================================================================
78417
- */
78418
-
78419
- :where(.theme-scope) .newsletter-editorial-split {
78420
- display: grid;
78421
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
78422
- gap: clamp(2.5rem, 7vw, 7rem);
78423
- align-items: center;
78424
- text-align: left;
78425
- }
78426
-
78427
- :where(.theme-scope) .newsletter-editorial-split-copy {
78428
- display: flex;
78429
- flex-direction: column;
78430
- gap: var(--rb-gap-sm, 0.75rem);
78431
- }
78432
-
78433
- :where(.theme-scope) .newsletter-editorial-split-form {
78434
- min-width: 0;
78435
- }
78436
-
78437
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
78438
- max-width: none;
78439
- margin-inline: 0;
78440
- }
78441
-
78442
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
78443
- font-size: clamp(2rem, 4vw, 3.5rem);
78444
- font-weight: 500;
78445
- }
78446
-
78447
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
78448
- text-align: left;
78449
- }
78450
-
78451
- @container rb-site (max-width: 767px) {
78452
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78453
- :where(.theme-scope) .newsletter-editorial-split {
78454
- grid-template-columns: minmax(0, 1fr);
78455
- gap: 2rem;
78456
- }
78457
- }
78458
- }
78459
-
78460
- /* =============================================================================
78461
- * Success State
78462
- * =============================================================================
78463
- */
78464
-
78465
- :where(.theme-scope) .newsletter-success {
78466
- text-align: center;
78467
- }
78468
-
78469
- :where(.theme-scope) .newsletter-success .fb-success {
78470
- padding: 1rem 1.5rem;
78471
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
78472
- border-radius: var(--radius-md, 0.5rem);
78473
- color: rgb(var(--tb-text));
78474
- }
78475
-
78476
- /* =============================================================================
78477
- * Block: Contact + Newsletter
78478
- * =============================================================================
78479
- */
78480
-
78481
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
78482
- display: grid;
78483
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
78484
- gap: clamp(2.5rem, 6vw, 4rem);
78485
- align-items: start;
78486
- }
78487
-
78488
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
78489
- min-width: 0;
78490
- }
78491
-
78492
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
78493
- margin-bottom: 1.5rem;
78494
- }
78495
-
78496
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
78497
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
78498
- margin: 0 0 0.75rem;
78499
- }
78500
-
78501
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
78502
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
78503
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78504
- }
78505
-
78506
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
78507
- display: flex;
78508
- flex-direction: column;
78509
- align-items: flex-start;
78510
- }
78511
-
78512
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
78513
- max-width: none;
78514
- margin-left: 0;
78515
- margin-right: 0;
78516
- }
78517
-
78518
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
78519
- text-align: left;
78520
- }
78521
-
78522
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
78523
- display: flex;
78524
- flex-direction: column;
78525
- gap: 1rem;
78526
- }
78527
-
78528
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
78529
- display: grid;
78530
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
78531
- gap: 1rem;
76225
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
76226
+ display: grid;
76227
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
76228
+ gap: 1rem;
78532
76229
  }
78533
76230
 
78534
76231
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
@@ -82375,6 +80072,68 @@ function parsePublicProductCategorySelector(value) {
82375
80072
  };
82376
80073
  }
82377
80074
  //#endregion
80075
+ //#region ../api/src/bookingPaymentTermSchemas.ts
80076
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
80077
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
80078
+ z$1.object({
80079
+ kind: z$1.literal("deposit_plus_one_remainder"),
80080
+ depositAmountCents: z$1.number().int().nonnegative(),
80081
+ depositRefundability: bookingDepositRefundPolicySchema,
80082
+ remainderDueCount: z$1.number().int().positive(),
80083
+ intervalUnit: z$1.enum([
80084
+ "day",
80085
+ "week",
80086
+ "month"
80087
+ ])
80088
+ }),
80089
+ z$1.object({
80090
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
80091
+ depositAmountCents: z$1.number().int().nonnegative(),
80092
+ depositRefundability: bookingDepositRefundPolicySchema,
80093
+ instalmentCount: z$1.number().int().positive(),
80094
+ intervalCount: z$1.number().int().positive(),
80095
+ intervalUnit: z$1.enum([
80096
+ "day",
80097
+ "week",
80098
+ "month"
80099
+ ])
80100
+ }),
80101
+ z$1.object({
80102
+ kind: z$1.literal("equal_scheduled_instalments"),
80103
+ instalmentCount: z$1.number().int().positive(),
80104
+ intervalCount: z$1.number().int().positive(),
80105
+ intervalUnit: z$1.enum([
80106
+ "day",
80107
+ "week",
80108
+ "month"
80109
+ ])
80110
+ })
80111
+ ]);
80112
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
80113
+ kind: z$1.literal("relative_to_start_date"),
80114
+ daysBeforeStart: z$1.number().int().positive()
80115
+ }), z$1.object({
80116
+ kind: z$1.literal("fixed_calendar_date"),
80117
+ dueAt: z$1.string().datetime()
80118
+ })]);
80119
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
80120
+ upfrontAmountCents: z$1.number().int().nonnegative(),
80121
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
80122
+ depositRefundability: bookingDepositRefundPolicySchema
80123
+ });
80124
+ z$1.discriminatedUnion("kind", [
80125
+ z$1.object({ kind: z$1.literal("upfront") }),
80126
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
80127
+ z$1.object({
80128
+ kind: z$1.literal("instalment_plan"),
80129
+ plan: bookingInstalmentPlanSchema
80130
+ }),
80131
+ z$1.object({
80132
+ kind: z$1.literal("flexible_balance"),
80133
+ config: bookingFlexibleBalanceConfigSchema
80134
+ })
80135
+ ]);
80136
+ //#endregion
82378
80137
  //#region ../api/src/navigationMenuValidation.ts
82379
80138
  function hasChildren(item) {
82380
80139
  return Array.isArray(item.children) && item.children.length > 0;
@@ -83942,40 +81701,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
83942
81701
  plural: "Events"
83943
81702
  }
83944
81703
  },
83945
- course: {
83946
- version: 1,
83947
- fields: [
83948
- {
83949
- id: "summary",
83950
- type: "textarea",
83951
- label: "Summary",
83952
- description: "Short teaser shown in listings.",
83953
- rows: 3
83954
- },
83955
- {
83956
- id: "image",
83957
- type: "media",
83958
- label: "Listing image",
83959
- description: "Optional image used for course cards and previews."
83960
- },
83961
- {
83962
- id: "body",
83963
- type: "richText",
83964
- label: "Details",
83965
- description: "Full course details and curriculum."
83966
- }
83967
- ],
83968
- routing: {
83969
- enabled: true,
83970
- pattern: "/courses/{slug}",
83971
- slugField: "slug",
83972
- prefix: "/courses/"
83973
- },
83974
- labels: {
83975
- singular: "Course",
83976
- plural: "Courses"
83977
- }
83978
- },
83979
81704
  "team-member": {
83980
81705
  version: 1,
83981
81706
  fields: [
@@ -84175,7 +81900,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
84175
81900
  function deriveFieldIdSet(schema) {
84176
81901
  return new Set(schema.fields.map((f) => f.id));
84177
81902
  }
84178
- deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.course), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
81903
+ deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
84179
81904
  //#endregion
84180
81905
  //#region ../field-primitives/src/bindings/index.ts
84181
81906
  const BINDING_TRANSFORMS$1 = {
@@ -84258,7 +81983,6 @@ function selectBlocksForDeclaredEntrySlot(input) {
84258
81983
  //#region ../content-model/src/templates/defaults.ts
84259
81984
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84260
81985
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84261
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84262
81986
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
84263
81987
  const POST_BODY_TEXT_BINDINGS = {
84264
81988
  body: fieldBinding$1("body"),
@@ -84373,7 +82097,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84373
82097
  showVenue: true,
84374
82098
  showCapacity: true,
84375
82099
  successMessage: "Thank you for registering! Check your email for confirmation details.",
84376
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84377
82100
  buttonText: "Complete Registration",
84378
82101
  buttonVariant: "primary"
84379
82102
  },
@@ -84384,64 +82107,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84384
82107
  }
84385
82108
  ]
84386
82109
  },
84387
- course: {
84388
- templateKey: "default",
84389
- name: "Course detail",
84390
- description: "Standard landing page for multi-session courses.",
84391
- metadata: {},
84392
- blocks: [
84393
- {
84394
- blockKind: "block.hero",
84395
- scope: "entry",
84396
- bindings: {
84397
- eyebrow: literalBinding$1("Course"),
84398
- headline: metaBinding$1("title"),
84399
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
84400
- subheadline: COURSE_SUMMARY_FALLBACK
84401
- }
84402
- },
84403
- {
84404
- blockKind: "block.course-details",
84405
- scope: "entry",
84406
- content: {
84407
- heading: "Course details",
84408
- showTitle: false,
84409
- showDescription: false,
84410
- showSessions: true,
84411
- sessionsLimit: "10",
84412
- showVenue: true,
84413
- showPrice: true,
84414
- showCapacity: true,
84415
- showEnrollmentStatus: true,
84416
- showMembershipNote: true
84417
- }
84418
- },
84419
- {
84420
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
84421
- scope: "template",
84422
- content: {
84423
- slotKey: "main",
84424
- label: "Page content"
84425
- }
84426
- },
84427
- {
84428
- blockKind: "block.course-registration",
84429
- scope: "entry",
84430
- content: {
84431
- heading: "Enroll in this course",
84432
- showSessions: true,
84433
- showPrice: true,
84434
- showCapacity: true,
84435
- showVenue: true,
84436
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
84437
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84438
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
84439
- buttonText: "Complete Enrollment",
84440
- buttonVariant: "primary"
84441
- }
84442
- }
84443
- ]
84444
- },
84445
82110
  "team-member": {
84446
82111
  templateKey: "default",
84447
82112
  name: "Team member profile",
@@ -87400,7 +85065,7 @@ var CircuitOpenError = class extends Error {
87400
85065
  * 1. This constant
87401
85066
  * 2. The "version" field in package.json
87402
85067
  */
87403
- const SDK_VERSION = "0.132.0";
85068
+ const SDK_VERSION = "0.135.0";
87404
85069
  //#endregion
87405
85070
  //#region src/next/content-load-failure.ts
87406
85071
  const SdkContentLoadError = RiverbankContentLoadError;