@riverbankcms/sdk 0.132.0 → 0.135.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DKQ5eFK9.mjs → PreviewEditorSidebar-roNY0GVy.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-CNTcOjCC.mjs → PreviewEditorUI-KboDbEh_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-DJu3qu33.mjs → SdkPreviewModeRuntime-DBrF7Caa.mjs} +48 -17
  7. package/dist/{SiteChromeCustomizeContext-2TzT3vbj.mjs → SiteChromeCustomizeContext-DrIEpJKn.mjs} +4351 -7964
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +549 -549
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +234 -234
  10. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  11. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +1 -1
  12. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  13. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  14. package/dist/_dts/api/src/bookingOperations.d.ts +111 -173
  15. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  17. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  18. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  19. package/dist/_dts/api/src/bookings.d.ts +7 -11
  20. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  21. package/dist/_dts/api/src/communications.d.ts +1 -1
  22. package/dist/_dts/api/src/contentRuntime.d.ts +1 -1
  23. package/dist/_dts/api/src/endpoints.d.ts +30 -110
  24. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  25. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  26. package/dist/_dts/api/src/index.d.ts +3 -4
  27. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -6
  29. package/dist/_dts/api/src/navigation/linkResolver.d.ts +6 -2
  30. package/dist/_dts/api/src/navigation/types.d.ts +23 -6
  31. package/dist/_dts/api/src/navigation.d.ts +1 -1
  32. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  33. package/dist/_dts/api/src/publicBookingService.d.ts +15 -0
  34. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  35. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  36. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +88 -6
  37. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  38. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -98
  39. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  40. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  41. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  42. package/dist/_dts/api/src/sdk-event-upsert.d.ts +2 -2
  43. package/dist/_dts/api/src/sdkThemeWire.d.ts +50 -50
  44. package/dist/_dts/api/src/siteBanner.d.ts +4 -2
  45. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  46. package/dist/_dts/api/src/types.d.ts +2 -2
  47. package/dist/_dts/api/src/webhooks.d.ts +12 -12
  48. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  49. package/dist/_dts/blocks/src/client.d.ts +1 -6
  50. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  51. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +33 -166
  52. package/dist/_dts/blocks/src/index.d.ts +3 -2
  53. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  54. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  55. package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +2 -2
  56. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
  57. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  58. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +46 -24
  59. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -0
  60. package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +3 -3
  61. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +6 -0
  62. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  63. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +4 -4
  64. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +148 -148
  65. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +5 -4
  66. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  67. package/dist/_dts/blocks/src/system/blocks/shared/bookingConsent.d.ts +36 -0
  68. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/manifest/hydrateLinks.d.ts +9 -2
  70. package/dist/_dts/blocks/src/system/manifest/resolveBlockData.d.ts +8 -0
  71. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +79 -79
  72. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  74. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  75. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  76. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -11
  77. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  78. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +100 -59
  79. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  80. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  81. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  82. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  83. package/dist/_dts/blocks/src/system/runtime/components/multi-step/DynamicFormFields.d.ts +3 -19
  84. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  85. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  86. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  87. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  88. package/dist/_dts/blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.d.ts +2 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.consent.d.ts +10 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.field-values.d.ts +4 -0
  91. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.fields.d.ts +21 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +2 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +38 -144
  94. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -19
  95. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -2
  96. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  97. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +2 -0
  98. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  100. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  101. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  102. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  103. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  104. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  105. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  106. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  107. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  108. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  109. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  110. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  111. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +18 -1
  112. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  113. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  114. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  115. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  116. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  117. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +24 -9
  118. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  119. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  120. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/validation.d.ts +2 -1
  121. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  122. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  123. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  124. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +40 -18
  125. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  126. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  127. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingConsentAgreement.d.ts +7 -0
  128. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  129. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  130. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  131. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  132. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  133. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +2 -1
  134. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  135. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  136. package/dist/_dts/commerce/src/index.d.ts +16 -0
  137. package/dist/_dts/commerce/src/money.d.ts +122 -0
  138. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  139. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  140. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  141. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  142. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  143. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  144. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  145. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  146. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  147. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  148. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  149. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  150. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  151. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  152. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  153. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  154. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  155. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  156. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  157. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  158. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  159. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  160. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  161. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  162. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  163. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  164. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  165. package/dist/_dts/content-model/src/content-types/schema.d.ts +4 -4
  166. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  167. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  168. package/dist/_dts/core/src/booking-consent.d.ts +8 -0
  169. package/dist/_dts/core/src/branded.d.ts +3 -3
  170. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  171. package/dist/_dts/core/src/index.d.ts +1 -0
  172. package/dist/_dts/core/src/participants.d.ts +17 -17
  173. package/dist/_dts/core/src/rectification.d.ts +1 -1
  174. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +899 -2157
  175. package/dist/_dts/db/src/schemas/forms.d.ts +21 -21
  176. package/dist/_dts/db/src/types/jsonb.d.ts +1 -1
  177. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +2 -1
  178. package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +2 -1
  179. package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +3 -2
  180. package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +3 -4
  181. package/dist/_dts/media-core/src/usageScanner.d.ts +1 -1
  182. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  183. package/dist/_dts/sdk/src/bookings/types.d.ts +8 -60
  184. package/dist/_dts/sdk/src/config/validation.d.ts +30 -30
  185. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -36
  186. package/dist/_dts/sdk/src/contracts/rendering.d.ts +1 -1
  187. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +9 -9
  188. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -19
  189. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  190. package/dist/_dts/sdk/src/version.d.ts +1 -1
  191. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  192. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  193. package/dist/_dts/theme-core/src/buttons/types.d.ts +12 -12
  194. package/dist/_dts/theme-core/src/cards/types.d.ts +5 -5
  195. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  196. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +72 -72
  197. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
  198. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  199. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
  200. package/dist/_dts/theme-core/src/schema.d.ts +82 -82
  201. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  202. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  203. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
  204. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  205. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
  206. package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
  207. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  208. package/dist/_dts/ui/src/badge.d.ts +1 -1
  209. package/dist/_dts/ui/src/button.d.ts +1 -1
  210. package/dist/_dts/ui/src/callout.d.ts +1 -1
  211. package/dist/_dts/ui/src/card.d.ts +1 -1
  212. package/dist/client/{usePolling-M5jG675x.mjs → BookingConsentAgreement-BQqwi8Oa.mjs} +180 -4
  213. package/dist/client/{DiscountCodeDisclosure-DO7llLxm.mjs → DiscountCodeDisclosure-B97aMo0V.mjs} +13 -27
  214. package/dist/client/{EventCombined.client-xID7zN__.mjs → EventCombined.client-Bs2Iw9Q6.mjs} +3 -3
  215. package/dist/client/{EventListing.client-CriBslp0.mjs → EventListing.client-C4QUQdmg.mjs} +2 -2
  216. package/dist/client/{LeafletStaticMap-DYmHnM8g.mjs → LeafletStaticMap-CwWRk69M.mjs} +1 -1
  217. package/dist/client/{accordion-CgFbnnnQ.mjs → accordion-BA0j8Mpw.mjs} +1 -1
  218. package/dist/client/{bookingForm-dUyGpbxc.mjs → bookingForm-Br2e41H0.mjs} +72 -47
  219. package/dist/client/bookings.mjs +1987 -2132
  220. package/dist/client/{carousel-BvBwkUzx.mjs → carousel-B4dmwnpD.mjs} +1 -1
  221. package/dist/client/{cart-DiZENT2E.mjs → cart-B_ckGW4b.mjs} +3 -3
  222. package/dist/client/{checkout-Dq13KIgR.mjs → checkout-DAyspHdf.mjs} +3 -3
  223. package/dist/client/checkoutUrls-BuseL0dw.mjs +189 -0
  224. package/dist/client/client.mjs +5627 -9543
  225. package/dist/client/{context-B83PiNzm.mjs → context-DljQn8L5.mjs} +15 -82
  226. package/dist/client/{eventCalendar-BF0Jatfw.mjs → eventCalendar-pJu3FUod.mjs} +5 -5
  227. package/dist/client/{eventCombined-BuoCF8je.mjs → eventCombined-B6Kacm9F.mjs} +3 -3
  228. package/dist/client/{eventDetails-CKwh0S9s.mjs → eventDetails-CaX9z1pv.mjs} +8 -8
  229. package/dist/client/{eventListing-eUxaWFaB.mjs → eventListing-B9aXPO-I.mjs} +3 -3
  230. package/dist/client/{eventRegistration-CfkNOkPb.mjs → eventRegistration-CBSovBkg.mjs} +4550 -3671
  231. package/dist/client/{form-C17H1c_H.mjs → form-Cm0tu_7o.mjs} +2 -2
  232. package/dist/client/{headerSection-DEwUmrtt.mjs → headerSection-OgRtHeKS.mjs} +2 -2
  233. package/dist/client/hooks.mjs +535 -694
  234. package/dist/client/{locationMap-Pf2QwuvW.mjs → locationMap-DmjcYqNM.mjs} +2 -2
  235. package/dist/client/{newsletterForm-BWQAH5Sv.mjs → newsletterForm-D08OZQAC.mjs} +2 -2
  236. package/dist/client/{productDetail-BZi1Fa_G.mjs → productDetail-BqZeu2P4.mjs} +3 -3
  237. package/dist/client/{productList-qq-55DNk.mjs → productList-mNyIF9FG.mjs} +3 -3
  238. package/dist/client/{propsDecoder-BxmqPKdP.mjs → propsDecoder-DwHXRm9X.mjs} +4850 -4502
  239. package/dist/client/rendering/client.mjs +59921 -62298
  240. package/dist/client/rendering/islands.mjs +17 -19
  241. package/dist/client/rendering.mjs +6226 -10236
  242. package/dist/client/{scrollToBlock-B3CcKdtG.mjs → scrollToBlock-DtmdM3v-.mjs} +2 -2
  243. package/dist/client/{shop-DNWJPut5.mjs → shop-CNjZK16F.mjs} +6 -6
  244. package/dist/client/{shop-commerce-BhvQCosS.mjs → shop-commerce-DkNNao1J.mjs} +7 -164
  245. package/dist/client/{shop-commerce-store-B04sCNnW.mjs → shop-commerce-store-9WA--zuW.mjs} +1 -1
  246. package/dist/client/{shopShared-DNNgZlmW.mjs → shopShared-CHCVfccY.mjs} +3 -3
  247. package/dist/client/{useEventFilters-CUmhE24_.mjs → useEventFilters-DvuaB4ZN.mjs} +3 -3
  248. package/dist/preview-next/before-render.mjs +40 -161
  249. package/dist/preview-next/client/runtime.mjs +4 -4
  250. package/dist/preview-next/keepAlive.mjs +40 -161
  251. package/dist/preview-next/middleware.mjs +40 -161
  252. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  253. package/dist/{sdk-runtime-BEXb1wqo.mjs → sdk-runtime-3GhW4knb.mjs} +2 -2
  254. package/dist/{separator-DGMuip1D.mjs → separator-D3bCWYYb.mjs} +1 -1
  255. package/dist/server/components.mjs +634 -2969
  256. package/dist/server/config-validation.mjs +535 -694
  257. package/dist/server/config.mjs +535 -694
  258. package/dist/server/data.mjs +535 -694
  259. package/dist/server/index.mjs +41 -162
  260. package/dist/server/next.mjs +644 -2979
  261. package/dist/server/page-converter.mjs +435 -561
  262. package/dist/server/prebuild.mjs +1 -1
  263. package/dist/server/rendering/server.mjs +635 -2874
  264. package/dist/server/rendering.mjs +634 -2969
  265. package/dist/server/routing.mjs +706 -1138
  266. package/dist/server/server.mjs +549 -708
  267. package/dist/server/theme-bridge.mjs +152 -1635
  268. package/dist/styles/index.css +41 -1348
  269. package/package.json +2 -2
  270. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  271. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  272. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  273. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  274. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  275. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  276. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  277. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  278. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -133
  279. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  280. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  281. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  282. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  283. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  284. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  285. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  286. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  287. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  288. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  289. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  290. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  291. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  292. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  293. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  294. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  295. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  296. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  297. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  298. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  299. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  300. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  301. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  302. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  303. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -45
  304. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  305. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  306. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  307. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  308. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  309. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  310. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  311. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  312. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  313. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  314. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  315. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  316. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -323
  317. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  318. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  319. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  320. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  321. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  322. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  323. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  324. package/dist/client/StepIndicator-CGixP_LW.mjs +0 -138
  325. package/dist/client/WholeSeriesRegistrationWizard-BEjzSiOA.mjs +0 -2496
  326. package/dist/client/checkoutUrls-Ct8Mxna3.mjs +0 -26
  327. package/dist/client/courseRegistration-CKC5NmyH.mjs +0 -52
  328. package/dist/client/pricing-CVdvbopJ.mjs +0 -195
