@riverbankcms/sdk 0.147.0 → 0.149.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 (442) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -1
  3. package/dist/{PreviewEditorSidebar-DtpB3_sS.mjs → PreviewEditorSidebar-DBKln68M.mjs} +301 -205
  4. package/dist/{PreviewEditorUI-DxTLgaHo.mjs → PreviewEditorUI-DpRX4Mum.mjs} +68 -63
  5. package/dist/{PreviewQueryProvider-Dd4dxOiU.mjs → PreviewQueryProvider-C0mndwHB.mjs} +3 -3
  6. package/dist/{SdkPreviewModeRuntime-DMMNCngt.mjs → SdkPreviewModeRuntime-DJPmPY-r.mjs} +1247 -541
  7. package/dist/{SiteChromeCustomizeContext-DQXZXiqS.mjs → SiteChromeCustomizeContext-JYA0cJ_Z.mjs} +209720 -204978
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +0 -33
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +0 -3
  10. package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
  11. package/dist/_dts/api/src/accountApi.d.ts +1 -1
  12. package/dist/_dts/api/src/admin.d.ts +22 -22
  13. package/dist/_dts/api/src/aiPatch.d.ts +2 -2
  14. package/dist/_dts/api/src/aiPlayground.d.ts +1 -0
  15. package/dist/_dts/api/src/analytics.d.ts +2 -2
  16. package/dist/_dts/api/src/apiEndpointTypes.d.ts +2 -0
  17. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  18. package/dist/_dts/api/src/auth.d.ts +10 -10
  19. package/dist/_dts/api/src/availability.d.ts +6 -6
  20. package/dist/_dts/api/src/billing.d.ts +42 -15
  21. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +8 -0
  22. package/dist/_dts/api/src/billingEndpointTypes.d.ts +15 -6
  23. package/dist/_dts/api/src/blocks.d.ts +15 -14
  24. package/dist/_dts/api/src/blocksKeys.d.ts +2 -0
  25. package/dist/_dts/api/src/bookingConfig.d.ts +33 -50
  26. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -6
  27. package/dist/_dts/api/src/bookingOperations.d.ts +9 -11
  28. package/dist/_dts/api/src/bookingRecords.d.ts +16 -11
  29. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +5 -5
  30. package/dist/_dts/api/src/bookings.d.ts +7 -7
  31. package/dist/_dts/api/src/calendar.d.ts +9 -9
  32. package/dist/_dts/api/src/clientErrorReporting.d.ts +11 -0
  33. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -8
  34. package/dist/_dts/api/src/common/cancellation.d.ts +23 -0
  35. package/dist/_dts/api/src/common/envelope.d.ts +2 -2
  36. package/dist/_dts/api/src/content-editor.d.ts +2 -2
  37. package/dist/_dts/api/src/contentEntries.d.ts +17 -48
  38. package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
  39. package/dist/_dts/api/src/contentTypes.d.ts +11 -11
  40. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
  41. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +1 -1
  42. package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
  43. package/dist/_dts/api/src/domains.d.ts +16 -16
  44. package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
  45. package/dist/_dts/api/src/emailSettings.d.ts +4 -4
  46. package/dist/_dts/api/src/endpoints.d.ts +135 -51
  47. package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
  48. package/dist/_dts/api/src/eventManagementContracts.d.ts +29 -7
  49. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +0 -8
  50. package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
  51. package/dist/_dts/api/src/footerSettings.d.ts +6 -6
  52. package/dist/_dts/api/src/index.d.ts +8 -7
  53. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  54. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  55. package/dist/_dts/api/src/navigation.d.ts +5 -5
  56. package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
  57. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
  58. package/dist/_dts/api/src/pages.d.ts +7 -7
  59. package/dist/_dts/api/src/performance.d.ts +1 -1
  60. package/dist/_dts/api/src/public/index.d.ts +1 -1
  61. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +4 -2
  62. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +6 -29
  63. package/dist/_dts/api/src/redirects.d.ts +3 -3
  64. package/dist/_dts/api/src/request.d.ts +11 -2
  65. package/dist/_dts/api/src/resources.d.ts +4 -4
  66. package/dist/_dts/api/src/routes.d.ts +8 -3
  67. package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -2
  68. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
  69. package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
  70. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
  71. package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
  72. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
  73. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +9 -2
  74. package/dist/_dts/api/src/seo.d.ts +4 -4
  75. package/dist/_dts/api/src/services.d.ts +4 -4
  76. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -8
  77. package/dist/_dts/api/src/siteMembers.d.ts +10 -10
  78. package/dist/_dts/api/src/siteOnboarding.d.ts +14 -0
  79. package/dist/_dts/api/src/siteOperations.d.ts +6 -2
  80. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
  81. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
  82. package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
  83. package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
  84. package/dist/_dts/billing/src/components/index.d.ts +25 -40
  85. package/dist/_dts/billing/src/membership/index.d.ts +1 -3
  86. package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
  87. package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
  88. package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
  89. package/dist/_dts/billing/src/plans/types.d.ts +5 -15
  90. package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
  91. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
  92. package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
  93. package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
  94. package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
  95. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
  96. package/dist/_dts/blocks/src/client/events.d.ts +3 -0
  97. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
  98. package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +2 -2
  99. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +54 -14
  100. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +4 -13
  101. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  102. package/dist/_dts/blocks/src/portal/types.d.ts +9 -8
  103. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
  104. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
  105. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +28 -28
  106. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +7 -2
  107. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +84 -160
  108. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
  109. package/dist/_dts/blocks/src/system/blocks/shop.shared.d.ts +31 -4
  110. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
  111. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  112. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -2
  113. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +3 -1
  114. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +6 -0
  115. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
  116. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
  117. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
  118. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +72 -12
  119. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +36 -6
  120. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingNowIso.d.ts +8 -0
  121. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -0
  122. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
  123. package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
  124. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
  125. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +3 -1
  126. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +4 -0
  127. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +9 -0
  128. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
  129. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +17 -2
  130. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +1 -0
  132. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +1 -0
  133. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
  134. package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +9 -2
  135. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +14 -2
  136. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  137. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
  138. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +2 -0
  139. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -1
  140. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +3 -3
  141. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -0
  142. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -5
  143. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -0
  144. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -5
  145. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
  146. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
  147. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
  148. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
  149. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
  150. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +29 -29
  151. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
  152. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
  153. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +54 -6
  154. package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +7 -2
  155. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
  156. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
  157. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  158. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
  159. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
  160. package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +54 -0
  161. package/dist/_dts/commerce/src/purchase/checkoutCommitPlan.d.ts +58 -13
  162. package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
  163. package/dist/_dts/commerce/src/purchase/checkoutPaymentPlanPlanning.d.ts +16 -21
  164. package/dist/_dts/commerce/src/purchase/checkoutPaymentTerms.d.ts +23 -40
  165. package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +2 -2
  166. package/dist/_dts/commerce/src/purchase/checkoutStripeSessionPlanning.d.ts +5 -4
  167. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  168. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -3
  169. package/dist/_dts/commerce/src/purchase/membershipOrderItemMetadata.d.ts +4 -0
  170. package/dist/_dts/commerce/src/purchase/oneTimeCheckoutPlanning.d.ts +9 -4
  171. package/dist/_dts/commerce/src/purchase/orderInstalmentClosure.d.ts +13 -1
  172. package/dist/_dts/commerce/src/purchase/orderInstalmentLifecycle.d.ts +5 -0
  173. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +3 -1
  174. package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +7 -1
  175. package/dist/_dts/commerce/src/purchase/refundRailSplit.d.ts +1 -1
  176. package/dist/_dts/commerce/src/purchase/stateTransitions.d.ts +2 -2
  177. package/dist/_dts/commerce/src/purchase/stripeMinimumCharge.d.ts +6 -0
  178. package/dist/_dts/commerce/src/purchase/types.d.ts +2 -1
  179. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
  180. package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
  181. package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
  182. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
  183. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
  184. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
  185. package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
  186. package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
  187. package/dist/_dts/content-editor/src/controller/editLeaseHandover.d.ts +30 -0
  188. package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
  189. package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
  190. package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
  191. package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
  192. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
  193. package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
  194. package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
  195. package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
  196. package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
  197. package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
  198. package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
  199. package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
  200. package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
  201. package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
  202. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
  203. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
  204. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
  205. package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
  206. package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
  207. package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
  208. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
  209. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
  210. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
  211. package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
  212. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
  213. package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
  214. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
  215. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
  216. package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
  217. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
  218. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
  219. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
  220. package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
  221. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
  222. package/dist/_dts/content-editor/src/index.d.ts +26 -7
  223. package/dist/_dts/content-editor/src/lib/browserStorage.d.ts +5 -0
  224. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
  225. package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
  226. package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
  227. package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
  228. package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
  229. package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
  230. package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
  231. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
  232. package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
  233. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
  234. package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
  235. package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
  236. package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
  237. package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
  238. package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
  239. package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
  240. package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
  241. package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
  242. package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
  243. package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
  244. package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
  245. package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
  246. package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
  247. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
  248. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
  249. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
  250. package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
  251. package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
  252. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
  253. package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
  254. package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
  255. package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
  256. package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
  257. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
  258. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
  259. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
  260. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
  261. package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
  262. package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
  263. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  264. package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
  265. package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
  266. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
  267. package/dist/_dts/content-model/src/types.d.ts +0 -1
  268. package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
  269. package/dist/_dts/core/src/booking-flexible-balance.d.ts +2 -2
  270. package/dist/_dts/core/src/booking-instalment-deposit.d.ts +20 -0
  271. package/dist/_dts/core/src/booking-live-payment-terms.d.ts +72 -0
  272. package/dist/_dts/core/src/booking-payment-options.d.ts +24 -0
  273. package/dist/_dts/core/src/booking-payment-schemas.d.ts +522 -0
  274. package/dist/_dts/core/src/branded.d.ts +15 -0
  275. package/dist/_dts/core/src/currency-format.d.ts +8 -2
  276. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
  277. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
  278. package/dist/_dts/core/src/edit-lease.d.ts +60 -0
  279. package/dist/_dts/core/src/editor-state.d.ts +38 -13
  280. package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
  281. package/dist/_dts/core/src/html-entities.d.ts +6 -0
  282. package/dist/_dts/core/src/index.d.ts +7 -0
  283. package/dist/_dts/core/src/uuid.d.ts +7 -5
  284. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +456 -189
  285. package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
  286. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
  287. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
  288. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
  289. package/dist/_dts/editor/src/index.d.ts +1 -1
  290. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
  291. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  292. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  293. package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
  294. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
  295. package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
  296. package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
  297. package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
  298. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
  299. package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
  300. package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
  301. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
  302. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
  303. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
  304. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
  305. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
  306. package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
  307. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
  308. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
  309. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
  310. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
  311. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
  312. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
  313. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +3 -1
  314. package/dist/_dts/media-editor/src/MediaPickerMiniDialog.d.ts +10 -0
  315. package/dist/_dts/media-editor/src/context.d.ts +1 -1
  316. package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
  317. package/dist/_dts/media-editor/src/index.d.ts +2 -0
  318. package/dist/_dts/media-editor/src/provider.d.ts +3 -2
  319. package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
  320. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
  321. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
  322. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +6 -3
  323. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
  324. package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
  325. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
  326. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
  327. package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
  328. package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
  329. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  330. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  331. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  332. package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
  333. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  334. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +23 -14
  335. package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
  336. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
  337. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  338. package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
  339. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
  340. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
  341. package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
  342. package/dist/_dts/preview-next/src/client/previewAuthStore.d.ts +7 -0
  343. package/dist/_dts/preview-next/src/constants.d.ts +4 -0
  344. package/dist/_dts/preview-next/src/keepAlive.d.ts +1 -0
  345. package/dist/_dts/realtime/src/client.d.ts +3 -0
  346. package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
  347. package/dist/_dts/realtime/src/drafts.d.ts +210 -0
  348. package/dist/_dts/realtime/src/index.d.ts +3 -0
  349. package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
  350. package/dist/_dts/realtime/src/types.d.ts +113 -0
  351. package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
  352. package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
  353. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
  354. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  355. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
  356. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -0
  357. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -12
  358. package/dist/_dts/sdk/src/version.d.ts +1 -1
  359. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  360. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  361. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +0 -5
  362. package/dist/_dts/ui/src/color-picker.d.ts +1 -1
  363. package/dist/_dts/ui/src/palette/useHexDraft.d.ts +7 -0
  364. package/dist/client/{BookingMailingListNote-1n4Ch_u_.mjs → BookingMailingListNote-Cr3EeTP5.mjs} +504 -163
  365. package/dist/client/DemoBookingPortalAccess-BFGB1Fay.mjs +344 -0
  366. package/dist/client/{EventCombined.client-C0pgma9y.mjs → EventCombined.client-DKYV0_ft.mjs} +6 -6
  367. package/dist/client/{EventListing.client-4fhLOvHP.mjs → EventListing.client-B9UIcEYc.mjs} +2 -2
  368. package/dist/client/{LeafletStaticMap-DScC4F3w.mjs → LeafletStaticMap-CFLPkP0K.mjs} +1 -1
  369. package/dist/client/{TerminalPanel-B5ZUsYhe.mjs → TerminalPanel-JjmgxEsR.mjs} +1 -1
  370. package/dist/client/{ThemedButton-DoVIV1Ao.mjs → ThemedButton-CKV1Jh2m.mjs} +1 -1
  371. package/dist/client/{accordion-CoT5g7zo.mjs → accordion-DXWIfT3T.mjs} +1 -1
  372. package/dist/client/{bookingForm-BWxB46xD.mjs → bookingForm-CjZgHNvv.mjs} +216 -63
  373. package/dist/client/bookings.mjs +1187 -692
  374. package/dist/client/{carousel-DtNYWFd3.mjs → carousel-DSLikmvZ.mjs} +1 -1
  375. package/dist/client/{cart-z4qZih1Y.mjs → cart-HDjWReFt.mjs} +3 -3
  376. package/dist/client/{checkout-DpL7euFH.mjs → checkout-CUvRZA3W.mjs} +3 -3
  377. package/dist/client/{checkoutUrls-BEfR7kVu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
  378. package/dist/client/client.mjs +2711 -1684
  379. package/dist/client/{context-C8TinPJc.mjs → context-DFmaZa-Q.mjs} +4 -3
  380. package/dist/client/{dates-vwwxTeB0.mjs → dates-BBep1JnF.mjs} +56 -11
  381. package/dist/client/{eventCalendar-DIbHfJXO.mjs → eventCalendar-zEobhxo4.mjs} +9 -9
  382. package/dist/client/{eventCombined-DoGMJ6cg.mjs → eventCombined-Dp7bz5k-.mjs} +4 -4
  383. package/dist/client/{eventDetails-BjN9v6a1.mjs → eventDetails-FE-zqTt7.mjs} +4 -4
  384. package/dist/client/{eventListing-DajjWgOv.mjs → eventListing-BMt5snal.mjs} +4 -4
  385. package/dist/client/{eventRegistration-DMq9gMA-.mjs → eventRegistration-O6ZxHfOb.mjs} +422 -570
  386. package/dist/client/{form-Qf6qTbos.mjs → form-DFa1D8vt.mjs} +3 -3
  387. package/dist/client/{headerSection-D7qJrqFX.mjs → headerSection-CmjHLR-N.mjs} +3 -3
  388. package/dist/client/hooks.mjs +414 -182
  389. package/dist/client/{locationMap-CCF9-t_0.mjs → locationMap-BXKP_lGh.mjs} +3 -3
  390. package/dist/client/{media-CwBGetqC.mjs → media-Cl38iOMI.mjs} +10 -3
  391. package/dist/client/{newsletterForm-DzCLSP4S.mjs → newsletterForm-CU-HmxGx.mjs} +3 -3
  392. package/dist/client/{pricing-Cgxv2KLC.mjs → pricing-KEAEsibq.mjs} +1 -1
  393. package/dist/client/{productDetail-ru9w5GHx.mjs → productDetail-Ckp7MGnt.mjs} +3 -3
  394. package/dist/client/{productList-zaapKSl-.mjs → productList-D91V0sYa.mjs} +3 -3
  395. package/dist/client/{propsDecoder-CwvvNOHx.mjs → propsDecoder-DZd6RJeA.mjs} +244 -94
  396. package/dist/client/rendering/client.mjs +2656 -1705
  397. package/dist/client/rendering/islands.mjs +18 -18
  398. package/dist/client/rendering.mjs +3430 -2352
  399. package/dist/client/{routeIslandApiConfig-BwVFo0Y4.mjs → routeIslandApiConfig-E1EkhhYY.mjs} +1 -1
  400. package/dist/client/{shop-mktkXvbV.mjs → shop-4F2jLQPI.mjs} +131 -85
  401. package/dist/client/{shop-commerce-De7gEnkA.mjs → shop-commerce-BbfCJjB3.mjs} +25 -13
  402. package/dist/client/{shop-commerce-store-B3MCxIBW.mjs → shop-commerce-store-vicweP2K.mjs} +1 -1
  403. package/dist/client/{shopShared-TqExh235.mjs → shopShared-DlONJt0T.mjs} +4 -4
  404. package/dist/client/{useEventFilters-n_OjkIjX.mjs → useEventFilters-COYyL3m7.mjs} +32 -17
  405. package/dist/preview-next/before-render.mjs +207 -105
  406. package/dist/preview-next/client/runtime.mjs +4 -4
  407. package/dist/preview-next/constants.mjs +5 -1
  408. package/dist/preview-next/index.mjs +5 -1
  409. package/dist/preview-next/keepAlive.mjs +341 -165
  410. package/dist/preview-next/middleware.mjs +207 -105
  411. package/dist/{previewAuthStore-C_EHQ5XA.mjs → previewAuthStore-BBmV7UsW.mjs} +243 -112
  412. package/dist/{sdk-runtime-BIkJg5y1.mjs → sdk-runtime-CwvFFjB-.mjs} +2 -2
  413. package/dist/{separator-C9qDP95Z.mjs → separator-ByL72zUT.mjs} +1 -1
  414. package/dist/server/components.mjs +1839 -1475
  415. package/dist/server/config-validation.mjs +381 -166
  416. package/dist/server/config.mjs +381 -166
  417. package/dist/server/data.mjs +381 -166
  418. package/dist/server/index.mjs +214 -110
  419. package/dist/server/next.mjs +663 -351
  420. package/dist/server/page-converter.mjs +198 -79
  421. package/dist/server/prebuild.mjs +1 -1
  422. package/dist/server/rendering/server.mjs +1536 -1169
  423. package/dist/server/rendering.mjs +2432 -2068
  424. package/dist/server/routing.mjs +456 -173
  425. package/dist/server/server.mjs +447 -267
  426. package/package.json +1 -1
  427. package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +0 -123
  428. package/dist/_dts/billing/src/plans/display.d.ts +0 -15
  429. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +0 -3
  430. package/dist/_dts/commerce/src/purchase/checkoutPaymentTermPlanning.d.ts +0 -10
  431. package/dist/_dts/commerce/src/purchase/checkoutValidatedItemPlanning.d.ts +0 -55
  432. package/dist/_dts/commerce/src/purchase/orderInstalmentPayoff.d.ts +0 -24
  433. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
  434. package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
  435. package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
  436. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
  437. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
  438. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
  439. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
  440. package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
  441. package/dist/_dts/content-editor/src/types.d.ts +0 -44
  442. package/dist/client/DiscountCodeDisclosure-CKJtz0mY.mjs +0 -137
@@ -1,9 +1,10 @@
1
1
  "use client";
2
- import { Vt as assertNever$2, bn as formatCurrencyAmount } from "./propsDecoder-CwvvNOHx.mjs";
3
- import { i as CheckIcon } from "./TerminalPanel-B5ZUsYhe.mjs";
2
+ import { Cn as formatCurrencyAmount, Wt as assertNever$3, wn as parseCurrencyCode } from "./propsDecoder-DZd6RJeA.mjs";
3
+ import { i as CheckIcon } from "./TerminalPanel-JjmgxEsR.mjs";
4
4
  import { n as getBookingMailingListNoteCopy } from "./mailingListSignupCopy-DZSHZrm6.mjs";
5
- import { n as RichText } from "./checkoutUrls-BEfR7kVu.mjs";
6
- import { useCallback, useEffect, useReducer, useRef } from "react";
5
+ import { n as RichText } from "./checkoutUrls-CXhko2Rv.mjs";
6
+ import { useCallback, useEffect, useReducer, useRef, useState } from "react";
7
+ import { z } from "zod";
7
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region ../core/src/date-math.ts
9
10
  function addDaysToDate(date, dayCount) {
@@ -20,6 +21,18 @@ function subtractDaysFromIso(isoString, dayCount) {
20
21
  return addDaysToIso(isoString, -dayCount);
21
22
  }
22
23
  //#endregion
24
+ //#region ../core/src/money-input.ts
25
+ function unsafeAsNonNegativeCents(value) {
26
+ return value;
27
+ }
28
+ /**
29
+ * Normalizes a derived amount to non-negative whole cents. This intentionally
30
+ * clamps negatives to zero; use parseNonNegativeCents for validation.
31
+ */
32
+ function toNonNegativeCents(value) {
33
+ return unsafeAsNonNegativeCents(Math.max(0, Math.trunc(value)));
34
+ }
35
+ //#endregion
23
36
  //#region ../core/src/booking-flexible-balance.ts
24
37
  function clampFlexibleBalanceConfiguredAmount(amountCents, totalAmountCents) {
25
38
  return Math.max(0, Math.min(amountCents, totalAmountCents));
@@ -31,10 +44,10 @@ function resolveFlexibleBalanceDueAt(input) {
31
44
  switch (input.dueDateRule.kind) {
32
45
  case "relative_to_start_date": return subtractDaysFromIso(input.bookingStartAt, input.dueDateRule.daysBeforeStart);
33
46
  case "fixed_calendar_date": return input.dueDateRule.dueAt;
34
- default: return assertNever$1(input.dueDateRule);
47
+ default: return assertNever$2(input.dueDateRule);
35
48
  }
36
49
  }
37
- function assertNever$1(value) {
50
+ function assertNever$2(value) {
38
51
  throw new Error(`Unexpected value: ${String(value)}`);
39
52
  }
40
53
  //#endregion
@@ -44,7 +57,7 @@ function isDepositBearingBookingInstalmentPlan(plan) {
44
57
  case "deposit_plus_one_remainder":
45
58
  case "deposit_plus_scheduled_instalments": return true;
46
59
  case "equal_scheduled_instalments": return false;
47
- default: return assertNever(plan);
60
+ default: return assertNever$1(plan);
48
61
  }
49
62
  }
50
63
  function getBookingInstalmentDepositRefundability(plan) {
@@ -70,7 +83,7 @@ function addIntervalPreservingMonthAnchor(isoString, intervalCount, intervalUnit
70
83
  date.setUTCDate(date.getUTCDate() + intervalCount * 7);
71
84
  return date.toISOString();
72
85
  case "month": return addMonthsPreservingAnchorDay(date, intervalCount).toISOString();
73
- default: return assertNever(intervalUnit);
86
+ default: return assertNever$1(intervalUnit);
74
87
  }
75
88
  }
76
89
  function getBookingInstalmentPlanIntervalCount(plan) {
@@ -78,7 +91,7 @@ function getBookingInstalmentPlanIntervalCount(plan) {
78
91
  case "deposit_plus_one_remainder": return plan.remainderDueCount;
79
92
  case "deposit_plus_scheduled_instalments":
80
93
  case "equal_scheduled_instalments": return plan.intervalCount;
81
- default: return assertNever(plan);
94
+ default: return assertNever$1(plan);
82
95
  }
83
96
  }
84
97
  function omitZeroAmountFutureRows(rows) {
@@ -94,10 +107,380 @@ function addMonthsPreservingAnchorDay(date, intervalCount) {
94
107
  nextMonth.setUTCDate(Math.min(anchorDay, lastDayOfTargetMonth));
95
108
  return nextMonth;
96
109
  }
97
- function assertNever(value) {
110
+ function assertNever$1(value) {
111
+ throw new Error(`Unexpected value: ${String(value)}`);
112
+ }
113
+ //#endregion
114
+ //#region ../blocks/src/system/runtime/hooks/useBookingNowIso.ts
115
+ /**
116
+ * The moment a booking or registration flow opened, as an ISO timestamp.
117
+ *
118
+ * Payment previews take this as their "now" so the pure view-model builders
119
+ * never read the clock themselves. It's captured once per mount, which keeps
120
+ * memoised previews stable across renders.
121
+ */
122
+ function useBookingNowIso() {
123
+ const [nowIso] = useState(() => (/* @__PURE__ */ new Date()).toISOString());
124
+ return nowIso;
125
+ }
126
+ //#endregion
127
+ //#region ../commerce/src/utils/assertNever.ts
128
+ function assertNever(value, message) {
129
+ if (message) throw new Error(message);
98
130
  throw new Error(`Unexpected value: ${String(value)}`);
99
131
  }
100
132
  //#endregion
133
+ //#region ../commerce/src/purchase/bookingInstalmentSchedule.ts
134
+ function resolveBookingInitialInstalmentAmountCents(input) {
135
+ const totalAmountCents = Math.max(0, input.totalAmountCents);
136
+ switch (input.plan.kind) {
137
+ case "deposit_plus_one_remainder":
138
+ case "deposit_plus_scheduled_instalments": return clampConfiguredAmount(input.plan.depositAmountCents, totalAmountCents);
139
+ case "equal_scheduled_instalments": return splitAmountWithRemainderInFirst(totalAmountCents, input.plan.instalmentCount)[0] ?? 0;
140
+ default: return assertNever(input.plan);
141
+ }
142
+ }
143
+ function buildBookingInstalmentSchedule(input) {
144
+ const totalAmountCents = Math.max(0, input.totalAmountCents);
145
+ switch (input.plan.kind) {
146
+ case "deposit_plus_one_remainder": {
147
+ const depositAmountCents = resolveBookingInitialInstalmentAmountCents(input);
148
+ const remainderAmountCents = Math.max(0, totalAmountCents - depositAmountCents);
149
+ return omitZeroAmountFutureRows([createScheduleRow({
150
+ sequence: 1,
151
+ stateAtBooking: "paid_today",
152
+ dueAt: input.anchorAt,
153
+ amountCents: depositAmountCents
154
+ }), createScheduleRow({
155
+ sequence: 2,
156
+ stateAtBooking: "scheduled",
157
+ dueAt: addIntervalPreservingMonthAnchor(input.anchorAt, input.plan.remainderDueCount, input.plan.intervalUnit),
158
+ amountCents: remainderAmountCents
159
+ })]);
160
+ }
161
+ case "deposit_plus_scheduled_instalments": {
162
+ const plan = input.plan;
163
+ const depositAmountCents = resolveBookingInitialInstalmentAmountCents(input);
164
+ const instalmentAmounts = splitAmountWithRemainderInFirst(Math.max(0, totalAmountCents - depositAmountCents), plan.instalmentCount);
165
+ return omitZeroAmountFutureRows([createScheduleRow({
166
+ sequence: 1,
167
+ stateAtBooking: "paid_today",
168
+ dueAt: input.anchorAt,
169
+ amountCents: depositAmountCents
170
+ }), ...instalmentAmounts.map((amountCents, index) => createScheduleRow({
171
+ sequence: index + 2,
172
+ stateAtBooking: "scheduled",
173
+ dueAt: addIntervalPreservingMonthAnchor(input.anchorAt, plan.intervalCount * (index + 1), plan.intervalUnit),
174
+ amountCents
175
+ }))]);
176
+ }
177
+ case "equal_scheduled_instalments": {
178
+ const plan = input.plan;
179
+ return omitZeroAmountFutureRows(splitAmountWithRemainderInFirst(totalAmountCents, plan.instalmentCount).map((amountCents, index) => createScheduleRow({
180
+ sequence: index + 1,
181
+ stateAtBooking: index === 0 ? "paid_today" : "scheduled",
182
+ dueAt: index === 0 ? input.anchorAt : addIntervalPreservingMonthAnchor(input.anchorAt, plan.intervalCount * index, plan.intervalUnit),
183
+ amountCents
184
+ })));
185
+ }
186
+ default: return assertNever(input.plan);
187
+ }
188
+ }
189
+ function createScheduleRow(input) {
190
+ return {
191
+ id: `payment-${input.sequence}`,
192
+ sequence: input.sequence,
193
+ stateAtBooking: input.stateAtBooking,
194
+ dueAt: input.dueAt,
195
+ amountCents: input.amountCents
196
+ };
197
+ }
198
+ //#endregion
199
+ //#region ../commerce/src/purchase/checkoutPaymentFlow.ts
200
+ function planCheckoutPaymentFlow(options) {
201
+ const amountDueCents = toNonNegativeCents(options.amountDueCents);
202
+ const discountCents = toNonNegativeCents(options.discountCents);
203
+ const availableCreditCents = toNonNegativeCents(options.availableCreditCents);
204
+ const minimumStripeChargeCents = toNonNegativeCents(options.minimumStripeChargeCents ?? 0);
205
+ if (amountDueCents <= 0) return {
206
+ kind: "bypass",
207
+ bypassReason: discountCents > 0 ? "discount_free" : "free",
208
+ reserveCreditCents: 0
209
+ };
210
+ if (!options.creditCurrencyMatches || availableCreditCents <= 0) return {
211
+ kind: "stripe",
212
+ reserveCreditCents: toNonNegativeCents(0)
213
+ };
214
+ if (availableCreditCents >= amountDueCents) return {
215
+ kind: "store_credit_only",
216
+ reserveCreditCents: amountDueCents
217
+ };
218
+ return {
219
+ kind: "stripe",
220
+ reserveCreditCents: planMixedPaymentCreditReservation({
221
+ amountDueCents,
222
+ availableCreditCents,
223
+ minimumStripeChargeCents
224
+ })
225
+ };
226
+ }
227
+ function planMixedPaymentCreditReservation(input) {
228
+ const chargeAfterFullCredit = input.amountDueCents - input.availableCreditCents;
229
+ if (input.minimumStripeChargeCents <= 0 || chargeAfterFullCredit <= 0 || chargeAfterFullCredit >= input.minimumStripeChargeCents) return input.availableCreditCents;
230
+ if (input.amountDueCents < input.minimumStripeChargeCents) return toNonNegativeCents(0);
231
+ return toNonNegativeCents(input.amountDueCents - input.minimumStripeChargeCents);
232
+ }
233
+ /**
234
+ * Apply site credit to a flexible-balance booking before card payment.
235
+ *
236
+ * Credit first reduces the configured payment due now. Once that payment is
237
+ * covered, any remaining credit reduces the later balance. If a partial credit
238
+ * application would leave a positive card charge below Stripe's minimum, less
239
+ * credit is used so the configured payment can still be collected.
240
+ */
241
+ function planFlexibleBalanceCreditFirst(input) {
242
+ const totalCents = toNonNegativeCents(input.totalAfterDiscountCents);
243
+ const configuredDueNowCents = toNonNegativeCents(Math.min(input.configuredPaymentDueNowCents, totalCents));
244
+ const availableCreditCents = toNonNegativeCents(input.creditCurrencyMatches ? input.availableCreditCents : 0);
245
+ const minimumStripeChargeCents = toNonNegativeCents(input.minimumStripeChargeCents ?? 0);
246
+ if (availableCreditCents >= totalCents && totalCents > 0) return {
247
+ kind: "credit_only",
248
+ reserveCreditCents: totalCents,
249
+ cardDueNowCents: toNonNegativeCents(0),
250
+ laterBalanceCents: toNonNegativeCents(0)
251
+ };
252
+ let reserveCreditCents = toNonNegativeCents(Math.min(availableCreditCents, totalCents));
253
+ if (reserveCreditCents >= configuredDueNowCents) return {
254
+ kind: "flexible_balance",
255
+ reserveCreditCents,
256
+ cardDueNowCents: toNonNegativeCents(0),
257
+ laterBalanceCents: toNonNegativeCents(totalCents - reserveCreditCents)
258
+ };
259
+ const plannedCardDueNowCents = toNonNegativeCents(configuredDueNowCents - reserveCreditCents);
260
+ if (plannedCardDueNowCents > 0 && plannedCardDueNowCents < minimumStripeChargeCents) {
261
+ if (configuredDueNowCents < minimumStripeChargeCents) return {
262
+ kind: "card_below_minimum",
263
+ reserveCreditCents: toNonNegativeCents(0),
264
+ cardDueNowCents: configuredDueNowCents,
265
+ laterBalanceCents: toNonNegativeCents(totalCents - configuredDueNowCents)
266
+ };
267
+ reserveCreditCents = toNonNegativeCents(configuredDueNowCents - minimumStripeChargeCents);
268
+ }
269
+ const cardDueNowCents = toNonNegativeCents(configuredDueNowCents - reserveCreditCents);
270
+ return {
271
+ kind: "flexible_balance",
272
+ reserveCreditCents,
273
+ cardDueNowCents,
274
+ laterBalanceCents: toNonNegativeCents(totalCents - reserveCreditCents - cardDueNowCents)
275
+ };
276
+ }
277
+ //#endregion
278
+ //#region ../commerce/src/purchase/settlement.ts
279
+ function normalizeCurrencyCode(raw) {
280
+ const normalized = raw.trim().toUpperCase();
281
+ if (!/^[A-Z]{3}$/.test(normalized)) throw new Error(`Invalid currency code: ${raw}`);
282
+ return normalized;
283
+ }
284
+ //#endregion
285
+ //#region ../commerce/src/purchase/checkoutSessionMetadata.ts
286
+ const datedOfferingSharedEngineMetadataShape = {
287
+ datedOfferingEngineContractVersion: z.literal("shared_v1"),
288
+ datedOfferingEngineRouteKind: z.literal("shared_whole_series_registration"),
289
+ datedOfferingCapacityHoldId: z.string().uuid(),
290
+ datedOfferingCapacityHoldAuditRef: z.string().uuid(),
291
+ customerId: z.string().uuid(),
292
+ eventSeriesId: z.string().uuid()
293
+ };
294
+ z.object(datedOfferingSharedEngineMetadataShape);
295
+ const orderCheckoutSessionMetadataBaseShape = {
296
+ type: z.literal("order"),
297
+ site_id: z.string().uuid(),
298
+ order_id: z.string().uuid().optional(),
299
+ customer_email: z.string().email().optional(),
300
+ customer_name: z.string().optional(),
301
+ product_id: z.string().uuid().optional(),
302
+ attendee_id: z.string().uuid().optional(),
303
+ occurrence_id: z.string().uuid().optional(),
304
+ tickets_count: z.string().optional(),
305
+ notes: z.string().optional(),
306
+ discount_redemption_id: z.string().uuid().optional(),
307
+ discount_code_id: z.string().uuid().optional(),
308
+ discount_code: z.string().optional(),
309
+ discount_public_label: z.string().optional(),
310
+ credit_reservation_id: z.string().uuid().optional(),
311
+ credit_reserved_cents: z.string().optional(),
312
+ discount_code_amount_cents: z.string().optional(),
313
+ order_payment_reason: z.enum([
314
+ "instalment_payoff",
315
+ "flexible_balance_initial",
316
+ "flexible_balance_paydown"
317
+ ]).optional(),
318
+ order_payment_plan_id: z.string().uuid().optional(),
319
+ order_flexible_balance_contract_id: z.string().uuid().optional()
320
+ };
321
+ const absentDatedOfferingSharedEngineMetadataShape = {
322
+ datedOfferingEngineContractVersion: z.never().optional(),
323
+ datedOfferingEngineRouteKind: z.never().optional(),
324
+ datedOfferingCapacityHoldId: z.never().optional(),
325
+ datedOfferingCapacityHoldAuditRef: z.never().optional(),
326
+ customerId: z.never().optional(),
327
+ eventSeriesId: z.never().optional()
328
+ };
329
+ const LegacyOrderCheckoutSessionMetadataSchema = z.object({
330
+ ...orderCheckoutSessionMetadataBaseShape,
331
+ ...absentDatedOfferingSharedEngineMetadataShape
332
+ });
333
+ const SharedDatedOfferingOrderCheckoutSessionMetadataSchema = z.object({
334
+ ...orderCheckoutSessionMetadataBaseShape,
335
+ ...datedOfferingSharedEngineMetadataShape
336
+ });
337
+ z.union([SharedDatedOfferingOrderCheckoutSessionMetadataSchema, LegacyOrderCheckoutSessionMetadataSchema]);
338
+ //#endregion
339
+ //#region ../commerce/src/purchase/stripeCommissionMetadata.ts
340
+ /** Reasons are payment evidence, not an independent pricing policy. */
341
+ const STRIPE_COMMISSION_FREE_REASONS = [
342
+ "managed_billing",
343
+ "no_commission_plan",
344
+ "billing_evidence_invalid",
345
+ "fee_rounds_to_zero",
346
+ "payment_not_stripe"
347
+ ];
348
+ const historicalContext = {
349
+ currency: z.string().refine((value) => parseCurrencyCode(value) !== null).optional(),
350
+ sourcePlanId: z.string().trim().min(1).optional()
351
+ };
352
+ const percentSchema = z.number().finite().min(0).max(100);
353
+ z.discriminatedUnion("kind", [
354
+ z.object({
355
+ kind: z.literal("commission_free"),
356
+ reason: z.enum(STRIPE_COMMISSION_FREE_REASONS),
357
+ ...historicalContext
358
+ }),
359
+ z.object({
360
+ kind: z.literal("application_fee_amount"),
361
+ amountCents: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
362
+ percent: percentSchema,
363
+ ...historicalContext
364
+ }),
365
+ z.object({
366
+ kind: z.literal("application_fee_percent"),
367
+ percent: percentSchema,
368
+ ...historicalContext
369
+ })
370
+ ]);
371
+ toNonNegativeCents(0);
372
+ //#endregion
373
+ //#region ../commerce/src/purchase/stripeMinimumCharge.ts
374
+ const STRIPE_MINIMUM_CHARGE_CENTS_BY_CURRENCY = {
375
+ GBP: 30,
376
+ USD: 50,
377
+ EUR: 50,
378
+ AED: 200,
379
+ AUD: 50,
380
+ BGN: 100,
381
+ BRL: 50,
382
+ CAD: 50,
383
+ CHF: 50,
384
+ CZK: 1500,
385
+ DKK: 250,
386
+ HKD: 400,
387
+ HUF: 17500,
388
+ JPY: 50,
389
+ MXN: 1e3,
390
+ MYR: 200,
391
+ NOK: 300,
392
+ NZD: 50,
393
+ PLN: 200,
394
+ RON: 200,
395
+ SEK: 300,
396
+ SGD: 50,
397
+ THB: 1e3
398
+ };
399
+ function isStripeMinimumChargeCurrency(currency) {
400
+ return currency in STRIPE_MINIMUM_CHARGE_CENTS_BY_CURRENCY;
401
+ }
402
+ function getStripeMinimumChargeRequirement(rawCurrency) {
403
+ let currency;
404
+ try {
405
+ currency = normalizeCurrencyCode(rawCurrency);
406
+ } catch {
407
+ return null;
408
+ }
409
+ const currencyKey = currency;
410
+ if (!isStripeMinimumChargeCurrency(currencyKey)) return null;
411
+ return {
412
+ currency,
413
+ minimumAmountCents: STRIPE_MINIMUM_CHARGE_CENTS_BY_CURRENCY[currencyKey]
414
+ };
415
+ }
416
+ //#endregion
417
+ //#region ../commerce/src/purchase/event-registration-errors.ts
418
+ const eventRegistrationErrors = {
419
+ registrationClosed: {
420
+ message: "Booking is currently closed for this event. Please contact the organiser if you’d like to find out more.",
421
+ action: "none"
422
+ },
423
+ paymentInvestigationRequired: {
424
+ message: "We still can’t confirm your payment. Please don’t make another payment. Contact the organiser so they can check your booking.",
425
+ action: "none"
426
+ },
427
+ paymentProviderUnavailable: {
428
+ message: "We couldn’t reach the payment provider. Please try again in a minute.",
429
+ action: "retry"
430
+ },
431
+ paymentPageUnavailable: {
432
+ message: "We couldn’t open the payment page. Please refresh this page and try again. If this keeps happening, contact the organiser for help.",
433
+ action: "retry"
434
+ },
435
+ paymentUnavailable: {
436
+ message: "Online payment is not available for this event right now. Please contact the organiser for help with booking.",
437
+ action: "none"
438
+ },
439
+ capacityChanged: {
440
+ message: "Sorry, there aren’t enough places left for your selection. Please check the available places and choose again.",
441
+ action: "places"
442
+ },
443
+ selectionChanged: {
444
+ message: "The booking options for this event have changed. Please check the latest options and choose your places again.",
445
+ action: "places"
446
+ },
447
+ registrationPreparationChanged: {
448
+ message: "The booking options for this event have changed. Please check the latest options and choose your places again.",
449
+ action: "places"
450
+ },
451
+ registrationAlreadyExists: {
452
+ message: "You already have a booking for this event. Please check your bookings to see its status. If you need help, contact the organiser.",
453
+ action: "portal"
454
+ },
455
+ holdExpired: {
456
+ message: "Your reservation has timed out. Please check availability and choose your places again.",
457
+ action: "start"
458
+ },
459
+ waitlistUnavailable: {
460
+ message: "Sorry, the waiting list place offered in this invitation is no longer available. Please check the event for available places or contact the organiser for help.",
461
+ action: "event"
462
+ },
463
+ paymentContextMismatch: {
464
+ message: "The payment options for this event have changed. Please check the latest options before continuing.",
465
+ action: "payment-options"
466
+ },
467
+ verificationFailed: {
468
+ message: "We couldn’t confirm this request came from a person. Please refresh the page and try again.",
469
+ action: "none"
470
+ },
471
+ idempotencyConflict: {
472
+ 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.",
473
+ action: "portal"
474
+ },
475
+ invalidCommitInput: {
476
+ message: "We couldn’t accept your booking details. Please check the information you entered and try again. If this keeps happening, contact the organiser for help.",
477
+ action: "details"
478
+ }
479
+ };
480
+ function parseEventRegistrationErrorReason(value) {
481
+ return typeof value === "string" && Object.prototype.hasOwnProperty.call(eventRegistrationErrors, value) ? value : null;
482
+ }
483
+ //#endregion
101
484
  //#region ../blocks/src/system/runtime/shared/bookingPaymentOptionCopy.ts
102
485
  function buildUpfrontBookingPaymentOptionCopy(formattedTotal) {
103
486
  return {
@@ -164,16 +547,15 @@ function resolveBookingPaymentDueNowCents(input) {
164
547
  switch (input.option.kind) {
165
548
  case "upfront": return input.totalCents;
166
549
  case "deferred_manual": return 0;
167
- case "instalment_plan": return buildInstalmentSchedulePreview({
168
- totalCents: input.totalCents,
169
- option: input.option,
170
- bookingStartAt: input.bookingStartAt
171
- })[0]?.amountCents ?? input.totalCents;
550
+ case "instalment_plan": return resolveBookingInitialInstalmentAmountCents({
551
+ totalAmountCents: input.totalCents,
552
+ plan: input.option.plan
553
+ });
172
554
  case "flexible_balance": return resolveFlexibleBalanceInitialPaymentCents({
173
555
  totalAmountCents: input.totalCents,
174
556
  config: input.option.config
175
557
  });
176
- default: return assertNever$2(input.option);
558
+ default: return assertNever$3(input.option);
177
559
  }
178
560
  }
179
561
  function buildBookingPaymentSelectionViewModel(input) {
@@ -190,6 +572,7 @@ function buildBookingPaymentSelectionViewModel(input) {
190
572
  totalCents,
191
573
  currency,
192
574
  bookingStartAt: input.bookingStartAt,
575
+ nowIso: input.nowIso,
193
576
  locale: input.locale
194
577
  }))
195
578
  };
@@ -232,17 +615,12 @@ function buildBookingPaymentOptionViewModel(input) {
232
615
  };
233
616
  }
234
617
  case "instalment_plan": {
235
- const schedulePreview = buildInstalmentSchedulePreview({
236
- totalCents: input.totalCents,
237
- option: input.option,
238
- bookingStartAt: input.bookingStartAt
239
- });
240
- const dueToday = resolveBookingPaymentDueNowCents({
241
- option: input.option,
242
- totalCents: input.totalCents,
243
- bookingStartAt: input.bookingStartAt
618
+ const [firstRow, ...futureRows] = buildBookingInstalmentSchedule({
619
+ anchorAt: input.nowIso,
620
+ totalAmountCents: input.totalCents,
621
+ plan: input.option.plan
244
622
  });
245
- const futureRows = schedulePreview.slice(1);
623
+ const dueToday = firstRow?.amountCents ?? 0;
246
624
  const formattedTotal = formatPrice(input.totalCents, input.currency, input.locale);
247
625
  const formattedDueToday = formatPrice(dueToday, input.currency, input.locale);
248
626
  const depositRefundability = getBookingInstalmentDepositRefundability(input.option.plan);
@@ -289,7 +667,7 @@ function buildBookingPaymentOptionViewModel(input) {
289
667
  const formattedDueToday = formatPrice(dueToday, input.currency, input.locale);
290
668
  const formattedRemainingBalance = formatPrice(remainingBalance, input.currency, input.locale);
291
669
  const dueAt = resolveFlexibleBalanceDueAt({
292
- bookingStartAt: input.bookingStartAt ?? (/* @__PURE__ */ new Date()).toISOString(),
670
+ bookingStartAt: input.bookingStartAt ?? input.nowIso,
293
671
  dueDateRule: input.option.config.dueDateRule
294
672
  });
295
673
  const copy = buildFlexibleBalanceBookingPaymentOptionCopy({
@@ -327,43 +705,7 @@ function buildBookingPaymentOptionViewModel(input) {
327
705
  ctaLabel: copy.ctaLabel
328
706
  };
329
707
  }
330
- default: return assertNever$2(input.option);
331
- }
332
- }
333
- function buildInstalmentSchedulePreview(input) {
334
- const startAt = input.bookingStartAt ?? (/* @__PURE__ */ new Date()).toISOString();
335
- switch (input.option.plan.kind) {
336
- case "deposit_plus_one_remainder": {
337
- const deposit = clampConfiguredAmount(input.option.plan.depositAmountCents, input.totalCents);
338
- const remainder = Math.max(0, input.totalCents - deposit);
339
- return compactSchedulePreview([{
340
- dueAt: startAt,
341
- amountCents: deposit
342
- }, {
343
- dueAt: addIntervalPreservingMonthAnchor(startAt, input.option.plan.remainderDueCount, input.option.plan.intervalUnit),
344
- amountCents: remainder
345
- }]);
346
- }
347
- case "deposit_plus_scheduled_instalments": {
348
- const plan = input.option.plan;
349
- const deposit = clampConfiguredAmount(plan.depositAmountCents, input.totalCents);
350
- const instalments = splitAmountWithRemainderInFirst(Math.max(0, input.totalCents - deposit), plan.instalmentCount);
351
- return compactSchedulePreview([{
352
- dueAt: startAt,
353
- amountCents: deposit
354
- }, ...instalments.map((amountCents, index) => ({
355
- dueAt: addIntervalPreservingMonthAnchor(startAt, plan.intervalCount * (index + 1), plan.intervalUnit),
356
- amountCents
357
- }))]);
358
- }
359
- case "equal_scheduled_instalments": {
360
- const plan = input.option.plan;
361
- return compactSchedulePreview(splitAmountWithRemainderInFirst(input.totalCents, plan.instalmentCount).map((amountCents, index) => ({
362
- dueAt: index === 0 ? startAt : addIntervalPreservingMonthAnchor(startAt, plan.intervalCount * index, plan.intervalUnit),
363
- amountCents
364
- })));
365
- }
366
- default: return assertNever$2(input.option.plan);
708
+ default: return assertNever$3(input.option);
367
709
  }
368
710
  }
369
711
  function getPaymentCadenceLabel(plan) {
@@ -371,9 +713,6 @@ function getPaymentCadenceLabel(plan) {
371
713
  const unitLabel = intervalCount === 1 ? plan.intervalUnit : `${plan.intervalUnit}s`;
372
714
  return intervalCount === 1 ? unitLabel : `every ${intervalCount} ${unitLabel}`;
373
715
  }
374
- function compactSchedulePreview(schedule) {
375
- return omitZeroAmountFutureRows(schedule);
376
- }
377
716
  function formatScheduleDate(isoString, locale) {
378
717
  const date = new Date(isoString);
379
718
  if (!Number.isFinite(date.getTime())) return isoString;
@@ -425,14 +764,14 @@ function pollingReducer(state, action) {
425
764
  case "completed":
426
765
  case "failed":
427
766
  case "timeout": return state;
428
- default: return assertNever$2(state);
767
+ default: return assertNever$3(state);
429
768
  }
430
769
  case "polling-timed-out": return {
431
770
  tag: "timeout",
432
771
  result: state.result,
433
772
  error: /* @__PURE__ */ new Error("Polling timed out")
434
773
  };
435
- default: return assertNever$2(action);
774
+ default: return assertNever$3(action);
436
775
  }
437
776
  }
438
777
  //#endregion
@@ -443,67 +782,24 @@ function pollingReducer(state, action) {
443
782
  * Provides a reusable polling mechanism with configurable intervals,
444
783
  * max attempts, and completion detection. Used by usePaymentVerification
445
784
  * and other hooks that need to poll for status changes.
446
- *
447
- * @example
448
- * ```tsx
449
- * const polling = usePolling(shouldPoll ? {
450
- * pollFn: () => api.getStatus(id),
451
- * isComplete: (result) => result.status === 'done',
452
- * } : null);
453
- *
454
- * useEffect(() => {
455
- * if (polling.status === 'completed') {
456
- * handleSuccess(polling.result);
457
- * }
458
- * }, [polling.status]);
459
- * ```
460
785
  */
461
786
  const DEFAULT_MAX_ATTEMPTS = 10;
462
787
  const DEFAULT_POLL_INTERVAL = 1e3;
463
- /**
464
- * Generic hook for polling an async operation until completion.
465
- *
466
- * Pass config to start polling, or null to stop/idle.
467
- * The hook handles cleanup on unmount and config changes.
468
- *
469
- * **IMPORTANT: Config identity stability**
470
- *
471
- * The config object is used as an effect dependency. If config identity
472
- * changes on every render (e.g., inline objects), polling will restart
473
- * continuously, causing infinite request loops.
474
- *
475
- * Always memoize the config object:
476
- *
477
- * @example
478
- * ```tsx
479
- * // BAD - inline object creates new identity every render
480
- * usePolling({
481
- * pollFn: () => api.getStatus(id),
482
- * isComplete: (result) => result.status === 'done',
483
- * });
484
- *
485
- * // GOOD - memoized config, stable identity
486
- * const pollConfig = useMemo(() => shouldPoll ? {
487
- * pollFn: () => api.getStatus(id),
488
- * isComplete: (result) => result.status === 'done',
489
- * } : null, [shouldPoll, api, id]);
490
- *
491
- * usePolling(pollConfig);
492
- * ```
493
- *
494
- * @param config - Configuration for polling, or null to stop
495
- * @returns Polling result with status, data, and retry function
496
- */
497
- function usePolling(config) {
498
- const [state, dispatch] = useReducer(pollingReducer, void 0, createInitialPollingState);
499
- const attemptsRef = useRef(0);
500
- const timeoutRef = useRef(null);
501
- const isPollingRef = useRef(false);
502
- const isActiveRef = useRef(false);
503
- const generationRef = useRef(0);
504
- const configRef = useRef(config);
505
- configRef.current = config;
506
- const cleanup = useCallback(() => {
788
+ function usePollingRuntime(config) {
789
+ const runtime = {
790
+ configRef: useRef(config),
791
+ attemptsRef: useRef(0),
792
+ timeoutRef: useRef(null),
793
+ isPollingRef: useRef(false),
794
+ isActiveRef: useRef(false),
795
+ generationRef: useRef(0)
796
+ };
797
+ runtime.configRef.current = config;
798
+ return runtime;
799
+ }
800
+ function usePollingCleanup(runtime) {
801
+ const { isActiveRef, generationRef, timeoutRef, isPollingRef } = runtime;
802
+ return useCallback(() => {
507
803
  isActiveRef.current = false;
508
804
  generationRef.current += 1;
509
805
  if (timeoutRef.current) {
@@ -511,16 +807,27 @@ function usePolling(config) {
511
807
  timeoutRef.current = null;
512
808
  }
513
809
  isPollingRef.current = false;
514
- }, []);
515
- const resetState = useCallback(() => {
810
+ }, [
811
+ generationRef,
812
+ isActiveRef,
813
+ isPollingRef,
814
+ timeoutRef
815
+ ]);
816
+ }
817
+ function usePollingReset(runtime, dispatch) {
818
+ const { attemptsRef } = runtime;
819
+ return useCallback(() => {
516
820
  dispatch({ type: "polling-reset" });
517
821
  attemptsRef.current = 0;
518
- }, []);
519
- const poll = useCallback(async () => {
520
- const cfg = configRef.current;
521
- if (!cfg) return true;
822
+ }, [attemptsRef, dispatch]);
823
+ }
824
+ function usePollingRequest(runtime, dispatch, cleanup) {
825
+ const { configRef, attemptsRef, isPollingRef, isActiveRef, generationRef } = runtime;
826
+ return useCallback(async () => {
827
+ const config = configRef.current;
828
+ if (!config) return true;
522
829
  if (isPollingRef.current) return false;
523
- const maxAttempts = cfg.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
830
+ const maxAttempts = config.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
524
831
  if (attemptsRef.current >= maxAttempts) {
525
832
  dispatch({ type: "polling-timed-out" });
526
833
  cleanup();
@@ -530,81 +837,115 @@ function usePolling(config) {
530
837
  attemptsRef.current += 1;
531
838
  const generation = generationRef.current;
532
839
  try {
533
- const data = await cfg.pollFn();
534
- if (generation !== generationRef.current || !isActiveRef.current) {
535
- isPollingRef.current = false;
536
- return true;
537
- }
538
- if (cfg.isFailed?.(data)) {
840
+ const result = await config.pollFn();
841
+ if (generation !== generationRef.current || !isActiveRef.current) return true;
842
+ if (config.isFailed?.(result)) {
539
843
  dispatch({
540
844
  type: "polling-failed",
541
- result: data
845
+ result
542
846
  });
543
847
  cleanup();
544
848
  return true;
545
849
  }
546
- if (cfg.isComplete(data)) {
850
+ if (config.isComplete(result)) {
547
851
  dispatch({
548
852
  type: "polling-completed",
549
- result: data
853
+ result
550
854
  });
551
855
  cleanup();
552
856
  return true;
553
857
  }
554
858
  dispatch({
555
859
  type: "polling-progressed",
556
- result: data
860
+ result
557
861
  });
558
862
  isPollingRef.current = false;
559
863
  return false;
560
- } catch (err) {
561
- if (generation !== generationRef.current || !isActiveRef.current) {
562
- isPollingRef.current = false;
563
- return true;
564
- }
565
- if (err instanceof Error) dispatch({
864
+ } catch (error) {
865
+ if (generation !== generationRef.current || !isActiveRef.current) return true;
866
+ if (error instanceof Error) dispatch({
566
867
  type: "polling-request-failed",
567
- error: err
868
+ error
568
869
  });
569
870
  isPollingRef.current = false;
570
871
  return false;
571
872
  }
572
- }, [cleanup]);
573
- const schedulePoll = useCallback(() => {
873
+ }, [
874
+ attemptsRef,
875
+ cleanup,
876
+ configRef,
877
+ dispatch,
878
+ generationRef,
879
+ isActiveRef,
880
+ isPollingRef
881
+ ]);
882
+ }
883
+ function usePollingScheduler(runtime, poll) {
884
+ const { attemptsRef, configRef, isActiveRef, timeoutRef } = runtime;
885
+ return useCallback(() => {
574
886
  if (!isActiveRef.current) return;
575
- const pollInterval = configRef.current?.interval ?? DEFAULT_POLL_INTERVAL;
576
887
  const doPoll = async () => {
577
- if (!await poll() && isActiveRef.current) timeoutRef.current = setTimeout(doPoll, pollInterval);
888
+ if (!await poll() && isActiveRef.current) {
889
+ const configuredInterval = configRef.current?.interval;
890
+ const interval = typeof configuredInterval === "function" ? configuredInterval(attemptsRef.current) : configuredInterval ?? DEFAULT_POLL_INTERVAL;
891
+ timeoutRef.current = setTimeout(doPoll, interval);
892
+ }
578
893
  };
579
894
  doPoll();
580
- }, [poll]);
895
+ }, [
896
+ attemptsRef,
897
+ configRef,
898
+ isActiveRef,
899
+ poll,
900
+ timeoutRef
901
+ ]);
902
+ }
903
+ function usePollingCycle(config, runtime, dispatch) {
904
+ const cleanup = usePollingCleanup(runtime);
905
+ const resetState = usePollingReset(runtime, dispatch);
906
+ const schedulePoll = usePollingScheduler(runtime, usePollingRequest(runtime, dispatch, cleanup));
907
+ const pollingEnabled = config !== null;
581
908
  useEffect(() => {
582
- if (!config) {
909
+ if (!pollingEnabled) {
583
910
  cleanup();
584
911
  dispatch({ type: "polling-went-idle" });
585
912
  return;
586
913
  }
587
914
  resetState();
588
- isActiveRef.current = true;
915
+ runtime.isActiveRef.current = true;
589
916
  schedulePoll();
590
917
  return cleanup;
591
918
  }, [
592
- config,
593
919
  cleanup,
920
+ dispatch,
921
+ pollingEnabled,
594
922
  resetState,
923
+ config?.restartKey ?? null,
924
+ runtime.isActiveRef,
595
925
  schedulePoll
596
926
  ]);
597
- const retry = useCallback(() => {
598
- if (!configRef.current) return;
927
+ return useCallback(() => {
928
+ if (!runtime.configRef.current) return;
599
929
  cleanup();
600
930
  resetState();
601
- isActiveRef.current = true;
931
+ runtime.isActiveRef.current = true;
602
932
  schedulePoll();
603
933
  }, [
604
934
  cleanup,
605
935
  resetState,
936
+ runtime.configRef,
937
+ runtime.isActiveRef,
606
938
  schedulePoll
607
939
  ]);
940
+ }
941
+ /**
942
+ * Polls until the operation completes, fails, times out, or becomes disabled.
943
+ * Config objects may be rebuilt across renders; change restartKey to begin a
944
+ * new operation and reset its attempt budget.
945
+ */
946
+ function usePolling(config) {
947
+ const [state, dispatch] = useReducer(pollingReducer, void 0, createInitialPollingState);
948
+ const retry = usePollingCycle(config, usePollingRuntime(config), dispatch);
608
949
  return {
609
950
  status: config ? state.tag : "idle",
610
951
  result: config ? state.result : null,
@@ -708,4 +1049,4 @@ function BookingMailingListNote(props) {
708
1049
  });
709
1050
  }
710
1051
  //#endregion
711
- export { buildBookingPaymentSelectionViewModel as a, usePolling as i, BookingConsentAgreement as n, resolveBookingPaymentDueNowCents as o, StepIndicator as r, formatPrice as s, BookingMailingListNote as t };
1052
+ export { buildBookingPaymentSelectionViewModel as a, eventRegistrationErrors as c, planCheckoutPaymentFlow as d, planFlexibleBalanceCreditFirst as f, usePolling as i, parseEventRegistrationErrorReason as l, BookingConsentAgreement as n, resolveBookingPaymentDueNowCents as o, useBookingNowIso as p, StepIndicator as r, formatPrice as s, BookingMailingListNote as t, getStripeMinimumChargeRequirement as u };