@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
@@ -1343,69 +1343,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1343
1343
  }
1344
1344
  });
1345
1345
  //#endregion
1346
- //#region ../api/src/courseEndpointDefinitions.ts
1347
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1348
- listCourses: {
1349
- path: "/sites/{siteId}/bookings/courses",
1350
- method: "GET",
1351
- auth: "user",
1352
- responseKind: "json"
1353
- },
1354
- exportCoursesCsv: {
1355
- path: "/sites/{siteId}/bookings/courses/export.csv",
1356
- method: "GET",
1357
- tags: [
1358
- "site-{siteId}",
1359
- "bookings",
1360
- "courses-{siteId}"
1361
- ],
1362
- errors: [],
1363
- auth: "user",
1364
- responseKind: "blob"
1365
- },
1366
- createCourse: {
1367
- path: "/sites/{siteId}/bookings/courses",
1368
- method: "POST",
1369
- auth: "user",
1370
- responseKind: "json",
1371
- errors: [
1372
- "validation:invalid_input",
1373
- "resource:not_found",
1374
- "resource:already_exists",
1375
- "resource:conflict",
1376
- "server:internal_error"
1377
- ]
1378
- },
1379
- getCourse: {
1380
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1381
- method: "GET",
1382
- auth: "user",
1383
- responseKind: "json"
1384
- },
1385
- updateCourse: {
1386
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1387
- method: "PATCH",
1388
- auth: "user",
1389
- responseKind: "json",
1390
- errors: [
1391
- "validation:invalid_input",
1392
- "resource:not_found",
1393
- "resource:conflict",
1394
- "server:internal_error"
1395
- ]
1396
- },
1397
- deleteCourse: {
1398
- path: "/sites/{siteId}/bookings/courses/{courseId}",
1399
- method: "DELETE",
1400
- auth: "user",
1401
- responseKind: "json",
1402
- errors: [
1403
- "validation:invalid_input",
1404
- "resource:not_found",
1405
- "resource:conflict",
1406
- "server:internal_error"
1407
- ]
1408
- },
1346
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
1347
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1409
1348
  deleteEventOffering: {
1410
1349
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
1411
1350
  method: "DELETE",
@@ -1418,20 +1357,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1418
1357
  "server:internal_error"
1419
1358
  ]
1420
1359
  },
1421
- duplicateCourse: {
1422
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
1423
- method: "POST",
1424
- auth: "user",
1425
- responseKind: "json",
1426
- errors: [
1427
- "validation:invalid_input",
1428
- "resource:not_found",
1429
- "resource:already_exists",
1430
- "server:internal_error"
1431
- ]
1432
- },
1433
- changeCourseContentOwnership: {
1434
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
1360
+ changeEventSeriesContentOwnership: {
1361
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
1435
1362
  method: "POST",
1436
1363
  auth: "user",
1437
1364
  responseKind: "json",
@@ -1442,8 +1369,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1442
1369
  "server:internal_error"
1443
1370
  ]
1444
1371
  },
1445
- addCourseEnrollment: {
1446
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1372
+ addEventSeriesRegistration: {
1373
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1447
1374
  method: "POST",
1448
1375
  auth: "user",
1449
1376
  responseKind: "json",
@@ -1454,33 +1381,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1454
1381
  "server:internal_error"
1455
1382
  ]
1456
1383
  },
1457
- listCourseEnrollments: {
1458
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
1384
+ listEventSeriesRegistrations: {
1385
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
1459
1386
  method: "GET",
1460
1387
  auth: "user",
1461
1388
  responseKind: "json"
1462
1389
  },
1463
- exportCourseEnrollmentsCsv: {
1464
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
1390
+ exportEventSeriesRegistrationsCsv: {
1391
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
1465
1392
  method: "GET",
1466
1393
  auth: "user",
1467
1394
  errors: [],
1468
1395
  responseKind: "blob"
1469
1396
  },
1470
- exportCourseWaitlistCsv: {
1471
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1472
- method: "GET",
1473
- tags: [
1474
- "site-{siteId}",
1475
- "bookings",
1476
- "courses-{courseId}"
1477
- ],
1478
- auth: "user",
1479
- responseKind: "blob",
1480
- errors: []
1481
- },
1482
- updateCourseEnrollment: {
1483
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1397
+ updateEventSeriesRegistration: {
1398
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
1484
1399
  method: "PATCH",
1485
1400
  auth: "user",
1486
1401
  responseKind: "json",
@@ -1868,71 +1783,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1868
1783
  errors: ["resource:not_found", "server:internal_error"],
1869
1784
  auth: "public",
1870
1785
  responseKind: "json"
1871
- },
1872
- registerForWholeSeries: {
1873
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1874
- method: "POST",
1875
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1876
- errors: [
1877
- "auth:unauthenticated",
1878
- "auth:forbidden",
1879
- "validation:invalid_input",
1880
- "resource:not_found",
1881
- "resource:conflict",
1882
- "resource:already_exists",
1883
- "server:internal_error"
1884
- ],
1885
- auth: "public",
1886
- responseKind: "json"
1887
- },
1888
- checkWholeSeriesEligibility: {
1889
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1890
- method: "POST",
1891
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1892
- errors: [
1893
- "auth:unauthenticated",
1894
- "resource:not_found",
1895
- "resource:conflict",
1896
- "server:internal_error"
1897
- ],
1898
- auth: "public",
1899
- responseKind: "json"
1900
- },
1901
- createWholeSeriesCheckout: {
1902
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1786
+ }
1787
+ });
1788
+ //#endregion
1789
+ //#region ../api/src/publicEventEndpointDefinitions.ts
1790
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1791
+ getPublicEventRegistrationOptions: {
1792
+ path: "/public/sites/{siteId}/events/registration-options",
1903
1793
  method: "POST",
1904
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1794
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
1905
1795
  auth: "public",
1906
1796
  responseKind: "json",
1907
1797
  errors: [
1908
- "auth:unauthenticated",
1909
1798
  "validation:invalid_input",
1910
1799
  "resource:not_found",
1911
1800
  "resource:conflict",
1912
1801
  "server:internal_error"
1913
1802
  ]
1914
1803
  },
1915
- getWholeSeriesRegistrationStatus: {
1916
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1804
+ resolveEventSubroute: {
1805
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
1917
1806
  method: "GET",
1918
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1919
- errors: ["resource:not_found", "server:internal_error"],
1807
+ revalidate: 60,
1808
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1920
1809
  auth: "public",
1921
- responseKind: "json"
1810
+ responseKind: "json",
1811
+ errors: []
1922
1812
  }
1923
1813
  });
1924
1814
  //#endregion
