@riverbankcms/sdk 0.134.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 (258) hide show
  1. package/CHANGELOG.md +4 -3
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DfRhJPFQ.mjs → PreviewEditorSidebar-roNY0GVy.mjs} +4 -4
  4. package/dist/{PreviewEditorUI-Dppxcr_g.mjs → PreviewEditorUI-KboDbEh_.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-D51gQaG3.mjs → PreviewQueryProvider-DcgaESkm.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-8CyGCXir.mjs → SdkPreviewModeRuntime-DBrF7Caa.mjs} +5 -5
  7. package/dist/{SiteChromeCustomizeContext-DVMTMvqA.mjs → SiteChromeCustomizeContext-DrIEpJKn.mjs} +4070 -8011
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +15 -15
  10. package/dist/_dts/api/src/bookingConfig.d.ts +1 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +25 -60
  12. package/dist/_dts/api/src/bookingOperations.d.ts +111 -161
  13. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +123 -0
  14. package/dist/_dts/api/src/bookingRecords.d.ts +13 -13
  15. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +4 -4
  16. package/dist/_dts/api/src/bookingSessionSummaryTypes.d.ts +34 -0
  17. package/dist/_dts/api/src/bookings.d.ts +5 -9
  18. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -7
  19. package/dist/_dts/api/src/communications.d.ts +1 -1
  20. package/dist/_dts/api/src/endpoints.d.ts +29 -109
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +1 -1
  22. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +43 -0
  23. package/dist/_dts/api/src/index.d.ts +3 -4
  24. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  25. package/dist/_dts/api/src/participantMessaging.d.ts +2 -2
  26. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +8 -0
  27. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +32 -28
  28. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +85 -5
  29. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +9 -100
  31. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +7 -6
  32. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -32
  33. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +1 -1
  34. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -1
  35. package/dist/_dts/api/src/siteOperations.d.ts +2 -2
  36. package/dist/_dts/api/src/types.d.ts +1 -1
  37. package/dist/_dts/api/src/{courses.d.ts → wholeSeriesOfferings.d.ts} +43 -95
  38. package/dist/_dts/blocks/src/client.d.ts +0 -5
  39. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  40. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +5 -94
  41. package/dist/_dts/blocks/src/portal/dateFormatting.d.ts +3 -0
  42. package/dist/_dts/blocks/src/portal/types.d.ts +17 -20
  43. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +147 -42
  44. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +10 -10
  45. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +3 -0
  46. package/dist/_dts/blocks/src/system/blocks/index.d.ts +0 -2
  47. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +3 -3
  48. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/node/builder.d.ts +0 -1
  51. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +9 -12
  52. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +2 -44
  53. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +99 -59
  56. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
  57. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +19 -16
  58. package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -0
  59. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -247
  61. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +13 -126
  62. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -3
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +8 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +17 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentBlockingPanel.d.ts +18 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +1 -3
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +7 -4
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +0 -1
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +7 -8
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +4 -4
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +5 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +28 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +12 -11
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +53 -45
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +10 -6
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +20 -5
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +20 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +5 -56
  86. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +20 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +6 -22
  88. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/DateTimeTile.d.ts +1 -1
  89. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +6 -6
  90. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  91. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +6 -1
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +1 -13
  93. package/dist/_dts/blocks/src/system/runtime/shared/components/LoggedInAsUser.d.ts +1 -1
  94. package/dist/_dts/blocks/src/system/runtime/shared/components/MembershipHero.d.ts +1 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/StateIcon.d.ts +1 -1
  96. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +1 -1
  97. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -1
  98. package/dist/_dts/blocks/src/system/runtime/shared/utils/checkoutUrls.d.ts +2 -2
  99. package/dist/_dts/commerce/src/index.d.ts +16 -0
  100. package/dist/_dts/commerce/src/money.d.ts +122 -0
  101. package/dist/_dts/commerce/src/moneyContracts.d.ts +178 -0
  102. package/dist/_dts/commerce/src/moneyDateUtils.d.ts +22 -0
  103. package/dist/_dts/commerce/src/moneyPayments.d.ts +59 -0
  104. package/dist/_dts/commerce/src/moneyPlanningTime.d.ts +4 -0
  105. package/dist/_dts/commerce/src/moneyReceiptReadModel.d.ts +68 -0
  106. package/dist/_dts/commerce/src/moneyReport.d.ts +105 -0
  107. package/dist/_dts/commerce/src/moneyReportBreakdowns.d.ts +3 -0
  108. package/dist/_dts/commerce/src/moneyReportKindFilter.d.ts +4 -0
  109. package/dist/_dts/commerce/src/moneyReportPage.d.ts +132 -0
  110. package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +1 -1
  111. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +1 -1
  112. package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +3 -3
  113. package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +6 -25
  114. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +4 -4
  115. package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +11 -11
  116. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +1 -1
  117. package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +1 -1
  118. package/dist/_dts/commerce/src/purchase/types.d.ts +12 -8
  119. package/dist/_dts/commerce/src/shop/digitalFulfillment.d.ts +111 -0
  120. package/dist/_dts/commerce/src/shop/fulfillmentStatus.d.ts +10 -0
  121. package/dist/_dts/commerce/src/shop/inventoryRestore.d.ts +13 -0
  122. package/dist/_dts/commerce/src/shop/shippingAddress.d.ts +18 -0
  123. package/dist/_dts/commerce/src/types/json.d.ts +3 -0
  124. package/dist/_dts/commerce/src/utils/isPlainRecord.d.ts +1 -0
  125. package/dist/_dts/commerce/src/waitlists.d.ts +172 -0
  126. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +0 -30
  127. package/dist/_dts/content-model/src/content-types/builtins.d.ts +2 -39
  128. package/dist/_dts/content-model/src/metadataConfig.d.ts +0 -1
  129. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -68
  130. package/dist/_dts/core/src/branded.d.ts +3 -3
  131. package/dist/_dts/core/src/event-pricing.d.ts +6 -6
  132. package/dist/_dts/core/src/participants.d.ts +17 -17
  133. package/dist/_dts/core/src/rectification.d.ts +1 -1
  134. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +890 -2154
  135. package/dist/_dts/sdk/src/bookings/index.d.ts +4 -5
  136. package/dist/_dts/sdk/src/bookings/types.d.ts +34 -4
  137. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +4 -6
  138. package/dist/_dts/sdk/src/version.d.ts +1 -1
  139. package/dist/_dts/theme-core/src/blocks/vars/index.d.ts +0 -2
  140. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  141. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +1 -1
  142. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +1 -1
  143. package/dist/client/{usePolling-UN4WKnaM.mjs → BookingConsentAgreement-BQqwi8Oa.mjs} +180 -4
  144. package/dist/client/{DiscountCodeDisclosure-CfuPOHD0.mjs → DiscountCodeDisclosure-B97aMo0V.mjs} +13 -27
  145. package/dist/client/{EventCombined.client-DB8Qfzi-.mjs → EventCombined.client-Bs2Iw9Q6.mjs} +3 -3
  146. package/dist/client/{EventListing.client-DD4X8hp4.mjs → EventListing.client-C4QUQdmg.mjs} +2 -2
  147. package/dist/client/{LeafletStaticMap-QhgIBQbv.mjs → LeafletStaticMap-CwWRk69M.mjs} +1 -1
  148. package/dist/client/{accordion-DFXpLvwg.mjs → accordion-BA0j8Mpw.mjs} +1 -1
  149. package/dist/client/{bookingForm-sI05d3lk.mjs → bookingForm-Br2e41H0.mjs} +6 -7
  150. package/dist/client/bookings.mjs +912 -1906
  151. package/dist/client/{carousel-wjyWTZCh.mjs → carousel-B4dmwnpD.mjs} +1 -1
  152. package/dist/client/{cart-DCwdpA4i.mjs → cart-B_ckGW4b.mjs} +3 -3
  153. package/dist/client/{checkout-DTDW3l0R.mjs → checkout-DAyspHdf.mjs} +3 -3
  154. package/dist/client/{checkoutUrls-DQYC_Br-.mjs → checkoutUrls-BuseL0dw.mjs} +4 -2
  155. package/dist/client/client.mjs +5074 -9309
  156. package/dist/client/{context-TSK1CGx8.mjs → context-DljQn8L5.mjs} +15 -69
  157. package/dist/client/{eventCalendar-B0Zg-i_w.mjs → eventCalendar-pJu3FUod.mjs} +5 -5
  158. package/dist/client/{eventCombined-B8Y2wizd.mjs → eventCombined-B6Kacm9F.mjs} +3 -3
  159. package/dist/client/{eventDetails-DPDOwURJ.mjs → eventDetails-CaX9z1pv.mjs} +8 -8
  160. package/dist/client/{eventListing-CjBcmSLn.mjs → eventListing-B9aXPO-I.mjs} +3 -3
  161. package/dist/client/{eventRegistration-CK30HsAq.mjs → eventRegistration-CBSovBkg.mjs} +4522 -3690
  162. package/dist/client/{form-CUXfsABE.mjs → form-Cm0tu_7o.mjs} +2 -2
  163. package/dist/client/{headerSection-N-mN3rjr.mjs → headerSection-OgRtHeKS.mjs} +2 -2
  164. package/dist/client/hooks.mjs +430 -692
  165. package/dist/client/{locationMap-oiIDQMBt.mjs → locationMap-DmjcYqNM.mjs} +2 -2
  166. package/dist/client/{newsletterForm-CkQ2tTrM.mjs → newsletterForm-D08OZQAC.mjs} +2 -2
  167. package/dist/client/{productDetail-CnidyrsN.mjs → productDetail-BqZeu2P4.mjs} +3 -3
  168. package/dist/client/{productList-CttYcS_S.mjs → productList-mNyIF9FG.mjs} +3 -3
  169. package/dist/client/{propsDecoder-CeUMxI9a.mjs → propsDecoder-DwHXRm9X.mjs} +4656 -4419
  170. package/dist/client/rendering/client.mjs +59504 -62158
  171. package/dist/client/rendering/islands.mjs +17 -19
  172. package/dist/client/rendering.mjs +5354 -9683
  173. package/dist/client/{scrollToBlock-lPr1oqxB.mjs → scrollToBlock-DtmdM3v-.mjs} +2 -2
  174. package/dist/client/{shop-DXQtMo2O.mjs → shop-CNjZK16F.mjs} +6 -6
  175. package/dist/client/{shop-commerce-quDL411J.mjs → shop-commerce-DkNNao1J.mjs} +6 -6
  176. package/dist/client/{shop-commerce-store-Dnu-8Iub.mjs → shop-commerce-store-9WA--zuW.mjs} +1 -1
  177. package/dist/client/{shopShared-BWPUURvG.mjs → shopShared-CHCVfccY.mjs} +3 -3
  178. package/dist/client/{useEventFilters-DRhWp2_5.mjs → useEventFilters-DvuaB4ZN.mjs} +3 -3
  179. package/dist/preview-next/before-render.mjs +40 -161
  180. package/dist/preview-next/client/runtime.mjs +4 -4
  181. package/dist/preview-next/keepAlive.mjs +40 -161
  182. package/dist/preview-next/middleware.mjs +40 -161
  183. package/dist/{previewAuthStore-BFKd4LrN.mjs → previewAuthStore-C7ksxt5b.mjs} +40 -161
  184. package/dist/{sdk-runtime-Ca5RD78X.mjs → sdk-runtime-3GhW4knb.mjs} +2 -2
  185. package/dist/{separator-CMhj6BTi.mjs → separator-D3bCWYYb.mjs} +1 -1
  186. package/dist/server/components.mjs +535 -2950
  187. package/dist/server/config-validation.mjs +430 -692
  188. package/dist/server/config.mjs +430 -692
  189. package/dist/server/data.mjs +430 -692
  190. package/dist/server/index.mjs +41 -162
  191. package/dist/server/next.mjs +549 -2964
  192. package/dist/server/page-converter.mjs +331 -560
  193. package/dist/server/prebuild.mjs +1 -1
  194. package/dist/server/rendering/server.mjs +534 -2855
  195. package/dist/server/rendering.mjs +535 -2950
  196. package/dist/server/routing.mjs +574 -1065
  197. package/dist/server/server.mjs +444 -706
  198. package/dist/server/theme-bridge.mjs +41 -1524
  199. package/dist/styles/index.css +41 -1348
  200. package/package.json +1 -1
  201. package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +0 -99
  202. package/dist/_dts/blocks/src/client/course-registration.d.ts +0 -5
  203. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -134
  204. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -130
  205. package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
  206. package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +0 -2
  207. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +0 -1
  208. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +0 -1
  209. package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +0 -135
  210. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +0 -28
  211. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/logic.d.ts +0 -11
  212. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/runs.d.ts +0 -10
  213. package/dist/_dts/blocks/src/system/runtime/nodes/course-details/view.d.ts +0 -15
  214. package/dist/_dts/blocks/src/system/runtime/nodes/course-details.server.d.ts +0 -20
  215. package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +0 -14
  216. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +0 -10
  217. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +0 -181
  218. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.server.d.ts +0 -12
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.d.ts +0 -8
  220. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/BookingModeStep.d.ts +0 -32
  221. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/CheckIcon.d.ts +0 -4
  222. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/ErrorStep.d.ts +0 -17
  223. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/MembershipHero.d.ts +0 -12
  224. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PaymentFailedStep.d.ts +0 -17
  225. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/PortalAuthSidebar.d.ts +0 -9
  226. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +0 -6
  227. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/SuccessStep.d.ts +0 -14
  228. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/VerifyingTimeoutStep.d.ts +0 -17
  229. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WaitlistStep.d.ts +0 -12
  230. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +0 -9
  231. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts +0 -25
  232. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +0 -8
  233. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +0 -8
  234. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +0 -46
  235. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/index.d.ts +0 -18
  236. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +0 -7
  237. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +0 -14
  238. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/types.d.ts +0 -105
  239. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesEligibility.d.ts +0 -24
  240. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +0 -10
  241. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +0 -35
  242. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts +0 -7
  243. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +0 -35
  244. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +0 -185
  245. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts +0 -14
  246. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/utils.d.ts +0 -43
  247. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.contract.d.ts +0 -325
  248. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/whole-series-registration.headless.planning.d.ts +0 -27
  249. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +0 -17
  250. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts +0 -21
  251. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wizardSteps.d.ts +0 -30
  252. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +0 -3
  253. package/dist/_dts/theme-core/src/blocks/vars/course-details.d.ts +0 -16
  254. package/dist/_dts/theme-core/src/blocks/vars/course-registration.d.ts +0 -21
  255. package/dist/client/BookingConsentAgreement-BxgpGEFD.mjs +0 -160
  256. package/dist/client/WholeSeriesRegistrationWizard-DwtC7bCs.mjs +0 -2546
  257. package/dist/client/courseRegistration-A-Tg7qw_.mjs +0 -52
  258. package/dist/client/pricing-Caa0QWzh.mjs +0 -195
