@riverbankcms/sdk 0.134.0 → 0.135.1

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 (258) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DfRhJPFQ.mjs → PreviewEditorSidebar-D4p_5TdY.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-Dppxcr_g.mjs → PreviewEditorUI-D0cRoTX1.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-8CyGCXir.mjs → SdkPreviewModeRuntime-BKLtM3Nz.mjs} +5 -5
  7. package/dist/{SiteChromeCustomizeContext-DVMTMvqA.mjs → SiteChromeCustomizeContext-61X2m7QV.mjs} +4105 -8035
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +15 -15
  10. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  12. package/dist/_dts/api/src/bookingOperations.d.ts +111 -161
  13. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  14. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  15. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  16. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  17. package/dist/_dts/api/src/bookings.d.ts +5 -9
  18. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  19. package/dist/_dts/api/src/communications.d.ts +1 -1
  20. package/dist/_dts/api/src/endpoints.d.ts +29 -109
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  22. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  23. package/dist/_dts/api/src/index.d.ts +3 -4
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  26. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  27. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  28. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +85 -5
  29. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -100
  31. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  32. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  33. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  34. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  35. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  36. package/dist/_dts/api/src/types.d.ts +1 -1
  37. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  38. package/dist/_dts/blocks/src/client.d.ts +0 -5
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +5 -94
  41. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  42. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  44. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +35 -10
  45. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  47. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +3 -3
  48. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  51. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  52. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  53. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +99 -59
  56. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  58. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  59. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +20 -5
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  88. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  89. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +16 -6
  90. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  93. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  96. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  97. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -1
  98. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  99. package/dist/_dts/commerce/src/index.d.ts +16 -0
  100. package/dist/_dts/commerce/src/money.d.ts +122 -0
  101. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  102. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  103. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  104. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  105. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  106. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  107. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  108. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  109. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  110. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  111. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  112. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  113. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  114. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  115. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  116. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  117. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  118. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  119. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  120. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  121. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  122. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  123. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  124. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  125. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  126. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  127. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  128. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  129. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  130. package/dist/_dts/core/src/branded.d.ts +3 -3
  131. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  132. package/dist/_dts/core/src/participants.d.ts +17 -17
  133. package/dist/_dts/core/src/rectification.d.ts +1 -1
  134. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +890 -2154
  135. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  136. package/dist/_dts/sdk/src/bookings/types.d.ts +34 -4
  137. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  140. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  141. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  142. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  143. package/dist/client/{usePolling-UN4WKnaM.mjs → BookingConsentAgreement-Bz9znbpn.mjs} +180 -4
  144. package/dist/client/{DiscountCodeDisclosure-CfuPOHD0.mjs → DiscountCodeDisclosure-35Ru8yB9.mjs} +13 -27
  145. package/dist/client/{EventCombined.client-DB8Qfzi-.mjs → EventCombined.client-BKB0ZxRR.mjs} +3 -3
  146. package/dist/client/{EventListing.client-DD4X8hp4.mjs → EventListing.client-Dx8I21ok.mjs} +2 -2
  147. package/dist/client/{LeafletStaticMap-QhgIBQbv.mjs → LeafletStaticMap-CEWx-Bhe.mjs} +1 -1
  148. package/dist/client/{accordion-DFXpLvwg.mjs → accordion-KIDsKTwS.mjs} +1 -1
  149. package/dist/client/{bookingForm-sI05d3lk.mjs → bookingForm-D96Rmp-5.mjs} +6 -7
  150. package/dist/client/bookings.mjs +913 -1906
  151. package/dist/client/{carousel-wjyWTZCh.mjs → carousel-YwUgyL66.mjs} +1 -1
  152. package/dist/client/{cart-DCwdpA4i.mjs → cart-BbwuNrUT.mjs} +3 -3
  153. package/dist/client/{checkout-DTDW3l0R.mjs → checkout-hp1ucmEY.mjs} +3 -3
  154. package/dist/client/{checkoutUrls-DQYC_Br-.mjs → checkoutUrls-BuseL0dw.mjs} +4 -2
  155. package/dist/client/client.mjs +5109 -9333
  156. package/dist/client/{context-TSK1CGx8.mjs → context-DljQn8L5.mjs} +15 -69
  157. package/dist/client/{eventCalendar-B0Zg-i_w.mjs → eventCalendar-DU4iNLpo.mjs} +5 -5
  158. package/dist/client/{eventCombined-B8Y2wizd.mjs → eventCombined-CZuupW8m.mjs} +3 -3
  159. package/dist/client/{eventDetails-DPDOwURJ.mjs → eventDetails-DPQWwCIi.mjs} +8 -8
  160. package/dist/client/{eventListing-CjBcmSLn.mjs → eventListing-C7oMidwS.mjs} +3 -3
  161. package/dist/client/{eventRegistration-CK30HsAq.mjs → eventRegistration-zEiunlUs.mjs} +4522 -3690
  162. package/dist/client/{form-CUXfsABE.mjs → form-D2KIyCVJ.mjs} +2 -2
  163. package/dist/client/{headerSection-N-mN3rjr.mjs → headerSection-CK5uChUK.mjs} +2 -2
  164. package/dist/client/hooks.mjs +459 -714
  165. package/dist/client/{locationMap-oiIDQMBt.mjs → locationMap-DLQNH1ln.mjs} +2 -2
  166. package/dist/client/{newsletterForm-CkQ2tTrM.mjs → newsletterForm-ZuhIG7fZ.mjs} +2 -2
  167. package/dist/client/{productDetail-CnidyrsN.mjs → productDetail-7hIcGeae.mjs} +3 -3
  168. package/dist/client/{productList-CttYcS_S.mjs → productList-T4Cii1ot.mjs} +3 -3
  169. package/dist/client/{propsDecoder-CeUMxI9a.mjs → propsDecoder-mB0aC_Fi.mjs} +4702 -4458
  170. package/dist/client/rendering/client.mjs +59617 -62260
  171. package/dist/client/rendering/islands.mjs +17 -19
  172. package/dist/client/rendering.mjs +5389 -9707
  173. package/dist/client/{scrollToBlock-lPr1oqxB.mjs → scrollToBlock-Du5mHgvL.mjs} +2 -2
  174. package/dist/client/{shop-DXQtMo2O.mjs → shop-B5zAcKZn.mjs} +6 -6
  175. package/dist/client/{shop-commerce-quDL411J.mjs → shop-commerce-BKBZB6l5.mjs} +6 -6
  176. package/dist/client/{shop-commerce-store-Dnu-8Iub.mjs → shop-commerce-store-Cq4qlNtQ.mjs} +1 -1
  177. package/dist/client/{shopShared-BWPUURvG.mjs → shopShared-DYGzEs9D.mjs} +3 -3
  178. package/dist/client/{useEventFilters-DRhWp2_5.mjs → useEventFilters-Bphkda8m.mjs} +3 -3
  179. package/dist/preview-next/before-render.mjs +40 -161
  180. package/dist/preview-next/client/runtime.mjs +4 -4
  181. package/dist/preview-next/keepAlive.mjs +40 -161
  182. package/dist/preview-next/middleware.mjs +40 -161
  183. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  184. package/dist/{sdk-runtime-Ca5RD78X.mjs → sdk-runtime-BbIC8G4J.mjs} +2 -2
  185. package/dist/{separator-CMhj6BTi.mjs → separator-CadhAtI7.mjs} +1 -1
  186. package/dist/server/components.mjs +558 -2962
  187. package/dist/server/config-validation.mjs +459 -714
  188. package/dist/server/config.mjs +459 -714
  189. package/dist/server/data.mjs +459 -714
  190. package/dist/server/index.mjs +41 -162
  191. package/dist/server/next.mjs +572 -2976
  192. package/dist/server/page-converter.mjs +360 -582
  193. package/dist/server/prebuild.mjs +1 -1
  194. package/dist/server/rendering/server.mjs +569 -2879
  195. package/dist/server/rendering.mjs +558 -2962
  196. package/dist/server/routing.mjs +603 -1087
  197. package/dist/server/server.mjs +473 -728
  198. package/dist/server/theme-bridge.mjs +41 -1524
  199. package/dist/styles/index.css +41 -1348
  200. package/package.json +1 -1
  201. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  202. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  203. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  204. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  205. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  206. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  207. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  208. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  209. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -135
  210. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  211. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  212. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  213. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  214. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  215. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  216. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  217. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  218. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  220. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  221. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  222. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  223. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  224. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  225. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  226. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  227. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  228. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  229. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  230. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  231. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  232. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  233. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -46
  235. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  236. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  237. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  238. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  239. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  240. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  241. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  242. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  243. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  244. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  245. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  246. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  247. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -325
  248. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  249. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  250. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  251. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  252. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  253. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  254. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  255. package/dist/client/BookingConsentAgreement-BxgpGEFD.mjs +0 -160
  256. package/dist/client/WholeSeriesRegistrationWizard-DwtC7bCs.mjs +0 -2546
  257. package/dist/client/courseRegistration-A-Tg7qw_.mjs +0 -52
  258. package/dist/client/pricing-Caa0QWzh.mjs +0 -195
@@ -9656,7 +9656,7 @@ function publicEventPricingType(pricing) {
9656
9656
  case "single_paid":
9657
9657
  case "ticket_types":
9658
9658
  case "sliding_scale":
9659
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9659
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9660
9660
  case "external": return "external";
9661
9661
  }
9662
9662
  }
@@ -9667,14 +9667,14 @@ function publicEventPricingCurrency(pricing) {
9667
9667
  case "single_paid":
9668
9668
  case "ticket_types":
9669
9669
  case "sliding_scale": return pricing.currency;
9670
- case "course": return pricing.display.display.currency;
9670
+ case "whole_series": return pricing.display.display.currency;
9671
9671
  case "external": return null;
9672
9672
  }
9673
9673
  }
