@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.
- package/CHANGELOG.md +16 -0
- package/README.md +1 -1
- package/dist/{PreviewEditorSidebar-DtpB3_sS.mjs → PreviewEditorSidebar-DBKln68M.mjs} +301 -205
- package/dist/{PreviewEditorUI-DxTLgaHo.mjs → PreviewEditorUI-DpRX4Mum.mjs} +68 -63
- package/dist/{PreviewQueryProvider-Dd4dxOiU.mjs → PreviewQueryProvider-C0mndwHB.mjs} +3 -3
- package/dist/{SdkPreviewModeRuntime-DMMNCngt.mjs → SdkPreviewModeRuntime-DJPmPY-r.mjs} +1247 -541
- package/dist/{SiteChromeCustomizeContext-DQXZXiqS.mjs → SiteChromeCustomizeContext-JYA0cJ_Z.mjs} +209720 -204978
- package/dist/_dts/ai/src/contracts/proposals.d.ts +0 -33
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +0 -3
- package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
- package/dist/_dts/api/src/accountApi.d.ts +1 -1
- package/dist/_dts/api/src/admin.d.ts +22 -22
- package/dist/_dts/api/src/aiPatch.d.ts +2 -2
- package/dist/_dts/api/src/aiPlayground.d.ts +1 -0
- package/dist/_dts/api/src/analytics.d.ts +2 -2
- package/dist/_dts/api/src/apiEndpointTypes.d.ts +2 -0
- package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
- package/dist/_dts/api/src/auth.d.ts +10 -10
- package/dist/_dts/api/src/availability.d.ts +6 -6
- package/dist/_dts/api/src/billing.d.ts +42 -15
- package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +8 -0
- package/dist/_dts/api/src/billingEndpointTypes.d.ts +15 -6
- package/dist/_dts/api/src/blocks.d.ts +15 -14
- package/dist/_dts/api/src/blocksKeys.d.ts +2 -0
- package/dist/_dts/api/src/bookingConfig.d.ts +33 -50
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +2 -6
- package/dist/_dts/api/src/bookingOperations.d.ts +9 -11
- package/dist/_dts/api/src/bookingRecords.d.ts +16 -11
- package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +5 -5
- package/dist/_dts/api/src/bookings.d.ts +7 -7
- package/dist/_dts/api/src/calendar.d.ts +9 -9
- package/dist/_dts/api/src/clientErrorReporting.d.ts +11 -0
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -8
- package/dist/_dts/api/src/common/cancellation.d.ts +23 -0
- package/dist/_dts/api/src/common/envelope.d.ts +2 -2
- package/dist/_dts/api/src/content-editor.d.ts +2 -2
- package/dist/_dts/api/src/contentEntries.d.ts +17 -48
- package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
- package/dist/_dts/api/src/contentTypes.d.ts +11 -11
- package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
- package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +1 -1
- package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
- package/dist/_dts/api/src/domains.d.ts +16 -16
- package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
- package/dist/_dts/api/src/emailSettings.d.ts +4 -4
- package/dist/_dts/api/src/endpoints.d.ts +135 -51
- package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
- package/dist/_dts/api/src/eventManagementContracts.d.ts +29 -7
- package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +0 -8
- package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
- package/dist/_dts/api/src/footerSettings.d.ts +6 -6
- package/dist/_dts/api/src/index.d.ts +8 -7
- package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
- package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
- package/dist/_dts/api/src/navigation.d.ts +5 -5
- package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
- package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
- package/dist/_dts/api/src/pages.d.ts +7 -7
- package/dist/_dts/api/src/performance.d.ts +1 -1
- package/dist/_dts/api/src/public/index.d.ts +1 -1
- package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +4 -2
- package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +6 -29
- package/dist/_dts/api/src/redirects.d.ts +3 -3
- package/dist/_dts/api/src/request.d.ts +11 -2
- package/dist/_dts/api/src/resources.d.ts +4 -4
- package/dist/_dts/api/src/routes.d.ts +8 -3
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +1 -2
- package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
- package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
- package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
- package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
- package/dist/_dts/api/src/sdkPullEventContracts.d.ts +9 -2
- package/dist/_dts/api/src/seo.d.ts +4 -4
- package/dist/_dts/api/src/services.d.ts +4 -4
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -8
- package/dist/_dts/api/src/siteMembers.d.ts +10 -10
- package/dist/_dts/api/src/siteOnboarding.d.ts +14 -0
- package/dist/_dts/api/src/siteOperations.d.ts +6 -2
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
- package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
- package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
- package/dist/_dts/billing/src/components/index.d.ts +25 -40
- package/dist/_dts/billing/src/membership/index.d.ts +1 -3
- package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
- package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
- package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
- package/dist/_dts/billing/src/plans/types.d.ts +5 -15
- package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
- package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
- package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
- package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
- package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
- package/dist/_dts/blocks/src/client/events.d.ts +3 -0
- package/dist/_dts/blocks/src/contracts/index.d.ts +1 -1
- package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +2 -2
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +54 -14
- package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +4 -13
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
- package/dist/_dts/blocks/src/portal/types.d.ts +9 -8
- package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
- package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +28 -28
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +7 -2
- package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +84 -160
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/shop.shared.d.ts +31 -4
- package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -2
- package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +3 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +72 -12
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +36 -6
- package/dist/_dts/blocks/src/system/runtime/hooks/useBookingNowIso.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +3 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +17 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/commerce/shared/display.d.ts +9 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +14 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +3 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +29 -29
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +54 -6
- package/dist/_dts/blocks/src/system/runtime/shared/bookingPaymentOptions.d.ts +7 -2
- package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
- package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
- package/dist/_dts/commerce/src/purchase/bookingPaymentSelection.d.ts +54 -0
- package/dist/_dts/commerce/src/purchase/checkoutCommitPlan.d.ts +58 -13
- package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
- package/dist/_dts/commerce/src/purchase/checkoutPaymentPlanPlanning.d.ts +16 -21
- package/dist/_dts/commerce/src/purchase/checkoutPaymentTerms.d.ts +23 -40
- package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +2 -2
- package/dist/_dts/commerce/src/purchase/checkoutStripeSessionPlanning.d.ts +5 -4
- package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
- package/dist/_dts/commerce/src/purchase/index.d.ts +1 -3
- package/dist/_dts/commerce/src/purchase/membershipOrderItemMetadata.d.ts +4 -0
- package/dist/_dts/commerce/src/purchase/oneTimeCheckoutPlanning.d.ts +9 -4
- package/dist/_dts/commerce/src/purchase/orderInstalmentClosure.d.ts +13 -1
- package/dist/_dts/commerce/src/purchase/orderInstalmentLifecycle.d.ts +5 -0
- package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +3 -1
- package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +7 -1
- package/dist/_dts/commerce/src/purchase/refundRailSplit.d.ts +1 -1
- package/dist/_dts/commerce/src/purchase/stateTransitions.d.ts +2 -2
- package/dist/_dts/commerce/src/purchase/stripeMinimumCharge.d.ts +6 -0
- package/dist/_dts/commerce/src/purchase/types.d.ts +2 -1
- package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
- package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
- package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
- package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
- package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
- package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
- package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
- package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
- package/dist/_dts/content-editor/src/controller/editLeaseHandover.d.ts +30 -0
- package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
- package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
- package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
- package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
- package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
- package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
- package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
- package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
- package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
- package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
- package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
- package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
- package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
- package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
- package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
- package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
- package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
- package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
- package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
- package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
- package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
- package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
- package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
- package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
- package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
- package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
- package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
- package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
- package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
- package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
- package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
- package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
- package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
- package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
- package/dist/_dts/content-editor/src/index.d.ts +26 -7
- package/dist/_dts/content-editor/src/lib/browserStorage.d.ts +5 -0
- package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
- package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
- package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
- package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
- package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
- package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
- package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
- package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
- package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
- package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
- package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
- package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
- package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
- package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
- package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
- package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
- package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
- package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
- package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
- package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
- package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
- package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
- package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
- package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
- package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
- package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
- package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
- package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
- package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
- package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
- package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
- package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
- package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
- package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
- package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
- package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
- package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
- package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
- package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
- package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
- package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
- package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
- package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
- package/dist/_dts/content-model/src/types.d.ts +0 -1
- package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
- package/dist/_dts/core/src/booking-flexible-balance.d.ts +2 -2
- package/dist/_dts/core/src/booking-instalment-deposit.d.ts +20 -0
- package/dist/_dts/core/src/booking-live-payment-terms.d.ts +72 -0
- package/dist/_dts/core/src/booking-payment-options.d.ts +24 -0
- package/dist/_dts/core/src/booking-payment-schemas.d.ts +522 -0
- package/dist/_dts/core/src/branded.d.ts +15 -0
- package/dist/_dts/core/src/currency-format.d.ts +8 -2
- package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
- package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
- package/dist/_dts/core/src/edit-lease.d.ts +60 -0
- package/dist/_dts/core/src/editor-state.d.ts +38 -13
- package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
- package/dist/_dts/core/src/html-entities.d.ts +6 -0
- package/dist/_dts/core/src/index.d.ts +7 -0
- package/dist/_dts/core/src/uuid.d.ts +7 -5
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +456 -189
- package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
- package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
- package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
- package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
- package/dist/_dts/editor/src/index.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
- package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
- package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
- package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
- package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
- package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
- package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
- package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
- package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
- package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
- package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
- package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +3 -1
- package/dist/_dts/media-editor/src/MediaPickerMiniDialog.d.ts +10 -0
- package/dist/_dts/media-editor/src/context.d.ts +1 -1
- package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
- package/dist/_dts/media-editor/src/index.d.ts +2 -0
- package/dist/_dts/media-editor/src/provider.d.ts +3 -2
- package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
- package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
- package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +6 -3
- package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
- package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
- package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
- package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +23 -14
- package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
- package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
- package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
- package/dist/_dts/preview-next/src/client/previewAuthStore.d.ts +7 -0
- package/dist/_dts/preview-next/src/constants.d.ts +4 -0
- package/dist/_dts/preview-next/src/keepAlive.d.ts +1 -0
- package/dist/_dts/realtime/src/client.d.ts +3 -0
- package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
- package/dist/_dts/realtime/src/drafts.d.ts +210 -0
- package/dist/_dts/realtime/src/index.d.ts +3 -0
- package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
- package/dist/_dts/realtime/src/types.d.ts +113 -0
- package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
- package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -12
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/surfaces/src/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +0 -5
- package/dist/_dts/ui/src/color-picker.d.ts +1 -1
- package/dist/_dts/ui/src/palette/useHexDraft.d.ts +7 -0
- package/dist/client/{BookingMailingListNote-1n4Ch_u_.mjs → BookingMailingListNote-Cr3EeTP5.mjs} +504 -163
- package/dist/client/DemoBookingPortalAccess-BFGB1Fay.mjs +344 -0
- package/dist/client/{EventCombined.client-C0pgma9y.mjs → EventCombined.client-DKYV0_ft.mjs} +6 -6
- package/dist/client/{EventListing.client-4fhLOvHP.mjs → EventListing.client-B9UIcEYc.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-DScC4F3w.mjs → LeafletStaticMap-CFLPkP0K.mjs} +1 -1
- package/dist/client/{TerminalPanel-B5ZUsYhe.mjs → TerminalPanel-JjmgxEsR.mjs} +1 -1
- package/dist/client/{ThemedButton-DoVIV1Ao.mjs → ThemedButton-CKV1Jh2m.mjs} +1 -1
- package/dist/client/{accordion-CoT5g7zo.mjs → accordion-DXWIfT3T.mjs} +1 -1
- package/dist/client/{bookingForm-BWxB46xD.mjs → bookingForm-CjZgHNvv.mjs} +216 -63
- package/dist/client/bookings.mjs +1187 -692
- package/dist/client/{carousel-DtNYWFd3.mjs → carousel-DSLikmvZ.mjs} +1 -1
- package/dist/client/{cart-z4qZih1Y.mjs → cart-HDjWReFt.mjs} +3 -3
- package/dist/client/{checkout-DpL7euFH.mjs → checkout-CUvRZA3W.mjs} +3 -3
- package/dist/client/{checkoutUrls-BEfR7kVu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
- package/dist/client/client.mjs +2711 -1684
- package/dist/client/{context-C8TinPJc.mjs → context-DFmaZa-Q.mjs} +4 -3
- package/dist/client/{dates-vwwxTeB0.mjs → dates-BBep1JnF.mjs} +56 -11
- package/dist/client/{eventCalendar-DIbHfJXO.mjs → eventCalendar-zEobhxo4.mjs} +9 -9
- package/dist/client/{eventCombined-DoGMJ6cg.mjs → eventCombined-Dp7bz5k-.mjs} +4 -4
- package/dist/client/{eventDetails-BjN9v6a1.mjs → eventDetails-FE-zqTt7.mjs} +4 -4
- package/dist/client/{eventListing-DajjWgOv.mjs → eventListing-BMt5snal.mjs} +4 -4
- package/dist/client/{eventRegistration-DMq9gMA-.mjs → eventRegistration-O6ZxHfOb.mjs} +422 -570
- package/dist/client/{form-Qf6qTbos.mjs → form-DFa1D8vt.mjs} +3 -3
- package/dist/client/{headerSection-D7qJrqFX.mjs → headerSection-CmjHLR-N.mjs} +3 -3
- package/dist/client/hooks.mjs +414 -182
- package/dist/client/{locationMap-CCF9-t_0.mjs → locationMap-BXKP_lGh.mjs} +3 -3
- package/dist/client/{media-CwBGetqC.mjs → media-Cl38iOMI.mjs} +10 -3
- package/dist/client/{newsletterForm-DzCLSP4S.mjs → newsletterForm-CU-HmxGx.mjs} +3 -3
- package/dist/client/{pricing-Cgxv2KLC.mjs → pricing-KEAEsibq.mjs} +1 -1
- package/dist/client/{productDetail-ru9w5GHx.mjs → productDetail-Ckp7MGnt.mjs} +3 -3
- package/dist/client/{productList-zaapKSl-.mjs → productList-D91V0sYa.mjs} +3 -3
- package/dist/client/{propsDecoder-CwvvNOHx.mjs → propsDecoder-DZd6RJeA.mjs} +244 -94
- package/dist/client/rendering/client.mjs +2656 -1705
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +3430 -2352
- package/dist/client/{routeIslandApiConfig-BwVFo0Y4.mjs → routeIslandApiConfig-E1EkhhYY.mjs} +1 -1
- package/dist/client/{shop-mktkXvbV.mjs → shop-4F2jLQPI.mjs} +131 -85
- package/dist/client/{shop-commerce-De7gEnkA.mjs → shop-commerce-BbfCJjB3.mjs} +25 -13
- package/dist/client/{shop-commerce-store-B3MCxIBW.mjs → shop-commerce-store-vicweP2K.mjs} +1 -1
- package/dist/client/{shopShared-TqExh235.mjs → shopShared-DlONJt0T.mjs} +4 -4
- package/dist/client/{useEventFilters-n_OjkIjX.mjs → useEventFilters-COYyL3m7.mjs} +32 -17
- package/dist/preview-next/before-render.mjs +207 -105
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/constants.mjs +5 -1
- package/dist/preview-next/index.mjs +5 -1
- package/dist/preview-next/keepAlive.mjs +341 -165
- package/dist/preview-next/middleware.mjs +207 -105
- package/dist/{previewAuthStore-C_EHQ5XA.mjs → previewAuthStore-BBmV7UsW.mjs} +243 -112
- package/dist/{sdk-runtime-BIkJg5y1.mjs → sdk-runtime-CwvFFjB-.mjs} +2 -2
- package/dist/{separator-C9qDP95Z.mjs → separator-ByL72zUT.mjs} +1 -1
- package/dist/server/components.mjs +1839 -1475
- package/dist/server/config-validation.mjs +381 -166
- package/dist/server/config.mjs +381 -166
- package/dist/server/data.mjs +381 -166
- package/dist/server/index.mjs +214 -110
- package/dist/server/next.mjs +663 -351
- package/dist/server/page-converter.mjs +198 -79
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +1536 -1169
- package/dist/server/rendering.mjs +2432 -2068
- package/dist/server/routing.mjs +456 -173
- package/dist/server/server.mjs +447 -267
- package/package.json +1 -1
- package/dist/_dts/api/src/bookingPaymentTermSchemas.d.ts +0 -123
- package/dist/_dts/billing/src/plans/display.d.ts +0 -15
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +0 -3
- package/dist/_dts/commerce/src/purchase/checkoutPaymentTermPlanning.d.ts +0 -10
- package/dist/_dts/commerce/src/purchase/checkoutValidatedItemPlanning.d.ts +0 -55
- package/dist/_dts/commerce/src/purchase/orderInstalmentPayoff.d.ts +0 -24
- package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
- package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
- package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
- package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
- package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
- package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
- package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
- package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
- package/dist/_dts/content-editor/src/types.d.ts +0 -44
- package/dist/client/DiscountCodeDisclosure-CKJtz0mY.mjs +0 -137
package/dist/client/{BookingMailingListNote-1n4Ch_u_.mjs → BookingMailingListNote-Cr3EeTP5.mjs}
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import { i as CheckIcon } from "./TerminalPanel-
|
|
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-
|
|
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$
|
|
47
|
+
default: return assertNever$2(input.dueDateRule);
|
|
35
48
|
}
|
|
36
49
|
}
|
|
37
|
-
function assertNever$
|
|
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
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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$
|
|
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
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
|
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 ??
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
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
|
-
|
|
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
|
-
|
|
520
|
-
|
|
521
|
-
|
|
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 =
|
|
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
|
|
534
|
-
if (generation !== generationRef.current || !isActiveRef.current)
|
|
535
|
-
|
|
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
|
|
845
|
+
result
|
|
542
846
|
});
|
|
543
847
|
cleanup();
|
|
544
848
|
return true;
|
|
545
849
|
}
|
|
546
|
-
if (
|
|
850
|
+
if (config.isComplete(result)) {
|
|
547
851
|
dispatch({
|
|
548
852
|
type: "polling-completed",
|
|
549
|
-
result
|
|
853
|
+
result
|
|
550
854
|
});
|
|
551
855
|
cleanup();
|
|
552
856
|
return true;
|
|
553
857
|
}
|
|
554
858
|
dispatch({
|
|
555
859
|
type: "polling-progressed",
|
|
556
|
-
result
|
|
860
|
+
result
|
|
557
861
|
});
|
|
558
862
|
isPollingRef.current = false;
|
|
559
863
|
return false;
|
|
560
|
-
} catch (
|
|
561
|
-
if (generation !== generationRef.current || !isActiveRef.current)
|
|
562
|
-
|
|
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
|
|
868
|
+
error
|
|
568
869
|
});
|
|
569
870
|
isPollingRef.current = false;
|
|
570
871
|
return false;
|
|
571
872
|
}
|
|
572
|
-
}, [
|
|
573
|
-
|
|
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)
|
|
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
|
-
}, [
|
|
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 (!
|
|
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
|
-
|
|
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 };
|