@@ -9497,6 +9497,11 @@ z.object({
9497
9497
  //#endregion
9498
9498
  //#region ../blocks/src/system/types/link.ts
9499
9499
  const nullableString = z.union([z.string().min(1), z.null()]);
9500
+ const RESOLVED_INTERNAL_LINK_ENTITY_TYPES = [
9501
+ "page",
9502
+ "content",
9503
+ "pageSurface"
9504
+ ];
9500
9505
  const resolvedInternalLinkKeys = [
9501
9506
  "entityId",
9502
9507
  "entityType",
@@ -9518,7 +9523,7 @@ const internalResolvedLinkSchema = z.object({
9518
9523
  kind: z.literal("internal"),
9519
9524
  routeId: z.string().min(1),
9520
9525
  entityId: z.string().min(1),
9521
- entityType: z.enum(["page", "content"]),
9526
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
9522
9527
  href: z.string().min(1),
9523
9528
  title: z.string().min(1),
9524
9529
  typeLabel: z.string().min(1),
@@ -9651,7 +9656,7 @@ function publicEventPricingType(pricing) {
9651
9656
  case "single_paid":
9652
9657
  case "ticket_types":
9653
9658
  case "sliding_scale":
9654
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9659
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
9655
9660
  case "external": return "external";
9656
9661
  }
9657
9662
  }
@@ -9662,14 +9667,14 @@ function publicEventPricingCurrency(pricing) {
9662
9667
  case "single_paid":
9663
9668
  case "ticket_types":
9664
9669
  case "sliding_scale": return pricing.currency;
9665
- case "course": return pricing.display.display.currency;
9670
+ case "whole_series": return pricing.display.display.currency;
9666
9671
  case "external": return null;
9667
9672
  }
9668
9673
  }
9669
9674
  function isFreePublicEventPriceDisplay(display) {
9670
9675
  switch (display.kind) {
9671
9676
  case "free": return true;
9672
- case "course": return display.display.kind === "free";
9677
+ case "whole_series": return display.display.kind === "free";
9673
9678
  case "exact":
9674
9679
  case "from":
9675
9680
  case "range":
@@ -9705,7 +9710,7 @@ function formatBookingPriceDisplay(display, options = {}) {
9705
9710
  case "mixed": return display.paidToAmount > display.paidFromAmount ? `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)} - ${formatCurrencyAmount(display.paidToAmount, display.currency, options)}` : `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)}`;
9706
9711
  case "unavailable": return "Pricing unavailable";
9707
9712
  case "external": return display.label;
9708
- case "course": return formatCoursePriceDisplayLabel(display.display, options);
9713
+ case "whole_series": return formatCoursePriceDisplayLabel(display.display, options);
9709
9714
  default: return assertNever$3(display);
9710
9715
  }
9711
9716
  }
@@ -14220,7 +14225,7 @@ defineBlockAppearancePreset({
14220
14225
  id: "schedule-details-brand-depth",
14221
14226
  target: "events",
14222
14227
  label: "Brand-depth schedule details",
14223
- blockKinds: ["block.event-details", "block.course-details"],
14228
+ blockKinds: ["block.event-details"],
14224
14229
  design: {
14225
14230
  sectionSurface: "brand-depth-band",
14226
14231
  contentFrame: plainFrame,
@@ -20770,7 +20775,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
20770
20775
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
20771
20776
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
20772
20777
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
20773
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
20774
20778
  function bind(from, options) {
20775
20779
  return (node) => ({
20776
20780
  ...node,
@@ -30678,12 +30682,12 @@ const weeklySlotAvailabilityBlockDefinition = {
30678
30682
  };
30679
30683
  //#endregion
30680
30684
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
30681
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
30682
- const bookingInstalmentPlanSchema = z.union([
30685
+ const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
30686
+ const bookingInstalmentPlanSchema$1 = z.union([
30683
30687
  z.object({
30684
30688
  kind: z.literal("deposit_plus_one_remainder"),
30685
30689
  depositAmountCents: z.number().int().min(0),
30686
- depositRefundability: bookingDepositRefundPolicySchema,
30690
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30687
30691
  remainderDueCount: z.number().int().positive(),
30688
30692
  intervalUnit: z.enum([
30689
30693
  "day",
@@ -30694,7 +30698,7 @@ const bookingInstalmentPlanSchema = z.union([
30694
30698
  z.object({
30695
30699
  kind: z.literal("deposit_plus_scheduled_instalments"),
30696
30700
  depositAmountCents: z.number().int().min(0),
30697
- depositRefundability: bookingDepositRefundPolicySchema,
30701
+ depositRefundability: bookingDepositRefundPolicySchema$1,
30698
30702
  instalmentCount: z.number().int().positive(),
30699
30703
  intervalCount: z.number().int().positive(),
30700
30704
  intervalUnit: z.enum([
@@ -30714,32 +30718,50 @@ const bookingInstalmentPlanSchema = z.union([
30714
30718
  ])
30715
30719
  })
30716
30720
  ]);
30717
- const bookingFlexibleBalanceDueDateRuleSchema = z.union([z.object({
30721
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
30718
30722
  kind: z.literal("relative_to_start_date"),
30719
30723
  daysBeforeStart: z.number().int().positive()
30720
30724
  }), z.object({
30721
30725
  kind: z.literal("fixed_calendar_date"),
30722
30726
  dueAt: z.string().datetime()
30723
30727
  })]);
30724
- const bookingFlexibleBalanceConfigSchema = z.object({
30728
+ const bookingFlexibleBalanceConfigSchema$1 = z.object({
30725
30729
  upfrontAmountCents: z.number().int().min(0),
30726
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
30727
- depositRefundability: bookingDepositRefundPolicySchema
30730
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
30731
+ depositRefundability: bookingDepositRefundPolicySchema$1
30728
30732
  });
30729
30733
  const blockBookingPaymentCollectionOptionSchema = z.union([
30730
30734
  z.object({ kind: z.literal("upfront") }),
30731
30735
  z.object({ kind: z.literal("deferred_manual") }),
30732
30736
  z.object({
30733
30737
  kind: z.literal("instalment_plan"),
30734
- plan: bookingInstalmentPlanSchema
30738
+ plan: bookingInstalmentPlanSchema$1
30735
30739
  }),
30736
30740
  z.object({
30737
30741
  kind: z.literal("flexible_balance"),
30738
- config: bookingFlexibleBalanceConfigSchema
30742
+ config: bookingFlexibleBalanceConfigSchema$1
30739
30743
  })
30740
30744
  ]);
30741
30745
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
30742
30746
  //#endregion
30747
+ //#region ../blocks/src/system/blocks/shared/bookingConsent.ts
30748
+ const blockBookingConsentSchema = z.object({
30749
+ requirementId: z.string(),
30750
+ title: z.string(),
30751
+ agreement: RichTextDocSchema,
30752
+ checkboxLabel: z.string()
30753
+ });
30754
+ const bookingRequirementConsentFieldSchema = z.object({
30755
+ id: z.string(),
30756
+ label: z.string(),
30757
+ type: z.literal("booking_requirement_consent"),
30758
+ required: z.literal(true),
30759
+ agreement: RichTextDocSchema,
30760
+ checkboxLabel: z.string().min(1)
30761
+ });
30762
+ /** The two live public carriers for consent copy: Event data and appointment fields. */
30763
+ const bookingConsentCarrierSchema = z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
30764
+ //#endregion
30743
30765
  //#region ../blocks/src/system/blocks/events/whole-series/pricing.ts
30744
30766
  function isSaleWindowOpen(option, now) {
30745
30767
  if (!option.isActive) return false;
@@ -30973,11 +30995,19 @@ const publicWholeSeriesOfferingSchema = z.object({
30973
30995
  title: z.string(),
30974
30996
  slug: z.string(),
30975
30997
  description: z.unknown().nullable(),
30998
+ deliveryMode: z.enum([
30999
+ "in_person",
31000
+ "online",
31001
+ "hybrid"
31002
+ ]),
31003
+ waitlistEnabled: z.boolean(),
31004
+ requireGuestDetails: z.boolean(),
30976
31005
  teamMembers: z.array(wholeSeriesTeamMemberSummarySchema).optional(),
30977
31006
  enrollmentOpen: z.boolean(),
30978
31007
  pricing: wholeSeriesPricingSchema,
30979
31008
  currency: z.string(),
30980
31009
  paymentTerms: blockBookingPaymentTermsSchema,
31010
+ consent: blockBookingConsentSchema.nullable(),
30981
31011
  enrollmentCapacity: z.number().nullable(),
30982
31012
  acceptsMemberships: z.boolean(),
30983
31013
  status: z.enum([
@@ -31087,7 +31117,7 @@ const mixedPriceDisplaySchema = z.object({
31087
31117
  paidToAmount: z.number(),
31088
31118
  currency: z.string()
31089
31119
  });
31090
- const publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
31120
+ const publicWholeSeriesPriceDisplaySchema = z.discriminatedUnion("kind", [
31091
31121
  freePriceDisplaySchema,
31092
31122
  exactPriceDisplaySchema,
31093
31123
  fromPriceDisplaySchema,
@@ -31105,8 +31135,8 @@ z.discriminatedUnion("kind", [
31105
31135
  label: z.string()
31106
31136
  }),
31107
31137
  z.object({
31108
- kind: z.literal("course"),
31109
- display: publicCoursePriceDisplaySchema
31138
+ kind: z.literal("whole_series"),
31139
+ display: publicWholeSeriesPriceDisplaySchema
31110
31140
  })
31111
31141
  ]);
31112
31142
  const publicEventTicketTypePriceDisplaySchema = z.union([
@@ -31208,10 +31238,10 @@ const publicEventPricingSchema = z.discriminatedUnion("kind", [
31208
31238
  })
31209
31239
  }),
31210
31240
  z.object({
31211
- kind: z.literal("course"),
31241
+ kind: z.literal("whole_series"),
31212
31242
  display: z.object({
31213
- kind: z.literal("course"),
31214
- display: publicCoursePriceDisplaySchema
31243
+ kind: z.literal("whole_series"),
31244
+ display: publicWholeSeriesPriceDisplaySchema
31215
31245
  })
31216
31246
  }),
31217
31247
  z.object({
@@ -31295,6 +31325,7 @@ const publicEventSchema = z.object({
31295
31325
  timeZone: z.string(),
31296
31326
  pricing: publicEventPricingSchema,
31297
31327
  paymentTerms: blockBookingPaymentTermsSchema,
31328
+ consent: blockBookingConsentSchema.nullable(),
31298
31329
  accessRestriction: accessRestrictionSchema,
31299
31330
  allowedCategoryIds: z.array(z.string()),
31300
31331
  requireGuestDetails: z.boolean().optional(),
@@ -31653,7 +31684,8 @@ function resolveEventRegistrationScope(context) {
31653
31684
  };
31654
31685
  return { kind: "unscoped" };
31655
31686
  }
31656
- function applyEventRegistrationScope(events, scope) {
31687
+ function resolveEventRegistrationScopedEvents(events, context) {
31688
+ const scope = resolveEventRegistrationScope(context);
31657
31689
  switch (scope.kind) {
31658
31690
  case "occurrenceSeries":
31659
31691
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -31665,8 +31697,24 @@ function applyEventRegistrationScope(events, scope) {
31665
31697
  case "unscoped": return [...events];
31666
31698
  }
31667
31699
  }
31668
- function resolveEventRegistrationScopedEvents(events, context) {
31669
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
31700
+ //#endregion
31701
+ //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
31702
+ function planEventRegistrationScope(input) {
31703
+ const subject = input.subject;
31704
+ const selectedRunOffering = input.wholeSeriesOffering;
31705
+ if (subject?.kind !== "eventOffering" || !selectedRunOffering) return {
31706
+ kind: "context",
31707
+ events: resolveEventRegistrationScopedEvents(input.events, {
31708
+ occurrenceContext: input.occurrenceContext,
31709
+ subject
31710
+ })
31711
+ };
31712
+ if (!(selectedRunOffering.eventOfferingId === subject.eventOfferingId && subject.availableEventSeriesIds.some((seriesId) => seriesId === selectedRunOffering.eventSeriesId))) return { kind: "invalidSelectedRun" };
31713
+ return {
31714
+ kind: "selectedRun",
31715
+ events: input.events.filter((event) => event.seriesId === selectedRunOffering.eventSeriesId),
31716
+ offering: selectedRunOffering
31717
+ };
31670
31718
  }
31671
31719
  //#endregion
31672
31720
  //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
@@ -31742,14 +31790,14 @@ function isRecord$11(value) {
31742
31790
  }
31743
31791
  function isPublicEventPricing(value) {
31744
31792
  if (!isRecord$11(value) || typeof value.kind !== "string") return false;
31745
- 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";
31793
+ 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";
31746
31794
  }
31747
31795
  function isPublicEventTicketType(value) {
31748
31796
  return isRecord$11(value) && typeof value.id === "string";
31749
31797
  }
31750
31798
  function readTicketTypePriceDisplay(value, currency) {
31751
31799
  const display = readLegacyPriceDisplay(value, currency);
31752
- return display.kind === "course" || display.kind === "external" ? {
31800
+ return display.kind === "whole_series" || display.kind === "external" ? {
31753
31801
  kind: "unavailable",
31754
31802
  currency
31755
31803
  } : display;
@@ -31807,11 +31855,11 @@ function readLegacyPriceDisplay(value, currency) {
31807
31855
  kind: "unavailable",
31808
31856
  currency: displayCurrency
31809
31857
  };
31810
- case "course": return isRecord$11(value.display) ? {
31811
- kind: "course",
31858
+ case "whole_series": return isRecord$11(value.display) ? {
31859
+ kind: "whole_series",
31812
31860
  display: readCoursePriceDisplay(value.display, displayCurrency)
31813
31861
  } : {
31814
- kind: "course",
31862
+ kind: "whole_series",
31815
31863
  display: {
31816
31864
  kind: "unavailable",
31817
31865
  currency: displayCurrency
@@ -31937,7 +31985,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
31937
31985
  //#endregion
31938
31986
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
31939
31987
  function eventMatchesOccurrenceId(event, occurrenceId) {
31940
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
31988
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
31941
31989
  }
31942
31990
  function findPreSelectedEvent(input) {
31943
31991
  const occurrenceContext = input.occurrenceContext;
@@ -31963,12 +32011,127 @@ function toRegistrationEvent(event) {
31963
32011
  return {
31964
32012
  ...event,
31965
32013
  pricing: resolveRuntimeEventPricing(event),
31966
- publicEventId: event.id,
31967
- registrationOccurrenceId: event.occurrenceId
32014
+ selectionId: event.id,
32015
+ registrationSubject: {
32016
+ kind: "occurrence",
32017
+ occurrenceId: event.occurrenceId
32018
+ }
31968
32019
  };
31969
32020
  }
31970
32021
  function toRegistrationEvents(events) {
31971
- return events.map(toRegistrationEvent);
32022
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
32023
+ }
32024
+ function toWholeSeriesTicketType(option) {
32025
+ return {
32026
+ ...option,
32027
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
32028
+ attendanceScope: option.attendanceScope ?? void 0,
32029
+ availability: {
32030
+ kind: "available",
32031
+ remainingCapacity: option.capacityLimit
32032
+ }
32033
+ };
32034
+ }
32035
+ function toWholeSeriesPricing(offering) {
32036
+ const resolved = resolveWholeSeriesPricingState(offering);
32037
+ switch (offering.pricing.pricingStrategy) {
32038
+ case "free": return {
32039
+ kind: "free_registration",
32040
+ currency: offering.currency,
32041
+ display: {
32042
+ kind: "free",
32043
+ currency: offering.currency
32044
+ }
32045
+ };
32046
+ case "single": {
32047
+ const amount = offering.pricing.singlePriceAmount ?? 0;
32048
+ return amount === 0 ? {
32049
+ kind: "free_registration",
32050
+ currency: offering.currency,
32051
+ display: {
32052
+ kind: "free",
32053
+ currency: offering.currency
32054
+ }
32055
+ } : {
32056
+ kind: "single_paid",
32057
+ amount,
32058
+ currency: offering.currency,
32059
+ display: {
32060
+ kind: "exact",
32061
+ amount,
32062
+ currency: offering.currency
32063
+ }
32064
+ };
32065
+ }
32066
+ case "tiered": return {
32067
+ kind: "ticket_types",
32068
+ currency: offering.currency,
32069
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
32070
+ display: resolved.display
32071
+ };
32072
+ case "sliding_scale": return {
32073
+ kind: "sliding_scale",
32074
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32075
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32076
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
32077
+ currency: offering.currency,
32078
+ display: {
32079
+ kind: "range",
32080
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
32081
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
32082
+ currency: offering.currency
32083
+ }
32084
+ };
32085
+ }
32086
+ }
32087
+ function toAttendanceModes(offering) {
32088
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
32089
+ mode,
32090
+ capacity: offering.enrollmentCapacity,
32091
+ registeredCount: offering.enrolledCount,
32092
+ availableSpots: offering.availableSpots,
32093
+ waitlistEnabled: offering.waitlistEnabled
32094
+ }));
32095
+ }
32096
+ function toWholeSeriesRegistrationEvent(offering) {
32097
+ const firstSession = offering.sessions[0];
32098
+ const lastSession = offering.sessions[offering.sessions.length - 1];
32099
+ return {
32100
+ selectionId: offering.eventSeriesId,
32101
+ registrationSubject: {
32102
+ kind: "wholeSeries",
32103
+ eventSeriesId: offering.eventSeriesId,
32104
+ sessions: offering.sessions
32105
+ },
32106
+ seriesId: offering.eventSeriesId,
32107
+ title: offering.title,
32108
+ startsAt: firstSession?.startsAt ?? "",
32109
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
32110
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
32111
+ kind: "closed",
32112
+ reason: "enrollment_closed"
32113
+ },
32114
+ deliveryMode: offering.deliveryMode,
32115
+ attendanceModes: toAttendanceModes(offering),
32116
+ capacity: offering.enrollmentCapacity,
32117
+ registeredCount: offering.enrolledCount,
32118
+ availableSpots: offering.availableSpots,
32119
+ waitlistEnabled: offering.waitlistEnabled,
32120
+ venue: offering.venue ? {
32121
+ ...offering.venue,
32122
+ location: null
32123
+ } : null,
32124
+ eventCategory: null,
32125
+ teamMembers: offering.teamMembers,
32126
+ status: offering.status,
32127
+ timeZone: firstSession?.timeZone ?? "UTC",
32128
+ pricing: toWholeSeriesPricing(offering),
32129
+ paymentTerms: offering.paymentTerms,
32130
+ consent: offering.consent,
32131
+ requireGuestDetails: offering.requireGuestDetails,
32132
+ acceptsPasses: false,
32133
+ acceptsMemberships: offering.acceptsMemberships
32134
+ };
31972
32135
  }
31973
32136
  //#endregion
31974
32137
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -31994,11 +32157,7 @@ const eventRegistrationHydrationSchemaShape = {
31994
32157
  maxTickets: z.string().optional(),
31995
32158
  showVenue: z.boolean().optional(),
31996
32159
  showCapacity: z.boolean().optional(),
31997
- showSessions: z.boolean().optional(),
31998
- showPrice: z.boolean().optional(),
31999
32160
  successMessage: z.string().optional(),
32000
- waitlistMessage: z.string().optional(),
32001
- membershipMessage: z.string().optional(),
32002
32161
  buttonVariant: registrationButtonVariantSchema.optional(),
32003
32162
  overlayEnabled: z.boolean().optional(),
32004
32163
  spamProtectionEnabled: z.boolean().optional(),
@@ -32068,6 +32227,15 @@ function resolveWholeSeriesOffering(source) {
32068
32227
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
32069
32228
  }
32070
32229
  function buildEventRegistrationShellStepLabels(source) {
32230
+ const selectedOffering = resolveWholeSeriesOffering(source);
32231
+ if (selectedOffering) {
32232
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
32233
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
32234
+ eligibility: null,
32235
+ selectedTicketType: null,
32236
+ event: selectedEvent
32237
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
32238
+ }
32071
32239
  const scopedEvents = scopeEventRegistrationEvents(source);
32072
32240
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
32073
32241
  const preSelectedEvent = findPreSelectedEvent({
@@ -32082,10 +32250,13 @@ function buildEventRegistrationShellStepLabels(source) {
32082
32250
  }) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
32083
32251
  }
32084
32252
  function scopeEventRegistrationEvents(source) {
32085
- return resolveEventRegistrationScopedEvents(toRegistrationEvents(source.events ?? []), {
32253
+ const scope = planEventRegistrationScope({
32254
+ events: toRegistrationEvents(source.events ?? []),
32255
+ wholeSeriesOffering: source.wholeSeriesOffering,
32086
32256
  occurrenceContext: source.occurrenceContext,
32087
32257
  subject: source.subject
32088
32258
  });
32259
+ return scope.kind === "invalidSelectedRun" ? [] : scope.events;
32089
32260
  }
32090
32261
  function shellLabelForRegistrationStep(step, events) {
32091
32262
  switch (step) {
@@ -32128,11 +32299,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32128
32299
  maxTickets: source.maxTickets ?? void 0,
32129
32300
  showVenue: source.showVenue,
32130
32301
  showCapacity: source.showCapacity,
32131
- showSessions: source.showSessions,
32132
- showPrice: source.showPrice,
32133
32302
  successMessage: source.successMessage,
32134
- waitlistMessage: source.waitlistMessage,
32135
- membershipMessage: source.membershipMessage,
32136
32303
  buttonVariant: source.buttonVariant,
32137
32304
  overlayEnabled: source.overlayEnabled,
32138
32305
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -32262,24 +32429,6 @@ const eventRegistrationBlockDefinition = {
32262
32429
  defaultValue: true,
32263
32430
  ui: { intent: "display" }
32264
32431
  },
32265
- {
32266
- id: "showSessions",
32267
- type: "boolean",
32268
- label: "Show complete schedule",
32269
- description: "Display every session for whole-series registrations",
32270
- required: false,
32271
- defaultValue: true,
32272
- ui: { intent: "display" }
32273
- },
32274
- {
32275
- id: "showPrice",
32276
- type: "boolean",
32277
- label: "Show price",
32278
- description: "Display the whole-series price",
32279
- required: false,
32280
- defaultValue: true,
32281
- ui: { intent: "display" }
32282
- },
32283
32432
  {
32284
32433
  id: "successMessage",
32285
32434
  type: "text",
@@ -32290,26 +32439,6 @@ const eventRegistrationBlockDefinition = {
32290
32439
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
32291
32440
  maxLength: 500
32292
32441
  },
32293
- {
32294
- id: "waitlistMessage",
32295
- type: "text",
32296
- label: "Waitlist message",
32297
- description: "Message shown after joining a whole-series waitlist",
32298
- required: false,
32299
- multiline: true,
32300
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
32301
- maxLength: 500
32302
- },
32303
- {
32304
- id: "membershipMessage",
32305
- type: "text",
32306
- label: "Membership registration message",
32307
- description: "Message shown when a whole-series place is covered by membership",
32308
- required: false,
32309
- multiline: true,
32310
- defaultValue: "Registered using your membership. Check your email for session details.",
32311
- maxLength: 500
32312
- },
32313
32442
  {
32314
32443
  id: "buttonText",
32315
32444
  type: "text",
@@ -32341,11 +32470,7 @@ const eventRegistrationBlockDefinition = {
32341
32470
  } },
32342
32471
  showVenue: { $bind: { from: "content.showVenue" } },
32343
32472
  showCapacity: { $bind: { from: "content.showCapacity" } },
32344
- showSessions: { $bind: { from: "content.showSessions" } },
32345
- showPrice: { $bind: { from: "content.showPrice" } },
32346
32473
  successMessage: { $bind: { from: "content.successMessage" } },
32347
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32348
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32349
32474
  buttonText: { $bind: {
32350
32475
  from: "content.buttonText",
32351
32476
  fallback: "Complete Registration"
@@ -32462,267 +32587,6 @@ const eventRegistrationBlockDefinition = {
32462
32587
  }
32463
32588
  };
32464
32589
  //#endregion
32465
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
32466
- const courseRegistrationHydrationSchemaShape = {
32467
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
32468
- courses: z.array(publicWholeSeriesOfferingSchema).nullable().optional(),
32469
- showSessions: z.boolean().optional(),
32470
- showPrice: z.boolean().optional(),
32471
- showCapacity: z.boolean().optional(),
32472
- showVenue: z.boolean().optional(),
32473
- successMessage: z.string().optional(),
32474
- waitlistMessage: z.string().optional(),
32475
- membershipMessage: z.string().optional(),
32476
- buttonVariant: registrationButtonVariantSchema.optional()
32477
- };
32478
- const courseRegistrationSourceSchema = z.object({
32479
- siteId: z.string().optional(),
32480
- apiBaseUrl: z.string().optional(),
32481
- portalToken: z.string().nullable().optional(),
32482
- ...courseRegistrationHydrationSchemaShape,
32483
- className: z.string().nullable().optional(),
32484
- buttonText: z.string().nullable().optional(),
32485
- stage: previewStageSchema.optional()
32486
- });
32487
- const courseRegistrationDisplaySchema = z.object({
32488
- kind: z.literal("course-registration"),
32489
- state: z.literal("shell"),
32490
- className: z.string().nullable(),
32491
- summaryButtonText: z.string()
32492
- });
32493
- const courseRegistrationHydrationSchema = z.object(courseRegistrationHydrationSchemaShape);
32494
- const courseRegistrationRenderSchema = z.object({
32495
- display: courseRegistrationDisplaySchema,
32496
- hydration: courseRegistrationHydrationSchema
32497
- });
32498
- z.object({
32499
- siteId: z.string().optional(),
32500
- apiBaseUrl: z.string().optional(),
32501
- portalToken: z.string().nullable().optional(),
32502
- stage: previewStageSchema.optional()
32503
- });
32504
- function buildCourseRegistrationDisplay(source) {
32505
- return {
32506
- kind: "course-registration",
32507
- state: "shell",
32508
- className: source.className ?? null,
32509
- summaryButtonText: source.buttonText?.trim() || "Sign up"
32510
- };
32511
- }
32512
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
32513
- kind: "client-owned",
32514
- contracts: {
32515
- source: createZodCodec(courseRegistrationSourceSchema),
32516
- render: createZodCodec(courseRegistrationRenderSchema)
32517
- },
32518
- buildRender: (source) => ({
32519
- display: buildCourseRegistrationDisplay(source),
32520
- hydration: {
32521
- subject: source.subject ?? null,
32522
- courses: source.courses ?? null,
32523
- showSessions: source.showSessions,
32524
- showPrice: source.showPrice,
32525
- showCapacity: source.showCapacity,
32526
- showVenue: source.showVenue,
32527
- successMessage: source.successMessage,
32528
- waitlistMessage: source.waitlistMessage,
32529
- membershipMessage: source.membershipMessage,
32530
- buttonVariant: source.buttonVariant
32531
- }
32532
- })
32533
- });
32534
- function buildCourseRegistrationInteractiveIslandProps(props) {
32535
- return buildInteractiveIslandProps({
32536
- runtime: courseRegistrationBlockRuntime,
32537
- mode: "course-registration",
32538
- meta: {
32539
- siteId: props.siteId,
32540
- apiBaseUrl: props.apiBaseUrl,
32541
- portalToken: props.portalToken,
32542
- stage: props.stage
32543
- },
32544
- source: props
32545
- });
32546
- }
32547
- const courseRegistrationBlockDefinition = {
32548
- manifest: createBlockManifest({
32549
- id: "block.course-registration",
32550
- version: "1.0.0",
32551
- title: "Course Registration",
32552
- titleSource: "heading",
32553
- description: "Enrollment form for multi-session courses",
32554
- category: "interactive",
32555
- contentSource: { kind: "inline" },
32556
- tags: [
32557
- "courses",
32558
- "enrollment",
32559
- "booking",
32560
- "form",
32561
- "signup",
32562
- "education"
32563
- ],
32564
- icon: "GraduationCap",
32565
- styleTokens: {
32566
- background: "surface",
32567
- typography: "body",
32568
- spacing: "md"
32569
- },
32570
- behaviours: {
32571
- supportsThemeSwitching: true,
32572
- inlineEditing: false,
32573
- animation: false,
32574
- paletteHidden: false
32575
- },
32576
- additionalFields: [
32577
- {
32578
- id: "heading",
32579
- type: "text",
32580
- label: "Heading",
32581
- description: "Main heading for the registration form",
32582
- required: false,
32583
- multiline: false,
32584
- defaultValue: "Sign up"
32585
- },
32586
- {
32587
- id: "description",
32588
- type: "richText",
32589
- label: "Description",
32590
- description: "Optional introductory text",
32591
- required: false
32592
- },
32593
- {
32594
- id: "showSessions",
32595
- type: "boolean",
32596
- label: "Show sessions",
32597
- description: "Display the list of course sessions",
32598
- required: false,
32599
- defaultValue: true,
32600
- ui: { intent: "display" }
32601
- },
32602
- {
32603
- id: "showPrice",
32604
- type: "boolean",
32605
- label: "Show price",
32606
- description: "Display the course price",
32607
- required: false,
32608
- defaultValue: true,
32609
- ui: { intent: "display" }
32610
- },
32611
- {
32612
- id: "showCapacity",
32613
- type: "boolean",
32614
- label: "Show available spots",
32615
- description: "Display remaining enrollment capacity",
32616
- required: false,
32617
- defaultValue: true,
32618
- ui: { intent: "display" }
32619
- },
32620
- {
32621
- id: "showVenue",
32622
- type: "boolean",
32623
- label: "Show venue",
32624
- description: "Display venue information",
32625
- required: false,
32626
- defaultValue: true,
32627
- ui: { intent: "display" }
32628
- },
32629
- {
32630
- id: "successMessage",
32631
- type: "text",
32632
- label: "Success message",
32633
- description: "Message shown after successful enrollment",
32634
- required: false,
32635
- multiline: true,
32636
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
32637
- maxLength: 500
32638
- },
32639
- {
32640
- id: "waitlistMessage",
32641
- type: "text",
32642
- label: "Waitlist message",
32643
- description: "Message when added to waitlist",
32644
- required: false,
32645
- multiline: true,
32646
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
32647
- maxLength: 500
32648
- },
32649
- {
32650
- id: "membershipMessage",
32651
- type: "text",
32652
- label: "Membership enrollment message",
32653
- description: "Message when enrolled using a membership",
32654
- required: false,
32655
- multiline: true,
32656
- defaultValue: "Enrolled using your membership! Check your email for session details.",
32657
- maxLength: 500
32658
- },
32659
- {
32660
- id: "buttonText",
32661
- type: "text",
32662
- label: "Submit button text",
32663
- description: "Text for the enrollment submit button",
32664
- required: false,
32665
- multiline: false,
32666
- defaultValue: "Sign up",
32667
- maxLength: 40
32668
- },
32669
- createButtonVariantField()
32670
- ],
32671
- layout: [styledSection({
32672
- baseClass: "",
32673
- spacing: "spacious",
32674
- children: sectionContainer([
32675
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
32676
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
32677
- courseRegistration(withApiBindings({
32678
- subject: { $bind: {
32679
- from: "$root.subject",
32680
- fallback: null
32681
- } },
32682
- portalToken: { $bind: {
32683
- from: "$root.portalToken",
32684
- fallback: null
32685
- } },
32686
- showSessions: { $bind: { from: "content.showSessions" } },
32687
- showPrice: { $bind: { from: "content.showPrice" } },
32688
- showCapacity: { $bind: { from: "content.showCapacity" } },
32689
- showVenue: { $bind: { from: "content.showVenue" } },
32690
- successMessage: { $bind: { from: "content.successMessage" } },
32691
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
32692
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
32693
- buttonText: { $bind: {
32694
- from: "content.buttonText",
32695
- fallback: "Sign up"
32696
- } },
32697
- buttonVariant: { $bind: {
32698
- from: "content.buttonVariant",
32699
- fallback: "primary"
32700
- } },
32701
- courses: { $bind: { from: "data.courses" } },
32702
- stage: { $bind: {
32703
- from: "$root.previewStage",
32704
- fallback: "published"
32705
- } }
32706
- }))
32707
- ], { gap: "lg" })
32708
- })]
32709
- }),
32710
- runtime: courseRegistrationBlockRuntime,
32711
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
32712
- dataLoaders: { courses: {
32713
- endpoint: "listPublicWholeSeriesOfferings",
32714
- params: {
32715
- siteId: { $bind: { from: "$root.siteId" } },
32716
- limit: "50",
32717
- stage: { $bind: {
32718
- from: "$root.previewStage",
32719
- fallback: "published"
32720
- } }
32721
- },
32722
- mode: "server"
32723
- } }
32724
- };
32725
- //#endregion
32726
32590
  //#region ../blocks/src/system/blocks/event-details.ts
32727
32591
  /**
32728
32592
  * Event Details Block
@@ -32969,200 +32833,6 @@ const eventDetailsBlockDefinition = {
32969
32833
  mode: "server"
32970
32834
  } }
32971
32835
  };
32972
- const courseDetailsBlockDefinition = {
32973
- manifest: createBlockManifest({
32974
- id: "block.course-details",
32975
- version: "1.0.0",
32976
- title: "Course Details",
32977
- titleSource: "heading",
32978
- description: "Schedule, venue, price, and enrollment status for a course",
32979
- category: "content",
32980
- contentSource: { kind: "entries" },
32981
- tags: [
32982
- "courses",
32983
- "schedule",
32984
- "sessions",
32985
- "venue",
32986
- "pricing"
32987
- ],
32988
- icon: "GraduationCap",
32989
- styleTokens: {
32990
- background: "surface",
32991
- typography: "body",
32992
- spacing: "md"
32993
- },
32994
- behaviours: {
32995
- supportsThemeSwitching: true,
32996
- inlineEditing: false,
32997
- animation: false,
32998
- paletteHidden: false
32999
- },
33000
- additionalFields: [
33001
- {
33002
- id: "heading",
33003
- type: "text",
33004
- label: "Heading",
33005
- description: "Optional heading shown above course details",
33006
- required: false,
33007
- multiline: false,
33008
- defaultValue: "Course details"
33009
- },
33010
- {
33011
- id: "showTitle",
33012
- type: "boolean",
33013
- label: "Show course title",
33014
- required: false,
33015
- defaultValue: false,
33016
- ui: { intent: "display" }
33017
- },
33018
- {
33019
- id: "showDescription",
33020
- type: "boolean",
33021
- label: "Show course description",
33022
- description: "Render the course description from the bookings course record",
33023
- required: false,
33024
- defaultValue: false,
33025
- ui: { intent: "display" }
33026
- },
33027
- {
33028
- id: "showSessions",
33029
- type: "boolean",
33030
- label: "Show sessions",
33031
- required: false,
33032
- defaultValue: true,
33033
- ui: { intent: "display" }
33034
- },
33035
- {
33036
- id: "sessionsLimit",
33037
- type: "select",
33038
- label: "Sessions limit",
33039
- required: false,
33040
- multiple: false,
33041
- defaultValue: "10",
33042
- options: [
33043
- {
33044
- value: "3",
33045
- label: "3 sessions"
33046
- },
33047
- {
33048
- value: "5",
33049
- label: "5 sessions"
33050
- },
33051
- {
33052
- value: "10",
33053
- label: "10 sessions"
33054
- },
33055
- {
33056
- value: "all",
33057
- label: "All sessions"
33058
- }
33059
- ],
33060
- ui: { intent: "display" }
33061
- },
33062
- {
33063
- id: "showVenue",
33064
- type: "boolean",
33065
- label: "Show venue",
33066
- required: false,
33067
- defaultValue: true,
33068
- ui: { intent: "display" }
33069
- },
33070
- {
33071
- id: "showPrice",
33072
- type: "boolean",
33073
- label: "Show price",
33074
- required: false,
33075
- defaultValue: true,
33076
- ui: { intent: "display" }
33077
- },
33078
- {
33079
- id: "showCapacity",
33080
- type: "boolean",
33081
- label: "Show capacity",
33082
- required: false,
33083
- defaultValue: true,
33084
- ui: { intent: "display" }
33085
- },
33086
- {
33087
- id: "showEnrollmentStatus",
33088
- type: "boolean",
33089
- label: "Show enrollment status",
33090
- required: false,
33091
- defaultValue: true,
33092
- ui: { intent: "display" }
33093
- },
33094
- {
33095
- id: "showMembershipNote",
33096
- type: "boolean",
33097
- label: "Show membership note",
33098
- description: "Indicate when memberships can be used for free enrollment",
33099
- required: false,
33100
- defaultValue: true,
33101
- ui: { intent: "display" }
33102
- }
33103
- ],
33104
- layout: [styledSection({
33105
- baseClass: "",
33106
- spacing: "spacious",
33107
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
33108
- subject: { $bind: {
33109
- from: "$root.subject",
33110
- fallback: null
33111
- } },
33112
- courses: { $bind: { from: "data.courses" } },
33113
- showTitle: { $bind: {
33114
- from: "content.showTitle",
33115
- fallback: false
33116
- } },
33117
- showDescription: { $bind: {
33118
- from: "content.showDescription",
33119
- fallback: false
33120
- } },
33121
- showSessions: { $bind: {
33122
- from: "content.showSessions",
33123
- fallback: true
33124
- } },
33125
- sessionsLimit: { $bind: {
33126
- from: "content.sessionsLimit",
33127
- fallback: "10"
33128
- } },
33129
- showVenue: { $bind: {
33130
- from: "content.showVenue",
33131
- fallback: true
33132
- } },
33133
- showPrice: { $bind: {
33134
- from: "content.showPrice",
33135
- fallback: true
33136
- } },
33137
- showCapacity: { $bind: {
33138
- from: "content.showCapacity",
33139
- fallback: true
33140
- } },
33141
- showEnrollmentStatus: { $bind: {
33142
- from: "content.showEnrollmentStatus",
33143
- fallback: true
33144
- } },
33145
- showMembershipNote: { $bind: {
33146
- from: "content.showMembershipNote",
33147
- fallback: true
33148
- } }
33149
- })], { gap: "lg" })
33150
- })]
33151
- }),
33152
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
33153
- dataLoaders: { courses: {
33154
- endpoint: "listPublicWholeSeriesOfferings",
33155
- params: {
33156
- siteId: { $bind: { from: "$root.siteId" } },
33157
- limit: "50",
33158
- stage: { $bind: {
33159
- from: "$root.previewStage",
33160
- fallback: "published"
33161
- } }
33162
- },
33163
- mode: "server"
33164
- } }
33165
- };
33166
32836
  const eventSpotlightBlockDefinition = {
33167
32837
  manifest: createBlockManifest({
33168
32838
  id: "block.event-spotlight",
@@ -38086,6 +37756,7 @@ function normalizeGroupPresentation(value) {
38086
37756
  function resolveAutoCtaPath(source, routes) {
38087
37757
  const routeByNormalizedPath = /* @__PURE__ */ new Map();
38088
37758
  for (const route of routes ?? []) {
37759
+ if (route.kind === "pageSurface") continue;
38089
37760
  const normalized = normalizeRoutePath(route.path);
38090
37761
  if (normalized && !routeByNormalizedPath.has(normalized)) routeByNormalizedPath.set(normalized, route.path);
38091
37762
  }
@@ -38136,7 +37807,7 @@ const publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
38136
37807
  entityId: z.string(),
38137
37808
  path: z.string(),
38138
37809
  title: z.string(),
38139
- kind: z.enum(["page", "content"]),
37810
+ kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
38140
37811
  contentTypeKey: z.string().nullable().optional()
38141
37812
  })) });
38142
37813
  const groupOverrideFields = [
@@ -38413,7 +38084,7 @@ const offeringsPreviewManifest = createBlockManifest({
38413
38084
  fallback: "published"
38414
38085
  } },
38415
38086
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
38416
- courses: { $bind: { from: "data.courses" } },
38087
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
38417
38088
  ...offeringsPreviewEventDataBindings
38418
38089
  })
38419
38090
  ], { gap: "lg" }),
@@ -38430,7 +38101,7 @@ const offeringsPreviewBlockDefinition = {
38430
38101
  dataSchemas: {
38431
38102
  ...offeringsPreviewEventDataSchemas,
38432
38103
  routeCandidates: publicRouteCandidatesSchema.optional(),
38433
- courses: publicWholeSeriesOfferingsArraySchema.optional()
38104
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
38434
38105
  },
38435
38106
  dataLoaders: {
38436
38107
  ...offeringsPreviewEventDataLoaders,
@@ -38439,7 +38110,7 @@ const offeringsPreviewBlockDefinition = {
38439
38110
  params: {},
38440
38111
  mode: "server"
38441
38112
  },
38442
- courses: {
38113
+ wholeSeriesOfferings: {
38443
38114
  endpoint: "listPublicWholeSeriesOfferings",
38444
38115
  params: {
38445
38116
  siteId: { $bind: { from: "$root.siteId" } },
@@ -43523,22 +43194,6 @@ const systemBlockDefinitions = [
43523
43194
  weight: "standard"
43524
43195
  })]
43525
43196
  })),
43526
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
43527
- flow: conversionFlow,
43528
- layoutProfiles: [layoutProfile({
43529
- variantKey: "default",
43530
- family: "form",
43531
- weight: "standard"
43532
- })]
43533
- })),
43534
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
43535
- flow: offeringsFlow,
43536
- layoutProfiles: [layoutProfile({
43537
- variantKey: "default",
43538
- family: "stack",
43539
- weight: "standard"
43540
- })]
43541
- })),
43542
43197
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
43543
43198
  flow: offeringsFlow,
43544
43199
  layoutProfiles: [layoutProfile({
@@ -44605,7 +44260,7 @@ function normalizeRel(target, rel) {
44605
44260
  tokens.add("noreferrer");
44606
44261
  return Array.from(tokens).join(" ");
44607
44262
  }
44608
- function renderMarks(text, marks, key) {
44263
+ function renderMarks(text, marks, key, linkTarget) {
44609
44264
  if (!marks || marks.length === 0) return text;
44610
44265
  return marks.reduce((acc, mark) => {
44611
44266
  switch (mark.type) {
@@ -44618,7 +44273,8 @@ function renderMarks(text, marks, key) {
44618
44273
  const attrs = mark.attrs ?? {};
44619
44274
  const href = sanitizeHref(attrs.href);
44620
44275
  if (!href) return acc;
44621
- const target = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : void 0;
44276
+ const storedTarget = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : void 0;
44277
+ const target = linkTarget === "new-tab" ? "_blank" : storedTarget;
44622
44278
  return /* @__PURE__ */ jsx("a", {
44623
44279
  href,
44624
44280
  target,
@@ -44630,14 +44286,14 @@ function renderMarks(text, marks, key) {
44630
44286
  }
44631
44287
  }, text);
44632
44288
  }
44633
- function renderDoc(node, key, imageResolveContext) {
44289
+ function renderDoc(node, key, imageResolveContext, linkTarget) {
44634
44290
  if (!node || !node.type) return null;
44635
- const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext));
44291
+ const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext, linkTarget));
44636
44292
  switch (node.type) {
44637
44293
  case "doc": return /* @__PURE__ */ jsx(Fragment, { children });
44638
44294
  case "paragraph":
44639
44295
  if (!children && !node.text) return /* @__PURE__ */ jsx("p", {}, key);
44640
- return /* @__PURE__ */ jsx("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key) }, key);
44296
+ return /* @__PURE__ */ jsx("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key, linkTarget) }, key);
44641
44297
  case "heading": {
44642
44298
  const headingTag = `h${Math.min(Math.max(node.attrs?.level ?? 2, 1), 6)}`;
44643
44299
  return React.createElement(headingTag, { key }, children);
@@ -44679,14 +44335,14 @@ function renderDoc(node, key, imageResolveContext) {
44679
44335
  decoding: "async"
44680
44336
  }, key);
44681
44337
  }
44682
- case "text": return renderMarks(node.text ?? "", node.marks, key);
44338
+ case "text": return renderMarks(node.text ?? "", node.marks, key, linkTarget);
44683
44339
  default: return null;
44684
44340
  }
44685
44341
  }
44686
44342
  const DEFAULT_RICH_TEXT_CLASS = "rb-prose rb-max-w-none";
44687
- function RichText({ as: Comp = "div", className, doc, path }) {
44343
+ function RichText({ as: Comp = "div", className, doc, path, linkTarget = "stored" }) {
44688
44344
  const imageResolveContext = getCurrentResolveImageUrlContext() ?? null;
44689
- const content = doc ? renderDoc(doc, "doc", imageResolveContext) : null;
44345
+ const content = doc ? renderDoc(doc, "doc", imageResolveContext, linkTarget) : null;
44690
44346
  const dataAttributes = path ? { "data-builder-richtext": path } : void 0;
44691
44347
  return /* @__PURE__ */ jsx(Comp, {
44692
44348
  className: className?.trim() || DEFAULT_RICH_TEXT_CLASS,
@@ -46024,7 +45680,6 @@ function readBookingFieldType(value) {
46024
45680
  case "select":
46025
45681
  case "radio":
46026
45682
  case "checkbox":
46027
- case "booking_requirement_consent":
46028
45683
  case "tel":
46029
45684
  case "url":
46030
45685
  case "number":
@@ -46059,7 +45714,7 @@ function normalizeBookingSettings(value) {
46059
45714
  };
46060
45715
  }
46061
45716
  function isBookingFormService(value) {
46062
- return isRecord$5(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
45717
+ return isRecord$5(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string" && (value.consent === void 0 || blockBookingConsentSchema.safeParse(value.consent).success);
46063
45718
  }
46064
45719
  function readNonEmptyString(value) {
46065
45720
  if (typeof value !== "string") return null;
@@ -46086,6 +45741,15 @@ const bookingFieldOptionSchema = z.object({
46086
45741
  value: z.string(),
46087
45742
  label: z.string()
46088
45743
  });
45744
+ const standardBookingFieldRules = {
45745
+ options: z.array(bookingFieldOptionSchema).optional(),
45746
+ multiple: z.boolean().optional(),
45747
+ minLength: z.number().optional(),
45748
+ maxLength: z.number().optional(),
45749
+ pattern: z.string().optional(),
45750
+ min: z.number().optional(),
45751
+ max: z.number().optional()
45752
+ };
46089
45753
  const bookingFieldSchema = z.object({
46090
45754
  id: z.string(),
46091
45755
  label: z.string(),
@@ -46096,7 +45760,6 @@ const bookingFieldSchema = z.object({
46096
45760
  "select",
46097
45761
  "radio",
46098
45762
  "checkbox",
46099
- "booking_requirement_consent",
46100
45763
  "tel",
46101
45764
  "url",
46102
45765
  "number",
@@ -46106,13 +45769,7 @@ const bookingFieldSchema = z.object({
46106
45769
  required: z.boolean().optional(),
46107
45770
  placeholder: z.string().optional(),
46108
45771
  helpText: z.string().optional(),
46109
- options: z.array(bookingFieldOptionSchema).optional(),
46110
- multiple: z.boolean().optional(),
46111
- minLength: z.number().optional(),
46112
- maxLength: z.number().optional(),
46113
- pattern: z.string().optional(),
46114
- min: z.number().optional(),
46115
- max: z.number().optional()
45772
+ ...standardBookingFieldRules
46116
45773
  });
46117
45774
  const bookingSettingsSchema = z.object({
46118
45775
  type: z.literal("booking"),
@@ -46155,7 +45812,8 @@ const bookingServiceSchema = z.object({
46155
45812
  priceAmount: z.number().nullable().optional(),
46156
45813
  priceCurrency: z.string().nullable().optional(),
46157
45814
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
46158
- paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional()
45815
+ paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional(),
45816
+ consent: blockBookingConsentSchema.optional()
46159
45817
  });
46160
45818
  const bookingServicesSourceSchema = z.union([
46161
45819
  z.array(bookingServiceSchema),
@@ -46421,7 +46079,7 @@ function emptySelection(timeZone) {
46421
46079
  timeZone
46422
46080
  };
46423
46081
  }
46424
- function parseLimit$1(value, fallback) {
46082
+ function parseLimit(value, fallback) {
46425
46083
  if (value === "all") return Number.MAX_SAFE_INTEGER;
46426
46084
  const n = typeof value === "string" ? parseInt(value, 10) : typeof value === "number" ? value : NaN;
46427
46085
  return Number.isFinite(n) && n > 0 ? n : fallback;
@@ -46504,7 +46162,7 @@ function selectEventDetails(args) {
46504
46162
  subject: args.subject
46505
46163
  }));
46506
46164
  const occurrenceContext = args.occurrenceContext ?? null;
46507
- const otherLimit = parseLimit$1(args.otherDatesLimit, 5);
46165
+ const otherLimit = parseLimit(args.otherDatesLimit, 5);
46508
46166
  const candidate = selectEventCandidate(all, occurrenceContext, args.nowIso);
46509
46167
  const timeZone = toBookingTimeZone(candidate?.event.timeZone ?? all[0]?.timeZone ?? null);
46510
46168
  if (!candidate) return emptySelection(timeZone);
@@ -46583,7 +46241,7 @@ function resolveEventDetailsPresentation(input) {
46583
46241
  //#region ../blocks/src/system/runtime/nodes/events/shared/DateTimeTile.tsx
46584
46242
  /**
46585
46243
  * Shared tile content for displaying date and time range.
46586
- * Used by event-details "Other dates" and course-details "Sessions".
46244
+ * Used by event-details "Other dates".
46587
46245
  */
46588
46246
  function DateTimeTile({ startsAt, endsAt, timeZone }) {
46589
46247
  const { date, timeRange } = formatEventDateParts({
@@ -46603,8 +46261,8 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
46603
46261
  });
46604
46262
  }
46605
46263
  //#endregion
46606
- //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
46607
- function CoursePricingDisplay({ pricing, acceptedItems }) {
46264
+ //#region ../blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.tsx
46265
+ function WholeSeriesPricingDisplay({ pricing, acceptedItems }) {
46608
46266
  return /* @__PURE__ */ jsxs("div", {
46609
46267
  className: "rb-mt-6",
46610
46268
  children: [
@@ -46616,7 +46274,8 @@ function CoursePricingDisplay({ pricing, acceptedItems }) {
46616
46274
  className: "rb-flex rb-flex-col rb-gap-2",
46617
46275
  children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
46618
46276
  option.name,
46619
- ": ",
46277
+ ":",
46278
+ " ",
46620
46279
  formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
46621
46280
  ] }), option.description ? /* @__PURE__ */ jsx("p", {
46622
46281
  className: "rb-caption status-muted",
@@ -46637,7 +46296,7 @@ function formatAutoApplyDiscountLine(preview, currency) {
46637
46296
  const label = preview.publicLabel.trim() || "Discount";
46638
46297
  return preview.minTicketsRequired && preview.minTicketsRequired > 1 ? `${label} — ${rate} when buying ${preview.minTicketsRequired}+ tickets` : `${label} — ${rate} applied automatically`;
46639
46298
  }
46640
- function TeamMemberName$1({ name, profilePath }) {
46299
+ function TeamMemberName({ name, profilePath }) {
46641
46300
  return profilePath ? /* @__PURE__ */ jsx("a", {
46642
46301
  href: profilePath,
46643
46302
  className: "rb-hover-opacity-80",
@@ -46674,7 +46333,7 @@ function EventPricingDetails({ isDropIn, coursePricing, acceptedItems, eventCost
46674
46333
  children: "No registration required - just show up"
46675
46334
  })]
46676
46335
  });
46677
- if (coursePricing) return /* @__PURE__ */ jsx(CoursePricingDisplay, {
46336
+ if (coursePricing) return /* @__PURE__ */ jsx(WholeSeriesPricingDisplay, {
46678
46337
  pricing: coursePricing,
46679
46338
  acceptedItems: [...acceptedItems]
46680
46339
  });
@@ -46749,7 +46408,7 @@ function EventFacts({ selection, selected, venue, teamMembers, pricing, showCapa
46749
46408
  children: "With"
46750
46409
  }), /* @__PURE__ */ jsx("div", {
46751
46410
  className: "rb-flex rb-flex-col rb-gap-3",
46752
- children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName$1, {
46411
+ children: teamMembers.map((member) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
46753
46412
  name: member.name,
46754
46413
  profilePath: member.profilePath
46755
46414
  }) }), member.summary ? /* @__PURE__ */ jsx("p", {
@@ -47028,352 +46687,6 @@ function LocationMapSSR(props) {
47028
46687
  });
47029
46688
  }
47030
46689
  //#endregion
47031
- //#region ../blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.ts
47032
- /**
47033
- * Resolves native run-page ownership without falling back to entry or slug
47034
- * coincidence when a page-surface subject is present but invalid.
47035
- */
47036
- function resolveWholeSeriesPageSurfaceScope(runs, subjectValue) {
47037
- if (subjectValue === null || subjectValue === void 0) return { kind: "absent" };
47038
- const parsed = parseEventPageSurfaceSubject(subjectValue);
47039
- if (!parsed.ok) return {
47040
- kind: "unsupported",
47041
- reason: parsed.error.kind
47042
- };
47043
- const seriesIds = eventSeriesIdsForSubject(parsed.value);
47044
- const allowedSeriesIds = new Set(seriesIds);
47045
- return {
47046
- kind: "scoped",
47047
- subject: parsed.value,
47048
- runs: runs.filter((run) => allowedSeriesIds.has(run.eventSeriesId))
47049
- };
47050
- }
47051
- function eventSeriesIdsForSubject(subject) {
47052
- switch (subject.kind) {
47053
- case "eventSeries": return [subject.eventSeriesId];
47054
- case "eventOffering": return subject.availableEventSeriesIds;
47055
- default: return assertNever$3(subject);
47056
- }
47057
- }
47058
- //#endregion
47059
- //#region ../blocks/src/system/runtime/nodes/course-page-surface-scope.ts
47060
- /** Temporary Course-block adapter over canonical Event run scoping. */
47061
- function resolveCoursePageSurfaceScope(courses, subjectValue) {
47062
- const scope = resolveWholeSeriesPageSurfaceScope(courses, subjectValue);
47063
- return scope.kind === "scoped" ? {
47064
- kind: "scoped",
47065
- subject: scope.subject,
47066
- courses: scope.runs
47067
- } : scope;
47068
- }
47069
- //#endregion
47070
- //#region ../blocks/src/system/runtime/nodes/course-details/logic.ts
47071
- function selectCourseDetails(args) {
47072
- const pageSurfaceScope = resolveCoursePageSurfaceScope((args.courses ?? []).filter(Boolean), args.subject);
47073
- if (pageSurfaceScope.kind === "unsupported") return {
47074
- mode: "unsupportedPageSurfaceSubject",
47075
- selected: null,
47076
- scoped: []
47077
- };
47078
- if (pageSurfaceScope.kind === "scoped") {
47079
- const scoped = [...pageSurfaceScope.courses];
47080
- return {
47081
- mode: "pageSurfaceSubject",
47082
- selected: scoped.length === 1 ? scoped[0] ?? null : null,
47083
- scoped
47084
- };
47085
- }
47086
- return {
47087
- mode: "unsupportedPageSurfaceSubject",
47088
- selected: null,
47089
- scoped: []
47090
- };
47091
- }
47092
- //#endregion
47093
- //#region ../blocks/src/system/runtime/nodes/course-details/runs.ts
47094
- function toValidDate(value) {
47095
- if (!value) return null;
47096
- const date = new Date(value);
47097
- return Number.isNaN(date.getTime()) ? null : date;
47098
- }
47099
- function getCourseDateRange(course) {
47100
- const datedSessions = (course.sessions ?? []).map((session) => ({
47101
- session,
47102
- start: toValidDate(session.startsAt),
47103
- end: toValidDate(session.endsAt)
47104
- })).filter((value) => value.start !== null || value.end !== null);
47105
- if (datedSessions.length === 0) return {
47106
- start: null,
47107
- end: null,
47108
- startIso: null,
47109
- endIso: null,
47110
- timeZone: null
47111
- };
47112
- const startSession = datedSessions.filter((value) => value.start !== null).reduce((earliest, current) => earliest === null || current.start.getTime() < earliest.start.getTime() ? current : earliest, null);
47113
- const endSession = datedSessions.filter((value) => value.end !== null).reduce((latest, current) => latest === null || current.end.getTime() > latest.end.getTime() ? current : latest, null);
47114
- return {
47115
- start: startSession?.start ?? null,
47116
- end: endSession?.end ?? null,
47117
- startIso: startSession?.session.startsAt ?? null,
47118
- endIso: endSession?.session.endsAt ?? null,
47119
- timeZone: startSession?.session.timeZone ?? endSession?.session.timeZone ?? null
47120
- };
47121
- }
47122
- function formatCourseDateRange(range) {
47123
- const { startIso, endIso, timeZone } = range;
47124
- const dateFormat = {
47125
- month: "numeric",
47126
- day: "numeric",
47127
- year: "numeric"
47128
- };
47129
- const effectiveTimeZone = toBookingTimeZone(timeZone);
47130
- const formatSingleDate = (iso) => formatBookingDate(toScheduledBookingDateTime({
47131
- startsAt: iso,
47132
- timeZone: effectiveTimeZone
47133
- }), dateFormat);
47134
- const formatRangeDateOnly = (startsAt, endsAt) => {
47135
- const startText = formatSingleDate(startsAt);
47136
- const endText = formatSingleDate(endsAt);
47137
- return startText === endText ? startText : `${startText} – ${endText}`;
47138
- };
47139
- if (!startIso && !endIso) return "Dates TBD";
47140
- if (startIso && !endIso) return formatSingleDate(startIso);
47141
- if (!startIso && endIso) return formatSingleDate(endIso);
47142
- if (!startIso || !endIso) return "Dates TBD";
47143
- return formatRangeDateOnly(startIso, endIso);
47144
- }
47145
- //#endregion
47146
- //#region ../blocks/src/system/runtime/nodes/course-details/view.tsx
47147
- function TeamMemberName({ name, profilePath }) {
47148
- return profilePath ? /* @__PURE__ */ jsx("a", {
47149
- href: profilePath,
47150
- className: "rb-hover-opacity-80",
47151
- children: /* @__PURE__ */ jsx("strong", { children: name })
47152
- }) : /* @__PURE__ */ jsx("strong", { children: name });
47153
- }
47154
- function parseLimit(value, fallback) {
47155
- if (value === "all") return "all";
47156
- const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
47157
- return Number.isFinite(n) && n > 0 ? n : fallback;
47158
- }
47159
- function CourseDetailsView(props) {
47160
- const { course, showTitle = false, showDescription = false, showSessions = true, sessionsLimit, showVenue = true, showPrice = true, showCapacity = true, showEnrollmentStatus = true, showMembershipNote = true, emptyMessage = "Course details unavailable." } = props;
47161
- if (!course) return /* @__PURE__ */ jsx("p", {
47162
- className: "rb-caption status-muted",
47163
- children: emptyMessage
47164
- });
47165
- const pricing = resolveWholeSeriesPricingState(course);
47166
- const sessionLimit = parseLimit(sessionsLimit, 10);
47167
- const sortedSessions = [...course.sessions ?? []].sort((a, b) => Date.parse(a.startsAt) - Date.parse(b.startsAt));
47168
- const visibleSessions = sessionLimit === "all" ? sortedSessions : sortedSessions.slice(0, sessionLimit);
47169
- const hasMoreSessions = sessionLimit !== "all" && sortedSessions.length > sessionLimit;
47170
- const descriptionDoc = showDescription ? coerceRichTextDoc(course.description, "block-runtime:course-details:description") : null;
47171
- const teamMembers = course.teamMembers ?? [];
47172
- return /* @__PURE__ */ jsxs("div", {
47173
- className: "rb-flex rb-flex-col rb-gap-6",
47174
- children: [
47175
- showTitle && /* @__PURE__ */ jsx("h3", { children: course.title }),
47176
- /* @__PURE__ */ jsxs("div", {
47177
- className: "rb-grid rb-grid-cols-1 rb-gap-6 rb-items-start rb-sm-grid-cols-2",
47178
- children: [/* @__PURE__ */ jsxs("div", {
47179
- className: "rb-flex rb-flex-col rb-gap-4",
47180
- children: [
47181
- showPrice && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47182
- className: "rb-label rb-mb-2",
47183
- children: pricing.selectableOptions.length > 0 ? "Pricing" : "Price"
47184
- }), pricing.selectableOptions.length > 1 ? /* @__PURE__ */ jsx("div", {
47185
- className: "rb-flex rb-flex-col rb-gap-2",
47186
- children: pricing.selectableOptions.map((option) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("strong", { children: [
47187
- option.name,
47188
- ": ",
47189
- formatWholeSeriesPriceAmount(option.priceAmount, pricing.currency)
47190
- ] }), option.description ? /* @__PURE__ */ jsx("p", {
47191
- className: "rb-caption status-muted",
47192
- children: option.description
47193
- }) : null] }, option.id))
47194
- }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: formatWholeSeriesPriceDisplay(pricing.display) }) })] }),
47195
- showCapacity && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47196
- className: "rb-label rb-mb-2",
47197
- children: "Spots"
47198
- }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentCapacity === null ? "Unlimited" : `${course.availableSpots ?? Math.max(0, course.enrollmentCapacity - course.enrolledCount)} left` }) })] }),
47199
- showMembershipNote && course.acceptsMemberships && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47200
- className: "rb-label rb-mb-2",
47201
- children: "Membership"
47202
- }), /* @__PURE__ */ jsx("p", {
47203
- className: "rb-caption status-muted",
47204
- children: "Eligible memberships can be used for free enrollment"
47205
- })] }),
47206
- teamMembers.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47207
- className: "rb-label rb-mb-2",
47208
- children: "With"
47209
- }), /* @__PURE__ */ jsx("div", {
47210
- className: "rb-flex rb-flex-col rb-gap-3",
47211
- children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", { children: /* @__PURE__ */ jsx(TeamMemberName, {
47212
- name: teamMember.name,
47213
- profilePath: teamMember.profilePath
47214
- }) }), teamMember.summary && /* @__PURE__ */ jsx("p", {
47215
- className: "rb-caption status-muted",
47216
- children: teamMember.summary
47217
- })] }, teamMember.id))
47218
- })] })
47219
- ]
47220
- }), /* @__PURE__ */ jsxs("div", {
47221
- className: "rb-flex rb-flex-col rb-gap-4",
47222
- children: [showVenue && course.venue && /* @__PURE__ */ jsxs("div", { children: [
47223
- /* @__PURE__ */ jsx("div", {
47224
- className: "rb-label rb-mb-2",
47225
- children: "Venue"
47226
- }),
47227
- /* @__PURE__ */ jsx("h3", { children: course.venue.name }),
47228
- course.venue.address && /* @__PURE__ */ jsx("p", {
47229
- className: "rb-caption status-muted",
47230
- children: course.venue.address
47231
- })
47232
- ] }), showEnrollmentStatus && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47233
- className: "rb-label rb-mb-2",
47234
- children: "Enrollment"
47235
- }), /* @__PURE__ */ jsx("p", {
47236
- className: course.enrollmentOpen ? "cd-enrollment--open" : "cd-enrollment--closed",
47237
- children: /* @__PURE__ */ jsx("strong", { children: course.enrollmentOpen ? "Open" : "Closed" })
47238
- })] })]
47239
- })]
47240
- }),
47241
- descriptionDoc && /* @__PURE__ */ jsx("div", {
47242
- className: "cd-description",
47243
- children: /* @__PURE__ */ jsx(RichText, { doc: descriptionDoc })
47244
- }),
47245
- showSessions && visibleSessions.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
47246
- /* @__PURE__ */ jsx("div", {
47247
- className: "rb-label",
47248
- children: "Sessions"
47249
- }),
47250
- /* @__PURE__ */ jsx("div", {
47251
- className: "rb-mt-2 rb-tiles-grid",
47252
- children: visibleSessions.map((s) => /* @__PURE__ */ jsx("div", {
47253
- className: "rb-tile",
47254
- children: /* @__PURE__ */ jsx(DateTimeTile, {
47255
- startsAt: s.startsAt,
47256
- endsAt: s.endsAt
47257
- })
47258
- }, s.id))
47259
- }),
47260
- hasMoreSessions && /* @__PURE__ */ jsxs("p", {
47261
- className: "cd-sessions__more",
47262
- children: [
47263
- "Showing ",
47264
- visibleSessions.length,
47265
- " of ",
47266
- sortedSessions.length,
47267
- " sessions."
47268
- ]
47269
- })
47270
- ] })
47271
- ]
47272
- });
47273
- }
47274
- //#endregion
47275
- //#region ../blocks/src/system/runtime/nodes/course-details.server.tsx
47276
- function CourseDetailsSSR({ courses, subject, showTitle, showDescription, showSessions, sessionsLimit, showVenue, showPrice, showCapacity, showEnrollmentStatus, showMembershipNote, className, children }) {
47277
- const selection = selectCourseDetails({
47278
- courses: courses ?? null,
47279
- subject
47280
- });
47281
- const parsedSubject = parseEventPageSurfaceSubject(subject);
47282
- const awaitingOfferingRuns = parsedSubject.ok && parsedSubject.value.kind === "eventOffering" && parsedSubject.value.availableEventSeriesIds.length === 0;
47283
- const now = /* @__PURE__ */ new Date();
47284
- const scopedWithRange = selection.scoped.map((c) => ({
47285
- course: c,
47286
- range: getCourseDateRange(c)
47287
- }));
47288
- const scopedSorted = [...scopedWithRange].sort((a, b) => {
47289
- return (a.range.start?.getTime() ?? 0) - (b.range.start?.getTime() ?? 0);
47290
- });
47291
- 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;
47292
- const nonPastRuns = scopedSorted.filter(({ range }) => !(range.end && range.end <= now));
47293
- return /* @__PURE__ */ jsxs("div", {
47294
- className: `course-details ${className ?? ""}`.trim(),
47295
- "data-block": "course-details",
47296
- children: [selection.selected ? /* @__PURE__ */ jsx(CourseDetailsView, {
47297
- course: selection.selected,
47298
- showTitle,
47299
- showDescription,
47300
- showSessions,
47301
- sessionsLimit,
47302
- showVenue,
47303
- showPrice,
47304
- showCapacity,
47305
- showEnrollmentStatus,
47306
- showMembershipNote
47307
- }) : selection.scoped.length > 0 ? /* @__PURE__ */ jsxs("div", {
47308
- className: "rb-flex rb-flex-col rb-gap-3",
47309
- children: [
47310
- /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
47311
- className: "rb-label rb-mb-2",
47312
- children: "Upcoming runs"
47313
- }), /* @__PURE__ */ jsx("p", {
47314
- className: "rb-caption status-muted",
47315
- children: "Choose a run to see sessions and details."
47316
- })] }),
47317
- nonPastRuns.length > 0 ? /* @__PURE__ */ jsx("ul", {
47318
- className: "rb-flex rb-flex-col rb-gap-2",
47319
- children: nonPastRuns.map(({ course, range }) => {
47320
- const start = range.start;
47321
- const end = range.end;
47322
- const isInProgress = Boolean(start && end && start <= now && end > now);
47323
- return /* @__PURE__ */ jsx("li", {
47324
- className: "rb-rounded-md rb-border rb-p-3",
47325
- children: /* @__PURE__ */ jsx("div", {
47326
- className: "rb-flex rb-flex-col rb-gap-1",
47327
- children: /* @__PURE__ */ jsxs("div", {
47328
- className: "rb-flex rb-items-center rb-justify-between rb-gap-3",
47329
- children: [/* @__PURE__ */ jsxs("div", {
47330
- className: "rb-min-w-0",
47331
- children: [/* @__PURE__ */ jsx("div", {
47332
- className: "rb-truncate",
47333
- children: /* @__PURE__ */ jsx("strong", { children: course.title })
47334
- }), /* @__PURE__ */ jsx("div", {
47335
- className: "rb-caption status-muted",
47336
- children: formatCourseDateRange(range)
47337
- })]
47338
- }), /* @__PURE__ */ jsx("div", {
47339
- className: "rb-caption status-muted rb-shrink-0",
47340
- children: course.enrollmentOpen ? "Enrollment open" : isInProgress ? "Currently in progress" : "Enrollment closed"
47341
- })]
47342
- })
47343
- })
47344
- }, course.eventSeriesId);
47345
- })
47346
- }) : /* @__PURE__ */ jsx("p", {
47347
- className: "rb-caption status-muted",
47348
- children: "No upcoming runs."
47349
- }),
47350
- lastPastRun ? /* @__PURE__ */ jsxs("div", {
47351
- className: "rb-caption status-muted",
47352
- children: [
47353
- "Last run: ",
47354
- /* @__PURE__ */ jsx("strong", { children: lastPastRun.course.title }),
47355
- " (",
47356
- formatCourseDateRange(lastPastRun.range),
47357
- ")"
47358
- ]
47359
- }) : null
47360
- ]
47361
- }) : /* @__PURE__ */ jsx(CourseDetailsView, {
47362
- course: null,
47363
- emptyMessage: awaitingOfferingRuns ? "New dates are coming soon." : "Course details unavailable.",
47364
- showTitle,
47365
- showDescription,
47366
- showSessions,
47367
- sessionsLimit,
47368
- showVenue,
47369
- showPrice,
47370
- showCapacity,
47371
- showEnrollmentStatus,
47372
- showMembershipNote
47373
- }), children]
47374
- });
47375
- }
47376
- //#endregion
47377
46690
  //#region ../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx
47378
46691
  /**
47379
46692
  * EventSpotlight Component
@@ -47577,7 +46890,7 @@ function deriveCourseScheduleSummary(course) {
47577
46890
  sessionCount: sessions.length
47578
46891
  };
47579
46892
  }
47580
- function nextCourseSessionStart(course) {
46893
+ function nextWholeSeriesSessionStart(course) {
47581
46894
  return [...course.sessions].filter(isValidOccurrence).map((session) => session.startsAt).sort((left, right) => left.localeCompare(right))[0] ?? null;
47582
46895
  }
47583
46896
  function occurrenceFromEvent(event) {
@@ -47731,7 +47044,7 @@ const OFFERINGS_PREVIEW_GRID_STYLE = {
47731
47044
  function buildItemDataMap(props) {
47732
47045
  const routeCandidates = props.routeCandidates?.routes ?? [];
47733
47046
  const entries = OFFERINGS_PREVIEW_EVENT_PRESET_DEFINITIONS.map((definition) => [definition.sourceKey, eventDataFromMaybeArray(props[definition.dataKey])]);
47734
- return new Map([...entries, ["course", courseDataFromMaybeArray(props.courses, routeCandidates)]]);
47047
+ return new Map([...entries, ["course", courseDataFromMaybeArray(props.wholeSeriesOfferings, routeCandidates)]]);
47735
47048
  }
47736
47049
  function eventDataFromMaybeArray(events) {
47737
47050
  return events ? {
@@ -47785,8 +47098,8 @@ function renderOfferingGroupItems(presentation, items, options) {
47785
47098
  }
47786
47099
  }
47787
47100
  function compareCoursesByNextSession(left, right) {
47788
- const leftStart = nextCourseSessionStart(left);
47789
- const rightStart = nextCourseSessionStart(right);
47101
+ const leftStart = nextWholeSeriesSessionStart(left);
47102
+ const rightStart = nextWholeSeriesSessionStart(right);
47790
47103
  if (leftStart === null) return rightStart === null ? 0 : 1;
47791
47104
  if (rightStart === null) return -1;
47792
47105
  return leftStart.localeCompare(rightStart);
@@ -48725,45 +48038,6 @@ function CheckoutSSR({ blockId, siteId, apiBaseUrl, stage, children, ...rest })
48725
48038
  });
48726
48039
  }
48727
48040
  //#endregion
48728
- //#region ../blocks/src/system/runtime/nodes/course-registration.server.tsx
48729
- /**
48730
- * Server-safe placeholder for course registration.
48731
- * Provides a static container for island hydration without importing client hooks.
48732
- */
48733
- function CourseRegistrationSSR({ blockId, siteId, apiBaseUrl, portalToken, subject, courses, className, showSessions, showPrice, showCapacity, showVenue, successMessage, waitlistMessage, membershipMessage, buttonText, buttonVariant, stage, children }) {
48734
- const islandProps = buildCourseRegistrationInteractiveIslandProps({
48735
- siteId,
48736
- apiBaseUrl,
48737
- portalToken,
48738
- subject,
48739
- courses,
48740
- className,
48741
- showSessions,
48742
- showPrice,
48743
- showCapacity,
48744
- showVenue,
48745
- successMessage,
48746
- waitlistMessage,
48747
- membershipMessage,
48748
- buttonText,
48749
- buttonVariant,
48750
- stage
48751
- });
48752
- return /* @__PURE__ */ jsxs("div", {
48753
- className: `course-registration ${className ?? ""}`.trim(),
48754
- "data-block": "course-registration",
48755
- ...getIslandRootProps("course-registration", blockId),
48756
- children: [
48757
- /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
48758
- /* @__PURE__ */ jsx("div", {
48759
- className: "course-registration__summary",
48760
- children: /* @__PURE__ */ jsx("strong", { children: islandProps.render.display.summaryButtonText })
48761
- }),
48762
- children
48763
- ]
48764
- });
48765
- }
48766
- //#endregion
48767
48041
  //#region ../blocks/src/system/runtime/nodes/gifting.server.tsx
48768
48042
  function GiftingSSR({ blockId, ...rest }) {
48769
48043
  const islandProps = buildGiftingInteractiveIslandProps(rest);
@@ -50251,7 +49525,6 @@ const runtimeBackedBlockServerEntries = {
50251
49525
  "product-detail": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(productDetailBlockDefinition), ProductDetailSSR),
50252
49526
  cart: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(cartBlockDefinition), CartSSR),
50253
49527
  checkout: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(checkoutBlockDefinition), CheckoutSSR),
50254
- "course-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(courseRegistrationBlockDefinition), CourseRegistrationSSR),
50255
49528
  gifting: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(giftingBlockDefinition), GiftingSSR),
50256
49529
  "event-registration": defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(eventRegistrationBlockDefinition), EventRegistrationSSR),
50257
49530
  shop: defineRuntimeBackedBlockEntry(requireRuntimeBackedBlockDefinition(shopBlockDefinition), ShopSSR)
@@ -50284,7 +49557,6 @@ const serverComponentRegistry = {
50284
49557
  "booking-form": BookingFormSSR,
50285
49558
  "event-details": EventDetailsSSR,
50286
49559
  "location-map": LocationMapSSR,
50287
- "course-details": CourseDetailsSSR,
50288
49560
  "event-spotlight": EventSpotlight,
50289
49561
  "event-combined": EventCombinedSSR,
50290
49562
  "offerings-preview": OfferingsPreviewNode,
@@ -51686,12 +50958,46 @@ function renderBlock(manifest, content, options = {}) {
51686
50958
  */
51687
50959
  function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entriesByIdentifier) {
51688
50960
  if (!routes || !manifest?.fields?.length) return content;
51689
- return hydrateValue(content, {
50961
+ return hydrateLinks(content, routes, pagesByIdentifier, entriesByIdentifier);
50962
+ }
50963
+ /** Hydrate identifier-aware links in data loaded after manifest content. */
50964
+ function hydrateLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
50965
+ return hydrateValue(value, {
50966
+ routes,
50967
+ pagesByIdentifier,
50968
+ entriesByIdentifier
50969
+ });
50970
+ }
50971
+ /**
50972
+ * Hydrate links only inside resolved booking-consent documents. Loader payloads are
50973
+ * otherwise opaque and may legitimately contain objects that resemble link values.
50974
+ */
50975
+ function hydrateResolvedBookingConsentLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
50976
+ return hydrateResolvedBookingConsentValue(value, {
51690
50977
  routes,
51691
50978
  pagesByIdentifier,
51692
50979
  entriesByIdentifier
51693
50980
  });
51694
50981
  }
50982
+ function hydrateResolvedBookingConsentValue(value, context) {
50983
+ if (Array.isArray(value)) {
50984
+ const hydratedItems = value.map((item) => hydrateResolvedBookingConsentValue(item, context));
50985
+ return hydratedItems.every((item, index) => item === value[index]) ? value : hydratedItems;
50986
+ }
50987
+ if (!isRecord$13(value)) return value;
50988
+ if (isBookingConsentCarrier(value)) {
50989
+ const agreement = hydrateValue(value.agreement, context);
50990
+ return agreement === value.agreement ? value : {
50991
+ ...value,
50992
+ agreement
50993
+ };
50994
+ }
50995
+ const hydratedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateResolvedBookingConsentValue(entry, context)]);
50996
+ return hydratedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(hydratedEntries);
50997
+ }
50998
+ function isBookingConsentCarrier(value) {
50999
+ return bookingConsentCarrierSchema.safeParse(value).success;
51000
+ }
51695
51001
  function hydrateValue(value, context) {
51696
51002
  try {
51697
51003
  if (Array.isArray(value)) {
@@ -51760,6 +51066,13 @@ function hydrateEntryLink(link, context) {
51760
51066
  };
51761
51067
  }
51762
51068
  //#endregion
51069
+ //#region ../blocks/src/system/manifest/resolveBlockData.ts
51070
+ function resolveBlockData(blockId, dataLoaders, dataContext, routes) {
51071
+ const raw = blockId ? dataContext?.resolvedData?.[blockId] : void 0;
51072
+ if (isRecord$13(raw)) return routes ? hydrateResolvedBookingConsentLinks(raw, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : raw;
51073
+ return dataLoaders && typeof dataLoaders === "object" && Object.keys(dataLoaders).length > 0 ? {} : void 0;
51074
+ }
51075
+ //#endregion
51763
51076
  //#region ../blocks/src/sdkBlockTransform.ts
51764
51077
  /**
51765
51078
  * Transforms an SDK custom block into a BlockManifest.
@@ -52354,8 +51667,8 @@ function generateInputCss({ themeId, theme, inputSystem }) {
52354
51667
  const radioSelector = `${rootSelector} .form-radio`;
52355
51668
  const checkableRules = [];
52356
51669
  checkableRules.push("appearance: none");
52357
- checkableRules.push("width: 1rem");
52358
- checkableRules.push("height: 1rem");
51670
+ checkableRules.push("width: 1.125rem");
51671
+ checkableRules.push("height: 1.125rem");
52359
51672
  checkableRules.push("flex-shrink: 0");
52360
51673
  checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
52361
51674
  if (inputSystem.base.background.type === "transparent") checkableRules.push("background-color: transparent");
@@ -54613,176 +53926,6 @@ ${root} {
54613
53926
  `;
54614
53927
  }
54615
53928
  //#endregion
54616
- //#region ../theme-core/src/blocks/vars/course-details.ts
54617
- /**
54618
- * Generate CSS variables for the course-details block.
54619
- *
54620
- * Variables defined:
54621
- * - Enrollment status colors (open/closed)
54622
- * - Capacity indicator colors (available/low/full)
54623
- * - Price display colors (free indicator)
54624
- */
54625
- function generateCourseDetailsVars({ themeId }) {
54626
- return `
54627
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-details"])`} {
54628
- /* Enrollment status */
54629
- --cd-enrollment-open-text: rgb(var(--tb-success));
54630
- --cd-enrollment-closed-text: rgb(var(--tb-mutedText));
54631
-
54632
- /* Capacity indicator */
54633
- --cd-capacity-available-text: rgb(var(--tb-success));
54634
- --cd-capacity-low-text: rgb(var(--tb-warning));
54635
- --cd-capacity-full-text: rgb(var(--tb-destructive, 239 68 68));
54636
-
54637
- /* Price styling */
54638
- --cd-price-free-text: rgb(var(--tb-success));
54639
- }
54640
- `;
54641
- }
54642
- //#endregion
54643
- //#region ../theme-core/src/blocks/vars/course-registration.ts
54644
- const EVENT_WHOLE_SERIES_VARIABLE_BRIDGE = `
54645
- /* Temporary bridge while persisted Course blocks render the Event-owned
54646
- whole-series registration runtime. Removed with the Course block. */
54647
- --er-step-active: var(--cr-step-active);
54648
- --er-step-inactive: var(--cr-step-inactive);
54649
- --er-step-completed: var(--cr-step-completed);
54650
- --er-step-text: var(--cr-step-text);
54651
- --er-step-text-active: var(--cr-step-text-active);
54652
- --er-step-connector: var(--cr-step-connector);
54653
- --er-step-title-size: var(--cr-step-title-size);
54654
- --er-success-bg: var(--cr-success-bg);
54655
- --er-success-text: var(--cr-success-text);
54656
- --er-error-bg: var(--cr-error-bg);
54657
- --er-error-text: var(--cr-error-text);
54658
- --er-waitlist-bg: var(--cr-waitlist-bg);
54659
- --er-waitlist-text: var(--cr-waitlist-text);
54660
- --er-capacity-available-bg: var(--cr-capacity-available-bg);
54661
- --er-capacity-available-text: var(--cr-capacity-available-text);
54662
- --er-capacity-low-bg: var(--cr-capacity-low-bg);
54663
- --er-capacity-low-text: var(--cr-capacity-low-text);
54664
- --er-capacity-soldout-bg: var(--cr-capacity-soldout-bg);
54665
- --er-capacity-soldout-text: var(--cr-capacity-soldout-text);
54666
- --er-border: var(--cr-border);
54667
- --er-border-hover: var(--cr-border-hover);
54668
- --er-border-selected: var(--cr-border-selected);
54669
- --er-border-error: var(--cr-border-error);
54670
- --er-focus-ring: var(--cr-focus-ring);
54671
- --er-required: var(--cr-required);
54672
- --er-payment-border: var(--cr-payment-border);
54673
- --er-payment-border-hover: var(--cr-payment-border-hover);
54674
- --er-payment-border-selected: var(--cr-payment-border-selected);
54675
- --er-payment-bg-selected: var(--cr-payment-bg-selected);
54676
- --er-check-bg: var(--cr-check-bg);
54677
- --er-check-text: var(--cr-check-text);
54678
- --er-summary-bg: var(--cr-summary-bg);
54679
- --er-summary-border: var(--cr-summary-border);
54680
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54681
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
54682
- `;
54683
- /**
54684
- * Generate CSS variables for the course-registration block.
54685
- *
54686
- * Variables defined:
54687
- * - Step indicator colors (active, inactive, completed, text, connector)
54688
- * - Success/error/waitlist state backgrounds and text colors
54689
- * - Capacity badge colors (available, low, sold-out)
54690
- * - Border colors for various interaction states
54691
- * - Input focus and required marker styling
54692
- * - Payment option card styling
54693
- * - Checkmark indicator colors
54694
- * - Summary styling
54695
- */
54696
- function generateCourseRegistrationVars({ themeId }) {
54697
- return `
54698
- ${`:where([data-theme-scope="${themeId}"]) :where([data-block="course-registration"])`} {
54699
- /* Step indicator */
54700
- --cr-step-active: rgb(var(--tb-primary));
54701
- --cr-step-inactive: rgb(var(--tb-mutedText));
54702
- --cr-step-completed: rgb(var(--tb-success));
54703
- --cr-step-text: rgb(255 255 255);
54704
- --cr-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
54705
- --cr-step-connector: rgba(var(--tb-border), 0.5);
54706
-
54707
- /* Step title */
54708
- --cr-step-title-size: 1.5rem;
54709
-
54710
- /* State backgrounds with alpha */
54711
- --cr-success-bg: rgba(var(--tb-success), 0.1);
54712
- --cr-success-text: rgb(var(--tb-success));
54713
- --cr-error-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54714
- --cr-error-text: rgb(var(--tb-destructive, 239 68 68));
54715
- --cr-waitlist-bg: rgba(var(--tb-warning), 0.1);
54716
- --cr-waitlist-text: rgb(var(--tb-warning));
54717
-
54718
- /* Capacity badges */
54719
- --cr-capacity-available-bg: rgba(var(--tb-success), 0.1);
54720
- --cr-capacity-available-text: rgb(var(--tb-success));
54721
- --cr-capacity-low-bg: rgba(var(--tb-warning), 0.1);
54722
- --cr-capacity-low-text: rgb(var(--tb-warning));
54723
- --cr-capacity-soldout-bg: rgba(var(--tb-destructive, 239 68 68), 0.1);
54724
- --cr-capacity-soldout-text: rgb(var(--tb-destructive, 239 68 68));
54725
-
54726
- /* Borders */
54727
- --cr-border: rgb(var(--tb-border));
54728
- --cr-border-hover: rgba(var(--tb-primary), 0.5);
54729
- --cr-border-selected: rgb(var(--tb-primary));
54730
- --cr-border-error: rgb(var(--tb-destructive, 239 68 68));
54731
-
54732
- /* Input focus */
54733
- --cr-focus-ring: rgba(var(--tb-primary), 0.3);
54734
-
54735
- /* Required marker */
54736
- --cr-required: rgb(var(--tb-destructive, 239 68 68));
54737
-
54738
- /* Payment option cards */
54739
- --cr-payment-border: rgb(var(--tb-border));
54740
- --cr-payment-border-hover: rgba(var(--tb-primary), 0.5);
54741
- --cr-payment-border-selected: rgb(var(--tb-primary));
54742
- --cr-payment-bg-selected: rgba(var(--tb-primary), 0.08);
54743
-
54744
- /* Checkmark indicator */
54745
- --cr-check-bg: rgb(var(--tb-primary));
54746
- --cr-check-text: rgb(var(--tb-primaryText, 255 255 255));
54747
-
54748
- /* Summary */
54749
- --cr-summary-bg: rgba(var(--tb-primary), 0.1);
54750
- --cr-summary-border: rgb(var(--tb-border));
54751
-
54752
- ${EVENT_WHOLE_SERIES_VARIABLE_BRIDGE}
54753
-
54754
- /* Shared registration-surface mappings (issue 1174).
54755
- Route the shared --rb-reg-* contract through this block's Tier 3 vars
54756
- (palette tokens where no --cr-* var exists) so existing --cr-* overrides
54757
- keep working unchanged. */
54758
- --rb-reg-radius: var(--rb-block-radius);
54759
- --rb-reg-border: var(--cr-border);
54760
- --rb-reg-border-hover: var(--cr-border-hover);
54761
- --rb-reg-border-selected: var(--cr-border-selected);
54762
- --rb-reg-bg-selected: var(--cr-payment-bg-selected);
54763
- --rb-reg-option-bg: rgb(var(--tb-background));
54764
- --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
54765
- --rb-reg-surface-bg: rgb(var(--tb-surface));
54766
- --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
54767
- --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
54768
- --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
54769
- --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
54770
- --rb-reg-check-bg: var(--cr-check-bg);
54771
- --rb-reg-check-text: var(--cr-check-text);
54772
- --rb-reg-step-active: var(--cr-step-active);
54773
- --rb-reg-step-completed: var(--cr-step-completed);
54774
- --rb-reg-step-inactive: var(--cr-step-inactive);
54775
- --rb-reg-step-text: var(--cr-step-text);
54776
- --rb-reg-step-text-active: var(--cr-step-text-active);
54777
- --rb-reg-step-connector: var(--cr-step-connector);
54778
- --rb-reg-summary-bg: var(--cr-summary-bg);
54779
- --rb-reg-summary-border: var(--cr-summary-border);
54780
- --rb-reg-focus-ring: var(--cr-focus-ring);
54781
- --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
54782
- }
54783
- `;
54784
- }
54785
- //#endregion
54786
53929
  //#region ../theme-core/src/blocks/registry.ts
54787
53930
  /**
54788
53931
  * Global registry of block var generators.
@@ -54797,8 +53940,6 @@ blockVarRegistry.set("appointment-booking", generateAppointmentBookingVars);
54797
53940
  blockVarRegistry.set("form", generateFormBlockVars);
54798
53941
  blockVarRegistry.set("customer-portal", generateCustomerPortalVars);
54799
53942
  blockVarRegistry.set("testimonials", generateTestimonialsVars);
54800
- blockVarRegistry.set("course-details", generateCourseDetailsVars);
54801
- blockVarRegistry.set("course-registration", generateCourseRegistrationVars);
54802
53943
  /**
54803
53944
  * Generate all Tier 3 block-specific CSS variables.
54804
53945
  *
@@ -56139,11 +55280,7 @@ const MemoBlockSection = React$1.memo(function MemoBlockSection({ themeResources
56139
55280
  try {
56140
55281
  const routes = routeMap ?? dataContext?.routes;
56141
55282
  const hydratedContent = routes ? hydrateManifestLinks(definition.manifest, data, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : data;
56142
- const resolved = resolveBlockData({
56143
- block,
56144
- definition,
56145
- dataContext
56146
- });
55283
+ const resolved = resolveBlockData(block.id, definition.dataLoaders, dataContext, routes);
56147
55284
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
56148
55285
  const baseProps = {
56149
55286
  content: hydratedContent,
@@ -56233,12 +55370,6 @@ function shouldDebugCustomBlocks() {
56233
55370
  return false;
56234
55371
  }
56235
55372
  }
56236
- function resolveBlockData({ block, definition, dataContext }) {
56237
- const blockId = block.id ?? null;
56238
- const raw = blockId ? dataContext?.resolvedData?.[blockId] : void 0;
56239
- if (isObjectRecord$1(raw)) return { ...raw };
56240
- return definition.dataLoaders && Object.keys(definition.dataLoaders).length > 0 ? {} : void 0;
56241
- }
56242
55373
  /**
56243
55374
  * Resolves block content based on stage priority.
56244
55375
  * For draft/preview: draftContent takes priority over content.
@@ -59737,7 +58868,7 @@ const containerResponsiveThemeCss = `/*
59737
58868
  * Shared: Registration Surface (issue 1174)
59738
58869
  *
59739
58870
  * Wizard-surface primitives shared by the event-registration,
59740
- * course-registration and appointment-booking blocks: surface container,
58871
+ * appointment-booking blocks: surface container,
59741
58872
  * selectable option cards, step indicator, wizard actions row, on-surface
59742
58873
  * text ramp, layout stacks, summary box and skeleton shell lines.
59743
58874
  *
@@ -59780,7 +58911,7 @@ const containerResponsiveThemeCss = `/*
59780
58911
  }
59781
58912
 
59782
58913
  /* Surface container */
59783
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58914
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59784
58915
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
59785
58916
  border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
59786
58917
  padding: clamp(1rem, 2vw, 1.5rem);
@@ -59810,7 +58941,7 @@ const containerResponsiveThemeCss = `/*
59810
58941
  *
59811
58942
  * Mirrors \`contextualButtonSurfaceResetStyles()\` in theme-core/buttons; the
59812
58943
  * pairing is pinned by registration-surface-action-reset.test.ts. */
59813
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
58944
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
59814
58945
  --rb-action-primary-base-background-color: initial;
59815
58946
  --rb-action-primary-base-background-image: initial;
59816
58947
  --rb-action-primary-base-color: initial;
@@ -59918,7 +59049,7 @@ const containerResponsiveThemeCss = `/*
59918
59049
  }
59919
59050
 
59920
59051
  /* Selectable option card */
59921
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
59052
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card {
59922
59053
  position: relative;
59923
59054
  display: flex;
59924
59055
  align-items: flex-start;
@@ -59935,34 +59066,34 @@ const containerResponsiveThemeCss = `/*
59935
59066
  box-shadow var(--rb-block-transition, 150ms) ease;
59936
59067
  }
59937
59068
 
59938
- :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"]) {
59069
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
59939
59070
  border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
59940
59071
  box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
59941
59072
  }
59942
59073
 
59943
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59074
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
59944
59075
  outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
59945
59076
  outline-offset: 2px;
59946
59077
  }
59947
59078
 
59948
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59079
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
59949
59080
  border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
59950
59081
  background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
59951
59082
  box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
59952
59083
  }
59953
59084
 
59954
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59085
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
59955
59086
  cursor: not-allowed;
59956
59087
  opacity: 0.7;
59957
59088
  }
59958
59089
 
59959
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59090
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
59960
59091
  border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
59961
59092
  box-shadow: none;
59962
59093
  }
59963
59094
 
59964
59095
  /* Check indicator */
59965
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
59096
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check {
59966
59097
  flex-shrink: 0;
59967
59098
  width: 1.25rem;
59968
59099
  height: 1.25rem;
@@ -59973,18 +59104,18 @@ const containerResponsiveThemeCss = `/*
59973
59104
  justify-content: center;
59974
59105
  }
59975
59106
 
59976
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59107
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
59977
59108
  width: 0.75rem;
59978
59109
  height: 0.75rem;
59979
59110
  color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
59980
59111
  }
59981
59112
 
59982
59113
  /* Step indicator */
59983
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59114
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
59984
59115
  margin-bottom: 1.5rem;
59985
59116
  }
59986
59117
 
59987
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
59118
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-steps {
59988
59119
  display: flex;
59989
59120
  align-items: center;
59990
59121
  justify-content: center;
@@ -59994,13 +59125,13 @@ const containerResponsiveThemeCss = `/*
59994
59125
  margin: 0;
59995
59126
  }
59996
59127
 
59997
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
59128
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step {
59998
59129
  display: flex;
59999
59130
  align-items: center;
60000
59131
  gap: 0.5rem;
60001
59132
  }
60002
59133
 
60003
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
59134
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle {
60004
59135
  width: 1.75rem;
60005
59136
  height: 1.75rem;
60006
59137
  border-radius: 50%;
@@ -60014,47 +59145,47 @@ const containerResponsiveThemeCss = `/*
60014
59145
  transition: background-color var(--rb-block-transition, 150ms) ease;
60015
59146
  }
60016
59147
 
60017
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
59148
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
60018
59149
  background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
60019
59150
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60020
59151
  }
60021
59152
 
60022
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
59153
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
60023
59154
  background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
60024
59155
  color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
60025
59156
  }
60026
59157
 
60027
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
59158
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-check {
60028
59159
  width: 0.75rem;
60029
59160
  height: 0.75rem;
60030
59161
  }
60031
59162
 
60032
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
59163
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-connector {
60033
59164
  width: 2rem;
60034
59165
  height: 2px;
60035
59166
  background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
60036
59167
  }
60037
59168
 
60038
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59169
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60039
59170
  font-size: 0.75rem;
60040
59171
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60041
59172
  display: none;
60042
59173
  }
60043
59174
 
60044
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
59175
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
60045
59176
  font-weight: 500;
60046
59177
  }
60047
59178
 
60048
59179
  @container rb-site (min-width: 640px) {
60049
59180
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60050
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
59181
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-step-label {
60051
59182
  display: inline;
60052
59183
  }
60053
59184
  }
60054
59185
  }
60055
59186
 
60056
59187
  /* Wizard actions row */
60057
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
59188
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
60058
59189
  display: flex;
60059
59190
  justify-content: space-between;
60060
59191
  align-items: center;
@@ -60063,56 +59194,56 @@ const containerResponsiveThemeCss = `/*
60063
59194
  }
60064
59195
 
60065
59196
  /* When there's only one action (no back button), push it to the right */
60066
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
59197
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
60067
59198
  margin-inline-start: auto;
60068
59199
  }
60069
59200
 
60070
59201
  /* On-surface text ramp */
60071
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
59202
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface {
60072
59203
  color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
60073
59204
  }
60074
59205
 
60075
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
59206
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
60076
59207
  color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
60077
59208
  }
60078
59209
 
60079
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
59210
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
60080
59211
  color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
60081
59212
  }
60082
59213
 
60083
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
59214
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
60084
59215
  color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
60085
59216
  }
60086
59217
 
60087
59218
  /* Layout stacks */
60088
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
59219
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
60089
59220
  display: flex;
60090
59221
  flex-direction: column;
60091
59222
  gap: 1rem;
60092
59223
  }
60093
59224
 
60094
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
59225
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
60095
59226
  gap: 0.75rem;
60096
59227
  }
60097
59228
 
60098
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
59229
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row {
60099
59230
  display: flex;
60100
59231
  align-items: center;
60101
59232
  gap: 1rem;
60102
59233
  }
60103
59234
 
60104
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
59235
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
60105
59236
  justify-content: space-between;
60106
59237
  align-items: flex-start;
60107
59238
  }
60108
59239
 
60109
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
59240
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
60110
59241
  display: grid;
60111
59242
  gap: 0.75rem;
60112
59243
  }
60113
59244
 
60114
59245
  /* Summary box */
60115
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
59246
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
60116
59247
  padding: 1rem;
60117
59248
  border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
60118
59249
  border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
@@ -60120,7 +59251,7 @@ const containerResponsiveThemeCss = `/*
60120
59251
  }
60121
59252
 
60122
59253
  /* Skeleton shell lines */
60123
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
59254
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line {
60124
59255
  height: 0.75rem;
60125
59256
  border-radius: 9999px;
60126
59257
  background: linear-gradient(
@@ -60131,24 +59262,24 @@ const containerResponsiveThemeCss = `/*
60131
59262
  );
60132
59263
  }
60133
59264
 
60134
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
59265
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
60135
59266
  width: min(26rem, 82%);
60136
59267
  }
60137
59268
 
60138
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
59269
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
60139
59270
  width: min(19rem, 68%);
60140
59271
  }
60141
59272
 
60142
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
59273
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
60143
59274
  width: min(14rem, 52%);
60144
59275
  }
60145
59276
 
60146
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
59277
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
60147
59278
  width: min(10rem, 42%);
60148
59279
  }
60149
59280
 
60150
59281
  /* Skeleton block (rectangular placeholder, pulses) */
60151
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59282
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60152
59283
  height: 2.5rem;
60153
59284
  width: 100%;
60154
59285
  border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
@@ -60166,7 +59297,7 @@ const containerResponsiveThemeCss = `/*
60166
59297
  }
60167
59298
 
60168
59299
  @media (prefers-reduced-motion: reduce) {
60169
- :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
59300
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="appointment-booking"]) .rb-shell-block {
60170
59301
  animation: none;
60171
59302
  }
60172
59303
  }
@@ -66548,1648 +65679,337 @@ const containerResponsiveThemeCss = `/*
66548
65679
  cursor: not-allowed;
66549
65680
  }
66550
65681
 
66551
- /*
66552
- * Course Details (runtime node)
66553
- * Minimal rules - most styling via rb-* utilities
65682
+ /* =============================================================================
65683
+ * Block: Newsletter Signup
65684
+ * =============================================================================
66554
65685
  */
66555
65686
 
66556
- :where(.theme-scope) .course-details {
66557
- width: 100%;
66558
- max-width: 56.25rem; /* 900px */
66559
- margin-inline: auto;
65687
+ /* Newsletter copy styling */
65688
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
65689
+ font-size: 1.5rem;
65690
+ font-weight: 600;
66560
65691
  }
66561
65692
 
66562
- /* Description prose wrapper */
66563
- :where(.theme-scope) .course-details .cd-description {
66564
- margin-top: 1rem;
65693
+ :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
65694
+ font-size: 1rem;
65695
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65696
+ opacity: 0.85;
66565
65697
  }
66566
65698
 
66567
- /* "Showing X of Y" text */
66568
- :where(.theme-scope) .course-details .cd-sessions__more {
66569
- margin-top: 0.5rem;
66570
- opacity: 0.7;
66571
- font-size: 0.875rem;
65699
+ /* Newsletter form container */
65700
+ :where(.theme-scope) .newsletter-form {
65701
+ width: 100%;
65702
+ max-width: 32rem;
65703
+ margin-left: auto;
65704
+ margin-right: auto;
66572
65705
  }
66573
65706
 
66574
- /* Enrollment status colors (using Tier 3 vars) */
66575
- :where(.theme-scope) .course-details .cd-enrollment--open {
66576
- color: var(--cd-enrollment-open-text);
65707
+ /* Newsletter form fields container */
65708
+ :where(.theme-scope) .newsletter-form-fields {
65709
+ display: flex;
65710
+ flex-direction: column;
65711
+ gap: var(--rb-gap-sm, 0.75rem);
66577
65712
  }
66578
65713
 
66579
- :where(.theme-scope) .course-details .cd-enrollment--closed {
66580
- color: var(--cd-enrollment-closed-text);
65714
+ /* Individual field styling */
65715
+ :where(.theme-scope) .newsletter-field {
65716
+ display: flex;
65717
+ flex-direction: column;
65718
+ gap: 0.25rem;
66581
65719
  }
66582
65720
 
66583
- /* =============================================================================
66584
- * Block: Event whole-series registration
66585
- * Keep rules minimal and theme-driven; class names are prefixed with \`er-whole-series-\`.
66586
- * =============================================================================
66587
- */
66588
-
66589
- /* Block-local surface text tokens for cards/modals that sit on theme surface. */
66590
- :where(.theme-scope)
66591
- :where(
66592
- [data-block='event-registration'],
66593
- [data-block='course-registration']
66594
- ) {
66595
- --er-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
66596
- --er-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
65721
+ /* Required indicator */
65722
+ :where(.theme-scope) .newsletter-required {
65723
+ color: rgb(var(--tb-primary));
65724
+ margin-left: 0.125rem;
66597
65725
  }
66598
65726
 
66599
- /* Container: base styling comes from the shared .rb-reg-surface
66600
- (registration-surface.css); these overrides preserve whole-series
66601
- whole-series registration's established look (fixed padding, centered). */
66602
- :where(.theme-scope)
66603
- :where([data-block='event-registration'], [data-block='course-registration'])
66604
- .er-whole-series-container {
66605
- padding: 1.5rem;
66606
- margin-inline: auto;
65727
+ /* Submit button container */
65728
+ :where(.theme-scope) .newsletter-submit {
65729
+ margin-top: 0.5rem;
66607
65730
  }
66608
65731
 
66609
- /* Empty/unavailable */
66610
- :where(.theme-scope)
66611
- :where([data-block='event-registration'], [data-block='course-registration'])
66612
- .er-whole-series-empty {
66613
- border-radius: var(--rb-block-radius);
66614
- border: 1px dashed rgba(var(--tb-foreground), 0.2);
66615
- padding: 2.5rem;
66616
- text-align: center;
65732
+ /* ALTCHA widget container */
65733
+ :where(.theme-scope) .newsletter-altcha {
65734
+ margin-top: 0.75rem;
65735
+ display: flex;
65736
+ justify-content: center;
66617
65737
  }
66618
65738
 
66619
- :where(.theme-scope)
66620
- :where([data-block='event-registration'], [data-block='course-registration'])
66621
- .er-whole-series-empty__text {
66622
- opacity: 0.7;
65739
+ /* Privacy note */
65740
+ :where(.theme-scope) .newsletter-privacy-note {
65741
+ margin-top: 0.75rem;
65742
+ font-size: 1rem;
65743
+ line-height: 1.6;
65744
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
65745
+ text-align: center;
66623
65746
  }
66624
65747
 
66625
65748
  /* =============================================================================
66626
- * Layout (two-column)
65749
+ * Inline Variant - Horizontal layout
66627
65750
  * =============================================================================
66628
65751
  */
66629
- :where(.theme-scope)
66630
- :where([data-block='event-registration'], [data-block='course-registration'])
66631
- .er-whole-series-layout {
66632
- display: grid;
66633
- gap: 1.5rem;
66634
- grid-template-columns: 1fr;
66635
- }
66636
65752
 
66637
- @container rb-site (min-width: 768px) {
66638
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66639
- :where(.theme-scope)
66640
- :where(
66641
- [data-block='event-registration'],
66642
- [data-block='course-registration']
66643
- )
66644
- .er-whole-series-layout--with-sidebar {
66645
- grid-template-columns: 1fr 280px;
66646
- }
66647
- }
65753
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65754
+ flex-direction: row;
65755
+ align-items: flex-end;
65756
+ flex-wrap: wrap;
65757
+ gap: var(--rb-gap-sm, 0.75rem);
66648
65758
  }
66649
65759
 
66650
- :where(.theme-scope)
66651
- :where([data-block='event-registration'], [data-block='course-registration'])
66652
- .er-whole-series-layout__main {
66653
- min-width: 0;
65760
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65761
+ flex: 1 1 auto;
65762
+ min-width: 10rem;
66654
65763
  }
66655
65764
 
66656
- :where(.theme-scope)
66657
- :where([data-block='event-registration'], [data-block='course-registration'])
66658
- .er-whole-series-layout__sidebar {
66659
- display: none;
65765
+ :where(.theme-scope) .newsletter-inline .newsletter-submit {
65766
+ margin-top: 0;
65767
+ flex-shrink: 0;
66660
65768
  }
66661
65769
 
66662
- @container rb-site (min-width: 768px) {
65770
+ /* Mobile fallback for inline variant */
65771
+ @container rb-site (max-width: 640px) {
66663
65772
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66664
- :where(.theme-scope)
66665
- :where(
66666
- [data-block='event-registration'],
66667
- [data-block='course-registration']
66668
- )
66669
- .er-whole-series-layout__sidebar {
66670
- display: block;
65773
+ :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
65774
+ flex-direction: column;
65775
+ }
65776
+
65777
+ :where(.theme-scope) .newsletter-inline .newsletter-field {
65778
+ min-width: 100%;
66671
65779
  }
66672
65780
  }
66673
65781
  }
66674
65782
 
66675
65783
  /* =============================================================================
66676
- * Step Indicator
65784
+ * Editorial Split Variant
66677
65785
  * =============================================================================
66678
65786
  */
66679
- :where(.theme-scope)
66680
- :where([data-block='event-registration'], [data-block='course-registration'])
66681
- .er-whole-series-steps {
66682
- display: flex;
66683
- align-items: center;
66684
- gap: 0.5rem;
66685
- margin-bottom: 1.5rem;
66686
- }
66687
65787
 
66688
- :where(.theme-scope)
66689
- :where([data-block='event-registration'], [data-block='course-registration'])
66690
- .er-whole-series-step {
66691
- display: flex;
65788
+ :where(.theme-scope) .newsletter-editorial-split {
65789
+ display: grid;
65790
+ grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
65791
+ gap: clamp(2.5rem, 7vw, 7rem);
66692
65792
  align-items: center;
66693
- gap: 0.5rem;
65793
+ text-align: left;
66694
65794
  }
66695
65795
 
66696
- :where(.theme-scope)
66697
- :where([data-block='event-registration'], [data-block='course-registration'])
66698
- .er-whole-series-step-circle {
66699
- width: 1.75rem;
66700
- height: 1.75rem;
66701
- border-radius: 9999px;
65796
+ :where(.theme-scope) .newsletter-editorial-split-copy {
66702
65797
  display: flex;
66703
- align-items: center;
66704
- justify-content: center;
66705
- font-size: 0.75rem;
66706
- font-weight: 600;
66707
- background: var(--er-step-inactive);
66708
- color: var(--er-step-text);
66709
- transition: background-color 0.2s ease;
65798
+ flex-direction: column;
65799
+ gap: var(--rb-gap-sm, 0.75rem);
66710
65800
  }
66711
65801
 
66712
- :where(.theme-scope)
66713
- :where([data-block='event-registration'], [data-block='course-registration'])
66714
- .er-whole-series-step-circle--active {
66715
- background: var(--er-step-active);
66716
- color: var(--er-step-text-active);
65802
+ :where(.theme-scope) .newsletter-editorial-split-form {
65803
+ min-width: 0;
66717
65804
  }
66718
65805
 
66719
- :where(.theme-scope)
66720
- :where([data-block='event-registration'], [data-block='course-registration'])
66721
- .er-whole-series-step-circle--completed {
66722
- background: var(--er-step-completed);
66723
- color: var(--er-step-text);
65806
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
65807
+ max-width: none;
65808
+ margin-inline: 0;
66724
65809
  }
66725
65810
 
66726
- :where(.theme-scope)
66727
- :where([data-block='event-registration'], [data-block='course-registration'])
66728
- .er-whole-series-step-label {
66729
- font-size: 0.875rem;
65811
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
65812
+ font-size: clamp(2rem, 4vw, 3.5rem);
66730
65813
  font-weight: 500;
66731
- color: rgb(var(--tb-mutedText));
66732
- display: none;
66733
65814
  }
66734
65815
 
66735
- @container rb-site (min-width: 640px) {
65816
+ :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
65817
+ text-align: left;
65818
+ }
65819
+
65820
+ @container rb-site (max-width: 767px) {
66736
65821
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
66737
- :where(.theme-scope)
66738
- :where(
66739
- [data-block='event-registration'],
66740
- [data-block='course-registration']
66741
- )
66742
- .er-whole-series-step-label {
66743
- display: block;
65822
+ :where(.theme-scope) .newsletter-editorial-split {
65823
+ grid-template-columns: minmax(0, 1fr);
65824
+ gap: 2rem;
66744
65825
  }
66745
65826
  }
66746
65827
  }
66747
65828
 
66748
- :where(.theme-scope)
66749
- :where([data-block='event-registration'], [data-block='course-registration'])
66750
- .er-whole-series-step-label--active {
66751
- color: var(--er-on-surface);
66752
- font-weight: 600;
66753
- }
66754
-
66755
- :where(.theme-scope)
66756
- :where([data-block='event-registration'], [data-block='course-registration'])
66757
- .er-whole-series-step-connector {
66758
- flex: 1;
66759
- height: 2px;
66760
- background: var(--er-step-connector);
66761
- min-width: 1rem;
66762
- }
65829
+ /* =============================================================================
65830
+ * Success State
65831
+ * =============================================================================
65832
+ */
66763
65833
 
66764
- :where(.theme-scope)
66765
- :where([data-block='event-registration'], [data-block='course-registration'])
66766
- .er-whole-series-step-connector--completed {
66767
- background: var(--er-step-completed);
65834
+ :where(.theme-scope) .newsletter-success {
65835
+ text-align: center;
66768
65836
  }
66769
65837
 
66770
- :where(.theme-scope)
66771
- :where([data-block='event-registration'], [data-block='course-registration'])
66772
- .er-whole-series-step-check {
66773
- width: 0.875rem;
66774
- height: 0.875rem;
65838
+ :where(.theme-scope) .newsletter-success .fb-success {
65839
+ padding: 1rem 1.5rem;
65840
+ background-color: rgba(var(--tb-success, 34 197 94), 0.1);
65841
+ border-radius: var(--radius-md, 0.5rem);
65842
+ color: rgb(var(--tb-text));
66775
65843
  }
66776
65844
 
66777
65845
  /* =============================================================================
66778
- * Lists
65846
+ * Block: Contact + Newsletter
66779
65847
  * =============================================================================
66780
65848
  */
66781
- :where(.theme-scope)
66782
- :where([data-block='event-registration'], [data-block='course-registration'])
66783
- .er-whole-series-run-list {
65849
+
65850
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
66784
65851
  display: grid;
66785
- gap: 1rem;
65852
+ grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
65853
+ gap: clamp(2.5rem, 6vw, 4rem);
65854
+ align-items: start;
66786
65855
  }
66787
65856
 
66788
- /* =============================================================================
66789
- * Run cards
66790
- * =============================================================================
66791
- */
66792
- :where(.theme-scope)
66793
- :where([data-block='event-registration'], [data-block='course-registration'])
66794
- .er-whole-series-run-card {
66795
- border-radius: var(--rb-block-radius);
66796
- border: 1px solid var(--er-border);
66797
- padding: 1rem;
66798
- background: rgb(var(--tb-background));
66799
- cursor: pointer;
66800
- transition:
66801
- border-color var(--rb-block-transition) ease,
66802
- transform var(--rb-block-transition) ease;
65857
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
65858
+ min-width: 0;
66803
65859
  }
66804
65860
 
66805
- :where(.theme-scope)
66806
- :where([data-block='event-registration'], [data-block='course-registration'])
66807
- .er-whole-series-run-card:hover {
66808
- border-color: var(--er-border-hover);
66809
- transform: translateY(-1px);
65861
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
65862
+ margin-bottom: 1.5rem;
66810
65863
  }
66811
65864
 
66812
- :where(.theme-scope)
66813
- :where([data-block='event-registration'], [data-block='course-registration'])
66814
- .er-whole-series-run-card:focus-visible {
66815
- outline: 2px solid var(--er-focus-ring);
66816
- outline-offset: 2px;
65865
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
65866
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
65867
+ margin: 0 0 0.75rem;
66817
65868
  }
66818
65869
 
66819
- :where(.theme-scope)
66820
- :where([data-block='event-registration'], [data-block='course-registration'])
66821
- .er-whole-series-run-card--selected {
66822
- border-color: var(--er-border-selected);
66823
- box-shadow: 0 0 0 3px var(--er-focus-ring);
65870
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
65871
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
65872
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
66824
65873
  }
66825
65874
 
66826
- :where(.theme-scope)
66827
- :where([data-block='event-registration'], [data-block='course-registration'])
66828
- .er-whole-series-run-card__title {
66829
- margin: 0 0 0.25rem 0;
66830
- font-weight: 700;
66831
- font-size: 1.125rem;
65875
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
65876
+ display: flex;
65877
+ flex-direction: column;
65878
+ align-items: flex-start;
66832
65879
  }
66833
65880
 
66834
- :where(.theme-scope)
66835
- :where([data-block='event-registration'], [data-block='course-registration'])
66836
- .er-whole-series-run-card__status {
66837
- margin: 0.25rem 0 0 0;
66838
- opacity: 0.8;
65881
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
65882
+ max-width: none;
65883
+ margin-left: 0;
65884
+ margin-right: 0;
66839
65885
  }
66840
65886
 
66841
- :where(.theme-scope)
66842
- :where([data-block='event-registration'], [data-block='course-registration'])
66843
- .er-whole-series-run-card__sessions,
66844
- :where(.theme-scope)
66845
- :where([data-block='event-registration'], [data-block='course-registration'])
66846
- .er-whole-series-run-card__price,
66847
- :where(.theme-scope)
66848
- :where([data-block='event-registration'], [data-block='course-registration'])
66849
- .er-whole-series-run-card__capacity,
66850
- :where(.theme-scope)
66851
- :where([data-block='event-registration'], [data-block='course-registration'])
66852
- .er-whole-series-run-card__venue {
66853
- margin: 0.25rem 0 0 0;
66854
- opacity: 0.85;
65887
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
65888
+ text-align: left;
66855
65889
  }
66856
65890
 
66857
- /* =============================================================================
66858
- * Capacity Badges
66859
- * =============================================================================
66860
- */
66861
- :where(.theme-scope)
66862
- :where([data-block='event-registration'], [data-block='course-registration'])
66863
- .er-whole-series-capacity-badge {
66864
- display: inline-block;
66865
- padding: 0.125rem 0.5rem;
66866
- border-radius: 9999px;
66867
- font-size: 0.75rem;
66868
- font-weight: 500;
65891
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
65892
+ display: flex;
65893
+ flex-direction: column;
65894
+ gap: 1rem;
66869
65895
  }
66870
65896
 
66871
- :where(.theme-scope)
66872
- :where([data-block='event-registration'], [data-block='course-registration'])
66873
- .er-whole-series-capacity-badge--available {
66874
- background: var(--er-capacity-available-bg);
66875
- color: var(--er-capacity-available-text);
65897
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
65898
+ display: grid;
65899
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
65900
+ gap: 1rem;
66876
65901
  }
66877
65902
 
66878
- :where(.theme-scope)
66879
- :where([data-block='event-registration'], [data-block='course-registration'])
66880
- .er-whole-series-capacity-badge--low {
66881
- background: var(--er-capacity-low-bg);
66882
- color: var(--er-capacity-low-text);
65903
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
65904
+ display: flex;
65905
+ flex-direction: column;
65906
+ gap: 0.25rem;
66883
65907
  }
66884
65908
 
66885
- :where(.theme-scope)
66886
- :where([data-block='event-registration'], [data-block='course-registration'])
66887
- .er-whole-series-capacity-badge--soldout {
66888
- background: var(--er-capacity-soldout-bg);
66889
- color: var(--er-capacity-soldout-text);
65909
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
65910
+ display: flex;
65911
+ flex-direction: column;
65912
+ gap: 0.5rem;
65913
+ border: none;
65914
+ padding: 0;
65915
+ margin: 0;
66890
65916
  }
66891
65917
 
66892
- /* =============================================================================
66893
- * Summary + Details
66894
- * =============================================================================
66895
- */
66896
- :where(.theme-scope)
66897
- :where([data-block='event-registration'], [data-block='course-registration'])
66898
- .er-whole-series-details {
66899
- display: grid;
66900
- gap: 1rem;
65918
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
65919
+ display: flex;
65920
+ align-items: center;
65921
+ gap: 0.5rem;
66901
65922
  }
66902
65923
 
66903
- :where(.theme-scope)
66904
- :where([data-block='event-registration'], [data-block='course-registration'])
66905
- .er-whole-series-summary {
65924
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
65925
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
65926
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
66906
65927
  border-radius: var(--rb-block-radius);
66907
- border: 1px solid var(--er-summary-border);
66908
65928
  padding: 1rem;
66909
- background: var(--er-summary-bg);
66910
- }
66911
-
66912
- :where(.theme-scope)
66913
- :where([data-block='event-registration'], [data-block='course-registration'])
66914
- .er-whole-series-summary__title {
66915
- margin: 0;
66916
- font-size: 1.25rem;
66917
- font-weight: 800;
65929
+ font-size: 0.875rem;
66918
65930
  }
66919
65931
 
66920
- :where(.theme-scope)
66921
- :where([data-block='event-registration'], [data-block='course-registration'])
66922
- .er-whole-series-summary__sessions-title {
66923
- margin: 0.75rem 0 0.5rem 0;
66924
- font-weight: 700;
65932
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
65933
+ background-color: var(--fb-success-bg);
65934
+ color: var(--fb-success-text);
65935
+ border: 1px solid var(--fb-success-border);
66925
65936
  }
66926
65937
 
66927
- :where(.theme-scope)
66928
- :where([data-block='event-registration'], [data-block='course-registration'])
66929
- .er-whole-series-summary__sessions-list {
66930
- list-style: none;
66931
- padding: 0;
66932
- margin: 0;
66933
- display: grid;
66934
- gap: 0.35rem;
65938
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
65939
+ background-color: var(--fb-error-bg);
65940
+ color: var(--fb-error-text);
65941
+ border: 1px solid var(--fb-error-border);
66935
65942
  }
66936
65943
 
66937
- :where(.theme-scope)
66938
- :where([data-block='event-registration'], [data-block='course-registration'])
66939
- .er-whole-series-summary__session {
66940
- opacity: 0.9;
65944
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
65945
+ background-color: var(--fb-empty-bg);
65946
+ color: var(--fb-empty-text);
65947
+ border: 1px dashed var(--fb-empty-border);
65948
+ text-align: center;
66941
65949
  }
66942
65950
 
66943
- :where(.theme-scope)
66944
- :where([data-block='event-registration'], [data-block='course-registration'])
66945
- .er-whole-series-summary__venue,
66946
- :where(.theme-scope)
66947
- :where([data-block='event-registration'], [data-block='course-registration'])
66948
- .er-whole-series-summary__price,
66949
- :where(.theme-scope)
66950
- :where([data-block='event-registration'], [data-block='course-registration'])
66951
- .er-whole-series-summary__membership {
66952
- margin: 0.5rem 0 0 0;
66953
- opacity: 0.9;
65951
+ :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
65952
+ margin-top: 0.5rem;
66954
65953
  }
66955
65954
 
66956
65955
  /* =============================================================================
66957
- * Form
65956
+ * Block: Team Members
66958
65957
  * =============================================================================
65958
+ *
65959
+ * Site/theme authors sometimes need different thumbnail shapes/sizes without
65960
+ * changing global fragment defaults. We expose these controls on the block and
65961
+ * style them via data attributes on the \`.rb-team-members\` wrapper.
66959
65962
  */
66960
- :where(.theme-scope)
66961
- :where([data-block='event-registration'], [data-block='course-registration'])
66962
- .er-whole-series-form {
66963
- display: grid;
66964
- gap: 1rem;
66965
- }
66966
65963
 
66967
- :where(.theme-scope)
66968
- :where([data-block='event-registration'], [data-block='course-registration'])
66969
- .er-whole-series-form__field {
66970
- display: grid;
66971
- gap: 0.35rem;
65964
+ /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
65965
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
65966
+ text-align: left;
66972
65967
  }
66973
65968
 
66974
- :where(.theme-scope)
66975
- :where([data-block='event-registration'], [data-block='course-registration'])
66976
- .er-whole-series-form__label {
66977
- font-size: 0.875rem;
66978
- font-weight: 600;
65969
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
65970
+ align-items: flex-start;
65971
+ text-align: left;
66979
65972
  }
66980
65973
 
66981
- :where(.theme-scope)
66982
- :where([data-block='event-registration'], [data-block='course-registration'])
66983
- .er-whole-series-form__label--required::after {
66984
- content: ' *';
66985
- color: var(--er-required);
65974
+ @container rb-site (min-width: 1024px) {
65975
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
65976
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
65977
+ width: 75%;
65978
+ margin-left: 0;
65979
+ margin-right: auto;
65980
+ }
65981
+ }
66986
65982
  }
66987
65983
 
66988
- :where(.theme-scope)
66989
- :where([data-block='event-registration'], [data-block='course-registration'])
66990
- .er-whole-series-form__input {
66991
- border-radius: calc(var(--rb-block-radius) * 0.6);
66992
- border: 1px solid var(--er-border);
66993
- padding: 0.6rem 0.75rem;
66994
- background: rgb(var(--tb-background));
66995
- color: rgb(var(--tb-foreground));
65984
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
65985
+ display: block;
65986
+ width: 100%;
65987
+ height: auto;
66996
65988
  }
66997
65989
 
66998
- :where(.theme-scope)
66999
- :where([data-block='event-registration'], [data-block='course-registration'])
67000
- .er-whole-series-form__textarea {
67001
- border-radius: calc(var(--rb-block-radius) * 0.6);
67002
- border: 1px solid var(--er-border);
67003
- padding: 0.6rem 0.75rem;
67004
- background: rgb(var(--tb-background));
67005
- color: rgb(var(--tb-foreground));
67006
- resize: vertical;
65990
+ :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
65991
+ font-weight: 600;
67007
65992
  }
67008
65993
 
67009
- :where(.theme-scope)
67010
- :where([data-block='event-registration'], [data-block='course-registration'])
67011
- .er-whole-series-form__input:focus,
67012
- :where(.theme-scope)
67013
- :where([data-block='event-registration'], [data-block='course-registration'])
67014
- .er-whole-series-form__textarea:focus {
67015
- outline: 2px solid var(--er-focus-ring);
67016
- outline-offset: 2px;
65994
+ /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
65995
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
65996
+ --rb-team-thumb-max: 11.25rem; /* ~180px default */
65997
+ --rb-team-image-basis: 33.333%;
67017
65998
  }
67018
65999
 
67019
- :where(.theme-scope)
67020
- :where([data-block='event-registration'], [data-block='course-registration'])
67021
- .er-whole-series-form__input--error,
67022
- :where(.theme-scope)
67023
- :where([data-block='event-registration'], [data-block='course-registration'])
67024
- .er-whole-series-form__textarea.er-whole-series-form__input--error {
67025
- border-color: var(--er-border-error);
66000
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
66001
+ --rb-team-thumb-max: 8.75rem; /* ~140px */
66002
+ --rb-team-image-basis: 25%;
67026
66003
  }
67027
66004
 
67028
- :where(.theme-scope)
67029
- :where([data-block='event-registration'], [data-block='course-registration'])
67030
- .er-whole-series-form__error {
67031
- font-size: 0.875rem;
67032
- color: var(--er-error-text);
66005
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
66006
+ --rb-team-thumb-max: 11.25rem; /* ~180px */
66007
+ --rb-team-image-basis: 33.333%;
67033
66008
  }
67034
66009
 
67035
- :where(.theme-scope)
67036
- :where([data-block='event-registration'], [data-block='course-registration'])
67037
- .er-whole-series-form__hint {
67038
- font-size: 0.875rem;
67039
- opacity: 0.7;
67040
- }
67041
-
67042
- /* Logged-in user hint with logout link */
67043
- :where(.theme-scope)
67044
- :where([data-block='event-registration'], [data-block='course-registration'])
67045
- .er-whole-series-logged-in-hint {
67046
- font-size: 0.875rem;
67047
- opacity: 0.7;
67048
- margin: 0.25rem 0 0 0;
67049
- }
67050
-
67051
- :where(.theme-scope)
67052
- :where([data-block='event-registration'], [data-block='course-registration'])
67053
- .er-whole-series-link {
67054
- background: none;
67055
- border: none;
67056
- padding: 0;
67057
- font-size: inherit;
67058
- color: rgb(var(--tb-primary));
67059
- cursor: pointer;
67060
- text-decoration: underline;
67061
- text-underline-offset: 2px;
67062
- }
67063
-
67064
- :where(.theme-scope)
67065
- :where([data-block='event-registration'], [data-block='course-registration'])
67066
- .er-whole-series-link:hover {
67067
- text-decoration: none;
67068
- }
67069
-
67070
- /* =============================================================================
67071
- * Actions
67072
- * =============================================================================
67073
- */
67074
- :where(.theme-scope)
67075
- :where([data-block='event-registration'], [data-block='course-registration'])
67076
- .er-whole-series-actions {
67077
- display: flex;
67078
- align-items: center;
67079
- justify-content: space-between;
67080
- gap: 0.75rem;
67081
- margin-top: 0.25rem;
67082
- }
67083
-
67084
- :where(.theme-scope)
67085
- :where([data-block='event-registration'], [data-block='course-registration'])
67086
- .er-whole-series-back-btn {
67087
- border: 0;
67088
- background: transparent;
67089
- color: var(--er-on-surface);
67090
- opacity: 0.8;
67091
- padding: 0.25rem 0.25rem;
67092
- cursor: pointer;
67093
- }
67094
-
67095
- :where(.theme-scope)
67096
- :where([data-block='event-registration'], [data-block='course-registration'])
67097
- .er-whole-series-back-btn:hover {
67098
- opacity: 1;
67099
- text-decoration: underline;
67100
- }
67101
-
67102
- /* =============================================================================
67103
- * Payment Options
67104
- * =============================================================================
67105
- */
67106
- :where(.theme-scope)
67107
- :where([data-block='event-registration'], [data-block='course-registration'])
67108
- .er-whole-series-payment__options {
67109
- display: grid;
67110
- gap: 0.5rem;
67111
- }
67112
-
67113
- :where(.theme-scope)
67114
- :where([data-block='event-registration'], [data-block='course-registration'])
67115
- .er-whole-series-payment__option {
67116
- display: flex;
67117
- align-items: center;
67118
- gap: 0.5rem;
67119
- }
67120
-
67121
- /* =============================================================================
67122
- * Payment Tiles (Card Grid)
67123
- * =============================================================================
67124
- */
67125
- :where(.theme-scope)
67126
- :where([data-block='event-registration'], [data-block='course-registration'])
67127
- .er-whole-series-payment-tiles {
67128
- display: grid;
67129
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
67130
- gap: 0.75rem;
67131
- }
67132
-
67133
- :where(.theme-scope)
67134
- :where([data-block='event-registration'], [data-block='course-registration'])
67135
- .er-whole-series-payment-tile {
67136
- border-radius: var(--rb-block-radius);
67137
- border: 1px solid var(--er-payment-border);
67138
- padding: 1rem;
67139
- background: rgb(var(--tb-background));
67140
- cursor: pointer;
67141
- transition:
67142
- border-color 0.15s ease,
67143
- box-shadow 0.15s ease,
67144
- background-color 0.15s ease;
67145
- position: relative;
67146
- }
67147
-
67148
- :where(.theme-scope)
67149
- :where([data-block='event-registration'], [data-block='course-registration'])
67150
- .er-whole-series-payment-tile:hover {
67151
- border-color: var(--er-payment-border-hover);
67152
- }
67153
-
67154
- :where(.theme-scope)
67155
- :where([data-block='event-registration'], [data-block='course-registration'])
67156
- .er-whole-series-payment-tile:focus-visible {
67157
- outline: 2px solid var(--er-focus-ring);
67158
- outline-offset: 2px;
67159
- }
67160
-
67161
- :where(.theme-scope)
67162
- :where([data-block='event-registration'], [data-block='course-registration'])
67163
- .er-whole-series-payment-tile--selected {
67164
- border-color: var(--er-payment-border-selected);
67165
- background: var(--er-payment-bg-selected);
67166
- box-shadow: 0 0 0 3px var(--er-focus-ring);
67167
- }
67168
-
67169
- :where(.theme-scope)
67170
- :where([data-block='event-registration'], [data-block='course-registration'])
67171
- .er-whole-series-payment-tile--upsell {
67172
- border-style: dashed;
67173
- }
67174
-
67175
- :where(.theme-scope)
67176
- :where([data-block='event-registration'], [data-block='course-registration'])
67177
- .er-whole-series-payment-tile__header {
67178
- display: flex;
67179
- align-items: flex-start;
67180
- justify-content: space-between;
67181
- gap: 0.5rem;
67182
- }
67183
-
67184
- :where(.theme-scope)
67185
- :where([data-block='event-registration'], [data-block='course-registration'])
67186
- .er-whole-series-payment-tile__name {
67187
- margin: 0;
67188
- font-weight: 600;
67189
- font-size: 1rem;
67190
- }
67191
-
67192
- :where(.theme-scope)
67193
- :where([data-block='event-registration'], [data-block='course-registration'])
67194
- .er-whole-series-payment-tile__description {
67195
- margin: 0.25rem 0 0 0;
67196
- font-size: 0.875rem;
67197
- opacity: 0.7;
67198
- }
67199
-
67200
- :where(.theme-scope)
67201
- :where([data-block='event-registration'], [data-block='course-registration'])
67202
- .er-whole-series-payment-tile__price {
67203
- font-weight: 600;
67204
- font-size: 0.875rem;
67205
- white-space: nowrap;
67206
- }
67207
-
67208
- :where(.theme-scope)
67209
- :where([data-block='event-registration'], [data-block='course-registration'])
67210
- .er-whole-series-payment-tile__badge {
67211
- display: inline-block;
67212
- padding: 0.125rem 0.5rem;
67213
- border-radius: 9999px;
67214
- font-size: 0.75rem;
67215
- font-weight: 500;
67216
- margin-top: 0.5rem;
67217
- }
67218
-
67219
- /* Checkmark indicator on selected tile */
67220
- :where(.theme-scope)
67221
- :where([data-block='event-registration'], [data-block='course-registration'])
67222
- .er-whole-series-payment-tile__check {
67223
- position: absolute;
67224
- top: 0.5rem;
67225
- right: 0.5rem;
67226
- width: 1.25rem;
67227
- height: 1.25rem;
67228
- border-radius: 9999px;
67229
- background: var(--er-check-bg);
67230
- color: var(--er-check-text);
67231
- display: flex;
67232
- align-items: center;
67233
- justify-content: center;
67234
- opacity: 0;
67235
- transition: opacity 0.15s ease;
67236
- }
67237
-
67238
- :where(.theme-scope)
67239
- :where([data-block='event-registration'], [data-block='course-registration'])
67240
- .er-whole-series-payment-tile--selected
67241
- .er-whole-series-payment-tile__check {
67242
- opacity: 1;
67243
- }
67244
-
67245
- /* =============================================================================
67246
- * Booking Mode Step
67247
- * =============================================================================
67248
- */
67249
- :where(.theme-scope)
67250
- :where([data-block='event-registration'], [data-block='course-registration'])
67251
- .er-whole-series-booking-mode {
67252
- display: grid;
67253
- gap: 1rem;
67254
- }
67255
-
67256
- :where(.theme-scope)
67257
- :where([data-block='event-registration'], [data-block='course-registration'])
67258
- .er-whole-series-booking-mode__title {
67259
- margin: 0;
67260
- font-size: var(--er-step-title-size);
67261
- font-weight: 700;
67262
- }
67263
-
67264
- :where(.theme-scope)
67265
- :where([data-block='event-registration'], [data-block='course-registration'])
67266
- .er-whole-series-booking-mode__subtitle {
67267
- margin: 0.25rem 0 0 0;
67268
- opacity: 0.7;
67269
- }
67270
-
67271
- :where(.theme-scope)
67272
- :where([data-block='event-registration'], [data-block='course-registration'])
67273
- .er-whole-series-booking-mode__link {
67274
- margin-top: 0.5rem;
67275
- font-size: 0.875rem;
67276
- }
67277
-
67278
- :where(.theme-scope)
67279
- :where([data-block='event-registration'], [data-block='course-registration'])
67280
- .er-whole-series-booking-mode__link
67281
- a {
67282
- color: rgb(var(--tb-primary));
67283
- text-decoration: underline;
67284
- cursor: pointer;
67285
- }
67286
-
67287
- :where(.theme-scope)
67288
- :where([data-block='event-registration'], [data-block='course-registration'])
67289
- .er-whole-series-booking-mode__link
67290
- a:hover {
67291
- text-decoration: none;
67292
- }
67293
-
67294
- /* =============================================================================
67295
- * Membership Hero
67296
- * =============================================================================
67297
- */
67298
- :where(.theme-scope)
67299
- :where([data-block='event-registration'], [data-block='course-registration'])
67300
- .er-whole-series-membership-hero {
67301
- border-radius: var(--rb-block-radius);
67302
- background: var(--er-success-bg);
67303
- border: 1px solid rgba(var(--tb-success), 0.2);
67304
- padding: 1.5rem;
67305
- text-align: center;
67306
- }
67307
-
67308
- :where(.theme-scope)
67309
- :where([data-block='event-registration'], [data-block='course-registration'])
67310
- .er-whole-series-membership-hero__icon {
67311
- font-size: 2rem;
67312
- margin-bottom: 0.75rem;
67313
- }
67314
-
67315
- :where(.theme-scope)
67316
- :where([data-block='event-registration'], [data-block='course-registration'])
67317
- .er-whole-series-membership-hero__title {
67318
- margin: 0;
67319
- font-size: 1.25rem;
67320
- font-weight: 700;
67321
- color: var(--er-success-text);
67322
- }
67323
-
67324
- :where(.theme-scope)
67325
- :where([data-block='event-registration'], [data-block='course-registration'])
67326
- .er-whole-series-membership-hero__subtitle {
67327
- margin: 0.25rem 0 0 0;
67328
- font-size: 0.875rem;
67329
- opacity: 0.8;
67330
- }
67331
-
67332
- /* =============================================================================
67333
- * Portal Auth Sidebar
67334
- * =============================================================================
67335
- */
67336
- :where(.theme-scope)
67337
- :where([data-block='event-registration'], [data-block='course-registration'])
67338
- .er-whole-series-portal-sidebar {
67339
- border-radius: var(--rb-block-radius);
67340
- border: 1px solid var(--er-border);
67341
- padding: 1.25rem;
67342
- background: rgb(var(--tb-surface));
67343
- color: var(--er-on-surface);
67344
- }
67345
-
67346
- :where(.theme-scope)
67347
- :where([data-block='event-registration'], [data-block='course-registration'])
67348
- .er-whole-series-portal-sidebar__icon {
67349
- font-size: 1.5rem;
67350
- margin-bottom: 0.5rem;
67351
- }
67352
-
67353
- :where(.theme-scope)
67354
- :where([data-block='event-registration'], [data-block='course-registration'])
67355
- .er-whole-series-portal-sidebar__title {
67356
- margin: 0;
67357
- font-size: 1rem;
67358
- font-weight: 600;
67359
- }
67360
-
67361
- :where(.theme-scope)
67362
- :where([data-block='event-registration'], [data-block='course-registration'])
67363
- .er-whole-series-portal-sidebar__text {
67364
- margin: 0.5rem 0 0 0;
67365
- font-size: 0.875rem;
67366
- opacity: 0.8;
67367
- }
67368
-
67369
- :where(.theme-scope)
67370
- :where([data-block='event-registration'], [data-block='course-registration'])
67371
- .er-whole-series-portal-sidebar__action {
67372
- margin-top: 1rem;
67373
- }
67374
-
67375
- :where(.theme-scope)
67376
- :where([data-block='event-registration'], [data-block='course-registration'])
67377
- .er-whole-series-portal-sidebar__link {
67378
- color: rgb(var(--tb-primary));
67379
- cursor: pointer;
67380
- text-decoration: underline;
67381
- font-size: 0.875rem;
67382
- }
67383
-
67384
- :where(.theme-scope)
67385
- :where([data-block='event-registration'], [data-block='course-registration'])
67386
- .er-whole-series-portal-sidebar__link:hover {
67387
- text-decoration: none;
67388
- }
67389
-
67390
- /* =============================================================================
67391
- * Modal (for Magic Link)
67392
- * =============================================================================
67393
- */
67394
- :where(.theme-scope)
67395
- :where([data-block='event-registration'], [data-block='course-registration'])
67396
- .er-whole-series-modal-overlay {
67397
- position: fixed;
67398
- inset: 0;
67399
- background: rgba(var(--tb-scrim), 0.5);
67400
- display: flex;
67401
- align-items: center;
67402
- justify-content: center;
67403
- z-index: 100;
67404
- animation: er-whole-series-fade-in 0.15s ease;
67405
- }
67406
-
67407
- :where(.theme-scope)
67408
- :where([data-block='event-registration'], [data-block='course-registration'])
67409
- .er-whole-series-modal {
67410
- background: rgb(var(--tb-surface));
67411
- color: var(--er-on-surface);
67412
- border-radius: var(--rb-block-radius);
67413
- padding: 1.5rem;
67414
- max-width: 28rem;
67415
- width: calc(100% - 2rem);
67416
- position: relative;
67417
- animation: er-whole-series-slide-up 0.2s ease;
67418
- }
67419
-
67420
- :where(.theme-scope)
67421
- :where([data-block='event-registration'], [data-block='course-registration'])
67422
- .er-whole-series-modal-close {
67423
- position: absolute;
67424
- top: 0.75rem;
67425
- right: 0.75rem;
67426
- background: transparent;
67427
- border: 0;
67428
- padding: 0.25rem;
67429
- cursor: pointer;
67430
- opacity: 0.6;
67431
- transition: opacity 0.15s ease;
67432
- }
67433
-
67434
- :where(.theme-scope)
67435
- :where([data-block='event-registration'], [data-block='course-registration'])
67436
- .er-whole-series-modal-close:hover {
67437
- opacity: 1;
67438
- }
67439
-
67440
- @keyframes er-whole-series-fade-in {
67441
- from {
67442
- opacity: 0;
67443
- }
67444
- to {
67445
- opacity: 1;
67446
- }
67447
- }
67448
-
67449
- @keyframes er-whole-series-slide-up {
67450
- from {
67451
- opacity: 0;
67452
- transform: translateY(10px);
67453
- }
67454
- to {
67455
- opacity: 1;
67456
- transform: translateY(0);
67457
- }
67458
- }
67459
-
67460
- /* Reduced motion */
67461
- @media (prefers-reduced-motion: reduce) {
67462
- :where(.theme-scope)
67463
- :where(
67464
- [data-block='event-registration'],
67465
- [data-block='course-registration']
67466
- )
67467
- .er-whole-series-modal-overlay,
67468
- :where(.theme-scope)
67469
- :where(
67470
- [data-block='event-registration'],
67471
- [data-block='course-registration']
67472
- )
67473
- .er-whole-series-modal {
67474
- animation: none;
67475
- }
67476
- }
67477
-
67478
- /* =============================================================================
67479
- * Center States
67480
- * =============================================================================
67481
- */
67482
- :where(.theme-scope)
67483
- :where([data-block='event-registration'], [data-block='course-registration'])
67484
- .er-whole-series-center {
67485
- display: grid;
67486
- place-items: center;
67487
- gap: 0.75rem;
67488
- padding: 2rem 0;
67489
- }
67490
-
67491
- /* =============================================================================
67492
- * Success/Waitlist/Error States
67493
- * =============================================================================
67494
- */
67495
- :where(.theme-scope)
67496
- :where([data-block='event-registration'], [data-block='course-registration'])
67497
- .er-whole-series-success,
67498
- :where(.theme-scope)
67499
- :where([data-block='event-registration'], [data-block='course-registration'])
67500
- .er-whole-series-waitlist,
67501
- :where(.theme-scope)
67502
- :where([data-block='event-registration'], [data-block='course-registration'])
67503
- .er-whole-series-error,
67504
- :where(.theme-scope)
67505
- :where([data-block='event-registration'], [data-block='course-registration'])
67506
- .er-whole-series-payment-failed {
67507
- text-align: center;
67508
- padding: 2rem 1rem;
67509
- }
67510
-
67511
- /* State icon color variants (layout from registration-surface.css) */
67512
- :where(.theme-scope)
67513
- :where([data-block='event-registration'], [data-block='course-registration'])
67514
- .rb-state-icon--success {
67515
- background: var(--er-success-bg);
67516
- color: var(--er-success-text);
67517
- }
67518
-
67519
- :where(.theme-scope)
67520
- :where([data-block='event-registration'], [data-block='course-registration'])
67521
- .rb-state-icon--error {
67522
- background: var(--er-error-bg);
67523
- color: var(--er-error-text);
67524
- }
67525
-
67526
- :where(.theme-scope)
67527
- :where([data-block='event-registration'], [data-block='course-registration'])
67528
- .rb-state-icon--waitlist,
67529
- :where(.theme-scope)
67530
- :where([data-block='event-registration'], [data-block='course-registration'])
67531
- .rb-state-icon--warning {
67532
- background: var(--er-waitlist-bg);
67533
- color: var(--er-waitlist-text);
67534
- }
67535
-
67536
- :where(.theme-scope)
67537
- :where([data-block='event-registration'], [data-block='course-registration'])
67538
- .er-whole-series-success__title,
67539
- :where(.theme-scope)
67540
- :where([data-block='event-registration'], [data-block='course-registration'])
67541
- .er-whole-series-waitlist__title,
67542
- :where(.theme-scope)
67543
- :where([data-block='event-registration'], [data-block='course-registration'])
67544
- .er-whole-series-error__title,
67545
- :where(.theme-scope)
67546
- :where([data-block='event-registration'], [data-block='course-registration'])
67547
- .er-whole-series-payment-failed__title {
67548
- margin: 0.75rem 0 0.5rem 0;
67549
- font-size: 1.125rem;
67550
- font-weight: 700;
67551
- }
67552
-
67553
- :where(.theme-scope)
67554
- :where([data-block='event-registration'], [data-block='course-registration'])
67555
- .er-whole-series-success__message,
67556
- :where(.theme-scope)
67557
- :where([data-block='event-registration'], [data-block='course-registration'])
67558
- .er-whole-series-waitlist__message,
67559
- :where(.theme-scope)
67560
- :where([data-block='event-registration'], [data-block='course-registration'])
67561
- .er-whole-series-error__message,
67562
- :where(.theme-scope)
67563
- :where([data-block='event-registration'], [data-block='course-registration'])
67564
- .er-whole-series-payment-failed__message {
67565
- margin: 0;
67566
- opacity: 0.7;
67567
- }
67568
-
67569
- :where(.theme-scope)
67570
- :where([data-block='event-registration'], [data-block='course-registration'])
67571
- .er-whole-series-success__membership {
67572
- margin-top: 0.5rem;
67573
- font-size: 0.875rem;
67574
- color: var(--er-success-text);
67575
- }
67576
-
67577
- :where(.theme-scope)
67578
- :where([data-block='event-registration'], [data-block='course-registration'])
67579
- .er-whole-series-error__retry,
67580
- :where(.theme-scope)
67581
- :where([data-block='event-registration'], [data-block='course-registration'])
67582
- .er-whole-series-payment-failed__retry {
67583
- margin-top: 1rem;
67584
- }
67585
-
67586
- /* =============================================================================
67587
- * Discount Code Section
67588
- * =============================================================================
67589
- */
67590
- :where(.theme-scope)
67591
- :where([data-block='event-registration'], [data-block='course-registration'])
67592
- .er-whole-series-discount {
67593
- margin-top: 0.5rem;
67594
- }
67595
-
67596
- :where(.theme-scope)
67597
- :where([data-block='event-registration'], [data-block='course-registration'])
67598
- .er-whole-series-discount__form {
67599
- display: grid;
67600
- gap: 0.5rem;
67601
- }
67602
-
67603
- :where(.theme-scope)
67604
- :where([data-block='event-registration'], [data-block='course-registration'])
67605
- .er-whole-series-discount__toggle {
67606
- background: transparent;
67607
- border: 0;
67608
- padding: 0;
67609
- color: rgb(var(--tb-primary));
67610
- cursor: pointer;
67611
- font-size: 0.875rem;
67612
- text-decoration: underline;
67613
- }
67614
-
67615
- :where(.theme-scope)
67616
- :where([data-block='event-registration'], [data-block='course-registration'])
67617
- .er-whole-series-discount__toggle:hover {
67618
- text-decoration: none;
67619
- }
67620
-
67621
- :where(.theme-scope)
67622
- :where([data-block='event-registration'], [data-block='course-registration'])
67623
- .er-whole-series-discount__label {
67624
- font-size: 0.875rem;
67625
- font-weight: 600;
67626
- }
67627
-
67628
- :where(.theme-scope)
67629
- :where([data-block='event-registration'], [data-block='course-registration'])
67630
- .er-whole-series-discount__row {
67631
- display: flex;
67632
- gap: 0.5rem;
67633
- }
67634
-
67635
- :where(.theme-scope)
67636
- :where([data-block='event-registration'], [data-block='course-registration'])
67637
- .er-whole-series-discount__input {
67638
- flex: 1;
67639
- border-radius: calc(var(--rb-block-radius) * 0.6);
67640
- border: 1px solid var(--er-border);
67641
- padding: 0.5rem 0.75rem;
67642
- background: rgb(var(--tb-background));
67643
- color: rgb(var(--tb-foreground));
67644
- font-size: 0.875rem;
67645
- }
67646
-
67647
- :where(.theme-scope)
67648
- :where([data-block='event-registration'], [data-block='course-registration'])
67649
- .er-whole-series-discount__input:focus {
67650
- outline: 2px solid var(--er-focus-ring);
67651
- outline-offset: 2px;
67652
- }
67653
-
67654
- :where(.theme-scope)
67655
- :where([data-block='event-registration'], [data-block='course-registration'])
67656
- .er-whole-series-discount__remove {
67657
- background: transparent;
67658
- border: 0;
67659
- padding: 0.25rem;
67660
- cursor: pointer;
67661
- opacity: 0.6;
67662
- }
67663
-
67664
- :where(.theme-scope)
67665
- :where([data-block='event-registration'], [data-block='course-registration'])
67666
- .er-whole-series-discount__apply {
67667
- background: transparent;
67668
- border: 0;
67669
- padding: 0.25rem;
67670
- cursor: pointer;
67671
- opacity: 0.8;
67672
- }
67673
-
67674
- :where(.theme-scope)
67675
- :where([data-block='event-registration'], [data-block='course-registration'])
67676
- .er-whole-series-discount__remove:hover {
67677
- opacity: 1;
67678
- }
67679
-
67680
- :where(.theme-scope)
67681
- :where([data-block='event-registration'], [data-block='course-registration'])
67682
- .er-whole-series-discount__apply:hover {
67683
- opacity: 1;
67684
- }
67685
-
67686
- :where(.theme-scope)
67687
- :where([data-block='event-registration'], [data-block='course-registration'])
67688
- .er-whole-series-discount__hint {
67689
- margin: 0;
67690
- font-size: 0.875rem;
67691
- opacity: 0.7;
67692
- }
67693
-
67694
- :where(.theme-scope)
67695
- :where([data-block='event-registration'], [data-block='course-registration'])
67696
- .er-whole-series-discount__feedback {
67697
- margin: 0;
67698
- font-size: 0.875rem;
67699
- }
67700
-
67701
- /* =============================================================================
67702
- * Altcha (Spam Protection)
67703
- * =============================================================================
67704
- */
67705
- :where(.theme-scope)
67706
- :where([data-block='event-registration'], [data-block='course-registration'])
67707
- .er-whole-series-altcha {
67708
- margin-top: 1rem;
67709
- }
67710
-
67711
- /* =============================================================================
67712
- * Magic Link Form
67713
- * =============================================================================
67714
- */
67715
- :where(.theme-scope)
67716
- :where([data-block='event-registration'], [data-block='course-registration'])
67717
- .er-whole-series-magic-link-form {
67718
- display: flex;
67719
- flex-direction: column;
67720
- gap: 0.75rem;
67721
- }
67722
-
67723
- :where(.theme-scope)
67724
- :where([data-block='event-registration'], [data-block='course-registration'])
67725
- .er-whole-series-magic-link-title {
67726
- margin: 0;
67727
- font-size: 1.25rem;
67728
- font-weight: 700;
67729
- }
67730
-
67731
- :where(.theme-scope)
67732
- :where([data-block='event-registration'], [data-block='course-registration'])
67733
- .er-whole-series-magic-link-success {
67734
- display: flex;
67735
- flex-direction: column;
67736
- gap: 0.75rem;
67737
- }
67738
-
67739
- :where(.theme-scope)
67740
- :where([data-block='event-registration'], [data-block='course-registration'])
67741
- .er-whole-series-portal-auth-text {
67742
- margin: 0;
67743
- font-size: 0.875rem;
67744
- opacity: 0.8;
67745
- }
67746
-
67747
- :where(.theme-scope)
67748
- :where([data-block='event-registration'], [data-block='course-registration'])
67749
- .er-whole-series-portal-auth-text--success {
67750
- color: var(--er-success-text);
67751
- }
67752
-
67753
- :where(.theme-scope)
67754
- :where([data-block='event-registration'], [data-block='course-registration'])
67755
- .er-whole-series-portal-auth-text--error {
67756
- color: var(--er-error-text);
67757
- }
67758
-
67759
- :where(.theme-scope)
67760
- :where([data-block='event-registration'], [data-block='course-registration'])
67761
- .er-whole-series-modal-btn {
67762
- border-radius: calc(var(--rb-block-radius) * 0.6);
67763
- border: 0;
67764
- padding: 0.6rem 1rem;
67765
- font-size: 0.875rem;
67766
- font-weight: 600;
67767
- cursor: pointer;
67768
- transition: opacity 0.15s ease;
67769
- background: rgb(var(--tb-primary));
67770
- color: rgb(var(--tb-primaryText, 255 255 255));
67771
- }
67772
-
67773
- :where(.theme-scope)
67774
- :where([data-block='event-registration'], [data-block='course-registration'])
67775
- .er-whole-series-modal-btn:hover {
67776
- opacity: 0.9;
67777
- }
67778
-
67779
- :where(.theme-scope)
67780
- :where([data-block='event-registration'], [data-block='course-registration'])
67781
- .er-whole-series-modal-btn:disabled {
67782
- opacity: 0.5;
67783
- cursor: not-allowed;
67784
- }
67785
-
67786
- :where(.theme-scope)
67787
- :where([data-block='event-registration'], [data-block='course-registration'])
67788
- .er-whole-series-modal-btn--secondary {
67789
- background: transparent;
67790
- color: var(--er-on-surface);
67791
- border: 1px solid var(--er-border);
67792
- }
67793
-
67794
- :where(.theme-scope)
67795
- :where([data-block='event-registration'], [data-block='course-registration'])
67796
- .er-whole-series-modal-btn--secondary:hover {
67797
- background: var(--er-on-surface-hover-bg);
67798
- }
67799
-
67800
- /* =============================================================================
67801
- * Utility Classes
67802
- * =============================================================================
67803
- */
67804
- :where(.theme-scope)
67805
- :where([data-block='event-registration'], [data-block='course-registration'])
67806
- .er-whole-series-text--muted {
67807
- opacity: 0.7;
67808
- }
67809
-
67810
- :where(.theme-scope)
67811
- :where([data-block='event-registration'], [data-block='course-registration'])
67812
- .er-whole-series-text--error {
67813
- color: var(--er-error-text);
67814
- }
67815
-
67816
- :where(.theme-scope)
67817
- :where([data-block='event-registration'], [data-block='course-registration'])
67818
- .er-whole-series-text--success {
67819
- color: var(--er-success-text);
67820
- }
67821
-
67822
- :where(.theme-scope)
67823
- :where([data-block='event-registration'], [data-block='course-registration'])
67824
- .er-whole-series-sr-only {
67825
- position: absolute;
67826
- width: 1px;
67827
- height: 1px;
67828
- padding: 0;
67829
- margin: -1px;
67830
- overflow: hidden;
67831
- clip: rect(0, 0, 0, 0);
67832
- white-space: nowrap;
67833
- border-width: 0;
67834
- }
67835
-
67836
- /* Stack utility */
67837
- :where(.theme-scope)
67838
- :where([data-block='event-registration'], [data-block='course-registration'])
67839
- .er-whole-series-stack {
67840
- display: flex;
67841
- flex-direction: column;
67842
- }
67843
-
67844
- :where(.theme-scope)
67845
- :where([data-block='event-registration'], [data-block='course-registration'])
67846
- .er-whole-series-stack--gap-sm {
67847
- gap: 0.5rem;
67848
- }
67849
-
67850
- :where(.theme-scope)
67851
- :where([data-block='event-registration'], [data-block='course-registration'])
67852
- .er-whole-series-stack--gap-md {
67853
- gap: 1rem;
67854
- }
67855
-
67856
- :where(.theme-scope)
67857
- :where([data-block='event-registration'], [data-block='course-registration'])
67858
- .er-whole-series-stack--gap-lg {
67859
- gap: 1.5rem;
67860
- }
67861
-
67862
- /* =============================================================================
67863
- * Block: Newsletter Signup
67864
- * =============================================================================
67865
- */
67866
-
67867
- /* Newsletter copy styling */
67868
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
67869
- font-size: 1.5rem;
67870
- font-weight: 600;
67871
- }
67872
-
67873
- :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
67874
- font-size: 1rem;
67875
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67876
- opacity: 0.85;
67877
- }
67878
-
67879
- /* Newsletter form container */
67880
- :where(.theme-scope) .newsletter-form {
67881
- width: 100%;
67882
- max-width: 32rem;
67883
- margin-left: auto;
67884
- margin-right: auto;
67885
- }
67886
-
67887
- /* Newsletter form fields container */
67888
- :where(.theme-scope) .newsletter-form-fields {
67889
- display: flex;
67890
- flex-direction: column;
67891
- gap: var(--rb-gap-sm, 0.75rem);
67892
- }
67893
-
67894
- /* Individual field styling */
67895
- :where(.theme-scope) .newsletter-field {
67896
- display: flex;
67897
- flex-direction: column;
67898
- gap: 0.25rem;
67899
- }
67900
-
67901
- /* Required indicator */
67902
- :where(.theme-scope) .newsletter-required {
67903
- color: rgb(var(--tb-primary));
67904
- margin-left: 0.125rem;
67905
- }
67906
-
67907
- /* Submit button container */
67908
- :where(.theme-scope) .newsletter-submit {
67909
- margin-top: 0.5rem;
67910
- }
67911
-
67912
- /* ALTCHA widget container */
67913
- :where(.theme-scope) .newsletter-altcha {
67914
- margin-top: 0.75rem;
67915
- display: flex;
67916
- justify-content: center;
67917
- }
67918
-
67919
- /* Privacy note */
67920
- :where(.theme-scope) .newsletter-privacy-note {
67921
- margin-top: 0.75rem;
67922
- font-size: 1rem;
67923
- line-height: 1.6;
67924
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
67925
- text-align: center;
67926
- }
67927
-
67928
- /* =============================================================================
67929
- * Inline Variant - Horizontal layout
67930
- * =============================================================================
67931
- */
67932
-
67933
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
67934
- flex-direction: row;
67935
- align-items: flex-end;
67936
- flex-wrap: wrap;
67937
- gap: var(--rb-gap-sm, 0.75rem);
67938
- }
67939
-
67940
- :where(.theme-scope) .newsletter-inline .newsletter-field {
67941
- flex: 1 1 auto;
67942
- min-width: 10rem;
67943
- }
67944
-
67945
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
67946
- margin-top: 0;
67947
- flex-shrink: 0;
67948
- }
67949
-
67950
- /* Mobile fallback for inline variant */
67951
- @container rb-site (max-width: 640px) {
67952
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
67953
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
67954
- flex-direction: column;
67955
- }
67956
-
67957
- :where(.theme-scope) .newsletter-inline .newsletter-field {
67958
- min-width: 100%;
67959
- }
67960
- }
67961
- }
67962
-
67963
- /* =============================================================================
67964
- * Editorial Split Variant
67965
- * =============================================================================
67966
- */
67967
-
67968
- :where(.theme-scope) .newsletter-editorial-split {
67969
- display: grid;
67970
- grid-template-columns: minmax(0, 0.9fr) minmax(20rem, 1.1fr);
67971
- gap: clamp(2.5rem, 7vw, 7rem);
67972
- align-items: center;
67973
- text-align: left;
67974
- }
67975
-
67976
- :where(.theme-scope) .newsletter-editorial-split-copy {
67977
- display: flex;
67978
- flex-direction: column;
67979
- gap: var(--rb-gap-sm, 0.75rem);
67980
- }
67981
-
67982
- :where(.theme-scope) .newsletter-editorial-split-form {
67983
- min-width: 0;
67984
- }
67985
-
67986
- :where(.theme-scope) .newsletter-editorial-split .newsletter-form {
67987
- max-width: none;
67988
- margin-inline: 0;
67989
- }
67990
-
67991
- :where(.theme-scope) .newsletter-editorial-split .newsletter-copy-title {
67992
- font-size: clamp(2rem, 4vw, 3.5rem);
67993
- font-weight: 500;
67994
- }
67995
-
67996
- :where(.theme-scope) .newsletter-editorial-split .newsletter-privacy-note {
67997
- text-align: left;
67998
- }
67999
-
68000
- @container rb-site (max-width: 767px) {
68001
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68002
- :where(.theme-scope) .newsletter-editorial-split {
68003
- grid-template-columns: minmax(0, 1fr);
68004
- gap: 2rem;
68005
- }
68006
- }
68007
- }
68008
-
68009
- /* =============================================================================
68010
- * Success State
68011
- * =============================================================================
68012
- */
68013
-
68014
- :where(.theme-scope) .newsletter-success {
68015
- text-align: center;
68016
- }
68017
-
68018
- :where(.theme-scope) .newsletter-success .fb-success {
68019
- padding: 1rem 1.5rem;
68020
- background-color: rgba(var(--tb-success, 34 197 94), 0.1);
68021
- border-radius: var(--radius-md, 0.5rem);
68022
- color: rgb(var(--tb-text));
68023
- }
68024
-
68025
- /* =============================================================================
68026
- * Block: Contact + Newsletter
68027
- * =============================================================================
68028
- */
68029
-
68030
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-grid {
68031
- display: grid;
68032
- grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr));
68033
- gap: clamp(2.5rem, 6vw, 4rem);
68034
- align-items: start;
68035
- }
68036
-
68037
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-column {
68038
- min-width: 0;
68039
- }
68040
-
68041
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-copy {
68042
- margin-bottom: 1.5rem;
68043
- }
68044
-
68045
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-title,
68046
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-title {
68047
- margin: 0 0 0.75rem;
68048
- }
68049
-
68050
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .form-copy-intro,
68051
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-copy-subtitle {
68052
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
68053
- }
68054
-
68055
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .contact-newsletter-info {
68056
- display: flex;
68057
- flex-direction: column;
68058
- align-items: flex-start;
68059
- }
68060
-
68061
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-form {
68062
- max-width: none;
68063
- margin-left: 0;
68064
- margin-right: 0;
68065
- }
68066
-
68067
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .newsletter-privacy-note {
68068
- text-align: left;
68069
- }
68070
-
68071
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-form {
68072
- display: flex;
68073
- flex-direction: column;
68074
- gap: 1rem;
68075
- }
68076
-
68077
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-row-2 {
68078
- display: grid;
68079
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
68080
- gap: 1rem;
68081
- }
68082
-
68083
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-field {
68084
- display: flex;
68085
- flex-direction: column;
68086
- gap: 0.25rem;
68087
- }
68088
-
68089
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-fieldset {
68090
- display: flex;
68091
- flex-direction: column;
68092
- gap: 0.5rem;
68093
- border: none;
68094
- padding: 0;
68095
- margin: 0;
68096
- }
68097
-
68098
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
68099
- display: flex;
68100
- align-items: center;
68101
- gap: 0.5rem;
68102
- }
68103
-
68104
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
68105
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
68106
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68107
- border-radius: var(--rb-block-radius);
68108
- padding: 1rem;
68109
- font-size: 0.875rem;
68110
- }
68111
-
68112
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success {
68113
- background-color: var(--fb-success-bg);
68114
- color: var(--fb-success-text);
68115
- border: 1px solid var(--fb-success-border);
68116
- }
68117
-
68118
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error {
68119
- background-color: var(--fb-error-bg);
68120
- color: var(--fb-error-text);
68121
- border: 1px solid var(--fb-error-border);
68122
- }
68123
-
68124
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
68125
- background-color: var(--fb-empty-bg);
68126
- color: var(--fb-empty-text);
68127
- border: 1px dashed var(--fb-empty-border);
68128
- text-align: center;
68129
- }
68130
-
68131
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-actions {
68132
- margin-top: 0.5rem;
68133
- }
68134
-
68135
- /* =============================================================================
68136
- * Block: Team Members
68137
- * =============================================================================
68138
- *
68139
- * Site/theme authors sometimes need different thumbnail shapes/sizes without
68140
- * changing global fragment defaults. We expose these controls on the block and
68141
- * style them via data attributes on the \`.rb-team-members\` wrapper.
68142
- */
68143
-
68144
- /* Scope all block-static CSS to ThemeScope to avoid leaking into host apps/dashboard. */
68145
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) {
68146
- text-align: left;
68147
- }
68148
-
68149
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-align="left"]) :where(.rb-team-member) {
68150
- align-items: flex-start;
68151
- text-align: left;
68152
- }
68153
-
68154
- @container rb-site (min-width: 1024px) {
68155
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
68156
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-layout-width="lg-3-4-left"]) {
68157
- width: 75%;
68158
- margin-left: 0;
68159
- margin-right: auto;
68160
- }
68161
- }
68162
- }
68163
-
68164
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-photo {
68165
- display: block;
68166
- width: 100%;
68167
- height: auto;
68168
- }
68169
-
68170
- :where(.theme-scope) :where([data-block="team-members"]) .rb-team-member-role {
68171
- font-weight: 600;
68172
- }
68173
-
68174
- /* Thumbnail sizing: map \`data-image-col-size\` to a sensible max thumbnail width. */
68175
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members) {
68176
- --rb-team-thumb-max: 11.25rem; /* ~180px default */
68177
- --rb-team-image-basis: 33.333%;
68178
- }
68179
-
68180
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/4"]) {
68181
- --rb-team-thumb-max: 8.75rem; /* ~140px */
68182
- --rb-team-image-basis: 25%;
68183
- }
68184
-
68185
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/3"]) {
68186
- --rb-team-thumb-max: 11.25rem; /* ~180px */
68187
- --rb-team-image-basis: 33.333%;
68188
- }
68189
-
68190
- :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
68191
- --rb-team-thumb-max: 13.75rem; /* ~220px */
68192
- --rb-team-image-basis: 40%;
66010
+ :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="2/5"]) {
66011
+ --rb-team-thumb-max: 13.75rem; /* ~220px */
66012
+ --rb-team-image-basis: 40%;
68193
66013
  }