@@ -755,69 +755,8 @@ const ACCOUNT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
755
755
  }
756
756
  });
757
757
  //#endregion
758
- //#region ../api/src/courseEndpointDefinitions.ts
759
- const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
760
- listCourses: {
761
- path: "/sites/{siteId}/bookings/courses",
762
- method: "GET",
763
- auth: "user",
764
- responseKind: "json"
765
- },
766
- exportCoursesCsv: {
767
- path: "/sites/{siteId}/bookings/courses/export.csv",
768
- method: "GET",
769
- tags: [
770
- "site-{siteId}",
771
- "bookings",
772
- "courses-{siteId}"
773
- ],
774
- errors: [],
775
- auth: "user",
776
- responseKind: "blob"
777
- },
778
- createCourse: {
779
- path: "/sites/{siteId}/bookings/courses",
780
- method: "POST",
781
- auth: "user",
782
- responseKind: "json",
783
- errors: [
784
- "validation:invalid_input",
785
- "resource:not_found",
786
- "resource:already_exists",
787
- "resource:conflict",
788
- "server:internal_error"
789
- ]
790
- },
791
- getCourse: {
792
- path: "/sites/{siteId}/bookings/courses/{courseId}",
793
- method: "GET",
794
- auth: "user",
795
- responseKind: "json"
796
- },
797
- updateCourse: {
798
- path: "/sites/{siteId}/bookings/courses/{courseId}",
799
- method: "PATCH",
800
- auth: "user",
801
- responseKind: "json",
802
- errors: [
803
- "validation:invalid_input",
804
- "resource:not_found",
805
- "resource:conflict",
806
- "server:internal_error"
807
- ]
808
- },
809
- deleteCourse: {
810
- path: "/sites/{siteId}/bookings/courses/{courseId}",
811
- method: "DELETE",
812
- auth: "user",
813
- responseKind: "json",
814
- errors: [
815
- "validation:invalid_input",
816
- "resource:not_found",
817
- "resource:conflict",
818
- "server:internal_error"
819
- ]
820
- },
758
+ //#region ../api/src/eventSeriesRegistrationEndpointDefinitions.ts
759
+ const EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
821
760
  deleteEventOffering: {
822
761
  path: "/sites/{siteId}/bookings/event-offerings/{eventOfferingId}",
823
762
  method: "DELETE",
@@ -830,20 +769,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
830
769
  "server:internal_error"
831
770
  ]
832
771
  },
833
- duplicateCourse: {
834
- path: "/sites/{siteId}/bookings/courses/{courseId}/duplicate",
835
- method: "POST",
836
- auth: "user",
837
- responseKind: "json",
838
- errors: [
839
- "validation:invalid_input",
840
- "resource:not_found",
841
- "resource:already_exists",
842
- "server:internal_error"
843
- ]
844
- },
845
- changeCourseContentOwnership: {
846
- path: "/sites/{siteId}/bookings/courses/{courseId}/content-ownership",
772
+ changeEventSeriesContentOwnership: {
773
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/content-ownership",
847
774
  method: "POST",
848
775
  auth: "user",
849
776
  responseKind: "json",
@@ -854,8 +781,8 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
854
781
  "server:internal_error"
855
782
  ]
856
783
  },
857
- addCourseEnrollment: {
858
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
784
+ addEventSeriesRegistration: {
785
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
859
786
  method: "POST",
860
787
  auth: "user",
861
788
  responseKind: "json",
@@ -866,33 +793,21 @@ const COURSE_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
866
793
  "server:internal_error"
867
794
  ]
868
795
  },