9674
9674
  function isFreePublicEventPriceDisplay(display) {
9675
9675
  switch (display.kind) {
9676
9676
  case "free": return true;
9677
- case "course": return display.display.kind === "free";
9677
+ case "whole_series": return display.display.kind === "free";
9678
9678
  case "exact":
9679
9679
  case "from":
9680
9680
  case "range":
@@ -9710,7 +9710,7 @@ function formatBookingPriceDisplay(display, options = {}) {
9710
9710
  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)}`;
9711
9711
  case "unavailable": return "Pricing unavailable";
9712
9712
  case "external": return display.label;
9713
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
9713
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
9714
9714
  default: return assertNever$3(display);
9715
9715
  }
9716
9716
  }
@@ -14225,7 +14225,7 @@ defineBlockAppearancePreset({
14225
14225
  id: "schedule-details-brand-depth",
14226
14226
  target: "events",
14227
14227
  label: "Brand-depth schedule details",
14228
- blockKinds: ["block.event-details", "block.course-details"],
14228
+ blockKinds: ["block.event-details"],
14229
14229
  design: {
14230
14230
  sectionSurface: "brand-depth-band",
14231
14231
  contentFrame: plainFrame,
@@ -20775,7 +20775,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
20775
20775
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
20776
20776
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
20777
20777
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
20778
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
20779
20778
  function bind(from, options) {
20780
20779
  return (node) => ({
20781
20780
  ...node,
@@ -30683,12 +30682,12 @@ const weeklySlotAvailabilityBlockDefinition = {
30683
30682
  };
30684
30683
  //#endregion
30685
30684
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
30686
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
30687
- const bookingInstalmentPlanSchema = z.union([
30685
+ const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
30686
+ const bookingInstalmentPlanSchema$1 = z.union([
30688
30687
  z.object({
30689
30688
  kind: z.literal("deposit_plus_one_remainder"),
30690
30689
  depositAmountCents: z.number().int().min(0),
30691
- depositRefundability: bookingDepositRefundPolicySchema,
30690
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30692
30691
  remainderDueCount: z.number().int().positive(),
30693
30692
  intervalUnit: z.enum([
30694
30693
  "day",
@@ -30699,7 +30698,7 @@ const bookingInstalmentPlanSchema = z.union([
30699
30698
  z.object({
30700
30699
  kind: z.literal("deposit_plus_scheduled_instalments"),
30701
30700
  depositAmountCents: z.number().int().min(0),
30702
- depositRefundability: bookingDepositRefundPolicySchema,
30701
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30703
30702
  instalmentCount: z.number().int().positive(),
30704
30703
  intervalCount: z.number().int().positive(),
30705
30704
  intervalUnit: z.enum([
@@ -30719,28 +30718,28 @@ const bookingInstalmentPlanSchema = z.union([
30719
30718
  ])
30720
30719
  })
30721
30720
  ]);
30722
- const bookingFlexibleBalanceDueDateRuleSchema = z.union([z.object({
30721
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
30723
30722
  kind: z.literal("relative_to_start_date"),
30724
30723
  daysBeforeStart: z.number().int().positive()
30725
30724
  }), z.object({
30726
30725
  kind: z.literal("fixed_calendar_date"),
30727
30726
  dueAt: z.string().datetime()
30728
30727
  })]);
30729
- const bookingFlexibleBalanceConfigSchema = z.object({
30728
+ const bookingFlexibleBalanceConfigSchema$1 = z.object({
30730
30729
  upfrontAmountCents: z.number().int().min(0),
30731
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
30732
- depositRefundability: bookingDepositRefundPolicySchema
30730
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
30731
+ depositRefundability: bookingDepositRefundPolicySchema$1
30733
30732
  });
30734
30733
  const blockBookingPaymentCollectionOptionSchema = z.union([
30735
30734
  z.object({ kind: z.literal("upfront") }),
30736
30735
  z.object({ kind: z.literal("deferred_manual") }),
30737
30736
  z.object({
30738
30737
  kind: z.literal("instalment_plan"),
30739
- plan: bookingInstalmentPlanSchema
30738
+ plan: bookingInstalmentPlanSchema$1
30740
30739
  }),
30741
30740
  z.object({
30742
30741
  kind: z.literal("flexible_balance"),
30743
- config: bookingFlexibleBalanceConfigSchema
30742
+ config: bookingFlexibleBalanceConfigSchema$1
30744
30743
  })
30745
30744
  ]);
30746
30745
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -30996,6 +30995,13 @@ const publicWholeSeriesOfferingSchema = z.object({
30996
30995
  title: z.string(),
30997
30996
  slug: z.string(),
30998
30997
  description: z.unknown().nullable(),
30998
+ deliveryMode: z.enum([
30999
+ "in_person",
31000
+ "online",
31001
+ "hybrid"
31002
+ ]),
31003
+ waitlistEnabled: z.boolean(),
31004
+ requireGuestDetails: z.boolean(),
30999
31005
  teamMembers: z.array(wholeSeriesTeamMemberSummarySchema).optional(),
31000
31006
  enrollmentOpen: z.boolean(),
31001
31007
  pricing: wholeSeriesPricingSchema,
@@ -31111,10 +31117,11 @@ const mixedPriceDisplaySchema = z.object({
31111
31117
  paidToAmount: z.number(),
31112
31118
  currency: z.string()
31113
31119
  });
31114
- const publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
31120
+ const publicWholeSeriesPriceDisplaySchema = z.discriminatedUnion("kind", [
31115
31121
  freePriceDisplaySchema,
31116
31122
  exactPriceDisplaySchema,
31117
31123
  fromPriceDisplaySchema,
31124
+ rangePriceDisplaySchema,
31118
31125
  unavailablePriceDisplaySchema
31119
31126
  ]);
31120
31127
  z.discriminatedUnion("kind", [
@@ -31129,8 +31136,8 @@ z.discriminatedUnion("kind", [
31129
31136
  label: z.string()
31130
31137
  }),
31131
31138
  z.object({
31132
- kind: z.literal("course"),
31133
- display: publicCoursePriceDisplaySchema
31139
+ kind: z.literal("whole_series"),
31140
+ display: publicWholeSeriesPriceDisplaySchema
31134
31141
  })
31135
31142
  ]);
31136
31143
  const publicEventTicketTypePriceDisplaySchema = z.union([
@@ -31232,10 +31239,10 @@ const publicEventPricingSchema = z.discriminatedUnion("kind", [
31232
31239
  })
31233
31240
  }),
31234
31241
  z.object({
31235
- kind: z.literal("course"),
31242
+ kind: z.literal("whole_series"),
31236
31243
  display: z.object({
31237
- kind: z.literal("course"),
31238
- display: publicCoursePriceDisplaySchema
31244
+ kind: z.literal("whole_series"),
31245
+ display: publicWholeSeriesPriceDisplaySchema
31239
31246
  })
31240
31247
  }),
31241
31248
  z.object({
@@ -31678,7 +31685,8 @@ function resolveEventRegistrationScope(context) {
31678
31685
  };
31679
31686
  return { kind: "unscoped" };
31680
31687
  }
31681
- function applyEventRegistrationScope(events, scope) {
31688
+ function resolveEventRegistrationScopedEvents(events, context) {
31689
+ const scope = resolveEventRegistrationScope(context);
31682
31690
  switch (scope.kind) {
31683
31691
  case "occurrenceSeries":
31684
31692
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -31690,9 +31698,6 @@ function applyEventRegistrationScope(events, scope) {
31690
31698
  case "unscoped": return [...events];
31691
31699
  }
31692
31700
  }
31693
- function resolveEventRegistrationScopedEvents(events, context) {
31694
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
31695
- }
31696
31701
  //#endregion
31697
31702
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
31698
31703
  function planEventRegistrationScope(input) {
@@ -31786,14 +31791,14 @@ function isRecord$11(value) {
31786
31791
  }
31787
31792
  function isPublicEventPricing(value) {
31788
31793
  if (!isRecord$11(value) || typeof value.kind !== "string") return false;
31789
- 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";
31794
+ 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";
31790
31795
  }
31791
31796
  function isPublicEventTicketType(value) {
31792
31797
  return isRecord$11(value) && typeof value.id === "string";
31793
31798
  }
31794
31799
  function readTicketTypePriceDisplay(value, currency) {
31795
31800
  const display = readLegacyPriceDisplay(value, currency);
31796
- return display.kind === "course" || display.kind === "external" ? {
31801
+ return display.kind === "whole_series" || display.kind === "external" ? {
31797
31802
  kind: "unavailable",
31798
31803
  currency
31799
31804
  } : display;
@@ -31851,11 +31856,11 @@ function readLegacyPriceDisplay(value, currency) {
31851
31856
  kind: "unavailable",
31852
31857
  currency: displayCurrency
31853
31858
  };
31854
- case "course": return isRecord$11(value.display) ? {
31855
- kind: "course",
31859
+ case "whole_series": return isRecord$11(value.display) ? {
31860
+ kind: "whole_series",
31856
31861
  display: readCoursePriceDisplay(value.display, displayCurrency)
31857
31862
  } : {
31858
- kind: "course",
31863
+ kind: "whole_series",
31859
31864
  display: {
31860
31865
  kind: "unavailable",
31861
31866
  currency: displayCurrency
@@ -31981,7 +31986,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
31981
31986
  //#endregion
31982
31987
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
31983
31988
  function eventMatchesOccurrenceId(event, occurrenceId) {
31984
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
31989
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
31985
31990
  }
31986
31991
  function findPreSelectedEvent(input) {
31987
31992
  const occurrenceContext = input.occurrenceContext;
@@ -32007,12 +32012,127 @@ function toRegistrationEvent(event) {
32007
32012
  return {
32008
32013
  ...event,
32009
32014
  pricing: resolveRuntimeEventPricing(event),
32010
- publicEventId: event.id,
32011
- registrationOccurrenceId: event.occurrenceId
32015
+ selectionId: event.id,
32016
+ registrationSubject: {
32017
+ kind: "occurrence",
32018
+ occurrenceId: event.occurrenceId
32019
+ }
32012
32020
  };
32013
32021
  }
32014
32022
  function toRegistrationEvents(events) {
32015
- return events.map(toRegistrationEvent);
32023
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
32024
+ }
32025
+ function toWholeSeriesTicketType(option) {
32026
+ return {
32027
+ ...option,
32028
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
32029
+ attendanceScope: option.attendanceScope ?? void 0,
32030
+ availability: {
32031
+ kind: "available",
32032
+ remainingCapacity: option.capacityLimit
32033
+ }
32034
+ };
32035
+ }
32036
+ function toWholeSeriesPricing(offering) {
32037
+ const resolved = resolveWholeSeriesPricingState(offering);
32038
+ switch (offering.pricing.pricingStrategy) {
32039
+ case "free": return {
32040
+ kind: "free_registration",
32041
+ currency: offering.currency,
32042
+ display: {
32043
+ kind: "free",
32044
+ currency: offering.currency
32045
+ }
32046
+ };
32047
+ case "single": {
32048
+ const amount = offering.pricing.singlePriceAmount ?? 0;
32049
+ return amount === 0 ? {
32050
+ kind: "free_registration",
32051
+ currency: offering.currency,
32052
+ display: {
32053
+ kind: "free",
32054
+ currency: offering.currency
32055
+ }
32056
+ } : {
32057
+ kind: "single_paid",
32058
+ amount,
32059
+ currency: offering.currency,
32060
+ display: {
32061
+ kind: "exact",
32062
+ amount,
32063
+ currency: offering.currency
32064
+ }
32065
+ };
32066
+ }
32067
+ case "tiered": return {
32068
+ kind: "ticket_types",
32069
+ currency: offering.currency,
32070
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
32071
+ display: resolved.display
32072
+ };
32073
+ case "sliding_scale": return {
32074
+ kind: "sliding_scale",
32075
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32076
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32077
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
32078
+ currency: offering.currency,
32079
+ display: {
32080
+ kind: "range",
32081
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32082
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32083
+ currency: offering.currency
32084
+ }
32085
+ };
32086
+ }
32087
+ }
32088
+ function toAttendanceModes(offering) {
32089
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
32090
+ mode,
32091
+ capacity: offering.enrollmentCapacity,
32092
+ registeredCount: offering.enrolledCount,
32093
+ availableSpots: offering.availableSpots,
32094
+ waitlistEnabled: offering.waitlistEnabled
32095
+ }));
32096
+ }
32097
+ function toWholeSeriesRegistrationEvent(offering) {
32098
+ const firstSession = offering.sessions[0];
32099
+ const lastSession = offering.sessions[offering.sessions.length - 1];
32100
+ return {
32101
+ selectionId: offering.eventSeriesId,
32102
+ registrationSubject: {
32103
+ kind: "wholeSeries",
32104
+ eventSeriesId: offering.eventSeriesId,
32105
+ sessions: offering.sessions
32106
+ },
32107
+ seriesId: offering.eventSeriesId,
32108
+ title: offering.title,
32109
+ startsAt: firstSession?.startsAt ?? "",
32110
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
32111
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
32112
+ kind: "closed",
32113
+ reason: "enrollment_closed"
32114
+ },
32115
+ deliveryMode: offering.deliveryMode,
32116
+ attendanceModes: toAttendanceModes(offering),
32117
+ capacity: offering.enrollmentCapacity,
32118
+ registeredCount: offering.enrolledCount,
32119
+ availableSpots: offering.availableSpots,
32120
+ waitlistEnabled: offering.waitlistEnabled,
32121
+ venue: offering.venue ? {
32122
+ ...offering.venue,
32123
+ location: null
32124
+ } : null,
32125
+ eventCategory: null,
32126
+ teamMembers: offering.teamMembers,
32127
+ status: offering.status,
32128
+ timeZone: firstSession?.timeZone ?? "UTC",
32129
+ pricing: toWholeSeriesPricing(offering),
32130
+ paymentTerms: offering.paymentTerms,
32131
+ consent: offering.consent,
32132
+ requireGuestDetails: offering.requireGuestDetails,
32133
+ acceptsPasses: false,
32134
+ acceptsMemberships: offering.acceptsMemberships
32135
+ };
32016
32136
  }
32017
32137
  //#endregion
32018
32138
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -32038,11 +32158,7 @@ const eventRegistrationHydrationSchemaShape = {
32038
32158
  maxTickets: z.string().optional(),
32039
32159
  showVenue: z.boolean().optional(),
32040
32160
  showCapacity: z.boolean().optional(),
32041
- showSessions: z.boolean().optional(),
32042
- showPrice: z.boolean().optional(),
32043
32161
  successMessage: z.string().optional(),
32044
- waitlistMessage: z.string().optional(),
32045
- membershipMessage: z.string().optional(),
32046
32162
  buttonVariant: registrationButtonVariantSchema.optional(),
32047
32163
  overlayEnabled: z.boolean().optional(),
32048
32164
  spamProtectionEnabled: z.boolean().optional(),
@@ -32112,6 +32228,15 @@ function resolveWholeSeriesOffering(source) {
32112
32228
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
32113
32229
  }
32114
32230
  function buildEventRegistrationShellStepLabels(source) {
32231
+ const selectedOffering = resolveWholeSeriesOffering(source);
32232
+ if (selectedOffering) {
32233
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
32234
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
32235
+ eligibility: null,
32236
+ selectedTicketType: null,
32237
+ event: selectedEvent
32238
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
32239
+ }
32115
32240
  const scopedEvents = scopeEventRegistrationEvents(source);
32116
32241
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
32117
32242
  const preSelectedEvent = findPreSelectedEvent({
@@ -32126,13 +32251,16 @@ function buildEventRegistrationShellStepLabels(source) {
32126
32251
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
32127
32252
  }
32128
32253
  function scopeEventRegistrationEvents(source) {
32254
+ return toRegistrationEvents(scopeEventRegistrationSourceEvents(source));
32255
+ }
32256
+ function scopeEventRegistrationSourceEvents(source) {
32129
32257
  const scope = planEventRegistrationScope({
32130
- events: toRegistrationEvents(source.events ?? []),
32258
+ events: source.events ?? [],
32131
32259
  wholeSeriesOffering: source.wholeSeriesOffering,
32132
32260
  occurrenceContext: source.occurrenceContext,
32133
32261
  subject: source.subject
32134
32262
  });
32135
- return scope.kind === "invalidSelectedRun" ? [] : scope.events;
32263
+ return scope.kind === "invalidSelectedRun" ? [] : [...scope.events];
32136
32264
  }
32137
32265
  function shellLabelForRegistrationStep(step, events) {
32138
32266
  switch (step) {
@@ -32164,30 +32292,29 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32164
32292
  source: createZodCodec(eventRegistrationSourceSchema),
32165
32293
  render: createZodCodec(eventRegistrationRenderSchema)
32166
32294
  },
32167
- buildRender: (source) => ({
32168
- display: buildEventRegistrationDisplay(source),
32169
- hydration: {
32170
- occurrenceContext: source.occurrenceContext ?? null,
32171
- subject: source.subject ?? null,
32172
- events: source.events ?? null,
32173
- wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
32174
- wholeSeriesOffering: resolveWholeSeriesOffering(source),
32175
- maxTickets: source.maxTickets ?? void 0,
32176
- showVenue: source.showVenue,
32177
- showCapacity: source.showCapacity,
32178
- showSessions: source.showSessions,
32179
- showPrice: source.showPrice,
32180
- successMessage: source.successMessage,
32181
- waitlistMessage: source.waitlistMessage,
32182
- membershipMessage: source.membershipMessage,
32183
- buttonVariant: source.buttonVariant,
32184
- overlayEnabled: source.overlayEnabled,
32185
- spamProtectionEnabled: source.spamProtectionEnabled,
32186
- supportEmail: source.supportEmail,
32187
- sitePasses: source.sitePasses ?? null,
32188
- siteMemberships: source.siteMemberships ?? null
32189
- }
32190
- })
32295
+ buildRender: (source) => {
32296
+ const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
32297
+ return {
32298
+ display: buildEventRegistrationDisplay(source),
32299
+ hydration: {
32300
+ occurrenceContext: source.occurrenceContext ?? null,
32301
+ subject: source.subject ?? null,
32302
+ events,
32303
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
32304
+ wholeSeriesOffering: resolveWholeSeriesOffering(source),
32305
+ maxTickets: source.maxTickets ?? void 0,
32306
+ showVenue: source.showVenue,
32307
+ showCapacity: source.showCapacity,
32308
+ successMessage: source.successMessage,
32309
+ buttonVariant: source.buttonVariant,
32310
+ overlayEnabled: source.overlayEnabled,
32311
+ spamProtectionEnabled: source.spamProtectionEnabled,
32312
+ supportEmail: source.supportEmail,
32313
+ sitePasses: source.sitePasses ?? null,
32314
+ siteMemberships: source.siteMemberships ?? null
32315
+ }
32316
+ };
32317
+ }
32191
32318
  });
32192
32319
  function normalizeEventRegistrationEventInput(value) {
32193
32320
  if (!isRecord$10(value)) return value;
@@ -32309,24 +32436,6 @@ const eventRegistrationBlockDefinition = {
32309
32436
  defaultValue: true,
32310
32437
  ui: { intent: "display" }
32311
32438
  },
32312
- {
32313
- id: "showSessions",
32314
- type: "boolean",
32315
- label: "Show complete schedule",
32316
- description: "Display every session for whole-series registrations",
32317
- required: false,
32318
- defaultValue: true,
32319
- ui: { intent: "display" }
32320
- },
32321
- {
32322
- id: "showPrice",
32323
- type: "boolean",
32324
- label: "Show price",
32325
- description: "Display the whole-series price",
32326
- required: false,
32327
- defaultValue: true,
32328
- ui: { intent: "display" }
32329
- },
32330
32439
  {
32331
32440
  id: "successMessage",
32332
32441
  type: "text",
@@ -32337,26 +32446,6 @@ const eventRegistrationBlockDefinition = {
32337
32446
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
32338
32447
  maxLength: 500
32339
32448
  },
32340
- {
32341
- id: "waitlistMessage",
32342
- type: "text",
32343
- label: "Waitlist message",
32344
- description: "Message shown after joining a whole-series waitlist",
32345
- required: false,
32346
- multiline: true,
32347
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
32348
- maxLength: 500
32349
- },
32350
- {
32351
- id: "membershipMessage",
32352
- type: "text",
32353
- label: "Membership registration message",
32354
- description: "Message shown when a whole-series place is covered by membership",
32355
- required: false,
32356
- multiline: true,
32357
- defaultValue: "Registered using your membership. Check your email for session details.",
32358
- maxLength: 500
32359
- },
32360
32449
  {
32361
32450
  id: "buttonText",
32362
32451
  type: "text",
@@ -32388,11 +32477,7 @@ const eventRegistrationBlockDefinition = {
32388
32477
  } },
32389
32478
  showVenue: { $bind: { from: "content.showVenue" } },
32390
32479
  showCapacity: { $bind: { from: "content.showCapacity" } },
32391
- showSessions: { $bind: { from: "content.showSessions" } },
32392
- showPrice: { $bind: { from: "content.showPrice" } },
32393
32480
  successMessage: { $bind: { from: "content.successMessage" } },
32394
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32395
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32396
32481
  buttonText: { $bind: {
32397
32482
  from: "content.buttonText",
32398
32483
  fallback: "Complete Registration"
@@ -32509,267 +32594,6 @@ const eventRegistrationBlockDefinition = {
32509
32594
  }
32510
32595
  };
32511
32596
  //#endregion
32512
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
32513
- const courseRegistrationHydrationSchemaShape = {
32514
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
32515
- courses: z.array(publicWholeSeriesOfferingSchema).nullable().optional(),
32516
- showSessions: z.boolean().optional(),
32517
- showPrice: z.boolean().optional(),
32518
- showCapacity: z.boolean().optional(),
32519
- showVenue: z.boolean().optional(),
32520
- successMessage: z.string().optional(),
32521
- waitlistMessage: z.string().optional(),
32522
- membershipMessage: z.string().optional(),
32523
- buttonVariant: registrationButtonVariantSchema.optional()
32524
- };
32525
- const courseRegistrationSourceSchema = z.object({
32526
- siteId: z.string().optional(),
32527
- apiBaseUrl: z.string().optional(),
32528
- portalToken: z.string().nullable().optional(),
32529
- ...courseRegistrationHydrationSchemaShape,
32530
- className: z.string().nullable().optional(),
32531
- buttonText: z.string().nullable().optional(),
32532
- stage: previewStageSchema.optional()
32533
- });
32534
- const courseRegistrationDisplaySchema = z.object({
32535
- kind: z.literal("course-registration"),
32536
- state: z.literal("shell"),
32537
- className: z.string().nullable(),
32538
- summaryButtonText: z.string()
32539
- });
32540
- const courseRegistrationHydrationSchema = z.object(courseRegistrationHydrationSchemaShape);
32541
- const courseRegistrationRenderSchema = z.object({
32542
- display: courseRegistrationDisplaySchema,
32543
- hydration: courseRegistrationHydrationSchema
32544
- });
32545
- z.object({
32546
- siteId: z.string().optional(),
32547
- apiBaseUrl: z.string().optional(),
32548
- portalToken: z.string().nullable().optional(),
32549
- stage: previewStageSchema.optional()
32550
- });
32551
- function buildCourseRegistrationDisplay(source) {
32552
- return {
32553
- kind: "course-registration",
32554
- state: "shell",
32555
- className: source.className ?? null,
32556
- summaryButtonText: source.buttonText?.trim() || "Sign up"
32557
- };
32558
- }
32559
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32560
- kind: "client-owned",
32561
- contracts: {
32562
- source: createZodCodec(courseRegistrationSourceSchema),
32563
- render: createZodCodec(courseRegistrationRenderSchema)
32564
- },
32565
- buildRender: (source) => ({
32566
- display: buildCourseRegistrationDisplay(source),
32567
- hydration: {
32568
- subject: source.subject ?? null,
32569
- courses: source.courses ?? null,
32570
- showSessions: source.showSessions,
32571
- showPrice: source.showPrice,
32572
- showCapacity: source.showCapacity,
32573
- showVenue: source.showVenue,
32574
- successMessage: source.successMessage,
32575
- waitlistMessage: source.waitlistMessage,
32576
- membershipMessage: source.membershipMessage,
32577
- buttonVariant: source.buttonVariant
32578
- }
32579
- })
32580
- });
32581
- function buildCourseRegistrationInteractiveIslandProps(props) {
32582
- return buildInteractiveIslandProps({
32583
- runtime: courseRegistrationBlockRuntime,
32584
- mode: "course-registration",
32585
- meta: {
32586
- siteId: props.siteId,
32587
- apiBaseUrl: props.apiBaseUrl,
32588
- portalToken: props.portalToken,
32589
- stage: props.stage
32590
- },
32591
- source: props
32592
- });
32593
- }
32594
- const courseRegistrationBlockDefinition = {
32595
- manifest: createBlockManifest({
32596
- id: "block.course-registration",
32597
- version: "1.0.0",
32598
- title: "Course Registration",
32599
- titleSource: "heading",
32600
- description: "Enrollment form for multi-session courses",
32601
- category: "interactive",
32602
- contentSource: { kind: "inline" },
32603
- tags: [
32604
- "courses",
32605
- "enrollment",
32606
- "booking",
32607
- "form",
32608
- "signup",
32609
- "education"
32610
- ],
32611
- icon: "GraduationCap",
32612
- styleTokens: {
32613
- background: "surface",
32614
- typography: "body",
32615
- spacing: "md"
32616
- },
32617
- behaviours: {
32618
- supportsThemeSwitching: true,
32619
- inlineEditing: false,
32620
- animation: false,
32621
- paletteHidden: false
32622
- },
32623
- additionalFields: [
32624
- {
32625
- id: "heading",
32626
- type: "text",
32627
- label: "Heading",
32628
- description: "Main heading for the registration form",
32629
- required: false,
32630
- multiline: false,
32631
- defaultValue: "Sign up"
32632
- },
32633
- {
32634
- id: "description",
32635
- type: "richText",
32636
- label: "Description",
32637
- description: "Optional introductory text",
32638
- required: false
32639
- },
32640
- {
32641
- id: "showSessions",
32642
- type: "boolean",
32643
- label: "Show sessions",
32644
- description: "Display the list of course sessions",
32645
- required: false,
32646
- defaultValue: true,
32647
- ui: { intent: "display" }
32648
- },
32649
- {
32650
- id: "showPrice",
32651
- type: "boolean",
32652
- label: "Show price",
32653
- description: "Display the course price",
32654
- required: false,
32655
- defaultValue: true,
32656
- ui: { intent: "display" }
32657
- },
32658
- {
32659
- id: "showCapacity",
32660
- type: "boolean",
32661
- label: "Show available spots",
32662
- description: "Display remaining enrollment capacity",
32663
- required: false,
32664
- defaultValue: true,
32665
- ui: { intent: "display" }
32666
- },
32667
- {
32668
- id: "showVenue",
32669
- type: "boolean",
32670
- label: "Show venue",
32671
- description: "Display venue information",
32672
- required: false,
32673
- defaultValue: true,
32674
- ui: { intent: "display" }
32675
- },
32676
- {
32677
- id: "successMessage",
32678
- type: "text",
32679
- label: "Success message",
32680
- description: "Message shown after successful enrollment",
32681
- required: false,
32682
- multiline: true,
32683
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
32684
- maxLength: 500
32685
- },
32686
- {
32687
- id: "waitlistMessage",
32688
- type: "text",
32689
- label: "Waitlist message",
32690
- description: "Message when added to waitlist",
32691
- required: false,
32692
- multiline: true,
32693
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
32694
- maxLength: 500
32695
- },
32696
- {
32697
- id: "membershipMessage",
32698
- type: "text",
32699
- label: "Membership enrollment message",
32700
- description: "Message when enrolled using a membership",
32701
- required: false,
32702
- multiline: true,
32703
- defaultValue: "Enrolled using your membership! Check your email for session details.",
32704
- maxLength: 500
32705
- },
32706
- {
32707
- id: "buttonText",
32708
- type: "text",
32709
- label: "Submit button text",
32710
- description: "Text for the enrollment submit button",
32711
- required: false,
32712
- multiline: false,
32713
- defaultValue: "Sign up",
32714
- maxLength: 40
32715
- },
32716
- createButtonVariantField()
32717
- ],
32718
- layout: [styledSection({
32719
- baseClass: "",
32720
- spacing: "spacious",
32721
- children: sectionContainer([
32722
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
32723
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
32724
- courseRegistration(withApiBindings({
32725
- subject: { $bind: {
32726
- from: "$root.subject",
32727
- fallback: null
32728
- } },
32729
- portalToken: { $bind: {
32730
- from: "$root.portalToken",
32731
- fallback: null
32732
- } },
32733
- showSessions: { $bind: { from: "content.showSessions" } },
32734
- showPrice: { $bind: { from: "content.showPrice" } },
32735
- showCapacity: { $bind: { from: "content.showCapacity" } },
32736
- showVenue: { $bind: { from: "content.showVenue" } },
32737
- successMessage: { $bind: { from: "content.successMessage" } },
32738
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32739
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32740
- buttonText: { $bind: {
32741
- from: "content.buttonText",
32742
- fallback: "Sign up"
32743
- } },
32744
- buttonVariant: { $bind: {
32745
- from: "content.buttonVariant",
32746
- fallback: "primary"
32747
- } },
32748
- courses: { $bind: { from: "data.courses" } },
32749
- stage: { $bind: {
32750
- from: "$root.previewStage",
32751
- fallback: "published"
32752
- } }
32753
- }))
32754
- ], { gap: "lg" })
32755
- })]
32756
- }),
32757
- runtime: courseRegistrationBlockRuntime,
32758
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
32759
- dataLoaders: { courses: {
32760
- endpoint: "listPublicWholeSeriesOfferings",
32761
- params: {
32762
- siteId: { $bind: { from: "$root.siteId" } },
32763
- limit: "50",
32764
- stage: { $bind: {
32765
- from: "$root.previewStage",
32766
- fallback: "published"
32767
- } }
32768
- },
32769
- mode: "server"
32770
- } }
32771
- };
32772
- //#endregion
32773
32597
  //#region ../blocks/src/system/blocks/event-details.ts
32774
32598
  /**
32775
32599
  * Event Details Block
@@ -33016,200 +32840,6 @@ const eventDetailsBlockDefinition = {
33016
32840
  mode: "server"
33017
32841
  } }
33018
32842
  };
33019
- const courseDetailsBlockDefinition = {
33020
- manifest: createBlockManifest({
33021
- id: "block.course-details",
33022
- version: "1.0.0",
33023
- title: "Course Details",
33024
- titleSource: "heading",
33025
- description: "Schedule, venue, price, and enrollment status for a course",
33026
- category: "content",
33027
- contentSource: { kind: "entries" },
33028
- tags: [
33029
- "courses",
33030
- "schedule",
33031
- "sessions",
33032
- "venue",
33033
- "pricing"
33034
- ],
33035
- icon: "GraduationCap",
33036
- styleTokens: {
33037
- background: "surface",
33038
- typography: "body",
33039
- spacing: "md"
33040
- },
33041
- behaviours: {
33042
- supportsThemeSwitching: true,
33043
- inlineEditing: false,
33044
- animation: false,
33045
- paletteHidden: false
33046
- },
33047
- additionalFields: [
33048
- {
33049
- id: "heading",
33050
- type: "text",
33051
- label: "Heading",
33052
- description: "Optional heading shown above course details",
33053
- required: false,
33054
- multiline: false,
33055
- defaultValue: "Course details"
33056
- },
33057
- {
33058
- id: "showTitle",
33059
- type: "boolean",
33060
- label: "Show course title",
33061
- required: false,
33062
- defaultValue: false,
33063
- ui: { intent: "display" }
33064
- },
33065
- {
33066
- id: "showDescription",
33067
- type: "boolean",
33068
- label: "Show course description",
33069
- description: "Render the course description from the bookings course record",
33070
- required: false,
33071
- defaultValue: false,
33072
- ui: { intent: "display" }
33073
- },
33074
- {
33075
- id: "showSessions",
33076
- type: "boolean",
33077
- label: "Show sessions",
33078
- required: false,
33079
- defaultValue: true,
33080
- ui: { intent: "display" }
33081
- },
33082
- {
33083
- id: "sessionsLimit",
33084
- type: "select",
33085
- label: "Sessions limit",
33086
- required: false,
33087
- multiple: false,
33088
- defaultValue: "10",
33089
- options: [
33090
- {
33091
- value: "3",
33092
- label: "3 sessions"
33093
- },
33094
- {
33095
- value: "5",
33096
- label: "5 sessions"
33097
- },
33098
- {
33099
- value: "10",
33100
- label: "10 sessions"
33101
- },
33102
- {
33103
- value: "all",
33104
- label: "All sessions"
33105
- }
33106
- ],
33107
- ui: { intent: "display" }
33108
- },
33109
- {
33110
- id: "showVenue",
33111
- type: "boolean",
33112
- label: "Show venue",
33113
- required: false,
33114
- defaultValue: true,
33115
- ui: { intent: "display" }
33116
- },
33117
- {
33118
- id: "showPrice",
33119
- type: "boolean",
33120
- label: "Show price",
33121
- required: false,
33122
- defaultValue: true,
33123
- ui: { intent: "display" }
33124
- },
33125
- {
33126
- id: "showCapacity",
33127
- type: "boolean",
33128
- label: "Show capacity",
33129
- required: false,
33130
- defaultValue: true,
33131
- ui: { intent: "display" }
33132
- },
33133
- {
33134
- id: "showEnrollmentStatus",
33135
- type: "boolean",
33136
- label: "Show enrollment status",
33137
- required: false,
33138
- defaultValue: true,
33139
- ui: { intent: "display" }
33140
- },
33141
- {
33142
- id: "showMembershipNote",
33143
- type: "boolean",
33144
- label: "Show membership note",
33145
- description: "Indicate when memberships can be used for free enrollment",
33146
- required: false,
33147
- defaultValue: true,
33148
- ui: { intent: "display" }
33149
- }
33150
- ],
33151
- layout: [styledSection({
33152
- baseClass: "",
33153
- spacing: "spacious",
33154
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
33155
- subject: { $bind: {
33156
- from: "$root.subject",
33157
- fallback: null
33158
- } },
33159
- courses: { $bind: { from: "data.courses" } },
33160
- showTitle: { $bind: {
33161
- from: "content.showTitle",
33162
- fallback: false
33163
- } },
33164
- showDescription: { $bind: {
33165
- from: "content.showDescription",
33166
- fallback: false
33167
- } },
33168
- showSessions: { $bind: {
33169
- from: "content.showSessions",
33170
- fallback: true
33171
- } },
33172
- sessionsLimit: { $bind: {
33173
- from: "content.sessionsLimit",
33174
- fallback: "10"
33175
- } },
33176
- showVenue: { $bind: {
33177
- from: "content.showVenue",
33178
- fallback: true
33179
- } },
33180
- showPrice: { $bind: {
33181
- from: "content.showPrice",
33182
- fallback: true
33183
- } },
33184
- showCapacity: { $bind: {
33185
- from: "content.showCapacity",
33186
- fallback: true
33187
- } },
33188
- showEnrollmentStatus: { $bind: {
33189
- from: "content.showEnrollmentStatus",
33190
- fallback: true
33191
- } },
33192
- showMembershipNote: { $bind: {
33193
- from: "content.showMembershipNote",
33194
- fallback: true
33195
- } }
33196
- })], { gap: "lg" })
33197
- })]
33198
- }),
33199
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
33200
- dataLoaders: { courses: {
33201
- endpoint: "listPublicWholeSeriesOfferings",
33202
- params: {
33203
- siteId: { $bind: { from: "$root.siteId" } },
33204
- limit: "50",
33205
- stage: { $bind: {
33206
- from: "$root.previewStage",
33207
- fallback: "published"
33208
- } }
33209
- },
33210
- mode: "server"
33211
- } }
33212
- };
33213
32843
  const eventSpotlightBlockDefinition = {
33214
32844
  manifest: createBlockManifest({
33215
32845
  id: "block.event-spotlight",
@@ -38461,7 +38091,7 @@ const offeringsPreviewManifest = createBlockManifest({
38461
38091
  fallback: "published"
38462
38092
  } },
38463
38093
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
38464
- courses: { $bind: { from: "data.courses" } },
38094
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
38465
38095
  ...offeringsPreviewEventDataBindings
38466
38096
  })
38467
38097
  ], { gap: "lg" }),
@@ -38478,7 +38108,7 @@ const offeringsPreviewBlockDefinition = {
38478
38108
  dataSchemas: {
38479
38109
  ...offeringsPreviewEventDataSchemas,
38480
38110
  routeCandidates: publicRouteCandidatesSchema.optional(),
38481
- courses: publicWholeSeriesOfferingsArraySchema.optional()
38111
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
38482
38112
  },
38483
38113
  dataLoaders: {
38484
38114
  ...offeringsPreviewEventDataLoaders,
@@ -38487,7 +38117,7 @@ const offeringsPreviewBlockDefinition = {
38487
38117
  params: {},
38488
38118
  mode: "server"
38489
38119
  },
38490
- courses: {
38120
+ wholeSeriesOfferings: {
38491
38121
  endpoint: "listPublicWholeSeriesOfferings",
38492
38122
  params: {
38493
38123
  siteId: { $bind: { from: "$root.siteId" } },
@@ -43571,22 +43201,6 @@ const systemBlockDefinitions = [
43571
43201
  weight: "standard"
43572
43202
  })]
43573
43203
  })),
43574
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43575
- flow: conversionFlow,
43576
- layoutProfiles: [layoutProfile({
43577
- variantKey: "default",
43578
- family: "form",
43579
- weight: "standard"
43580
- })]
43581
- })),
43582
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
43583
- flow: offeringsFlow,
43584
- layoutProfiles: [layoutProfile({
43585
- variantKey: "default",
43586
- family: "stack",
43587
- weight: "standard"
43588
- })]
43589
- })),
43590
43204
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
43591
43205
  flow: offeringsFlow,
43592
43206
  layoutProfiles: [layoutProfile({
@@ -46472,7 +46086,7 @@ function emptySelection(timeZone) {
46472
46086
  timeZone
46473
46087
  };
46474
46088
  }
46475
- function parseLimit$1(value, fallback) {
46089
+ function parseLimit(value, fallback) {
46476
46090
  if (value === "all") return Number.MAX_SAFE_INTEGER;
46477
46091
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
46478
46092
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -46555,7 +46169,7 @@ function selectEventDetails(args) {
46555
46169
  subject: args.subject
46556
46170
  }));
46557
46171
  const occurrenceContext = args.occurrenceContext ?? null;
46558
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
46172
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
46559
46173
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
46560
46174
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
46561
46175
  if (!candidate) return emptySelection(timeZone);
@@ -46634,7 +46248,7 @@ function resolveEventDetailsPresentation(input) {
46634
46248
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
46635
46249
  /**
46636
46250
  * Shared tile content for displaying date and time range.
46637
- * Used by event-details "Other dates" and course-details "Sessions".
46251
+ * Used by event-details "Other dates".
46638
46252
  */
46639
46253
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
46640
46254
  const { date, timeRange } = formatEventDateParts({
@@ -46654,8 +46268,8 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
46654
46268
  });
46655
46269
  }
46656
46270
  //#endregion
46657
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
46658
- function CoursePricingDisplay({ pricing, acceptedItems }) {
46271
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
46272
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
46659
46273
  return /* @__PURE__ */ jsxs("div", {
46660
46274
  className: "rb-mt-6",
46661
46275
  children: [
@@ -46667,7 +46281,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
46667
46281
  className: "rb-flex rb-flex-col rb-gap-2",
46668
46282
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
46669
46283
  option.name,
46670
- ": ",
46284
+ ":",
46285
+ " ",
46671
46286
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
46672
46287
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
46673
46288
  className: "rb-caption status-muted",
@@ -46688,7 +46303,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
46688
46303
  const label = preview.publicLabel.trim() || "Discount";
46689
46304
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
46690
46305
  }
46691
- function TeamMemberName$1({ name, profilePath }) {
46306
+ function TeamMemberName({ name, profilePath }) {
46692
46307
  return profilePath ? /* @__PURE__ */ jsx("a", {
46693
46308
  href: profilePath,
46694
46309
  className: "rb-hover-opacity-80",
@@ -46725,7 +46340,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
46725
46340
  children: "No registration required - just show up"
46726
46341
  })]
46727
46342
  });
46728
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
46343
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
46729
46344
  pricing: coursePricing,
46730
46345
  acceptedItems: [...acceptedItems]
46731
46346
  });
@@ -46800,7 +46415,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
46800
46415
  children: "With"
46801
46416
  }), /* @__PURE__ */ jsx("div", {
46802
46417
  className: "rb-flex rb-flex-col rb-gap-3",
46803
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
46418
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
46804
46419
  name: member.name,
46805
46420
  profilePath: member.profilePath
46806
46421
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -46960,9 +46575,13 @@ function EventDetailsSSR(props) {
46960
46575
  const { blockId, occurrenceContext = null, subject, events = null, className, children } = props;
46961
46576
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
46962
46577
  const normalizedSubject = normalizeEventRegistrationPageSurfaceSubject(subject);
46578
+ const scopedEvents = events === null ? null : resolveEventRegistrationScopedEvents(events, {
46579
+ occurrenceContext,
46580
+ subject: normalizedSubject
46581
+ });
46963
46582
  const presentation = resolveEventDetailsPresentation({
46964
46583
  ...props,
46965
- events,
46584
+ events: scopedEvents,
46966
46585
  occurrenceContext,
46967
46586
  subject: normalizedSubject,
46968
46587
  nowIso
@@ -46975,7 +46594,7 @@ function EventDetailsSSR(props) {
46975
46594
  /* @__PURE__ */ jsx(IslandPropsScript, { value: {
46976
46595
  occurrenceContext,
46977
46596
  subject: normalizedSubject,
46978
- events,
46597
+ events: scopedEvents,
46979
46598
  showVenue: presentation.showVenue,
46980
46599
  showMap: presentation.showMap,
46981
46600
  showOtherDates: presentation.showOtherDates,
@@ -47079,352 +46698,6 @@ function LocationMapSSR(props) {
47079
46698
  });
47080
46699
  }
47081
46700
  //#endregion
47082
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
47083
- /**
47084
- * Resolves native run-page ownership without falling back to entry or slug
47085
- * coincidence when a page-surface subject is present but invalid.
47086
- */
47087
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
47088
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
47089
- const parsed = parseEventPageSurfaceSubject(subjectValue);
47090
- if (!parsed.ok) return {
47091
- kind: "unsupported",
47092
- reason: parsed.error.kind
47093
- };
47094
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
47095
- const allowedSeriesIds = new Set(seriesIds);
47096
- return {
47097
- kind: "scoped",
47098
- subject: parsed.value,
47099
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
47100
- };
47101
- }
47102
- function eventSeriesIdsForSubject(subject) {
47103
- switch (subject.kind) {
47104
- case "eventSeries": return [subject.eventSeriesId];
47105
- case "eventOffering": return subject.availableEventSeriesIds;
47106
- default: return assertNever$3(subject);
47107
- }
47108
- }
47109
- //#endregion
47110
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
47111
- /** Temporary Course-block adapter over canonical Event run scoping. */
47112
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
47113
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
47114
- return scope.kind === "scoped" ? {
47115
- kind: "scoped",
47116
- subject: scope.subject,
47117
- courses: scope.runs
47118
- } : scope;
47119
- }
47120
- //#endregion
47121
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
47122
- function selectCourseDetails(args) {
47123
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
47124
- if (pageSurfaceScope.kind === "unsupported") return {
47125
- mode: "unsupportedPageSurfaceSubject",
47126
- selected: null,
47127
- scoped: []
47128
- };
47129
- if (pageSurfaceScope.kind === "scoped") {
47130
- const scoped = [...pageSurfaceScope.courses];
47131
- return {
47132
- mode: "pageSurfaceSubject",
47133
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
47134
- scoped
47135
- };
47136
- }
47137
- return {
47138
- mode: "unsupportedPageSurfaceSubject",
47139
- selected: null,
47140
- scoped: []
47141
- };
47142
- }
47143
- //#endregion
47144
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
47145
- function toValidDate(value) {
47146
- if (!value) return null;
47147
- const date = new Date(value);
47148
- return Number.isNaN(date.getTime()) ? null : date;
47149
- }
47150
- function getCourseDateRange(course) {
47151
- const datedSessions = (course.sessions ?? []).map((session) => ({
47152
- session,
47153
- start: toValidDate(session.startsAt),
47154
- end: toValidDate(session.endsAt)
47155
- })).filter((value) => value.start !== null || value.end !== null);
47156
- if (datedSessions.length === 0) return {
47157
- start: null,
47158
- end: null,
47159
- startIso: null,
47160
- endIso: null,
47161
- timeZone: null
47162
- };
47163
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
47164
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
47165
- return {
47166
- start: startSession?.start ?? null,
47167
- end: endSession?.end ?? null,
47168
- startIso: startSession?.session.startsAt ?? null,
47169
- endIso: endSession?.session.endsAt ?? null,
47170
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
47171
- };
47172
- }
47173
- function formatCourseDateRange(range) {
47174
- const { startIso, endIso, timeZone } = range;
47175
- const dateFormat = {
47176
- month: "numeric",
47177
- day: "numeric",
47178
- year: "numeric"
47179
- };
47180
- const effectiveTimeZone = toBookingTimeZone(timeZone);
47181
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
47182
- startsAt: iso,
47183
- timeZone: effectiveTimeZone
47184
- }), dateFormat);
47185
- const formatRangeDateOnly = (startsAt, endsAt) => {
47186
- const startText = formatSingleDate(startsAt);
47187
- const endText = formatSingleDate(endsAt);
47188
- return startText === endText ? startText : `${startText} – ${endText}`;
47189
- };
47190
- if (!startIso && !endIso) return "Dates TBD";
47191
- if (startIso && !endIso) return formatSingleDate(startIso);
47192
- if (!startIso && endIso) return formatSingleDate(endIso);
47193
- if (!startIso || !endIso) return "Dates TBD";
47194
- return formatRangeDateOnly(startIso, endIso);
47195
- }
47196
- //#endregion
47197
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
47198
- function TeamMemberName({ name, profilePath }) {
47199
- return profilePath ? /* @__PURE__ */ jsx("a", {
47200
- href: profilePath,
47201
- className: "rb-hover-opacity-80",
47202
- children: /* @__PURE__ */ jsx("strong", { children: name })
47203
- }) : /* @__PURE__ */ jsx("strong", { children: name });
47204
- }
47205
- function parseLimit(value, fallback) {
47206
- if (value === "all") return "all";
47207
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
47208
- return Number.isFinite(n) && n > 0 ? n : fallback;
47209
- }
47210
- function CourseDetailsView(props) {
47211
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
47212
- if (!course) return /* @__PURE__ */ jsx("p", {
47213
- className: "rb-caption status-muted",
47214
- children: emptyMessage
47215
- });
47216
- const pricing = resolveWholeSeriesPricingState(course);
47217
- const sessionLimit = parseLimit(sessionsLimit, 10);
47218
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
47219
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
47220
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
47221
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
47222
- const teamMembers = course.teamMembers ?? [];
47223
- return /* @__PURE__ */ jsxs("div", {
47224
- className: "rb-flex rb-flex-col rb-gap-6",
47225
- children: [
47226
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
47227
- /* @__PURE__ */ jsxs("div", {
47228
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
47229
- children: [/* @__PURE__ */ jsxs("div", {
47230
- className: "rb-flex rb-flex-col rb-gap-4",
47231
- children: [
47232
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47233
- className: "rb-label rb-mb-2",
47234
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
47235
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
47236
- className: "rb-flex rb-flex-col rb-gap-2",
47237
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47238
- option.name,
47239
- ": ",
47240
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47241
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
47242
- className: "rb-caption status-muted",
47243
- children: option.description
47244
- }) : null] }, option.id))
47245
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
47246
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47247
- className: "rb-label rb-mb-2",
47248
- children: "Spots"
47249
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
47250
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47251
- className: "rb-label rb-mb-2",
47252
- children: "Membership"
47253
- }), /* @__PURE__ */ jsx("p", {
47254
- className: "rb-caption status-muted",
47255
- children: "Eligible memberships can be used for free enrollment"
47256
- })] }),
47257
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47258
- className: "rb-label rb-mb-2",
47259
- children: "With"
47260
- }), /* @__PURE__ */ jsx("div", {
47261
- className: "rb-flex rb-flex-col rb-gap-3",
47262
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47263
- name: teamMember.name,
47264
- profilePath: teamMember.profilePath
47265
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
47266
- className: "rb-caption status-muted",
47267
- children: teamMember.summary
47268
- })] }, teamMember.id))
47269
- })] })
47270
- ]
47271
- }), /* @__PURE__ */ jsxs("div", {
47272
- className: "rb-flex rb-flex-col rb-gap-4",
47273
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
47274
- /* @__PURE__ */ jsx("div", {
47275
- className: "rb-label rb-mb-2",
47276
- children: "Venue"
47277
- }),
47278
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
47279
- course.venue.address && /* @__PURE__ */ jsx("p", {
47280
- className: "rb-caption status-muted",
47281
- children: course.venue.address
47282
- })
47283
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47284
- className: "rb-label rb-mb-2",
47285
- children: "Enrollment"
47286
- }), /* @__PURE__ */ jsx("p", {
47287
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
47288
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
47289
- })] })]
47290
- })]
47291
- }),
47292
- descriptionDoc && /* @__PURE__ */ jsx("div", {
47293
- className: "cd-description",
47294
- children: /* @__PURE__ */ jsx(RichText, { doc: descriptionDoc })
47295
- }),
47296
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
47297
- /* @__PURE__ */ jsx("div", {
47298
- className: "rb-label",
47299
- children: "Sessions"
47300
- }),
47301
- /* @__PURE__ */ jsx("div", {
47302
- className: "rb-mt-2 rb-tiles-grid",
47303
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
47304
- className: "rb-tile",
47305
- children: /* @__PURE__ */ jsx(DateTimeTile, {
47306
- startsAt: s.startsAt,
47307
- endsAt: s.endsAt
47308
- })
47309
- }, s.id))
47310
- }),
47311
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
47312
- className: "cd-sessions__more",
47313
- children: [
47314
- "Showing ",
47315
- visibleSessions.length,
47316
- " of ",
47317
- sortedSessions.length,
47318
- " sessions."
47319
- ]
47320
- })
47321
- ] })
47322
- ]
47323
- });
47324
- }
47325
- //#endregion
47326
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
47327
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
47328
- const selection = selectCourseDetails({
47329
- courses: courses ?? null,
47330
- subject
47331
- });
47332
- const parsedSubject = parseEventPageSurfaceSubject(subject);
47333
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
47334
- const now = /* @__PURE__ */ new Date();
47335
- const scopedWithRange = selection.scoped.map((c) => ({
47336
- course: c,
47337
- range: getCourseDateRange(c)
47338
- }));
47339
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
47340
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
47341
- });
47342
- 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;
47343
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
47344
- return /* @__PURE__ */ jsxs("div", {
47345
- className: `course-details ${className ?? ""}`.trim(),
47346
- "data-block": "course-details",
47347
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
47348
- course: selection.selected,
47349
- showTitle,
47350
- showDescription,
47351
- showSessions,
47352
- sessionsLimit,
47353
- showVenue,
47354
- showPrice,
47355
- showCapacity,
47356
- showEnrollmentStatus,
47357
- showMembershipNote
47358
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
47359
- className: "rb-flex rb-flex-col rb-gap-3",
47360
- children: [
47361
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47362
- className: "rb-label rb-mb-2",
47363
- children: "Upcoming runs"
47364
- }), /* @__PURE__ */ jsx("p", {
47365
- className: "rb-caption status-muted",
47366
- children: "Choose a run to see sessions and details."
47367
- })] }),
47368
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
47369
- className: "rb-flex rb-flex-col rb-gap-2",
47370
- children: nonPastRuns.map(({ course, range }) => {
47371
- const start = range.start;
47372
- const end = range.end;
47373
- const isInProgress = Boolean(start && end && start <= now && end > now);
47374
- return /* @__PURE__ */ jsx("li", {
47375
- className: "rb-rounded-md rb-border rb-p-3",
47376
- children: /* @__PURE__ */ jsx("div", {
47377
- className: "rb-flex rb-flex-col rb-gap-1",
47378
- children: /* @__PURE__ */ jsxs("div", {
47379
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
47380
- children: [/* @__PURE__ */ jsxs("div", {
47381
- className: "rb-min-w-0",
47382
- children: [/* @__PURE__ */ jsx("div", {
47383
- className: "rb-truncate",
47384
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
47385
- }), /* @__PURE__ */ jsx("div", {
47386
- className: "rb-caption status-muted",
47387
- children: formatCourseDateRange(range)
47388
- })]
47389
- }), /* @__PURE__ */ jsx("div", {
47390
- className: "rb-caption status-muted rb-shrink-0",
47391
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
47392
- })]
47393
- })
47394
- })
47395
- }, course.eventSeriesId);
47396
- })
47397
- }) : /* @__PURE__ */ jsx("p", {
47398
- className: "rb-caption status-muted",
47399
- children: "No upcoming runs."
47400
- }),
47401
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
47402
- className: "rb-caption status-muted",
47403
- children: [
47404
- "Last run: ",
47405
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
47406
- " (",
47407
- formatCourseDateRange(lastPastRun.range),
47408
- ")"
47409
- ]
47410
- }) : null
47411
- ]
47412
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
47413
- course: null,
47414
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
47415
- showTitle,
47416
- showDescription,
47417
- showSessions,
47418
- sessionsLimit,
47419
- showVenue,
47420
- showPrice,
47421
- showCapacity,
47422
- showEnrollmentStatus,
47423
- showMembershipNote
47424
- }), children]
47425
- });
47426
- }
47427
- //#endregion
47428
46701
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
47429
46702
  /**
47430
46703
  * EventSpotlight Component
@@ -47628,7 +46901,7 @@ function deriveCourseScheduleSummary(course) {
47628
46901
  sessionCount: sessions.length
47629
46902
  };
47630
46903
  }
47631
- function nextCourseSessionStart(course) {
46904
+ function nextWholeSeriesSessionStart(course) {
47632
46905
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
47633
46906
  }
47634
46907
  function occurrenceFromEvent(event) {
@@ -47782,7 +47055,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
47782
47055
  function buildItemDataMap(props) {
47783
47056
  const routeCandidates = props.routeCandidates?.routes ?? [];
47784
47057
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
47785
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
47058
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
47786
47059
  }
47787
47060
  function eventDataFromMaybeArray(events) {
47788
47061
  return events ? {
@@ -47836,8 +47109,8 @@ function renderOfferingGroupItems(presentation, items, options) {
47836
47109
  }
47837
47110
  }
47838
47111
  function compareCoursesByNextSession(left, right) {
47839
- const leftStart = nextCourseSessionStart(left);
47840
- const rightStart = nextCourseSessionStart(right);
47112
+ const leftStart = nextWholeSeriesSessionStart(left);
47113
+ const rightStart = nextWholeSeriesSessionStart(right);
47841
47114
  if (leftStart === null) return rightStart === null ? 0 : 1;
47842
47115
  if (rightStart === null) return -1;
47843
47116
  return leftStart.localeCompare(rightStart);
@@ -48776,45 +48049,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
48776
48049
  });
48777
48050
  }
48778
48051
  //#endregion
48779
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
48780
- /**
48781
- * Server-safe placeholder for course registration.
48782
- * Provides a static container for island hydration without importing client hooks.
48783
- */
48784
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
48785
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
48786
- siteId,
48787
- apiBaseUrl,
48788
- portalToken,
48789
- subject,
48790
- courses,
48791
- className,
48792
- showSessions,
48793
- showPrice,
48794
- showCapacity,
48795
- showVenue,
48796
- successMessage,
48797
- waitlistMessage,
48798
- membershipMessage,
48799
- buttonText,
48800
- buttonVariant,
48801
- stage
48802
- });
48803
- return /* @__PURE__ */ jsxs("div", {
48804
- className: `course-registration ${className ?? ""}`.trim(),
48805
- "data-block": "course-registration",
48806
- ...getIslandRootProps("course-registration", blockId),
48807
- children: [
48808
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
48809
- /* @__PURE__ */ jsx("div", {
48810
- className: "course-registration__summary",
48811
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
48812
- }),
48813
- children
48814
- ]
48815
- });
48816
- }
48817
- //#endregion
48818
48052
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
48819
48053
  function GiftingSSR({ blockId, ...rest }) {
48820
48054
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -50302,7 +49536,6 @@ const runtimeBackedBlockServerEntries = {
50302
49536
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
50303
49537
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
50304
49538
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
50305
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
50306
49539
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
50307
49540
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
50308
49541
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -50335,7 +49568,6 @@ const serverComponentRegistry = {
50335
49568
  "booking-form": BookingFormSSR,
50336
49569
  "event-details": EventDetailsSSR,
50337
49570
  "location-map": LocationMapSSR,
50338
- "course-details": CourseDetailsSSR,
50339
49571
  "event-spotlight": EventSpotlight,
50340
49572
  "event-combined": EventCombinedSSR,
50341
49573
  "offerings-preview": OfferingsPreviewNode,
@@ -54705,176 +53937,6 @@ ${root} {
54705
53937
  `;
54706
53938
  }