68194
66014
 
68195
66015
  :where(.theme-scope) :where([data-block="team-members"]) :where(.rb-team-members[data-image-col-size="1/2"]) {
@@ -72248,69 +70068,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72248
70068
  }
72249
70069
  });
72250
70070
  //#endregion
72251
- //#region ../api/src/courseEndpointDefinitions.ts
72252
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72253
- listCourses: {
72254
- path: "/sites/{siteId}/bookings/courses",
72255
- method: "GET",
72256
- auth: "user",
72257
- responseKind: "json"
72258
- },
72259
- exportCoursesCsv: {
72260
- path: "/sites/{siteId}/bookings/courses/export.csv",
72261
- method: "GET",
72262
- tags: [
72263
- "site-{siteId}",
72264
- "bookings",
72265
- "courses-{siteId}"
72266
- ],
72267
- errors: [],
72268
- auth: "user",
72269
- responseKind: "blob"
72270
- },
72271
- createCourse: {
72272
- path: "/sites/{siteId}/bookings/courses",
72273
- method: "POST",
72274
- auth: "user",
72275
- responseKind: "json",
72276
- errors: [
72277
- "validation:invalid_input",
72278
- "resource:not_found",
72279
- "resource:already_exists",
72280
- "resource:conflict",
72281
- "server:internal_error"
72282
- ]
72283
- },
72284
- getCourse: {
72285
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72286
- method: "GET",
72287
- auth: "user",
72288
- responseKind: "json"
72289
- },
72290
- updateCourse: {
72291
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72292
- method: "PATCH",
72293
- auth: "user",
72294
- responseKind: "json",
72295
- errors: [
72296
- "validation:invalid_input",
72297
- "resource:not_found",
72298
- "resource:conflict",
72299
- "server:internal_error"
72300
- ]
72301
- },
72302
- deleteCourse: {
72303
- path: "/sites/{siteId}/bookings/courses/{courseId}",
72304
- method: "DELETE",
72305
- auth: "user",
72306
- responseKind: "json",
72307
- errors: [
72308
- "validation:invalid_input",
72309
- "resource:not_found",
72310
- "resource:conflict",
72311
- "server:internal_error"
72312
- ]
72313
- },
70071
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
70072
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72314
70073
  deleteEventOffering: {
72315
70074
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
72316
70075
  method: "DELETE",
@@ -72323,20 +70082,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72323
70082
  "server:internal_error"
72324
70083
  ]
