@riverbankcms/sdk 0.147.0 → 0.148.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 (381) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/{PreviewEditorSidebar-DtpB3_sS.mjs → PreviewEditorSidebar-DvEPG3Z2.mjs} +202 -143
  3. package/dist/{PreviewEditorUI-DxTLgaHo.mjs → PreviewEditorUI-D6eb6fkx.mjs} +68 -60
  4. package/dist/{PreviewQueryProvider-Dd4dxOiU.mjs → PreviewQueryProvider-5znTyJuz.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DMMNCngt.mjs → SdkPreviewModeRuntime-DJ6utQ_R.mjs} +1191 -513
  6. package/dist/{SiteChromeCustomizeContext-DQXZXiqS.mjs → SiteChromeCustomizeContext-CFJYh6vo.mjs} +201798 -197304
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +0 -33
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +0 -3
  9. package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
  10. package/dist/_dts/api/src/accountApi.d.ts +1 -1
  11. package/dist/_dts/api/src/admin.d.ts +22 -22
  12. package/dist/_dts/api/src/aiPatch.d.ts +2 -2
  13. package/dist/_dts/api/src/aiPlayground.d.ts +1 -0
  14. package/dist/_dts/api/src/analytics.d.ts +2 -2
  15. package/dist/_dts/api/src/apiEndpointTypes.d.ts +2 -0
  16. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  17. package/dist/_dts/api/src/auth.d.ts +10 -10
  18. package/dist/_dts/api/src/availability.d.ts +6 -6
  19. package/dist/_dts/api/src/billing.d.ts +42 -15
  20. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +8 -0
  21. package/dist/_dts/api/src/billingEndpointTypes.d.ts +15 -6
  22. package/dist/_dts/api/src/blocks.d.ts +15 -14
  23. package/dist/_dts/api/src/blocksKeys.d.ts +2 -0
  24. package/dist/_dts/api/src/bookingConfig.d.ts +0 -2
  25. package/dist/_dts/api/src/bookingOperations.d.ts +4 -4
  26. package/dist/_dts/api/src/bookingRecords.d.ts +1 -0
  27. package/dist/_dts/api/src/bookings.d.ts +7 -7
  28. package/dist/_dts/api/src/calendar.d.ts +9 -9
  29. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -6
  30. package/dist/_dts/api/src/common/envelope.d.ts +2 -2
  31. package/dist/_dts/api/src/content-editor.d.ts +2 -2
  32. package/dist/_dts/api/src/contentEntries.d.ts +17 -48
  33. package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
  34. package/dist/_dts/api/src/contentTypes.d.ts +11 -11
  35. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
  36. package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
  37. package/dist/_dts/api/src/domains.d.ts +16 -16
  38. package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
  39. package/dist/_dts/api/src/emailSettings.d.ts +4 -4
  40. package/dist/_dts/api/src/endpoints.d.ts +133 -41
  41. package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
  42. package/dist/_dts/api/src/eventManagementContracts.d.ts +25 -0
  43. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +0 -8
  44. package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
  45. package/dist/_dts/api/src/footerSettings.d.ts +6 -6
  46. package/dist/_dts/api/src/index.d.ts +6 -5
  47. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  48. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  49. package/dist/_dts/api/src/navigation.d.ts +5 -5
  50. package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
  51. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
  52. package/dist/_dts/api/src/pages.d.ts +7 -7
  53. package/dist/_dts/api/src/performance.d.ts +1 -1
  54. package/dist/_dts/api/src/public/index.d.ts +1 -1
  55. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +2 -0
  56. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +4 -0
  57. package/dist/_dts/api/src/redirects.d.ts +3 -3
  58. package/dist/_dts/api/src/request.d.ts +10 -1
  59. package/dist/_dts/api/src/resources.d.ts +4 -4
  60. package/dist/_dts/api/src/routes.d.ts +8 -3
  61. package/dist/_dts/api/src/sdk-event-upsert.d.ts +0 -1
  62. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
  63. package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
  64. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
  65. package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
  66. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
  67. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +8 -1
  68. package/dist/_dts/api/src/seo.d.ts +4 -4
  69. package/dist/_dts/api/src/services.d.ts +4 -4
  70. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -8
  71. package/dist/_dts/api/src/siteMembers.d.ts +10 -10
  72. package/dist/_dts/api/src/siteOnboarding.d.ts +14 -0
  73. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
  74. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
  75. package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
  76. package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
  77. package/dist/_dts/billing/src/components/index.d.ts +25 -40
  78. package/dist/_dts/billing/src/membership/index.d.ts +1 -3
  79. package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
  80. package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
  81. package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
  82. package/dist/_dts/billing/src/plans/types.d.ts +5 -15
  83. package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
  84. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
  85. package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
  86. package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
  87. package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
  88. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
  89. package/dist/_dts/blocks/src/client/events.d.ts +3 -0
  90. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  91. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +4 -13
  92. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  93. package/dist/_dts/blocks/src/portal/types.d.ts +0 -2
  94. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
  96. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  97. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +6 -1
  98. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
  99. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -0
  101. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +6 -0
  102. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
  103. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
  104. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
  105. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  106. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  107. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -0
  108. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
  109. package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
  110. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
  111. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +3 -1
  112. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +4 -0
  113. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +9 -0
  114. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
  115. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +15 -1
  116. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
  117. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +1 -0
  118. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +1 -0
  119. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
  120. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  121. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
  122. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -1
  123. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -0
  124. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -5
  125. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -5
  126. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
  127. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
  128. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
  129. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
  130. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +5 -5
  132. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
  133. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
  134. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +13 -0
  135. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
  136. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
  137. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  138. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
  139. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
  140. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  141. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
  142. package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
  143. package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
  144. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
  145. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
  146. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
  147. package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
  148. package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
  149. package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
  150. package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
  151. package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
  152. package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
  153. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
  154. package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
  155. package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
  156. package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
  157. package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
  158. package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
  159. package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
  160. package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
  161. package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
  162. package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
  163. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
  164. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
  165. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
  166. package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
  167. package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
  168. package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
  169. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
  170. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
  171. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
  172. package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
  173. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
  174. package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
  175. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
  176. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
  177. package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
  178. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
  179. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
  180. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
  181. package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
  182. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
  183. package/dist/_dts/content-editor/src/index.d.ts +26 -7
  184. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
  185. package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
  186. package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
  187. package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
  188. package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
  189. package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
  190. package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
  191. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
  192. package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
  193. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
  194. package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
  195. package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
  196. package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
  197. package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
  198. package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
  199. package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
  200. package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
  201. package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
  202. package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
  203. package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
  204. package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
  205. package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
  206. package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
  207. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
  208. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
  209. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
  210. package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
  211. package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
  212. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
  213. package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
  214. package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
  215. package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
  216. package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
  217. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
  218. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
  219. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
  220. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
  221. package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
  222. package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
  223. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  224. package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
  225. package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
  226. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
  227. package/dist/_dts/content-model/src/types.d.ts +0 -1
  228. package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
  229. package/dist/_dts/core/src/branded.d.ts +12 -0
  230. package/dist/_dts/core/src/currency-format.d.ts +8 -2
  231. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
  232. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
  233. package/dist/_dts/core/src/edit-lease.d.ts +55 -0
  234. package/dist/_dts/core/src/editor-state.d.ts +38 -13
  235. package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
  236. package/dist/_dts/core/src/html-entities.d.ts +6 -0
  237. package/dist/_dts/core/src/index.d.ts +4 -0
  238. package/dist/_dts/core/src/uuid.d.ts +7 -5
  239. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +159 -153
  240. package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
  241. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
  242. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
  243. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
  244. package/dist/_dts/editor/src/index.d.ts +1 -1
  245. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
  246. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  247. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  248. package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
  249. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
  250. package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
  251. package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
  252. package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
  253. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
  254. package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
  255. package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
  256. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
  257. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
  258. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
  259. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
  260. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
  261. package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
  262. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
  263. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
  264. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
  265. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
  266. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
  267. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
  268. package/dist/_dts/media-editor/src/context.d.ts +1 -1
  269. package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
  270. package/dist/_dts/media-editor/src/provider.d.ts +3 -2
  271. package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
  272. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
  273. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
  274. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +6 -3
  275. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
  276. package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
  277. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
  278. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
  279. package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
  280. package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
  281. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  282. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  283. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  284. package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
  285. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  286. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +24 -14
  287. package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
  288. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
  289. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  290. package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
  291. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
  292. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
  293. package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
  294. package/dist/_dts/realtime/src/client.d.ts +3 -0
  295. package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
  296. package/dist/_dts/realtime/src/drafts.d.ts +210 -0
  297. package/dist/_dts/realtime/src/index.d.ts +3 -0
  298. package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
  299. package/dist/_dts/realtime/src/types.d.ts +113 -0
  300. package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
  301. package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
  302. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
  303. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  304. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
  305. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -0
  306. package/dist/_dts/sdk/src/version.d.ts +1 -1
  307. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  308. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  309. package/dist/client/{BookingMailingListNote-1n4Ch_u_.mjs → BookingMailingListNote-CzRt2dF_.mjs} +98 -96
  310. package/dist/client/DemoBookingPortalAccess-mxqwap3f.mjs +344 -0
  311. package/dist/client/{EventCombined.client-C0pgma9y.mjs → EventCombined.client-CDb11igO.mjs} +6 -6
  312. package/dist/client/{EventListing.client-4fhLOvHP.mjs → EventListing.client-EgYhzKPa.mjs} +2 -2
  313. package/dist/client/{LeafletStaticMap-DScC4F3w.mjs → LeafletStaticMap-gtmtaA2b.mjs} +1 -1
  314. package/dist/client/{TerminalPanel-B5ZUsYhe.mjs → TerminalPanel-DvNUP5ot.mjs} +1 -1
  315. package/dist/client/{ThemedButton-DoVIV1Ao.mjs → ThemedButton-C7CeUJjW.mjs} +1 -1
  316. package/dist/client/{accordion-CoT5g7zo.mjs → accordion-kjvt49rA.mjs} +1 -1
  317. package/dist/client/{bookingForm-BWxB46xD.mjs → bookingForm-pbRZordh.mjs} +212 -62
  318. package/dist/client/bookings.mjs +616 -225
  319. package/dist/client/{carousel-DtNYWFd3.mjs → carousel-f4Zbmicv.mjs} +1 -1
  320. package/dist/client/{cart-z4qZih1Y.mjs → cart-DO20An50.mjs} +3 -3
  321. package/dist/client/{checkout-DpL7euFH.mjs → checkout-Du5amDR_.mjs} +3 -3
  322. package/dist/client/{checkoutUrls-BEfR7kVu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
  323. package/dist/client/client.mjs +1753 -823
  324. package/dist/client/{context-C8TinPJc.mjs → context-eW97E945.mjs} +4 -3
  325. package/dist/client/{dates-vwwxTeB0.mjs → dates-jPCirRea.mjs} +56 -11
  326. package/dist/client/{eventCalendar-DIbHfJXO.mjs → eventCalendar-C2M-iE4j.mjs} +9 -9
  327. package/dist/client/{eventCombined-DoGMJ6cg.mjs → eventCombined-W6ns3LHg.mjs} +4 -4
  328. package/dist/client/{eventDetails-BjN9v6a1.mjs → eventDetails-CR-GT0f0.mjs} +4 -4
  329. package/dist/client/{eventListing-DajjWgOv.mjs → eventListing-BK8AfYZz.mjs} +4 -4
  330. package/dist/client/{eventRegistration-DMq9gMA-.mjs → eventRegistration-BJSd4KUu.mjs} +369 -242
  331. package/dist/client/{form-Qf6qTbos.mjs → form-BvpfbQaT.mjs} +3 -3
  332. package/dist/client/{headerSection-D7qJrqFX.mjs → headerSection-I5sUQ8x-.mjs} +3 -3
  333. package/dist/client/hooks.mjs +254 -53
  334. package/dist/client/{locationMap-CCF9-t_0.mjs → locationMap-BLvwf9_f.mjs} +3 -3
  335. package/dist/client/{media-CwBGetqC.mjs → media-Cl38iOMI.mjs} +10 -3
  336. package/dist/client/{newsletterForm-DzCLSP4S.mjs → newsletterForm-DrQ2weE8.mjs} +3 -3
  337. package/dist/client/{pricing-Cgxv2KLC.mjs → pricing-BES87mrR.mjs} +1 -1
  338. package/dist/client/{productDetail-ru9w5GHx.mjs → productDetail-Url9jcc5.mjs} +3 -3
  339. package/dist/client/{productList-zaapKSl-.mjs → productList-DE7ngEZJ.mjs} +3 -3
  340. package/dist/client/{propsDecoder-CwvvNOHx.mjs → propsDecoder-D1OtGXDV.mjs} +89 -17
  341. package/dist/client/rendering/client.mjs +1445 -658
  342. package/dist/client/rendering/islands.mjs +18 -18
  343. package/dist/client/rendering.mjs +2478 -1515
  344. package/dist/client/{routeIslandApiConfig-BwVFo0Y4.mjs → routeIslandApiConfig-BG9Y-SHg.mjs} +1 -1
  345. package/dist/client/{shop-mktkXvbV.mjs → shop-CJkuySJ3.mjs} +126 -79
  346. package/dist/client/{shop-commerce-De7gEnkA.mjs → shop-commerce-4rKj5n9h.mjs} +25 -13
  347. package/dist/client/{shop-commerce-store-B3MCxIBW.mjs → shop-commerce-store-Bxm75Pg6.mjs} +1 -1
  348. package/dist/client/{shopShared-TqExh235.mjs → shopShared-DpoQDWfz.mjs} +4 -4
  349. package/dist/client/{useEventFilters-n_OjkIjX.mjs → useEventFilters-D8HliSqR.mjs} +32 -17
  350. package/dist/preview-next/before-render.mjs +192 -83
  351. package/dist/preview-next/client/runtime.mjs +4 -4
  352. package/dist/preview-next/keepAlive.mjs +192 -83
  353. package/dist/preview-next/middleware.mjs +192 -83
  354. package/dist/{previewAuthStore-C_EHQ5XA.mjs → previewAuthStore-BXXF3hhW.mjs} +194 -83
  355. package/dist/{sdk-runtime-BIkJg5y1.mjs → sdk-runtime-C2a05WjL.mjs} +2 -2
  356. package/dist/{separator-C9qDP95Z.mjs → separator-CuNhBAhS.mjs} +1 -1
  357. package/dist/server/components.mjs +1720 -1392
  358. package/dist/server/config-validation.mjs +221 -37
  359. package/dist/server/config.mjs +221 -37
  360. package/dist/server/data.mjs +221 -37
  361. package/dist/server/index.mjs +195 -84
  362. package/dist/server/next.mjs +490 -196
  363. package/dist/server/page-converter.mjs +53 -14
  364. package/dist/server/prebuild.mjs +1 -1
  365. package/dist/server/rendering/server.mjs +1427 -1098
  366. package/dist/server/rendering.mjs +2693 -2365
  367. package/dist/server/routing.mjs +291 -55
  368. package/dist/server/server.mjs +281 -114
  369. package/package.json +1 -1
  370. package/dist/_dts/billing/src/plans/display.d.ts +0 -15
  371. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +0 -3
  372. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
  373. package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
  374. package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
  375. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
  376. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
  377. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
  378. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
  379. package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
  380. package/dist/_dts/content-editor/src/types.d.ts +0 -44
  381. package/dist/client/DiscountCodeDisclosure-CKJtz0mY.mjs +0 -137
@@ -1,21 +1,21 @@
1
1
  "use client";
2
- import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as BookingConsentAgreement, o as resolveBookingPaymentDueNowCents, r as StepIndicator$1, s as formatPrice, t as BookingMailingListNote } from "./BookingMailingListNote-1n4Ch_u_.mjs";
3
- import { $t as formatBookingDate, C as resolveDiscountContext, D as WIZARD_STEPS, E as toRegistrationRequestSubject, M as resolveEventRegistrationScopedEvents, O as getStepNumber, S as findPreSelectedEvent, T as resolveRegistrationTarget, Vt as assertNever, Zt as resolveBookingSignupOffer, _ as buildEventRegistrationDisplayFromScopedEvents, _n as publicEventPricingOptions, b as toWholeSeriesRegistrationEvents, bn as formatCurrencyAmount, dn as toScheduledBookingDateTime, ft as groupPublicEventsByRun, hn as publicEventPricingCurrency, k as getWizardStepsForContext, ln as toBookingTimeZone, rn as formatBookingTime, t as defineIslandPropsDecoder, tn as formatBookingDateTime, v as getRegistrationStartAt, vn as publicEventPricingStrategy, w as resolveEventRequiresPayment, x as findEventByOccurrenceId, xn as parseCurrencyCode, y as toRegistrationEvents, yn as publicEventPricingType } from "./propsDecoder-CwvvNOHx.mjs";
4
- import { a as canJoinEventWaitlistOnAnyMode, c as formatTicketTypeRemaining, f as getRemainingPlaces, h as selectMostOpenCapacitySource, i as canJoinEventWaitlist, m as selectEventCapacitySource, o as formatEventRemainingPlaces, p as isEventFull, r as formatEventPriceDisplay, s as formatRemainingPlaces, u as getEventAvailability } from "./pricing-Cgxv2KLC.mjs";
5
- import { n as useBlockApi, r as BlockApiError, t as BlockApiProvider } from "./context-C8TinPJc.mjs";
2
+ import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as BookingConsentAgreement, o as resolveBookingPaymentDueNowCents, r as StepIndicator$1, s as formatPrice, t as BookingMailingListNote } from "./BookingMailingListNote-CzRt2dF_.mjs";
3
+ import { C as resolveDiscountContext, Cn as formatCurrencyAmount, D as WIZARD_STEPS, E as toRegistrationRequestSubject, M as resolveEventRegistrationScopedEvents, O as getStepNumber, Ot as getRegistrationSuccessCopy, S as findPreSelectedEvent, Sn as publicEventPricingType, T as resolveRegistrationTarget, Wt as assertNever, _ as buildEventRegistrationDisplayFromScopedEvents, b as toWholeSeriesRegistrationEvents, bn as publicEventPricingOptions, en as resolveBookingSignupOffer, fn as toBookingTimeZone, ft as groupPublicEventsByRun, in as formatBookingDateTime, k as getWizardStepsForContext, mn as toScheduledBookingDateTime, nn as formatBookingDate, on as formatBookingTime, t as defineIslandPropsDecoder, v as getRegistrationStartAt, vn as publicEventPricingCurrency, w as resolveEventRequiresPayment, wn as parseCurrencyCode, x as findEventByOccurrenceId, xn as publicEventPricingStrategy, y as toRegistrationEvents } from "./propsDecoder-D1OtGXDV.mjs";
4
+ import { a as canJoinEventWaitlistOnAnyMode, c as formatTicketTypeRemaining, f as getRemainingPlaces, h as selectMostOpenCapacitySource, i as canJoinEventWaitlist, m as selectEventCapacitySource, o as formatEventRemainingPlaces, p as isEventFull, r as formatEventPriceDisplay, s as formatRemainingPlaces, u as getEventAvailability } from "./pricing-BES87mrR.mjs";
5
+ import { n as useBlockApi, r as BlockApiError, t as BlockApiProvider } from "./context-eW97E945.mjs";
6
6
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
7
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-CKJtz0mY.mjs";
8
- import { a as useDiscountCodeUi, i as CheckIcon, n as StateIcon, r as scrollToBlock, t as TerminalPanel } from "./TerminalPanel-B5ZUsYhe.mjs";
9
- import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-DoVIV1Ao.mjs";
7
+ import { a as requestDemoPortalMagicLink, f as storeDemoBookingPass, i as buildPortalCallbackUrl, o as DiscountCodeDisclosure, r as CUSTOMER_PORTAL_PATH, t as BookingConfirmation } from "./DemoBookingPortalAccess-mxqwap3f.mjs";
8
+ import { a as useDiscountCodeUi, i as CheckIcon, n as StateIcon, r as scrollToBlock, t as TerminalPanel } from "./TerminalPanel-DvNUP5ot.mjs";
9
+ import { i as SpinnerNode, n as ThemedButtonLink, t as ThemedButton } from "./ThemedButton-C7CeUJjW.mjs";
10
10
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
11
11
  import { i as getFieldValidationControlProps, r as FieldValidationMessage } from "./mailingListSignupCopy-DZSHZrm6.mjs";