54707
53939
  //#endregion
54708
- //#region ../theme-core/src/blocks/vars/course-details.ts
54709
- /**
54710
- * Generate CSS variables for the course-details block.
54711
- *
54712
- * Variables defined:
54713
- * - Enrollment status colors (open/closed)
54714
- * - Capacity indicator colors (available/low/full)
54715
- * - Price display colors (free indicator)
54716
- */
54717
- function generateCourseDetailsVars({ themeId }) {
54718
- return `
54719
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
54720
- /* Enrollment status */
54721
- --cd-enrollment-open-text: rgb(var(--tb-success));
54722
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
54723
-
54724
- /* Capacity indicator */
54725
- --cd-capacity-available-text: rgb(var(--tb-success));
54726
- --cd-capacity-low-text: rgb(var(--tb-warning));
54727
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
54728
-
54729
- /* Price styling */
54730
- --cd-price-free-text: rgb(var(--tb-success));
54731
- }
54732
- `;
54733
- }
54734
- //#endregion
54735
- //#region ../theme-core/src/blocks/vars/course-registration.ts
54736
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
54737
- /* Temporary bridge while persisted Course blocks render the Event-owned
54738
- whole-series registration runtime. Removed with the Course block. */
54739
- --er-step-active: var(--cr-step-active);
54740
- --er-step-inactive: var(--cr-step-inactive);
54741
- --er-step-completed: var(--cr-step-completed);
54742
- --er-step-text: var(--cr-step-text);
54743
- --er-step-text-active: var(--cr-step-text-active);
54744
- --er-step-connector: var(--cr-step-connector);
54745
- --er-step-title-size: var(--cr-step-title-size);
54746
- --er-success-bg: var(--cr-success-bg);
54747
- --er-success-text: var(--cr-success-text);
54748
- --er-error-bg: var(--cr-error-bg);
54749
- --er-error-text: var(--cr-error-text);
54750
- --er-waitlist-bg: var(--cr-waitlist-bg);
54751
- --er-waitlist-text: var(--cr-waitlist-text);
54752
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
54753
- --er-capacity-available-text: var(--cr-capacity-available-text);
54754
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
54755
- --er-capacity-low-text: var(--cr-capacity-low-text);
54756
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
54757
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
54758
- --er-border: var(--cr-border);
54759
- --er-border-hover: var(--cr-border-hover);
54760
- --er-border-selected: var(--cr-border-selected);
54761
- --er-border-error: var(--cr-border-error);
54762
- --er-focus-ring: var(--cr-focus-ring);
54763
- --er-required: var(--cr-required);
54764
- --er-payment-border: var(--cr-payment-border);
54765
- --er-payment-border-hover: var(--cr-payment-border-hover);
54766
- --er-payment-border-selected: var(--cr-payment-border-selected);
54767
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
54768
- --er-check-bg: var(--cr-check-bg);
54769
- --er-check-text: var(--cr-check-text);
54770
- --er-summary-bg: var(--cr-summary-bg);
54771
- --er-summary-border: var(--cr-summary-border);
54772
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54773
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
54774
- `;
54775
- /**
54776
- * Generate CSS variables for the course-registration block.
54777
- *
54778
- * Variables defined:
54779
- * - Step indicator colors (active, inactive, completed, text, connector)
54780
- * - Success/error/waitlist state backgrounds and text colors
54781
- * - Capacity badge colors (available, low, sold-out)
54782
- * - Border colors for various interaction states
54783
- * - Input focus and required marker styling
54784
- * - Payment option card styling
54785
- * - Checkmark indicator colors
54786
- * - Summary styling
54787
- */
54788
- function generateCourseRegistrationVars({ themeId }) {
54789
- return `
54790
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
54791
- /* Step indicator */
54792
- --cr-step-active: rgb(var(--tb-primary));
54793
- --cr-step-inactive: rgb(var(--tb-mutedText));
54794
- --cr-step-completed: rgb(var(--tb-success));
54795
- --cr-step-text: rgb(255 255 255);
54796
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
54797
- --cr-step-connector: rgba(var(--tb-border), 0.5);
54798
-
54799
- /* Step title */
54800
- --cr-step-title-size: 1.5rem;
54801
-
54802
- /* State backgrounds with alpha */
54803
- --cr-success-bg: rgba(var(--tb-success), 0.1);
54804
- --cr-success-text: rgb(var(--tb-success));
54805
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54806
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
54807
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
54808
- --cr-waitlist-text: rgb(var(--tb-warning));
54809
-
54810
- /* Capacity badges */
54811
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
54812
- --cr-capacity-available-text: rgb(var(--tb-success));
54813
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
54814
- --cr-capacity-low-text: rgb(var(--tb-warning));
54815
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54816
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
54817
-
54818
- /* Borders */
54819
- --cr-border: rgb(var(--tb-border));
54820
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
54821
- --cr-border-selected: rgb(var(--tb-primary));
54822
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
54823
-
54824
- /* Input focus */
54825
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
54826
-
54827
- /* Required marker */
54828
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
54829
-
54830
- /* Payment option cards */
54831
- --cr-payment-border: rgb(var(--tb-border));
54832
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
54833
- --cr-payment-border-selected: rgb(var(--tb-primary));
54834
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
54835
-
54836
- /* Checkmark indicator */
54837
- --cr-check-bg: rgb(var(--tb-primary));
54838
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
54839
-
54840
- /* Summary */
54841
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
54842
- --cr-summary-border: rgb(var(--tb-border));
54843
-
54844
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
54845
-
54846
- /* Shared registration-surface mappings (issue 1174).
54847
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
54848
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
54849
- keep working unchanged. */
54850
- --rb-reg-radius: var(--rb-block-radius);
54851
- --rb-reg-border: var(--cr-border);
54852
- --rb-reg-border-hover: var(--cr-border-hover);
54853
- --rb-reg-border-selected: var(--cr-border-selected);
54854
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
54855
- --rb-reg-option-bg: rgb(var(--tb-background));
54856
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
54857
- --rb-reg-surface-bg: rgb(var(--tb-surface));
54858
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54859
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
54860
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
54861
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
54862
- --rb-reg-check-bg: var(--cr-check-bg);
54863
- --rb-reg-check-text: var(--cr-check-text);
54864
- --rb-reg-step-active: var(--cr-step-active);
54865
- --rb-reg-step-completed: var(--cr-step-completed);
54866
- --rb-reg-step-inactive: var(--cr-step-inactive);
54867
- --rb-reg-step-text: var(--cr-step-text);
54868
- --rb-reg-step-text-active: var(--cr-step-text-active);
54869
- --rb-reg-step-connector: var(--cr-step-connector);
54870
- --rb-reg-summary-bg: var(--cr-summary-bg);
54871
- --rb-reg-summary-border: var(--cr-summary-border);
54872
- --rb-reg-focus-ring: var(--cr-focus-ring);
54873
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
54874
- }
54875
- `;
54876
- }
54877
- //#endregion
54878
53940
  //#region ../theme-core/src/blocks/registry.ts
54879
53941
  /**
54880
53942
  * Global registry of block var generators.
@@ -54889,8 +53951,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
54889
53951
  blockVarRegistry.set("form", generateFormBlockVars);
54890
53952
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
54891
53953
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
54892
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
54893
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
54894
53954
  /**
54895
53955
  * Generate all Tier 3 block-specific CSS variables.
54896
53956
  *
@@ -59819,7 +58879,7 @@ const containerResponsiveThemeCss = `/*
59819
58879
  * Shared: Registration Surface (issue 1174)
59820
58880
  *
59821
58881
  * Wizard-surface primitives shared by the event-registration,
59822
- * course-registration and appointment-booking blocks: surface container,
58882
+ * appointment-booking blocks: surface container,
59823
58883
  * selectable option cards, step indicator, wizard actions row, on-surface
59824
58884
  * text ramp, layout stacks, summary box and skeleton shell lines.
59825
58885
  *
@@ -59862,7 +58922,7 @@ const containerResponsiveThemeCss = `/*
59862
58922
  }
59863
58923
 
59864
58924
  /* Surface container */