72325
70084
  },
72326
- duplicateCourse: {
72327
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
72328
- method: "POST",
72329
- auth: "user",
72330
- responseKind: "json",
72331
- errors: [
72332
- "validation:invalid_input",
72333
- "resource:not_found",
72334
- "resource:already_exists",
72335
- "server:internal_error"
72336
- ]
72337
- },
72338
- changeCourseContentOwnership: {
72339
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
70085
+ changeEventSeriesContentOwnership: {
70086
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
72340
70087
  method: "POST",
72341
70088
  auth: "user",
72342
70089
  responseKind: "json",
@@ -72347,8 +70094,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72347
70094
  "server:internal_error"
72348
70095
  ]
72349
70096
  },
72350
- addCourseEnrollment: {
72351
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70097
+ addEventSeriesRegistration: {
70098
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72352
70099
  method: "POST",
72353
70100
  auth: "user",
72354
70101
  responseKind: "json",
@@ -72359,33 +70106,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72359
70106
  "server:internal_error"
72360
70107
  ]
72361
70108
  },
72362
- listCourseEnrollments: {
72363
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
70109
+ listEventSeriesRegistrations: {
70110
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
72364
70111
  method: "GET",
72365
70112
  auth: "user",
72366
70113
  responseKind: "json"
72367
70114
  },
72368
- exportCourseEnrollmentsCsv: {
72369
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
70115
+ exportEventSeriesRegistrationsCsv: {
70116
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
72370
70117
  method: "GET",
72371
70118
  auth: "user",
72372
70119
  errors: [],
72373
70120
  responseKind: "blob"
72374
70121
  },
72375
- exportCourseWaitlistCsv: {
72376
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
72377
- method: "GET",
72378
- tags: [
72379
- "site-{siteId}",
72380
- "bookings",
72381
- "courses-{courseId}"
72382
- ],
72383
- auth: "user",
72384
- responseKind: "blob",
72385
- errors: []
72386
- },
72387
- updateCourseEnrollment: {
72388
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
70122
+ updateEventSeriesRegistration: {
70123
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
72389
70124
  method: "PATCH",
72390
70125
  auth: "user",
72391
70126
  responseKind: "json",
@@ -72773,71 +70508,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72773
70508
  errors: ["resource:not_found", "server:internal_error"],
72774
70509
  auth: "public",
72775
70510
  responseKind: "json"
72776
- },
72777
- registerForWholeSeries: {
72778
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
72779
- method: "POST",
72780
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72781
- errors: [
72782
- "auth:unauthenticated",
72783
- "auth:forbidden",
72784
- "validation:invalid_input",
72785
- "resource:not_found",
72786
- "resource:conflict",
72787
- "resource:already_exists",
72788
- "server:internal_error"
72789
- ],
72790
- auth: "public",
72791
- responseKind: "json"
72792
- },
72793
- checkWholeSeriesEligibility: {
72794
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
72795
- method: "POST",
72796
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
72797
- errors: [
72798
- "auth:unauthenticated",
72799
- "resource:not_found",
72800
- "resource:conflict",
72801
- "server:internal_error"
72802
- ],
72803
- auth: "public",
72804
- responseKind: "json"
72805
- },
72806
- createWholeSeriesCheckout: {
72807
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
70511
+ }
70512
+ });
70513
+ //#endregion
70514
+ //#region ../api/src/publicEventEndpointDefinitions.ts
70515
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
70516
+ getPublicEventRegistrationOptions: {
70517
+ path: "/public/sites/{siteId}/events/registration-options",
72808
70518
  method: "POST",
72809
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
70519
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
72810
70520
  auth: "public",
72811
70521
  responseKind: "json",
72812
70522
  errors: [
72813
- "auth:unauthenticated",
72814
70523
  "validation:invalid_input",
72815
70524
  "resource:not_found",
72816
70525
  "resource:conflict",
72817
70526
  "server:internal_error"
72818
70527
  ]
72819
70528
  },
72820
- getWholeSeriesRegistrationStatus: {
72821
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
70529
+ resolveEventSubroute: {
70530
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
72822
70531
  method: "GET",
72823
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
72824
- errors: ["resource:not_found", "server:internal_error"],
70532
+ revalidate: 60,
70533
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72825
70534
  auth: "public",
72826
- responseKind: "json"
70535
+ responseKind: "json",
70536
+ errors: []
72827
70537
  }
72828
70538
  });
