@riverbankcms/sdk 0.151.0 → 0.152.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 (226) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{EventEmbeddedCheckoutStep-BBHbM22D.mjs → EventEmbeddedCheckoutStep-DVQXWFm6.mjs} +10 -9
  3. package/dist/{PreviewEditorSidebar-BHplI9HE.mjs → PreviewEditorSidebar-Dr4NJi3Q.mjs} +4 -3
  4. package/dist/{PreviewEditorUI-DuyN8nsD.mjs → PreviewEditorUI-DSZXQbyh.mjs} +5 -4
  5. package/dist/{SdkPreviewModeRuntime-CR5ypwxJ.mjs → SdkPreviewModeRuntime-Dl4GyMc3.mjs} +124 -53
  6. package/dist/{SiteChromeCustomizeContext-D5t6joF_.mjs → SiteChromeCustomizeContext-DgBe-FlM.mjs} +20418 -32298
  7. package/dist/ThemedButton-B8ViBnLK.mjs +16350 -0
  8. package/dist/_dts/api/src/bookingOperations.d.ts +5 -3
  9. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +4 -0
  10. package/dist/_dts/api/src/endpoints.d.ts +7 -0
  11. package/dist/_dts/api/src/index.d.ts +1 -1
  12. package/dist/_dts/api/src/navigation/types.d.ts +7 -0
  13. package/dist/_dts/api/src/navigation.d.ts +1 -1
  14. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +10 -1
  15. package/dist/_dts/api/src/siteAssets.d.ts +1 -0
  16. package/dist/_dts/blocks/src/definitions.d.ts +1 -1
  17. package/dist/_dts/blocks/src/index.d.ts +1 -0
  18. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +1 -0
  19. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +1 -1
  20. package/dist/_dts/blocks/src/primitives/content/utils/sanitizeHref.d.ts +1 -1
  21. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +4 -4
  22. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +16 -0
  23. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +5 -0
  24. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +2 -0
  25. package/dist/_dts/blocks/src/system/helpers/normalizeMailingListBlockContent.d.ts +2 -0
  26. package/dist/_dts/blocks/src/system/registry.d.ts +14 -2
  27. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -5
  28. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +2 -0
  29. package/dist/_dts/blocks/src/system/runtime/api/schemas/events.d.ts +971 -0
  30. package/dist/_dts/blocks/src/system/runtime/api/schemas/waitlist-claims.d.ts +42 -0
  31. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +10 -2
  32. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +10 -136
  33. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +48 -6
  34. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +24 -3
  35. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingSubmission.state.d.ts +2 -0
  36. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -1
  37. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +23 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +6 -2
  40. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.hooks.d.ts +6 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/carousel.client.state.d.ts +7 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/BookingEntryViews.d.ts +42 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventEmbeddedCheckoutStep.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.d.ts +19 -9
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationPayment.d.ts +4 -2
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +24 -9
  47. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardContent.d.ts +4 -2
  48. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventSelectionStep.d.ts +5 -4
  49. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/GuestDetailsSection.d.ts +1 -1
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentStatusStep.d.ts +2 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SingleTicketEntitlementNote.d.ts +11 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +5 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/VerifyingTimeoutStep.d.ts +2 -0
  55. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingCardDisplay.d.ts +31 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingEntry.d.ts +154 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/bookingFocus.d.ts +12 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -2
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +2 -2
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +9 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/finishedBooking.d.ts +77 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/index.d.ts +0 -1
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/offeringNoun.d.ts +12 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/paymentResponse.d.ts +2 -1
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +33 -1
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +11 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDisplay.d.ts +31 -0
  68. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDraft.state.d.ts +60 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +3 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.d.ts +58 -10
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +17 -0
  73. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +23 -7
  74. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useBookingBarFacts.d.ts +12 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationRecoveryRequest.d.ts +3 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +4 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +4 -11
  78. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +1563 -31
  79. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +2 -12
  80. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/usePaymentStatusRecovery.d.ts +147 -4
  81. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +50 -2
  82. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/waitlistClaimRestoration.d.ts +6 -5
  83. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/wizardSteps.d.ts +85 -15
  84. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +53 -8
  85. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/MonthLookView.d.ts +10 -3
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +16 -0
  87. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptionCopy.d.ts +5 -1
  88. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +37 -1
  89. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +9 -2
  90. package/dist/_dts/blocks/src/system/runtime/shared/components/PaymentChoiceRows.d.ts +28 -0
  91. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +6 -8
  92. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -2
  93. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  94. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +9 -12
  95. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.state.d.ts +15 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/utils/themePortalRoot.d.ts +10 -15
  97. package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
  98. package/dist/_dts/blocks/src/system/transforms/registry/links.d.ts +3 -1
  99. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +2 -0
  100. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +6 -0
  101. package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +14 -14
  102. package/dist/_dts/commerce/src/purchase/confirmationPayment.d.ts +65 -0
  103. package/dist/_dts/commerce/src/purchase/confirmationPaymentSchema.d.ts +66 -0
  104. package/dist/_dts/commerce/src/purchase/index.d.ts +2 -0
  105. package/dist/_dts/commerce/src/purchase/orderPaymentState.d.ts +8 -0
  106. package/dist/_dts/content-model/src/templates/defaults.d.ts +2 -2
  107. package/dist/_dts/core/src/appointment-booking-terms.d.ts +20 -0
  108. package/dist/_dts/core/src/booking-payment-schemas.d.ts +70 -0
  109. package/dist/_dts/core/src/branded.d.ts +0 -2
  110. package/dist/_dts/core/src/demo-claim-access.d.ts +1 -1
  111. package/dist/_dts/core/src/demo-claim-readiness.d.ts +18 -0
  112. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +1 -1
  113. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +1 -1
  114. package/dist/_dts/core/src/index.d.ts +4 -0
  115. package/dist/_dts/core/src/mailing-list-targeting-availability.d.ts +68 -0
  116. package/dist/_dts/core/src/mailing-list-targeting.d.ts +2 -0
  117. package/dist/_dts/core/src/ticket-quantity.d.ts +13 -0
  118. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +51 -32
  119. package/dist/_dts/editor/src/chrome/chromeLayers.d.ts +7 -0
  120. package/dist/_dts/editor/src/index.d.ts +1 -0
  121. package/dist/_dts/editor-blocks/src/widgets/link/LinkAddressInput.d.ts +8 -0
  122. package/dist/_dts/editor-blocks/src/widgets/link/LinkContentList.d.ts +12 -0
  123. package/dist/_dts/editor-blocks/src/widgets/link/LinkPicker.d.ts +5 -1
  124. package/dist/_dts/editor-blocks/src/widgets/link/LinkPickerDialog.d.ts +3 -3
  125. package/dist/_dts/editor-blocks/src/widgets/link/LinkSummary.d.ts +8 -2
  126. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +4 -3
  127. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidgetContext.d.ts +2 -1
  128. package/dist/_dts/editor-blocks/src/widgets/link/draft.d.ts +44 -0
  129. package/dist/_dts/editor-blocks/src/widgets/link/presentation.d.ts +13 -0
  130. package/dist/_dts/editor-blocks/src/widgets/link/types.d.ts +14 -0
  131. package/dist/_dts/editor-blocks/src/widgets/link/useRoutableContent.d.ts +2 -0
  132. package/dist/_dts/editor-blocks/src/widgets/link/utils.d.ts +5 -4
  133. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +1 -1
  134. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +13 -8
  135. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -3
  136. package/dist/_dts/media-core/src/index.d.ts +1 -0
  137. package/dist/_dts/media-core/src/storageObjectKey.d.ts +12 -0
  138. package/dist/_dts/media-react/src/hooks/useSupabaseMediaUploader.d.ts +1 -1
  139. package/dist/_dts/media-react/src/internal/supabaseResumableUpload.d.ts +13 -0
  140. package/dist/_dts/preview-next/src/client/preview/previewModeRootAttribute.d.ts +11 -0
  141. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +0 -1
  142. package/dist/_dts/sdk/src/rendering/image.d.ts +10 -0
  143. package/dist/_dts/sdk/src/rendering/index.d.ts +3 -1
  144. package/dist/_dts/sdk/src/rendering/link.d.ts +9 -0
  145. package/dist/_dts/sdk/src/rendering/overrides.d.ts +1 -0
  146. package/dist/_dts/sdk/src/version.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/blocks/opaquePanels.d.ts +3 -3
  148. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  149. package/dist/client/BookingMailingListNote-CBuMKN0w.mjs +386 -0
  150. package/dist/client/{CardListItem-ZDLYh6dL.mjs → CardListItem-Dc9XTXhB.mjs} +3 -4
  151. package/dist/client/CheckIcon-CpyXr-Kg.mjs +35 -0
  152. package/dist/client/{CheckboxChoice-M-3HycLw.mjs → CheckboxChoice-CIqx_o0E.mjs} +1 -1
  153. package/dist/client/{DemoBookingPortalAccess-BMtvPTWE.mjs → DemoBookingPortalAccess-D3VQ_kLj.mjs} +85 -85
  154. package/dist/client/{EventCombined.client-DUm_DOxW.mjs → EventCombined.client-BHGEKise.mjs} +8 -9
  155. package/dist/client/{EventEmbeddedCheckoutStep-DsNNzgRm.mjs → EventEmbeddedCheckoutStep-Bo1Cm23R.mjs} +11 -10
  156. package/dist/client/{EventListing.client-DjNYGUVm.mjs → EventListing.client-D5OQgVPr.mjs} +2 -2
  157. package/dist/client/{LeafletStaticMap-DuFiOHq_.mjs → LeafletStaticMap-CLL5cWrr.mjs} +1 -1
  158. package/dist/client/{ModalShell-CqkBvBIC.mjs → ModalShell-BXzucfR6.mjs} +83 -12
  159. package/dist/client/{RichText-LjPCUGGi.mjs → RichText-BoDmnopf.mjs} +6 -3
  160. package/dist/client/{ThemedButton-DZKjtaDD.mjs → ThemedButton-Ciltp0IK.mjs} +2 -2
  161. package/dist/client/{accordion-Qe--SILD.mjs → accordion-DOkRS64-.mjs} +1 -1
  162. package/dist/client/aspectTransforms-D-TnDdq4.mjs +93 -0
  163. package/dist/client/{bookingForm-3BCl4g_f.mjs → bookingForm-wlMVwo9h.mjs} +289 -149
  164. package/dist/client/bookings.mjs +12212 -10832
  165. package/dist/client/{carousel-h2YjKOS2.mjs → carousel-CGWk-Z0u.mjs} +2 -2
  166. package/dist/client/{carousel.client-BLrd4hmY.mjs → carousel.client-kX5mN1Eg.mjs} +46 -41
  167. package/dist/client/{cart-5NeiigVd.mjs → cart-OBBPlaH4.mjs} +3 -3
  168. package/dist/client/{checkout-G4UWjOEw.mjs → checkout-Bmw2WjQX.mjs} +3 -3
  169. package/dist/client/client.mjs +9541 -6039
  170. package/dist/client/{colorStyles-DTunOThj.mjs → colorStyles-ECDNPE_P.mjs} +23 -86
  171. package/dist/client/{context-GK4-AVAh.mjs → context-BI77UFAn.mjs} +275 -10
  172. package/dist/client/{eventCalendar-Prw3Yo_L.mjs → eventCalendar-qkej2Edn.mjs} +19 -17
  173. package/dist/client/{eventCombined-BUugi6__.mjs → eventCombined-DApKHvat.mjs} +4 -4
  174. package/dist/client/{eventDetails-CBHUda-R.mjs → eventDetails-BQyUDPH0.mjs} +3 -4
  175. package/dist/client/{eventListing-CQeG45Dg.mjs → eventListing-CeAnshlZ.mjs} +4 -4
  176. package/dist/client/{eventRegistration-Dif3p3oJ.mjs → eventRegistration-C3A3NyBO.mjs} +2209 -2144
  177. package/dist/client/{form-Cf0WMtfG.mjs → form-DW8rU7jO.mjs} +6 -6
  178. package/dist/client/{headerSection-Bqdr3JWp.mjs → headerSection-CkIhsoNm.mjs} +9 -9
  179. package/dist/client/hooks.mjs +1289 -380
  180. package/dist/client/{locationMap-BVvPou4O.mjs → locationMap-D4O8wbli.mjs} +4 -4
  181. package/dist/client/{media-47fcnhzD.mjs → media-C5K_0xPd.mjs} +2 -2
  182. package/dist/client/{newsletterForm-Cx-1dnic.mjs → newsletterForm-B7IxSPuz.mjs} +5 -5
  183. package/dist/client/{productDetail-DaUMaJYk.mjs → productDetail-Bqxpwy5N.mjs} +3 -3
  184. package/dist/client/{productList-BKQlWEKE.mjs → productList-u9Lz8V15.mjs} +3 -3
  185. package/dist/client/{propsDecoder-DO5iXphQ.mjs → propsDecoder-Bf1jucUp.mjs} +17333 -14489
  186. package/dist/client/rendering/client.mjs +58216 -55133
  187. package/dist/client/rendering/islands.mjs +19 -19
  188. package/dist/client/rendering.mjs +9099 -5636
  189. package/dist/client/{routeIslandApiConfig-BNm0Z3-g.mjs → routeIslandApiConfig-BgP-aPMl.mjs} +1 -1
  190. package/dist/client/{shop-D7ytcFBC.mjs → shop-B_eykR-_.mjs} +16 -14
  191. package/dist/client/{shop-commerce-D68-hHy2.mjs → shop-commerce-CT0APkFV.mjs} +9 -9
  192. package/dist/client/{shop-commerce-store-Cu7X2lyu.mjs → shop-commerce-store-DcvZxdEK.mjs} +1 -1
  193. package/dist/client/{shopShared-D12rxE69.mjs → shopShared-BVJOiUiJ.mjs} +5 -5
  194. package/dist/client/themePortalRoot-DS92SRVZ.mjs +47 -0
  195. package/dist/client/{TerminalPanel-DOTSUCO0.mjs → useDiscountCodeUi-DPmYDunz.mjs} +60 -77
  196. package/dist/client/{useEventPagination-jgKa67KV.mjs → useEventPagination-8-U55vH5.mjs} +7 -8
  197. package/dist/preview-next/before-render.mjs +7 -0
  198. package/dist/preview-next/client/runtime.mjs +3 -3
  199. package/dist/preview-next/keepAlive.mjs +7 -0
  200. package/dist/preview-next/middleware.mjs +7 -0
  201. package/dist/{sdk-runtime-4cCWO_3i.mjs → sdk-runtime-C5jPdSrk.mjs} +1 -1
  202. package/dist/server/components.mjs +3138 -1373
  203. package/dist/server/config-validation.mjs +1395 -486
  204. package/dist/server/config.mjs +1395 -486
  205. package/dist/server/data.mjs +1289 -380
  206. package/dist/server/index.mjs +8 -1
  207. package/dist/server/next.mjs +3362 -1538
  208. package/dist/server/page-converter.mjs +1357 -453
  209. package/dist/server/prebuild.mjs +1 -1
  210. package/dist/server/rendering/server.mjs +2335 -1044
  211. package/dist/server/rendering.mjs +3152 -1370
  212. package/dist/server/routing.mjs +1437 -490
  213. package/dist/server/server.mjs +1297 -381
  214. package/dist/server/theme-bridge.mjs +1135 -795
  215. package/dist/{spinner-tSdG9YvG.mjs → spinner-B-ab2rJp.mjs} +1 -1
  216. package/dist/styles/index.css +1088 -721
  217. package/package.json +1 -1
  218. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/OrderSummary.d.ts +0 -15
  219. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +0 -22
  220. package/dist/_dts/blocks/src/system/runtime/shared/components/SelectableOptionCard.d.ts +0 -30
  221. package/dist/client/BookingMailingListNote-DlDSs5Vm.mjs +0 -567
  222. package/dist/client/pricing-CMD0kADd.mjs +0 -314
  223. package/dist/client/result-DRW7JWXz.mjs +0 -30
  224. package/dist/client/scrollToBlock-C86BYkyV.mjs +0 -17
  225. package/dist/client/themePortalRoot-AGs4cE7t.mjs +0 -30
  226. package/dist/spinner-BL3kW9Uh.mjs +0 -803
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The in-page booking card and the fixed booking bar (issue 1581).
3
+ *
4
+ * No hooks and no client-only imports: the server renders the card at its
5
+ * final size before hydration, and the client renders the same markup.
6
+ */
7
+ import React from 'react';
8
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
9
+ import { type BookingEntry } from './bookingEntry';
10
+ export type BookingEntryHandlers = Readonly<{
11
+ /** Opens the panel, or restarts after a finished booking. */
12
+ onAction?: () => void;
13
+ /** Opens the panel with this date already chosen. */
14
+ onChooseDate?: (selectionId: string) => void;
15
+ }>;
16
+ export declare function BookingEntryCard(props: Readonly<{
17
+ entry: BookingEntry;
18
+ buttonVariant: ThemeButtonVariantId;
19
+ }> & BookingEntryHandlers): React.JSX.Element | null;
20
+ /** One fact in the bar: the price stands out a little; everything else is plain. */
21
+ export type BookingBarFact = Readonly<{
22
+ text: string;
23
+ tone: 'price' | 'plain';
24
+ }>;
25
+ export type BookingBarCopy = Readonly<{
26
+ title: string;
27
+ /** Shown apart (a thin divider on desktop, a muted second line on phones). */
28
+ facts: readonly BookingBarFact[];
29
+ /** The facts as one plain line, "a · b · c". */
30
+ summary: string;
31
+ }>;
32
+ /** What the bar says for every booking state: a title or status, then its facts. */
33
+ export declare function bookingBarCopy(entry: BookingEntry): BookingBarCopy;
34
+ /** The bar's button label: short enough for a phone's bar. */
35
+ export declare function bookingBarAction(entry: BookingEntry): string;
36
+ export declare function BookingEntryBar(props: Readonly<{
37
+ entry: BookingEntry;
38
+ buttonVariant: ThemeButtonVariantId;
39
+ onAction: () => void;
40
+ state: 'shown' | 'hidden';
41
+ barRef?: React.Ref<HTMLDivElement>;
42
+ }>): React.JSX.Element;
@@ -1,10 +1,13 @@
1
1
  import type { EventEmbeddedCheckout } from '../../api/types';