59865
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58925
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59866
58926
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
59867
58927
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
59868
58928
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -59892,7 +58952,7 @@ const containerResponsiveThemeCss = `/*
59892
58952
  *
59893
58953
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
59894
58954
  * pairing is pinned by registration-surface-action-reset.test.ts. */
59895
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58955
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59896
58956
  --rb-action-primary-base-background-color: initial;
59897
58957
  --rb-action-primary-base-background-image: initial;
59898
58958
  --rb-action-primary-base-color: initial;
@@ -60000,7 +59060,7 @@ const containerResponsiveThemeCss = `/*
60000
59060
  }
60001
59061
 
60002
59062
  /* Selectable option card */
60003
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
59063
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
60004
59064
  position: relative;
60005
59065
  display: flex;
60006
59066
  align-items: flex-start;
@@ -60017,34 +59077,34 @@ const containerResponsiveThemeCss = `/*
60017
59077
  box-shadow var(--rb-block-transition, 150ms) ease;
60018
59078
  }
60019
59079
 
60020
- :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"]) {
59080
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
60021
59081
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
60022
59082
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
60023
59083
  }
60024
59084
 
60025
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59085
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
60026
59086
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
60027
59087
  outline-offset: 2px;
60028
59088
  }
60029
59089
 
60030
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59090
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
60031
59091
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60032
59092
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
60033
59093
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
60034
59094
  }
60035
59095
 
60036
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59096
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
60037
59097
  cursor: not-allowed;
60038
59098
  opacity: 0.7;
60039
59099
  }
60040
59100
 
60041
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59101
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
60042
59102
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
60043
59103
  box-shadow: none;
60044
59104
  }
60045
59105
 
60046
59106
  /* Check indicator */
60047
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
59107
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
60048
59108
  flex-shrink: 0;
60049
59109
  width: 1.25rem;
60050
59110
  height: 1.25rem;
@@ -60055,18 +59115,18 @@ const containerResponsiveThemeCss = `/*
60055
59115
  justify-content: center;
60056
59116
  }
60057
59117
 
60058
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59118
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
60059
59119
  width: 0.75rem;
60060
59120
  height: 0.75rem;
60061
59121
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60062
59122
  }
60063
59123
 
60064
59124
  /* Step indicator */
60065
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59125
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
60066
59126
  margin-bottom: 1.5rem;
60067
59127
  }
60068
59128
 
60069
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
59129
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
60070
59130
  display: flex;
60071
59131
  align-items: center;
60072
59132
  justify-content: center;
@@ -60076,13 +59136,13 @@ const containerResponsiveThemeCss = `/*
60076
59136
  margin: 0;
60077
59137
  }
60078
59138
 
60079
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
59139
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
60080
59140
  display: flex;
60081
59141
  align-items: center;
60082
59142
  gap: 0.5rem;
60083
59143
  }
60084
59144
 
60085
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
59145
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60086
59146
  width: 1.75rem;
60087
59147
  height: 1.75rem;
60088
59148
  border-radius: 50%;
@@ -60096,47 +59156,47 @@ const containerResponsiveThemeCss = `/*
60096
59156
  transition: background-color var(--rb-block-transition, 150ms) ease;
60097
59157
  }
60098
59158
 
60099
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
59159
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60100
59160
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
60101
59161
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60102
59162
  }
60103
59163
 
60104
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
59164
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60105
59165
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
60106
59166
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60107
59167
  }
60108
59168
 
60109
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
59169
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
60110
59170
  width: 0.75rem;
60111
59171
  height: 0.75rem;
60112
59172
  }
60113
59173
 
60114
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
59174
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60115
59175
  width: 2rem;
60116
59176
  height: 2px;
60117
59177
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
60118
59178
  }
60119
59179
 
60120
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59180
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60121
59181
  font-size: 0.75rem;
60122
59182
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60123
59183
  display: none;
60124
59184
  }
60125
59185
 
60126
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
59186
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60127
59187
  font-weight: 500;
60128
59188
  }
60129
59189
 
60130
59190
  @container rb-site (min-width: 640px) {
60131
59191
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60132
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59192
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60133
59193
  display: inline;
60134
59194
  }
60135
59195
  }
60136
59196
  }
60137
59197
 
60138
59198
  /* Wizard actions row */