1925
- //#region ../api/src/publicEventEndpointDefinitions.ts
1926
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
1927
- path: "/public/sites/{siteId}/events/subroutes/resolve",
1928
- method: "GET",
1929
- revalidate: 60,
1930
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1931
- auth: "public",
1932
- responseKind: "json",
1933
- errors: []
1934
- } });
1935
- //#endregion
1936
1815
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
1937
1816
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1938
1817
  listSiteApiKeys: {
@@ -2829,7 +2708,7 @@ const API_ENDPOINTS$1 = {
2829
2708
  },
2830
2709
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
2831
2710
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
2832
- ...COURSE_ENDPOINT_DEFINITIONS,
2711
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS,
2833
2712
  getSite: {
2834
2713
  path: "/sites",
2835
2714
  method: "GET",
@@ -6143,13 +6022,13 @@ const API_ENDPOINTS$1 = {
6143
6022
  "server:internal_error"
6144
6023
  ]
6145
6024
  },
6146
- refundCourseEnrollment: {
6147
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refund",
6025
+ refundEventSeriesRegistration: {
6026
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refund",
6148
6027
  method: "POST",
6149
6028
  tags: [
6150
6029
  "site-{siteId}",
6151
- "course-{courseId}",
6152
- "course-enrollment-{enrollmentId}",
6030
+ "event-series-{seriesId}",
6031
+ "event-series-registration-{registrationId}",
6153
6032
  "bookings"
6154
6033
  ],
6155
6034
  auth: "user",
@@ -6172,13 +6051,13 @@ const API_ENDPOINTS$1 = {
6172
6051
  auth: "user",
6173
6052
  responseKind: "json"
6174
6053
  },
6175
- listCourseEnrollmentRefunds: {
6176
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}/refunds",
6054
+ listEventSeriesRegistrationRefunds: {
6055
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}/refunds",
6177
6056
  method: "GET",
6178
6057
  tags: [
6179
6058
  "site-{siteId}",
6180
- "course-{courseId}",
6181
- "course-enrollment-{enrollmentId}",
6059
+ "event-series-{seriesId}",
6060
+ "event-series-registration-{registrationId}",
6182
6061
  "bookings"
6183
6062
  ],
6184
6063
  auth: "user",
@@ -7867,14 +7746,14 @@ const API_ENDPOINTS$1 = {
7867
7746
  errors: ["server:internal_error"]
7868
7747
  },
7869
7748
  portalGetWholeSeriesBookingQuestions: {
7870
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7749
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7871
7750
  method: "GET",
7872
7751
  auth: "public",
7873
7752
  responseKind: "json",
7874
7753
  errors: ["resource:not_found", "server:internal_error"]
7875
7754
  },
7876
7755
  portalUpdateWholeSeriesBookingQuestions: {
7877
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions",
7756
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions",
7878
7757
  method: "PUT",
7879
7758
  auth: "public",
7880
7759
  responseKind: "json",
@@ -7885,7 +7764,7 @@ const API_ENDPOINTS$1 = {
7885
7764
  ]
7886
7765
  },
7887
7766
  portalCreateWholeSeriesBookingQuestionsUploadUrl: {
7888
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload-url",
7767
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload-url",
7889
7768
  method: "POST",
7890
7769
  auth: "public",
7891
7770
  responseKind: "json",
@@ -7896,7 +7775,7 @@ const API_ENDPOINTS$1 = {
7896
7775
  ]
7897
7776
  },
7898
7777
  portalFinalizeWholeSeriesBookingQuestionsUpload: {
7899
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/booking-questions/upload",
7778
+ path: "/portal/dated-offerings/whole-series/{registrationId}/booking-questions/upload",
7900
7779
  method: "POST",
7901
7780
  auth: "public",
7902
7781
  responseKind: "json",
@@ -7907,7 +7786,7 @@ const API_ENDPOINTS$1 = {
7907
7786
  ]
7908
7787
  },
7909
7788
  portalCancelWholeSeriesRegistration: {
7910
- path: "/portal/dated-offerings/whole-series/{enrollmentId}/cancel",
7789
+ path: "/portal/dated-offerings/whole-series/{registrationId}/cancel",
7911
7790
  method: "POST",
7912
7791
  auth: "public",
7913
7792
  responseKind: "json",
@@ -8401,7 +8280,7 @@ function publicEventPricingType(pricing) {
8401
8280
  case "single_paid":
8402
8281
  case "ticket_types":
8403
8282
  case "sliding_scale":
8404
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8283
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8405
8284
  case "external": return "external";
8406
8285
  }
8407
8286
  }
@@ -8412,14 +8291,14 @@ function publicEventPricingCurrency(pricing) {
8412
8291
  case "single_paid":
8413
8292
  case "ticket_types":
8414
8293
  case "sliding_scale": return pricing.currency;
8415
- case "course": return pricing.display.display.currency;
8294
+ case "whole_series": return pricing.display.display.currency;
8416
8295
  case "external": return null;
8417
8296
  }
8418
8297
  }
8419
8298
  function isFreePublicEventPriceDisplay(display) {
8420
8299
  switch (display.kind) {
8421
8300
  case "free": return true;
8422
- case "course": return display.display.kind === "free";
8301
+ case "whole_series": return display.display.kind === "free";
8423
8302
  case "exact":
8424
8303
  case "from":
8425
8304
  case "range":
@@ -8455,7 +8334,7 @@ function formatBookingPriceDisplay(display, options = {}) {
8455
8334
  case "mixed": return display.paidToAmount > display.paidFromAmount ? `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)} - ${formatCurrencyAmount(display.paidToAmount, display.currency, options)}` : `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)}`;
8456
8335
  case "unavailable": return "Pricing unavailable";
8457
8336
  case "external": return display.label;
8458
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
8337
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
8459
8338
  default: return assertNever$24(display);
8460
8339
  }
8461
8340
  }
@@ -23407,7 +23286,7 @@ defineBlockAppearancePreset({
23407
23286
  id: "schedule-details-brand-depth",
23408
23287
  target: "events",
23409
23288
  label: "Brand-depth schedule details",
23410
- blockKinds: ["block.event-details", "block.course-details"],
23289
+ blockKinds: ["block.event-details"],
23411
23290
  design: {
23412
23291
  sectionSurface: "brand-depth-band",
23413
23292
  contentFrame: plainFrame,
@@ -30024,7 +29903,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
30024
29903
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
30025
29904
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
30026
29905
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
30027
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
30028
29906
  function bind(from, options) {
30029
29907
  return (node) => ({
30030
29908
  ...node,
@@ -40116,12 +39994,12 @@ const weeklySlotAvailabilityBlockDefinition = {
40116
39994
  };
40117
39995
  //#endregion
40118
39996
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
40119
- const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
40120
- const bookingInstalmentPlanSchema = z$1.union([
39997
+ const bookingDepositRefundPolicySchema$1 = z$1.enum(["refundable", "non_refundable"]);
39998
+ const bookingInstalmentPlanSchema$1 = z$1.union([
40121
39999
  z$1.object({
40122
40000
  kind: z$1.literal("deposit_plus_one_remainder"),
40123
40001
  depositAmountCents: z$1.number().int().min(0),
40124
- depositRefundability: bookingDepositRefundPolicySchema,
40002
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40125
40003
  remainderDueCount: z$1.number().int().positive(),
40126
40004
  intervalUnit: z$1.enum([
40127
40005
  "day",
@@ -40132,7 +40010,7 @@ const bookingInstalmentPlanSchema = z$1.union([
40132
40010
  z$1.object({
40133
40011
  kind: z$1.literal("deposit_plus_scheduled_instalments"),
40134
40012
  depositAmountCents: z$1.number().int().min(0),
40135
- depositRefundability: bookingDepositRefundPolicySchema,
40013
+ depositRefundability: bookingDepositRefundPolicySchema$1,
40136
40014
  instalmentCount: z$1.number().int().positive(),
40137
40015
  intervalCount: z$1.number().int().positive(),
40138
40016
  intervalUnit: z$1.enum([
@@ -40152,28 +40030,28 @@ const bookingInstalmentPlanSchema = z$1.union([
40152
40030
  ])
40153
40031
  })
40154
40032
  ]);
40155
- const bookingFlexibleBalanceDueDateRuleSchema = z$1.union([z$1.object({
40033
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z$1.union([z$1.object({
40156
40034
  kind: z$1.literal("relative_to_start_date"),
40157
40035
  daysBeforeStart: z$1.number().int().positive()
40158
40036
  }), z$1.object({
40159
40037
  kind: z$1.literal("fixed_calendar_date"),
40160
40038
  dueAt: z$1.string().datetime()
40161
40039
  })]);
40162
- const bookingFlexibleBalanceConfigSchema = z$1.object({
40040
+ const bookingFlexibleBalanceConfigSchema$1 = z$1.object({
40163
40041
  upfrontAmountCents: z$1.number().int().min(0),
40164
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
40165
- depositRefundability: bookingDepositRefundPolicySchema
40042
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
40043
+ depositRefundability: bookingDepositRefundPolicySchema$1
40166
40044
  });
40167
40045
  const blockBookingPaymentCollectionOptionSchema = z$1.union([
40168
40046
  z$1.object({ kind: z$1.literal("upfront") }),
40169
40047
  z$1.object({ kind: z$1.literal("deferred_manual") }),
40170
40048
  z$1.object({
40171
40049
  kind: z$1.literal("instalment_plan"),
40172
- plan: bookingInstalmentPlanSchema
40050
+ plan: bookingInstalmentPlanSchema$1
40173
40051
  }),
40174
40052
  z$1.object({
40175
40053
  kind: z$1.literal("flexible_balance"),
40176
- config: bookingFlexibleBalanceConfigSchema
40054
+ config: bookingFlexibleBalanceConfigSchema$1
40177
40055
  })
40178
40056
  ]);
40179
40057
  const blockBookingPaymentTermsSchema = z$1.object({ allowedOptions: z$1.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -40427,6 +40305,13 @@ const publicWholeSeriesOfferingSchema = z$1.object({
40427
40305
  title: z$1.string(),
40428
40306
  slug: z$1.string(),
40429
40307
  description: z$1.unknown().nullable(),
40308
+ deliveryMode: z$1.enum([
40309
+ "in_person",
40310
+ "online",
40311
+ "hybrid"
40312
+ ]),
40313
+ waitlistEnabled: z$1.boolean(),
40314
+ requireGuestDetails: z$1.boolean(),
40430
40315
  teamMembers: z$1.array(wholeSeriesTeamMemberSummarySchema).optional(),
40431
40316
  enrollmentOpen: z$1.boolean(),
40432
40317
  pricing: wholeSeriesPricingSchema,
@@ -40542,10 +40427,11 @@ const mixedPriceDisplaySchema = z$1.object({
40542
40427
  paidToAmount: z$1.number(),
40543
40428
  currency: z$1.string()
40544
40429
  });
40545
- const publicCoursePriceDisplaySchema = z$1.discriminatedUnion("kind", [
40430
+ const publicWholeSeriesPriceDisplaySchema = z$1.discriminatedUnion("kind", [
40546
40431
  freePriceDisplaySchema,
40547
40432
  exactPriceDisplaySchema,
40548
40433
  fromPriceDisplaySchema,
40434
+ rangePriceDisplaySchema,
40549
40435
  unavailablePriceDisplaySchema
40550
40436
  ]);
40551
40437
  z$1.discriminatedUnion("kind", [
@@ -40560,8 +40446,8 @@ z$1.discriminatedUnion("kind", [
40560
40446
  label: z$1.string()
40561
40447
  }),
40562
40448
  z$1.object({
40563
- kind: z$1.literal("course"),
40564
- display: publicCoursePriceDisplaySchema
40449
+ kind: z$1.literal("whole_series"),
40450
+ display: publicWholeSeriesPriceDisplaySchema
40565
40451
  })
40566
40452
  ]);
40567
40453
  const publicEventTicketTypePriceDisplaySchema = z$1.union([
@@ -40663,10 +40549,10 @@ const publicEventPricingSchema = z$1.discriminatedUnion("kind", [
40663
40549
  })
40664
40550
  }),
40665
40551
  z$1.object({
40666
- kind: z$1.literal("course"),
40552
+ kind: z$1.literal("whole_series"),
40667
40553
  display: z$1.object({
40668
- kind: z$1.literal("course"),
40669
- display: publicCoursePriceDisplaySchema
40554
+ kind: z$1.literal("whole_series"),
40555
+ display: publicWholeSeriesPriceDisplaySchema
40670
40556
  })
40671
40557
  }),
40672
40558
  z$1.object({
@@ -41109,7 +40995,8 @@ function resolveEventRegistrationScope(context) {
41109
40995
  };
41110
40996
  return { kind: "unscoped" };
41111
40997
  }
41112
- function applyEventRegistrationScope(events, scope) {
40998
+ function resolveEventRegistrationScopedEvents(events, context) {
40999
+ const scope = resolveEventRegistrationScope(context);
41113
41000
  switch (scope.kind) {
41114
41001
  case "occurrenceSeries":
41115
41002
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -41121,9 +41008,6 @@ function applyEventRegistrationScope(events, scope) {
41121
41008
  case "unscoped": return [...events];
41122
41009
  }
41123
41010
  }
41124
- function resolveEventRegistrationScopedEvents(events, context) {
41125
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
41126
- }
41127
41011
  //#endregion
41128
41012
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
41129
41013
  function planEventRegistrationScope(input) {
@@ -41217,14 +41101,14 @@ function isRecord$22(value) {
41217
41101
  }
41218
41102
  function isPublicEventPricing(value) {
41219
41103
  if (!isRecord$22(value) || typeof value.kind !== "string") return false;
41220
- 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";
41104
+ 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";
41221
41105
  }
41222
41106
  function isPublicEventTicketType(value) {
41223
41107
  return isRecord$22(value) && typeof value.id === "string";
41224
41108
  }
41225
41109
  function readTicketTypePriceDisplay(value, currency) {
41226
41110
  const display = readLegacyPriceDisplay(value, currency);
41227
- return display.kind === "course" || display.kind === "external" ? {
41111
+ return display.kind === "whole_series" || display.kind === "external" ? {
41228
41112
  kind: "unavailable",
41229
41113
  currency
41230
41114
  } : display;
@@ -41282,11 +41166,11 @@ function readLegacyPriceDisplay(value, currency) {
41282
41166
  kind: "unavailable",
41283
41167
  currency: displayCurrency
41284
41168
  };
41285
- case "course": return isRecord$22(value.display) ? {
41286
- kind: "course",
41169
+ case "whole_series": return isRecord$22(value.display) ? {
41170
+ kind: "whole_series",
41287
41171
  display: readCoursePriceDisplay(value.display, displayCurrency)
41288
41172
  } : {
41289
- kind: "course",
41173
+ kind: "whole_series",
41290
41174
  display: {
41291
41175
  kind: "unavailable",
41292
41176
  currency: displayCurrency
@@ -41409,7 +41293,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
41409
41293
  //#endregion
41410
41294
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
41411
41295
  function eventMatchesOccurrenceId(event, occurrenceId) {
41412
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
41296
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
41413
41297
  }
41414
41298
  function findPreSelectedEvent(input) {
41415
41299
  const occurrenceContext = input.occurrenceContext;
@@ -41435,12 +41319,127 @@ function toRegistrationEvent(event) {
41435
41319
  return {
41436
41320
  ...event,
41437
41321
  pricing: resolveRuntimeEventPricing(event),
41438
- publicEventId: event.id,
41439
- registrationOccurrenceId: event.occurrenceId
41322
+ selectionId: event.id,
41323
+ registrationSubject: {
41324
+ kind: "occurrence",
41325
+ occurrenceId: event.occurrenceId
41326
+ }
41440
41327
  };
41441
41328
  }
41442
41329
  function toRegistrationEvents(events) {
41443
- return events.map(toRegistrationEvent);
41330
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
41331
+ }
41332
+ function toWholeSeriesTicketType(option) {
41333
+ return {
41334
+ ...option,
41335
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
41336
+ attendanceScope: option.attendanceScope ?? void 0,
41337
+ availability: {
41338
+ kind: "available",
41339
+ remainingCapacity: option.capacityLimit
41340
+ }
41341
+ };
41342
+ }
41343
+ function toWholeSeriesPricing(offering) {
41344
+ const resolved = resolveWholeSeriesPricingState(offering);
41345
+ switch (offering.pricing.pricingStrategy) {
41346
+ case "free": return {
41347
+ kind: "free_registration",
41348
+ currency: offering.currency,
41349
+ display: {
41350
+ kind: "free",
41351
+ currency: offering.currency
41352
+ }
41353
+ };
41354
+ case "single": {
41355
+ const amount = offering.pricing.singlePriceAmount ?? 0;
41356
+ return amount === 0 ? {
41357
+ kind: "free_registration",
41358
+ currency: offering.currency,
41359
+ display: {
41360
+ kind: "free",
41361
+ currency: offering.currency
41362
+ }
41363
+ } : {
41364
+ kind: "single_paid",
41365
+ amount,
41366
+ currency: offering.currency,
41367
+ display: {
41368
+ kind: "exact",
41369
+ amount,
41370
+ currency: offering.currency
41371
+ }
41372
+ };
41373
+ }
41374
+ case "tiered": return {
41375
+ kind: "ticket_types",
41376
+ currency: offering.currency,
41377
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
41378
+ display: resolved.display
41379
+ };
41380
+ case "sliding_scale": return {
41381
+ kind: "sliding_scale",
41382
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41383
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41384
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
41385
+ currency: offering.currency,
41386
+ display: {
41387
+ kind: "range",
41388
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
41389
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
41390
+ currency: offering.currency
41391
+ }
41392
+ };
41393
+ }
41394
+ }
41395
+ function toAttendanceModes(offering) {
41396
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
41397
+ mode,
41398
+ capacity: offering.enrollmentCapacity,
41399
+ registeredCount: offering.enrolledCount,
41400
+ availableSpots: offering.availableSpots,
41401
+ waitlistEnabled: offering.waitlistEnabled
41402
+ }));
41403
+ }
41404
+ function toWholeSeriesRegistrationEvent(offering) {
41405
+ const firstSession = offering.sessions[0];
41406
+ const lastSession = offering.sessions[offering.sessions.length - 1];
41407
+ return {
41408
+ selectionId: offering.eventSeriesId,
41409
+ registrationSubject: {
41410
+ kind: "wholeSeries",
41411
+ eventSeriesId: offering.eventSeriesId,
41412
+ sessions: offering.sessions
41413
+ },
41414
+ seriesId: offering.eventSeriesId,
41415
+ title: offering.title,
41416
+ startsAt: firstSession?.startsAt ?? "",
41417
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
41418
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
41419
+ kind: "closed",
41420
+ reason: "enrollment_closed"
41421
+ },
41422
+ deliveryMode: offering.deliveryMode,
41423
+ attendanceModes: toAttendanceModes(offering),
41424
+ capacity: offering.enrollmentCapacity,
41425
+ registeredCount: offering.enrolledCount,
41426
+ availableSpots: offering.availableSpots,
41427
+ waitlistEnabled: offering.waitlistEnabled,
41428
+ venue: offering.venue ? {
41429
+ ...offering.venue,
41430
+ location: null
41431
+ } : null,
41432
+ eventCategory: null,
41433
+ teamMembers: offering.teamMembers,
41434
+ status: offering.status,
41435
+ timeZone: firstSession?.timeZone ?? "UTC",
41436
+ pricing: toWholeSeriesPricing(offering),
41437
+ paymentTerms: offering.paymentTerms,
41438
+ consent: offering.consent,
41439
+ requireGuestDetails: offering.requireGuestDetails,
41440
+ acceptsPasses: false,
41441
+ acceptsMemberships: offering.acceptsMemberships
41442
+ };
41444
41443
  }
41445
41444
  //#endregion
41446
41445
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -41466,11 +41465,7 @@ const eventRegistrationHydrationSchemaShape = {
41466
41465
  maxTickets: z$1.string().optional(),
41467
41466
  showVenue: z$1.boolean().optional(),
41468
41467
  showCapacity: z$1.boolean().optional(),
41469
- showSessions: z$1.boolean().optional(),
41470
- showPrice: z$1.boolean().optional(),
41471
41468
  successMessage: z$1.string().optional(),
41472
- waitlistMessage: z$1.string().optional(),
41473
- membershipMessage: z$1.string().optional(),
41474
41469
  buttonVariant: registrationButtonVariantSchema.optional(),
41475
41470
  overlayEnabled: z$1.boolean().optional(),
41476
41471
  spamProtectionEnabled: z$1.boolean().optional(),
@@ -41540,6 +41535,15 @@ function resolveWholeSeriesOffering(source) {
41540
41535
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
41541
41536
  }
41542
41537
  function buildEventRegistrationShellStepLabels(source) {
41538
+ const selectedOffering = resolveWholeSeriesOffering(source);
41539
+ if (selectedOffering) {
41540
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
41541
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
41542
+ eligibility: null,
41543
+ selectedTicketType: null,
41544
+ event: selectedEvent
41545
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
41546
+ }
41543
41547
  const scopedEvents = scopeEventRegistrationEvents(source);
41544
41548
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
41545
41549
  const preSelectedEvent = findPreSelectedEvent({
@@ -41554,13 +41558,16 @@ function buildEventRegistrationShellStepLabels(source) {
41554
41558
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
41555
41559
  }
41556
41560
  function scopeEventRegistrationEvents(source) {
41561
+ return toRegistrationEvents(scopeEventRegistrationSourceEvents(source));
41562
+ }
41563
+ function scopeEventRegistrationSourceEvents(source) {
41557
41564
  const scope = planEventRegistrationScope({
41558
- events: toRegistrationEvents(source.events ?? []),
41565
+ events: source.events ?? [],
41559
41566
  wholeSeriesOffering: source.wholeSeriesOffering,
41560
41567
  occurrenceContext: source.occurrenceContext,
41561
41568
  subject: source.subject
41562
41569
  });
41563
- return scope.kind === "invalidSelectedRun" ? [] : scope.events;
41570
+ return scope.kind === "invalidSelectedRun" ? [] : [...scope.events];
41564
41571
  }
41565
41572
  function shellLabelForRegistrationStep(step, events) {
41566
41573
  switch (step) {
@@ -41592,30 +41599,29 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41592
41599
  source: createZodCodec(eventRegistrationSourceSchema),
41593
41600
  render: createZodCodec(eventRegistrationRenderSchema)
41594
41601
  },
41595
- buildRender: (source) => ({
41596
- display: buildEventRegistrationDisplay(source),
41597
- hydration: {
41598
- occurrenceContext: source.occurrenceContext ?? null,
41599
- subject: source.subject ?? null,
41600
- events: source.events ?? null,
41601
- wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
41602
- wholeSeriesOffering: resolveWholeSeriesOffering(source),
41603
- maxTickets: source.maxTickets ?? void 0,
41604
- showVenue: source.showVenue,
41605
- showCapacity: source.showCapacity,
41606
- showSessions: source.showSessions,
41607
- showPrice: source.showPrice,
41608
- successMessage: source.successMessage,
41609
- waitlistMessage: source.waitlistMessage,
41610
- membershipMessage: source.membershipMessage,
41611
- buttonVariant: source.buttonVariant,
41612
- overlayEnabled: source.overlayEnabled,
41613
- spamProtectionEnabled: source.spamProtectionEnabled,
41614
- supportEmail: source.supportEmail,
41615
- sitePasses: source.sitePasses ?? null,
41616
- siteMemberships: source.siteMemberships ?? null
41617
- }
41618
- })
41602
+ buildRender: (source) => {
41603
+ const events = source.events == null ? null : scopeEventRegistrationSourceEvents(source);
41604
+ return {
41605
+ display: buildEventRegistrationDisplay(source),
41606
+ hydration: {
41607
+ occurrenceContext: source.occurrenceContext ?? null,
41608
+ subject: source.subject ?? null,
41609
+ events,
41610
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
41611
+ wholeSeriesOffering: resolveWholeSeriesOffering(source),
41612
+ maxTickets: source.maxTickets ?? void 0,
41613
+ showVenue: source.showVenue,
41614
+ showCapacity: source.showCapacity,
41615
+ successMessage: source.successMessage,
41616
+ buttonVariant: source.buttonVariant,
41617
+ overlayEnabled: source.overlayEnabled,
41618
+ spamProtectionEnabled: source.spamProtectionEnabled,
41619
+ supportEmail: source.supportEmail,
41620
+ sitePasses: source.sitePasses ?? null,
41621
+ siteMemberships: source.siteMemberships ?? null
41622
+ }
41623
+ };
41624
+ }
41619
41625
  });
41620
41626
  function normalizeEventRegistrationEventInput(value) {
41621
41627
  if (!isRecord$21(value)) return value;
@@ -41737,24 +41743,6 @@ const eventRegistrationBlockDefinition = {
41737
41743
  defaultValue: true,
41738
41744
  ui: { intent: "display" }
41739
41745
  },
41740
- {
41741
- id: "showSessions",
41742
- type: "boolean",
41743
- label: "Show complete schedule",
41744
- description: "Display every session for whole-series registrations",
41745
- required: false,
41746
- defaultValue: true,
41747
- ui: { intent: "display" }
41748
- },
41749
- {
41750
- id: "showPrice",
41751
- type: "boolean",
41752
- label: "Show price",
41753
- description: "Display the whole-series price",
41754
- required: false,
41755
- defaultValue: true,
41756
- ui: { intent: "display" }
41757
- },
41758
41746
  {
41759
41747
  id: "successMessage",
41760
41748
  type: "text",
@@ -41765,26 +41753,6 @@ const eventRegistrationBlockDefinition = {
41765
41753
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
41766
41754
  maxLength: 500
41767
41755
  },
41768
- {
41769
- id: "waitlistMessage",
41770
- type: "text",
41771
- label: "Waitlist message",
41772
- description: "Message shown after joining a whole-series waitlist",
41773
- required: false,
41774
- multiline: true,
41775
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
41776
- maxLength: 500
41777
- },
41778
- {
41779
- id: "membershipMessage",
41780
- type: "text",
41781
- label: "Membership registration message",
41782
- description: "Message shown when a whole-series place is covered by membership",
41783
- required: false,
41784
- multiline: true,
41785
- defaultValue: "Registered using your membership. Check your email for session details.",
41786
- maxLength: 500
41787
- },
41788
41756
  {
41789
41757
  id: "buttonText",
41790
41758
  type: "text",
@@ -41816,11 +41784,7 @@ const eventRegistrationBlockDefinition = {
41816
41784
  } },
41817
41785
  showVenue: { $bind: { from: "content.showVenue" } },
41818
41786
  showCapacity: { $bind: { from: "content.showCapacity" } },
41819
- showSessions: { $bind: { from: "content.showSessions" } },
41820
- showPrice: { $bind: { from: "content.showPrice" } },
41821
41787
  successMessage: { $bind: { from: "content.successMessage" } },
41822
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
41823
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
41824
41788
  buttonText: { $bind: {
41825
41789
  from: "content.buttonText",
41826
41790
  fallback: "Complete Registration"
@@ -41937,267 +41901,6 @@ const eventRegistrationBlockDefinition = {
41937
41901
  }
41938
41902
  };
41939
41903
  //#endregion
41940
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
41941
- const courseRegistrationHydrationSchemaShape = {
41942
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
41943
- courses: z$1.array(publicWholeSeriesOfferingSchema).nullable().optional(),
41944
- showSessions: z$1.boolean().optional(),
41945
- showPrice: z$1.boolean().optional(),
41946
- showCapacity: z$1.boolean().optional(),
41947
- showVenue: z$1.boolean().optional(),
41948
- successMessage: z$1.string().optional(),
41949
- waitlistMessage: z$1.string().optional(),
41950
- membershipMessage: z$1.string().optional(),
41951
- buttonVariant: registrationButtonVariantSchema.optional()
41952
- };
41953
- const courseRegistrationSourceSchema = z$1.object({
41954
- siteId: z$1.string().optional(),
41955
- apiBaseUrl: z$1.string().optional(),
41956
- portalToken: z$1.string().nullable().optional(),
41957
- ...courseRegistrationHydrationSchemaShape,
41958
- className: z$1.string().nullable().optional(),
41959
- buttonText: z$1.string().nullable().optional(),
41960
- stage: previewStageSchema.optional()
41961
- });
41962
- const courseRegistrationDisplaySchema = z$1.object({
41963
- kind: z$1.literal("course-registration"),
41964
- state: z$1.literal("shell"),
41965
- className: z$1.string().nullable(),
41966
- summaryButtonText: z$1.string()
41967
- });
41968
- const courseRegistrationHydrationSchema = z$1.object(courseRegistrationHydrationSchemaShape);
41969
- const courseRegistrationRenderSchema = z$1.object({
41970
- display: courseRegistrationDisplaySchema,
41971
- hydration: courseRegistrationHydrationSchema
41972
- });
41973
- z$1.object({
41974
- siteId: z$1.string().optional(),
41975
- apiBaseUrl: z$1.string().optional(),
41976
- portalToken: z$1.string().nullable().optional(),
41977
- stage: previewStageSchema.optional()
41978
- });
41979
- function buildCourseRegistrationDisplay(source) {
41980
- return {
41981
- kind: "course-registration",
41982
- state: "shell",
41983
- className: source.className ?? null,
41984
- summaryButtonText: source.buttonText?.trim() || "Sign up"
41985
- };
41986
- }
41987
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
41988
- kind: "client-owned",
41989
- contracts: {
41990
- source: createZodCodec(courseRegistrationSourceSchema),
41991
- render: createZodCodec(courseRegistrationRenderSchema)
41992
- },
41993
- buildRender: (source) => ({
41994
- display: buildCourseRegistrationDisplay(source),
41995
- hydration: {
41996
- subject: source.subject ?? null,
41997
- courses: source.courses ?? null,
41998
- showSessions: source.showSessions,
41999
- showPrice: source.showPrice,
42000
- showCapacity: source.showCapacity,
42001
- showVenue: source.showVenue,
42002
- successMessage: source.successMessage,
42003
- waitlistMessage: source.waitlistMessage,
42004
- membershipMessage: source.membershipMessage,
42005
- buttonVariant: source.buttonVariant
42006
- }
42007
- })
42008
- });
42009
- function buildCourseRegistrationInteractiveIslandProps(props) {
42010
- return buildInteractiveIslandProps({
42011
- runtime: courseRegistrationBlockRuntime,
42012
- mode: "course-registration",
42013
- meta: {
42014
- siteId: props.siteId,
42015
- apiBaseUrl: props.apiBaseUrl,
42016
- portalToken: props.portalToken,
42017
- stage: props.stage
42018
- },
42019
- source: props
42020
- });
42021
- }
42022
- const courseRegistrationBlockDefinition = {
42023
- manifest: createBlockManifest({
42024
- id: "block.course-registration",
42025
- version: "1.0.0",
42026
- title: "Course Registration",
42027
- titleSource: "heading",
42028
- description: "Enrollment form for multi-session courses",
42029
- category: "interactive",
42030
- contentSource: { kind: "inline" },
42031
- tags: [
42032
- "courses",
42033
- "enrollment",
42034
- "booking",
42035
- "form",
42036
- "signup",
42037
- "education"
42038
- ],
42039
- icon: "GraduationCap",
42040
- styleTokens: {
42041
- background: "surface",
42042
- typography: "body",
42043
- spacing: "md"
42044
- },
42045
- behaviours: {
42046
- supportsThemeSwitching: true,
42047
- inlineEditing: false,
42048
- animation: false,
42049
- paletteHidden: false
42050
- },
42051
- additionalFields: [
42052
- {
42053
- id: "heading",
42054
- type: "text",
42055
- label: "Heading",
42056
- description: "Main heading for the registration form",
42057
- required: false,
42058
- multiline: false,
42059
- defaultValue: "Sign up"
42060
- },
42061
- {
42062
- id: "description",
42063
- type: "richText",
42064
- label: "Description",
42065
- description: "Optional introductory text",
42066
- required: false
42067
- },
42068
- {
42069
- id: "showSessions",
42070
- type: "boolean",
42071
- label: "Show sessions",
42072
- description: "Display the list of course sessions",
42073
- required: false,
42074
- defaultValue: true,
42075
- ui: { intent: "display" }
42076
- },
42077
- {
42078
- id: "showPrice",
42079
- type: "boolean",
42080
- label: "Show price",
42081
- description: "Display the course price",
42082
- required: false,
42083
- defaultValue: true,
42084
- ui: { intent: "display" }
42085
- },
42086
- {
42087
- id: "showCapacity",
42088
- type: "boolean",
42089
- label: "Show available spots",
42090
- description: "Display remaining enrollment capacity",
42091
- required: false,
42092
- defaultValue: true,
42093
- ui: { intent: "display" }
42094
- },
42095
- {
42096
- id: "showVenue",
42097
- type: "boolean",
42098
- label: "Show venue",
42099
- description: "Display venue information",
42100
- required: false,
42101
- defaultValue: true,
42102
- ui: { intent: "display" }
42103
- },
42104
- {
42105
- id: "successMessage",
42106
- type: "text",
42107
- label: "Success message",
42108
- description: "Message shown after successful enrollment",
42109
- required: false,
42110
- multiline: true,
42111
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
42112
- maxLength: 500
42113
- },
42114
- {
42115
- id: "waitlistMessage",
42116
- type: "text",
42117
- label: "Waitlist message",
42118
- description: "Message when added to waitlist",
42119
- required: false,
42120
- multiline: true,
42121
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
42122
- maxLength: 500
42123
- },
42124
- {
42125
- id: "membershipMessage",
42126
- type: "text",
42127
- label: "Membership enrollment message",
42128
- description: "Message when enrolled using a membership",
42129
- required: false,
42130
- multiline: true,
42131
- defaultValue: "Enrolled using your membership! Check your email for session details.",
42132
- maxLength: 500
42133
- },
42134
- {
42135
- id: "buttonText",
42136
- type: "text",
42137
- label: "Submit button text",
42138
- description: "Text for the enrollment submit button",
42139
- required: false,
42140
- multiline: false,
42141
- defaultValue: "Sign up",
42142
- maxLength: 40
42143
- },
42144
- createButtonVariantField()
42145
- ],
42146
- layout: [styledSection({
42147
- baseClass: "",
42148
- spacing: "spacious",
42149
- children: sectionContainer([
42150
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
42151
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
42152
- courseRegistration(withApiBindings({
42153
- subject: { $bind: {
42154
- from: "$root.subject",
42155
- fallback: null
42156
- } },
42157
- portalToken: { $bind: {
42158
- from: "$root.portalToken",
42159
- fallback: null
42160
- } },
42161
- showSessions: { $bind: { from: "content.showSessions" } },
42162
- showPrice: { $bind: { from: "content.showPrice" } },
42163
- showCapacity: { $bind: { from: "content.showCapacity" } },
42164
- showVenue: { $bind: { from: "content.showVenue" } },
42165
- successMessage: { $bind: { from: "content.successMessage" } },
42166
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
42167
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
42168
- buttonText: { $bind: {
42169
- from: "content.buttonText",
42170
- fallback: "Sign up"
42171
- } },
42172
- buttonVariant: { $bind: {
42173
- from: "content.buttonVariant",
42174
- fallback: "primary"
42175
- } },
42176
- courses: { $bind: { from: "data.courses" } },
42177
- stage: { $bind: {
42178
- from: "$root.previewStage",
42179
- fallback: "published"
42180
- } }
42181
- }))
42182
- ], { gap: "lg" })
42183
- })]
42184
- }),
42185
- runtime: courseRegistrationBlockRuntime,
42186
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42187
- dataLoaders: { courses: {
42188
- endpoint: "listPublicWholeSeriesOfferings",
42189
- params: {
42190
- siteId: { $bind: { from: "$root.siteId" } },
42191
- limit: "50",
42192
- stage: { $bind: {
42193
- from: "$root.previewStage",
42194
- fallback: "published"
42195
- } }
42196
- },
42197
- mode: "server"
42198
- } }
42199
- };
42200
- //#endregion
42201
41904
  //#region ../blocks/src/system/blocks/event-details.ts
42202
41905
  /**
42203
41906
  * Event Details Block
@@ -42444,200 +42147,6 @@ const eventDetailsBlockDefinition = {
42444
42147
  mode: "server"
42445
42148
  } }
42446
42149
  };
42447
- const courseDetailsBlockDefinition = {
42448
- manifest: createBlockManifest({
42449
- id: "block.course-details",
42450
- version: "1.0.0",
42451
- title: "Course Details",
42452
- titleSource: "heading",
42453
- description: "Schedule, venue, price, and enrollment status for a course",
42454
- category: "content",
42455
- contentSource: { kind: "entries" },
42456
- tags: [
42457
- "courses",
42458
- "schedule",
42459
- "sessions",
42460
- "venue",
42461
- "pricing"
42462
- ],
42463
- icon: "GraduationCap",
42464
- styleTokens: {
42465
- background: "surface",
42466
- typography: "body",
42467
- spacing: "md"
42468
- },
42469
- behaviours: {
42470
- supportsThemeSwitching: true,
42471
- inlineEditing: false,
42472
- animation: false,
42473
- paletteHidden: false
42474
- },
42475
- additionalFields: [
42476
- {
42477
- id: "heading",
42478
- type: "text",
42479
- label: "Heading",
42480
- description: "Optional heading shown above course details",
42481
- required: false,
42482
- multiline: false,
42483
- defaultValue: "Course details"
42484
- },
42485
- {
42486
- id: "showTitle",
42487
- type: "boolean",
42488
- label: "Show course title",
42489
- required: false,
42490
- defaultValue: false,
42491
- ui: { intent: "display" }
42492
- },
42493
- {
42494
- id: "showDescription",
42495
- type: "boolean",
42496
- label: "Show course description",
42497
- description: "Render the course description from the bookings course record",
42498
- required: false,
42499
- defaultValue: false,
42500
- ui: { intent: "display" }
42501
- },
42502
- {
42503
- id: "showSessions",
42504
- type: "boolean",
42505
- label: "Show sessions",
42506
- required: false,
42507
- defaultValue: true,
42508
- ui: { intent: "display" }
42509
- },
42510
- {
42511
- id: "sessionsLimit",
42512
- type: "select",
42513
- label: "Sessions limit",
42514
- required: false,
42515
- multiple: false,
42516
- defaultValue: "10",
42517
- options: [
42518
- {
42519
- value: "3",
42520
- label: "3 sessions"
42521
- },
42522
- {
42523
- value: "5",
42524
- label: "5 sessions"
42525
- },
42526
- {
42527
- value: "10",
42528
- label: "10 sessions"
42529
- },
42530
- {
42531
- value: "all",
42532
- label: "All sessions"
42533
- }
42534
- ],
42535
- ui: { intent: "display" }
42536
- },
42537
- {
42538
- id: "showVenue",
42539
- type: "boolean",
42540
- label: "Show venue",
42541
- required: false,
42542
- defaultValue: true,
42543
- ui: { intent: "display" }
42544
- },
42545
- {
42546
- id: "showPrice",
42547
- type: "boolean",
42548
- label: "Show price",
42549
- required: false,
42550
- defaultValue: true,
42551
- ui: { intent: "display" }
42552
- },
42553
- {
42554
- id: "showCapacity",
42555
- type: "boolean",
42556
- label: "Show capacity",
42557
- required: false,
42558
- defaultValue: true,
42559
- ui: { intent: "display" }
42560
- },
42561
- {
42562
- id: "showEnrollmentStatus",
42563
- type: "boolean",
42564
- label: "Show enrollment status",
42565
- required: false,
42566
- defaultValue: true,
42567
- ui: { intent: "display" }
42568
- },
42569
- {
42570
- id: "showMembershipNote",
42571
- type: "boolean",
42572
- label: "Show membership note",
42573
- description: "Indicate when memberships can be used for free enrollment",
42574
- required: false,
42575
- defaultValue: true,
42576
- ui: { intent: "display" }
42577
- }
42578
- ],
42579
- layout: [styledSection({
42580
- baseClass: "",
42581
- spacing: "spacious",
42582
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
42583
- subject: { $bind: {
42584
- from: "$root.subject",
42585
- fallback: null
42586
- } },
42587
- courses: { $bind: { from: "data.courses" } },
42588
- showTitle: { $bind: {
42589
- from: "content.showTitle",
42590
- fallback: false
42591
- } },
42592
- showDescription: { $bind: {
42593
- from: "content.showDescription",
42594
- fallback: false
42595
- } },
42596
- showSessions: { $bind: {
42597
- from: "content.showSessions",
42598
- fallback: true
42599
- } },
42600
- sessionsLimit: { $bind: {
42601
- from: "content.sessionsLimit",
42602
- fallback: "10"
42603
- } },
42604
- showVenue: { $bind: {
42605
- from: "content.showVenue",
42606
- fallback: true
42607
- } },
42608
- showPrice: { $bind: {
42609
- from: "content.showPrice",
42610
- fallback: true
42611
- } },
42612
- showCapacity: { $bind: {
42613
- from: "content.showCapacity",
42614
- fallback: true
42615
- } },
42616
- showEnrollmentStatus: { $bind: {
42617
- from: "content.showEnrollmentStatus",
42618
- fallback: true
42619
- } },
42620
- showMembershipNote: { $bind: {
42621
- from: "content.showMembershipNote",
42622
- fallback: true
42623
- } }
42624
- })], { gap: "lg" })
42625
- })]
42626
- }),
42627
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
42628
- dataLoaders: { courses: {
42629
- endpoint: "listPublicWholeSeriesOfferings",
42630
- params: {
42631
- siteId: { $bind: { from: "$root.siteId" } },
42632
- limit: "50",
42633
- stage: { $bind: {
42634
- from: "$root.previewStage",
42635
- fallback: "published"
42636
- } }
42637
- },
42638
- mode: "server"
42639
- } }
42640
- };
42641
42150
  const eventSpotlightBlockDefinition = {
42642
42151
  manifest: createBlockManifest({
42643
42152
  id: "block.event-spotlight",
@@ -45167,7 +44676,7 @@ const EmptyState = ({ message = "No upcoming events scheduled.", className, hasA
45167
44676
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
45168
44677
  /**
45169
44678
  * Shared tile content for displaying date and time range.
45170
- * Used by event-details "Other dates" and course-details "Sessions".
44679
+ * Used by event-details "Other dates".
45171
44680
  */
45172
44681
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
45173
44682
  const { date, timeRange } = formatEventDateParts({
@@ -47919,7 +47428,7 @@ const offeringsPreviewManifest = createBlockManifest({
47919
47428
  fallback: "published"
47920
47429
  } },
47921
47430
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
47922
- courses: { $bind: { from: "data.courses" } },
47431
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
47923
47432
  ...offeringsPreviewEventDataBindings
47924
47433
  })
47925
47434
  ], { gap: "lg" }),
@@ -47936,7 +47445,7 @@ const offeringsPreviewBlockDefinition = {
47936
47445
  dataSchemas: {
47937
47446
  ...offeringsPreviewEventDataSchemas,
47938
47447
  routeCandidates: publicRouteCandidatesSchema.optional(),
47939
- courses: publicWholeSeriesOfferingsArraySchema.optional()
47448
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
47940
47449
  },
47941
47450
  dataLoaders: {
47942
47451
  ...offeringsPreviewEventDataLoaders,
@@ -47945,7 +47454,7 @@ const offeringsPreviewBlockDefinition = {
47945
47454
  params: {},
47946
47455
  mode: "server"
47947
47456
  },
47948
- courses: {
47457
+ wholeSeriesOfferings: {
47949
47458
  endpoint: "listPublicWholeSeriesOfferings",
47950
47459
  params: {
47951
47460
  siteId: { $bind: { from: "$root.siteId" } },
@@ -53047,22 +52556,6 @@ const systemBlockDefinitions = [
53047
52556
  weight: "standard"
53048
52557
  })]
53049
52558
  })),
53050
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
53051
- flow: conversionFlow,
53052
- layoutProfiles: [layoutProfile({
53053
- variantKey: "default",
53054
- family: "form",
53055
- weight: "standard"
53056
- })]
53057
- })),
53058
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
53059
- flow: offeringsFlow,
53060
- layoutProfiles: [layoutProfile({
53061
- variantKey: "default",
53062
- family: "stack",
53063
- weight: "standard"
53064
- })]
53065
- })),
53066
52559
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
53067
52560
  flow: offeringsFlow,
53068
52561
  layoutProfiles: [layoutProfile({
@@ -55889,7 +55382,7 @@ function emptySelection(timeZone) {
55889
55382
  timeZone
55890
55383
  };
55891
55384
  }
55892
- function parseLimit$1(value, fallback) {
55385
+ function parseLimit(value, fallback) {
55893
55386
  if (value === "all") return Number.MAX_SAFE_INTEGER;
55894
55387
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
55895
55388
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -55972,7 +55465,7 @@ function selectEventDetails(args) {
55972
55465
  subject: args.subject
55973
55466
  }));
55974
55467
  const occurrenceContext = args.occurrenceContext ?? null;
55975
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
55468
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
55976
55469
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
55977
55470
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
55978
55471
  if (!candidate) return emptySelection(timeZone);
@@ -56048,8 +55541,8 @@ function resolveEventDetailsPresentation(input) {
56048
55541
  };
56049
55542
  }
56050
55543
  //#endregion
56051
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
56052
- function CoursePricingDisplay({ pricing, acceptedItems }) {
55544
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
55545
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
56053
55546
  return /* @__PURE__ */ jsxs("div", {
56054
55547
  className: "rb-mt-6",
56055
55548
  children: [
@@ -56061,7 +55554,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
56061
55554
  className: "rb-flex rb-flex-col rb-gap-2",
56062
55555
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56063
55556
  option.name,
56064
- ": ",
55557
+ ":",
55558
+ " ",
56065
55559
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56066
55560
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
56067
55561
  className: "rb-caption status-muted",
@@ -56082,7 +55576,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
56082
55576
  const label = preview.publicLabel.trim() || "Discount";
56083
55577
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
56084
55578
  }
56085
- function TeamMemberName$1({ name, profilePath }) {
55579
+ function TeamMemberName({ name, profilePath }) {
56086
55580
  return profilePath ? /* @__PURE__ */ jsx("a", {
56087
55581
  href: profilePath,
56088
55582
  className: "rb-hover-opacity-80",
@@ -56119,7 +55613,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
56119
55613
  children: "No registration required - just show up"
56120
55614
  })]
56121
55615
  });
56122
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
55616
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
56123
55617
  pricing: coursePricing,
56124
55618
  acceptedItems: [...acceptedItems]
56125
55619
  });
@@ -56194,7 +55688,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
56194
55688
  children: "With"
56195
55689
  }), /* @__PURE__ */ jsx("div", {
56196
55690
  className: "rb-flex rb-flex-col rb-gap-3",
56197
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
55691
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56198
55692
  name: member.name,
56199
55693
  profilePath: member.profilePath
56200
55694
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -56354,9 +55848,13 @@ function EventDetailsSSR(props) {
56354
55848
  const { blockId, occurrenceContext = null, subject, events = null, className, children } = props;
56355
55849
  const nowIso = (/* @__PURE__ */ new Date()).toISOString();
56356
55850
  const normalizedSubject = normalizeEventRegistrationPageSurfaceSubject(subject);
55851
+ const scopedEvents = events === null ? null : resolveEventRegistrationScopedEvents(events, {
55852
+ occurrenceContext,
55853
+ subject: normalizedSubject
55854
+ });
56357
55855
  const presentation = resolveEventDetailsPresentation({
56358
55856
  ...props,
56359
- events,
55857
+ events: scopedEvents,
56360
55858
  occurrenceContext,
56361
55859
  subject: normalizedSubject,
56362
55860
  nowIso
@@ -56369,7 +55867,7 @@ function EventDetailsSSR(props) {
56369
55867
  /* @__PURE__ */ jsx(IslandPropsScript, { value: {
56370
55868
  occurrenceContext,
56371
55869
  subject: normalizedSubject,
56372
- events,
55870
+ events: scopedEvents,
56373
55871
  showVenue: presentation.showVenue,
56374
55872
  showMap: presentation.showMap,
56375
55873
  showOtherDates: presentation.showOtherDates,
@@ -56473,352 +55971,6 @@ function LocationMapSSR(props) {
56473
55971
  });
56474
55972
  }
56475
55973
  //#endregion
56476
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
56477
- /**
56478
- * Resolves native run-page ownership without falling back to entry or slug
56479
- * coincidence when a page-surface subject is present but invalid.
56480
- */
56481
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
56482
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
56483
- const parsed = parseEventPageSurfaceSubject(subjectValue);
56484
- if (!parsed.ok) return {
56485
- kind: "unsupported",
56486
- reason: parsed.error.kind
56487
- };
56488
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
56489
- const allowedSeriesIds = new Set(seriesIds);
56490
- return {
56491
- kind: "scoped",
56492
- subject: parsed.value,
56493
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
56494
- };
56495
- }
56496
- function eventSeriesIdsForSubject(subject) {
56497
- switch (subject.kind) {
56498
- case "eventSeries": return [subject.eventSeriesId];
56499
- case "eventOffering": return subject.availableEventSeriesIds;
56500
- default: return assertNever$24(subject);
56501
- }
56502
- }
56503
- //#endregion
56504
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
56505
- /** Temporary Course-block adapter over canonical Event run scoping. */
56506
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
56507
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
56508
- return scope.kind === "scoped" ? {
56509
- kind: "scoped",
56510
- subject: scope.subject,
56511
- courses: scope.runs
56512
- } : scope;
56513
- }
56514
- //#endregion
56515
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
56516
- function selectCourseDetails(args) {
56517
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
56518
- if (pageSurfaceScope.kind === "unsupported") return {
56519
- mode: "unsupportedPageSurfaceSubject",
56520
- selected: null,
56521
- scoped: []
56522
- };
56523
- if (pageSurfaceScope.kind === "scoped") {
56524
- const scoped = [...pageSurfaceScope.courses];
56525
- return {
56526
- mode: "pageSurfaceSubject",
56527
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
56528
- scoped
56529
- };
56530
- }
56531
- return {
56532
- mode: "unsupportedPageSurfaceSubject",
56533
- selected: null,
56534
- scoped: []
56535
- };
56536
- }
56537
- //#endregion
56538
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
56539
- function toValidDate(value) {
56540
- if (!value) return null;
56541
- const date = new Date(value);
56542
- return Number.isNaN(date.getTime()) ? null : date;
56543
- }
56544
- function getCourseDateRange(course) {
56545
- const datedSessions = (course.sessions ?? []).map((session) => ({
56546
- session,
56547
- start: toValidDate(session.startsAt),
56548
- end: toValidDate(session.endsAt)
56549
- })).filter((value) => value.start !== null || value.end !== null);
56550
- if (datedSessions.length === 0) return {
56551
- start: null,
56552
- end: null,
56553
- startIso: null,
56554
- endIso: null,
56555
- timeZone: null
56556
- };
56557
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
56558
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
56559
- return {
56560
- start: startSession?.start ?? null,
56561
- end: endSession?.end ?? null,
56562
- startIso: startSession?.session.startsAt ?? null,
56563
- endIso: endSession?.session.endsAt ?? null,
56564
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
56565
- };
56566
- }
56567
- function formatCourseDateRange(range) {
56568
- const { startIso, endIso, timeZone } = range;
56569
- const dateFormat = {
56570
- month: "numeric",
56571
- day: "numeric",
56572
- year: "numeric"
56573
- };
56574
- const effectiveTimeZone = toBookingTimeZone(timeZone);
56575
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
56576
- startsAt: iso,
56577
- timeZone: effectiveTimeZone
56578
- }), dateFormat);
56579
- const formatRangeDateOnly = (startsAt, endsAt) => {
56580
- const startText = formatSingleDate(startsAt);
56581
- const endText = formatSingleDate(endsAt);
56582
- return startText === endText ? startText : `${startText} – ${endText}`;
56583
- };
56584
- if (!startIso && !endIso) return "Dates TBD";
56585
- if (startIso && !endIso) return formatSingleDate(startIso);
56586
- if (!startIso && endIso) return formatSingleDate(endIso);
56587
- if (!startIso || !endIso) return "Dates TBD";
56588
- return formatRangeDateOnly(startIso, endIso);
56589
- }
56590
- //#endregion
56591
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
56592
- function TeamMemberName({ name, profilePath }) {
56593
- return profilePath ? /* @__PURE__ */ jsx("a", {
56594
- href: profilePath,
56595
- className: "rb-hover-opacity-80",
56596
- children: /* @__PURE__ */ jsx("strong", { children: name })
56597
- }) : /* @__PURE__ */ jsx("strong", { children: name });
56598
- }
56599
- function parseLimit(value, fallback) {
56600
- if (value === "all") return "all";
56601
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
56602
- return Number.isFinite(n) && n > 0 ? n : fallback;
56603
- }
56604
- function CourseDetailsView(props) {
56605
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
56606
- if (!course) return /* @__PURE__ */ jsx("p", {
56607
- className: "rb-caption status-muted",
56608
- children: emptyMessage
56609
- });
56610
- const pricing = resolveWholeSeriesPricingState(course);
56611
- const sessionLimit = parseLimit(sessionsLimit, 10);
56612
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
56613
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
56614
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
56615
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
56616
- const teamMembers = course.teamMembers ?? [];
56617
- return /* @__PURE__ */ jsxs("div", {
56618
- className: "rb-flex rb-flex-col rb-gap-6",
56619
- children: [
56620
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
56621
- /* @__PURE__ */ jsxs("div", {
56622
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
56623
- children: [/* @__PURE__ */ jsxs("div", {
56624
- className: "rb-flex rb-flex-col rb-gap-4",
56625
- children: [
56626
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56627
- className: "rb-label rb-mb-2",
56628
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
56629
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
56630
- className: "rb-flex rb-flex-col rb-gap-2",
56631
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
56632
- option.name,
56633
- ": ",
56634
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
56635
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
56636
- className: "rb-caption status-muted",
56637
- children: option.description
56638
- }) : null] }, option.id))
56639
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
56640
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56641
- className: "rb-label rb-mb-2",
56642
- children: "Spots"
56643
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
56644
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56645
- className: "rb-label rb-mb-2",
56646
- children: "Membership"
56647
- }), /* @__PURE__ */ jsx("p", {
56648
- className: "rb-caption status-muted",
56649
- children: "Eligible memberships can be used for free enrollment"
56650
- })] }),
56651
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56652
- className: "rb-label rb-mb-2",
56653
- children: "With"
56654
- }), /* @__PURE__ */ jsx("div", {
56655
- className: "rb-flex rb-flex-col rb-gap-3",
56656
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
56657
- name: teamMember.name,
56658
- profilePath: teamMember.profilePath
56659
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
56660
- className: "rb-caption status-muted",
56661
- children: teamMember.summary
56662
- })] }, teamMember.id))
56663
- })] })
56664
- ]
56665
- }), /* @__PURE__ */ jsxs("div", {
56666
- className: "rb-flex rb-flex-col rb-gap-4",
56667
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
56668
- /* @__PURE__ */ jsx("div", {
56669
- className: "rb-label rb-mb-2",
56670
- children: "Venue"
56671
- }),
56672
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
56673
- course.venue.address && /* @__PURE__ */ jsx("p", {
56674
- className: "rb-caption status-muted",
56675
- children: course.venue.address
56676
- })
56677
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56678
- className: "rb-label rb-mb-2",
56679
- children: "Enrollment"
56680
- }), /* @__PURE__ */ jsx("p", {
56681
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
56682
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
56683
- })] })]
56684
- })]
56685
- }),
56686
- descriptionDoc && /* @__PURE__ */ jsx("div", {
56687
- className: "cd-description",
56688
- children: /* @__PURE__ */ jsx(RichText$1, { doc: descriptionDoc })
56689
- }),
56690
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
56691
- /* @__PURE__ */ jsx("div", {
56692
- className: "rb-label",
56693
- children: "Sessions"
56694
- }),
56695
- /* @__PURE__ */ jsx("div", {
56696
- className: "rb-mt-2 rb-tiles-grid",
56697
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
56698
- className: "rb-tile",
56699
- children: /* @__PURE__ */ jsx(DateTimeTile, {
56700
- startsAt: s.startsAt,
56701
- endsAt: s.endsAt
56702
- })
56703
- }, s.id))
56704
- }),
56705
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
56706
- className: "cd-sessions__more",
56707
- children: [
56708
- "Showing ",
56709
- visibleSessions.length,
56710
- " of ",
56711
- sortedSessions.length,
56712
- " sessions."
56713
- ]
56714
- })
56715
- ] })
56716
- ]
56717
- });
56718
- }
56719
- //#endregion
56720
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
56721
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
56722
- const selection = selectCourseDetails({
56723
- courses: courses ?? null,
56724
- subject
56725
- });
56726
- const parsedSubject = parseEventPageSurfaceSubject(subject);
56727
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
56728
- const now = /* @__PURE__ */ new Date();
56729
- const scopedWithRange = selection.scoped.map((c) => ({
56730
- course: c,
56731
- range: getCourseDateRange(c)
56732
- }));
56733
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
56734
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
56735
- });
56736
- 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;
56737
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
56738
- return /* @__PURE__ */ jsxs("div", {
56739
- className: `course-details ${className ?? ""}`.trim(),
56740
- "data-block": "course-details",
56741
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
56742
- course: selection.selected,
56743
- showTitle,
56744
- showDescription,
56745
- showSessions,
56746
- sessionsLimit,
56747
- showVenue,
56748
- showPrice,
56749
- showCapacity,
56750
- showEnrollmentStatus,
56751
- showMembershipNote
56752
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
56753
- className: "rb-flex rb-flex-col rb-gap-3",
56754
- children: [
56755
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
56756
- className: "rb-label rb-mb-2",
56757
- children: "Upcoming runs"
56758
- }), /* @__PURE__ */ jsx("p", {
56759
- className: "rb-caption status-muted",
56760
- children: "Choose a run to see sessions and details."
56761
- })] }),
56762
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
56763
- className: "rb-flex rb-flex-col rb-gap-2",
56764
- children: nonPastRuns.map(({ course, range }) => {
56765
- const start = range.start;
56766
- const end = range.end;
56767
- const isInProgress = Boolean(start && end && start <= now && end > now);
56768
- return /* @__PURE__ */ jsx("li", {
56769
- className: "rb-rounded-md rb-border rb-p-3",
56770
- children: /* @__PURE__ */ jsx("div", {
56771
- className: "rb-flex rb-flex-col rb-gap-1",
56772
- children: /* @__PURE__ */ jsxs("div", {
56773
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
56774
- children: [/* @__PURE__ */ jsxs("div", {
56775
- className: "rb-min-w-0",
56776
- children: [/* @__PURE__ */ jsx("div", {
56777
- className: "rb-truncate",
56778
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
56779
- }), /* @__PURE__ */ jsx("div", {
56780
- className: "rb-caption status-muted",
56781
- children: formatCourseDateRange(range)
56782
- })]
56783
- }), /* @__PURE__ */ jsx("div", {
56784
- className: "rb-caption status-muted rb-shrink-0",
56785
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
56786
- })]
56787
- })
56788
- })
56789
- }, course.eventSeriesId);
56790
- })
56791
- }) : /* @__PURE__ */ jsx("p", {
56792
- className: "rb-caption status-muted",
56793
- children: "No upcoming runs."
56794
- }),
56795
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
56796
- className: "rb-caption status-muted",
56797
- children: [
56798
- "Last run: ",
56799
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
56800
- " (",
56801
- formatCourseDateRange(lastPastRun.range),
56802
- ")"
56803
- ]
56804
- }) : null
56805
- ]
56806
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
56807
- course: null,
56808
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
56809
- showTitle,
56810
- showDescription,
56811
- showSessions,
56812
- sessionsLimit,
56813
- showVenue,
56814
- showPrice,
56815
- showCapacity,
56816
- showEnrollmentStatus,
56817
- showMembershipNote
56818
- }), children]
56819
- });
56820
- }
56821
- //#endregion
56822
55974
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
56823
55975
  /**
56824
55976
  * EventSpotlight Component
@@ -57022,7 +56174,7 @@ function deriveCourseScheduleSummary(course) {
57022
56174
  sessionCount: sessions.length
57023
56175
  };
57024
56176
  }
57025
- function nextCourseSessionStart(course) {
56177
+ function nextWholeSeriesSessionStart(course) {
57026
56178
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
57027
56179
  }
57028
56180
  function occurrenceFromEvent(event) {
@@ -57176,7 +56328,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
57176
56328
  function buildItemDataMap(props) {
57177
56329
  const routeCandidates = props.routeCandidates?.routes ?? [];
57178
56330
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
57179
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
56331
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
57180
56332
  }
57181
56333
  function eventDataFromMaybeArray(events) {
57182
56334
  return events ? {
@@ -57230,8 +56382,8 @@ function renderOfferingGroupItems(presentation, items, options) {
57230
56382
  }
57231
56383
  }
57232
56384
  function compareCoursesByNextSession(left, right) {
57233
- const leftStart = nextCourseSessionStart(left);
57234
- const rightStart = nextCourseSessionStart(right);
56385
+ const leftStart = nextWholeSeriesSessionStart(left);
56386
+ const rightStart = nextWholeSeriesSessionStart(right);
57235
56387
  if (leftStart === null) return rightStart === null ? 0 : 1;
57236
56388
  if (rightStart === null) return -1;
57237
56389
  return leftStart.localeCompare(rightStart);
@@ -58170,45 +57322,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
58170
57322
  });
58171
57323
  }
58172
57324
  //#endregion
58173
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
58174
- /**
58175
- * Server-safe placeholder for course registration.
58176
- * Provides a static container for island hydration without importing client hooks.
58177
- */
58178
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
58179
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
58180
- siteId,
58181
- apiBaseUrl,
58182
- portalToken,
58183
- subject,
58184
- courses,
58185
- className,
58186
- showSessions,
58187
- showPrice,
58188
- showCapacity,
58189
- showVenue,
58190
- successMessage,
58191
- waitlistMessage,
58192
- membershipMessage,
58193
- buttonText,
58194
- buttonVariant,
58195
- stage
58196
- });
58197
- return /* @__PURE__ */ jsxs("div", {
58198
- className: `course-registration ${className ?? ""}`.trim(),
58199
- "data-block": "course-registration",
58200
- ...getIslandRootProps("course-registration", blockId),
58201
- children: [
58202
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
58203
- /* @__PURE__ */ jsx("div", {
58204
- className: "course-registration__summary",
58205
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
58206
- }),
58207
- children
58208
- ]
58209
- });
58210
- }
58211
- //#endregion
58212
57325
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
58213
57326
  function GiftingSSR({ blockId, ...rest }) {
58214
57327
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -59694,7 +58807,6 @@ const runtimeBackedBlockServerEntries = {
59694
58807
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
59695
58808
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
59696
58809
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
59697
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
59698
58810
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
59699
58811
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
59700
58812
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -59727,7 +58839,6 @@ const serverComponentRegistry = {
59727
58839
  "booking-form": BookingFormSSR,
59728
58840
  "event-details": EventDetailsSSR,
59729
58841
  "location-map": LocationMapSSR,
59730
- "course-details": CourseDetailsSSR,
59731
58842
  "event-spotlight": EventSpotlight,
59732
58843
  "event-combined": EventCombinedSSR,
59733
58844
  "offerings-preview": OfferingsPreviewNode,
@@ -64143,176 +63254,6 @@ ${root} {
64143
63254
  `;
64144
63255
  }
64145
63256
  //#endregion
64146
- //#region ../theme-core/src/blocks/vars/course-details.ts
64147
- /**
64148
- * Generate CSS variables for the course-details block.
64149
- *
64150
- * Variables defined:
64151
- * - Enrollment status colors (open/closed)
64152
- * - Capacity indicator colors (available/low/full)
64153
- * - Price display colors (free indicator)
64154
- */
64155
- function generateCourseDetailsVars({ themeId }) {
64156
- return `
64157
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
64158
- /* Enrollment status */
64159
- --cd-enrollment-open-text: rgb(var(--tb-success));
64160
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
64161
-
64162
- /* Capacity indicator */
64163
- --cd-capacity-available-text: rgb(var(--tb-success));
64164
- --cd-capacity-low-text: rgb(var(--tb-warning));
64165
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
64166
-
64167
- /* Price styling */
64168
- --cd-price-free-text: rgb(var(--tb-success));
64169
- }
64170
- `;
64171
- }
64172
- //#endregion
64173
- //#region ../theme-core/src/blocks/vars/course-registration.ts
64174
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
64175
- /* Temporary bridge while persisted Course blocks render the Event-owned
64176
- whole-series registration runtime. Removed with the Course block. */
64177
- --er-step-active: var(--cr-step-active);
64178
- --er-step-inactive: var(--cr-step-inactive);
64179
- --er-step-completed: var(--cr-step-completed);
64180
- --er-step-text: var(--cr-step-text);
64181
- --er-step-text-active: var(--cr-step-text-active);
64182
- --er-step-connector: var(--cr-step-connector);
64183
- --er-step-title-size: var(--cr-step-title-size);
64184
- --er-success-bg: var(--cr-success-bg);
64185
- --er-success-text: var(--cr-success-text);
64186
- --er-error-bg: var(--cr-error-bg);
64187
- --er-error-text: var(--cr-error-text);
64188
- --er-waitlist-bg: var(--cr-waitlist-bg);
64189
- --er-waitlist-text: var(--cr-waitlist-text);
64190
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
64191
- --er-capacity-available-text: var(--cr-capacity-available-text);
64192
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
64193
- --er-capacity-low-text: var(--cr-capacity-low-text);
64194
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
64195
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
64196
- --er-border: var(--cr-border);
64197
- --er-border-hover: var(--cr-border-hover);
64198
- --er-border-selected: var(--cr-border-selected);
64199
- --er-border-error: var(--cr-border-error);
64200
- --er-focus-ring: var(--cr-focus-ring);
64201
- --er-required: var(--cr-required);
64202
- --er-payment-border: var(--cr-payment-border);
64203
- --er-payment-border-hover: var(--cr-payment-border-hover);
64204
- --er-payment-border-selected: var(--cr-payment-border-selected);
64205
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
64206
- --er-check-bg: var(--cr-check-bg);
64207
- --er-check-text: var(--cr-check-text);
64208
- --er-summary-bg: var(--cr-summary-bg);
64209
- --er-summary-border: var(--cr-summary-border);
64210
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64211
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
64212
- `;
64213
- /**
64214
- * Generate CSS variables for the course-registration block.
64215
- *
64216
- * Variables defined:
64217
- * - Step indicator colors (active, inactive, completed, text, connector)
64218
- * - Success/error/waitlist state backgrounds and text colors
64219
- * - Capacity badge colors (available, low, sold-out)
64220
- * - Border colors for various interaction states
64221
- * - Input focus and required marker styling
64222
- * - Payment option card styling
64223
- * - Checkmark indicator colors
64224
- * - Summary styling
64225
- */
64226
- function generateCourseRegistrationVars({ themeId }) {
64227
- return `
64228
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
64229
- /* Step indicator */
64230
- --cr-step-active: rgb(var(--tb-primary));
64231
- --cr-step-inactive: rgb(var(--tb-mutedText));
64232
- --cr-step-completed: rgb(var(--tb-success));
64233
- --cr-step-text: rgb(255 255 255);
64234
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
64235
- --cr-step-connector: rgba(var(--tb-border), 0.5);
64236
-
64237
- /* Step title */
64238
- --cr-step-title-size: 1.5rem;
64239
-
64240
- /* State backgrounds with alpha */
64241
- --cr-success-bg: rgba(var(--tb-success), 0.1);
64242
- --cr-success-text: rgb(var(--tb-success));
64243
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64244
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
64245
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
64246
- --cr-waitlist-text: rgb(var(--tb-warning));
64247
-
64248
- /* Capacity badges */
64249
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
64250
- --cr-capacity-available-text: rgb(var(--tb-success));
64251
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
64252
- --cr-capacity-low-text: rgb(var(--tb-warning));
64253
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
64254
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
64255
-
64256
- /* Borders */
64257
- --cr-border: rgb(var(--tb-border));
64258
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
64259
- --cr-border-selected: rgb(var(--tb-primary));
64260
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
64261
-
64262
- /* Input focus */
64263
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
64264
-
64265
- /* Required marker */
64266
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
64267
-
64268
- /* Payment option cards */
64269
- --cr-payment-border: rgb(var(--tb-border));
64270
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
64271
- --cr-payment-border-selected: rgb(var(--tb-primary));
64272
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
64273
-
64274
- /* Checkmark indicator */
64275
- --cr-check-bg: rgb(var(--tb-primary));
64276
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
64277
-
64278
- /* Summary */
64279
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
64280
- --cr-summary-border: rgb(var(--tb-border));
64281
-
64282
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
64283
-
64284
- /* Shared registration-surface mappings (issue 1174).
64285
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
64286
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
64287
- keep working unchanged. */
64288
- --rb-reg-radius: var(--rb-block-radius);
64289
- --rb-reg-border: var(--cr-border);
64290
- --rb-reg-border-hover: var(--cr-border-hover);
64291
- --rb-reg-border-selected: var(--cr-border-selected);
64292
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
64293
- --rb-reg-option-bg: rgb(var(--tb-background));
64294
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
64295
- --rb-reg-surface-bg: rgb(var(--tb-surface));
64296
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
64297
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
64298
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
64299
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
64300
- --rb-reg-check-bg: var(--cr-check-bg);
64301
- --rb-reg-check-text: var(--cr-check-text);
64302
- --rb-reg-step-active: var(--cr-step-active);
64303
- --rb-reg-step-completed: var(--cr-step-completed);
64304
- --rb-reg-step-inactive: var(--cr-step-inactive);
64305
- --rb-reg-step-text: var(--cr-step-text);
64306
- --rb-reg-step-text-active: var(--cr-step-text-active);
64307
- --rb-reg-step-connector: var(--cr-step-connector);
64308
- --rb-reg-summary-bg: var(--cr-summary-bg);
64309
- --rb-reg-summary-border: var(--cr-summary-border);
64310
- --rb-reg-focus-ring: var(--cr-focus-ring);
64311
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
64312
- }
64313
- `;
64314
- }
64315
- //#endregion
64316
63257
  //#region ../theme-core/src/blocks/registry.ts
64317
63258
  /**
64318
63259
  * Global registry of block var generators.
@@ -64327,8 +63268,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
64327
63268
  blockVarRegistry.set("form", generateFormBlockVars);
64328
63269
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
64329
63270
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
64330
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
64331
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
64332
63271
  /**
64333
63272
  * Generate all Tier 3 block-specific CSS variables.
64334
63273
  *
@@ -70268,7 +69207,7 @@ const containerResponsiveThemeCss = `/*
70268
69207
  * Shared: Registration Surface (issue 1174)
70269
69208
  *
70270
69209
  * Wizard-surface primitives shared by the event-registration,
70271
- * course-registration and appointment-booking blocks: surface container,
69210
+ * appointment-booking blocks: surface container,
70272
69211
  * selectable option cards, step indicator, wizard actions row, on-surface
70273
69212
  * text ramp, layout stacks, summary box and skeleton shell lines.
70274
69213
  *
@@ -70311,7 +69250,7 @@ const containerResponsiveThemeCss = `/*
70311
69250
  }
70312
69251
 
70313
69252
  /* Surface container */
70314
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69253
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70315
69254
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
70316
69255
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70317
69256
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -70341,7 +69280,7 @@ const containerResponsiveThemeCss = `/*
70341
69280
  *
70342
69281
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
70343
69282
  * pairing is pinned by registration-surface-action-reset.test.ts. */
70344
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
69283
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
70345
69284
  --rb-action-primary-base-background-color: initial;
70346
69285
  --rb-action-primary-base-background-image: initial;
70347
69286
  --rb-action-primary-base-color: initial;
@@ -70449,7 +69388,7 @@ const containerResponsiveThemeCss = `/*
70449
69388
  }
70450
69389
 
70451
69390
  /* Selectable option card */
70452
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
69391
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
70453
69392
  position: relative;
70454
69393
  display: flex;
70455
69394
  align-items: flex-start;
@@ -70466,34 +69405,34 @@ const containerResponsiveThemeCss = `/*
70466
69405
  box-shadow var(--rb-block-transition, 150ms) ease;
70467
69406
  }
70468
69407
 
70469
- :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"]) {
69408
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
70470
69409
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
70471
69410
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
70472
69411
  }
70473
69412
 
70474
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
69413
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
70475
69414
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
70476
69415
  outline-offset: 2px;
70477
69416
  }
70478
69417
 
70479
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
69418
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
70480
69419
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70481
69420
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
70482
69421
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
70483
69422
  }
70484
69423
 
70485
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
69424
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
70486
69425
  cursor: not-allowed;
70487
69426
  opacity: 0.7;
70488
69427
  }
70489
69428
 
70490
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
69429
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
70491
69430
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
70492
69431
  box-shadow: none;
70493
69432
  }
70494
69433
 
70495
69434
  /* Check indicator */
70496
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
69435
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
70497
69436
  flex-shrink: 0;
70498
69437
  width: 1.25rem;
70499
69438
  height: 1.25rem;
@@ -70504,18 +69443,18 @@ const containerResponsiveThemeCss = `/*
70504
69443
  justify-content: center;
70505
69444
  }
70506
69445
 
70507
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
69446
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
70508
69447
  width: 0.75rem;
70509
69448
  height: 0.75rem;
70510
69449
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70511
69450
  }
70512
69451
 
70513
69452
  /* Step indicator */
70514
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
69453
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
70515
69454
  margin-bottom: 1.5rem;
70516
69455
  }
70517
69456
 
70518
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
69457
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
70519
69458
  display: flex;
70520
69459
  align-items: center;
70521
69460
  justify-content: center;
@@ -70525,13 +69464,13 @@ const containerResponsiveThemeCss = `/*
70525
69464
  margin: 0;
70526
69465
  }
70527
69466
 
70528
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
69467
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
70529
69468
  display: flex;
70530
69469
  align-items: center;
70531
69470
  gap: 0.5rem;
70532
69471
  }
70533
69472
 
70534
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
69473
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
70535
69474
  width: 1.75rem;
70536
69475
  height: 1.75rem;
70537
69476
  border-radius: 50%;
@@ -70545,47 +69484,47 @@ const containerResponsiveThemeCss = `/*
70545
69484
  transition: background-color var(--rb-block-transition, 150ms) ease;
70546
69485
  }
70547
69486
 
70548
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
69487
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
70549
69488
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
70550
69489
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70551
69490
  }
70552
69491
 
70553
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
69492
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
70554
69493
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
70555
69494
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
70556
69495
  }
70557
69496
 
70558
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
69497
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
70559
69498
  width: 0.75rem;
70560
69499
  height: 0.75rem;
70561
69500
  }
70562
69501
 
70563
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
69502
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
70564
69503
  width: 2rem;
70565
69504
  height: 2px;
70566
69505
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
70567
69506
  }
70568
69507
 
70569
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69508
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70570
69509
  font-size: 0.75rem;
70571
69510
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70572
69511
  display: none;
70573
69512
  }
70574
69513
 
70575
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
69514
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
70576
69515
  font-weight: 500;
70577
69516
  }
70578
69517
 
70579
69518
  @container rb-site (min-width: 640px) {
70580
69519
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
70581
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
69520
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
70582
69521
  display: inline;
70583
69522
  }
70584
69523
  }
70585
69524
  }
70586
69525
 
70587
69526
  /* Wizard actions row */
70588
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
69527
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
70589
69528
  display: flex;
70590
69529
  justify-content: space-between;
70591
69530
  align-items: center;
@@ -70594,56 +69533,56 @@ const containerResponsiveThemeCss = `/*
70594
69533
  }
70595
69534
 
70596
69535
  /* When there's only one action (no back button), push it to the right */
70597
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
69536
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
70598
69537
  margin-inline-start: auto;
70599
69538
  }
70600
69539
 
70601
69540
  /* On-surface text ramp */
70602
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
69541
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
70603
69542
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
70604
69543
  }
70605
69544
 
70606
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
69545
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
70607
69546
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
70608
69547
  }
70609
69548
 
70610
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
69549
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
70611
69550
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
70612
69551
  }
70613
69552
 
70614
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
69553
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
70615
69554
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
70616
69555
  }
70617
69556
 
70618
69557
  /* Layout stacks */
70619
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
69558
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
70620
69559
  display: flex;
70621
69560
  flex-direction: column;
70622
69561
  gap: 1rem;
70623
69562
  }
70624
69563
 
70625
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
69564
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
70626
69565
  gap: 0.75rem;
70627
69566
  }
70628
69567
 
70629
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
69568
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
70630
69569
  display: flex;
70631
69570
  align-items: center;
70632
69571
  gap: 1rem;
70633
69572
  }
70634
69573
 
70635
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
69574
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
70636
69575
  justify-content: space-between;
70637
69576
  align-items: flex-start;
70638
69577
  }
70639
69578
 
70640
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
69579
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
70641
69580
  display: grid;
70642
69581
  gap: 0.75rem;
70643
69582
  }
70644
69583
 
70645
69584
  /* Summary box */
70646
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
69585
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
70647
69586
  padding: 1rem;
70648
69587
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
70649
69588
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -70651,7 +69590,7 @@ const containerResponsiveThemeCss = `/*
70651
69590
  }
70652
69591
 
70653
69592
  /* Skeleton shell lines */
70654
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
69593
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
70655
69594
  height: 0.75rem;
70656
69595
  border-radius: 9999px;
70657
69596
  background: linear-gradient(
@@ -70662,24 +69601,24 @@ const containerResponsiveThemeCss = `/*
70662
69601
  );
70663
69602
  }
70664
69603
 
70665
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
69604
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
70666
69605
  width: min(26rem, 82%);
70667
69606
  }
70668
69607
 
70669
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
69608
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
70670
69609
  width: min(19rem, 68%);
70671
69610
  }
70672
69611
 
70673
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
69612
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
70674
69613
  width: min(14rem, 52%);
70675
69614
  }
70676
69615
 
70677
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
69616
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
70678
69617
  width: min(10rem, 42%);
70679
69618
  }
70680
69619
 
70681
69620
  /* Skeleton block (rectangular placeholder, pulses) */
70682
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69621
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70683
69622
  height: 2.5rem;
70684
69623
  width: 100%;
70685
69624
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -70697,7 +69636,7 @@ const containerResponsiveThemeCss = `/*
70697
69636
  }
70698
69637
 
70699
69638
  @media (prefers-reduced-motion: reduce) {
70700
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
69639
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
70701
69640
  animation: none;
70702
69641
  }
70703
69642
  }
@@ -77079,1658 +76018,347 @@ const containerResponsiveThemeCss = `/*
77079
76018
  cursor: not-allowed;
77080
76019
  }
77081
76020
 
77082
- /*
77083
- * Course Details (runtime node)
77084
- * Minimal rules - most styling via rb-* utilities
76021
+ /* =============================================================================
76022
+ * Block: Newsletter Signup
76023
+ * =============================================================================
77085
76024
  */
77086
76025
 
77087
- :where(.theme-scope) .course-details {
77088
- width: 100%;
77089
- max-width: 56.25rem; /* 900px */
77090
- margin-inline: auto;
76026
+ /* Newsletter copy styling */
76027
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
76028
+ font-size: 1.5rem;
76029
+ font-weight: 600;
77091
76030
  }
77092
76031
 
77093
- /* Description prose wrapper */
77094
- :where(.theme-scope) .course-details .cd-description {
77095
- margin-top: 1rem;
76032
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
76033
+ font-size: 1rem;
76034
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76035
+ opacity: 0.85;
77096
76036
  }
77097
76037
 
77098
- /* "Showing X of Y" text */
77099
- :where(.theme-scope) .course-details .cd-sessions__more {
77100
- margin-top: 0.5rem;
77101
- opacity: 0.7;
77102
- font-size: 0.875rem;
76038
+ /* Newsletter form container */
76039
+ :where(.theme-scope) .newsletter-form {
76040
+ width: 100%;
76041
+ max-width: 32rem;
76042
+ margin-left: auto;
76043
+ margin-right: auto;
77103
76044
  }
77104
76045
 
77105
- /* Enrollment status colors (using Tier 3 vars) */
77106
- :where(.theme-scope) .course-details .cd-enrollment--open {
77107
- color: var(--cd-enrollment-open-text);
76046
+ /* Newsletter form fields container */
76047
+ :where(.theme-scope) .newsletter-form-fields {
76048
+ display: flex;
76049
+ flex-direction: column;
76050
+ gap: var(--rb-gap-sm, 0.75rem);
77108
76051
  }
77109
76052
 
77110
- :where(.theme-scope) .course-details .cd-enrollment--closed {
77111
- color: var(--cd-enrollment-closed-text);
76053
+ /* Individual field styling */
76054
+ :where(.theme-scope) .newsletter-field {
76055
+ display: flex;
76056
+ flex-direction: column;
76057
+ gap: 0.25rem;
77112
76058
  }
77113
76059
 
77114
- /* =============================================================================
77115
- * Block: Event whole-series registration
77116
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
77117
- * =============================================================================
77118
- */
77119
-
77120
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
77121
- :where(.theme-scope)
77122
- :where(
77123
- [data-block='event-registration'],
77124
- [data-block='course-registration']
77125
- ) {
77126
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
77127
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
76060
+ /* Required indicator */
76061
+ :where(.theme-scope) .newsletter-required {
76062
+ color: rgb(var(--tb-primary));
76063
+ margin-left: 0.125rem;
77128
76064
  }
77129
76065
 
77130
- /* Container: base styling comes from the shared .rb-reg-surface
77131
- (registration-surface.css); these overrides preserve whole-series
77132
- whole-series registration's established look (fixed padding, centered). */
77133
- :where(.theme-scope)
77134
- :where([data-block='event-registration'], [data-block='course-registration'])
77135
- .er-whole-series-container {
77136
- padding: 1.5rem;
77137
- margin-inline: auto;
76066
+ /* Submit button container */
76067
+ :where(.theme-scope) .newsletter-submit {
76068
+ margin-top: 0.5rem;
77138
76069
  }
77139
76070
 
77140
- /* Empty/unavailable */
77141
- :where(.theme-scope)
77142
- :where([data-block='event-registration'], [data-block='course-registration'])
77143
- .er-whole-series-empty {
77144
- border-radius: var(--rb-block-radius);
77145
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
77146
- padding: 2.5rem;
77147
- text-align: center;
76071
+ /* ALTCHA widget container */
76072
+ :where(.theme-scope) .newsletter-altcha {
76073
+ margin-top: 0.75rem;
76074
+ display: flex;
76075
+ justify-content: center;
77148
76076
  }
77149
76077
 
77150
- :where(.theme-scope)
77151
- :where([data-block='event-registration'], [data-block='course-registration'])
77152
- .er-whole-series-empty__text {
77153
- opacity: 0.7;
76078
+ /* Privacy note */
76079
+ :where(.theme-scope) .newsletter-privacy-note {
76080
+ margin-top: 0.75rem;
76081
+ font-size: 1rem;
76082
+ line-height: 1.6;
76083
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
76084
+ text-align: center;
77154
76085
  }
77155
76086
 
77156
76087
  /* =============================================================================
77157
- * Layout (two-column)
76088
+ * Inline Variant - Horizontal layout
77158
76089
  * =============================================================================
77159
76090
  */
77160
- :where(.theme-scope)
77161
- :where([data-block='event-registration'], [data-block='course-registration'])
77162
- .er-whole-series-layout {
77163
- display: grid;
77164
- gap: 1.5rem;
77165
- grid-template-columns: 1fr;
77166
- }
77167
76091
 
77168
- @container rb-site (min-width: 768px) {
77169
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77170
- :where(.theme-scope)
77171
- :where(
77172
- [data-block='event-registration'],
77173
- [data-block='course-registration']
77174
- )
77175
- .er-whole-series-layout--with-sidebar {
77176
- grid-template-columns: 1fr 280px;
77177
- }
77178
- }
76092
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76093
+ flex-direction: row;
76094
+ align-items: flex-end;
76095
+ flex-wrap: wrap;
76096
+ gap: var(--rb-gap-sm, 0.75rem);
77179
76097
  }
77180
76098
 
77181
- :where(.theme-scope)
77182
- :where([data-block='event-registration'], [data-block='course-registration'])
77183
- .er-whole-series-layout__main {
77184
- min-width: 0;
76099
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76100
+ flex: 1 1 auto;
76101
+ min-width: 10rem;
77185
76102
  }
77186
76103
 
77187
- :where(.theme-scope)
77188
- :where([data-block='event-registration'], [data-block='course-registration'])
77189
- .er-whole-series-layout__sidebar {
77190
- display: none;
76104
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
76105
+ margin-top: 0;
76106
+ flex-shrink: 0;
77191
76107
  }
77192
76108
 
77193
- @container rb-site (min-width: 768px) {
76109
+ /* Mobile fallback for inline variant */
76110
+ @container rb-site (max-width: 640px) {
77194
76111
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77195
- :where(.theme-scope)
77196
- :where(
77197
- [data-block='event-registration'],
77198
- [data-block='course-registration']
77199
- )
77200
- .er-whole-series-layout__sidebar {
77201
- display: block;
76112
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
76113
+ flex-direction: column;
76114
+ }
76115
+
76116
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
76117
+ min-width: 100%;
77202
76118
  }
77203
76119
  }
77204
76120
  }
77205
76121
 
77206
76122
  /* =============================================================================
77207
- * Step Indicator
76123
+ * Editorial Split Variant
77208
76124
  * =============================================================================
77209
76125
  */
77210
- :where(.theme-scope)
77211
- :where([data-block='event-registration'], [data-block='course-registration'])
77212
- .er-whole-series-steps {
77213
- display: flex;
77214
- align-items: center;
77215
- gap: 0.5rem;
77216
- margin-bottom: 1.5rem;
77217
- }
77218
76126
 
77219
- :where(.theme-scope)
77220
- :where([data-block='event-registration'], [data-block='course-registration'])
77221
- .er-whole-series-step {
77222
- display: flex;
76127
+ :where(.theme-scope) .newsletter-editorial-split {
76128
+ display: grid;
76129
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
76130
+ gap: clamp(2.5rem, 7vw, 7rem);
77223
76131
  align-items: center;
77224
- gap: 0.5rem;
76132
+ text-align: left;
77225
76133
  }
77226
76134
 
77227
- :where(.theme-scope)
77228
- :where([data-block='event-registration'], [data-block='course-registration'])
77229
- .er-whole-series-step-circle {
77230
- width: 1.75rem;
77231
- height: 1.75rem;
77232
- border-radius: 9999px;
76135
+ :where(.theme-scope) .newsletter-editorial-split-copy {
77233
76136
  display: flex;
77234
- align-items: center;
77235
- justify-content: center;
77236
- font-size: 0.75rem;
77237
- font-weight: 600;
77238
- background: var(--er-step-inactive);
77239
- color: var(--er-step-text);
77240
- transition: background-color 0.2s ease;
76137
+ flex-direction: column;
76138
+ gap: var(--rb-gap-sm, 0.75rem);
77241
76139
  }
77242
76140
 
77243
- :where(.theme-scope)
77244
- :where([data-block='event-registration'], [data-block='course-registration'])
77245
- .er-whole-series-step-circle--active {
77246
- background: var(--er-step-active);
77247
- color: var(--er-step-text-active);
76141
+ :where(.theme-scope) .newsletter-editorial-split-form {
76142
+ min-width: 0;
77248
76143
  }
77249
76144
 
77250
- :where(.theme-scope)
77251
- :where([data-block='event-registration'], [data-block='course-registration'])
77252
- .er-whole-series-step-circle--completed {
77253
- background: var(--er-step-completed);
77254
- color: var(--er-step-text);
76145
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
76146
+ max-width: none;
76147
+ margin-inline: 0;
77255
76148
  }
77256
76149
 
77257
- :where(.theme-scope)
77258
- :where([data-block='event-registration'], [data-block='course-registration'])
77259
- .er-whole-series-step-label {
77260
- font-size: 0.875rem;
76150
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
76151
+ font-size: clamp(2rem, 4vw, 3.5rem);
77261
76152
  font-weight: 500;
77262
- color: rgb(var(--tb-mutedText));
77263
- display: none;
77264
76153
  }
77265
76154
 
77266
- @container rb-site (min-width: 640px) {
76155
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
76156
+ text-align: left;
76157
+ }
76158
+
76159
+ @container rb-site (max-width: 767px) {
77267
76160
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
77268
- :where(.theme-scope)
77269
- :where(
77270
- [data-block='event-registration'],
77271
- [data-block='course-registration']
77272
- )
77273
- .er-whole-series-step-label {
77274
- display: block;
76161
+ :where(.theme-scope) .newsletter-editorial-split {
76162
+ grid-template-columns: minmax(0, 1fr);
76163
+ gap: 2rem;
77275
76164
  }
77276
76165
  }
77277
76166
  }
77278
76167
 
77279
- :where(.theme-scope)
77280
- :where([data-block='event-registration'], [data-block='course-registration'])
77281
- .er-whole-series-step-label--active {
77282
- color: var(--er-on-surface);
77283
- font-weight: 600;
77284
- }
77285
-
77286
- :where(.theme-scope)
77287
- :where([data-block='event-registration'], [data-block='course-registration'])
77288
- .er-whole-series-step-connector {
77289
- flex: 1;
77290
- height: 2px;
77291
- background: var(--er-step-connector);
77292
- min-width: 1rem;
77293
- }
76168
+ /* =============================================================================
76169
+ * Success State
76170
+ * =============================================================================
76171
+ */
77294
76172
 
77295
- :where(.theme-scope)
77296
- :where([data-block='event-registration'], [data-block='course-registration'])
77297
- .er-whole-series-step-connector--completed {
77298
- background: var(--er-step-completed);
76173
+ :where(.theme-scope) .newsletter-success {
76174
+ text-align: center;
77299
76175
  }
77300
76176
 
77301
- :where(.theme-scope)
77302
- :where([data-block='event-registration'], [data-block='course-registration'])
77303
- .er-whole-series-step-check {
77304
- width: 0.875rem;
77305
- height: 0.875rem;
76177
+ :where(.theme-scope) .newsletter-success .fb-success {
76178
+ padding: 1rem 1.5rem;
76179
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
76180
+ border-radius: var(--radius-md, 0.5rem);
76181
+ color: rgb(var(--tb-text));
77306
76182
  }
77307
76183
 
77308
76184
  /* =============================================================================
77309
- * Lists
76185
+ * Block: Contact + Newsletter
77310
76186
  * =============================================================================
77311
76187
  */
77312
- :where(.theme-scope)
77313
- :where([data-block='event-registration'], [data-block='course-registration'])
77314
- .er-whole-series-run-list {
76188
+
76189
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
77315
76190
  display: grid;
77316
- gap: 1rem;
76191
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
76192
+ gap: clamp(2.5rem, 6vw, 4rem);
76193
+ align-items: start;
77317
76194
  }
77318
76195
 
77319
- /* =============================================================================
77320
- * Run cards
77321
- * =============================================================================
77322
- */
77323
- :where(.theme-scope)
77324
- :where([data-block='event-registration'], [data-block='course-registration'])
77325
- .er-whole-series-run-card {
77326
- border-radius: var(--rb-block-radius);
77327
- border: 1px solid var(--er-border);
77328
- padding: 1rem;
77329
- background: rgb(var(--tb-background));
77330
- cursor: pointer;
77331
- transition:
77332
- border-color var(--rb-block-transition) ease,
77333
- transform var(--rb-block-transition) ease;
76196
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
76197
+ min-width: 0;
77334
76198
  }
77335
76199
 
77336
- :where(.theme-scope)
77337
- :where([data-block='event-registration'], [data-block='course-registration'])
77338
- .er-whole-series-run-card:hover {
77339
- border-color: var(--er-border-hover);
77340
- transform: translateY(-1px);
76200
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
76201
+ margin-bottom: 1.5rem;
77341
76202
  }
77342
76203
 
77343
- :where(.theme-scope)
77344
- :where([data-block='event-registration'], [data-block='course-registration'])
77345
- .er-whole-series-run-card:focus-visible {
77346
- outline: 2px solid var(--er-focus-ring);
77347
- outline-offset: 2px;
76204
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
76205
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
76206
+ margin: 0 0 0.75rem;
77348
76207
  }
77349
76208
 
77350
- :where(.theme-scope)
77351
- :where([data-block='event-registration'], [data-block='course-registration'])
77352
- .er-whole-series-run-card--selected {
77353
- border-color: var(--er-border-selected);
77354
- box-shadow: 0 0 0 3px var(--er-focus-ring);
76209
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
76210
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
76211
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
77355
76212
  }
77356
76213
 
77357
- :where(.theme-scope)
77358
- :where([data-block='event-registration'], [data-block='course-registration'])
77359
- .er-whole-series-run-card__title {
77360
- margin: 0 0 0.25rem 0;
77361
- font-weight: 700;
77362
- font-size: 1.125rem;
76214
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
76215
+ display: flex;
76216
+ flex-direction: column;
76217
+ align-items: flex-start;
77363
76218
  }
77364
76219
 
77365
- :where(.theme-scope)
77366
- :where([data-block='event-registration'], [data-block='course-registration'])
77367
- .er-whole-series-run-card__status {
77368
- margin: 0.25rem 0 0 0;
77369
- opacity: 0.8;
76220
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
76221
+ max-width: none;
76222
+ margin-left: 0;
76223
+ margin-right: 0;
77370
76224
  }
77371
76225
 
77372
- :where(.theme-scope)
77373
- :where([data-block='event-registration'], [data-block='course-registration'])
77374
- .er-whole-series-run-card__sessions,
77375
- :where(.theme-scope)
77376
- :where([data-block='event-registration'], [data-block='course-registration'])
77377
- .er-whole-series-run-card__price,
77378
- :where(.theme-scope)
77379
- :where([data-block='event-registration'], [data-block='course-registration'])
77380
- .er-whole-series-run-card__capacity,
77381
- :where(.theme-scope)
77382
- :where([data-block='event-registration'], [data-block='course-registration'])
77383
- .er-whole-series-run-card__venue {
77384
- margin: 0.25rem 0 0 0;
77385
- opacity: 0.85;
76226
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
76227
+ text-align: left;
77386
76228
  }
77387
76229
 
77388
- /* =============================================================================
77389
- * Capacity Badges
77390
- * =============================================================================
77391
- */
77392
- :where(.theme-scope)
77393
- :where([data-block='event-registration'], [data-block='course-registration'])
77394
- .er-whole-series-capacity-badge {
77395
- display: inline-block;
77396
- padding: 0.125rem 0.5rem;
77397
- border-radius: 9999px;
77398
- font-size: 0.75rem;
77399
- font-weight: 500;
76230
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
76231
+ display: flex;
76232
+ flex-direction: column;
76233
+ gap: 1rem;
77400
76234
  }
77401
76235
 
77402
- :where(.theme-scope)
77403
- :where([data-block='event-registration'], [data-block='course-registration'])
77404
- .er-whole-series-capacity-badge--available {
77405
- background: var(--er-capacity-available-bg);
77406
- color: var(--er-capacity-available-text);
76236
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
76237
+ display: grid;
76238
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
76239
+ gap: 1rem;
77407
76240
  }
77408
76241
 
77409
- :where(.theme-scope)
77410
- :where([data-block='event-registration'], [data-block='course-registration'])
77411
- .er-whole-series-capacity-badge--low {
77412
- background: var(--er-capacity-low-bg);
77413
- color: var(--er-capacity-low-text);
76242
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
76243
+ display: flex;
76244
+ flex-direction: column;
76245
+ gap: 0.25rem;
77414
76246
  }
77415
76247
 
77416
- :where(.theme-scope)
77417
- :where([data-block='event-registration'], [data-block='course-registration'])
77418
- .er-whole-series-capacity-badge--soldout {
77419
- background: var(--er-capacity-soldout-bg);
77420
- color: var(--er-capacity-soldout-text);
76248
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
76249
+ display: flex;
76250
+ flex-direction: column;
76251
+ gap: 0.5rem;
76252
+ border: none;
76253
+ padding: 0;
76254
+ margin: 0;
77421
76255
  }
77422
76256
 
77423
- /* =============================================================================
77424
- * Summary + Details
77425
- * =============================================================================
77426
- */
77427
- :where(.theme-scope)
77428
- :where([data-block='event-registration'], [data-block='course-registration'])
77429
- .er-whole-series-details {
77430
- display: grid;
77431
- gap: 1rem;
76257
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
76258
+ display: flex;
76259
+ align-items: center;
76260
+ gap: 0.5rem;
77432
76261
  }
77433
76262
 
77434
- :where(.theme-scope)
77435
- :where([data-block='event-registration'], [data-block='course-registration'])
77436
- .er-whole-series-summary {
76263
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
76264
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
76265
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
77437
76266
  border-radius: var(--rb-block-radius);
77438
- border: 1px solid var(--er-summary-border);
77439
76267
  padding: 1rem;
77440
- background: var(--er-summary-bg);
77441
- }
77442
-
77443
- :where(.theme-scope)
77444
- :where([data-block='event-registration'], [data-block='course-registration'])
77445
- .er-whole-series-summary__title {
77446
- margin: 0;
77447
- font-size: 1.25rem;
77448
- font-weight: 800;
76268
+ font-size: 0.875rem;
77449
76269
  }
77450
76270
 
77451
- :where(.theme-scope)
77452
- :where([data-block='event-registration'], [data-block='course-registration'])
77453
- .er-whole-series-summary__sessions-title {
77454
- margin: 0.75rem 0 0.5rem 0;
77455
- font-weight: 700;
76271
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
76272
+ background-color: var(--fb-success-bg);
76273
+ color: var(--fb-success-text);
76274
+ border: 1px solid var(--fb-success-border);
77456
76275
  }
77457
76276
 
77458
- :where(.theme-scope)
77459
- :where([data-block='event-registration'], [data-block='course-registration'])
77460
- .er-whole-series-summary__sessions-list {
77461
- list-style: none;
77462
- padding: 0;
77463
- margin: 0;
77464
- display: grid;
77465
- gap: 0.35rem;
76277
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
76278
+ background-color: var(--fb-error-bg);
76279
+ color: var(--fb-error-text);
76280
+ border: 1px solid var(--fb-error-border);
77466
76281
  }
77467
76282
 
77468
- :where(.theme-scope)
77469
- :where([data-block='event-registration'], [data-block='course-registration'])
77470
- .er-whole-series-summary__session {
77471
- opacity: 0.9;
76283
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
76284
+ background-color: var(--fb-empty-bg);
76285
+ color: var(--fb-empty-text);
76286
+ border: 1px dashed var(--fb-empty-border);
76287
+ text-align: center;
77472
76288
  }
77473
76289
 
77474
- :where(.theme-scope)
77475
- :where([data-block='event-registration'], [data-block='course-registration'])
77476
- .er-whole-series-summary__venue,
77477
- :where(.theme-scope)
77478
- :where([data-block='event-registration'], [data-block='course-registration'])
77479
- .er-whole-series-summary__price,
77480
- :where(.theme-scope)
77481
- :where([data-block='event-registration'], [data-block='course-registration'])
77482
- .er-whole-series-summary__membership {
77483
- margin: 0.5rem 0 0 0;
77484
- opacity: 0.9;
76290
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
76291
+ margin-top: 0.5rem;
77485
76292
  }
77486
76293
 
77487
76294
  /* =============================================================================
77488
- * Form
76295
+ * Block: Team Members
77489
76296
  * =============================================================================
76297
+ *
76298
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
76299
+ * changing global fragment defaults. We expose these controls on the block and
76300
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
77490
76301
  */
77491
- :where(.theme-scope)
77492
- :where([data-block='event-registration'], [data-block='course-registration'])
77493
- .er-whole-series-form {
77494
- display: grid;
77495
- gap: 1rem;
77496
- }
77497
76302
 
77498
- :where(.theme-scope)
77499
- :where([data-block='event-registration'], [data-block='course-registration'])
77500
- .er-whole-series-form__field {
77501
- display: grid;
77502
- gap: 0.35rem;
76303
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
76304
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
76305
+ text-align: left;
77503
76306
  }
77504
76307
 
77505
- :where(.theme-scope)
77506
- :where([data-block='event-registration'], [data-block='course-registration'])
77507
- .er-whole-series-form__label {
77508
- font-size: 0.875rem;
77509
- font-weight: 600;
76308
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
76309
+ align-items: flex-start;
76310
+ text-align: left;
77510
76311
  }
77511
76312
 
77512
- :where(.theme-scope)
77513
- :where([data-block='event-registration'], [data-block='course-registration'])
77514
- .er-whole-series-form__label--required::after {
77515
- content: ' *';
77516
- color: var(--er-required);
76313
+ @container rb-site (min-width: 1024px) {
76314
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
76315
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
76316
+ width: 75%;
76317
+ margin-left: 0;
76318
+ margin-right: auto;
76319
+ }
77517
76320
  }
77518
-
77519
- :where(.theme-scope)
77520
- :where([data-block='event-registration'], [data-block='course-registration'])
77521
- .er-whole-series-form__input {
77522
- border-radius: calc(var(--rb-block-radius) * 0.6);
77523
- border: 1px solid var(--er-border);
77524
- padding: 0.6rem 0.75rem;
77525
- background: rgb(var(--tb-background));
77526
- color: rgb(var(--tb-foreground));
77527
76321
  }
77528
76322
 
77529
- :where(.theme-scope)
77530
- :where([data-block='event-registration'], [data-block='course-registration'])
77531
- .er-whole-series-form__textarea {
77532
- border-radius: calc(var(--rb-block-radius) * 0.6);
77533
- border: 1px solid var(--er-border);
77534
- padding: 0.6rem 0.75rem;
77535
- background: rgb(var(--tb-background));
77536
- color: rgb(var(--tb-foreground));
77537
- resize: vertical;
76323
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
76324
+ display: block;
76325
+ width: 100%;
76326
+ height: auto;
77538
76327
  }
77539
76328
 
77540
- :where(.theme-scope)
77541
- :where([data-block='event-registration'], [data-block='course-registration'])
77542
- .er-whole-series-form__input:focus,
77543
- :where(.theme-scope)
77544
- :where([data-block='event-registration'], [data-block='course-registration'])
77545
- .er-whole-series-form__textarea:focus {
77546
- outline: 2px solid var(--er-focus-ring);
77547
- outline-offset: 2px;
76329
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
76330
+ font-weight: 600;
77548
76331
  }
77549
76332
 
77550
- :where(.theme-scope)
77551
- :where([data-block='event-registration'], [data-block='course-registration'])
77552
- .er-whole-series-form__input--error,
77553
- :where(.theme-scope)
77554
- :where([data-block='event-registration'], [data-block='course-registration'])
77555
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
77556
- border-color: var(--er-border-error);
76333
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
76334
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
76335
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
76336
+ --rb-team-image-basis: 33.333%;
77557
76337
  }
77558
76338
 
77559
- :where(.theme-scope)
77560
- :where([data-block='event-registration'], [data-block='course-registration'])
77561
- .er-whole-series-form__error {
77562
- font-size: 0.875rem;
77563
- color: var(--er-error-text);
76339
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
76340
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
76341
+ --rb-team-image-basis: 25%;
77564
76342
  }
77565
76343
 
77566
- :where(.theme-scope)
77567
- :where([data-block='event-registration'], [data-block='course-registration'])
77568
- .er-whole-series-form__hint {
77569
- font-size: 0.875rem;
77570
- opacity: 0.7;
76344
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
76345
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
76346
+ --rb-team-image-basis: 33.333%;
77571
76347
  }
77572
76348
 
77573
- /* Logged-in user hint with logout link */
77574
- :where(.theme-scope)
77575
- :where([data-block='event-registration'], [data-block='course-registration'])
77576
- .er-whole-series-logged-in-hint {
77577
- font-size: 0.875rem;
77578
- opacity: 0.7;
77579
- margin: 0.25rem 0 0 0;
76349
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
76350
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
76351
+ --rb-team-image-basis: 40%;
77580
76352
  }
77581
76353
 
77582
- :where(.theme-scope)
77583
- :where([data-block='event-registration'], [data-block='course-registration'])
77584
- .er-whole-series-link {
77585
- background: none;
77586
- border: none;
77587
- padding: 0;
77588
- font-size: inherit;
77589
- color: rgb(var(--tb-primary));
77590
- cursor: pointer;
77591
- text-decoration: underline;
77592
- text-underline-offset: 2px;
76354
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
76355
+ --rb-team-thumb-max: 17.5rem; /* ~280px */
76356
+ --rb-team-image-basis: 50%;
77593
76357
  }
77594
76358
 
77595
- :where(.theme-scope)
77596
- :where([data-block='event-registration'], [data-block='course-registration'])
77597
- .er-whole-series-link:hover {
77598
- text-decoration: none;
77599
- }
77600
-
77601
- /* =============================================================================
77602
- * Actions
77603
- * =============================================================================
77604
- */
77605
- :where(.theme-scope)
77606
- :where([data-block='event-registration'], [data-block='course-registration'])
77607
- .er-whole-series-actions {
77608
- display: flex;
77609
- align-items: center;
77610
- justify-content: space-between;
77611
- gap: 0.75rem;
77612
- margin-top: 0.25rem;
77613
- }
77614
-
77615
- :where(.theme-scope)
77616
- :where([data-block='event-registration'], [data-block='course-registration'])
77617
- .er-whole-series-back-btn {
77618
- border: 0;
77619
- background: transparent;
77620
- color: var(--er-on-surface);
77621
- opacity: 0.8;
77622
- padding: 0.25rem 0.25rem;
77623
- cursor: pointer;
77624
- }
77625
-
77626
- :where(.theme-scope)
77627
- :where([data-block='event-registration'], [data-block='course-registration'])
77628
- .er-whole-series-back-btn:hover {
77629
- opacity: 1;
77630
- text-decoration: underline;
77631
- }
77632
-
77633
- /* =============================================================================
77634
- * Payment Options
77635
- * =============================================================================
77636
- */
77637
- :where(.theme-scope)
77638
- :where([data-block='event-registration'], [data-block='course-registration'])
77639
- .er-whole-series-payment__options {
77640
- display: grid;
77641
- gap: 0.5rem;
77642
- }
77643
-
77644
- :where(.theme-scope)
77645
- :where([data-block='event-registration'], [data-block='course-registration'])
77646
- .er-whole-series-payment__option {
77647
- display: flex;
77648
- align-items: center;
77649
- gap: 0.5rem;
77650
- }
77651
-
77652
- /* =============================================================================
77653
- * Payment Tiles (Card Grid)
77654
- * =============================================================================
77655
- */
77656
- :where(.theme-scope)
77657
- :where([data-block='event-registration'], [data-block='course-registration'])
77658
- .er-whole-series-payment-tiles {
77659
- display: grid;
77660
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
77661
- gap: 0.75rem;
77662
- }
77663
-
77664
- :where(.theme-scope)
77665
- :where([data-block='event-registration'], [data-block='course-registration'])
77666
- .er-whole-series-payment-tile {
77667
- border-radius: var(--rb-block-radius);
77668
- border: 1px solid var(--er-payment-border);
77669
- padding: 1rem;
77670
- background: rgb(var(--tb-background));
77671
- cursor: pointer;
77672
- transition:
77673
- border-color 0.15s ease,
77674
- box-shadow 0.15s ease,
77675
- background-color 0.15s ease;
77676
- position: relative;
77677
- }
77678
-
77679
- :where(.theme-scope)
77680
- :where([data-block='event-registration'], [data-block='course-registration'])
77681
- .er-whole-series-payment-tile:hover {
77682
- border-color: var(--er-payment-border-hover);
77683
- }
77684
-
77685
- :where(.theme-scope)
77686
- :where([data-block='event-registration'], [data-block='course-registration'])
77687
- .er-whole-series-payment-tile:focus-visible {
77688
- outline: 2px solid var(--er-focus-ring);
77689
- outline-offset: 2px;
77690
- }
77691
-
77692
- :where(.theme-scope)
77693
- :where([data-block='event-registration'], [data-block='course-registration'])
77694
- .er-whole-series-payment-tile--selected {
77695
- border-color: var(--er-payment-border-selected);
77696
- background: var(--er-payment-bg-selected);
77697
- box-shadow: 0 0 0 3px var(--er-focus-ring);
77698
- }
77699
-
77700
- :where(.theme-scope)
77701
- :where([data-block='event-registration'], [data-block='course-registration'])
77702
- .er-whole-series-payment-tile--upsell {
77703
- border-style: dashed;
77704
- }
77705
-
77706
- :where(.theme-scope)
77707
- :where([data-block='event-registration'], [data-block='course-registration'])
77708
- .er-whole-series-payment-tile__header {
77709
- display: flex;
77710
- align-items: flex-start;
77711
- justify-content: space-between;
77712
- gap: 0.5rem;
77713
- }
77714
-
77715
- :where(.theme-scope)
77716
- :where([data-block='event-registration'], [data-block='course-registration'])
77717
- .er-whole-series-payment-tile__name {
77718
- margin: 0;
77719
- font-weight: 600;
77720
- font-size: 1rem;
77721
- }
77722
-
77723
- :where(.theme-scope)
77724
- :where([data-block='event-registration'], [data-block='course-registration'])
77725
- .er-whole-series-payment-tile__description {
77726
- margin: 0.25rem 0 0 0;
77727
- font-size: 0.875rem;
77728
- opacity: 0.7;
77729
- }
77730
-
77731
- :where(.theme-scope)
77732
- :where([data-block='event-registration'], [data-block='course-registration'])
77733
- .er-whole-series-payment-tile__price {
77734
- font-weight: 600;
77735
- font-size: 0.875rem;
77736
- white-space: nowrap;
77737
- }
77738
-
77739
- :where(.theme-scope)
77740
- :where([data-block='event-registration'], [data-block='course-registration'])
77741
- .er-whole-series-payment-tile__badge {
77742
- display: inline-block;
77743
- padding: 0.125rem 0.5rem;
77744
- border-radius: 9999px;
77745
- font-size: 0.75rem;
77746
- font-weight: 500;
77747
- margin-top: 0.5rem;
77748
- }
77749
-
77750
- /* Checkmark indicator on selected tile */
77751
- :where(.theme-scope)
77752
- :where([data-block='event-registration'], [data-block='course-registration'])
77753
- .er-whole-series-payment-tile__check {
77754
- position: absolute;
77755
- top: 0.5rem;
77756
- right: 0.5rem;
77757
- width: 1.25rem;
77758
- height: 1.25rem;
77759
- border-radius: 9999px;
77760
- background: var(--er-check-bg);
77761
- color: var(--er-check-text);
77762
- display: flex;
77763
- align-items: center;
77764
- justify-content: center;
77765
- opacity: 0;
77766
- transition: opacity 0.15s ease;
77767
- }
77768
-
77769
- :where(.theme-scope)
77770
- :where([data-block='event-registration'], [data-block='course-registration'])
77771
- .er-whole-series-payment-tile--selected
77772
- .er-whole-series-payment-tile__check {
77773
- opacity: 1;
77774
- }
77775
-
77776
- /* =============================================================================
77777
- * Booking Mode Step
77778
- * =============================================================================
77779
- */
77780
- :where(.theme-scope)
77781
- :where([data-block='event-registration'], [data-block='course-registration'])
77782
- .er-whole-series-booking-mode {
77783
- display: grid;
77784
- gap: 1rem;
77785
- }
77786
-
77787
- :where(.theme-scope)
77788
- :where([data-block='event-registration'], [data-block='course-registration'])
77789
- .er-whole-series-booking-mode__title {
77790
- margin: 0;
77791
- font-size: var(--er-step-title-size);
77792
- font-weight: 700;
77793
- }
77794
-
77795
- :where(.theme-scope)
77796
- :where([data-block='event-registration'], [data-block='course-registration'])
77797
- .er-whole-series-booking-mode__subtitle {
77798
- margin: 0.25rem 0 0 0;
77799
- opacity: 0.7;
77800
- }
77801
-
77802
- :where(.theme-scope)
77803
- :where([data-block='event-registration'], [data-block='course-registration'])
77804
- .er-whole-series-booking-mode__link {
77805
- margin-top: 0.5rem;
77806
- font-size: 0.875rem;
77807
- }
77808
-
77809
- :where(.theme-scope)
77810
- :where([data-block='event-registration'], [data-block='course-registration'])
77811
- .er-whole-series-booking-mode__link
77812
- a {
77813
- color: rgb(var(--tb-primary));
77814
- text-decoration: underline;
77815
- cursor: pointer;
77816
- }
77817
-
77818
- :where(.theme-scope)
77819
- :where([data-block='event-registration'], [data-block='course-registration'])
77820
- .er-whole-series-booking-mode__link
77821
- a:hover {
77822
- text-decoration: none;
77823
- }
77824
-
77825
- /* =============================================================================
77826
- * Membership Hero
77827
- * =============================================================================
77828
- */
77829
- :where(.theme-scope)
77830
- :where([data-block='event-registration'], [data-block='course-registration'])
77831
- .er-whole-series-membership-hero {
77832
- border-radius: var(--rb-block-radius);
77833
- background: var(--er-success-bg);
77834
- border: 1px solid rgba(var(--tb-success), 0.2);
77835
- padding: 1.5rem;
77836
- text-align: center;
77837
- }
77838
-
77839
- :where(.theme-scope)
77840
- :where([data-block='event-registration'], [data-block='course-registration'])
77841
- .er-whole-series-membership-hero__icon {
77842
- font-size: 2rem;
77843
- margin-bottom: 0.75rem;
77844
- }
77845
-
77846
- :where(.theme-scope)
77847
- :where([data-block='event-registration'], [data-block='course-registration'])
77848
- .er-whole-series-membership-hero__title {
77849
- margin: 0;
77850
- font-size: 1.25rem;
77851
- font-weight: 700;
77852
- color: var(--er-success-text);
77853
- }
77854
-
77855
- :where(.theme-scope)
77856
- :where([data-block='event-registration'], [data-block='course-registration'])
77857
- .er-whole-series-membership-hero__subtitle {
77858
- margin: 0.25rem 0 0 0;
77859
- font-size: 0.875rem;
77860
- opacity: 0.8;
77861
- }
77862
-
77863
- /* =============================================================================
77864
- * Portal Auth Sidebar
77865
- * =============================================================================
77866
- */
77867
- :where(.theme-scope)
77868
- :where([data-block='event-registration'], [data-block='course-registration'])
77869
- .er-whole-series-portal-sidebar {
77870
- border-radius: var(--rb-block-radius);
77871
- border: 1px solid var(--er-border);
77872
- padding: 1.25rem;
77873
- background: rgb(var(--tb-surface));
77874
- color: var(--er-on-surface);
77875
- }
77876
-
77877
- :where(.theme-scope)
77878
- :where([data-block='event-registration'], [data-block='course-registration'])
77879
- .er-whole-series-portal-sidebar__icon {
77880
- font-size: 1.5rem;
77881
- margin-bottom: 0.5rem;
77882
- }
77883
-
77884
- :where(.theme-scope)
77885
- :where([data-block='event-registration'], [data-block='course-registration'])
77886
- .er-whole-series-portal-sidebar__title {
77887
- margin: 0;
77888
- font-size: 1rem;
77889
- font-weight: 600;
77890
- }
77891
-
77892
- :where(.theme-scope)
77893
- :where([data-block='event-registration'], [data-block='course-registration'])
77894
- .er-whole-series-portal-sidebar__text {
77895
- margin: 0.5rem 0 0 0;
77896
- font-size: 0.875rem;
77897
- opacity: 0.8;
77898
- }
77899
-
77900
- :where(.theme-scope)
77901
- :where([data-block='event-registration'], [data-block='course-registration'])
77902
- .er-whole-series-portal-sidebar__action {
77903
- margin-top: 1rem;
77904
- }
77905
-
77906
- :where(.theme-scope)
77907
- :where([data-block='event-registration'], [data-block='course-registration'])
77908
- .er-whole-series-portal-sidebar__link {
77909
- color: rgb(var(--tb-primary));
77910
- cursor: pointer;
77911
- text-decoration: underline;
77912
- font-size: 0.875rem;
77913
- }
77914
-
77915
- :where(.theme-scope)
77916
- :where([data-block='event-registration'], [data-block='course-registration'])
77917
- .er-whole-series-portal-sidebar__link:hover {
77918
- text-decoration: none;
77919
- }
77920
-
77921
- /* =============================================================================
77922
- * Modal (for Magic Link)
77923
- * =============================================================================
77924
- */
77925
- :where(.theme-scope)
77926
- :where([data-block='event-registration'], [data-block='course-registration'])
77927
- .er-whole-series-modal-overlay {
77928
- position: fixed;
77929
- inset: 0;
77930
- background: rgba(var(--tb-scrim), 0.5);
77931
- display: flex;
77932
- align-items: center;
77933
- justify-content: center;
77934
- z-index: 100;
77935
- animation: er-whole-series-fade-in 0.15s ease;
77936
- }
77937
-
77938
- :where(.theme-scope)
77939
- :where([data-block='event-registration'], [data-block='course-registration'])
77940
- .er-whole-series-modal {
77941
- background: rgb(var(--tb-surface));
77942
- color: var(--er-on-surface);
77943
- border-radius: var(--rb-block-radius);
77944
- padding: 1.5rem;
77945
- max-width: 28rem;
77946
- width: calc(100% - 2rem);
77947
- position: relative;
77948
- animation: er-whole-series-slide-up 0.2s ease;
77949
- }
77950
-
77951
- :where(.theme-scope)
77952
- :where([data-block='event-registration'], [data-block='course-registration'])
77953
- .er-whole-series-modal-close {
77954
- position: absolute;
77955
- top: 0.75rem;
77956
- right: 0.75rem;
77957
- background: transparent;
77958
- border: 0;
77959
- padding: 0.25rem;
77960
- cursor: pointer;
77961
- opacity: 0.6;
77962
- transition: opacity 0.15s ease;
77963
- }
77964
-
77965
- :where(.theme-scope)
77966
- :where([data-block='event-registration'], [data-block='course-registration'])
77967
- .er-whole-series-modal-close:hover {
77968
- opacity: 1;
77969
- }
77970
-
77971
- @keyframes er-whole-series-fade-in {
77972
- from {
77973
- opacity: 0;
77974
- }
77975
- to {
77976
- opacity: 1;
77977
- }
77978
- }
77979
-
77980
- @keyframes er-whole-series-slide-up {
77981
- from {
77982
- opacity: 0;
77983
- transform: translateY(10px);
77984
- }
77985
- to {
77986
- opacity: 1;
77987
- transform: translateY(0);
77988
- }
77989
- }
77990
-
77991
- /* Reduced motion */
77992
- @media (prefers-reduced-motion: reduce) {
77993
- :where(.theme-scope)
77994
- :where(
77995
- [data-block='event-registration'],
77996
- [data-block='course-registration']
77997
- )
77998
- .er-whole-series-modal-overlay,
77999
- :where(.theme-scope)
78000
- :where(
78001
- [data-block='event-registration'],
78002
- [data-block='course-registration']
78003
- )
78004
- .er-whole-series-modal {
78005
- animation: none;
78006
- }
78007
- }
78008
-
78009
- /* =============================================================================
78010
- * Center States
78011
- * =============================================================================
78012
- */
78013
- :where(.theme-scope)
78014
- :where([data-block='event-registration'], [data-block='course-registration'])
78015
- .er-whole-series-center {
78016
- display: grid;
78017
- place-items: center;
78018
- gap: 0.75rem;
78019
- padding: 2rem 0;
78020
- }
78021
-
78022
- /* =============================================================================
78023
- * Success/Waitlist/Error States
78024
- * =============================================================================
78025
- */
78026
- :where(.theme-scope)
78027
- :where([data-block='event-registration'], [data-block='course-registration'])
78028
- .er-whole-series-success,
78029
- :where(.theme-scope)
78030
- :where([data-block='event-registration'], [data-block='course-registration'])
78031
- .er-whole-series-waitlist,
78032
- :where(.theme-scope)
78033
- :where([data-block='event-registration'], [data-block='course-registration'])
78034
- .er-whole-series-error,
78035
- :where(.theme-scope)
78036
- :where([data-block='event-registration'], [data-block='course-registration'])
78037
- .er-whole-series-payment-failed {
78038
- text-align: center;
78039
- padding: 2rem 1rem;
78040
- }
78041
-
78042
- /* State icon color variants (layout from registration-surface.css) */
78043
- :where(.theme-scope)
78044
- :where([data-block='event-registration'], [data-block='course-registration'])
78045
- .rb-state-icon--success {
78046
- background: var(--er-success-bg);
78047
- color: var(--er-success-text);
78048
- }
78049
-
78050
- :where(.theme-scope)
78051
- :where([data-block='event-registration'], [data-block='course-registration'])
78052
- .rb-state-icon--error {
78053
- background: var(--er-error-bg);
78054
- color: var(--er-error-text);
78055
- }
78056
-
78057
- :where(.theme-scope)
78058
- :where([data-block='event-registration'], [data-block='course-registration'])
78059
- .rb-state-icon--waitlist,
78060
- :where(.theme-scope)
78061
- :where([data-block='event-registration'], [data-block='course-registration'])
78062
- .rb-state-icon--warning {
78063
- background: var(--er-waitlist-bg);
78064
- color: var(--er-waitlist-text);
78065
- }
78066
-
78067
- :where(.theme-scope)
78068
- :where([data-block='event-registration'], [data-block='course-registration'])
78069
- .er-whole-series-success__title,
78070
- :where(.theme-scope)
78071
- :where([data-block='event-registration'], [data-block='course-registration'])
78072
- .er-whole-series-waitlist__title,
78073
- :where(.theme-scope)
78074
- :where([data-block='event-registration'], [data-block='course-registration'])
78075
- .er-whole-series-error__title,
78076
- :where(.theme-scope)
78077
- :where([data-block='event-registration'], [data-block='course-registration'])
78078
- .er-whole-series-payment-failed__title {
78079
- margin: 0.75rem 0 0.5rem 0;
78080
- font-size: 1.125rem;
78081
- font-weight: 700;
78082
- }
78083
-
78084
- :where(.theme-scope)
78085
- :where([data-block='event-registration'], [data-block='course-registration'])
78086
- .er-whole-series-success__message,
78087
- :where(.theme-scope)
78088
- :where([data-block='event-registration'], [data-block='course-registration'])
78089
- .er-whole-series-waitlist__message,
78090
- :where(.theme-scope)
78091
- :where([data-block='event-registration'], [data-block='course-registration'])
78092
- .er-whole-series-error__message,
78093
- :where(.theme-scope)
78094
- :where([data-block='event-registration'], [data-block='course-registration'])
78095
- .er-whole-series-payment-failed__message {
78096
- margin: 0;
78097
- opacity: 0.7;
78098
- }
78099
-
78100
- :where(.theme-scope)
78101
- :where([data-block='event-registration'], [data-block='course-registration'])
78102
- .er-whole-series-success__membership {
78103
- margin-top: 0.5rem;
78104
- font-size: 0.875rem;
78105
- color: var(--er-success-text);
78106
- }
78107
-
78108
- :where(.theme-scope)
78109
- :where([data-block='event-registration'], [data-block='course-registration'])
78110
- .er-whole-series-error__retry,
78111
- :where(.theme-scope)
78112
- :where([data-block='event-registration'], [data-block='course-registration'])
78113
- .er-whole-series-payment-failed__retry {
78114
- margin-top: 1rem;
78115
- }
78116
-
78117
- /* =============================================================================
78118
- * Discount Code Section
78119
- * =============================================================================
78120
- */
78121
- :where(.theme-scope)
78122
- :where([data-block='event-registration'], [data-block='course-registration'])
78123
- .er-whole-series-discount {
78124
- margin-top: 0.5rem;
78125
- }
78126
-
78127
- :where(.theme-scope)
78128
- :where([data-block='event-registration'], [data-block='course-registration'])
78129
- .er-whole-series-discount__form {
78130
- display: grid;
78131
- gap: 0.5rem;
78132
- }
78133
-
78134
- :where(.theme-scope)
78135
- :where([data-block='event-registration'], [data-block='course-registration'])
78136
- .er-whole-series-discount__toggle {
78137
- background: transparent;
78138
- border: 0;
78139
- padding: 0;
78140
- color: rgb(var(--tb-primary));
78141
- cursor: pointer;
78142
- font-size: 0.875rem;
78143
- text-decoration: underline;
78144
- }
78145
-
78146
- :where(.theme-scope)
78147
- :where([data-block='event-registration'], [data-block='course-registration'])
78148
- .er-whole-series-discount__toggle:hover {
78149
- text-decoration: none;
78150
- }
78151
-
78152
- :where(.theme-scope)
78153
- :where([data-block='event-registration'], [data-block='course-registration'])
78154
- .er-whole-series-discount__label {
78155
- font-size: 0.875rem;
78156
- font-weight: 600;
78157
- }
78158
-
78159
- :where(.theme-scope)
78160
- :where([data-block='event-registration'], [data-block='course-registration'])
78161
- .er-whole-series-discount__row {
78162
- display: flex;
78163
- gap: 0.5rem;
78164
- }
78165
-
78166
- :where(.theme-scope)
78167
- :where([data-block='event-registration'], [data-block='course-registration'])
78168
- .er-whole-series-discount__input {
78169
- flex: 1;
78170
- border-radius: calc(var(--rb-block-radius) * 0.6);
78171
- border: 1px solid var(--er-border);
78172
- padding: 0.5rem 0.75rem;
78173
- background: rgb(var(--tb-background));
78174
- color: rgb(var(--tb-foreground));
78175
- font-size: 0.875rem;
78176
- }
78177
-
78178
- :where(.theme-scope)
78179
- :where([data-block='event-registration'], [data-block='course-registration'])
78180
- .er-whole-series-discount__input:focus {
78181
- outline: 2px solid var(--er-focus-ring);
78182
- outline-offset: 2px;
78183
- }
78184
-
78185
- :where(.theme-scope)
78186
- :where([data-block='event-registration'], [data-block='course-registration'])
78187
- .er-whole-series-discount__remove {
78188
- background: transparent;
78189
- border: 0;
78190
- padding: 0.25rem;
78191
- cursor: pointer;
78192
- opacity: 0.6;
78193
- }
78194
-
78195
- :where(.theme-scope)
78196
- :where([data-block='event-registration'], [data-block='course-registration'])
78197
- .er-whole-series-discount__apply {
78198
- background: transparent;
78199
- border: 0;
78200
- padding: 0.25rem;
78201
- cursor: pointer;
78202
- opacity: 0.8;
78203
- }
78204
-
78205
- :where(.theme-scope)
78206
- :where([data-block='event-registration'], [data-block='course-registration'])
78207
- .er-whole-series-discount__remove:hover {
78208
- opacity: 1;
78209
- }
78210
-
78211
- :where(.theme-scope)
78212
- :where([data-block='event-registration'], [data-block='course-registration'])
78213
- .er-whole-series-discount__apply:hover {
78214
- opacity: 1;
78215
- }
78216
-
78217
- :where(.theme-scope)
78218
- :where([data-block='event-registration'], [data-block='course-registration'])
78219
- .er-whole-series-discount__hint {
78220
- margin: 0;
78221
- font-size: 0.875rem;
78222
- opacity: 0.7;
78223
- }
78224
-
78225
- :where(.theme-scope)
78226
- :where([data-block='event-registration'], [data-block='course-registration'])
78227
- .er-whole-series-discount__feedback {
78228
- margin: 0;
78229
- font-size: 0.875rem;
78230
- }
78231
-
78232
- /* =============================================================================
78233
- * Altcha (Spam Protection)
78234
- * =============================================================================
78235
- */
78236
- :where(.theme-scope)
78237
- :where([data-block='event-registration'], [data-block='course-registration'])
78238
- .er-whole-series-altcha {
78239
- margin-top: 1rem;
78240
- }
78241
-
78242
- /* =============================================================================
78243
- * Magic Link Form
78244
- * =============================================================================
78245
- */
78246
- :where(.theme-scope)
78247
- :where([data-block='event-registration'], [data-block='course-registration'])
78248
- .er-whole-series-magic-link-form {
78249
- display: flex;
78250
- flex-direction: column;
78251
- gap: 0.75rem;
78252
- }
78253
-
78254
- :where(.theme-scope)
78255
- :where([data-block='event-registration'], [data-block='course-registration'])
78256
- .er-whole-series-magic-link-title {
78257
- margin: 0;
78258
- font-size: 1.25rem;
78259
- font-weight: 700;
78260
- }
78261
-
78262
- :where(.theme-scope)
78263
- :where([data-block='event-registration'], [data-block='course-registration'])
78264
- .er-whole-series-magic-link-success {
78265
- display: flex;
78266
- flex-direction: column;
78267
- gap: 0.75rem;
78268
- }
78269
-
78270
- :where(.theme-scope)
78271
- :where([data-block='event-registration'], [data-block='course-registration'])
78272
- .er-whole-series-portal-auth-text {
78273
- margin: 0;
78274
- font-size: 0.875rem;
78275
- opacity: 0.8;
78276
- }
78277
-
78278
- :where(.theme-scope)
78279
- :where([data-block='event-registration'], [data-block='course-registration'])
78280
- .er-whole-series-portal-auth-text--success {
78281
- color: var(--er-success-text);
78282
- }
78283
-
78284
- :where(.theme-scope)
78285
- :where([data-block='event-registration'], [data-block='course-registration'])
78286
- .er-whole-series-portal-auth-text--error {
78287
- color: var(--er-error-text);
78288
- }
78289
-
78290
- :where(.theme-scope)
78291
- :where([data-block='event-registration'], [data-block='course-registration'])
78292
- .er-whole-series-modal-btn {
78293
- border-radius: calc(var(--rb-block-radius) * 0.6);
78294
- border: 0;
78295
- padding: 0.6rem 1rem;
78296
- font-size: 0.875rem;
78297
- font-weight: 600;
78298
- cursor: pointer;
78299
- transition: opacity 0.15s ease;
78300
- background: rgb(var(--tb-primary));
78301
- color: rgb(var(--tb-primaryText, 255 255 255));
78302
- }
78303
-
78304
- :where(.theme-scope)
78305
- :where([data-block='event-registration'], [data-block='course-registration'])
78306
- .er-whole-series-modal-btn:hover {
78307
- opacity: 0.9;
78308
- }
78309
-
78310
- :where(.theme-scope)
78311
- :where([data-block='event-registration'], [data-block='course-registration'])
78312
- .er-whole-series-modal-btn:disabled {
78313
- opacity: 0.5;
78314
- cursor: not-allowed;
78315
- }
78316
-
78317
- :where(.theme-scope)
78318
- :where([data-block='event-registration'], [data-block='course-registration'])
78319
- .er-whole-series-modal-btn--secondary {
78320
- background: transparent;
78321
- color: var(--er-on-surface);
78322
- border: 1px solid var(--er-border);
78323
- }
78324
-
78325
- :where(.theme-scope)
78326
- :where([data-block='event-registration'], [data-block='course-registration'])
78327
- .er-whole-series-modal-btn--secondary:hover {
78328
- background: var(--er-on-surface-hover-bg);
78329
- }
78330
-
78331
- /* =============================================================================
78332
- * Utility Classes
78333
- * =============================================================================
78334
- */
78335
- :where(.theme-scope)
78336
- :where([data-block='event-registration'], [data-block='course-registration'])
78337
- .er-whole-series-text--muted {
78338
- opacity: 0.7;
78339
- }
78340
-
78341
- :where(.theme-scope)
78342
- :where([data-block='event-registration'], [data-block='course-registration'])
78343
- .er-whole-series-text--error {
78344
- color: var(--er-error-text);
78345
- }
78346
-
78347
- :where(.theme-scope)
78348
- :where([data-block='event-registration'], [data-block='course-registration'])
78349
- .er-whole-series-text--success {
78350
- color: var(--er-success-text);
78351
- }
78352
-
78353
- :where(.theme-scope)
78354
- :where([data-block='event-registration'], [data-block='course-registration'])
78355
- .er-whole-series-sr-only {
78356
- position: absolute;
78357
- width: 1px;
78358
- height: 1px;
78359
- padding: 0;
78360
- margin: -1px;
78361
- overflow: hidden;
78362
- clip: rect(0, 0, 0, 0);
78363
- white-space: nowrap;
78364
- border-width: 0;
78365
- }
78366
-
78367
- /* Stack utility */
78368
- :where(.theme-scope)
78369
- :where([data-block='event-registration'], [data-block='course-registration'])
78370
- .er-whole-series-stack {
78371
- display: flex;
78372
- flex-direction: column;
78373
- }
78374
-
78375
- :where(.theme-scope)
78376
- :where([data-block='event-registration'], [data-block='course-registration'])
78377
- .er-whole-series-stack--gap-sm {
78378
- gap: 0.5rem;
78379
- }
78380
-
78381
- :where(.theme-scope)
78382
- :where([data-block='event-registration'], [data-block='course-registration'])
78383
- .er-whole-series-stack--gap-md {
78384
- gap: 1rem;
78385
- }
78386
-
78387
- :where(.theme-scope)
78388
- :where([data-block='event-registration'], [data-block='course-registration'])
78389
- .er-whole-series-stack--gap-lg {
78390
- gap: 1.5rem;
78391
- }
78392
-
78393
- /* =============================================================================
78394
- * Block: Newsletter Signup
78395
- * =============================================================================
78396
- */
78397
-
78398
- /* Newsletter copy styling */
78399
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
78400
- font-size: 1.5rem;
78401
- font-weight: 600;
78402
- }
78403
-
78404
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
78405
- font-size: 1rem;
78406
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78407
- opacity: 0.85;
78408
- }
78409
-
78410
- /* Newsletter form container */
78411
- :where(.theme-scope) .newsletter-form {
78412
- width: 100%;
78413
- max-width: 32rem;
78414
- margin-left: auto;
78415
- margin-right: auto;
78416
- }
78417
-
78418
- /* Newsletter form fields container */
78419
- :where(.theme-scope) .newsletter-form-fields {
78420
- display: flex;
78421
- flex-direction: column;
78422
- gap: var(--rb-gap-sm, 0.75rem);
78423
- }
78424
-
78425
- /* Individual field styling */
78426
- :where(.theme-scope) .newsletter-field {
78427
- display: flex;
78428
- flex-direction: column;
78429
- gap: 0.25rem;
78430
- }
78431
-
78432
- /* Required indicator */
78433
- :where(.theme-scope) .newsletter-required {
78434
- color: rgb(var(--tb-primary));
78435
- margin-left: 0.125rem;
78436
- }
78437
-
78438
- /* Submit button container */
78439
- :where(.theme-scope) .newsletter-submit {
78440
- margin-top: 0.5rem;
78441
- }
78442
-
78443
- /* ALTCHA widget container */
78444
- :where(.theme-scope) .newsletter-altcha {
78445
- margin-top: 0.75rem;
78446
- display: flex;
78447
- justify-content: center;
78448
- }
78449
-
78450
- /* Privacy note */
78451
- :where(.theme-scope) .newsletter-privacy-note {
78452
- margin-top: 0.75rem;
78453
- font-size: 1rem;
78454
- line-height: 1.6;
78455
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78456
- text-align: center;
78457
- }
78458
-
78459
- /* =============================================================================
78460
- * Inline Variant - Horizontal layout
78461
- * =============================================================================
78462
- */
78463
-
78464
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78465
- flex-direction: row;
78466
- align-items: flex-end;
78467
- flex-wrap: wrap;
78468
- gap: var(--rb-gap-sm, 0.75rem);
78469
- }
78470
-
78471
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78472
- flex: 1 1 auto;
78473
- min-width: 10rem;
78474
- }
78475
-
78476
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
78477
- margin-top: 0;
78478
- flex-shrink: 0;
78479
- }
78480
-
78481
- /* Mobile fallback for inline variant */
78482
- @container rb-site (max-width: 640px) {
78483
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78484
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
78485
- flex-direction: column;
78486
- }
78487
-
78488
- :where(.theme-scope) .newsletter-inline .newsletter-field {
78489
- min-width: 100%;
78490
- }
78491
- }
78492
- }
78493
-
78494
- /* =============================================================================
78495
- * Editorial Split Variant
78496
- * =============================================================================
78497
- */
78498
-
78499
- :where(.theme-scope) .newsletter-editorial-split {
78500
- display: grid;
78501
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
78502
- gap: clamp(2.5rem, 7vw, 7rem);
78503
- align-items: center;
78504
- text-align: left;
78505
- }
78506
-
78507
- :where(.theme-scope) .newsletter-editorial-split-copy {
78508
- display: flex;
78509
- flex-direction: column;
78510
- gap: var(--rb-gap-sm, 0.75rem);
78511
- }
78512
-
78513
- :where(.theme-scope) .newsletter-editorial-split-form {
78514
- min-width: 0;
78515
- }
78516
-
78517
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
78518
- max-width: none;
78519
- margin-inline: 0;
78520
- }
78521
-
78522
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
78523
- font-size: clamp(2rem, 4vw, 3.5rem);
78524
- font-weight: 500;
78525
- }
78526
-
78527
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
78528
- text-align: left;
78529
- }
78530
-
78531
- @container rb-site (max-width: 767px) {
78532
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78533
- :where(.theme-scope) .newsletter-editorial-split {
78534
- grid-template-columns: minmax(0, 1fr);
78535
- gap: 2rem;
78536
- }
78537
- }
78538
- }
78539
-
78540
- /* =============================================================================
78541
- * Success State
78542
- * =============================================================================
78543
- */
78544
-
78545
- :where(.theme-scope) .newsletter-success {
78546
- text-align: center;
78547
- }
78548
-
78549
- :where(.theme-scope) .newsletter-success .fb-success {
78550
- padding: 1rem 1.5rem;
78551
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
78552
- border-radius: var(--radius-md, 0.5rem);
78553
- color: rgb(var(--tb-text));
78554
- }
78555
-
78556
- /* =============================================================================
78557
- * Block: Contact + Newsletter
78558
- * =============================================================================
78559
- */
78560
-
78561
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
78562
- display: grid;
78563
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
78564
- gap: clamp(2.5rem, 6vw, 4rem);
78565
- align-items: start;
78566
- }
78567
-
78568
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
78569
- min-width: 0;
78570
- }
78571
-
78572
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
78573
- margin-bottom: 1.5rem;
78574
- }
78575
-
78576
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
78577
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
78578
- margin: 0 0 0.75rem;
78579
- }
78580
-
78581
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
78582
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
78583
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
78584
- }
78585
-
78586
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
78587
- display: flex;
78588
- flex-direction: column;
78589
- align-items: flex-start;
78590
- }
78591
-
78592
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
78593
- max-width: none;
78594
- margin-left: 0;
78595
- margin-right: 0;
78596
- }
78597
-
78598
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
78599
- text-align: left;
78600
- }
78601
-
78602
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
78603
- display: flex;
78604
- flex-direction: column;
78605
- gap: 1rem;
78606
- }
78607
-
78608
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
78609
- display: grid;
78610
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
78611
- gap: 1rem;
78612
- }
78613
-
78614
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
78615
- display: flex;
78616
- flex-direction: column;
78617
- gap: 0.25rem;
78618
- }
78619
-
78620
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
78621
- display: flex;
78622
- flex-direction: column;
78623
- gap: 0.5rem;
78624
- border: none;
78625
- padding: 0;
78626
- margin: 0;
78627
- }
78628
-
78629
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
78630
- display: flex;
78631
- align-items: center;
78632
- gap: 0.5rem;
78633
- }
78634
-
78635
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
78636
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
78637
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
78638
- border-radius: var(--rb-block-radius);
78639
- padding: 1rem;
78640
- font-size: 0.875rem;
78641
- }
78642
-
78643
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
78644
- background-color: var(--fb-success-bg);
78645
- color: var(--fb-success-text);
78646
- border: 1px solid var(--fb-success-border);
78647
- }
78648
-
78649
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
78650
- background-color: var(--fb-error-bg);
78651
- color: var(--fb-error-text);
78652
- border: 1px solid var(--fb-error-border);
78653
- }
78654
-
78655
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
78656
- background-color: var(--fb-empty-bg);
78657
- color: var(--fb-empty-text);
78658
- border: 1px dashed var(--fb-empty-border);
78659
- text-align: center;
78660
- }
78661
-
78662
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
78663
- margin-top: 0.5rem;
78664
- }
78665
-
78666
- /* =============================================================================
78667
- * Block: Team Members
78668
- * =============================================================================
78669
- *
78670
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
78671
- * changing global fragment defaults. We expose these controls on the block and
78672
- * style them via data attributes on the \`.rb-team-members\` wrapper.
78673
- */
78674
-
78675
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
78676
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
78677
- text-align: left;
78678
- }
78679
-
78680
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
78681
- align-items: flex-start;
78682
- text-align: left;
78683
- }
78684
-
78685
- @container rb-site (min-width: 1024px) {
78686
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
78687
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
78688
- width: 75%;
78689
- margin-left: 0;
78690
- margin-right: auto;
78691
- }
78692
- }
78693
- }
78694
-
78695
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
78696
- display: block;
78697
- width: 100%;
78698
- height: auto;
78699
- }
78700
-
78701
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
78702
- font-weight: 600;
78703
- }
78704
-
78705
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
78706
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
78707
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
78708
- --rb-team-image-basis: 33.333%;
78709
- }
78710
-
78711
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
78712
- --rb-team-thumb-max: 8.75rem; /* ~140px */
78713
- --rb-team-image-basis: 25%;
78714
- }
78715
-
78716
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
78717
- --rb-team-thumb-max: 11.25rem; /* ~180px */
78718
- --rb-team-image-basis: 33.333%;
78719
- }
78720
-
78721
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
78722
- --rb-team-thumb-max: 13.75rem; /* ~220px */
78723
- --rb-team-image-basis: 40%;
78724
- }
78725
-
78726
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
78727
- --rb-team-thumb-max: 17.5rem; /* ~280px */
78728
- --rb-team-image-basis: 50%;
78729
- }
78730
-
78731
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
78732
- --rb-team-thumb-max: 22.5rem; /* ~360px */
78733
- --rb-team-image-basis: 66.667%;
76359
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/3"]) {
76360
+ --rb-team-thumb-max: 22.5rem; /* ~360px */
76361
+ --rb-team-image-basis: 66.667%;
78734
76362
  }