72829
70539
  //#endregion
72830
- //#region ../api/src/publicEventEndpointDefinitions.ts
72831
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
72832
- path: "/public/sites/{siteId}/events/subroutes/resolve",
72833
- method: "GET",
72834
- revalidate: 60,
72835
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
72836
- auth: "public",
72837
- responseKind: "json",
72838
- errors: []
72839
- } });
72840
- //#endregion
72841
70540
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
72842
70541
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
72843
70542
  listSiteApiKeys: {
@@ -73205,7 +70904,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
73205
70904
  }), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
73206
70905
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
73207
70906
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
73208
- ...COURSE_ENDPOINT_DEFINITIONS
70907
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
73209
70908
  }, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
73210
70909
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
73211
70910
  z.object({
@@ -73327,7 +71026,7 @@ const internalLinkPayloadSchema = z.object({
73327
71026
  kind: z.literal("internal"),
73328
71027
  routeId: z.string().uuid(),
73329
71028
  entityId: z.string().uuid(),
73330
- entityType: z.enum(["page", "content"]),
71029
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
73331
71030
  href: z.string().min(1),
73332
71031
  title: z.string().min(1),
73333
71032
  typeLabel: z.string().min(1),
@@ -74246,6 +71945,68 @@ function parsePublicProductCategorySelector(value) {
74246
71945
  };
74247
71946
  }
74248
71947
  //#endregion
71948
+ //#region ../api/src/bookingPaymentTermSchemas.ts
71949
+ const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
71950
+ const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
71951
+ z.object({
71952
+ kind: z.literal("deposit_plus_one_remainder"),
71953
+ depositAmountCents: z.number().int().nonnegative(),
71954
+ depositRefundability: bookingDepositRefundPolicySchema,
71955
+ remainderDueCount: z.number().int().positive(),
71956
+ intervalUnit: z.enum([
71957
+ "day",
71958
+ "week",
71959
+ "month"
71960
+ ])
71961
+ }),
71962
+ z.object({
71963
+ kind: z.literal("deposit_plus_scheduled_instalments"),
71964
+ depositAmountCents: z.number().int().nonnegative(),
71965
+ depositRefundability: bookingDepositRefundPolicySchema,
71966
+ instalmentCount: z.number().int().positive(),
71967
+ intervalCount: z.number().int().positive(),
71968
+ intervalUnit: z.enum([
71969
+ "day",
71970
+ "week",
71971
+ "month"
71972
+ ])
71973
+ }),
71974
+ z.object({
71975
+ kind: z.literal("equal_scheduled_instalments"),
71976
+ instalmentCount: z.number().int().positive(),
71977
+ intervalCount: z.number().int().positive(),
71978
+ intervalUnit: z.enum([
71979
+ "day",
71980
+ "week",
71981
+ "month"
71982
+ ])
71983
+ })
71984
+ ]);
71985
+ const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
71986
+ kind: z.literal("relative_to_start_date"),
71987
+ daysBeforeStart: z.number().int().positive()
71988
+ }), z.object({
71989
+ kind: z.literal("fixed_calendar_date"),
71990
+ dueAt: z.string().datetime()
71991
+ })]);
71992
+ const bookingFlexibleBalanceConfigSchema = z.object({
71993
+ upfrontAmountCents: z.number().int().nonnegative(),
71994
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
71995
+ depositRefundability: bookingDepositRefundPolicySchema
71996
+ });
71997
+ z.discriminatedUnion("kind", [
71998
+ z.object({ kind: z.literal("upfront") }),
71999
+ z.object({ kind: z.literal("deferred_manual") }),
72000
+ z.object({
72001
+ kind: z.literal("instalment_plan"),
72002
+ plan: bookingInstalmentPlanSchema
72003
+ }),
72004
+ z.object({
72005
+ kind: z.literal("flexible_balance"),
72006
+ config: bookingFlexibleBalanceConfigSchema
72007
+ })
72008
+ ]);
72009
+ //#endregion
74249
72010
  //#region ../api/src/aiPlayground.ts
74250
72011
  /**
74251
72012
  * RFC-6902 JSON Patch Operations