60139
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
59199
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60140
59200
  display: flex;
60141
59201
  justify-content: space-between;
60142
59202
  align-items: center;
@@ -60145,56 +59205,56 @@ const containerResponsiveThemeCss = `/*
60145
59205
  }
60146
59206
 
60147
59207
  /* When there's only one action (no back button), push it to the right */
60148
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
59208
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60149
59209
  margin-inline-start: auto;
60150
59210
  }
60151
59211
 
60152
59212
  /* On-surface text ramp */
60153
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
59213
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60154
59214
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60155
59215
  }
60156
59216
 
60157
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
59217
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60158
59218
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
60159
59219
  }
60160
59220
 
60161
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
59221
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60162
59222
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
60163
59223
  }
60164
59224
 
60165
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
59225
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60166
59226
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
60167
59227
  }
60168
59228
 
60169
59229
  /* Layout stacks */
60170
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
59230
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60171
59231
  display: flex;
60172
59232
  flex-direction: column;
60173
59233
  gap: 1rem;
60174
59234
  }
60175
59235
 
60176
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
59236
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60177
59237
  gap: 0.75rem;
60178
59238
  }
60179
59239
 
60180
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
59240
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60181
59241
  display: flex;
60182
59242
  align-items: center;
60183
59243
  gap: 1rem;
60184
59244
  }
60185
59245
 
60186
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
59246
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60187
59247
  justify-content: space-between;
60188
59248
  align-items: flex-start;
60189
59249
  }
60190
59250
 
60191
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
59251
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60192
59252
  display: grid;
60193
59253
  gap: 0.75rem;
60194
59254
  }
60195
59255
 
60196
59256
  /* Summary box */
60197
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
59257
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60198
59258
  padding: 1rem;
60199
59259
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
60200
59260
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -60202,7 +59262,7 @@ const containerResponsiveThemeCss = `/*
60202
59262
  }
60203
59263
 
60204
59264
  /* Skeleton shell lines */
60205
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
59265
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60206
59266
  height: 0.75rem;
60207
59267
  border-radius: 9999px;