78735
76363
 
78736
76364
  /* The wrap is the shape/padding boundary; ensure it expands within the grid cell. */
@@ -82455,6 +80083,68 @@ function parsePublicProductCategorySelector(value) {
82455
80083
  };
82456
80084
  }
82457
80085
  //#endregion
80086
+ //#region ../api/src/bookingPaymentTermSchemas.ts
80087
+ const bookingDepositRefundPolicySchema = z$1.enum(["refundable", "non_refundable"]);
80088
+ const bookingInstalmentPlanSchema = z$1.discriminatedUnion("kind", [
80089
+ z$1.object({
80090
+ kind: z$1.literal("deposit_plus_one_remainder"),
80091
+ depositAmountCents: z$1.number().int().nonnegative(),
80092
+ depositRefundability: bookingDepositRefundPolicySchema,
80093
+ remainderDueCount: z$1.number().int().positive(),
80094
+ intervalUnit: z$1.enum([
80095
+ "day",
80096
+ "week",
80097
+ "month"
80098
+ ])
80099
+ }),
80100
+ z$1.object({
80101
+ kind: z$1.literal("deposit_plus_scheduled_instalments"),
80102
+ depositAmountCents: z$1.number().int().nonnegative(),
80103
+ depositRefundability: bookingDepositRefundPolicySchema,
80104
+ instalmentCount: z$1.number().int().positive(),
80105
+ intervalCount: z$1.number().int().positive(),
80106
+ intervalUnit: z$1.enum([
80107
+ "day",
80108
+ "week",
80109
+ "month"
80110
+ ])
80111
+ }),
80112
+ z$1.object({
80113
+ kind: z$1.literal("equal_scheduled_instalments"),
80114
+ instalmentCount: z$1.number().int().positive(),
80115
+ intervalCount: z$1.number().int().positive(),
80116
+ intervalUnit: z$1.enum([
80117
+ "day",
80118
+ "week",
80119
+ "month"
80120
+ ])
80121
+ })
80122
+ ]);
80123
+ const bookingFlexibleBalanceDueDateRuleSchema = z$1.discriminatedUnion("kind", [z$1.object({
80124
+ kind: z$1.literal("relative_to_start_date"),
80125
+ daysBeforeStart: z$1.number().int().positive()
80126
+ }), z$1.object({
80127
+ kind: z$1.literal("fixed_calendar_date"),
80128
+ dueAt: z$1.string().datetime()
80129
+ })]);
80130
+ const bookingFlexibleBalanceConfigSchema = z$1.object({
80131
+ upfrontAmountCents: z$1.number().int().nonnegative(),
80132
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
80133
+ depositRefundability: bookingDepositRefundPolicySchema
80134
+ });
80135
+ z$1.discriminatedUnion("kind", [
80136
+ z$1.object({ kind: z$1.literal("upfront") }),
80137
+ z$1.object({ kind: z$1.literal("deferred_manual") }),
80138
+ z$1.object({
80139
+ kind: z$1.literal("instalment_plan"),
80140
+ plan: bookingInstalmentPlanSchema
80141
+ }),
80142
+ z$1.object({
80143
+ kind: z$1.literal("flexible_balance"),
80144
+ config: bookingFlexibleBalanceConfigSchema
80145
+ })
80146
+ ]);
80147
+ //#endregion
82458
80148
  //#region ../api/src/navigationMenuValidation.ts