12
- import { t as buildCheckoutReturnUrls } from "./checkoutUrls-BEfR7kVu.mjs";
12
+ import { t as buildCheckoutReturnUrls } from "./checkoutUrls-CXhko2Rv.mjs";
13
13
  import { t as CheckboxChoice } from "./CheckboxChoice-B33MqoUo.mjs";
14
14
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
15
15
  import { n as consumeSearchParams } from "./urlParams-D71VXFGx.mjs";
16
16
  import { t as CrossIcon } from "./CrossIcon-Dn1KRKW5.mjs";
17
17
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
18
- import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-BwVFo0Y4.mjs";
18
+ import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-BG9Y-SHg.mjs";
19
19
  import { t as createLucideIcon } from "./createLucideIcon-PaLVMov4.mjs";
20
20
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
21
21
  import React, { useCallback, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
@@ -34,6 +34,16 @@ function toNonNegativeCents(value) {
34
34
  return unsafeAsNonNegativeCents(Math.max(0, Math.trunc(value)));
35
35
  }
36
36
  //#endregion
37
+ //#region ../core/src/uuid.ts
38
+ function generateUuidV4(cryptoSource = globalThis.crypto) {
39
+ if (typeof cryptoSource.randomUUID === "function") return cryptoSource.randomUUID();
40
+ const bytes = cryptoSource.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
41
+ bytes[6] = (bytes[6] ?? 0) & 15 | 64;
42
+ bytes[8] = (bytes[8] ?? 0) & 63 | 128;
43
+ const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0"));
44
+ return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
45
+ }
46
+ //#endregion
37
47
  //#region ../blocks/src/system/runtime/shared/components/ClockIcon.tsx
38
48
  function ClockIcon({ className, strokeWidth = 2 }) {
39
49
  return /* @__PURE__ */ jsx("svg", {
@@ -800,7 +810,7 @@ function recoverRegistrationError(action, handlers) {
800
810
  switch (action) {
801
811
  case "none": return;
802
812
  case "portal":
803
- window.location.assign("/portal");
813
+ window.location.assign(CUSTOMER_PORTAL_PATH);
804
814
  return;
805
815
  case "event":
806
816
  window.location.assign(window.location.pathname);
@@ -1414,6 +1424,10 @@ const eventRegistrationErrors = {
1414
1424
  message: "The payment options for this event have changed. Please check the latest options before continuing.",
1415
1425
  action: "payment-options"
1416
1426
  },
1427
+ verificationFailed: {
1428
+ message: "We couldn’t confirm this request came from a person. Please refresh the page and try again.",
1429
+ action: "none"
1430
+ },
1417
1431
  idempotencyConflict: {
1418
1432
  message: "You’ve already started booking this event. Please finish in the other tab if it’s still open, or check your booking status before starting again.",
1419
1433
  action: "portal"
@@ -1601,11 +1615,50 @@ function useResolvedWaitlistClaim(deps, credential) {
1601
1615
  * ```
1602
1616
  */
1603
1617
  const paymentVerificationDeps = { useBlockApi };
1618
+ function resolvePaymentPollingTarget(config) {
1619
+ const reference = config.reference;
1620
+ return reference.scope === "occurrence" ? {
1621
+ key: `occurrence:${reference.attendeeId}`,
1622
+ reference
1623
+ } : {
1624
+ key: `wholeSeries:${reference.registrationId}`,
1625
+ reference
1626
+ };
1627
+ }
1628
+ function createPaymentPollingConfig(api, settings) {
1629
+ if (settings === null) return null;
1630
+ const target = resolvePaymentPollingTarget(settings);
1631
+ return {
1632
+ restartKey: target.key,
1633
+ pollFn: () => api.getEventRegistrationStatus(target.reference),
1634
+ isComplete: (result) => result.paymentStatus === "completed" || result.paymentStatus === "not_required",
1635
+ isFailed: (result) => result.paymentStatus === "failed" || result.paymentStatus === "refunded",
1636
+ maxAttempts: settings.maxAttempts,
1637
+ interval: settings.pollInterval
1638
+ };
1639
+ }
1640
+ function getPaymentVerificationError(polling, paymentStatus) {
1641
+ if (polling.status === "timeout") return "Could not verify payment. If you were charged, please contact support.";
1642
+ if (polling.status === "failed" && paymentStatus !== null) return paymentStatus === "refunded" ? "Payment was refunded. Please contact support." : "Payment was declined. Please try again.";
1643
+ return polling.error?.message ?? null;
1644
+ }
1645
+ function mapPaymentVerificationResult(polling) {
1646
+ const paymentStatus = polling.result?.paymentStatus ?? null;
1647
+ return {
1648
+ status: polling.status,
1649
+ paymentStatus,
1650
+ attendeeStatus: polling.result?.attendeeStatus ?? null,
1651
+ waitlistPosition: polling.result?.waitlistPosition ?? null,
1652
+ error: getPaymentVerificationError(polling, paymentStatus),
1653
+ retry: polling.retry
1654
+ };
1655
+ }
1604
1656
  /**
1605
1657
  * Hook for polling payment status after Stripe redirects.
1606
1658
  *
1607
1659
  * Pass config to start polling, or null to stop/idle.
1608
- * The hook handles cleanup on unmount and config changes.
1660
+ * The hook handles cleanup on unmount and starts a new cycle when the status
1661
+ * reference changes.
1609
1662
  *
1610
1663
  * @param config - Configuration for polling, or null to stop
1611
1664
  * @returns Verification result with status, data, and retry function
@@ -1614,30 +1667,7 @@ function usePaymentVerification(config) {
1614
1667
  return usePaymentVerificationWithDeps(config, paymentVerificationDeps);
1615
1668
  }
1616
1669
  function usePaymentVerificationWithDeps(config, deps) {
1617
- const api = deps.useBlockApi();
1618
- const polling = usePolling(useMemo(() => {
1619
- if (!config) return null;
1620
- return {
1621
- pollFn: () => api.getEventRegistrationStatus(config.reference),
1622
- isComplete: (result) => result.paymentStatus === "completed" || result.paymentStatus === "not_required",
1623
- isFailed: (result) => result.paymentStatus === "failed" || result.paymentStatus === "refunded",
1624
- maxAttempts: config.maxAttempts,
1625
- interval: config.pollInterval
1626
- };
1627
- }, [api, config]));
1628
- const paymentStatus = polling.result?.paymentStatus ?? null;
1629
- let errorMessage = null;
1630
- if (polling.status === "timeout") errorMessage = "Could not verify payment. If you were charged, please contact support.";
1631
- else if (polling.status === "failed" && paymentStatus) errorMessage = paymentStatus === "refunded" ? "Payment was refunded. Please contact support." : "Payment was declined. Please try again.";
1632
- else if (polling.error) errorMessage = polling.error.message;
1633
- return {
1634
- status: polling.status,
1635
- paymentStatus,
1636
- attendeeStatus: polling.result?.attendeeStatus ?? null,
1637
- waitlistPosition: polling.result?.waitlistPosition ?? null,
1638
- error: errorMessage,
1639
- retry: polling.retry
1640
- };
1670
+ return mapPaymentVerificationResult(usePolling(createPaymentPollingConfig(deps.useBlockApi(), config)));
1641
1671
  }
1642
1672
  //#endregion
1643
1673
  //#region ../blocks/src/system/runtime/nodes/event-registration/constants.ts
@@ -2010,20 +2040,9 @@ function registrationErrorPresentation(error) {
2010
2040
  function wantsMailingListSignup(options) {
2011
2041
  return options.mailingListSignup !== null && options.formData.mailingListOptIn === true;
2012
2042
  }
2013
- function createClientCommandId(cryptoSource = {
2014
- randomUUID: globalThis.crypto.randomUUID?.bind(globalThis.crypto),
2015
- getRandomValues: (bytes) => globalThis.crypto.getRandomValues(bytes)
2016
- }) {
2017
- if (cryptoSource.randomUUID) return cryptoSource.randomUUID();
2018
- const bytes = cryptoSource.getRandomValues(/* @__PURE__ */ new Uint8Array(16));
2019
- bytes[6] = (bytes[6] ?? 0) & 15 | 64;
2020
- bytes[8] = (bytes[8] ?? 0) & 63 | 128;
2021
- const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0"));
2022
- return `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
2023
- }
2024
2043
  const eventRegistrationSubmitDeps = {
2025
2044
  savePendingRegistration,
2026
- createClientCommandId
2045
+ createClientCommandId: generateUuidV4
2027
2046
  };
2028
2047
  function useEventRegistrationSubmit(options) {
2029
2048
  return useEventRegistrationSubmitWithDeps(options, eventRegistrationSubmitDeps);
@@ -2103,6 +2122,7 @@ function useEventRegistrationSubmitWithDeps(options, deps) {
2103
2122
  };
2104
2123
  }
2105
2124
  async function completeRegistrationSubmission(options, deps, prepared, result, submitOptions) {
2125
+ if (result.demoBookingPass) storeDemoBookingPass(options.formData.email, result.demoBookingPass);
2106
2126
  switch (result.kind) {
2107
2127
  case "paymentStatusRequired":
2108
2128
  options.setPaymentStatusRecovery({
@@ -2125,6 +2145,7 @@ async function completeRegistrationSubmission(options, deps, prepared, result, s
2125
2145
  status: "waitlist",
2126
2146
  title: "Added to waitlist",
2127
2147
  message: result.waitlist.message,
2148
+ emailFollowupMessage: result.waitlist.emailFollowupMessage,
2128
2149
  mailingListSignupNote: result.mailingListSignupNote
2129
2150
  });
2130
2151
  break;
@@ -3250,6 +3271,118 @@ function useEventCheckoutHandoffRestoreWithDeps(active, deps) {
3250
3271
  }, [active, deps]);
3251
3272
  }
3252
3273
  //#endregion
3274
+ //#region ../blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.tsx
3275
+ function BookingEntry(props) {
3276
+ const base = props.variant === "teaser" ? "er-booking-teaser" : "er-booking-bar";
3277
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
3278
+ className: `${base}__info`,
3279
+ children: [
3280
+ /* @__PURE__ */ jsx("span", {
3281
+ className: `${base}__title`,
3282
+ children: "Book this event"
3283
+ }),
3284
+ props.summary && /* @__PURE__ */ jsx("span", {
3285
+ className: `${base}__meta`,
3286
+ children: props.summary
3287
+ }),
3288
+ props.variant === "teaser" && props.ticketCurrency && props.ticketTypes.length > 0 ? /* @__PURE__ */ jsx("div", {
3289
+ className: "er-booking-teaser__tickets",
3290
+ children: props.ticketTypes.map((ticketType) => /* @__PURE__ */ jsxs("div", {
3291
+ className: "er-booking-teaser__ticket",
3292
+ children: [/* @__PURE__ */ jsx("span", {
3293
+ className: "er-booking-teaser__ticket-name",
3294
+ children: ticketType.name
3295
+ }), /* @__PURE__ */ jsx("strong", { children: props.formatTicketPrice(ticketType) })]
3296
+ }, ticketType.pricingOptionId))
3297
+ }) : null
3298
+ ]
3299
+ }), /* @__PURE__ */ jsx(ThemedButton, {
3300
+ type: "button",
3301
+ variant: props.buttonVariant,
3302
+ size: "md",
3303
+ extraClassName: `${base}__cta`,
3304
+ label: "Book now",
3305
+ onClick: props.onOpen
3306
+ })] });
3307
+ }
3308
+ function EventRegistrationBookingLayer(props) {
3309
+ const entryProps = {
3310
+ summary: [props.priceLabel, props.availabilityLabel].filter(Boolean).join(" · "),
3311
+ ticketTypes: props.ticketTypes,
3312
+ ticketCurrency: props.ticketCurrency,
3313
+ buttonVariant: props.buttonVariant,
3314
+ formatTicketPrice: props.formatTicketPrice,
3315
+ onOpen: props.onOpen
3316
+ };
3317
+ const floatingBar = !props.overlayOpen && props.isWizardStep ? /* @__PURE__ */ jsx("div", {
3318
+ className: "er-booking-bar",
3319
+ children: /* @__PURE__ */ jsx("div", {
3320
+ className: "er-booking-bar__inner",
3321
+ children: /* @__PURE__ */ jsx(BookingEntry, {
3322
+ ...entryProps,
3323
+ variant: "bar"
3324
+ })
3325
+ })
3326
+ }) : null;
3327
+ const floatingLayer = props.portalRoot ? createPortal(/* @__PURE__ */ jsx("div", {
3328
+ className: props.registrationRootClassName,
3329
+ "data-block": "event-registration",
3330
+ children: floatingBar
3331
+ }), props.portalRoot) : floatingBar;
3332
+ const overlayLayer = props.overlayOpen ? /* @__PURE__ */ jsx(ModalShell, {
3333
+ title: "Book this event",
3334
+ titleId: "event-registration-booking-title",
3335
+ onClose: props.onClose,
3336
+ portal: props.portalRoot != null,
3337
+ portalRoot: props.portalRoot,
3338
+ portalWrapperClassName: props.registrationRootClassName,
3339
+ portalWrapperProps: { "data-block": "event-registration" },
3340
+ overlayClassName: "er-booking-overlay",
3341
+ modalClassName: "er-booking-overlay__panel",
3342
+ renderHeader: ({ closeButtonRef, onClose, title, titleId }) => /* @__PURE__ */ jsxs("div", {
3343
+ className: "er-booking-overlay__header",
3344
+ children: [/* @__PURE__ */ jsx("h2", {
3345
+ className: "er-booking-overlay__title",
3346
+ id: titleId,
3347
+ children: title
3348
+ }), /* @__PURE__ */ jsx("button", {
3349
+ ref: closeButtonRef,
3350
+ type: "button",
3351
+ className: "er-booking-overlay__close",
3352
+ onClick: onClose,
3353
+ "aria-label": "Close booking",
3354
+ children: "×"
3355
+ })]
3356
+ }),
3357
+ children: props.overlaySurface
3358
+ }) : null;
3359
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3360
+ props.isWizardStep && /* @__PURE__ */ jsx("div", {
3361
+ className: "er-booking-teaser",
3362
+ children: /* @__PURE__ */ jsx(BookingEntry, {
3363
+ ...entryProps,
3364
+ variant: "teaser"
3365
+ })
3366
+ }),
3367
+ floatingLayer,
3368
+ overlayLayer
3369
+ ] });
3370
+ }
3371
+ //#endregion
3372
+ //#region ../blocks/src/system/runtime/shared/components/DemoPortalSignInLink.tsx
3373
+ function DemoPortalSignInLink(props) {
3374
+ return /* @__PURE__ */ jsxs("div", { children: [
3375
+ /* @__PURE__ */ jsx("h3", { children: "Your sign-in link" }),
3376
+ /* @__PURE__ */ jsx("p", { children: "In the demo we don’t send emails, so here’s the link we’d have sent you." }),
3377
+ /* @__PURE__ */ jsx(ThemedButtonLink, {
3378
+ variant: "default",
3379
+ size: "md",
3380
+ label: "Sign in to the portal",
3381
+ href: props.url
3382
+ })
3383
+ ] });
3384
+ }
3385
+ //#endregion
3253
3386
  //#region ../blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.ts