60208
59268
  background: linear-gradient(
@@ -60213,24 +59273,24 @@ const containerResponsiveThemeCss = `/*
60213
59273
  );
60214
59274
  }
60215
59275
 
60216
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
59276
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60217
59277
  width: min(26rem, 82%);
60218
59278
  }
60219
59279
 
60220
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
59280
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60221
59281
  width: min(19rem, 68%);
60222
59282
  }
60223
59283
 
60224
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
59284
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60225
59285
  width: min(14rem, 52%);
60226
59286
  }
60227
59287
 
60228
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
59288
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60229
59289
  width: min(10rem, 42%);
60230
59290
  }
60231
59291
 
60232
59292
  /* Skeleton block (rectangular placeholder, pulses) */
60233
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59293
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60234
59294
  height: 2.5rem;
60235
59295
  width: 100%;
60236
59296
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -60248,7 +59308,7 @@ const containerResponsiveThemeCss = `/*
60248
59308
  }
60249
59309
 
60250
59310
  @media (prefers-reduced-motion: reduce) {
60251
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59311
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60252
59312
  animation: none;
60253
59313
  }
60254
59314
  }
@@ -66630,1674 +65690,363 @@ const containerResponsiveThemeCss = `/*
66630
65690
  cursor: not-allowed;
66631
65691
  }
66632
65692
 
66633
- /*
66634
- * Course Details (runtime node)
66635
- * Minimal rules - most styling via rb-* utilities
65693
+ /* =============================================================================
65694
+ * Block: Newsletter Signup
65695
+ * =============================================================================
66636
65696
  */
66637
65697
 
66638
- :where(.theme-scope) .course-details {
66639
- width: 100%;
66640
- max-width: 56.25rem; /* 900px */
66641
- margin-inline: auto;
65698
+ /* Newsletter copy styling */
65699
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
65700
+ font-size: 1.5rem;
65701
+ font-weight: 600;
66642
65702
  }
66643
65703
 
66644
- /* Description prose wrapper */
66645
- :where(.theme-scope) .course-details .cd-description {
66646
- margin-top: 1rem;
65704
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
65705
+ font-size: 1rem;
65706
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65707
+ opacity: 0.85;
66647
65708
  }
66648
65709
 
66649
- /* "Showing X of Y" text */
66650
- :where(.theme-scope) .course-details .cd-sessions__more {
66651
- margin-top: 0.5rem;
66652
- opacity: 0.7;
66653
- font-size: 0.875rem;
65710
+ /* Newsletter form container */
65711
+ :where(.theme-scope) .newsletter-form {
65712
+ width: 100%;
65713
+ max-width: 32rem;
65714
+ margin-left: auto;
65715
+ margin-right: auto;
66654
65716
  }
66655
65717
 
66656
- /* Enrollment status colors (using Tier 3 vars) */
66657
- :where(.theme-scope) .course-details .cd-enrollment--open {
66658
- color: var(--cd-enrollment-open-text);
65718
+ /* Newsletter form fields container */
65719
+ :where(.theme-scope) .newsletter-form-fields {
65720
+ display: flex;
65721
+ flex-direction: column;
65722
+ gap: var(--rb-gap-sm, 0.75rem);
66659
65723
  }
66660
65724
 
66661
- :where(.theme-scope) .course-details .cd-enrollment--closed {
66662
- color: var(--cd-enrollment-closed-text);
65725
+ /* Individual field styling */
65726
+ :where(.theme-scope) .newsletter-field {
65727
+ display: flex;
65728
+ flex-direction: column;
65729
+ gap: 0.25rem;
66663
65730
  }
66664
65731
 
66665
- /* =============================================================================
66666
- * Block: Event whole-series registration
66667
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
66668
- * =============================================================================
66669
- */
66670
-
66671
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
66672
- :where(.theme-scope)
66673
- :where(
66674
- [data-block='event-registration'],
66675
- [data-block='course-registration']
66676
- ) {
66677
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
66678
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
65732
+ /* Required indicator */
65733
+ :where(.theme-scope) .newsletter-required {
65734
+ color: rgb(var(--tb-primary));
65735
+ margin-left: 0.125rem;
66679
65736
  }
66680
65737
 
66681
- /* Container: base styling comes from the shared .rb-reg-surface
66682
- (registration-surface.css); these overrides preserve whole-series
66683
- whole-series registration's established look (fixed padding, centered). */
66684
- :where(.theme-scope)
66685
- :where([data-block='event-registration'], [data-block='course-registration'])
66686
- .er-whole-series-container {
66687
- padding: 1.5rem;
66688
- margin-inline: auto;
65738
+ /* Submit button container */
65739
+ :where(.theme-scope) .newsletter-submit {
65740
+ margin-top: 0.5rem;
66689
65741
  }
66690
65742
 
66691
- /* Empty/unavailable */
66692
- :where(.theme-scope)
66693
- :where([data-block='event-registration'], [data-block='course-registration'])
66694
- .er-whole-series-empty {
66695
- border-radius: var(--rb-block-radius);
66696
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
66697
- padding: 2.5rem;
66698
- text-align: center;
65743
+ /* ALTCHA widget container */
65744
+ :where(.theme-scope) .newsletter-altcha {
65745
+ margin-top: 0.75rem;
65746
+ display: flex;
65747
+ justify-content: center;
66699
65748
  }
66700
65749
 
66701
- :where(.theme-scope)
66702
- :where([data-block='event-registration'], [data-block='course-registration'])
66703
- .er-whole-series-empty__text {
66704
- opacity: 0.7;
65750
+ /* Privacy note */
65751
+ :where(.theme-scope) .newsletter-privacy-note {
65752
+ margin-top: 0.75rem;
65753
+ font-size: 1rem;
65754
+ line-height: 1.6;
65755
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65756
+ text-align: center;
66705
65757
  }
66706
65758
 
66707
65759
  /* =============================================================================
66708
- * Layout (two-column)
65760
+ * Inline Variant - Horizontal layout
66709
65761
  * =============================================================================
66710
65762
  */
66711
- :where(.theme-scope)
66712
- :where([data-block='event-registration'], [data-block='course-registration'])
66713
- .er-whole-series-layout {
66714
- display: grid;
66715
- gap: 1.5rem;
66716
- grid-template-columns: 1fr;
66717
- }
66718
65763
 
66719
- @container rb-site (min-width: 768px) {
66720
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66721
- :where(.theme-scope)
66722
- :where(
66723
- [data-block='event-registration'],
66724
- [data-block='course-registration']
66725
- )
66726
- .er-whole-series-layout--with-sidebar {
66727
- grid-template-columns: 1fr 280px;
66728
- }
66729
- }
65764
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65765
+ flex-direction: row;
65766
+ align-items: flex-end;
65767
+ flex-wrap: wrap;
65768
+ gap: var(--rb-gap-sm, 0.75rem);
66730
65769
  }
66731
65770
 
66732
- :where(.theme-scope)
66733
- :where([data-block='event-registration'], [data-block='course-registration'])
66734
- .er-whole-series-layout__main {
66735
- min-width: 0;
65771
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65772
+ flex: 1 1 auto;
65773
+ min-width: 10rem;
66736
65774
  }
66737
65775
 
66738
- :where(.theme-scope)
66739
- :where([data-block='event-registration'], [data-block='course-registration'])
66740
- .er-whole-series-layout__sidebar {
66741
- display: none;
65776
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
65777
+ margin-top: 0;
65778
+ flex-shrink: 0;
66742
65779
  }
66743
65780
 
66744
- @container rb-site (min-width: 768px) {
65781
+ /* Mobile fallback for inline variant */
65782
+ @container rb-site (max-width: 640px) {
66745
65783
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66746
- :where(.theme-scope)
66747
- :where(
66748
- [data-block='event-registration'],
66749
- [data-block='course-registration']
66750
- )
66751
- .er-whole-series-layout__sidebar {
66752
- display: block;
65784
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65785
+ flex-direction: column;
65786
+ }
65787
+
65788
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65789
+ min-width: 100%;
66753
65790
  }
66754
65791
  }
66755
65792
  }
66756
65793
 
66757
65794
  /* =============================================================================
66758
- * Step Indicator
65795
+ * Editorial Split Variant
66759
65796
  * =============================================================================
66760
65797
  */
66761
- :where(.theme-scope)
66762
- :where([data-block='event-registration'], [data-block='course-registration'])
66763
- .er-whole-series-steps {
66764
- display: flex;
66765
- align-items: center;
66766
- gap: 0.5rem;
66767
- margin-bottom: 1.5rem;
66768
- }
66769
65798
 
66770
- :where(.theme-scope)
66771
- :where([data-block='event-registration'], [data-block='course-registration'])
66772
- .er-whole-series-step {
66773
- display: flex;
65799
+ :where(.theme-scope) .newsletter-editorial-split {
65800
+ display: grid;
65801
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
65802
+ gap: clamp(2.5rem, 7vw, 7rem);
66774
65803
  align-items: center;
66775
- gap: 0.5rem;
65804
+ text-align: left;
66776
65805
  }
66777
65806
 
66778
- :where(.theme-scope)
66779
- :where([data-block='event-registration'], [data-block='course-registration'])
66780
- .er-whole-series-step-circle {
66781
- width: 1.75rem;
66782
- height: 1.75rem;
66783
- border-radius: 9999px;
65807
+ :where(.theme-scope) .newsletter-editorial-split-copy {
66784
65808
  display: flex;
66785
- align-items: center;
66786
- justify-content: center;
66787
- font-size: 0.75rem;
66788
- font-weight: 600;
66789
- background: var(--er-step-inactive);
66790
- color: var(--er-step-text);
66791
- transition: background-color 0.2s ease;
65809
+ flex-direction: column;
65810
+ gap: var(--rb-gap-sm, 0.75rem);
66792
65811
  }
66793
65812
 
66794
- :where(.theme-scope)
66795
- :where([data-block='event-registration'], [data-block='course-registration'])
66796
- .er-whole-series-step-circle--active {
66797
- background: var(--er-step-active);
66798
- color: var(--er-step-text-active);
65813
+ :where(.theme-scope) .newsletter-editorial-split-form {
65814
+ min-width: 0;
66799
65815
  }
66800
65816
 
66801
- :where(.theme-scope)
66802
- :where([data-block='event-registration'], [data-block='course-registration'])
66803
- .er-whole-series-step-circle--completed {
66804
- background: var(--er-step-completed);
66805
- color: var(--er-step-text);
65817
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
65818
+ max-width: none;
65819
+ margin-inline: 0;
66806
65820
  }
66807
65821
 
66808
- :where(.theme-scope)
66809
- :where([data-block='event-registration'], [data-block='course-registration'])
66810
- .er-whole-series-step-label {
66811
- font-size: 0.875rem;
65822
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
65823
+ font-size: clamp(2rem, 4vw, 3.5rem);
66812
65824
  font-weight: 500;
66813
- color: rgb(var(--tb-mutedText));
66814
- display: none;
66815
65825
  }
66816
65826
 
66817
- @container rb-site (min-width: 640px) {
65827
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
65828
+ text-align: left;
65829
+ }
65830
+
65831
+ @container rb-site (max-width: 767px) {
66818
65832
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66819
- :where(.theme-scope)
66820
- :where(
66821
- [data-block='event-registration'],
66822
- [data-block='course-registration']
66823
- )
66824
- .er-whole-series-step-label {
66825
- display: block;
65833
+ :where(.theme-scope) .newsletter-editorial-split {
65834
+ grid-template-columns: minmax(0, 1fr);
65835
+ gap: 2rem;
66826
65836
  }
66827
65837
  }
66828
65838
  }
66829
65839
 
66830
- :where(.theme-scope)
66831
- :where([data-block='event-registration'], [data-block='course-registration'])
66832
- .er-whole-series-step-label--active {
66833
- color: var(--er-on-surface);
66834
- font-weight: 600;
66835
- }
66836
-
66837
- :where(.theme-scope)
66838
- :where([data-block='event-registration'], [data-block='course-registration'])
66839
- .er-whole-series-step-connector {
66840
- flex: 1;
66841
- height: 2px;
66842
- background: var(--er-step-connector);
66843
- min-width: 1rem;
66844
- }
65840
+ /* =============================================================================
65841
+ * Success State
65842
+ * =============================================================================
65843
+ */
66845
65844
 
66846
- :where(.theme-scope)
66847
- :where([data-block='event-registration'], [data-block='course-registration'])
66848
- .er-whole-series-step-connector--completed {
66849
- background: var(--er-step-completed);
65845
+ :where(.theme-scope) .newsletter-success {
65846
+ text-align: center;
66850
65847
  }
66851
65848
 
66852
- :where(.theme-scope)
66853
- :where([data-block='event-registration'], [data-block='course-registration'])
66854
- .er-whole-series-step-check {
66855
- width: 0.875rem;
66856
- height: 0.875rem;
65849
+ :where(.theme-scope) .newsletter-success .fb-success {
65850
+ padding: 1rem 1.5rem;
65851
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
65852
+ border-radius: var(--radius-md, 0.5rem);
65853
+ color: rgb(var(--tb-text));
66857
65854
  }
66858
65855
 
66859
65856
  /* =============================================================================
66860
- * Lists
65857
+ * Block: Contact + Newsletter
66861
65858
  * =============================================================================
66862
65859
  */
66863
- :where(.theme-scope)
66864
- :where([data-block='event-registration'], [data-block='course-registration'])
66865
- .er-whole-series-run-list {
65860
+
65861
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
66866
65862
  display: grid;
66867
- gap: 1rem;
65863
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
65864
+ gap: clamp(2.5rem, 6vw, 4rem);
65865
+ align-items: start;
66868
65866
  }
66869
65867
 
66870
- /* =============================================================================
66871
- * Run cards
66872
- * =============================================================================
66873
- */
66874
- :where(.theme-scope)
66875
- :where([data-block='event-registration'], [data-block='course-registration'])
66876
- .er-whole-series-run-card {
66877
- border-radius: var(--rb-block-radius);
66878
- border: 1px solid var(--er-border);
66879
- padding: 1rem;
66880
- background: rgb(var(--tb-background));
66881
- cursor: pointer;
66882
- transition:
66883
- border-color var(--rb-block-transition) ease,
66884
- transform var(--rb-block-transition) ease;
65868
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
65869
+ min-width: 0;
66885
65870
  }
66886
65871
 
66887
- :where(.theme-scope)
66888
- :where([data-block='event-registration'], [data-block='course-registration'])
66889
- .er-whole-series-run-card:hover {
66890
- border-color: var(--er-border-hover);
66891
- transform: translateY(-1px);
65872
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
65873
+ margin-bottom: 1.5rem;
66892
65874
  }
66893
65875
 
66894
- :where(.theme-scope)
66895
- :where([data-block='event-registration'], [data-block='course-registration'])
66896
- .er-whole-series-run-card:focus-visible {
66897
- outline: 2px solid var(--er-focus-ring);
66898
- outline-offset: 2px;
65876
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
65877
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
65878
+ margin: 0 0 0.75rem;
66899
65879
  }
66900
65880
 
66901
- :where(.theme-scope)
66902
- :where([data-block='event-registration'], [data-block='course-registration'])
66903
- .er-whole-series-run-card--selected {
66904
- border-color: var(--er-border-selected);
66905
- box-shadow: 0 0 0 3px var(--er-focus-ring);
65881
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
65882
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
65883
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66906
65884
  }
66907
65885
 
66908
- :where(.theme-scope)
66909
- :where([data-block='event-registration'], [data-block='course-registration'])
66910
- .er-whole-series-run-card__title {
66911
- margin: 0 0 0.25rem 0;
66912
- font-weight: 700;
66913
- font-size: 1.125rem;
65886
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
65887
+ display: flex;
65888
+ flex-direction: column;
65889
+ align-items: flex-start;
66914
65890
  }
66915
65891
 
66916
- :where(.theme-scope)
66917
- :where([data-block='event-registration'], [data-block='course-registration'])
66918
- .er-whole-series-run-card__status {
66919
- margin: 0.25rem 0 0 0;
66920
- opacity: 0.8;
65892
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
65893
+ max-width: none;
65894
+ margin-left: 0;
65895
+ margin-right: 0;
66921
65896
  }
66922
65897
 
66923
- :where(.theme-scope)
66924
- :where([data-block='event-registration'], [data-block='course-registration'])
66925
- .er-whole-series-run-card__sessions,
66926
- :where(.theme-scope)
66927
- :where([data-block='event-registration'], [data-block='course-registration'])
66928
- .er-whole-series-run-card__price,
66929
- :where(.theme-scope)
66930
- :where([data-block='event-registration'], [data-block='course-registration'])
66931
- .er-whole-series-run-card__capacity,
66932
- :where(.theme-scope)
66933
- :where([data-block='event-registration'], [data-block='course-registration'])
66934
- .er-whole-series-run-card__venue {
66935
- margin: 0.25rem 0 0 0;
66936
- opacity: 0.85;
65898
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
65899
+ text-align: left;
66937
65900
  }
66938
65901
 
66939
- /* =============================================================================
66940
- * Capacity Badges
66941
- * =============================================================================
66942
- */
66943
- :where(.theme-scope)
66944
- :where([data-block='event-registration'], [data-block='course-registration'])
66945
- .er-whole-series-capacity-badge {
66946
- display: inline-block;
66947
- padding: 0.125rem 0.5rem;
66948
- border-radius: 9999px;
66949
- font-size: 0.75rem;
66950
- font-weight: 500;
65902
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
65903
+ display: flex;
65904
+ flex-direction: column;
65905
+ gap: 1rem;
66951
65906
  }
66952
65907
 
66953
- :where(.theme-scope)
66954
- :where([data-block='event-registration'], [data-block='course-registration'])
66955
- .er-whole-series-capacity-badge--available {
66956
- background: var(--er-capacity-available-bg);
66957
- color: var(--er-capacity-available-text);
65908
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
65909
+ display: grid;
65910
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
65911
+ gap: 1rem;
66958
65912
  }
66959
65913
 
66960
- :where(.theme-scope)
66961
- :where([data-block='event-registration'], [data-block='course-registration'])
66962
- .er-whole-series-capacity-badge--low {
66963
- background: var(--er-capacity-low-bg);
66964
- color: var(--er-capacity-low-text);
65914
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
65915
+ display: flex;
65916
+ flex-direction: column;
65917
+ gap: 0.25rem;
66965
65918
  }
66966
65919
 
66967
- :where(.theme-scope)
66968
- :where([data-block='event-registration'], [data-block='course-registration'])
66969
- .er-whole-series-capacity-badge--soldout {
66970
- background: var(--er-capacity-soldout-bg);
66971
- color: var(--er-capacity-soldout-text);
65920
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
65921
+ display: flex;
65922
+ flex-direction: column;
65923
+ gap: 0.5rem;
65924
+ border: none;
65925
+ padding: 0;
65926
+ margin: 0;
66972
65927
  }
66973
65928
 
66974
- /* =============================================================================
66975
- * Summary + Details
66976
- * =============================================================================
66977
- */
66978
- :where(.theme-scope)
66979
- :where([data-block='event-registration'], [data-block='course-registration'])
66980
- .er-whole-series-details {
66981
- display: grid;
66982
- gap: 1rem;
65929
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
65930
+ display: flex;
65931
+ align-items: center;
65932
+ gap: 0.5rem;
66983
65933
  }
66984
65934
 
66985
- :where(.theme-scope)
66986
- :where([data-block='event-registration'], [data-block='course-registration'])
66987
- .er-whole-series-summary {
65935
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
65936
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
65937
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66988
65938
  border-radius: var(--rb-block-radius);
66989
- border: 1px solid var(--er-summary-border);
66990
65939
  padding: 1rem;
66991
- background: var(--er-summary-bg);
66992
- }
66993
-
66994
- :where(.theme-scope)
66995
- :where([data-block='event-registration'], [data-block='course-registration'])
66996
- .er-whole-series-summary__title {
66997
- margin: 0;
66998
- font-size: 1.25rem;
66999
- font-weight: 800;
65940
+ font-size: 0.875rem;
67000
65941
  }
67001
65942
 
67002
- :where(.theme-scope)
67003
- :where([data-block='event-registration'], [data-block='course-registration'])
67004
- .er-whole-series-summary__sessions-title {
67005
- margin: 0.75rem 0 0.5rem 0;
67006
- font-weight: 700;
65943
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
65944
+ background-color: var(--fb-success-bg);
65945
+ color: var(--fb-success-text);
65946
+ border: 1px solid var(--fb-success-border);
67007
65947
  }
67008
65948
 
67009
- :where(.theme-scope)
67010
- :where([data-block='event-registration'], [data-block='course-registration'])
67011
- .er-whole-series-summary__sessions-list {
67012
- list-style: none;
67013
- padding: 0;
67014
- margin: 0;
67015
- display: grid;
67016
- gap: 0.35rem;
65949
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
65950
+ background-color: var(--fb-error-bg);
65951
+ color: var(--fb-error-text);
65952
+ border: 1px solid var(--fb-error-border);
67017
65953
  }
67018
65954
 
67019
- :where(.theme-scope)
67020
- :where([data-block='event-registration'], [data-block='course-registration'])
67021
- .er-whole-series-summary__session {
67022
- opacity: 0.9;
65955
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
65956
+ background-color: var(--fb-empty-bg);
65957
+ color: var(--fb-empty-text);
65958
+ border: 1px dashed var(--fb-empty-border);
65959
+ text-align: center;
67023
65960
  }
67024
65961
 
67025
- :where(.theme-scope)
67026
- :where([data-block='event-registration'], [data-block='course-registration'])
67027
- .er-whole-series-summary__venue,
67028
- :where(.theme-scope)
67029
- :where([data-block='event-registration'], [data-block='course-registration'])
67030
- .er-whole-series-summary__price,
67031
- :where(.theme-scope)
67032
- :where([data-block='event-registration'], [data-block='course-registration'])
67033
- .er-whole-series-summary__membership {
67034
- margin: 0.5rem 0 0 0;
67035
- opacity: 0.9;
65962
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
65963
+ margin-top: 0.5rem;
67036
65964
  }
67037
65965
 
67038
65966
  /* =============================================================================
67039
- * Form
65967
+ * Block: Team Members
67040
65968
  * =============================================================================
65969
+ *
65970
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
65971
+ * changing global fragment defaults. We expose these controls on the block and
65972
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
67041
65973
  */
67042
- :where(.theme-scope)
67043
- :where([data-block='event-registration'], [data-block='course-registration'])
67044
- .er-whole-series-form {
67045
- display: grid;
67046
- gap: 1rem;
65974
+
65975
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
65976
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
65977
+ text-align: left;
67047
65978
  }
67048
65979
 
67049
- :where(.theme-scope)
67050
- :where([data-block='event-registration'], [data-block='course-registration'])
67051
- .er-whole-series-form__field {
67052
- display: grid;
67053
- gap: 0.35rem;
65980
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
65981
+ align-items: flex-start;
65982
+ text-align: left;
67054
65983
  }
67055
65984
 
67056
- :where(.theme-scope)
67057
- :where([data-block='event-registration'], [data-block='course-registration'])
67058
- .er-whole-series-form__label {
67059
- font-size: 0.875rem;
67060
- font-weight: 600;
65985
+ @container rb-site (min-width: 1024px) {
65986
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
65987
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
65988
+ width: 75%;
65989
+ margin-left: 0;
65990
+ margin-right: auto;
65991
+ }
65992
+ }
67061
65993
  }
67062
65994
 
67063
- :where(.theme-scope)
67064
- :where([data-block='event-registration'], [data-block='course-registration'])
67065
- .er-whole-series-form__label--required::after {
67066
- content: ' *';
67067
- color: var(--er-required);
65995
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
65996
+ display: block;
65997
+ width: 100%;
65998
+ height: auto;
67068
65999
  }
67069
66000
 
67070
- :where(.theme-scope)
67071
- :where([data-block='event-registration'], [data-block='course-registration'])
67072
- .er-whole-series-form__input {
67073
- border-radius: calc(var(--rb-block-radius) * 0.6);
67074
- border: 1px solid var(--er-border);
67075
- padding: 0.6rem 0.75rem;
67076
- background: rgb(var(--tb-background));
67077
- color: rgb(var(--tb-foreground));
66001
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
66002
+ font-weight: 600;
67078
66003
  }
67079
66004
 
67080
- :where(.theme-scope)
67081
- :where([data-block='event-registration'], [data-block='course-registration'])
67082
- .er-whole-series-form__textarea {
67083
- border-radius: calc(var(--rb-block-radius) * 0.6);
67084
- border: 1px solid var(--er-border);
67085
- padding: 0.6rem 0.75rem;
67086
- background: rgb(var(--tb-background));
67087
- color: rgb(var(--tb-foreground));
67088
- resize: vertical;
66005
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
66006
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
66007
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
66008
+ --rb-team-image-basis: 33.333%;
67089
66009
  }
67090
66010
 
67091
- :where(.theme-scope)
67092
- :where([data-block='event-registration'], [data-block='course-registration'])
67093
- .er-whole-series-form__input:focus,
67094
- :where(.theme-scope)
67095
- :where([data-block='event-registration'], [data-block='course-registration'])
67096
- .er-whole-series-form__textarea:focus {
67097
- outline: 2px solid var(--er-focus-ring);
67098
- outline-offset: 2px;
66011
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
66012
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
66013
+ --rb-team-image-basis: 25%;
67099
66014
  }
67100
66015
 
67101
- :where(.theme-scope)
67102
- :where([data-block='event-registration'], [data-block='course-registration'])
67103
- .er-whole-series-form__input--error,
67104
- :where(.theme-scope)
67105
- :where([data-block='event-registration'], [data-block='course-registration'])
67106
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
67107
- border-color: var(--er-border-error);
66016
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
66017
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
66018
+ --rb-team-image-basis: 33.333%;
67108
66019
  }
67109
66020
 
67110
- :where(.theme-scope)
67111
- :where([data-block='event-registration'], [data-block='course-registration'])
67112
- .er-whole-series-form__error {
67113
- font-size: 0.875rem;
67114
- color: var(--er-error-text);
66021
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
66022
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
66023
+ --rb-team-image-basis: 40%;
67115
66024
  }
67116
66025
 
67117
- :where(.theme-scope)
67118
- :where([data-block='event-registration'], [data-block='course-registration'])
67119
- .er-whole-series-form__hint {
67120
- font-size: 0.875rem;
67121
- opacity: 0.7;
66026
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
66027
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
66028
+ --rb-team-image-basis: 50%;
67122
66029
  }
67123
66030
 
67124
- /* Logged-in user hint with logout link */
67125
- :where(.theme-scope)
67126
- :where([data-block='event-registration'], [data-block='course-registration'])
67127
- .er-whole-series-logged-in-hint {
67128
- font-size: 0.875rem;
67129
- opacity: 0.7;
67130
- margin: 0.25rem 0 0 0;
66031
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
66032
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
66033
+ --rb-team-image-basis: 66.667%;
67131
66034
  }
67132
66035
 
67133
- :where(.theme-scope)
67134
- :where([data-block='event-registration'], [data-block='course-registration'])
67135
- .er-whole-series-link {
67136
- background: none;
67137
- border: none;
67138
- padding: 0;
67139
- font-size: inherit;
67140
- color: rgb(var(--tb-primary));
67141
- cursor: pointer;
67142
- text-decoration: underline;
67143
- text-underline-offset: 2px;
66036
+ /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
66037
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
66038
+ width: 100%;
66039
+ overflow: hidden;
67144
66040
  }
67145
66041
 
67146
- :where(.theme-scope)
67147
- :where([data-block='event-registration'], [data-block='course-registration'])
67148
- .er-whole-series-link:hover {
67149
- text-decoration: none;
66042
+ /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
66043
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
66044
+ max-width: var(--rb-team-thumb-max);
67150
66045
  }
67151
66046
 
67152
- /* =============================================================================
67153
- * Actions
67154
- * =============================================================================
67155
- */
67156
- :where(.theme-scope)
67157
- :where([data-block='event-registration'], [data-block='course-registration'])
67158
- .er-whole-series-actions {
67159
- display: flex;
67160
- align-items: center;
67161
- justify-content: space-between;
67162
- gap: 0.75rem;
67163
- margin-top: 0.25rem;
67164
- }
67165
-
67166
- :where(.theme-scope)
67167
- :where([data-block='event-registration'], [data-block='course-registration'])
67168
- .er-whole-series-back-btn {
67169
- border: 0;
67170
- background: transparent;
67171
- color: var(--er-on-surface);
67172
- opacity: 0.8;
67173
- padding: 0.25rem 0.25rem;
67174
- cursor: pointer;
67175
- }
67176
-
67177
- :where(.theme-scope)
67178
- :where([data-block='event-registration'], [data-block='course-registration'])
67179
- .er-whole-series-back-btn:hover {
67180
- opacity: 1;
67181
- text-decoration: underline;
67182
- }
67183
-
67184
- /* =============================================================================
67185
- * Payment Options
67186
- * =============================================================================
67187
- */
67188
- :where(.theme-scope)
67189
- :where([data-block='event-registration'], [data-block='course-registration'])
67190
- .er-whole-series-payment__options {
67191
- display: grid;
67192
- gap: 0.5rem;
67193
- }
67194
-
67195
- :where(.theme-scope)
67196
- :where([data-block='event-registration'], [data-block='course-registration'])
67197
- .er-whole-series-payment__option {
67198
- display: flex;
67199
- align-items: center;
67200
- gap: 0.5rem;
67201
- }
67202
-
67203
- /* =============================================================================
67204
- * Payment Tiles (Card Grid)
67205
- * =============================================================================
67206
- */
67207
- :where(.theme-scope)
67208
- :where([data-block='event-registration'], [data-block='course-registration'])
67209
- .er-whole-series-payment-tiles {
67210
- display: grid;
67211
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
67212
- gap: 0.75rem;
67213
- }
67214
-
67215
- :where(.theme-scope)
67216
- :where([data-block='event-registration'], [data-block='course-registration'])
67217
- .er-whole-series-payment-tile {
67218
- border-radius: var(--rb-block-radius);
67219
- border: 1px solid var(--er-payment-border);
67220
- padding: 1rem;
67221
- background: rgb(var(--tb-background));
67222
- cursor: pointer;
67223
- transition:
67224
- border-color 0.15s ease,
67225
- box-shadow 0.15s ease,
67226
- background-color 0.15s ease;
67227
- position: relative;
67228
- }
67229
-
67230
- :where(.theme-scope)
67231
- :where([data-block='event-registration'], [data-block='course-registration'])
67232
- .er-whole-series-payment-tile:hover {
67233
- border-color: var(--er-payment-border-hover);
67234
- }
67235
-
67236
- :where(.theme-scope)
67237
- :where([data-block='event-registration'], [data-block='course-registration'])
67238
- .er-whole-series-payment-tile:focus-visible {
67239
- outline: 2px solid var(--er-focus-ring);
67240
- outline-offset: 2px;
67241
- }
67242
-
67243
- :where(.theme-scope)
67244
- :where([data-block='event-registration'], [data-block='course-registration'])
67245
- .er-whole-series-payment-tile--selected {
67246
- border-color: var(--er-payment-border-selected);
67247
- background: var(--er-payment-bg-selected);
67248
- box-shadow: 0 0 0 3px var(--er-focus-ring);
67249
- }
67250
-
67251
- :where(.theme-scope)
67252
- :where([data-block='event-registration'], [data-block='course-registration'])
67253
- .er-whole-series-payment-tile--upsell {
67254
- border-style: dashed;
67255
- }
67256
-
67257
- :where(.theme-scope)
67258
- :where([data-block='event-registration'], [data-block='course-registration'])
67259
- .er-whole-series-payment-tile__header {
67260
- display: flex;
67261
- align-items: flex-start;
67262
- justify-content: space-between;
67263
- gap: 0.5rem;
67264
- }
67265
-
67266
- :where(.theme-scope)
67267
- :where([data-block='event-registration'], [data-block='course-registration'])
67268
- .er-whole-series-payment-tile__name {
67269
- margin: 0;
67270
- font-weight: 600;
67271
- font-size: 1rem;
67272
- }
67273
-
67274
- :where(.theme-scope)
67275
- :where([data-block='event-registration'], [data-block='course-registration'])
67276
- .er-whole-series-payment-tile__description {
67277
- margin: 0.25rem 0 0 0;
67278
- font-size: 0.875rem;
67279
- opacity: 0.7;
67280
- }
67281
-
67282
- :where(.theme-scope)
67283
- :where([data-block='event-registration'], [data-block='course-registration'])
67284
- .er-whole-series-payment-tile__price {
67285
- font-weight: 600;
67286
- font-size: 0.875rem;
67287
- white-space: nowrap;
67288
- }
67289
-
67290
- :where(.theme-scope)
67291
- :where([data-block='event-registration'], [data-block='course-registration'])
67292
- .er-whole-series-payment-tile__badge {
67293
- display: inline-block;
67294
- padding: 0.125rem 0.5rem;
67295
- border-radius: 9999px;
67296
- font-size: 0.75rem;
67297
- font-weight: 500;
67298
- margin-top: 0.5rem;
67299
- }
67300
-
67301
- /* Checkmark indicator on selected tile */
67302
- :where(.theme-scope)
67303
- :where([data-block='event-registration'], [data-block='course-registration'])
67304
- .er-whole-series-payment-tile__check {
67305
- position: absolute;
67306
- top: 0.5rem;
67307
- right: 0.5rem;
67308
- width: 1.25rem;
67309
- height: 1.25rem;
67310
- border-radius: 9999px;
67311
- background: var(--er-check-bg);
67312
- color: var(--er-check-text);
67313
- display: flex;
67314
- align-items: center;
67315
- justify-content: center;
67316
- opacity: 0;
67317
- transition: opacity 0.15s ease;
67318
- }
67319
-
67320
- :where(.theme-scope)
67321
- :where([data-block='event-registration'], [data-block='course-registration'])
67322
- .er-whole-series-payment-tile--selected
67323
- .er-whole-series-payment-tile__check {
67324
- opacity: 1;
67325
- }
67326
-
67327
- /* =============================================================================
67328
- * Booking Mode Step
67329
- * =============================================================================
67330
- */
67331
- :where(.theme-scope)
67332
- :where([data-block='event-registration'], [data-block='course-registration'])
67333
- .er-whole-series-booking-mode {
67334
- display: grid;
67335
- gap: 1rem;
67336
- }
67337
-
67338
- :where(.theme-scope)
67339
- :where([data-block='event-registration'], [data-block='course-registration'])
67340
- .er-whole-series-booking-mode__title {
67341
- margin: 0;
67342
- font-size: var(--er-step-title-size);
67343
- font-weight: 700;
67344
- }
67345
-
67346
- :where(.theme-scope)
67347
- :where([data-block='event-registration'], [data-block='course-registration'])
67348
- .er-whole-series-booking-mode__subtitle {
67349
- margin: 0.25rem 0 0 0;
67350
- opacity: 0.7;
67351
- }
67352
-
67353
- :where(.theme-scope)
67354
- :where([data-block='event-registration'], [data-block='course-registration'])
67355
- .er-whole-series-booking-mode__link {
67356
- margin-top: 0.5rem;
67357
- font-size: 0.875rem;
67358
- }
67359
-
67360
- :where(.theme-scope)
67361
- :where([data-block='event-registration'], [data-block='course-registration'])
67362
- .er-whole-series-booking-mode__link
67363
- a {
67364
- color: rgb(var(--tb-primary));
67365
- text-decoration: underline;
67366
- cursor: pointer;
67367
- }
67368
-
67369
- :where(.theme-scope)
67370
- :where([data-block='event-registration'], [data-block='course-registration'])
67371
- .er-whole-series-booking-mode__link
67372
- a:hover {
67373
- text-decoration: none;
67374
- }
67375
-
67376
- /* =============================================================================
67377
- * Membership Hero
67378
- * =============================================================================
67379
- */
67380
- :where(.theme-scope)
67381
- :where([data-block='event-registration'], [data-block='course-registration'])
67382
- .er-whole-series-membership-hero {
67383
- border-radius: var(--rb-block-radius);
67384
- background: var(--er-success-bg);
67385
- border: 1px solid rgba(var(--tb-success), 0.2);
67386
- padding: 1.5rem;
67387
- text-align: center;
67388
- }
67389
-
67390
- :where(.theme-scope)
67391
- :where([data-block='event-registration'], [data-block='course-registration'])
67392
- .er-whole-series-membership-hero__icon {
67393
- font-size: 2rem;
67394
- margin-bottom: 0.75rem;
67395
- }
67396
-
67397
- :where(.theme-scope)
67398
- :where([data-block='event-registration'], [data-block='course-registration'])
67399
- .er-whole-series-membership-hero__title {
67400
- margin: 0;
67401
- font-size: 1.25rem;
67402
- font-weight: 700;
67403
- color: var(--er-success-text);
67404
- }
67405
-
67406
- :where(.theme-scope)
67407
- :where([data-block='event-registration'], [data-block='course-registration'])
67408
- .er-whole-series-membership-hero__subtitle {
67409
- margin: 0.25rem 0 0 0;
67410
- font-size: 0.875rem;
67411
- opacity: 0.8;
67412
- }
67413
-
67414
- /* =============================================================================
67415
- * Portal Auth Sidebar
67416
- * =============================================================================
67417
- */
67418
- :where(.theme-scope)
67419
- :where([data-block='event-registration'], [data-block='course-registration'])
67420
- .er-whole-series-portal-sidebar {
67421
- border-radius: var(--rb-block-radius);
67422
- border: 1px solid var(--er-border);
67423
- padding: 1.25rem;
67424
- background: rgb(var(--tb-surface));
67425
- color: var(--er-on-surface);
67426
- }
67427
-
67428
- :where(.theme-scope)
67429
- :where([data-block='event-registration'], [data-block='course-registration'])
67430
- .er-whole-series-portal-sidebar__icon {
67431
- font-size: 1.5rem;
67432
- margin-bottom: 0.5rem;
67433
- }
67434
-
67435
- :where(.theme-scope)
67436
- :where([data-block='event-registration'], [data-block='course-registration'])
67437
- .er-whole-series-portal-sidebar__title {
67438
- margin: 0;
67439
- font-size: 1rem;
67440
- font-weight: 600;
67441
- }
67442
-
67443
- :where(.theme-scope)
67444
- :where([data-block='event-registration'], [data-block='course-registration'])
67445
- .er-whole-series-portal-sidebar__text {
67446
- margin: 0.5rem 0 0 0;
67447
- font-size: 0.875rem;
67448
- opacity: 0.8;
67449
- }
67450
-
67451
- :where(.theme-scope)
67452
- :where([data-block='event-registration'], [data-block='course-registration'])
67453
- .er-whole-series-portal-sidebar__action {
67454
- margin-top: 1rem;
67455
- }
67456
-
67457
- :where(.theme-scope)
67458
- :where([data-block='event-registration'], [data-block='course-registration'])
67459
- .er-whole-series-portal-sidebar__link {
67460
- color: rgb(var(--tb-primary));
67461
- cursor: pointer;
67462
- text-decoration: underline;
67463
- font-size: 0.875rem;
67464
- }
67465
-
67466
- :where(.theme-scope)
67467
- :where([data-block='event-registration'], [data-block='course-registration'])
67468
- .er-whole-series-portal-sidebar__link:hover {
67469
- text-decoration: none;
67470
- }
67471
-
67472
- /* =============================================================================
67473
- * Modal (for Magic Link)
67474
- * =============================================================================
67475
- */
67476
- :where(.theme-scope)
67477
- :where([data-block='event-registration'], [data-block='course-registration'])
67478
- .er-whole-series-modal-overlay {
67479
- position: fixed;
67480
- inset: 0;
67481
- background: rgba(var(--tb-scrim), 0.5);
67482
- display: flex;
67483
- align-items: center;
67484
- justify-content: center;
67485
- z-index: 100;
67486
- animation: er-whole-series-fade-in 0.15s ease;
67487
- }
67488
-
67489
- :where(.theme-scope)
67490
- :where([data-block='event-registration'], [data-block='course-registration'])
67491
- .er-whole-series-modal {
67492
- background: rgb(var(--tb-surface));
67493
- color: var(--er-on-surface);
67494
- border-radius: var(--rb-block-radius);
67495
- padding: 1.5rem;
67496
- max-width: 28rem;
67497
- width: calc(100% - 2rem);
67498
- position: relative;
67499
- animation: er-whole-series-slide-up 0.2s ease;
67500
- }
67501
-
67502
- :where(.theme-scope)
67503
- :where([data-block='event-registration'], [data-block='course-registration'])
67504
- .er-whole-series-modal-close {
67505
- position: absolute;
67506
- top: 0.75rem;
67507
- right: 0.75rem;
67508
- background: transparent;
67509
- border: 0;
67510
- padding: 0.25rem;
67511
- cursor: pointer;
67512
- opacity: 0.6;
67513
- transition: opacity 0.15s ease;
67514
- }
67515
-
67516
- :where(.theme-scope)
67517
- :where([data-block='event-registration'], [data-block='course-registration'])
67518
- .er-whole-series-modal-close:hover {
67519
- opacity: 1;
67520
- }
67521
-
67522
- @keyframes er-whole-series-fade-in {
67523
- from {
67524
- opacity: 0;
67525
- }
67526
- to {
67527
- opacity: 1;
67528
- }
67529
- }
67530
-
67531
- @keyframes er-whole-series-slide-up {
67532
- from {
67533
- opacity: 0;
67534
- transform: translateY(10px);
67535
- }
67536
- to {
67537
- opacity: 1;
67538
- transform: translateY(0);
67539
- }
67540
- }
67541
-
67542
- /* Reduced motion */
67543
- @media (prefers-reduced-motion: reduce) {
67544
- :where(.theme-scope)
67545
- :where(
67546
- [data-block='event-registration'],
67547
- [data-block='course-registration']
67548
- )
67549
- .er-whole-series-modal-overlay,
67550
- :where(.theme-scope)
67551
- :where(
67552
- [data-block='event-registration'],
67553
- [data-block='course-registration']
67554
- )
67555
- .er-whole-series-modal {
67556
- animation: none;
67557
- }
67558
- }
67559
-
67560
- /* =============================================================================
67561
- * Center States
67562
- * =============================================================================
67563
- */
67564
- :where(.theme-scope)
67565
- :where([data-block='event-registration'], [data-block='course-registration'])
67566
- .er-whole-series-center {
67567
- display: grid;
67568
- place-items: center;
67569
- gap: 0.75rem;
67570
- padding: 2rem 0;
67571
- }
67572
-
67573
- /* =============================================================================
67574
- * Success/Waitlist/Error States
67575
- * =============================================================================
67576
- */
67577
- :where(.theme-scope)
67578
- :where([data-block='event-registration'], [data-block='course-registration'])
67579
- .er-whole-series-success,
67580
- :where(.theme-scope)
67581
- :where([data-block='event-registration'], [data-block='course-registration'])
67582
- .er-whole-series-waitlist,
67583
- :where(.theme-scope)
67584
- :where([data-block='event-registration'], [data-block='course-registration'])
67585
- .er-whole-series-error,
67586
- :where(.theme-scope)
67587
- :where([data-block='event-registration'], [data-block='course-registration'])
67588
- .er-whole-series-payment-failed {
67589
- text-align: center;
67590
- padding: 2rem 1rem;
67591
- }
67592
-
67593
- /* State icon color variants (layout from registration-surface.css) */
67594
- :where(.theme-scope)
67595
- :where([data-block='event-registration'], [data-block='course-registration'])
67596
- .rb-state-icon--success {
67597
- background: var(--er-success-bg);
67598
- color: var(--er-success-text);
67599
- }
67600
-
67601
- :where(.theme-scope)
67602
- :where([data-block='event-registration'], [data-block='course-registration'])
67603
- .rb-state-icon--error {
67604
- background: var(--er-error-bg);
67605
- color: var(--er-error-text);
67606
- }
67607
-
67608
- :where(.theme-scope)
67609
- :where([data-block='event-registration'], [data-block='course-registration'])
67610
- .rb-state-icon--waitlist,
67611
- :where(.theme-scope)
67612
- :where([data-block='event-registration'], [data-block='course-registration'])
67613
- .rb-state-icon--warning {
67614
- background: var(--er-waitlist-bg);
67615
- color: var(--er-waitlist-text);
67616
- }
67617
-
67618
- :where(.theme-scope)
67619
- :where([data-block='event-registration'], [data-block='course-registration'])
67620
- .er-whole-series-success__title,
67621
- :where(.theme-scope)
67622
- :where([data-block='event-registration'], [data-block='course-registration'])
67623
- .er-whole-series-waitlist__title,
67624
- :where(.theme-scope)
67625
- :where([data-block='event-registration'], [data-block='course-registration'])
67626
- .er-whole-series-error__title,
67627
- :where(.theme-scope)
67628
- :where([data-block='event-registration'], [data-block='course-registration'])
67629
- .er-whole-series-payment-failed__title {
67630
- margin: 0.75rem 0 0.5rem 0;
67631
- font-size: 1.125rem;
67632
- font-weight: 700;
67633
- }
67634
-
67635
- :where(.theme-scope)
67636
- :where([data-block='event-registration'], [data-block='course-registration'])
67637
- .er-whole-series-success__message,
67638
- :where(.theme-scope)
67639
- :where([data-block='event-registration'], [data-block='course-registration'])
67640
- .er-whole-series-waitlist__message,
67641
- :where(.theme-scope)
67642
- :where([data-block='event-registration'], [data-block='course-registration'])
67643
- .er-whole-series-error__message,
67644
- :where(.theme-scope)
67645
- :where([data-block='event-registration'], [data-block='course-registration'])
67646
- .er-whole-series-payment-failed__message {
67647
- margin: 0;
67648
- opacity: 0.7;
67649
- }
67650
-
67651
- :where(.theme-scope)
67652
- :where([data-block='event-registration'], [data-block='course-registration'])
67653
- .er-whole-series-success__membership {
67654
- margin-top: 0.5rem;
67655
- font-size: 0.875rem;
67656
- color: var(--er-success-text);
67657
- }
67658
-
67659
- :where(.theme-scope)
67660
- :where([data-block='event-registration'], [data-block='course-registration'])
67661
- .er-whole-series-error__retry,
67662
- :where(.theme-scope)
67663
- :where([data-block='event-registration'], [data-block='course-registration'])
67664
- .er-whole-series-payment-failed__retry {
67665
- margin-top: 1rem;
67666
- }
67667
-
67668
- /* =============================================================================
67669
- * Discount Code Section
67670
- * =============================================================================
67671
- */
67672
- :where(.theme-scope)
67673
- :where([data-block='event-registration'], [data-block='course-registration'])
67674
- .er-whole-series-discount {
67675
- margin-top: 0.5rem;
67676
- }
67677
-
67678
- :where(.theme-scope)
67679
- :where([data-block='event-registration'], [data-block='course-registration'])
67680
- .er-whole-series-discount__form {
67681
- display: grid;
67682
- gap: 0.5rem;
67683
- }
67684
-
67685
- :where(.theme-scope)
67686
- :where([data-block='event-registration'], [data-block='course-registration'])
67687
- .er-whole-series-discount__toggle {
67688
- background: transparent;
67689
- border: 0;
67690
- padding: 0;
67691
- color: rgb(var(--tb-primary));
67692
- cursor: pointer;
67693
- font-size: 0.875rem;
67694
- text-decoration: underline;
67695
- }
67696
-
67697
- :where(.theme-scope)
67698
- :where([data-block='event-registration'], [data-block='course-registration'])
67699
- .er-whole-series-discount__toggle:hover {
67700
- text-decoration: none;
67701
- }
67702
-
67703
- :where(.theme-scope)
67704
- :where([data-block='event-registration'], [data-block='course-registration'])
67705
- .er-whole-series-discount__label {
67706
- font-size: 0.875rem;
67707
- font-weight: 600;
67708
- }
67709
-
67710
- :where(.theme-scope)
67711
- :where([data-block='event-registration'], [data-block='course-registration'])
67712
- .er-whole-series-discount__row {
67713
- display: flex;
67714
- gap: 0.5rem;
67715
- }
67716
-
67717
- :where(.theme-scope)
67718
- :where([data-block='event-registration'], [data-block='course-registration'])
67719
- .er-whole-series-discount__input {
67720
- flex: 1;
67721
- border-radius: calc(var(--rb-block-radius) * 0.6);
67722
- border: 1px solid var(--er-border);
67723
- padding: 0.5rem 0.75rem;
67724
- background: rgb(var(--tb-background));
67725
- color: rgb(var(--tb-foreground));
67726
- font-size: 0.875rem;
67727
- }
67728
-
67729
- :where(.theme-scope)
67730
- :where([data-block='event-registration'], [data-block='course-registration'])
67731
- .er-whole-series-discount__input:focus {
67732
- outline: 2px solid var(--er-focus-ring);
67733
- outline-offset: 2px;
67734
- }
67735
-
67736
- :where(.theme-scope)
67737
- :where([data-block='event-registration'], [data-block='course-registration'])
67738
- .er-whole-series-discount__remove {
67739
- background: transparent;
67740
- border: 0;
67741
- padding: 0.25rem;
67742
- cursor: pointer;
67743
- opacity: 0.6;
67744
- }
67745
-
67746
- :where(.theme-scope)
67747
- :where([data-block='event-registration'], [data-block='course-registration'])
67748
- .er-whole-series-discount__apply {
67749
- background: transparent;
67750
- border: 0;
67751
- padding: 0.25rem;
67752
- cursor: pointer;
67753
- opacity: 0.8;
67754
- }
67755
-
67756
- :where(.theme-scope)
67757
- :where([data-block='event-registration'], [data-block='course-registration'])
67758
- .er-whole-series-discount__remove:hover {
67759
- opacity: 1;
67760
- }
67761
-
67762
- :where(.theme-scope)
67763
- :where([data-block='event-registration'], [data-block='course-registration'])
67764
- .er-whole-series-discount__apply:hover {
67765
- opacity: 1;
67766
- }
67767
-
67768
- :where(.theme-scope)
67769
- :where([data-block='event-registration'], [data-block='course-registration'])
67770
- .er-whole-series-discount__hint {
67771
- margin: 0;
67772
- font-size: 0.875rem;
67773
- opacity: 0.7;
67774
- }
67775
-
67776
- :where(.theme-scope)
67777
- :where([data-block='event-registration'], [data-block='course-registration'])
67778
- .er-whole-series-discount__feedback {
67779
- margin: 0;
67780
- font-size: 0.875rem;
67781
- }
67782
-
67783
- /* =============================================================================
67784
- * Altcha (Spam Protection)
67785
- * =============================================================================
67786
- */
67787
- :where(.theme-scope)
67788
- :where([data-block='event-registration'], [data-block='course-registration'])
67789
- .er-whole-series-altcha {
67790
- margin-top: 1rem;
67791
- }
67792
-
67793
- /* =============================================================================
67794
- * Magic Link Form
67795
- * =============================================================================
67796
- */
67797
- :where(.theme-scope)
67798
- :where([data-block='event-registration'], [data-block='course-registration'])
67799
- .er-whole-series-magic-link-form {
67800
- display: flex;
67801
- flex-direction: column;
67802
- gap: 0.75rem;
67803
- }
67804
-
67805
- :where(.theme-scope)
67806
- :where([data-block='event-registration'], [data-block='course-registration'])
67807
- .er-whole-series-magic-link-title {
67808
- margin: 0;
67809
- font-size: 1.25rem;
67810
- font-weight: 700;
67811
- }
67812
-
67813
- :where(.theme-scope)
67814
- :where([data-block='event-registration'], [data-block='course-registration'])
67815
- .er-whole-series-magic-link-success {
67816
- display: flex;
67817
- flex-direction: column;
67818
- gap: 0.75rem;
67819
- }
67820
-
67821
- :where(.theme-scope)
67822
- :where([data-block='event-registration'], [data-block='course-registration'])
67823
- .er-whole-series-portal-auth-text {
67824
- margin: 0;
67825
- font-size: 0.875rem;
67826
- opacity: 0.8;
67827
- }
67828
-
67829
- :where(.theme-scope)
67830
- :where([data-block='event-registration'], [data-block='course-registration'])
67831
- .er-whole-series-portal-auth-text--success {
67832
- color: var(--er-success-text);
67833
- }
67834
-
67835
- :where(.theme-scope)
67836
- :where([data-block='event-registration'], [data-block='course-registration'])
67837
- .er-whole-series-portal-auth-text--error {
67838
- color: var(--er-error-text);
67839
- }
67840
-
67841
- :where(.theme-scope)
67842
- :where([data-block='event-registration'], [data-block='course-registration'])
67843
- .er-whole-series-modal-btn {
67844
- border-radius: calc(var(--rb-block-radius) * 0.6);
67845
- border: 0;
67846
- padding: 0.6rem 1rem;
67847
- font-size: 0.875rem;
67848
- font-weight: 600;
67849
- cursor: pointer;
67850
- transition: opacity 0.15s ease;
67851
- background: rgb(var(--tb-primary));
67852
- color: rgb(var(--tb-primaryText, 255 255 255));
67853
- }
67854
-
67855
- :where(.theme-scope)
67856
- :where([data-block='event-registration'], [data-block='course-registration'])
67857
- .er-whole-series-modal-btn:hover {
67858
- opacity: 0.9;
67859
- }
67860
-
67861
- :where(.theme-scope)
67862
- :where([data-block='event-registration'], [data-block='course-registration'])
67863
- .er-whole-series-modal-btn:disabled {
67864
- opacity: 0.5;
67865
- cursor: not-allowed;
67866
- }
67867
-
67868
- :where(.theme-scope)
67869
- :where([data-block='event-registration'], [data-block='course-registration'])
67870
- .er-whole-series-modal-btn--secondary {
67871
- background: transparent;
67872
- color: var(--er-on-surface);
67873
- border: 1px solid var(--er-border);
67874
- }
67875
-
67876
- :where(.theme-scope)
67877
- :where([data-block='event-registration'], [data-block='course-registration'])
67878
- .er-whole-series-modal-btn--secondary:hover {
67879
- background: var(--er-on-surface-hover-bg);
67880
- }
67881
-
67882
- /* =============================================================================
67883
- * Utility Classes
67884
- * =============================================================================
67885
- */
67886
- :where(.theme-scope)
67887
- :where([data-block='event-registration'], [data-block='course-registration'])
67888
- .er-whole-series-text--muted {
67889
- opacity: 0.7;
67890
- }
67891
-
67892
- :where(.theme-scope)
67893
- :where([data-block='event-registration'], [data-block='course-registration'])
67894
- .er-whole-series-text--error {
67895
- color: var(--er-error-text);
67896
- }
67897
-
67898
- :where(.theme-scope)
67899
- :where([data-block='event-registration'], [data-block='course-registration'])
67900
- .er-whole-series-text--success {
67901
- color: var(--er-success-text);
67902
- }
67903
-
67904
- :where(.theme-scope)
67905
- :where([data-block='event-registration'], [data-block='course-registration'])
67906
- .er-whole-series-sr-only {
67907
- position: absolute;
67908
- width: 1px;
67909
- height: 1px;
67910
- padding: 0;
67911
- margin: -1px;
67912
- overflow: hidden;
67913
- clip: rect(0, 0, 0, 0);
67914
- white-space: nowrap;
67915
- border-width: 0;
67916
- }
67917
-
67918
- /* Stack utility */
67919
- :where(.theme-scope)
67920
- :where([data-block='event-registration'], [data-block='course-registration'])
67921
- .er-whole-series-stack {
67922
- display: flex;
67923
- flex-direction: column;
67924
- }
67925
-
67926
- :where(.theme-scope)
67927
- :where([data-block='event-registration'], [data-block='course-registration'])
67928
- .er-whole-series-stack--gap-sm {
67929
- gap: 0.5rem;
67930
- }
67931
-
67932
- :where(.theme-scope)
67933
- :where([data-block='event-registration'], [data-block='course-registration'])
67934
- .er-whole-series-stack--gap-md {
67935
- gap: 1rem;
67936
- }
67937
-
67938
- :where(.theme-scope)
67939
- :where([data-block='event-registration'], [data-block='course-registration'])
67940
- .er-whole-series-stack--gap-lg {
67941
- gap: 1.5rem;
67942
- }
67943
-
67944
- /* =============================================================================
67945
- * Block: Newsletter Signup
67946
- * =============================================================================
67947
- */
67948
-
67949
- /* Newsletter copy styling */
67950
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
67951
- font-size: 1.5rem;
67952
- font-weight: 600;
67953
- }
67954
-
67955
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
67956
- font-size: 1rem;
67957
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67958
- opacity: 0.85;
67959
- }
67960
-
67961
- /* Newsletter form container */
67962
- :where(.theme-scope) .newsletter-form {
67963
- width: 100%;
67964
- max-width: 32rem;
67965
- margin-left: auto;
67966
- margin-right: auto;
67967
- }
67968
-
67969
- /* Newsletter form fields container */
67970
- :where(.theme-scope) .newsletter-form-fields {
67971
- display: flex;
67972
- flex-direction: column;
67973
- gap: var(--rb-gap-sm, 0.75rem);
67974
- }
67975
-
67976
- /* Individual field styling */
67977
- :where(.theme-scope) .newsletter-field {
67978
- display: flex;
67979
- flex-direction: column;
67980
- gap: 0.25rem;
67981
- }
67982
-
67983
- /* Required indicator */
67984
- :where(.theme-scope) .newsletter-required {
67985
- color: rgb(var(--tb-primary));
67986
- margin-left: 0.125rem;
67987
- }
67988
-
67989
- /* Submit button container */
67990
- :where(.theme-scope) .newsletter-submit {
67991
- margin-top: 0.5rem;
67992
- }
67993
-
67994
- /* ALTCHA widget container */
67995
- :where(.theme-scope) .newsletter-altcha {
67996
- margin-top: 0.75rem;
67997
- display: flex;
67998
- justify-content: center;
67999
- }
68000
-
68001
- /* Privacy note */
68002
- :where(.theme-scope) .newsletter-privacy-note {
68003
- margin-top: 0.75rem;
68004
- font-size: 1rem;
68005
- line-height: 1.6;
68006
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68007
- text-align: center;
68008
- }
68009
-
68010
- /* =============================================================================
68011
- * Inline Variant - Horizontal layout
68012
- * =============================================================================
68013
- */
68014
-
68015
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68016
- flex-direction: row;
68017
- align-items: flex-end;
68018
- flex-wrap: wrap;
68019
- gap: var(--rb-gap-sm, 0.75rem);
68020
- }
68021
-
68022
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68023
- flex: 1 1 auto;
68024
- min-width: 10rem;
68025
- }
68026
-
68027
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
68028
- margin-top: 0;
68029
- flex-shrink: 0;
68030
- }
68031
-
68032
- /* Mobile fallback for inline variant */
68033
- @container rb-site (max-width: 640px) {
68034
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68035
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
68036
- flex-direction: column;
68037
- }
68038
-
68039
- :where(.theme-scope) .newsletter-inline .newsletter-field {
68040
- min-width: 100%;
68041
- }
68042
- }
68043
- }
68044
-
68045
- /* =============================================================================
68046
- * Editorial Split Variant
68047
- * =============================================================================
68048
- */
68049
-
68050
- :where(.theme-scope) .newsletter-editorial-split {
68051
- display: grid;
68052
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
68053
- gap: clamp(2.5rem, 7vw, 7rem);
68054
- align-items: center;
68055
- text-align: left;
68056
- }
68057
-
68058
- :where(.theme-scope) .newsletter-editorial-split-copy {
68059
- display: flex;
68060
- flex-direction: column;
68061
- gap: var(--rb-gap-sm, 0.75rem);
68062
- }
68063
-
68064
- :where(.theme-scope) .newsletter-editorial-split-form {
68065
- min-width: 0;
68066
- }
68067
-
68068
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
68069
- max-width: none;
68070
- margin-inline: 0;
68071
- }
68072
-
68073
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
68074
- font-size: clamp(2rem, 4vw, 3.5rem);
68075
- font-weight: 500;
68076
- }
68077
-
68078
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
68079
- text-align: left;
68080
- }
68081
-
68082
- @container rb-site (max-width: 767px) {
68083
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68084
- :where(.theme-scope) .newsletter-editorial-split {
68085
- grid-template-columns: minmax(0, 1fr);
68086
- gap: 2rem;
68087
- }
68088
- }
68089
- }
68090
-
68091
- /* =============================================================================
68092
- * Success State
68093
- * =============================================================================
68094
- */
68095
-
68096
- :where(.theme-scope) .newsletter-success {
68097
- text-align: center;
68098
- }
68099
-
68100
- :where(.theme-scope) .newsletter-success .fb-success {
68101
- padding: 1rem 1.5rem;
68102
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
68103
- border-radius: var(--radius-md, 0.5rem);
68104
- color: rgb(var(--tb-text));
68105
- }
68106
-
68107
- /* =============================================================================
68108
- * Block: Contact + Newsletter
68109
- * =============================================================================
68110
- */
68111
-
68112
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
68113
- display: grid;
68114
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
68115
- gap: clamp(2.5rem, 6vw, 4rem);
68116
- align-items: start;
68117
- }
68118
-
68119
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
68120
- min-width: 0;
68121
- }
68122
-
68123
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
68124
- margin-bottom: 1.5rem;
68125
- }
68126
-
68127
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
68128
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
68129
- margin: 0 0 0.75rem;
68130
- }
68131
-
68132
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
68133
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
68134
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68135
- }
68136
-
68137
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
68138
- display: flex;
68139
- flex-direction: column;
68140
- align-items: flex-start;
68141
- }
68142
-
68143
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
68144
- max-width: none;
68145
- margin-left: 0;
68146
- margin-right: 0;
68147
- }
68148
-
68149
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
68150
- text-align: left;
68151
- }
68152
-
68153
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
68154
- display: flex;
68155
- flex-direction: column;
68156
- gap: 1rem;
68157
- }
68158
-
68159
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
68160
- display: grid;
68161
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
68162
- gap: 1rem;
68163
- }
68164
-
68165
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
68166
- display: flex;
68167
- flex-direction: column;
68168
- gap: 0.25rem;
68169
- }
68170
-
68171
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
68172
- display: flex;
68173
- flex-direction: column;
68174
- gap: 0.5rem;
68175
- border: none;
68176
- padding: 0;
68177
- margin: 0;
68178
- }
68179
-
68180
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
68181
- display: flex;
68182
- align-items: center;
68183
- gap: 0.5rem;
68184
- }
68185
-
68186
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
68187
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
68188
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68189
- border-radius: var(--rb-block-radius);
68190
- padding: 1rem;
68191
- font-size: 0.875rem;
68192
- }
68193
-
68194
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
68195
- background-color: var(--fb-success-bg);
68196
- color: var(--fb-success-text);
68197
- border: 1px solid var(--fb-success-border);
68198
- }
68199
-
68200
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
68201
- background-color: var(--fb-error-bg);
68202
- color: var(--fb-error-text);
68203
- border: 1px solid var(--fb-error-border);
68204
- }
68205
-
68206
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68207
- background-color: var(--fb-empty-bg);
68208
- color: var(--fb-empty-text);
68209
- border: 1px dashed var(--fb-empty-border);
68210
- text-align: center;
68211
- }
68212
-
68213
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
68214
- margin-top: 0.5rem;
68215
- }
68216
-
68217
- /* =============================================================================
68218
- * Block: Team Members
68219
- * =============================================================================
68220
- *
68221
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
68222
- * changing global fragment defaults. We expose these controls on the block and
68223
- * style them via data attributes on the \`.rb-team-members\` wrapper.
68224
- */
68225
-
68226
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
68227
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
68228
- text-align: left;
68229
- }
68230
-
68231
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
68232
- align-items: flex-start;
68233
- text-align: left;
68234
- }
68235
-
68236
- @container rb-site (min-width: 1024px) {
68237
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68238
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
68239
- width: 75%;
68240
- margin-left: 0;
68241
- margin-right: auto;
68242
- }
68243
- }
68244
- }
68245
-
68246
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
68247
- display: block;
68248
- width: 100%;
68249
- height: auto;
68250
- }
68251
-
68252
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
68253
- font-weight: 600;
68254
- }
68255
-
68256
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
68257
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
68258
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
68259
- --rb-team-image-basis: 33.333%;
68260
- }
68261
-
68262
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
68263
- --rb-team-thumb-max: 8.75rem; /* ~140px */
68264
- --rb-team-image-basis: 25%;
68265
- }
68266
-
68267
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
68268
- --rb-team-thumb-max: 11.25rem; /* ~180px */
68269
- --rb-team-image-basis: 33.333%;
68270
- }
68271
-
68272
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
68273
- --rb-team-thumb-max: 13.75rem; /* ~220px */
68274
- --rb-team-image-basis: 40%;
68275
- }
68276
-
68277
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
68278
- --rb-team-thumb-max: 17.5rem; /* ~280px */
68279
- --rb-team-image-basis: 50%;
68280
- }
68281
-
68282
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
68283
- --rb-team-thumb-max: 22.5rem; /* ~360px */
68284
- --rb-team-image-basis: 66.667%;
68285
- }
68286
-
68287
- /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
68288
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo-wrap {
68289
- width: 100%;
68290
- overflow: hidden;
68291
- }
68292
-
68293
- /* In grid mode, cap thumbnail width so headshots don't dominate the card. */
68294
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-member-photo-wrap) {
68295
- max-width: var(--rb-team-thumb-max);
68296
- }
68297
-
68298
- :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
68299
- margin-left: auto;
68300
- margin-right: auto;
66047
+ :where(.theme-scope) :where([data-block="team-members"][data-block-variant="grid"]) :where(.rb-team-members[data-layout-align="center"]) :where(.rb-team-member-photo-wrap) {
66048
+ margin-left: auto;
66049
+ margin-right: auto;
68301
66050
  }