869
- listCourseEnrollments: {
870
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments",
796
+ listEventSeriesRegistrations: {
797
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations",
871
798
  method: "GET",
872
799
  auth: "user",
873
800
  responseKind: "json"
874
801
  },
875
- exportCourseEnrollmentsCsv: {
876
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/export.csv",
802
+ exportEventSeriesRegistrationsCsv: {
803
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/export.csv",
877
804
  method: "GET",
878
805
  auth: "user",
879
806
  errors: [],
880
807
  responseKind: "blob"
881
808
  },
882
- exportCourseWaitlistCsv: {
883
- path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
884
- method: "GET",
885
- tags: [
886
- "site-{siteId}",
887
- "bookings",
888
- "courses-{courseId}"
889
- ],
890
- auth: "user",
891
- responseKind: "blob",
892
- errors: []
893
- },
894
- updateCourseEnrollment: {
895
- path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
809
+ updateEventSeriesRegistration: {
810
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/registrations/{registrationId}",
896
811
  method: "PATCH",
897
812
  auth: "user",
898
813
  responseKind: "json",
@@ -1280,71 +1195,35 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1280
1195
  errors: ["resource:not_found", "server:internal_error"],
1281
1196
  auth: "public",
1282
1197
  responseKind: "json"
1283
- },
1284
- registerForWholeSeries: {
1285
- path: "/public/sites/{siteId}/dated-offerings/whole-series/enroll",
1286
- method: "POST",
1287
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1288
- errors: [
1289
- "auth:unauthenticated",
1290
- "auth:forbidden",
1291
- "validation:invalid_input",
1292
- "resource:not_found",
1293
- "resource:conflict",
1294
- "resource:already_exists",
1295
- "server:internal_error"
1296
- ],
1297
- auth: "public",
1298
- responseKind: "json"
1299
- },
1300
- checkWholeSeriesEligibility: {
1301
- path: "/public/sites/{siteId}/dated-offerings/whole-series/check-eligibility",
1302
- method: "POST",
1303
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-enrollment"],
1304
- errors: [
1305
- "auth:unauthenticated",
1306
- "resource:not_found",
1307
- "resource:conflict",
1308
- "server:internal_error"
1309
- ],
1310
- auth: "public",
1311
- responseKind: "json"
1312
- },
1313
- createWholeSeriesCheckout: {
1314
- path: "/public/sites/{siteId}/dated-offerings/whole-series/checkout",
1198
+ }
1199
+ });
1200
+ //#endregion
1201
+ //#region ../api/src/publicEventEndpointDefinitions.ts
1202
+ const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1203
+ getPublicEventRegistrationOptions: {
1204
+ path: "/public/sites/{siteId}/events/registration-options",
1315
1205
  method: "POST",
1316
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1206
+ tags: [TAG_TEMPLATES.publicEvents, "event-registration-options"],
1317
1207
  auth: "public",
1318
1208
  responseKind: "json",
1319
1209
  errors: [
1320
- "auth:unauthenticated",
1321
1210
  "validation:invalid_input",
1322
1211
  "resource:not_found",
1323
1212
  "resource:conflict",
1324
1213
  "server:internal_error"
1325
1214
  ]
1326
1215
  },
1327
- getWholeSeriesRegistrationStatus: {
1328
- path: "/public/sites/{siteId}/dated-offerings/whole-series/registration-status",
1216
+ resolveEventSubroute: {
1217
+ path: "/public/sites/{siteId}/events/subroutes/resolve",
1329
1218
  method: "GET",
1330
- tags: [TAG_TEMPLATES.publicWholeSeriesOfferings, "course-checkout"],
1331
- errors: ["resource:not_found", "server:internal_error"],
1219
+ revalidate: 60,
1220
+ tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1332
1221
  auth: "public",
1333
- responseKind: "json"
1222
+ responseKind: "json",
1223
+ errors: []
1334
1224
  }
1335
1225
  });
1336
1226
  //#endregion
1337
- //#region ../api/src/publicEventEndpointDefinitions.ts
1338
- const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
1339
- path: "/public/sites/{siteId}/events/subroutes/resolve",
1340
- method: "GET",
1341
- revalidate: 60,
1342
- tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
1343
- auth: "public",
1344
- responseKind: "json",
1345
- errors: []
1346
- } });
1347
- //#endregion
1348
1227
  //#region ../api/src/siteApiKeyEndpointDefinitions.ts
1349
1228
  const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1350
1229
  listSiteApiKeys: {
@@ -1712,7 +1591,7 @@ const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
1712
1591
  }), 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, {
1713
1592
  ...NEWSLETTER_ENDPOINT_DEFINITIONS,
1714
1593
  ...APPOINTMENT_ENDPOINT_DEFINITIONS,
1715
- ...COURSE_ENDPOINT_DEFINITIONS
1594
+ ...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
1716
1595
  }, 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 };
1717
1596
  z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