82459
80149
  function hasChildren(item) {
82460
80150
  return Array.isArray(item.children) && item.children.length > 0;
@@ -84022,40 +81712,6 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
84022
81712
  plural: "Events"
84023
81713
  }
84024
81714
  },
84025
- course: {
84026
- version: 1,
84027
- fields: [
84028
- {
84029
- id: "summary",
84030
- type: "textarea",
84031
- label: "Summary",
84032
- description: "Short teaser shown in listings.",
84033
- rows: 3
84034
- },
84035
- {
84036
- id: "image",
84037
- type: "media",
84038
- label: "Listing image",
84039
- description: "Optional image used for course cards and previews."
84040
- },
84041
- {
84042
- id: "body",
84043
- type: "richText",
84044
- label: "Details",
84045
- description: "Full course details and curriculum."
84046
- }
84047
- ],
84048
- routing: {
84049
- enabled: true,
84050
- pattern: "/courses/{slug}",
84051
- slugField: "slug",
84052
- prefix: "/courses/"
84053
- },
84054
- labels: {
84055
- singular: "Course",
84056
- plural: "Courses"
84057
- }
84058
- },
84059
81715
  "team-member": {
84060
81716
  version: 1,
84061
81717
  fields: [
@@ -84255,7 +81911,7 @@ const BUILTIN_CONTENT_TYPE_SCHEMAS = {
84255
81911
  function deriveFieldIdSet(schema) {
84256
81912
  return new Set(schema.fields.map((f) => f.id));
84257
81913
  }
84258
- deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.course), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
81914
+ deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.post), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.event), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["team-member"]), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.product), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.testimonial), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS.page), deriveFieldIdSet(BUILTIN_CONTENT_TYPE_SCHEMAS["product-category"]);
84259
81915
  //#endregion