68302
66051
 
68303
66052
  /* Stack variant: always left-aligned, regardless of the block alignment field. */
@@ -72330,69 +70079,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72330
70079
  }
72331
70080
  });
72332
70081
  //#endregion
72333
- //#region ../api/src/courseEndpointDefinitions.ts
72334
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72335
- listCourses: {
72336
- path: "/sites/{siteId}/bookings/courses",
72337
- method: "GET",
72338
- auth: "user",
72339
- responseKind: "json"
72340
- },
72341
- exportCoursesCsv: {
72342
- path: "/sites/{siteId}/bookings/courses/export.csv",
72343
- method: "GET",
72344
- tags: [
72345
- "site-{siteId}",
72346
- "bookings",
72347
- "courses-{siteId}"
72348
- ],
72349
- errors: [],
72350
- auth: "user",
72351
- responseKind: "blob"
72352
- },
72353
- createCourse: {
72354
- path: "/sites/{siteId}/bookings/courses",
72355
- method: "POST",
72356
- auth: "user",
72357
- responseKind: "json",
72358
- errors: [
72359
- "validation:invalid_input",
72360
- "resource:not_found",
72361
- "resource:already_exists",
72362
- "resource:conflict",
72363
- "server:internal_error"
72364
- ]
72365
- },
72366
- getCourse: {
72367
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72368
- method: "GET",
72369
- auth: "user",
72370
- responseKind: "json"
72371
- },
72372
- updateCourse: {
72373
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72374
- method: "PATCH",
72375
- auth: "user",
72376
- responseKind: "json",
72377
- errors: [
72378
- "validation:invalid_input",
72379
- "resource:not_found",
72380
- "resource:conflict",
72381
- "server:internal_error"
72382
- ]
72383
- },
72384
- deleteCourse: {
72385
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72386
- method: "DELETE",
72387
- auth: "user",
72388
- responseKind: "json",
72389
- errors: [
72390
- "validation:invalid_input",
72391
- "resource:not_found",
72392
- "resource:conflict",
72393
- "server:internal_error"
72394
- ]
72395
- },
70082
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
70083
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72396
70084
  deleteEventOffering: {
72397
70085
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
72398
70086
  method: "DELETE",
@@ -72405,20 +70093,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72405
70093
  "server:internal_error"
72406
70094
  ]