2
2
  import { loadBrowserStripe } from '../../shared/stripe/browserStripe';
3
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
3
4
  type Props = Readonly<{
4
5
  checkout: EventEmbeddedCheckout;
5
6
  onComplete: () => void;
6
7
  onRetry: () => void;
7
- onBack: () => void;
8
+ /** Headless arrangements put Back above the form; the wizard keeps it in its footer. */
9
+ onBack?: () => void;
10
+ buttonVariant: ThemeButtonVariantId;
8
11
  }>;
9
12
  export default function EventEmbeddedCheckoutStep(props: Props): import("react").JSX.Element;
10
13
  export declare function EventEmbeddedCheckoutStepWithDeps(props: Props & Readonly<{
@@ -1,18 +1,28 @@
1
+ import type { RegistrationDisplay } from './registrationDisplay';
1
2
  import React from 'react';
2
- import type { RegistrationTicketType } from './types';
3
3
  import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
4
- export declare function EventRegistrationBookingLayer(props: Readonly<{
4
+ import { type BookingEntry } from './bookingEntry';
5
+ type LayerProps = Readonly<{
6
+ display: RegistrationDisplay;
5
7
  registrationRootClassName: string;
6
8
  portalRoot: HTMLElement | null;
7
9
  overlayOpen: boolean;
8
- isWizardStep: boolean;
9
- priceLabel: string | null;
10
- availabilityLabel: string | null;
11
- ticketTypes: readonly RegistrationTicketType[];
12
- ticketCurrency: string | null;
10
+ /** What the card says: never the in-progress state. */
11
+ cardEntry: BookingEntry;
12
+ /** What the bar says, including progress while a booking is underway. */
13
+ barEntry: BookingEntry;
13
14
  buttonVariant: ThemeButtonVariantId;
14
- formatTicketPrice: (ticketType: RegistrationTicketType) => string;
15
15
  onOpen: () => void;
16
+ onChooseDate: (selectionId: string) => void;
17
+ onBookAnother: () => void;
16
18
  onClose: () => void;
17
19
  overlaySurface: React.ReactNode;
18
- }>): React.JSX.Element;
20
+ /** The step progress, pinned in the panel header under the title (issue 1581). */
21
+ overlayProgress?: React.ReactNode;
22
+ }>;
23
+ /**
24
+ * Panel mode on CMS pages: the booking card in the page, the booking bar fixed
25
+ * to the bottom of the screen, and the wizard in the panel (issue 1581).
26
+ */
27
+ export declare function EventRegistrationBookingLayer(props: LayerProps): React.JSX.Element;
28
+ export {};
@@ -1,13 +1,15 @@
1
1
  import type { HeadlessEventRegistrationFlow } from './event-registration.headless.contract';
2
2
  import type { EventPaymentState } from './types';
3
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
3
4
  type PaymentMountProps = Readonly<{
4
5
  state: EventPaymentState;
5
6
  onComplete: () => void;
6
7
  onRetry: () => void;
7
- onBack: () => Promise<void>;
8
+ onBack?: () => Promise<void>;
9
+ buttonVariant: ThemeButtonVariantId;
8
10
  }>;
9
11
  /** The one Stripe mount, shared by the standard wizard and headless arrangements. */
10
- export declare function EventPaymentMount({ state, onComplete, onRetry, onBack }: PaymentMountProps): import("react").JSX.Element | null;
12
+ export declare function EventPaymentMount({ state, onComplete, onRetry, onBack, buttonVariant }: PaymentMountProps): import("react").JSX.Element | null;
11
13
  /** Mount the active checkout from the same headless registration controller. */
12
14
  export declare function EventRegistrationPayment({ flow }: Readonly<{
13
15
  flow: HeadlessEventRegistrationFlow;
@@ -1,25 +1,40 @@
1
+ import type { RegistrationDisplay } from './registrationDisplay';
2
+ import type { ResolvedRegistrationPresentation } from './finishedBooking';
1
3
  import type { UseEventRegistrationWizardResult } from './useEventRegistrationWizard';
2
4
  import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
5
+ import { type RegistrationProgress, type RegistrationStepLabelContext } from './wizardSteps';
3
6
  export type EventPortalAuthCopy = Readonly<{
4
7
  title: string;
5
- description: string;
8
+ description?: string;
6
9
  buttonText: string;
10
+ /** Words after the link, so it reads as one sentence. */
11
+ afterButton?: string;
12
+ /** Before the step's content when it blocks the booking; after it when it's an option. */
13
+ placement: 'before' | 'after';
7
14
  }>;
8
- export declare function EventRegistrationSurface(props: Readonly<{
9
- variant: 'inline' | 'overlay';
15
+ type EventRegistrationSurfaceProps = Readonly<{
16
+ variant: 'inPlace' | 'overlay';
10
17
  wizard: UseEventRegistrationWizardResult;
11
- isWizardStep: boolean;
12
- currentStepNumber: number;
13
- totalSteps: number;
14
- stepLabels: string[];
18
+ /** The wizard's presentation with any finished booking resolved. */
19
+ presentation: ResolvedRegistrationPresentation;
20
+ stepLabelContext: RegistrationStepLabelContext;
15
21
  showPortalAuthPrompt: boolean;
16
22
  portalAuthCopy: EventPortalAuthCopy;
17
- showVenue: boolean;
18
- showCapacity: boolean;
23
+ display: RegistrationDisplay;
19
24
  showSpamProtection: boolean;
20
25
  buttonText: string;
21
26
  buttonVariant: ThemeButtonVariantId;
22
27
  supportEmail?: string;
23
28
  successMessage?: string;
24
29
  demoEmailSuppressed?: boolean;
30
+ /** The panel's Done: closes it. Absent where the surface has nothing to close. */
31
+ onDone?: () => void;
32
+ }>;
33
+ /** The compact progress: in the step column in place, in the panel's pinned header on overlays. */
34
+ export declare function EventRegistrationProgress(props: Readonly<{
35
+ progress: RegistrationProgress;
36
+ stepLabelContext: RegistrationStepLabelContext;
25
37
  }>): import("react").JSX.Element;
38
+ /** Renders either the step layout or one whole-panel screen, never both. */
39
+ export declare function EventRegistrationSurface(props: EventRegistrationSurfaceProps): import("react").JSX.Element;
40
+ export {};
@@ -1,8 +1,10 @@
1
+ import type { RegistrationDisplay } from './registrationDisplay';
1
2
  import React from 'react';
3
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
2
4
  import type { UseEventRegistrationWizardResult } from './useEventRegistrationWizard';
3
5
  export declare function EventRegistrationWizardContent(props: {
4
6
  wizard: UseEventRegistrationWizardResult;
5
- showVenue: boolean;
6
- showCapacity: boolean;
7
+ display: RegistrationDisplay;
7
8
  showSpamProtection?: boolean;
9
+ buttonVariant: ThemeButtonVariantId;
8
10
  }): React.JSX.Element | null;
@@ -1,14 +1,15 @@
1
+ import type { RegistrationDisplay } from './registrationDisplay';
1
2
  import React from 'react';
2
3
  import type { RegistrationEvent } from './types';
3
4
  type EventSelectionStepProps = {
4
5
  events: RegistrationEvent[];
5
6
  selectedEvent: RegistrationEvent | null;
7
+ /** Chooses an event and moves on (unrelated events). */
6
8
  onSelect: (event: RegistrationEvent) => void;
7
- showVenue?: boolean;
8
- showCapacity?: boolean;
9
+ /** Marks a date as chosen without moving on; Continue moves on (dates). */
10
+ onChoose: (event: RegistrationEvent) => void;
11
+ display: RegistrationDisplay;
9
12
  };
10
- type EventSelectionMode = 'event' | 'date';
11
- export declare function getEventSelectionMode(events: readonly RegistrationEvent[]): EventSelectionMode;
12
13
  /**
13
14
  * Event Selection Step
14
15
  *
@@ -15,7 +15,7 @@ type GuestDetailsSectionProps = {
15
15
  * Guest Details Section
16
16
  *
17
17
  * Card-based layout for collecting additional attendee details.
18
- * Uses the same visual patterns as the main form (er-input, er-field, er-label, er-error).
18
+ * Uses the same fields as the main form: the theme's form-label and form-input.
19
19
  */
20
20
  export declare const GuestDetailsSection: React.FC<GuestDetailsSectionProps>;
21
21
  export {};
@@ -1,3 +1,4 @@
1
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
1
2
  import type { PaymentStatusRecoveryState } from './types';
2
3
  type PaymentStatusStepProps = Readonly<{
3
4
  state: PaymentStatusRecoveryState;
@@ -5,6 +6,7 @@ type PaymentStatusStepProps = Readonly<{
5
6
  onContinuePayment: () => void;
6
7
  onReturnToPayment: () => void;
7
8
  onReturnToBooking: () => void;
9
+ buttonVariant: ThemeButtonVariantId;
8
10
  }>;
9
11
  export declare function PaymentStatusStep(props: PaymentStatusStepProps): import("react").JSX.Element;
10
12
  export {};
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { EligibilityData } from './types';
3
+ /**
4
+ * Passes and memberships cover one person, so with more than one place they
5
+ * are greyed out; this says why, in the open rather than in a hover tooltip.
6
+ */
7
+ export declare function SingleTicketEntitlementNote(props: Readonly<{
8
+ ticketsCount: number;
9
+ eligibility: EligibilityData | null;
10
+ onBookOnePlace: () => void;
11
+ }>): React.JSX.Element | null;
@@ -1,6 +1,7 @@
1
1
  import type { BookingMailingListNote as BookingSignupNote } from '../../../../../../core/src/index';
2
2
  import React from 'react';
3
3
  import type { BookingSuccessCopy } from '../booking-form.state';
4
+ import { type ConfirmationPaymentPresentation, type ConfirmationSummaryRow } from './finishedBooking';
4
5
  type SuccessStepProps = {
5
6
  title?: string;
6
7
  copy: BookingSuccessCopy;
@@ -9,6 +10,9 @@ type SuccessStepProps = {
9
10
  context?: 'booking' | 'waitlist';
10
11
  demoEmailSuppressed?: boolean;
11
12
  customerEmail: string | null;
13
+ /** When, where, places and payment: only facts from the booking outcome. */
14
+ summary?: readonly ConfirmationSummaryRow[];
15
+ payment: ConfirmationPaymentPresentation;
12
16
  };
13
17
  /**
14
18
  * Success Step
@@ -1,3 +1,4 @@
1
+ import { type RegistrationDisplay } from './registrationDisplay';
1
2
  import React from 'react';
2
3
  import type { EventTicketSelectionLine, OccurrenceContext, RegistrationAttendanceMode, RegistrationEvent } from './types';
3
4
  import { getVisibleTicketTypes } from './utils';
@@ -6,12 +7,16 @@ export type TicketSelectionBookingUnit = Readonly<{
6
7
  includedSessionCount?: number;
7
8
  }>;
8
9
  type TicketSelectionStepProps = {
10
+ display: RegistrationDisplay;
9
11
  event: RegistrationEvent | null;
10
12
  occurrenceContext?: OccurrenceContext | null;
11
13
  selectedAttendanceMode?: RegistrationAttendanceMode | null;
12
14
  onAttendanceModeChange?: (attendanceMode: RegistrationAttendanceMode) => void;
13
15
  ticketsCount: number;
14
16
  maxTickets: number;
17
+ /** The most places a single-price booking can ask for: `maxTickets`
18
+ * narrowed by settled availability (`placeCountCeiling`). Defaults to it. */
19
+ placesCeiling?: number;
15
20
  visibleTicketTypes?: ReturnType<typeof getVisibleTicketTypes>;
16
21
  ticketSelections?: readonly EventTicketSelectionLine[];
17
22
  onTicketSelectionsChange?: (lines: readonly EventTicketSelectionLine[]) => void;
@@ -1,9 +1,11 @@
1
1
  import React from 'react';
2
+ import type { ThemeButtonVariantId } from '../../../../../../theme-core/src/buttons/index';
2
3
  type VerifyingTimeoutStepProps = {
3
4
  onCheckAgain?: () => void;
4
5
  supportEmail?: string;
5
6
  title?: string;
6
7
  message?: string;
8
+ buttonVariant?: ThemeButtonVariantId;
7
9
  };
8
10
  /**
9
11
  * Verifying Timeout Step
@@ -0,0 +1,31 @@
1
+ import type { RegistrationDisplay } from './registrationDisplay';
2
+ /**
3
+ * The booking card the server renders on CMS pages (issue 1581), and the
4
+ * offering noun it resolves for the wizard. Kept beside the island contract
5
+ * so the server and the client agree on one card.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { PublicEvent } from '../../../blocks/events/shared/types';
9
+ import type { EventRegistrationDisplay, EventRegistrationSourceProps } from '../event-registration.interactive';
10
+ import { type IdleBookingEntry } from './bookingEntry';
11
+ import { type OfferingNoun } from './offeringNoun';
12
+ /**
13
+ * Where the booking panel lives. Pages built around booking (the system
14
+ * event page's sticky column, the hosted booking page) show it in place;
15
+ * a block an editor placed on a page shows the card, the bar and the
16
+ * overlay panel.
17
+ */
18
+ export type BookingHost = 'overlay' | 'inPlace';
19
+ export declare const bookingHostSchema: z.ZodEnum<{
20
+ overlay: "overlay";
21
+ inPlace: "inPlace";
22
+ }>;
23
+ export type { IdleBookingEntry };
24
+ export declare const idleBookingEntrySchema: z.ZodType<IdleBookingEntry>;
25
+ export declare function toScopedEventRegistrationEvents(scopedSourceEvents: readonly PublicEvent[]): import("./types").RegistrationEvent[];
26
+ /** What the site calls the offering this block books, from its preset rows. */
27
+ export declare function resolveOfferingNoun(source: EventRegistrationSourceProps, scopedSourceEvents: readonly PublicEvent[]): OfferingNoun;
28
+ /** The server's card on CMS pages, or null where the shell still applies. */
29
+ export declare function bookingCardDisplay(source: EventRegistrationSourceProps, scopedSourceEvents: readonly PublicEvent[], display: RegistrationDisplay): Extract<EventRegistrationDisplay, {
30
+ state: 'booking-card';
31
+ }> | null;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * What the in-page booking card and the fixed booking bar say (issue 1581).
3
+ *
4
+ * One pure decision for both, so they never disagree. It is computed on the
5
+ * server from the public events (idle states only) and on the client from the
6
+ * wizard, and it never reads scroll or viewport facts: those decide only
7
+ * whether the bar is visible ({@link bookingBarVisible}).
8
+ */
9
+ import type { PublicEventAttendanceMode } from '../../../blocks/events/shared/types';
10
+ import { type RegistrationDisplay } from './registrationDisplay';
11
+ import type { OfferingNoun } from './offeringNoun';
12
+ import type { FinishedBooking, FinishedBookingEntry, ResolvedRegistrationPresentation } from './finishedBooking';
13
+ import type { RegistrationEvent, RegistrationStep } from './types';
14
+ import { type RegistrationRouteStep } from './wizardSteps';
15
+ /** How many dates the card and bar show before "+ N more". */
16
+ export declare const BOOKING_ENTRY_DATE_LIMIT = 4;
17
+ export type BookingEntryDateTile = Readonly<{
18
+ month: string;
19
+ day: string;
20
+ }>;
21
+ export type BookingEntryDate = Readonly<{
22
+ selectionId: string;
23
+ label: string;
24
+ /** "3 left" or "Full"; null when capacity is hidden or plentiful. */
25
+ places: string | null;
26
+ full: boolean;
27
+ }>;
28
+ export type BookingEntryProgress = Readonly<{
29
+ label: string;
30
+ current: number;
31
+ total: number;
32
+ }>;
33
+ export type BookingEntry = Readonly<{
34
+ kind: 'single';
35
+ title: string;
36
+ /** Long form for the card and panel header: "Mon 5 Oct · 7:00pm – 8:15pm". */
37
+ when: string | null;
38
+ /** Short form for the bar: "Mon 5 Oct, 7:00pm". */
39
+ shortWhen: string | null;
40
+ venue: string | null;
41
+ price: string | null;
42
+ places: string | null;
43
+ tile: BookingEntryDateTile | null;
44
+ action: string;
45
+ }> | Readonly<{
46
+ kind: 'chooseDate';
47
+ title: string;
48
+ schedule: string;
49
+ venue: string | null;
50
+ price: string | null;
51
+ nextDate: string | null;
52
+ dateCount: number;
53
+ dates: readonly BookingEntryDate[];
54
+ moreCount: number;
55
+ action: string;
56
+ }> | Readonly<{
57
+ kind: 'chooseEvent';
58
+ title: string;
59
+ count: number;
60
+ noun: string;
61
+ action: string;
62
+ }> | Readonly<{
63
+ kind: 'inProgress';
64
+ title: string;
65
+ progress: BookingEntryProgress | null;
66
+ action: string;
67
+ }> | FinishedBookingEntry & Readonly<{
68
+ action: string;
69
+ }>;
70
+ /** The card's idle content: what can be said before a booking starts. */
71
+ export type IdleBookingEntry = Extract<BookingEntry, {
72
+ kind: 'single' | 'chooseDate' | 'chooseEvent';
73
+ }>;
74
+ export type BookingEntryInput = Readonly<{
75
+ /** The events this block books, already scoped and adapted. */
76
+ events: readonly RegistrationEvent[];
77
+ /** The event the page or the visitor has chosen, if any. */
78
+ event: RegistrationEvent | null;
79
+ display: RegistrationDisplay;
80
+ /** The block's button text; falls back to "Book your place". */
81
+ buttonText: string | null | undefined;
82
+ noun: OfferingNoun;
83
+ attendanceMode: PublicEventAttendanceMode | null;
84
+ /** True once the visitor has moved past the first step, until it finishes. */
85
+ underway: boolean;
86
+ /** Where they are, when the panel is on a numbered step. */
87
+ progress: BookingEntryProgress | null;
88
+ /** Present once the booking finished, resolved once by resolveFinishedPresentation. */
89
+ finished: FinishedBooking | null;
90
+ }>;
91
+ export declare const DEFAULT_BOOKING_BUTTON_TEXT = "Book your place";
92
+ /** Browse the page's dates on close while keeping the draft's resume action. */
93
+ export declare function bookingCardEntry(input: BookingEntryInput & Readonly<{
94
+ pageEvent: RegistrationEvent | null;
95
+ panelOpen: boolean;
96
+ step: RegistrationStep;
97
+ }>): BookingEntry;
98
+ /** "Mon 5 Oct": the compact date the chips and the bar share. */
99
+ export declare function formatBookingShortDate(event: RegistrationEvent): string;
100
+ export type IdleBookingEntryInput = Pick<BookingEntryInput, 'events' | 'event' | 'display' | 'buttonText' | 'noun' | 'attendanceMode'>;
101
+ /** The card before a booking starts; the server renders this too. */
102
+ export declare function idleBookingEntry(input: IdleBookingEntryInput): IdleBookingEntry;
103
+ /** The card and bar's content for the visitor's current position. */
104
+ export declare function bookingEntry(input: BookingEntryInput): BookingEntry;
105
+ /**
106
+ * Where the booking has got to, for the card and bar: underway once the
107
+ * visitor is past the first step or the panel shows a recovery screen, and
108
+ * finished once it is confirmed or waitlisted.
109
+ */
110
+ export declare function bookingEntryProgress(input: Readonly<{
111
+ presentation: ResolvedRegistrationPresentation;
112
+ stepLabel: (step: RegistrationRouteStep) => string;
113
+ }>): Pick<BookingEntryInput, 'underway' | 'progress' | 'finished'>;
114
+ export type BookingPanelHeading = Readonly<{
115
+ title: string;
116
+ subtitle: string | null;
117
+ }>;
118
+ /** The panel header: the event's name, and when and where in one line. */
119
+ export declare function bookingPanelHeading(entry: BookingEntry, display: RegistrationDisplay): BookingPanelHeading;
120
+ export type BookingBarFacts = Readonly<{
121
+ panelOpen: boolean;
122
+ /** The card's edges relative to the viewport; null while it is known to be off screen. */
123
+ card: Readonly<{
124
+ top: number;
125
+ bottom: number;
126
+ }> | null;
127
+ viewportHeight: number;
128
+ barHeight: number;
129
+ /** With reduced motion the bar fades out as soon as the card arrives, without the push. */
130
+ reducedMotion: boolean;
131
+ }>;
132
+ export type BookingBarPlacement = Readonly<{
133
+ state: 'shown' | 'hidden';
134
+ /** How far the card has pushed the bar down, in px (0 when it isn't pushing). */
135
+ push: number;
136
+ }>;
137
+ /**
138
+ * How far a card rising from the bottom of the viewport has pushed the bar
139
+ * off: none until its top edge reaches the bottom, then in step with it,
140
+ * until the bar has gone entirely.
141
+ */
142
+ export declare function barPush(input: Readonly<{
143
+ cardTop: number;
144
+ viewportHeight: number;
145
+ barHeight: number;
146
+ }>): number;
147
+ /**
148
+ * Where the bar sits (issue 1581). It shows whenever the card is off screen,
149
+ * from the first screen on, and stays out of the way while the panel is open.
150
+ * As the card comes up from the bottom of the screen it pushes the bar down
151
+ * in step, as if handing over to it, and the bar stays away while the card is
152
+ * on screen.
153
+ */
154
+ export declare function bookingBarPlacement(facts: BookingBarFacts): BookingBarPlacement;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Keyboard focus for the booking card, bar and panel (issue 1581). The bar
3
+ * turns inert while it is out of the way, so focus that would land on it, or
4
+ * is on it when it goes, needs somewhere reachable to go instead.
5
+ */
6
+ /** Whether focus can land on the element now: in the page, outside any inert or hidden subtree. */
7
+ export declare function isReachable(element: HTMLElement | null): element is HTMLElement;
8
+ /**
9
+ * Focuses the preferred destination once it is reachable, waiting a few frames
10
+ * for it; if it never becomes reachable, the fallback takes focus instead.
11
+ */
12
+ export declare function focusWhenReachable(preferred: () => HTMLElement | null, fallback: () => HTMLElement | null, frame?: number): void;
@@ -6,7 +6,7 @@ import type { EligibilityData, EventTicketSelectionLine, FormData, Guest, GuestE
6
6
  import type { SelectableEventTicketType } from './utils';
7
7
  import type { BlockButtonRole } from '../../../constants/buttonRoles';
8
8
  import type { PortalAuthState, PortalProfile } from './hooks';
9
- import type { UseWaitlistClaimResult } from '../../shared/useWaitlistClaim';
9
+ import type { WaitlistInvitation } from './registrationDraft.state';
10
10
  import type { UseEventRegistrationWizardResult } from './useEventRegistrationWizard';
11
11
  import type { EventRegistrationSubmitResult } from './useEventRegistrationSubmit';
12
12
  export declare const DEFAULT_EVENT_REGISTRATION_MAX_TICKETS = 5;
@@ -247,7 +247,7 @@ export type HeadlessEventRegistrationFlow = Readonly<{
247
247
  state: EventRegistrationLoadState<UseEventRegistrationWizardResult['existingRegistration']>;
248
248
  registration: UseEventRegistrationWizardResult['existingRegistration'];
249
249
  }>;
250
- waitlistClaim: UseWaitlistClaimResult;
250
+ waitlistClaim: WaitlistInvitation;
251
251
  spamProtection: EventRegistrationSpamProtectionModel;
252
252
  terminal: EventRegistrationTerminalModel;
253
253
  actions: EventRegistrationFlowActions;
@@ -10,8 +10,8 @@ export declare function resolveEventRegistrationSubmitPlan(input: Readonly<{
10
10
  eventRequiresPayment: boolean;
11
11
  canJoinWaitlist?: boolean | null;
12
12
  }>): EventRegistrationSubmitPlan;
13
- export declare function resolveHeadlessEventRegistrationStatus(wizard: Pick<UseEventRegistrationWizardResult, 'step' | 'registrationResult' | 'errorMessage'> & Partial<Pick<UseEventRegistrationWizardResult, 'errorAction' | 'paymentStatusRecovery'>>): EventRegistrationFlowStatus;
14
- type RegistrationViewInput = Readonly<Pick<UseEventRegistrationWizardResult, 'step' | 'scopedEvents' | 'occurrenceContext' | 'registrationResult' | 'errorMessage' | 'paymentStatusRecovery'> & {
13
+ export declare function resolveHeadlessEventRegistrationStatus(wizard: Pick<UseEventRegistrationWizardResult, 'flow' | 'errorMessage'> & Partial<Pick<UseEventRegistrationWizardResult, 'errorAction' | 'paymentStatusRecovery'>>): EventRegistrationFlowStatus;
14
+ type RegistrationViewInput = Readonly<Pick<UseEventRegistrationWizardResult, 'flow' | 'scopedEvents' | 'occurrenceContext' | 'errorMessage' | 'paymentStatusRecovery'> & {
15
15
  api: Pick<UseEventRegistrationWizardResult['api'], 'config'>;
16
16
  }>;
17
17
  export declare function resolveHeadlessEventRegistrationView(wizard: RegistrationViewInput): EventRegistrationFlowView;
@@ -40,6 +40,15 @@ export declare const eventRecoveryRequestSchema: z.ZodObject<{
40
40
  readProfile: z.ZodOptional<z.ZodString>;
41
41
  }, z.core.$strip>;
42
42
  export type EventRecoveryRequest = Omit<PublicEventsRequest, 'siteId'>;
43
+ export type EventSourceRecovery<Event = PublicEvent> = Readonly<{
44
+ kind: 'ready';
45
+ events: readonly Event[];
46
+ }> | Readonly<{
47
+ kind: 'loading';
48
+ }> | Readonly<{
49
+ kind: 'exhausted';
50
+ retry: () => void;
51
+ }>;
43
52
  export type EventRegistrationEventSource = Readonly<{
44
53
  kind: 'loaded';
45
54
  events: PublicEvent[];
@@ -0,0 +1,77 @@
1
+ import type { ConfirmationPayment } from '../../../../../../commerce/src/purchase/index';
2
+ import { type RegistrationDisplay } from './registrationDisplay';
3
+ import type { OccurrenceContext, RegistrationEvent, RegistrationResult } from './types';
4
+ import type { RegistrationPresentation } from './wizardSteps';
5
+ export type ConfirmationSummaryRow = Readonly<{
6
+ label: string;
7
+ value: string;
8
+ }>;
9
+ export type ConfirmationPaymentPresentation = Readonly<{
10
+ kind: 'none';
11
+ }> | Readonly<{
12
+ kind: 'settled';
13
+ rows: readonly ConfirmationSummaryRow[];
14
+ }> | Readonly<{
15
+ kind: 'due';
16
+ paidRows: readonly ConfirmationSummaryRow[];
17
+ amountDueRow: ConfirmationSummaryRow;
18
+ instructions: string | null;
19
+ }>;
20
+ export declare function confirmationPaymentRows(payment: ConfirmationPaymentPresentation): readonly ConfirmationSummaryRow[];
21
+ /** The finished card and bar's facts. */
22
+ export type FinishedBookingEntry = Readonly<{
23
+ title: string;
24
+ /** Long form for the card and panel header. */
25
+ when: string | null;
26
+ /** Short form for the bar: "Mon 5 Oct, 7:00pm". */
27
+ shortWhen: string | null;
28
+ }> & (
29
+ /** `places` is null when the booking's details could not be loaded. */
30
+ Readonly<{
31
+ kind: 'booked';
32
+ places: string | null;
33
+ }> | Readonly<{
34
+ kind: 'waitlisted';
35
+ }>);
36
+ export type FinishedBooking = Readonly<{
37
+ entry: FinishedBookingEntry;
38
+ /** The confirmation's rows. */
39
+ summary: readonly ConfirmationSummaryRow[];
40
+ payment: ConfirmationPaymentPresentation;
41
+ }>;
42
+ export type FinishedBookingContext = Readonly<{
43
+ /** The events this block books, already scoped and adapted. */
44
+ events: readonly RegistrationEvent[];
45
+ /** The draft's event. Only a waitlist place, which has no outcome, uses it. */
46
+ draftEvent: RegistrationEvent | null;
47
+ occurrenceContext: OccurrenceContext | null | undefined;
48
+ display: RegistrationDisplay;
49
+ }>;
50
+ type ConfirmedResult = Extract<RegistrationResult, {
51
+ status: 'confirmed';
52
+ }>;
53
+ type WaitlistResult = Extract<RegistrationResult, {
54
+ status: 'waitlist';
55
+ }>;
56
+ /** The panel's presentation with any finished booking already resolved. */
57
+ export type ResolvedRegistrationPresentation = Exclude<RegistrationPresentation, {
58
+ screen: 'confirmed' | 'waitlisted';
59
+ }> | Readonly<{
60
+ layout: 'whole';
61
+ screen: 'confirmed';
62
+ result: ConfirmedResult;
63
+ finished: FinishedBooking;
64
+ }> | Readonly<{
65
+ layout: 'whole';
66
+ screen: 'waitlisted';
67
+ result: WaitlistResult;
68
+ finished: FinishedBooking;
69
+ }>;
70
+ /** Every evidenced debt carries its required amount row, independently of success prose. */
71
+ export declare function presentConfirmationPayment(payment: ConfirmationPayment): ConfirmationPaymentPresentation;
72
+ /**
73
+ * The one place a finished booking is resolved: the confirmation, the
74
+ * finished card and the bar all take this, never the raw result and events.
75
+ */
76
+ export declare function resolveFinishedPresentation(presentation: RegistrationPresentation, context: FinishedBookingContext): ResolvedRegistrationPresentation;
77
+ export {};
@@ -16,5 +16,4 @@ export { VerifyingPaymentStep } from './VerifyingPaymentStep';
16
16
  export { PaymentFailedStep } from './PaymentFailedStep';
17
17
  export { VerifyingTimeoutStep } from './VerifyingTimeoutStep';
18
18
  export { StepIndicator } from './StepIndicator';
19
- export { OrderSummary } from './OrderSummary';
20
19
  export { CheckIcon } from './CheckIcon';
@@ -0,0 +1,12 @@
1
+ import { type BookingOfferingPresetSummary } from '../../../blocks/offerings-preview/model';
2
+ import type { RegistrationEvent } from './types';
3
+ export type OfferingNoun = Readonly<{
4
+ label: string;
5
+ pluralLabel: string;
6
+ }>;
7
+ /**
8
+ * What the site calls this kind of offering, in lower case for use mid-sentence
9
+ * ("Book the course", "3 workshops"). Site preset labels win; the canonical
10
+ * name stands in when the site has none.
11
+ */
12
+ export declare function offeringNounForEvent(event: Pick<RegistrationEvent, 'eventPreset' | 'registrationSubject'> | null, presets: readonly BookingOfferingPresetSummary[] | null | undefined): OfferingNoun;