84260
81916
  //#region ../field-primitives/src/bindings/index.ts
84261
81917
  const BINDING_TRANSFORMS$1 = {
@@ -84338,7 +81994,6 @@ function selectBlocksForDeclaredEntrySlot(input) {
84338
81994
  //#region ../content-model/src/templates/defaults.ts
84339
81995
  const POST_EXCERPT_FALLBACK = fallbackBinding$1(fieldBinding$1("excerpt"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84340
81996
  const EVENT_SUBHEADLINE_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84341
- const COURSE_SUMMARY_FALLBACK = fallbackBinding$1(fieldBinding$1("summary"), transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.RICHTEXT_FIRST_PARAGRAPH, { input: fieldBinding$1("body") }));
84342
81997
  const ENTRY_TITLE_INLINE_TEXT = transformBinding$1(TEMPLATE_BINDING_TRANSFORMS.TEXT_INLINE_TEXT, { input: metaBinding$1("title") });
84343
81998
  const POST_BODY_TEXT_BINDINGS = {
84344
81999
  body: fieldBinding$1("body"),
@@ -84453,7 +82108,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84453
82108
  showVenue: true,
84454
82109
  showCapacity: true,
84455
82110
  successMessage: "Thank you for registering! Check your email for confirmation details.",
84456
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84457
82111
  buttonText: "Complete Registration",
84458
82112
  buttonVariant: "primary"
84459
82113
  },
@@ -84464,64 +82118,6 @@ const DEFAULT_TEMPLATE_DEFINITIONS = {
84464
82118
  }
84465
82119
  ]
84466
82120
  },
84467
- course: {
84468
- templateKey: "default",
84469
- name: "Course detail",
84470
- description: "Standard landing page for multi-session courses.",
84471
- metadata: {},
84472
- blocks: [
84473
- {
84474
- blockKind: "block.hero",
84475
- scope: "entry",
84476
- bindings: {
84477
- eyebrow: literalBinding$1("Course"),
84478
- headline: metaBinding$1("title"),
84479
- headlineInline: ENTRY_TITLE_INLINE_TEXT,
84480
- subheadline: COURSE_SUMMARY_FALLBACK
84481
- }
84482
- },
84483
- {
84484
- blockKind: "block.course-details",
84485
- scope: "entry",
84486
- content: {
84487
- heading: "Course details",
84488
- showTitle: false,
84489
- showDescription: false,
84490
- showSessions: true,
84491
- sessionsLimit: "10",
84492
- showVenue: true,
84493
- showPrice: true,
84494
- showCapacity: true,
84495
- showEnrollmentStatus: true,
84496
- showMembershipNote: true
84497
- }
84498
- },
84499
- {
84500
- blockKind: SYSTEM_ENTRY_SLOT_BLOCK_KIND,
84501
- scope: "template",
84502
- content: {
84503
- slotKey: "main",
84504
- label: "Page content"
84505
- }
84506
- },
84507
- {
84508
- blockKind: "block.course-registration",
84509
- scope: "entry",
84510
- content: {
84511
- heading: "Enroll in this course",
84512
- showSessions: true,
84513
- showPrice: true,
84514
- showCapacity: true,
84515
- showVenue: true,
84516
- successMessage: "You're enrolled! Check your email for confirmation and session details.",
84517
- waitlistMessage: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
84518
- membershipMessage: "Enrolled using your membership! Check your email for session details.",
84519
- buttonText: "Complete Enrollment",
84520
- buttonVariant: "primary"
84521
- }
84522
- }
84523
- ]
84524
- },
84525
82121
  "team-member": {
84526
82122
  templateKey: "default",
84527
82123
  name: "Team member profile",
@@ -87480,7 +85076,7 @@ var CircuitOpenError = class extends Error {
87480
85076
  * 1. This constant
87481
85077
  * 2. The "version" field in package.json
87482
85078
  */
87483
- const SDK_VERSION = "0.134.0";
85079
+ const SDK_VERSION = "0.135.1";
87484
85080
  //#endregion
87485
85081
  //#region src/next/content-load-failure.ts
87486
85082
  const SdkContentLoadError = RiverbankContentLoadError;