72407
70095
  },
72408
- duplicateCourse: {
72409
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
72410
- method: "POST",
72411
- auth: "user",
72412
- responseKind: "json",
72413
- errors: [
72414
- "validation:invalid_input",
72415
- "resource:not_found",
72416
- "resource:already_exists",
72417
- "server:internal_error"
72418
- ]
72419
- },
72420
- changeCourseContentOwnership: {
72421
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
70096
+ changeEventSeriesContentOwnership: {
70097
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
72422
70098
  method: "POST",
72423
70099
  auth: "user",
72424
70100
  responseKind: "json",
@@ -72429,8 +70105,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72429
70105
  "server:internal_error"
72430
70106
  ]
72431
70107
  },
72432
- addCourseEnrollment: {
72433
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70108
+ addEventSeriesRegistration: {
70109
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72434
70110
  method: "POST",
72435
70111
  auth: "user",
72436
70112
  responseKind: "json",
@@ -72441,33 +70117,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72441
70117
  "server:internal_error"
72442
70118
  ]
72443
70119
  },
72444
- listCourseEnrollments: {
72445
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70120
+ listEventSeriesRegistrations: {
70121
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72446
70122
  method: "GET",
72447
70123
  auth: "user",
72448
70124
  responseKind: "json"
72449
70125
  },
72450
- exportCourseEnrollmentsCsv: {
72451
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
70126
+ exportEventSeriesRegistrationsCsv: {
70127
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
72452
70128
  method: "GET",
72453
70129
  auth: "user",
72454
70130
  errors: [],
72455
70131
  responseKind: "blob"
72456
70132
  },
72457
- exportCourseWaitlistCsv: {
72458
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
72459
- method: "GET",
72460
- tags: [
72461
- "site-{siteId}",
72462
- "bookings",
72463
- "courses-{courseId}"
72464
- ],
72465
- auth: "user",
72466
- responseKind: "blob",
72467
- errors: []
72468
- },
72469
- updateCourseEnrollment: {
72470
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
70133
+ updateEventSeriesRegistration: {
70134
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
72471
70135
  method: "PATCH",
72472
70136
  auth: "user",
72473
70137
  responseKind: "json",
@@ -72855,71 +70519,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72855
70519
  errors: ["resource:not_found", "server:internal_error"],
72856
70520
  auth: "public",
72857
70521
  responseKind: "json"
72858
- },
72859
- registerForWholeSeries: {
72860
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
72861
- method: "POST",
72862
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72863
- errors: [
72864
- "auth:unauthenticated",
72865
- "auth:forbidden",
72866
- "validation:invalid_input",
72867
- "resource:not_found",
72868
- "resource:conflict",
72869
- "resource:already_exists",
72870
- "server:internal_error"
72871
- ],
72872
- auth: "public",
72873
- responseKind: "json"
72874
- },
72875
- checkWholeSeriesEligibility: {
72876
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
72877
- method: "POST",
72878
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72879
- errors: [
72880
- "auth:unauthenticated",
72881
- "resource:not_found",
72882
- "resource:conflict",
72883
- "server:internal_error"
72884
- ],
72885
- auth: "public",
72886
- responseKind: "json"
72887
- },
72888
- createWholeSeriesCheckout: {
72889
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
70522
+ }
70523
+ });
70524
+ //#endregion
70525
+ //#region ../api/src/publicEventEndpointDefinitions.ts
70526
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
70527
+ getPublicEventRegistrationOptions: {
70528
+ path: "/public/sites/{siteId}/events/registration-options",
72890
70529
  method: "POST",
72891
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
70530
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
72892
70531
  auth: "public",
72893
70532
  responseKind: "json",
72894
70533
  errors: [
72895
- "auth:unauthenticated",
72896
70534
  "validation:invalid_input",
72897
70535
  "resource:not_found",
72898
70536
  "resource:conflict",
72899
70537
  "server:internal_error"
72900
70538
  ]
72901
70539
  },
72902
- getWholeSeriesRegistrationStatus: {
72903
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
70540
+ resolveEventSubroute: {
70541
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
72904
70542
  method: "GET",
72905
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72906
- errors: ["resource:not_found", "server:internal_error"],
70543
+ revalidate: 60,
70544
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72907
70545
  auth: "public",
72908
- responseKind: "json"
70546
+ responseKind: "json",
70547
+ errors: []
72909
70548
  }
72910
70549
  });
72911
70550
  //#endregion
72912
- //#region ../api/src/publicEventEndpointDefinitions.ts
72913
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
72914
- path: "/public/sites/{siteId}/events/subroutes/resolve",
72915
- method: "GET",
72916
- revalidate: 60,
72917
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72918
- auth: "public",
72919
- responseKind: "json",
72920
- errors: []
72921
- } });
72922
- //#endregion
72923
70551
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
72924
70552
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72925
70553
  listSiteApiKeys: {
@@ -73287,7 +70915,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73287
70915
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
73288
70916
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
73289
70917
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
73290
- ...COURSE_ENDPOINT_DEFINITIONS
70918
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
73291
70919
  }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
73292
70920
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
73293
70921
  z.object({
@@ -74328,6 +71956,68 @@ function parsePublicProductCategorySelector(value) {
74328
71956
  };
74329
71957
  }
74330
71958
  //#endregion
71959
+ //#region ../api/src/bookingPaymentTermSchemas.ts
71960
+ const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
71961
+ const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
71962
+ z.object({
71963
+ kind: z.literal("deposit_plus_one_remainder"),
71964
+ depositAmountCents: z.number().int().nonnegative(),
71965
+ depositRefundability: bookingDepositRefundPolicySchema,
71966
+ remainderDueCount: z.number().int().positive(),
71967
+ intervalUnit: z.enum([
71968
+ "day",
71969
+ "week",
71970
+ "month"
71971
+ ])
71972
+ }),
71973
+ z.object({
71974
+ kind: z.literal("deposit_plus_scheduled_instalments"),
71975
+ depositAmountCents: z.number().int().nonnegative(),
71976
+ depositRefundability: bookingDepositRefundPolicySchema,
71977
+ instalmentCount: z.number().int().positive(),
71978
+ intervalCount: z.number().int().positive(),
71979
+ intervalUnit: z.enum([
71980
+ "day",
71981
+ "week",
71982
+ "month"
71983
+ ])
71984
+ }),
71985
+ z.object({
71986
+ kind: z.literal("equal_scheduled_instalments"),
71987
+ instalmentCount: z.number().int().positive(),
71988
+ intervalCount: z.number().int().positive(),
71989
+ intervalUnit: z.enum([
71990
+ "day",
71991
+ "week",
71992
+ "month"
71993
+ ])
71994
+ })
71995
+ ]);
71996
+ const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
71997
+ kind: z.literal("relative_to_start_date"),
71998
+ daysBeforeStart: z.number().int().positive()
71999
+ }), z.object({
72000
+ kind: z.literal("fixed_calendar_date"),
72001
+ dueAt: z.string().datetime()
72002
+ })]);
72003
+ const bookingFlexibleBalanceConfigSchema = z.object({
72004
+ upfrontAmountCents: z.number().int().nonnegative(),
72005
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
72006
+ depositRefundability: bookingDepositRefundPolicySchema
72007
+ });
72008
+ z.discriminatedUnion("kind", [
72009
+ z.object({ kind: z.literal("upfront") }),
72010
+ z.object({ kind: z.literal("deferred_manual") }),
72011
+ z.object({
72012
+ kind: z.literal("instalment_plan"),
72013
+ plan: bookingInstalmentPlanSchema
72014
+ }),
72015
+ z.object({
72016
+ kind: z.literal("flexible_balance"),
72017
+ config: bookingFlexibleBalanceConfigSchema
72018
+ })
72019
+ ]);
72020
+ //#endregion
74331
72021
  //#region ../api/src/aiPlayground.ts
74332
72022
  /**
74333
72023
  * RFC-6902 JSON Patch Operations