3254
3387
  const initialMagicLinkSubmissionState = Object.freeze({ tag: "idle" });
3255
3388
  function magicLinkSubmissionReducer(state, action) {
@@ -3260,6 +3393,14 @@ function magicLinkSubmissionReducer(state, action) {
3260
3393
  case "submit-succeeded":
3261
3394
  if (state.tag !== "submitting") return state;
3262
3395
  return { tag: "success" };
3396
+ case "submit-demo-link": return state.tag === "submitting" ? {
3397
+ tag: "demo_link",
3398
+ url: action.url
3399
+ } : state;
3400
+ case "submit-demo-refused": return state.tag === "submitting" ? {
3401
+ tag: "demo_refused",
3402
+ message: action.message
3403
+ } : state;
3263
3404
  case "submit-failed":
3264
3405
  if (state.tag !== "submitting") return state;
3265
3406
  return {
@@ -3278,110 +3419,168 @@ function getMagicLinkError(state) {
3278
3419
  }
3279
3420
  //#endregion
3280
3421
  //#region ../blocks/src/system/runtime/nodes/shared/MagicLinkForm.tsx
3281
- function MagicLinkButton(props) {
3282
- return props.themed ? /* @__PURE__ */ jsx(ThemedButton, {
3283
- type: props.type,
3284
- variant: props.variant,
3285
- size: "md",
3286
- label: props.label,
3287
- disabled: props.disabled,
3288
- onClick: props.onClick
3289
- }) : /* @__PURE__ */ jsx("button", {
3290
- type: props.type,
3291
- className: props.className,
3292
- disabled: props.disabled,
3293
- onClick: props.onClick,
3294
- children: props.label
3295
- });
3296
- }
3297
- /**
3298
- * Reusable magic link login form.
3299
- * Used by Customer Portal and Event Registration blocks.
3300
- */
3301
- function MagicLinkForm({ initialEmail = "", title, subtitle, buttonText = "Send login link", successMessage = "Check your email for a login link to sign in.", onSuccess, classPrefix = "er", compact = false }) {
3422
+ function MagicLinkForm(props) {
3302
3423
  const api = useBlockApi();
3303
- const [email, setEmail] = useState(initialEmail);
3304
- const [submissionState, dispatchSubmission] = useReducer(magicLinkSubmissionReducer, initialMagicLinkSubmissionState);
3305
- const loading = isMagicLinkSubmitting(submissionState);
3306
- const error = getMagicLinkError(submissionState);
3307
- const handleSubmit = async (e) => {
3308
- e.preventDefault();
3309
- const normalizedEmail = email.trim().toLowerCase();
3310
- if (!normalizedEmail || loading) return;
3311
- dispatchSubmission({ type: "submit-started" });
3312
- try {
3313
- const redirectTo = `${window.location.pathname}${window.location.search}${window.location.hash}`;
3314
- await api.sendMagicLink({
3315
- email: normalizedEmail,
3316
- redirectUrl: `${window.location.origin}/api/portal/callback?redirect_to=${encodeURIComponent(redirectTo)}`
3317
- });
3318
- dispatchSubmission({ type: "submit-succeeded" });
3319
- onSuccess?.();
3320
- } catch (err) {
3321
- console.error("Magic link error:", err);
3322
- dispatchSubmission({
3323
- type: "submit-failed",
3324
- message: getMagicLinkErrorMessage(err)
3325
- });
3326
- }
3327
- };
3328
- const handleReset = () => {
3329
- setEmail("");
3330
- dispatchSubmission({ type: "reset" });
3424
+ const [email, setEmail] = useState(props.initialEmail ?? "");
3425
+ const [state, dispatch] = useReducer(magicLinkSubmissionReducer, initialMagicLinkSubmissionState);
3426
+ const loading = isMagicLinkSubmitting(state);
3427
+ const handleSubmit = (event) => {
3428
+ submitMagicLink({
3429
+ event,
3430
+ email,
3431
+ loading,
3432
+ api,
3433
+ dispatch,
3434
+ onSuccess: props.onSuccess
3435
+ });
3331
3436
  };
3332
- if (submissionState.tag === "success") return /* @__PURE__ */ jsxs("div", {
3333
- className: `${classPrefix}-magic-link-success`,
3334
- children: [/* @__PURE__ */ jsx("p", {
3335
- className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--success`,
3336
- children: successMessage
3337
- }), !compact && /* @__PURE__ */ jsx(MagicLinkButton, {
3338
- themed: classPrefix === "cp",
3339
- type: "button",
3340
- variant: "secondary",
3341
- className: `${classPrefix}-modal-btn ${classPrefix}-modal-btn--secondary`,
3342
- label: "Try a different email",
3343
- onClick: handleReset
3344
- })]
3437
+ if (state.tag === "success" || state.tag === "demo_link") return /* @__PURE__ */ jsx(MagicLinkSuccess, {
3438
+ state,
3439
+ classPrefix: props.classPrefix ?? "er",
3440
+ compact: props.compact ?? false,
3441
+ successMessage: props.successMessage ?? "Check your email for a login link to sign in.",
3442
+ onReset: () => {
3443
+ setEmail("");
3444
+ dispatch({ type: "reset" });
3445
+ }
3345
3446
  });
3447
+ return /* @__PURE__ */ jsx(MagicLinkFormView, {
3448
+ classPrefix: props.classPrefix ?? "er",
3449
+ compact: props.compact ?? false,
3450
+ email,
3451
+ error: getMagicLinkError(state),
3452
+ loading,
3453
+ title: props.title,
3454
+ subtitle: props.subtitle,
3455
+ buttonText: props.buttonText ?? "Send login link",
3456
+ state,
3457
+ onEmailChange: setEmail,
3458
+ onSubmit: handleSubmit
3459
+ });
3460
+ }
3461
+ function MagicLinkFormView(props) {
3462
+ const classPrefix = props.classPrefix;
3346
3463
  return /* @__PURE__ */ jsxs("form", {
3347
- onSubmit: handleSubmit,
3464
+ onSubmit: props.onSubmit,
3348
3465
  className: `${classPrefix}-magic-link-form`,
3349
3466
  children: [
3350
- title && /* @__PURE__ */ jsx("h3", {
3467
+ props.title ? /* @__PURE__ */ jsx("h3", {
3351
3468
  className: `${classPrefix}-magic-link-title`,
3352
- children: title
3353
- }),
3354
- subtitle && /* @__PURE__ */ jsx("p", {
3469
+ children: props.title
3470
+ }) : null,
3471
+ props.subtitle ? /* @__PURE__ */ jsx("p", {
3355
3472
  className: `${classPrefix}-portal-auth-text`,
3356
- children: subtitle
3357
- }),
3473
+ children: props.subtitle
3474
+ }) : null,
3358
3475
  /* @__PURE__ */ jsx("input", {
3359
3476
  type: "email",
3360
3477
  className: classPrefix === "cp" ? "cp-input" : `${classPrefix}-form__input`,
3361
3478
  placeholder: "your@email.com",
3362
- value: email,
3363
- onChange: (e) => setEmail(e.target.value),
3364
- autoFocus: !compact,
3479
+ value: props.email,
3480
+ onChange: (event) => props.onEmailChange(event.target.value),
3481
+ autoFocus: !props.compact,
3365
3482
  required: true,
3366
- disabled: loading
3483
+ disabled: props.loading
3367
3484
  }),
3368
- error && /* @__PURE__ */ jsx("p", {
3369
- className: `${classPrefix}-portal-auth-text ${classPrefix}-portal-auth-text--error`,
3370
- children: error
3485
+ /* @__PURE__ */ jsx(MagicLinkFormFeedback, {
3486
+ classPrefix,
3487
+ error: props.error,
3488
+ state: props.state
3371
3489
  }),
3372
3490
  /* @__PURE__ */ jsx(MagicLinkButton, {
3373
3491
  themed: classPrefix === "cp",
3374
3492
  type: "submit",
3375
3493
  variant: "primary",
3376
3494
  className: `${classPrefix}-modal-btn`,
3377
- label: loading ? "Sending..." : buttonText,
3378
- disabled: !email.trim() || loading
3495
+ label: props.loading ? "Sending..." : props.buttonText,
3496
+ disabled: !props.email.trim() || props.loading
3379
3497
  })
3380
3498
  ]
3381
3499
  });
3382
3500
  }
3501
+ function MagicLinkFormFeedback(props) {
3502
+ if (!props.error && props.state.tag !== "demo_refused") return null;
3503
+ return /* @__PURE__ */ jsxs(Fragment, { children: [props.error ? /* @__PURE__ */ jsx("p", {
3504
+ className: `${props.classPrefix}-portal-auth-text ${props.classPrefix}-portal-auth-text--error`,
3505
+ children: props.error
3506
+ }) : null, props.state.tag === "demo_refused" ? /* @__PURE__ */ jsx("p", {
3507
+ role: "alert",
3508
+ className: `${props.classPrefix}-portal-auth-text ${props.classPrefix}-portal-auth-text--error`,
3509
+ children: props.state.message
3510
+ }) : null] });
3511
+ }
3512
+ function MagicLinkSuccess(props) {
3513
+ return /* @__PURE__ */ jsxs("div", {
3514
+ className: `${props.classPrefix}-magic-link-success`,
3515
+ children: [props.state.tag === "success" ? /* @__PURE__ */ jsx("p", {
3516
+ className: `${props.classPrefix}-portal-auth-text ${props.classPrefix}-portal-auth-text--success`,
3517
+ children: props.successMessage
3518
+ }) : /* @__PURE__ */ jsx(DemoPortalSignInLink, { url: props.state.url }), !props.compact ? /* @__PURE__ */ jsx(MagicLinkButton, {
3519
+ themed: props.classPrefix === "cp",
3520
+ type: "button",
3521
+ variant: "secondary",
3522
+ className: `${props.classPrefix}-modal-btn ${props.classPrefix}-modal-btn--secondary`,
3523
+ label: "Try a different email",
3524
+ onClick: props.onReset
3525
+ }) : null]
3526
+ });
3527
+ }
3528
+ function MagicLinkButton(props) {
3529
+ return props.themed ? /* @__PURE__ */ jsx(ThemedButton, {
3530
+ type: props.type,
3531
+ variant: props.variant,
3532
+ size: "md",
3533
+ label: props.label,
3534
+ disabled: props.disabled,
3535
+ onClick: props.onClick
3536
+ }) : /* @__PURE__ */ jsx("button", {
3537
+ type: props.type,
3538
+ className: props.className,
3539
+ disabled: props.disabled,
3540
+ onClick: props.onClick,
3541
+ children: props.label
3542
+ });
3543
+ }
3544
+ async function submitMagicLink(input) {
3545
+ input.event.preventDefault();
3546
+ const email = input.email.trim().toLowerCase();
3547
+ if (!email || input.loading) return;
3548
+ input.dispatch({ type: "submit-started" });
3549
+ try {
3550
+ const result = await requestDemoPortalMagicLink({
3551
+ email,
3552
+ redirectUrl: getMagicLinkRedirectUrl(),
3553
+ send: (request) => input.api.sendMagicLink(request)
3554
+ });
3555
+ input.dispatch(magicLinkActionForResult(result));
3556
+ if (result.kind === "email_sent") input.onSuccess?.();
3557
+ } catch (error) {
3558
+ console.error("Magic link error:", error);
3559
+ input.dispatch({
3560
+ type: "submit-failed",
3561
+ message: getMagicLinkErrorMessage(error)
3562
+ });
3563
+ }
3564
+ }
3565
+ function magicLinkActionForResult(result) {
3566
+ switch (result.kind) {
3567
+ case "email_sent": return { type: "submit-succeeded" };
3568
+ case "demo_sign_in": return {
3569
+ type: "submit-demo-link",
3570
+ url: result.url
3571
+ };
3572
+ case "refused": return {
3573
+ type: "submit-demo-refused",
3574
+ message: result.message
3575
+ };
3576
+ }
3577
+ }
3578
+ function getMagicLinkRedirectUrl() {
3579
+ const redirectTo = `${window.location.pathname}${window.location.search}${window.location.hash}`;
3580
+ return buildPortalCallbackUrl(window.location.origin, redirectTo);
3581
+ }
3383
3582
  function getMagicLinkErrorMessage(error) {
3384
- return error instanceof Error ? error.message : "Failed to send. Please try again.";
3583
+ return error instanceof BlockApiError ? error.message : "We couldn’t send the sign-in link. Please try again.";
3385
3584
  }
3386
3585
  //#endregion
3387
3586
  //#region ../blocks/src/system/runtime/nodes/event-registration/ErrorStep.tsx
@@ -3690,19 +3889,19 @@ function isExistingRegistrationBlocking$1(wizard) {
3690
3889
  }
3691
3890
  function resolveTicketSelectionContinueLabel(input) {
3692
3891
  if (input.isCheckingExistingRegistration) return "Checking registration...";
3892
+ if (input.ticketTypeSelectionBlocked) return "Choose a ticket";
3693
3893
  if (input.registrationOptionsPending) return "Checking availability...";
3694
3894
  if (input.registrationOptionsFailed) return "Availability unavailable";
3695
3895
  if (input.hasExistingRegistration) return resolveExistingRegistrationLabel(input.wizard);
3696
- if (input.ticketTypeSelectionBlocked) return "Choose a ticket";
3697
3896
  return "Continue";
3698
3897
  }
3699
3898
  function SelectTicketsActions(props) {
3700
3899
  const { wizard } = props;
3701
- const registrationOptionsPending = wizard.registrationOptionsState.tag === "idle" || wizard.registrationOptionsState.tag === "loading";
3900
+ const ticketTypeSelectionBlocked = wizard.ticketTypeSelectionRequired && !wizard.hasValidTicketSelection;
3901
+ const registrationOptionsPending = !ticketTypeSelectionBlocked && ["idle", "loading"].includes(wizard.registrationOptionsState.tag);
3702
3902
  const registrationOptionsFailed = wizard.registrationOptionsState.tag === "failed";
3703
3903
  const isCheckingExistingRegistration = wizard.portalAuthState === "authenticated" && wizard.existingRegistrationLoading;
3704
3904
  const hasExistingRegistration = isExistingRegistrationBlocking$1(wizard);
3705
- const ticketTypeSelectionBlocked = wizard.ticketTypeSelectionRequired && !wizard.hasValidTicketSelection;
3706
3905
  const isContinueDisabled = registrationOptionsPending || registrationOptionsFailed || isCheckingExistingRegistration || hasExistingRegistration || ticketTypeSelectionBlocked;
3707
3906
  const continueLabel = resolveTicketSelectionContinueLabel({
3708
3907
  wizard,
@@ -5490,8 +5689,8 @@ function StepIndicator(props) {
5490
5689
  *
5491
5690
  * Displays registration confirmation with a success icon and message.
5492
5691
  */
5493
- const SuccessStep = ({ title, message, variant = "success", mailingListSignupNote, context = "booking" }) => {
5494
- return /* @__PURE__ */ jsx(TerminalPanel, {
5692
+ const SuccessStep = ({ title, copy, variant = "success", mailingListSignupNote, context = "booking", demoEmailSuppressed = false, customerEmail }) => {
5693
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(TerminalPanel, {
5495
5694
  tone: variant === "info" ? "info" : "success",
5496
5695
  className: "er-center",
5497
5696
  iconClassName: "er-icon",
@@ -5531,12 +5730,18 @@ const SuccessStep = ({ title, message, variant = "success", mailingListSignupNot
5531
5730
  })
5532
5731
  }),
5533
5732
  title: title ?? (variant === "info" ? "Already Registered" : "Registration Confirmed!"),
5534
- body: message,
5733
+ body: /* @__PURE__ */ jsx(BookingConfirmation, {
5734
+ demoEmailSuppressed,
5735
+ email: customerEmail,
5736
+ copy,
5737
+ messagePresentation: { kind: "plain" },
5738
+ noteClassName: "er-text--muted"
5739
+ }),
5535
5740
  secondaryBody: mailingListSignupNote ? /* @__PURE__ */ jsx(BookingMailingListNote, {
5536
5741
  note: mailingListSignupNote,
5537
5742
  context
5538
5743
  }) : void 0
5539
- });
5744
+ }) });
5540
5745
  };
5541
5746
  //#endregion
5542
5747
  //#region ../blocks/src/system/runtime/nodes/event-registration/VerifyingPaymentStep.tsx
@@ -5708,7 +5913,8 @@ function EventRegistrationTerminalState(props) {
5708
5913
  }) : null;
5709
5914
  case "success": return /* @__PURE__ */ jsx(EventRegistrationSuccess, {
5710
5915
  wizard,
5711
- fallbackMessage: props.successMessage
5916
+ fallbackMessage: props.successMessage,
5917
+ demoEmailSuppressed: props.demoEmailSuppressed
5712
5918
  });
5713
5919
  case "error": return /* @__PURE__ */ jsx(ErrorStep, {
5714
5920
  message: wizard.errorMessage,
@@ -5725,12 +5931,15 @@ function EventRegistrationTerminalState(props) {
5725
5931
  function EventRegistrationSuccess(props) {
5726
5932
  const result = props.wizard.registrationResult;
5727
5933
  if (!result) return null;
5934
+ const copy = getRegistrationSuccessCopy(result, props.fallbackMessage);
5728
5935
  return /* @__PURE__ */ jsx(SuccessStep, {
5729
5936
  title: result.title,
5730
5937
  variant: result.variant,
5731
- message: result.message ?? props.fallbackMessage,
5938
+ copy,
5732
5939
  mailingListSignupNote: result.mailingListSignupNote,
5733
- context: result.status === "waitlist" ? "waitlist" : "booking"
5940
+ context: result.status === "waitlist" ? "waitlist" : "booking",
5941
+ demoEmailSuppressed: props.demoEmailSuppressed,
5942
+ customerEmail: props.wizard.formData.email
5734
5943
  });
5735
5944
  }
5736
5945
  function EventRegistrationSurface(props) {
@@ -5778,109 +5987,12 @@ function EventRegistrationSurface(props) {
5778
5987
  }), /* @__PURE__ */ jsx(EventRegistrationTerminalState, {
5779
5988
  wizard,
5780
5989
  supportEmail: props.supportEmail,
5781
- successMessage: props.successMessage
5990
+ successMessage: props.successMessage,
5991
+ demoEmailSuppressed: props.demoEmailSuppressed
5782
5992
  })]
5783
5993
  });
5784
5994
  }
5785
5995
  //#endregion
5786
- //#region ../blocks/src/system/runtime/nodes/event-registration/EventRegistrationBookingLayer.tsx
5787
- function BookingEntry(props) {
5788
- const base = props.variant === "teaser" ? "er-booking-teaser" : "er-booking-bar";
5789
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("div", {
5790
- className: `${base}__info`,
5791
- children: [
5792
- /* @__PURE__ */ jsx("span", {
5793
- className: `${base}__title`,
5794
- children: "Book this event"
5795
- }),
5796
- props.summary && /* @__PURE__ */ jsx("span", {
5797
- className: `${base}__meta`,
5798
- children: props.summary
5799
- }),
5800
- props.variant === "teaser" && props.ticketCurrency && props.ticketTypes.length > 0 ? /* @__PURE__ */ jsx("div", {
5801
- className: "er-booking-teaser__tickets",
5802
- children: props.ticketTypes.map((ticketType) => /* @__PURE__ */ jsxs("div", {
5803
- className: "er-booking-teaser__ticket",
5804
- children: [/* @__PURE__ */ jsx("span", {
5805
- className: "er-booking-teaser__ticket-name",
5806
- children: ticketType.name
5807
- }), /* @__PURE__ */ jsx("strong", { children: props.formatTicketPrice(ticketType) })]
5808
- }, ticketType.pricingOptionId))
5809
- }) : null
5810
- ]
5811
- }), /* @__PURE__ */ jsx(ThemedButton, {
5812
- type: "button",
5813
- variant: props.buttonVariant,
5814
- size: "md",
5815
- extraClassName: `${base}__cta`,
5816
- label: "Book now",
5817
- onClick: props.onOpen
5818
- })] });
5819
- }
5820
- function EventRegistrationBookingLayer(props) {
5821
- const entryProps = {
5822
- summary: [props.priceLabel, props.availabilityLabel].filter(Boolean).join(" · "),
5823
- ticketTypes: props.ticketTypes,
5824
- ticketCurrency: props.ticketCurrency,
5825
- buttonVariant: props.buttonVariant,
5826
- formatTicketPrice: props.formatTicketPrice,
5827
- onOpen: props.onOpen
5828
- };
5829
- const floatingBar = !props.overlayOpen && props.isWizardStep ? /* @__PURE__ */ jsx("div", {
5830
- className: "er-booking-bar",
5831
- children: /* @__PURE__ */ jsx("div", {
5832
- className: "er-booking-bar__inner",
5833
- children: /* @__PURE__ */ jsx(BookingEntry, {
5834
- ...entryProps,
5835
- variant: "bar"
5836
- })
5837
- })
5838
- }) : null;
5839
- const floatingLayer = props.portalRoot ? createPortal(/* @__PURE__ */ jsx("div", {
5840
- className: props.registrationRootClassName,
5841
- "data-block": "event-registration",
5842
- children: floatingBar
5843
- }), props.portalRoot) : floatingBar;
5844
- const overlayLayer = props.overlayOpen ? /* @__PURE__ */ jsx(ModalShell, {
5845
- title: "Book this event",
5846
- titleId: "event-registration-booking-title",
5847
- onClose: props.onClose,
5848
- portal: props.portalRoot != null,
5849
- portalRoot: props.portalRoot,
5850
- portalWrapperClassName: props.registrationRootClassName,
5851
- portalWrapperProps: { "data-block": "event-registration" },
5852
- overlayClassName: "er-booking-overlay",
5853
- modalClassName: "er-booking-overlay__panel",
5854
- renderHeader: ({ closeButtonRef, onClose, title, titleId }) => /* @__PURE__ */ jsxs("div", {
5855
- className: "er-booking-overlay__header",
5856
- children: [/* @__PURE__ */ jsx("h2", {
5857
- className: "er-booking-overlay__title",
5858
- id: titleId,
5859
- children: title
5860
- }), /* @__PURE__ */ jsx("button", {
5861
- ref: closeButtonRef,
5862
- type: "button",
5863
- className: "er-booking-overlay__close",
5864
- onClick: onClose,
5865
- "aria-label": "Close booking",
5866
- children: "×"
5867
- })]
5868
- }),
5869
- children: props.overlaySurface
5870
- }) : null;
5871
- return /* @__PURE__ */ jsxs(Fragment, { children: [
5872
- props.isWizardStep && /* @__PURE__ */ jsx("div", {
5873
- className: "er-booking-teaser",
5874
- children: /* @__PURE__ */ jsx(BookingEntry, {
5875
- ...entryProps,
5876
- variant: "teaser"
5877
- })
5878
- }),
5879
- floatingLayer,
5880
- overlayLayer
5881
- ] });
5882
- }
5883
- //#endregion
5884
5996
  //#region ../blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.tsx
5885
5997
  const EVENT_PORTAL_AUTH_COPY = {
5886
5998
  membership: {
@@ -5893,6 +6005,16 @@ const EVENT_PORTAL_AUTH_COPY = {
5893
6005
  buttonText: "Email me a login link to continue →"
5894
6006
  }
5895
6007
  };
6008
+ function getPortalAuthCopy(waitlistClaimRequiresPortalLogin, loginMessage, demoEmailSuppressed) {
6009
+ const defaultCopy = waitlistClaimRequiresPortalLogin ? {
6010
+ ...EVENT_PORTAL_AUTH_COPY["waitlist-claim"],
6011
+ description: loginMessage ?? "Log in to continue with your waitlist claim."
6012
+ } : EVENT_PORTAL_AUTH_COPY.membership;
6013
+ return demoEmailSuppressed && !waitlistClaimRequiresPortalLogin ? {
6014
+ ...defaultCopy,
6015
+ buttonText: "Get a sign-in link →"
6016
+ } : defaultCopy;
6017
+ }
5896
6018
  function getActiveTicketTypes(event) {
5897
6019
  return event?.pricing.kind === "tiered" ? event.pricing.options.filter((ticketType) => ticketType.isActive).sort((left, right) => left.sortOrder - right.sortOrder).map(({ id, ...ticketType }) => ({
5898
6020
  ...ticketType,
@@ -5940,11 +6062,18 @@ function useConfiguredEventRegistrationWizard(props) {
5940
6062
  });
5941
6063
  }
5942
6064
  function EventRegistrationWizard(props) {
5943
- const { occurrenceContext, subject, events, showVenue = true, showCapacity = true, successMessage = "Thank you for registering! Check your email for confirmation details.", buttonText = "Complete Registration", buttonVariant = "primary", className, spamProtectionEnabled, supportEmail } = props;
6065
+ const wizard = useConfiguredEventRegistrationWizard(props);
6066
+ return /* @__PURE__ */ jsx(EventRegistrationWizardView, {
6067
+ ...props,
6068
+ wizard
6069
+ });
6070
+ }
6071
+ function EventRegistrationWizardView(viewProps) {
6072
+ const { wizard, ...props } = viewProps;
6073
+ const { showVenue = true, showCapacity = true, successMessage, buttonText = "Complete Registration", buttonVariant = "primary", className, spamProtectionEnabled, supportEmail } = props;
5944
6074
  const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
5945
6075
  const registrationRootClassName = `event-registration ${className || ""}`;
5946
6076
  const registrationRootRef = React.useRef(null);
5947
- const wizard = useConfiguredEventRegistrationWizard(props);
5948
6077
  useEventCheckoutHandoffRestore(wizard.step === "redirecting");
5949
6078
  const [bookingOverlayOpen, setBookingOverlayOpen] = useState(false);
5950
6079
  const [floatingPortalRoot, setFloatingPortalRoot] = useState(null);
@@ -6010,10 +6139,7 @@ function EventRegistrationWizard(props) {
6010
6139
  const summaryPriceLabel = summaryEvent ? formatEventPriceDisplay(summaryEvent.pricing) : null;
6011
6140
  const summaryAvailabilityLabel = getAvailabilityLabel(summaryEvent, wizard.selectedAttendanceMode);
6012
6141
  const waitlistClaimRequiresPortalLogin = wizard.waitlistClaim.requiresPortalLogin && wizard.portalAuthState !== "authenticated" && wizard.portalAuthState !== "checking";
6013
- const portalAuthCopy = waitlistClaimRequiresPortalLogin ? {
6014
- ...EVENT_PORTAL_AUTH_COPY["waitlist-claim"],
6015
- description: wizard.waitlistClaim.loginMessage ?? "Log in to continue with your waitlist claim."
6016
- } : EVENT_PORTAL_AUTH_COPY.membership;
6142
+ const portalAuthCopy = getPortalAuthCopy(waitlistClaimRequiresPortalLogin, wizard.waitlistClaim.loginMessage, props.demoEmailSuppressed);
6017
6143
  const showPortalAuthPrompt = waitlistClaimRequiresPortalLogin || wizard.step === "select-tickets" && wizard.portalAuthState !== "authenticated" && wizard.portalAuthState !== "checking" && summaryEventPricingType !== "free";
6018
6144
  const renderRegistrationSurface = (variant) => /* @__PURE__ */ jsx(EventRegistrationSurface, {
6019
6145
  variant,
@@ -6030,7 +6156,8 @@ function EventRegistrationWizard(props) {
6030
6156
  buttonText,
6031
6157
  buttonVariant,
6032
6158
  supportEmail,
6033
- successMessage
6159
+ successMessage,
6160
+ demoEmailSuppressed: props.demoEmailSuppressed
6034
6161
  });
6035
6162
  const isEmbedded = (className ?? "").includes("event-registration--embedded");
6036
6163
  const overlayEnabled = props.overlayEnabled === true;