1718
1597
  z.object({
@@ -1888,14 +1767,14 @@ function publicEventPricingType(pricing) {
1888
1767
  case "single_paid":
1889
1768
  case "ticket_types":
1890
1769
  case "sliding_scale":
1891
- case "course": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
1770
+ case "whole_series": return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
1892
1771
  case "external": return "external";
1893
1772
  }
1894
1773
  }
1895
1774
  function isFreePublicEventPriceDisplay(display) {
1896
1775
  switch (display.kind) {
1897
1776
  case "free": return true;
1898
- case "course": return display.display.kind === "free";
1777
+ case "whole_series": return display.display.kind === "free";
1899
1778
  case "exact":
1900
1779
  case "from":
1901
1780
  case "range":
@@ -2184,6 +2063,25 @@ function parseManagementKey(raw) {
2184
2063
  return ok(createSecretInternal("management-key", raw));
2185
2064
  }
2186
2065
  //#endregion
2066
+ //#region ../core/src/planner.ts
2067
+ /** Default clock for production callers that do not inject time explicitly. */
2068
+ const systemPlanningClock = { now: () => Date.now() };
2069
+ /** Resolve current time as a Date from an explicit Date, injected clock, or system clock. */
2070
+ function resolvePlanningNowDate(input = {}) {
2071
+ if (input.now !== void 0) return input.now;
2072
+ return new Date((input.clock ?? systemPlanningClock).now());
2073
+ }
2074
+ /**
2075
+ * Resolve a Date-compatible planner input.
2076
+ *
2077
+ * Precedence: bare Date, `{ now }`, `{ clock }`, then `systemPlanningClock`.
2078
+ * Explicit Date inputs are returned by reference, not cloned.
2079
+ */
2080
+ function resolvePlanningDateInput(input = {}) {
2081
+ if (input instanceof Date) return input;
2082
+ return resolvePlanningNowDate(input);
2083
+ }
2084
+ //#endregion
2187
2085
  //#region ../core/src/event-series-behaviour.ts
2188
2086
  const SURFACE_EVENT_PRESET_VALUES = [
2189
2087
  "class",
@@ -10642,7 +10540,7 @@ defineBlockAppearancePreset({
10642
10540
  id: "schedule-details-brand-depth",
10643
10541
  target: "events",
10644
10542
  label: "Brand-depth schedule details",
10645
- blockKinds: ["block.event-details", "block.course-details"],
10543
+ blockKinds: ["block.event-details"],
10646
10544
  design: {
10647
10545
  sectionSurface: "brand-depth-band",
10648
10546
  contentFrame: plainFrame,
@@ -16824,7 +16722,6 @@ const productDetail = (props, children, ...mods) => el("product-detail", props,
16824
16722
  const cart = (props, children, ...mods) => el("cart", props, children, ...mods);
16825
16723
  const checkout = (props, children, ...mods) => el("checkout", props, children, ...mods);
16826
16724
  const gifting = (props, children, ...mods) => el("gifting", props, children, ...mods);
16827
- const courseRegistration = (props, children, ...mods) => el("course-registration", props, children, ...mods);
16828
16725
  function bind(from, options) {
16829
16726
  return (node) => ({
16830
16727
  ...node,
@@ -26480,12 +26377,12 @@ const RichTextDocSchema = z.object({
26480
26377
  }).strict();
26481
26378
  //#endregion
26482
26379
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
26483
- const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
26484
- const bookingInstalmentPlanSchema = z.union([
26380
+ const bookingDepositRefundPolicySchema$1 = z.enum(["refundable", "non_refundable"]);
26381
+ const bookingInstalmentPlanSchema$1 = z.union([
26485
26382
  z.object({
26486
26383
  kind: z.literal("deposit_plus_one_remainder"),
26487
26384
  depositAmountCents: z.number().int().min(0),
26488
- depositRefundability: bookingDepositRefundPolicySchema,
26385
+ depositRefundability: bookingDepositRefundPolicySchema$1,
26489
26386
  remainderDueCount: z.number().int().positive(),
26490
26387
  intervalUnit: z.enum([
26491
26388
  "day",
@@ -26496,7 +26393,7 @@ const bookingInstalmentPlanSchema = z.union([
26496
26393
  z.object({
26497
26394
  kind: z.literal("deposit_plus_scheduled_instalments"),
26498
26395
  depositAmountCents: z.number().int().min(0),
26499
- depositRefundability: bookingDepositRefundPolicySchema,
26396
+ depositRefundability: bookingDepositRefundPolicySchema$1,
26500
26397
  instalmentCount: z.number().int().positive(),
26501
26398
  intervalCount: z.number().int().positive(),
26502
26399
  intervalUnit: z.enum([
@@ -26516,28 +26413,28 @@ const bookingInstalmentPlanSchema = z.union([
26516
26413
  ])
26517
26414
  })
26518
26415
  ]);
26519
- const bookingFlexibleBalanceDueDateRuleSchema = z.union([z.object({
26416
+ const bookingFlexibleBalanceDueDateRuleSchema$1 = z.union([z.object({
26520
26417
  kind: z.literal("relative_to_start_date"),
26521
26418
  daysBeforeStart: z.number().int().positive()
26522
26419
  }), z.object({
26523
26420
  kind: z.literal("fixed_calendar_date"),
26524
26421
  dueAt: z.string().datetime()
26525
26422
  })]);
26526
- const bookingFlexibleBalanceConfigSchema = z.object({
26423
+ const bookingFlexibleBalanceConfigSchema$1 = z.object({
26527
26424
  upfrontAmountCents: z.number().int().min(0),
26528
- dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
26529
- depositRefundability: bookingDepositRefundPolicySchema
26425
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema$1,
26426
+ depositRefundability: bookingDepositRefundPolicySchema$1
26530
26427
  });
26531
26428
  const blockBookingPaymentCollectionOptionSchema = z.union([
26532
26429
  z.object({ kind: z.literal("upfront") }),
26533
26430
  z.object({ kind: z.literal("deferred_manual") }),
26534
26431
  z.object({
26535
26432
  kind: z.literal("instalment_plan"),
26536
- plan: bookingInstalmentPlanSchema
26433
+ plan: bookingInstalmentPlanSchema$1
26537
26434
  }),
26538
26435
  z.object({
26539
26436
  kind: z.literal("flexible_balance"),
26540
- config: bookingFlexibleBalanceConfigSchema
26437
+ config: bookingFlexibleBalanceConfigSchema$1
26541
26438
  })
26542
26439
  ]);
26543
26440
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
@@ -26559,6 +26456,164 @@ const bookingRequirementConsentFieldSchema = z.object({
26559
26456
  });
26560
26457
  z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
26561
26458
  //#endregion
26459
+ //#region ../blocks/src/system/blocks/events/whole-series/pricing.ts
26460
+ function isSaleWindowOpen(option, now) {
26461
+ if (!option.isActive) return false;
26462
+ if (option.saleStartsAt && new Date(option.saleStartsAt) > now) return false;
26463
+ if (option.saleEndsAt && new Date(option.saleEndsAt) < now) return false;
26464
+ return true;
26465
+ }
26466
+ function toExactOrFreeDisplay(amount, currency) {
26467
+ if (amount <= 0) return {
26468
+ kind: "free",
26469
+ currency
26470
+ };
26471
+ return {
26472
+ kind: "exact",
26473
+ amount,
26474
+ currency
26475
+ };
26476
+ }
26477
+ function getSelectableWholeSeriesPricingOptionsForNow(offering, now) {
26478
+ if (offering.pricing.pricingStrategy !== "tiered") return [];
26479
+ return [...offering.pricing.options].filter((option) => isSaleWindowOpen(option, now)).sort((left, right) => {
26480
+ if (left.sortOrder !== right.sortOrder) return left.sortOrder - right.sortOrder;
26481
+ if (left.priceAmount !== right.priceAmount) return left.priceAmount - right.priceAmount;
26482
+ return left.name.localeCompare(right.name);
26483
+ });
26484
+ }
26485
+ function resolveWholeSeriesPricingState(offering, selectedPricingOptionId, selectedSlidingAmountOrNowInput, nowInput = {}) {
26486
+ const selection = normalizePricingSelectionInput(selectedSlidingAmountOrNowInput, nowInput);
26487
+ const currency = offering.pricing.currency;
26488
+ switch (offering.pricing.pricingStrategy) {
26489
+ case "free": return resolveFreePricing(currency);
26490
+ case "single": return resolveSinglePricing(offering.pricing.singlePriceAmount ?? 0, currency);
26491
+ case "tiered": return resolveTieredPricing(offering, selectedPricingOptionId, selection.nowInput);
26492
+ case "sliding_scale": return resolveSlidingScalePricing(offering, selection.selectedSlidingAmount);
26493
+ }
26494
+ }
26495
+ function normalizePricingSelectionInput(selectedSlidingAmountOrNowInput, nowInput) {
26496
+ return typeof selectedSlidingAmountOrNowInput === "object" && selectedSlidingAmountOrNowInput !== null ? {
26497
+ selectedSlidingAmount: null,
26498
+ nowInput: selectedSlidingAmountOrNowInput
26499
+ } : {
26500
+ selectedSlidingAmount: typeof selectedSlidingAmountOrNowInput === "number" || selectedSlidingAmountOrNowInput === null ? selectedSlidingAmountOrNowInput : null,
26501
+ nowInput
26502
+ };
26503
+ }
26504
+ function resolveFreePricing(currency) {
26505
+ return {
26506
+ currency,
26507
+ display: {
26508
+ kind: "free",
26509
+ currency
26510
+ },
26511
+ selectableOptions: [],
26512
+ requiresSelection: false,
26513
+ selectedOption: null,
26514
+ slidingScale: null,
26515
+ selectedSlidingAmount: null,
26516
+ selectedPriceAmount: 0,
26517
+ selectedRequiresPayment: false,
26518
+ hasPaidSelection: false,
26519
+ hasFreeSelection: true
26520
+ };
26521
+ }
26522
+ function resolveSinglePricing(amount, currency) {
26523
+ return {
26524
+ currency,
26525
+ display: toExactOrFreeDisplay(amount, currency),
26526
+ selectableOptions: [],
26527
+ requiresSelection: false,
26528
+ selectedOption: null,
26529
+ slidingScale: null,
26530
+ selectedSlidingAmount: null,
26531
+ selectedPriceAmount: amount,
26532
+ selectedRequiresPayment: amount > 0,
26533
+ hasPaidSelection: amount > 0,
26534
+ hasFreeSelection: amount <= 0
26535
+ };
26536
+ }
26537
+ function resolveTieredPricing(offering, selectedPricingOptionId, nowInput) {
26538
+ const currency = offering.pricing.currency;
26539
+ const selectableOptions = getSelectableWholeSeriesPricingOptionsForNow(offering, resolvePlanningDateInput(nowInput));
26540
+ const selectedOption = resolveSelectedTier(selectableOptions, selectedPricingOptionId);
26541
+ return {
26542
+ currency,
26543
+ display: resolveTieredDisplay(selectableOptions.reduce((lowest, option) => lowest === null || option.priceAmount < lowest ? option.priceAmount : lowest, null), selectableOptions.length, currency),
26544
+ selectableOptions,
26545
+ requiresSelection: selectableOptions.length > 1,
26546
+ selectedOption,
26547
+ slidingScale: null,
26548
+ selectedSlidingAmount: null,
26549
+ selectedPriceAmount: selectedOption?.priceAmount ?? null,
26550
+ selectedRequiresPayment: (selectedOption?.priceAmount ?? 0) > 0,
26551
+ hasPaidSelection: selectableOptions.some((option) => option.priceAmount > 0),
26552
+ hasFreeSelection: selectableOptions.some((option) => option.priceAmount === 0)
26553
+ };
26554
+ }
26555
+ function resolveSelectedTier(options, selectedId) {
26556
+ return (selectedId ? options.find((option) => option.id === selectedId) : null) ?? (options.length === 1 ? options[0] ?? null : null);
26557
+ }
26558
+ function resolveTieredDisplay(lowestAmount, optionCount, currency) {
26559
+ if (lowestAmount === null) return {
26560
+ kind: "unavailable",
26561
+ currency
26562
+ };
26563
+ return optionCount > 1 && lowestAmount > 0 ? {
26564
+ kind: "from",
26565
+ amount: lowestAmount,
26566
+ currency
26567
+ } : toExactOrFreeDisplay(lowestAmount, currency);
26568
+ }
26569
+ function resolveSlidingScalePricing(offering, selectedSlidingAmount) {
26570
+ const currency = offering.pricing.currency;
26571
+ const minAmount = offering.pricing.slidingMinAmount ?? null;
26572
+ const maxAmount = offering.pricing.slidingMaxAmount ?? null;
26573
+ if (minAmount === null || maxAmount === null || minAmount < 0 || maxAmount < minAmount) return unavailableSlidingScale(currency);
26574
+ const selectedAmount = Number.isFinite(selectedSlidingAmount) ? selectedSlidingAmount : null;
26575
+ return {
26576
+ currency,
26577
+ display: {
26578
+ kind: "range",
26579
+ minAmount,
26580
+ maxAmount,
26581
+ currency
26582
+ },
26583
+ selectableOptions: [],
26584
+ requiresSelection: selectedAmount === null,
26585
+ selectedOption: null,
26586
+ slidingScale: {
26587
+ minAmount,
26588
+ maxAmount,
26589
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null
26590
+ },
26591
+ selectedSlidingAmount: selectedAmount,
26592
+ selectedPriceAmount: selectedAmount,
26593
+ selectedRequiresPayment: (selectedAmount ?? 0) > 0,
26594
+ hasPaidSelection: maxAmount > 0,
26595
+ hasFreeSelection: minAmount === 0
26596
+ };
26597
+ }
26598
+ function unavailableSlidingScale(currency) {
26599
+ return {
26600
+ currency,
26601
+ display: {
26602
+ kind: "unavailable",
26603
+ currency
26604
+ },
26605
+ selectableOptions: [],
26606
+ requiresSelection: true,
26607
+ selectedOption: null,
26608
+ slidingScale: null,
26609
+ selectedSlidingAmount: null,
26610
+ selectedPriceAmount: null,
26611
+ selectedRequiresPayment: false,
26612
+ hasPaidSelection: false,
26613
+ hasFreeSelection: false
26614
+ };
26615
+ }
26616
+ //#endregion
26562
26617
  //#region ../blocks/src/system/blocks/events/whole-series/schemas.ts
26563
26618
  const wholeSeriesVenueSchema = z.object({
26564
26619
  id: z.string(),
@@ -26618,6 +26673,13 @@ const publicWholeSeriesOfferingSchema = z.object({
26618
26673
  title: z.string(),
26619
26674
  slug: z.string(),
26620
26675
  description: z.unknown().nullable(),
26676
+ deliveryMode: z.enum([
26677
+ "in_person",
26678
+ "online",
26679
+ "hybrid"
26680
+ ]),
26681
+ waitlistEnabled: z.boolean(),
26682
+ requireGuestDetails: z.boolean(),
26621
26683
  teamMembers: z.array(wholeSeriesTeamMemberSummarySchema).optional(),
26622
26684
  enrollmentOpen: z.boolean(),
26623
26685
  pricing: wholeSeriesPricingSchema,
@@ -26733,7 +26795,7 @@ const mixedPriceDisplaySchema = z.object({
26733
26795
  paidToAmount: z.number(),
26734
26796
  currency: z.string()
26735
26797
  });
26736
- const publicCoursePriceDisplaySchema = z.discriminatedUnion("kind", [
26798
+ const publicWholeSeriesPriceDisplaySchema = z.discriminatedUnion("kind", [
26737
26799
  freePriceDisplaySchema,
26738
26800
  exactPriceDisplaySchema,
26739
26801
  fromPriceDisplaySchema,
@@ -26751,8 +26813,8 @@ z.discriminatedUnion("kind", [
26751
26813
  label: z.string()
26752
26814
  }),
26753
26815
  z.object({
26754
- kind: z.literal("course"),
26755
- display: publicCoursePriceDisplaySchema
26816
+ kind: z.literal("whole_series"),
26817
+ display: publicWholeSeriesPriceDisplaySchema
26756
26818
  })
26757
26819
  ]);
26758
26820
  const publicEventTicketTypePriceDisplaySchema = z.union([
@@ -26854,10 +26916,10 @@ const publicEventPricingSchema = z.discriminatedUnion("kind", [
26854
26916
  })
26855
26917
  }),
26856
26918
  z.object({
26857
- kind: z.literal("course"),
26919
+ kind: z.literal("whole_series"),
26858
26920
  display: z.object({
26859
- kind: z.literal("course"),
26860
- display: publicCoursePriceDisplaySchema
26921
+ kind: z.literal("whole_series"),
26922
+ display: publicWholeSeriesPriceDisplaySchema
26861
26923
  })
26862
26924
  }),
26863
26925
  z.object({
@@ -27274,7 +27336,8 @@ function resolveEventRegistrationScope(context) {
27274
27336
  };
27275
27337
  return { kind: "unscoped" };
27276
27338
  }
27277
- function applyEventRegistrationScope(events, scope) {
27339
+ function resolveEventRegistrationScopedEvents(events, context) {
27340
+ const scope = resolveEventRegistrationScope(context);
27278
27341
  switch (scope.kind) {
27279
27342
  case "occurrenceSeries":
27280
27343
  case "pageSurfaceSeries": return events.filter((event) => event.seriesId === scope.seriesId);
@@ -27286,9 +27349,6 @@ function applyEventRegistrationScope(events, scope) {
27286
27349
  case "unscoped": return [...events];
27287
27350
  }
27288
27351
  }
27289
- function resolveEventRegistrationScopedEvents(events, context) {
27290
- return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
27291
- }
27292
27352
  //#endregion
27293
27353
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
27294
27354
  function planEventRegistrationScope(input) {
@@ -27382,14 +27442,14 @@ function isRecord$6(value) {
27382
27442
  }
27383
27443
  function isPublicEventPricing(value) {
27384
27444
  if (!isRecord$6(value) || typeof value.kind !== "string") return false;
27385
- 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";
27445
+ 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";
27386
27446
  }
27387
27447
  function isPublicEventTicketType(value) {
27388
27448
  return isRecord$6(value) && typeof value.id === "string";
27389
27449
  }
27390
27450
  function readTicketTypePriceDisplay(value, currency) {
27391
27451
  const display = readLegacyPriceDisplay(value, currency);
27392
- return display.kind === "course" || display.kind === "external" ? {
27452
+ return display.kind === "whole_series" || display.kind === "external" ? {
27393
27453
  kind: "unavailable",
27394
27454
  currency
27395
27455
  } : display;
@@ -27447,11 +27507,11 @@ function readLegacyPriceDisplay(value, currency) {
27447
27507
  kind: "unavailable",
27448
27508
  currency: displayCurrency
27449
27509
  };
27450
- case "course": return isRecord$6(value.display) ? {
27451
- kind: "course",
27510
+ case "whole_series": return isRecord$6(value.display) ? {
27511
+ kind: "whole_series",
27452
27512
  display: readCoursePriceDisplay(value.display, displayCurrency)
27453
27513
  } : {
27454
- kind: "course",
27514
+ kind: "whole_series",
27455
27515
  display: {
27456
27516
  kind: "unavailable",
27457
27517
  currency: displayCurrency
@@ -27577,7 +27637,7 @@ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
27577
27637
  //#endregion
27578
27638
  //#region ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
27579
27639
  function eventMatchesOccurrenceId(event, occurrenceId) {
27580
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
27640
+ return event.registrationSubject.kind === "occurrence" && (event.registrationSubject.occurrenceId === occurrenceId || event.selectionId === occurrenceId);
27581
27641
  }
27582
27642
  function findPreSelectedEvent(input) {
27583
27643
  const occurrenceContext = input.occurrenceContext;
@@ -27603,12 +27663,127 @@ function toRegistrationEvent(event) {
27603
27663
  return {
27604
27664
  ...event,
27605
27665
  pricing: resolveRuntimeEventPricing(event),
27606
- publicEventId: event.id,
27607
- registrationOccurrenceId: event.occurrenceId
27666
+ selectionId: event.id,
27667
+ registrationSubject: {
27668
+ kind: "occurrence",
27669
+ occurrenceId: event.occurrenceId
27670
+ }
27608
27671
  };
27609
27672
  }
27610
27673
  function toRegistrationEvents(events) {
27611
- return events.map(toRegistrationEvent);
27674
+ return events.filter((event) => event.bookingScope === "single_occurrence").map(toRegistrationEvent);
27675
+ }
27676
+ function toWholeSeriesTicketType(option) {
27677
+ return {
27678
+ ...option,
27679
+ capacityMode: option.capacityLimit === null ? "unlimited" : "limited",
27680
+ attendanceScope: option.attendanceScope ?? void 0,
27681
+ availability: {
27682
+ kind: "available",
27683
+ remainingCapacity: option.capacityLimit
27684
+ }
27685
+ };
27686
+ }
27687
+ function toWholeSeriesPricing(offering) {
27688
+ const resolved = resolveWholeSeriesPricingState(offering);
27689
+ switch (offering.pricing.pricingStrategy) {
27690
+ case "free": return {
27691
+ kind: "free_registration",
27692
+ currency: offering.currency,
27693
+ display: {
27694
+ kind: "free",
27695
+ currency: offering.currency
27696
+ }
27697
+ };
27698
+ case "single": {
27699
+ const amount = offering.pricing.singlePriceAmount ?? 0;
27700
+ return amount === 0 ? {
27701
+ kind: "free_registration",
27702
+ currency: offering.currency,
27703
+ display: {
27704
+ kind: "free",
27705
+ currency: offering.currency
27706
+ }
27707
+ } : {
27708
+ kind: "single_paid",
27709
+ amount,
27710
+ currency: offering.currency,
27711
+ display: {
27712
+ kind: "exact",
27713
+ amount,
27714
+ currency: offering.currency
27715
+ }
27716
+ };
27717
+ }
27718
+ case "tiered": return {
27719
+ kind: "ticket_types",
27720
+ currency: offering.currency,
27721
+ ticketTypes: resolved.selectableOptions.map((option) => toWholeSeriesTicketType(option)),
27722
+ display: resolved.display
27723
+ };
27724
+ case "sliding_scale": return {
27725
+ kind: "sliding_scale",
27726
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
27727
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
27728
+ suggestedAmount: offering.pricing.slidingSuggestedAmount ?? null,
27729
+ currency: offering.currency,
27730
+ display: {
27731
+ kind: "range",
27732
+ minAmount: offering.pricing.slidingMinAmount ?? 0,
27733
+ maxAmount: offering.pricing.slidingMaxAmount ?? 0,
27734
+ currency: offering.currency
27735
+ }
27736
+ };
27737
+ }
27738
+ }
27739
+ function toAttendanceModes(offering) {
27740
+ return (offering.deliveryMode === "hybrid" ? ["in_person", "online"] : [offering.deliveryMode]).map((mode) => ({
27741
+ mode,
27742
+ capacity: offering.enrollmentCapacity,
27743
+ registeredCount: offering.enrolledCount,
27744
+ availableSpots: offering.availableSpots,
27745
+ waitlistEnabled: offering.waitlistEnabled
27746
+ }));
27747
+ }
27748
+ function toWholeSeriesRegistrationEvent(offering) {
27749
+ const firstSession = offering.sessions[0];
27750
+ const lastSession = offering.sessions[offering.sessions.length - 1];
27751
+ return {
27752
+ selectionId: offering.eventSeriesId,
27753
+ registrationSubject: {
27754
+ kind: "wholeSeries",
27755
+ eventSeriesId: offering.eventSeriesId,
27756
+ sessions: offering.sessions
27757
+ },
27758
+ seriesId: offering.eventSeriesId,
27759
+ title: offering.title,
27760
+ startsAt: firstSession?.startsAt ?? "",
27761
+ endsAt: lastSession?.endsAt ?? firstSession?.endsAt ?? "",
27762
+ bookingAvailability: offering.enrollmentOpen ? { kind: "open" } : {
27763
+ kind: "closed",
27764
+ reason: "enrollment_closed"
27765
+ },
27766
+ deliveryMode: offering.deliveryMode,
27767
+ attendanceModes: toAttendanceModes(offering),
27768
+ capacity: offering.enrollmentCapacity,
27769
+ registeredCount: offering.enrolledCount,
27770
+ availableSpots: offering.availableSpots,
27771
+ waitlistEnabled: offering.waitlistEnabled,
27772
+ venue: offering.venue ? {
27773
+ ...offering.venue,
27774
+ location: null
27775
+ } : null,
27776
+ eventCategory: null,
27777
+ teamMembers: offering.teamMembers,
27778
+ status: offering.status,
27779
+ timeZone: firstSession?.timeZone ?? "UTC",
27780
+ pricing: toWholeSeriesPricing(offering),
27781
+ paymentTerms: offering.paymentTerms,
27782
+ consent: offering.consent,
27783
+ requireGuestDetails: offering.requireGuestDetails,
27784
+ acceptsPasses: false,
27785
+ acceptsMemberships: offering.acceptsMemberships
27786
+ };
27612
27787
  }
27613
27788
  //#endregion
27614
27789
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
@@ -27634,11 +27809,7 @@ const eventRegistrationHydrationSchemaShape = {
27634
27809
  maxTickets: z.string().optional(),
27635
27810
  showVenue: z.boolean().optional(),
27636
27811
  showCapacity: z.boolean().optional(),
27637
- showSessions: z.boolean().optional(),
27638
- showPrice: z.boolean().optional(),
27639
27812
  successMessage: z.string().optional(),
27640
- waitlistMessage: z.string().optional(),
27641
- membershipMessage: z.string().optional(),
27642
27813
  buttonVariant: registrationButtonVariantSchema.optional(),
27643
27814
  overlayEnabled: z.boolean().optional(),
27644
27815
  spamProtectionEnabled: z.boolean().optional(),
@@ -27708,6 +27879,15 @@ function resolveWholeSeriesOffering(source) {
27708
27879
  return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
27709
27880
  }
27710
27881
  function buildEventRegistrationShellStepLabels(source) {
27882
+ const selectedOffering = resolveWholeSeriesOffering(source);
27883
+ if (selectedOffering) {
27884
+ const selectedEvent = toWholeSeriesRegistrationEvent(selectedOffering);
27885
+ return getWizardStepsForContext(true, resolveEventRequiresPayment({
27886
+ eligibility: null,
27887
+ selectedTicketType: null,
27888
+ event: selectedEvent
27889
+ })).map((step) => shellLabelForRegistrationStep(step, [selectedEvent]));
27890
+ }
27711
27891
  const scopedEvents = scopeEventRegistrationEvents(source);
27712
27892
  if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
27713
27893
  const preSelectedEvent = findPreSelectedEvent({
@@ -27771,11 +27951,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
27771
27951
  maxTickets: source.maxTickets ?? void 0,
27772
27952
  showVenue: source.showVenue,
27773
27953
  showCapacity: source.showCapacity,
27774
- showSessions: source.showSessions,
27775
- showPrice: source.showPrice,
27776
27954
  successMessage: source.successMessage,
27777
- waitlistMessage: source.waitlistMessage,
27778
- membershipMessage: source.membershipMessage,
27779
27955
  buttonVariant: source.buttonVariant,
27780
27956
  overlayEnabled: source.overlayEnabled,
27781
27957
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -27891,24 +28067,6 @@ const eventRegistrationBlockDefinition = {
27891
28067
  defaultValue: true,
27892
28068
  ui: { intent: "display" }
27893
28069
  },
27894
- {
27895
- id: "showSessions",
27896
- type: "boolean",
27897
- label: "Show complete schedule",
27898
- description: "Display every session for whole-series registrations",
27899
- required: false,
27900
- defaultValue: true,
27901
- ui: { intent: "display" }
27902
- },
27903
- {
27904
- id: "showPrice",
27905
- type: "boolean",
27906
- label: "Show price",
27907
- description: "Display the whole-series price",
27908
- required: false,
27909
- defaultValue: true,
27910
- ui: { intent: "display" }
27911
- },
27912
28070
  {
27913
28071
  id: "successMessage",
27914
28072
  type: "text",
@@ -27919,26 +28077,6 @@ const eventRegistrationBlockDefinition = {
27919
28077
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
27920
28078
  maxLength: 500
27921
28079
  },
27922
- {
27923
- id: "waitlistMessage",
27924
- type: "text",
27925
- label: "Waitlist message",
27926
- description: "Message shown after joining a whole-series waitlist",
27927
- required: false,
27928
- multiline: true,
27929
- defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
27930
- maxLength: 500
27931
- },
27932
- {
27933
- id: "membershipMessage",
27934
- type: "text",
27935
- label: "Membership registration message",
27936
- description: "Message shown when a whole-series place is covered by membership",
27937
- required: false,
27938
- multiline: true,
27939
- defaultValue: "Registered using your membership. Check your email for session details.",
27940
- maxLength: 500
27941
- },
27942
28080
  {
27943
28081
  id: "buttonText",
27944
28082
  type: "text",
@@ -27970,11 +28108,7 @@ const eventRegistrationBlockDefinition = {
27970
28108
  } },
27971
28109
  showVenue: { $bind: { from: "content.showVenue" } },
27972
28110
  showCapacity: { $bind: { from: "content.showCapacity" } },
27973
- showSessions: { $bind: { from: "content.showSessions" } },
27974
- showPrice: { $bind: { from: "content.showPrice" } },
27975
28111
  successMessage: { $bind: { from: "content.successMessage" } },
27976
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
27977
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
27978
28112
  buttonText: { $bind: {
27979
28113
  from: "content.buttonText",
27980
28114
  fallback: "Complete Registration"
@@ -28091,254 +28225,6 @@ const eventRegistrationBlockDefinition = {
28091
28225
  }
28092
28226
  };
28093
28227
  //#endregion
28094
- //#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
28095
- const courseRegistrationHydrationSchemaShape = {
28096
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
28097
- courses: z.array(publicWholeSeriesOfferingSchema).nullable().optional(),
28098
- showSessions: z.boolean().optional(),
28099
- showPrice: z.boolean().optional(),
28100
- showCapacity: z.boolean().optional(),
28101
- showVenue: z.boolean().optional(),
28102
- successMessage: z.string().optional(),
28103
- waitlistMessage: z.string().optional(),
28104
- membershipMessage: z.string().optional(),
28105
- buttonVariant: registrationButtonVariantSchema.optional()
28106
- };
28107
- const courseRegistrationSourceSchema = z.object({
28108
- siteId: z.string().optional(),
28109
- apiBaseUrl: z.string().optional(),
28110
- portalToken: z.string().nullable().optional(),
28111
- ...courseRegistrationHydrationSchemaShape,
28112
- className: z.string().nullable().optional(),
28113
- buttonText: z.string().nullable().optional(),
28114
- stage: previewStageSchema.optional()
28115
- });
28116
- const courseRegistrationDisplaySchema = z.object({
28117
- kind: z.literal("course-registration"),
28118
- state: z.literal("shell"),
28119
- className: z.string().nullable(),
28120
- summaryButtonText: z.string()
28121
- });
28122
- const courseRegistrationHydrationSchema = z.object(courseRegistrationHydrationSchemaShape);
28123
- const courseRegistrationRenderSchema = z.object({
28124
- display: courseRegistrationDisplaySchema,
28125
- hydration: courseRegistrationHydrationSchema
28126
- });
28127
- z.object({
28128
- siteId: z.string().optional(),
28129
- apiBaseUrl: z.string().optional(),
28130
- portalToken: z.string().nullable().optional(),
28131
- stage: previewStageSchema.optional()
28132
- });
28133
- function buildCourseRegistrationDisplay(source) {
28134
- return {
28135
- kind: "course-registration",
28136
- state: "shell",
28137
- className: source.className ?? null,
28138
- summaryButtonText: source.buttonText?.trim() || "Sign up"
28139
- };
28140
- }
28141
- const courseRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
28142
- kind: "client-owned",
28143
- contracts: {
28144
- source: createZodCodec(courseRegistrationSourceSchema),
28145
- render: createZodCodec(courseRegistrationRenderSchema)
28146
- },
28147
- buildRender: (source) => ({
28148
- display: buildCourseRegistrationDisplay(source),
28149
- hydration: {
28150
- subject: source.subject ?? null,
28151
- courses: source.courses ?? null,
28152
- showSessions: source.showSessions,
28153
- showPrice: source.showPrice,
28154
- showCapacity: source.showCapacity,
28155
- showVenue: source.showVenue,
28156
- successMessage: source.successMessage,
28157
- waitlistMessage: source.waitlistMessage,
28158
- membershipMessage: source.membershipMessage,
28159
- buttonVariant: source.buttonVariant
28160
- }
28161
- })
28162
- });
28163
- const courseRegistrationBlockDefinition = {
28164
- manifest: createBlockManifest({
28165
- id: "block.course-registration",
28166
- version: "1.0.0",
28167
- title: "Course Registration",
28168
- titleSource: "heading",
28169
- description: "Enrollment form for multi-session courses",
28170
- category: "interactive",
28171
- contentSource: { kind: "inline" },
28172
- tags: [
28173
- "courses",
28174
- "enrollment",
28175
- "booking",
28176
- "form",
28177
- "signup",
28178
- "education"
28179
- ],
28180
- icon: "GraduationCap",
28181
- styleTokens: {
28182
- background: "surface",
28183
- typography: "body",
28184
- spacing: "md"
28185
- },
28186
- behaviours: {
28187
- supportsThemeSwitching: true,
28188
- inlineEditing: false,
28189
- animation: false,
28190
- paletteHidden: false
28191
- },
28192
- additionalFields: [
28193
- {
28194
- id: "heading",
28195
- type: "text",
28196
- label: "Heading",
28197
- description: "Main heading for the registration form",
28198
- required: false,
28199
- multiline: false,
28200
- defaultValue: "Sign up"
28201
- },
28202
- {
28203
- id: "description",
28204
- type: "richText",
28205
- label: "Description",
28206
- description: "Optional introductory text",
28207
- required: false
28208
- },
28209
- {
28210
- id: "showSessions",
28211
- type: "boolean",
28212
- label: "Show sessions",
28213
- description: "Display the list of course sessions",
28214
- required: false,
28215
- defaultValue: true,
28216
- ui: { intent: "display" }
28217
- },
28218
- {
28219
- id: "showPrice",
28220
- type: "boolean",
28221
- label: "Show price",
28222
- description: "Display the course price",
28223
- required: false,
28224
- defaultValue: true,
28225
- ui: { intent: "display" }
28226
- },
28227
- {
28228
- id: "showCapacity",
28229
- type: "boolean",
28230
- label: "Show available spots",
28231
- description: "Display remaining enrollment capacity",
28232
- required: false,
28233
- defaultValue: true,
28234
- ui: { intent: "display" }
28235
- },
28236
- {
28237
- id: "showVenue",
28238
- type: "boolean",
28239
- label: "Show venue",
28240
- description: "Display venue information",
28241
- required: false,
28242
- defaultValue: true,
28243
- ui: { intent: "display" }
28244
- },
28245
- {
28246
- id: "successMessage",
28247
- type: "text",
28248
- label: "Success message",
28249
- description: "Message shown after successful enrollment",
28250
- required: false,
28251
- multiline: true,
28252
- defaultValue: "You're enrolled! Check your email for confirmation and session details.",
28253
- maxLength: 500
28254
- },
28255
- {
28256
- id: "waitlistMessage",
28257
- type: "text",
28258
- label: "Waitlist message",
28259
- description: "Message when added to waitlist",
28260
- required: false,
28261
- multiline: true,
28262
- defaultValue: "You've been added to the waitlist. We'll email you a claim link if a spot opens up.",
28263
- maxLength: 500
28264
- },
28265
- {
28266
- id: "membershipMessage",
28267
- type: "text",
28268
- label: "Membership enrollment message",
28269
- description: "Message when enrolled using a membership",
28270
- required: false,
28271
- multiline: true,
28272
- defaultValue: "Enrolled using your membership! Check your email for session details.",
28273
- maxLength: 500
28274
- },
28275
- {
28276
- id: "buttonText",
28277
- type: "text",
28278
- label: "Submit button text",
28279
- description: "Text for the enrollment submit button",
28280
- required: false,
28281
- multiline: false,
28282
- defaultValue: "Sign up",
28283
- maxLength: 40
28284
- },
28285
- createButtonVariantField()
28286
- ],
28287
- layout: [styledSection({
28288
- baseClass: "",
28289
- spacing: "spacious",
28290
- children: sectionContainer([
28291
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
28292
- richText({ className: "rb-prose rb-max-w-none" }, bind("content.description"), when("content.description")),
28293
- courseRegistration(withApiBindings({
28294
- subject: { $bind: {
28295
- from: "$root.subject",
28296
- fallback: null
28297
- } },
28298
- portalToken: { $bind: {
28299
- from: "$root.portalToken",
28300
- fallback: null
28301
- } },
28302
- showSessions: { $bind: { from: "content.showSessions" } },
28303
- showPrice: { $bind: { from: "content.showPrice" } },
28304
- showCapacity: { $bind: { from: "content.showCapacity" } },
28305
- showVenue: { $bind: { from: "content.showVenue" } },
28306
- successMessage: { $bind: { from: "content.successMessage" } },
28307
- waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
28308
- membershipMessage: { $bind: { from: "content.membershipMessage" } },
28309
- buttonText: { $bind: {
28310
- from: "content.buttonText",
28311
- fallback: "Sign up"
28312
- } },
28313
- buttonVariant: { $bind: {
28314
- from: "content.buttonVariant",
28315
- fallback: "primary"
28316
- } },
28317
- courses: { $bind: { from: "data.courses" } },
28318
- stage: { $bind: {
28319
- from: "$root.previewStage",
28320
- fallback: "published"
28321
- } }
28322
- }))
28323
- ], { gap: "lg" })
28324
- })]
28325
- }),
28326
- runtime: courseRegistrationBlockRuntime,
28327
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
28328
- dataLoaders: { courses: {
28329
- endpoint: "listPublicWholeSeriesOfferings",
28330
- params: {
28331
- siteId: { $bind: { from: "$root.siteId" } },
28332
- limit: "50",
28333
- stage: { $bind: {
28334
- from: "$root.previewStage",
28335
- fallback: "published"
28336
- } }
28337
- },
28338
- mode: "server"
28339
- } }
28340
- };
28341
- //#endregion
28342
28228
  //#region ../blocks/src/system/blocks/event-details.ts
28343
28229
  /**
28344
28230
  * Event Details Block
@@ -28585,200 +28471,6 @@ const eventDetailsBlockDefinition = {
28585
28471
  mode: "server"
28586
28472
  } }
28587
28473
  };
28588
- const courseDetailsBlockDefinition = {
28589
- manifest: createBlockManifest({
28590
- id: "block.course-details",
28591
- version: "1.0.0",
28592
- title: "Course Details",
28593
- titleSource: "heading",
28594
- description: "Schedule, venue, price, and enrollment status for a course",
28595
- category: "content",
28596
- contentSource: { kind: "entries" },
28597
- tags: [
28598
- "courses",
28599
- "schedule",
28600
- "sessions",
28601
- "venue",
28602
- "pricing"
28603
- ],
28604
- icon: "GraduationCap",
28605
- styleTokens: {
28606
- background: "surface",
28607
- typography: "body",
28608
- spacing: "md"
28609
- },
28610
- behaviours: {
28611
- supportsThemeSwitching: true,
28612
- inlineEditing: false,
28613
- animation: false,
28614
- paletteHidden: false
28615
- },
28616
- additionalFields: [
28617
- {
28618
- id: "heading",
28619
- type: "text",
28620
- label: "Heading",
28621
- description: "Optional heading shown above course details",
28622
- required: false,
28623
- multiline: false,
28624
- defaultValue: "Course details"
28625
- },
28626
- {
28627
- id: "showTitle",
28628
- type: "boolean",
28629
- label: "Show course title",
28630
- required: false,
28631
- defaultValue: false,
28632
- ui: { intent: "display" }
28633
- },
28634
- {
28635
- id: "showDescription",
28636
- type: "boolean",
28637
- label: "Show course description",
28638
- description: "Render the course description from the bookings course record",
28639
- required: false,
28640
- defaultValue: false,
28641
- ui: { intent: "display" }
28642
- },
28643
- {
28644
- id: "showSessions",
28645
- type: "boolean",
28646
- label: "Show sessions",
28647
- required: false,
28648
- defaultValue: true,
28649
- ui: { intent: "display" }
28650
- },
28651
- {
28652
- id: "sessionsLimit",
28653
- type: "select",
28654
- label: "Sessions limit",
28655
- required: false,
28656
- multiple: false,
28657
- defaultValue: "10",
28658
- options: [
28659
- {
28660
- value: "3",
28661
- label: "3 sessions"
28662
- },
28663
- {
28664
- value: "5",
28665
- label: "5 sessions"
28666
- },
28667
- {
28668
- value: "10",
28669
- label: "10 sessions"
28670
- },
28671
- {
28672
- value: "all",
28673
- label: "All sessions"
28674
- }
28675
- ],
28676
- ui: { intent: "display" }
28677
- },
28678
- {
28679
- id: "showVenue",
28680
- type: "boolean",
28681
- label: "Show venue",
28682
- required: false,
28683
- defaultValue: true,
28684
- ui: { intent: "display" }
28685
- },
28686
- {
28687
- id: "showPrice",
28688
- type: "boolean",
28689
- label: "Show price",
28690
- required: false,
28691
- defaultValue: true,
28692
- ui: { intent: "display" }
28693
- },
28694
- {
28695
- id: "showCapacity",
28696
- type: "boolean",
28697
- label: "Show capacity",
28698
- required: false,
28699
- defaultValue: true,
28700
- ui: { intent: "display" }
28701
- },
28702
- {
28703
- id: "showEnrollmentStatus",
28704
- type: "boolean",
28705
- label: "Show enrollment status",
28706
- required: false,
28707
- defaultValue: true,
28708
- ui: { intent: "display" }
28709
- },
28710
- {
28711
- id: "showMembershipNote",
28712
- type: "boolean",
28713
- label: "Show membership note",
28714
- description: "Indicate when memberships can be used for free enrollment",
28715
- required: false,
28716
- defaultValue: true,
28717
- ui: { intent: "display" }
28718
- }
28719
- ],
28720
- layout: [styledSection({
28721
- baseClass: "",
28722
- spacing: "spacious",
28723
- children: sectionContainer([text({ as: "h2" }, bind("content.heading"), when("content.heading")), el("course-details", {
28724
- subject: { $bind: {
28725
- from: "$root.subject",
28726
- fallback: null
28727
- } },
28728
- courses: { $bind: { from: "data.courses" } },
28729
- showTitle: { $bind: {
28730
- from: "content.showTitle",
28731
- fallback: false
28732
- } },
28733
- showDescription: { $bind: {
28734
- from: "content.showDescription",
28735
- fallback: false
28736
- } },
28737
- showSessions: { $bind: {
28738
- from: "content.showSessions",
28739
- fallback: true
28740
- } },
28741
- sessionsLimit: { $bind: {
28742
- from: "content.sessionsLimit",
28743
- fallback: "10"
28744
- } },
28745
- showVenue: { $bind: {
28746
- from: "content.showVenue",
28747
- fallback: true
28748
- } },
28749
- showPrice: { $bind: {
28750
- from: "content.showPrice",
28751
- fallback: true
28752
- } },
28753
- showCapacity: { $bind: {
28754
- from: "content.showCapacity",
28755
- fallback: true
28756
- } },
28757
- showEnrollmentStatus: { $bind: {
28758
- from: "content.showEnrollmentStatus",
28759
- fallback: true
28760
- } },
28761
- showMembershipNote: { $bind: {
28762
- from: "content.showMembershipNote",
28763
- fallback: true
28764
- } }
28765
- })], { gap: "lg" })
28766
- })]
28767
- }),
28768
- dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
28769
- dataLoaders: { courses: {
28770
- endpoint: "listPublicWholeSeriesOfferings",
28771
- params: {
28772
- siteId: { $bind: { from: "$root.siteId" } },
28773
- limit: "50",
28774
- stage: { $bind: {
28775
- from: "$root.previewStage",
28776
- fallback: "published"
28777
- } }
28778
- },
28779
- mode: "server"
28780
- } }
28781
- };
28782
28474
  const eventSpotlightBlockDefinition = {
28783
28475
  manifest: createBlockManifest({
28784
28476
  id: "block.event-spotlight",
@@ -31442,7 +31134,7 @@ const offeringsPreviewManifest = createBlockManifest({
31442
31134
  fallback: "published"
31443
31135
  } },
31444
31136
  routeCandidates: { $bind: { from: "data.routeCandidates" } },
31445
- courses: { $bind: { from: "data.courses" } },
31137
+ wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
31446
31138
  ...offeringsPreviewEventDataBindings
31447
31139
  })
31448
31140
  ], { gap: "lg" }),
@@ -31459,7 +31151,7 @@ const offeringsPreviewBlockDefinition = {
31459
31151
  dataSchemas: {
31460
31152
  ...offeringsPreviewEventDataSchemas,
31461
31153
  routeCandidates: publicRouteCandidatesSchema.optional(),
31462
- courses: publicWholeSeriesOfferingsArraySchema.optional()
31154
+ wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.optional()
31463
31155
  },
31464
31156
  dataLoaders: {
31465
31157
  ...offeringsPreviewEventDataLoaders,
@@ -31468,7 +31160,7 @@ const offeringsPreviewBlockDefinition = {
31468
31160
  params: {},
31469
31161
  mode: "server"
31470
31162
  },
31471
- courses: {
31163
+ wholeSeriesOfferings: {
31472
31164
  endpoint: "listPublicWholeSeriesOfferings",
31473
31165
  params: {
31474
31166
  siteId: { $bind: { from: "$root.siteId" } },
@@ -36435,22 +36127,6 @@ const systemBlockDefinitions = [
36435
36127
  weight: "standard"
36436
36128
  })]
36437
36129
  })),
36438
- withDesignCapability("block.course-registration", courseRegistrationBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
36439
- flow: conversionFlow,
36440
- layoutProfiles: [layoutProfile({
36441
- variantKey: "default",
36442
- family: "form",
36443
- weight: "standard"
36444
- })]
36445
- })),
36446
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
36447
- flow: offeringsFlow,
36448
- layoutProfiles: [layoutProfile({
36449
- variantKey: "default",
36450
- family: "stack",
36451
- weight: "standard"
36452
- })]
36453
- })),
36454
36130
  withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
36455
36131
  flow: offeringsFlow,
36456
36132
  layoutProfiles: [layoutProfile({
@@ -38509,6 +38185,68 @@ function parsePublicProductCategorySelector(value) {
38509
38185
  };
38510
38186
  }
38511
38187
  //#endregion
38188
+ //#region ../api/src/bookingPaymentTermSchemas.ts
38189
+ const bookingDepositRefundPolicySchema = z.enum(["refundable", "non_refundable"]);
38190
+ const bookingInstalmentPlanSchema = z.discriminatedUnion("kind", [
38191
+ z.object({
38192
+ kind: z.literal("deposit_plus_one_remainder"),
38193
+ depositAmountCents: z.number().int().nonnegative(),
38194
+ depositRefundability: bookingDepositRefundPolicySchema,
38195
+ remainderDueCount: z.number().int().positive(),
38196
+ intervalUnit: z.enum([
38197
+ "day",
38198
+ "week",
38199
+ "month"
38200
+ ])
38201
+ }),
38202
+ z.object({
38203
+ kind: z.literal("deposit_plus_scheduled_instalments"),
38204
+ depositAmountCents: z.number().int().nonnegative(),
38205
+ depositRefundability: bookingDepositRefundPolicySchema,
38206
+ instalmentCount: z.number().int().positive(),
38207
+ intervalCount: z.number().int().positive(),
38208
+ intervalUnit: z.enum([
38209
+ "day",
38210
+ "week",
38211
+ "month"
38212
+ ])
38213
+ }),
38214
+ z.object({
38215
+ kind: z.literal("equal_scheduled_instalments"),
38216
+ instalmentCount: z.number().int().positive(),
38217
+ intervalCount: z.number().int().positive(),
38218
+ intervalUnit: z.enum([
38219
+ "day",
38220
+ "week",
38221
+ "month"
38222
+ ])
38223
+ })
38224
+ ]);
38225
+ const bookingFlexibleBalanceDueDateRuleSchema = z.discriminatedUnion("kind", [z.object({
38226
+ kind: z.literal("relative_to_start_date"),
38227
+ daysBeforeStart: z.number().int().positive()
38228
+ }), z.object({
38229
+ kind: z.literal("fixed_calendar_date"),
38230
+ dueAt: z.string().datetime()
38231
+ })]);
38232
+ const bookingFlexibleBalanceConfigSchema = z.object({
38233
+ upfrontAmountCents: z.number().int().nonnegative(),
38234
+ dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
38235
+ depositRefundability: bookingDepositRefundPolicySchema
38236
+ });
38237
+ z.discriminatedUnion("kind", [
38238
+ z.object({ kind: z.literal("upfront") }),
38239
+ z.object({ kind: z.literal("deferred_manual") }),
38240
+ z.object({
38241
+ kind: z.literal("instalment_plan"),
38242
+ plan: bookingInstalmentPlanSchema
38243
+ }),
38244
+ z.object({
38245
+ kind: z.literal("flexible_balance"),
38246
+ config: bookingFlexibleBalanceConfigSchema
38247
+ })
38248
+ ]);
38249
+ //#endregion
38512
38250
  //#region ../api/src/aiPlayground.ts
38513
38251
  /**
38514
38252
  * RFC-6902 JSON Patch Operations