@riverbankcms/sdk 0.146.0 → 0.148.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/{PreviewEditorSidebar-kg2r2Fyi.mjs → PreviewEditorSidebar-DvEPG3Z2.mjs} +249 -172
- package/dist/{PreviewEditorUI-sWMLp5dT.mjs → PreviewEditorUI-D6eb6fkx.mjs} +68 -60
- package/dist/{PreviewQueryProvider-Cg51xq1w.mjs → PreviewQueryProvider-5znTyJuz.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-h2ti3Hch.mjs → SdkPreviewModeRuntime-DJ6utQ_R.mjs} +1180 -475
- package/dist/{SiteChromeCustomizeContext-DEACFH9m.mjs → SiteChromeCustomizeContext-CFJYh6vo.mjs} +199078 -193767
- package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -33
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +18 -3
- package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
- package/dist/_dts/api/src/accountApi.d.ts +6 -6
- 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 +16 -2
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -13
- package/dist/_dts/api/src/bookingOperations.d.ts +6 -48
- package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
- package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
- package/dist/_dts/api/src/bookingRecords.d.ts +12 -49
- package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
- package/dist/_dts/api/src/bookings.d.ts +8 -7
- package/dist/_dts/api/src/calendar.d.ts +9 -9
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -6
- 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/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 +725 -607
- package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
- package/dist/_dts/api/src/eventManagementContracts.d.ts +48 -8
- package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +1 -9
- 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 -6
- package/dist/_dts/api/src/indexCoreTypes.d.ts +2 -1
- package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
- package/dist/_dts/api/src/launchReadiness.d.ts +1 -6
- package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
- package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
- package/dist/_dts/api/src/navigation.d.ts +5 -5
- package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +15 -0
- package/dist/_dts/api/src/occurrenceScheduling.d.ts +19 -0
- 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 +50 -0
- package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +4 -0
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
- package/dist/_dts/api/src/redirects.d.ts +3 -3
- package/dist/_dts/api/src/request.d.ts +10 -1
- 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 +15 -1
- 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/sdkCourseBooking.d.ts +4 -4
- 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 +8 -1
- 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/siteLifecycleEndpoints.d.ts +61 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +19 -25
- package/dist/_dts/api/src/siteMembers.d.ts +10 -10
- package/dist/_dts/api/src/siteOnboarding.d.ts +16 -14
- 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/PageRenderer.d.ts +3 -4
- package/dist/_dts/blocks/src/client/events.d.ts +3 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -4
- package/dist/_dts/blocks/src/index.d.ts +1 -1
- package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +18 -9
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +4 -0
- package/dist/_dts/blocks/src/portal/types.d.ts +0 -2
- 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 +4 -4
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +6 -1
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
- 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 +6 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +18 -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 +36 -6
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +18 -3
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +11 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -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 +11 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +28 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.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.reserved-fields.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +17 -1
- 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 +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
- 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/SuccessStep.d.ts +7 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +5 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +18 -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 +5 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +2 -4
- 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 +13 -0
- package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
- 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/mailingListSignupCopy.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/shared/types.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/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
- package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
- package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
- package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
- 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/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/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/branded.d.ts +12 -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 +55 -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 +5 -1
- package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
- package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
- package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -0
- package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
- package/dist/_dts/core/src/participants.d.ts +0 -38
- package/dist/_dts/core/src/uuid.d.ts +7 -5
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +261 -175
- 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/actionPresentation.d.ts +1 -0
- 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/context.d.ts +1 -1
- package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
- 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/EditablePageRenderer.d.ts +7 -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 +10 -6
- 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 +24 -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/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 +2 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +4 -2
- 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/buttons/effects/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
- package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
- package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
- package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
- package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
- package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
- package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
- package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
- package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
- package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
- package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
- package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
- package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
- package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
- package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
- package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
- package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
- package/dist/_dts/ui/src/badge.d.ts +2 -1
- package/dist/_dts/ui/src/button.d.ts +1 -1
- package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
- package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
- package/dist/_dts/ui/src/combobox.d.ts +26 -1
- package/dist/_dts/ui/src/date-picker.d.ts +5 -8
- package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
- package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
- package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
- package/dist/_dts/ui/src/index.d.ts +4 -1
- package/dist/_dts/ui/src/native-select.d.ts +8 -0
- package/dist/_dts/ui/src/popover.d.ts +7 -1
- package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
- package/dist/_dts/ui/src/surface.d.ts +1 -1
- package/dist/client/{BookingConsentAgreement-BQKL045f.mjs → BookingMailingListNote-CzRt2dF_.mjs} +110 -97
- package/dist/client/{CheckboxChoice--W2n6yKs.mjs → CheckboxChoice-B33MqoUo.mjs} +1 -1
- package/dist/client/DemoBookingPortalAccess-mxqwap3f.mjs +344 -0
- package/dist/client/{EventCombined.client-BdRjVbhH.mjs → EventCombined.client-CDb11igO.mjs} +7 -7
- package/dist/client/{EventListing.client-DBxC6xOU.mjs → EventListing.client-EgYhzKPa.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-mHEJKrTs.mjs → LeafletStaticMap-gtmtaA2b.mjs} +1 -1
- package/dist/client/{scrollToBlock-BNgaEUpo.mjs → TerminalPanel-DvNUP5ot.mjs} +77 -77
- package/dist/client/{ThemedButton-CE5KYT6z.mjs → ThemedButton-C7CeUJjW.mjs} +2 -2
- package/dist/client/{accordion-BEQNSptH.mjs → accordion-kjvt49rA.mjs} +1 -1
- package/dist/client/{bookingForm-AMr-s5vw.mjs → bookingForm-pbRZordh.mjs} +411 -141
- package/dist/client/bookings.mjs +966 -396
- package/dist/client/{carousel-Bbt_QgJy.mjs → carousel-f4Zbmicv.mjs} +2 -2
- package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
- package/dist/client/{cart-CnWi30zJ.mjs → cart-DO20An50.mjs} +3 -3
- package/dist/client/{checkout-f3nkWgd4.mjs → checkout-Du5amDR_.mjs} +3 -3
- package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
- package/dist/client/client.mjs +3837 -2202
- package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
- package/dist/client/{context-Bc8T6pCe.mjs → context-eW97E945.mjs} +4 -3
- package/dist/client/{dates-DUsCEzLb.mjs → dates-jPCirRea.mjs} +56 -11
- package/dist/client/{eventCalendar-CKwgXui5.mjs → eventCalendar-C2M-iE4j.mjs} +10 -10
- package/dist/client/{eventCombined-CBAOSTGR.mjs → eventCombined-W6ns3LHg.mjs} +4 -4
- package/dist/client/{eventDetails-Dh-_WiBD.mjs → eventDetails-CR-GT0f0.mjs} +4 -4
- package/dist/client/{eventListing-CA3frIH5.mjs → eventListing-BK8AfYZz.mjs} +4 -4
- package/dist/client/{eventRegistration-BHtsgdcg.mjs → eventRegistration-BJSd4KUu.mjs} +461 -266
- package/dist/client/{form-C2h3YAcg.mjs → form-BvpfbQaT.mjs} +5 -5
- package/dist/client/{headerSection-lwMuMTH9.mjs → headerSection-I5sUQ8x-.mjs} +3 -3
- package/dist/client/hooks.mjs +909 -163
- package/dist/client/{locationMap-DJ2bLODV.mjs → locationMap-BLvwf9_f.mjs} +4 -4
- package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
- package/dist/client/{media-BtJ37tzS.mjs → media-Cl38iOMI.mjs} +11 -4
- package/dist/client/{newsletterForm-8Pu5K32g.mjs → newsletterForm-DrQ2weE8.mjs} +6 -6
- package/dist/client/{pricing-HHx3IgBz.mjs → pricing-BES87mrR.mjs} +1 -1
- package/dist/client/{productDetail-C_1odnAf.mjs → productDetail-Url9jcc5.mjs} +3 -3
- package/dist/client/{productList-CtCv-Nmx.mjs → productList-DE7ngEZJ.mjs} +3 -3
- package/dist/client/{propsDecoder-Dcgsncxb.mjs → propsDecoder-D1OtGXDV.mjs} +140 -22
- package/dist/client/rendering/client.mjs +2366 -997
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +4607 -2884
- package/dist/client/{routeIslandApiConfig-CWLP7wu3.mjs → routeIslandApiConfig-BG9Y-SHg.mjs} +1 -1
- package/dist/client/{shop-DQXrQ8kJ.mjs → shop-CJkuySJ3.mjs} +126 -79
- package/dist/client/{shop-commerce-B88zmWWo.mjs → shop-commerce-4rKj5n9h.mjs} +26 -14
- package/dist/client/{shop-commerce-store-DtSfkKuX.mjs → shop-commerce-store-Bxm75Pg6.mjs} +1 -1
- package/dist/client/{shopShared-cuaONpkJ.mjs → shopShared-DpoQDWfz.mjs} +5 -5
- package/dist/client/{useEventFilters-Bukew6Gb.mjs → useEventFilters-D8HliSqR.mjs} +33 -18
- package/dist/preview-next/before-render.mjs +314 -133
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/editor-base.css +53 -2
- package/dist/preview-next/editor-chrome.css +7 -4
- package/dist/preview-next/keepAlive.mjs +314 -133
- package/dist/preview-next/middleware.mjs +314 -133
- package/dist/{previewAuthStore-h5IgbSp4.mjs → previewAuthStore-BXXF3hhW.mjs} +316 -133
- package/dist/{sdk-runtime-DTc1uIXn.mjs → sdk-runtime-C2a05WjL.mjs} +2 -2
- package/dist/{separator-BpHS1KZK.mjs → separator-CuNhBAhS.mjs} +1 -1
- package/dist/server/components.mjs +6888 -6157
- package/dist/server/config-validation.mjs +931 -199
- package/dist/server/config.mjs +931 -199
- package/dist/server/data.mjs +929 -198
- package/dist/server/index.mjs +317 -134
- package/dist/server/navigation.mjs +13 -2
- package/dist/server/next.mjs +5003 -4340
- package/dist/server/page-converter.mjs +160 -78
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +6421 -5687
- package/dist/server/rendering.mjs +7683 -6933
- package/dist/server/routing.mjs +1035 -338
- package/dist/server/server.mjs +946 -256
- package/dist/server/theme-bridge.mjs +66 -17
- package/dist/server/theme.mjs +5 -1
- package/dist/styles/index.css +32 -4
- package/package.json +1 -1
- package/dist/_dts/billing/src/plans/display.d.ts +0 -15
- 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/_dts/core/src/participant-identity.d.ts +0 -135
- package/dist/client/DiscountCodeDisclosure-CsOtjFY7.mjs +0 -137
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-
|
|
3
|
-
import {
|
|
4
|
-
import { At as
|
|
5
|
-
import { n as useBlockApi, t as BlockApiProvider } from "./context-
|
|
2
|
+
import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-j5U9v5JA.mjs";
|
|
3
|
+
import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as BookingConsentAgreement, r as StepIndicator, t as BookingMailingListNote } from "./BookingMailingListNote-CzRt2dF_.mjs";
|
|
4
|
+
import { At as isBookingServiceSlidingAmountInRange, Bt as BOOKING_FORM_DATA_RESERVED_KEYS, Cn as formatCurrencyAmount, Ct as formatBookingSubmissionPreparationError, Dt as getBookingSuccessCopy, Et as getBookingServiceSlidingScale, Ft as resolveBookingSiteId, Gt as clearWorkflowFeedback, It as resolveDefaultBookingServiceId, Jt as okWith, Kt as err, Lt as toSelectedCollectionOptionKind, Mt as prepareBookingSubmission, Nt as resolveAppointmentCheckoutVerificationState, Pt as resolveBookingPaymentStep, Rt as projectSelectedAppointmentConsentIntoForm, St as formatBookingCentsAsCurrencyInput, Tt as getBookingServicePaymentSelectionMode, Vt as isBookingRequirementConsentFieldId, Wt as assertNever, Xt as reportWorkflowSuccess, Yt as reportWorkflowError, an as formatBookingInstant, bt as logger, dn as resolveBookingTimeZoneId, en as resolveBookingSignupOffer, jt as parseBookingCurrencyInputToCents, sn as formatLocalScheduleDate, t as defineIslandPropsDecoder, tn as addLocalScheduleDays, un as parseBookingLocalDate, wt as getBookingRedirectStateFromLocation, xt as deriveBookingFormViewState, zt as resolveSelectedAppointmentConsent } from "./propsDecoder-D1OtGXDV.mjs";
|
|
5
|
+
import { n as useBlockApi, t as BlockApiProvider } from "./context-eW97E945.mjs";
|
|
6
6
|
import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-
|
|
7
|
+
import { o as DiscountCodeDisclosure, p as storeDemoBookingPassIfAvailable, t as BookingConfirmation } from "./DemoBookingPortalAccess-mxqwap3f.mjs";
|
|
8
|
+
import { a as useDiscountCodeUi, i as CheckIcon, n as StateIcon, r as scrollToBlock, t as TerminalPanel } from "./TerminalPanel-DvNUP5ot.mjs";
|
|
9
|
+
import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-C7CeUJjW.mjs";
|
|
10
10
|
import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
|
|
11
|
-
import {
|
|
12
|
-
import { t as buildCheckoutReturnUrls } from "./checkoutUrls-
|
|
13
|
-
import { t as CheckboxChoice } from "./CheckboxChoice
|
|
11
|
+
import { i as getFieldValidationControlProps, r as FieldValidationMessage } from "./mailingListSignupCopy-DZSHZrm6.mjs";
|
|
12
|
+
import { t as buildCheckoutReturnUrls } from "./checkoutUrls-CXhko2Rv.mjs";
|
|
13
|
+
import { t as CheckboxChoice } from "./CheckboxChoice-B33MqoUo.mjs";
|
|
14
14
|
import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
|
|
15
|
-
import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-
|
|
15
|
+
import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-BG9Y-SHg.mjs";
|
|
16
16
|
import React, { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
17
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
17
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
18
18
|
//#region ../core/src/appointment-service-categories.ts
|
|
19
19
|
/**
|
|
20
20
|
* Groups services under their categories.
|
|
@@ -55,29 +55,31 @@ function layoutServicesByCategory(categories, services, options) {
|
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
//#endregion
|
|
58
|
-
//#region ../blocks/src/system/runtime/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
58
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.payment-confirmation.ts
|
|
59
|
+
function bookingServiceRequiresPaymentBeforeBooking(input) {
|
|
60
|
+
switch (getBookingServicePaymentSelectionMode(input.service)) {
|
|
61
|
+
case "implicit_upfront":
|
|
62
|
+
case "implicit_instalment_plan":
|
|
63
|
+
case "implicit_flexible_balance": return true;
|
|
64
|
+
case "choice_required": return input.selectedCollectionOptionKind !== void 0 && input.selectedCollectionOptionKind !== "deferred_manual";
|
|
65
|
+
case "implicit_deferred_manual":
|
|
66
|
+
case "pending_stripe_setup":
|
|
67
|
+
case "unsupported": return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function resolveBookingPaymentConfirmationSummary(input) {
|
|
71
|
+
const service = input.service;
|
|
72
|
+
if (!service || input.hasSelectedAppointmentPackage || !Number.isFinite(input.priceAmount) || input.priceAmount <= 0 || !service.durationMinutes || !bookingServiceRequiresPaymentBeforeBooking({
|
|
73
|
+
service,
|
|
74
|
+
selectedCollectionOptionKind: input.selectedCollectionOptionKind
|
|
75
|
+
})) return null;
|
|
76
|
+
return {
|
|
77
|
+
serviceTitle: service.title,
|
|
78
|
+
durationMinutes: service.durationMinutes,
|
|
79
|
+
priceAmount: input.priceAmount,
|
|
80
|
+
priceCurrency: service.priceCurrency ?? service.pricing?.currency ?? "USD"
|
|
81
|
+
};
|
|
82
|
+
}
|
|
81
83
|
//#endregion
|
|
82
84
|
//#region ../blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.ts
|
|
83
85
|
function useSelectedAppointmentConsentForm(form, selectedService) {
|
|
@@ -643,6 +645,7 @@ function useBookingSubmission(_siteId) {
|
|
|
643
645
|
startAt: data.startAt,
|
|
644
646
|
endAt: data.endAt,
|
|
645
647
|
customFields: data.customFields,
|
|
648
|
+
mailingListOptIn: data.mailingListOptIn,
|
|
646
649
|
timezone: data.timezone,
|
|
647
650
|
customerPassId: data.customerPassId
|
|
648
651
|
}) : await api.submitBooking({
|
|
@@ -652,6 +655,7 @@ function useBookingSubmission(_siteId) {
|
|
|
652
655
|
startAt: data.startAt,
|
|
653
656
|
endAt: data.endAt,
|
|
654
657
|
customFields: data.customFields,
|
|
658
|
+
mailingListOptIn: data.mailingListOptIn,
|
|
655
659
|
timezone: data.timezone,
|
|
656
660
|
discountCode: data.discountCode,
|
|
657
661
|
selectedSlidingAmount: data.selectedSlidingAmount,
|
|
@@ -660,6 +664,7 @@ function useBookingSubmission(_siteId) {
|
|
|
660
664
|
successUrl: data.successUrl,
|
|
661
665
|
cancelUrl: data.cancelUrl
|
|
662
666
|
});
|
|
667
|
+
storeDemoBookingPassIfAvailable(response.customer.email, response.demoBookingPass);
|
|
663
668
|
dispatch({
|
|
664
669
|
type: "submission-succeeded",
|
|
665
670
|
message: response.type === "checkout_redirect" ? "Redirecting to secure checkout..." : "Booking submitted successfully."
|
|
@@ -687,6 +692,45 @@ function useBookingSubmission(_siteId) {
|
|
|
687
692
|
};
|
|
688
693
|
}
|
|
689
694
|
//#endregion
|
|
695
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.submit-success.ts
|
|
696
|
+
function completeBookingSubmission(input) {
|
|
697
|
+
const { data } = input;
|
|
698
|
+
if (data.type === "checkout_redirect") {
|
|
699
|
+
if (input.redirect === "auto" && typeof window !== "undefined") input.navigateToCheckout(data.checkoutUrl);
|
|
700
|
+
return {
|
|
701
|
+
ok: true,
|
|
702
|
+
outcome: {
|
|
703
|
+
kind: "checkout_redirect",
|
|
704
|
+
checkoutUrl: data.checkoutUrl,
|
|
705
|
+
sessionId: data.sessionId,
|
|
706
|
+
customerEmail: data.customer.email,
|
|
707
|
+
...data.demoBookingPass ? { demoBookingPass: data.demoBookingPass } : {},
|
|
708
|
+
...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
}
|
|
712
|
+
const successCopy = getBookingSuccessCopy(input.successMessage);
|
|
713
|
+
input.dispatch({
|
|
714
|
+
type: "feedback-set",
|
|
715
|
+
feedback: {
|
|
716
|
+
kind: "success",
|
|
717
|
+
message: successCopy.defaultEmailSentence ? `${successCopy.message} ${successCopy.defaultEmailSentence}`.trim() : successCopy.message,
|
|
718
|
+
resourceName: data.appointment.resourceName
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
return {
|
|
722
|
+
ok: true,
|
|
723
|
+
outcome: {
|
|
724
|
+
kind: "booked",
|
|
725
|
+
appointmentId: data.appointment.id,
|
|
726
|
+
resourceName: data.appointment.resourceName,
|
|
727
|
+
customerEmail: data.customer.email,
|
|
728
|
+
...data.demoBookingPass ? { demoBookingPass: data.demoBookingPass } : {},
|
|
729
|
+
...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
|
|
730
|
+
}
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
//#endregion
|
|
690
734
|
//#region ../blocks/src/system/runtime/nodes/booking-form.validationErrors.ts
|
|
691
735
|
function omitRecordKey(record, key) {
|
|
692
736
|
if (!(key in record)) return record;
|
|
@@ -728,6 +772,40 @@ function clearBookingFieldError(errors, fieldId) {
|
|
|
728
772
|
};
|
|
729
773
|
}
|
|
730
774
|
//#endregion
|
|
775
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-state.ts
|
|
776
|
+
function bookingFormDataWithEligibleOptIn(data, eligible) {
|
|
777
|
+
return {
|
|
778
|
+
...data,
|
|
779
|
+
mailingListOptIn: eligible && data.mailingListOptIn === true
|
|
780
|
+
};
|
|
781
|
+
}
|
|
782
|
+
function isBookingContactEvent(event) {
|
|
783
|
+
return event.type === "field-updated" || event.type === "field-touched" || event.type === "mailing-list-opt-in-set";
|
|
784
|
+
}
|
|
785
|
+
function applyBookingContactEvent(state, event) {
|
|
786
|
+
switch (event.type) {
|
|
787
|
+
case "field-updated": return {
|
|
788
|
+
...state,
|
|
789
|
+
fieldValues: {
|
|
790
|
+
...state.fieldValues,
|
|
791
|
+
[event.fieldId]: event.value
|
|
792
|
+
},
|
|
793
|
+
validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
|
|
794
|
+
};
|
|
795
|
+
case "field-touched": return {
|
|
796
|
+
...state,
|
|
797
|
+
touchedFields: {
|
|
798
|
+
...state.touchedFields,
|
|
799
|
+
[event.fieldId]: true
|
|
800
|
+
}
|
|
801
|
+
};
|
|
802
|
+
case "mailing-list-opt-in-set": return {
|
|
803
|
+
...state,
|
|
804
|
+
mailingListOptIn: event.checked
|
|
805
|
+
};
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
//#endregion
|
|
731
809
|
//#region ../blocks/src/system/runtime/nodes/booking-form.field-values.ts
|
|
732
810
|
function collectInitialBookingFieldValues(initialData) {
|
|
733
811
|
const values = {};
|
|
@@ -753,6 +831,7 @@ function createInitialBookingFlowReducerState(input) {
|
|
|
753
831
|
selectedDate: toOptionalString(initialData.selectedDate),
|
|
754
832
|
selectedSlot: null,
|
|
755
833
|
fieldValues: collectInitialBookingFieldValues(initialData),
|
|
834
|
+
mailingListOptIn: initialData.mailingListOptIn === true,
|
|
756
835
|
touchedFields: {},
|
|
757
836
|
attemptedStepIds: {},
|
|
758
837
|
discountCode: toOptionalString(initialData.discountCode) ?? "",
|
|
@@ -802,6 +881,7 @@ function applyAvailabilitySelectionInvalidation(state, invalidation) {
|
|
|
802
881
|
};
|
|
803
882
|
}
|
|
804
883
|
function bookingFlowReducer(state, event) {
|
|
884
|
+
if (isBookingContactEvent(event)) return applyBookingContactEvent(state, event);
|
|
805
885
|
switch (event.type) {
|
|
806
886
|
case "service-selected": return applyBookingServiceSelection(state, event.serviceId);
|
|
807
887
|
case "resource-selected": return {
|
|
@@ -824,21 +904,6 @@ function bookingFlowReducer(state, event) {
|
|
|
824
904
|
feedback: clearAvailabilityFeedback(state.feedback),
|
|
825
905
|
validationErrors: clearBookingFormError(state.validationErrors)
|
|
826
906
|
};
|
|
827
|
-
case "field-updated": return {
|
|
828
|
-
...state,
|
|
829
|
-
fieldValues: {
|
|
830
|
-
...state.fieldValues,
|
|
831
|
-
[event.fieldId]: event.value
|
|
832
|
-
},
|
|
833
|
-
validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
|
|
834
|
-
};
|
|
835
|
-
case "field-touched": return {
|
|
836
|
-
...state,
|
|
837
|
-
touchedFields: {
|
|
838
|
-
...state.touchedFields,
|
|
839
|
-
[event.fieldId]: true
|
|
840
|
-
}
|
|
841
|
-
};
|
|
842
907
|
case "step-advance-attempted": return state.attemptedStepIds[event.stepId] ? state : {
|
|
843
908
|
...state,
|
|
844
909
|
attemptedStepIds: {
|
|
@@ -976,6 +1041,7 @@ function deriveBookingSlotDisplayOptions(input) {
|
|
|
976
1041
|
function toBookingFormData(state) {
|
|
977
1042
|
return {
|
|
978
1043
|
...state.fieldValues,
|
|
1044
|
+
mailingListOptIn: state.mailingListOptIn,
|
|
979
1045
|
serviceId: state.selectedServiceId,
|
|
980
1046
|
resourceId: state.selectedResourceId ?? state.selectedSlot?.resourceId,
|
|
981
1047
|
selectedDate: state.selectedDate,
|
|
@@ -1238,10 +1304,7 @@ function buildBookingSubmitPlan(input) {
|
|
|
1238
1304
|
};
|
|
1239
1305
|
const prepared = prepareBookingSubmission({
|
|
1240
1306
|
formId: input.formId,
|
|
1241
|
-
data: toBookingFormData(
|
|
1242
|
-
...input.state,
|
|
1243
|
-
altchaSolution: input.altchaSolution ?? input.state.altchaSolution
|
|
1244
|
-
}),
|
|
1307
|
+
data: bookingFormDataWithEligibleOptIn(toBookingFormData(input.state), Boolean(input.mailingListEligible)),
|
|
1245
1308
|
services: input.services,
|
|
1246
1309
|
defaultServiceId: input.defaultServiceId,
|
|
1247
1310
|
defaultResourceId: input.defaultResourceId,
|
|
@@ -1427,6 +1490,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
1427
1490
|
const canLoadAppointmentPackages = Boolean(options.enableAppointmentPackages && hasPortalBearerAuth && selectedService && !selectedServiceSlidingScale && (selectedService.priceAmount ?? 0) > 0);
|
|
1428
1491
|
const appointmentPackagesUnavailableReason = !options.enableAppointmentPackages ? "disabled" : !selectedService || selectedServiceSlidingScale || (selectedService.priceAmount ?? 0) <= 0 ? "missing-priced-service" : !hasPortalBearerAuth ? "missing-portal-auth" : null;
|
|
1429
1492
|
const data = useMemo(() => toBookingFormData(state), [state]);
|
|
1493
|
+
const mailingList = resolveBookingSignupOffer(options.mailingList, options.siteName);
|
|
1494
|
+
const mailingListEligible = mailingList !== null;
|
|
1430
1495
|
const availabilityDatesQuery = useMemo(() => buildBookingAvailabilityQuery({
|
|
1431
1496
|
serviceId: selectedServiceId,
|
|
1432
1497
|
resourceId: selectedResourceId,
|
|
@@ -1687,7 +1752,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
1687
1752
|
viewerTimeZone: latest.viewerTimeZone,
|
|
1688
1753
|
redirect: submitOptions?.redirect ?? "manual",
|
|
1689
1754
|
successUrl: submitOptions?.successUrl,
|
|
1690
|
-
cancelUrl: submitOptions?.cancelUrl
|
|
1755
|
+
cancelUrl: submitOptions?.cancelUrl,
|
|
1756
|
+
mailingListEligible
|
|
1691
1757
|
});
|
|
1692
1758
|
if (!plan.ok) {
|
|
1693
1759
|
dispatch({
|
|
@@ -1720,37 +1786,18 @@ function useHeadlessBookingFlow(options) {
|
|
|
1720
1786
|
message: result.error
|
|
1721
1787
|
};
|
|
1722
1788
|
}
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
checkoutUrl: result.data.checkoutUrl
|
|
1730
|
-
}
|
|
1731
|
-
};
|
|
1732
|
-
}
|
|
1733
|
-
dispatch({
|
|
1734
|
-
type: "feedback-set",
|
|
1735
|
-
feedback: {
|
|
1736
|
-
kind: "success",
|
|
1737
|
-
message: getBookingSuccessMessage(latest.successMessage),
|
|
1738
|
-
resourceName: result.data.appointment.resourceName
|
|
1739
|
-
}
|
|
1789
|
+
return completeBookingSubmission({
|
|
1790
|
+
data: result.data,
|
|
1791
|
+
redirect: plan.redirect,
|
|
1792
|
+
successMessage: latest.successMessage,
|
|
1793
|
+
navigateToCheckout: latest.navigateToCheckout,
|
|
1794
|
+
dispatch
|
|
1740
1795
|
});
|
|
1741
|
-
return {
|
|
1742
|
-
ok: true,
|
|
1743
|
-
outcome: {
|
|
1744
|
-
kind: "booked",
|
|
1745
|
-
appointmentId: result.data.appointment.id,
|
|
1746
|
-
resourceName: result.data.appointment.resourceName
|
|
1747
|
-
}
|
|
1748
|
-
};
|
|
1749
1796
|
} finally {
|
|
1750
1797
|
submittingRef.current = false;
|
|
1751
1798
|
dispatch({ type: "submission-finished" });
|
|
1752
1799
|
}
|
|
1753
|
-
}, [latestRef]);
|
|
1800
|
+
}, [latestRef, mailingListEligible]);
|
|
1754
1801
|
const actions = useMemo(() => ({
|
|
1755
1802
|
selectService: (serviceId) => dispatch({
|
|
1756
1803
|
type: "service-selected",
|
|
@@ -1773,6 +1820,10 @@ function useHeadlessBookingFlow(options) {
|
|
|
1773
1820
|
fieldId: unsafeAsBookingFieldId(fieldId),
|
|
1774
1821
|
value
|
|
1775
1822
|
}),
|
|
1823
|
+
setMailingListOptIn: (checked) => dispatch({
|
|
1824
|
+
type: "mailing-list-opt-in-set",
|
|
1825
|
+
checked
|
|
1826
|
+
}),
|
|
1776
1827
|
markFieldTouched: (fieldId) => dispatch({
|
|
1777
1828
|
type: "field-touched",
|
|
1778
1829
|
fieldId: unsafeAsBookingFieldId(fieldId)
|
|
@@ -1889,6 +1940,12 @@ function useHeadlessBookingFlow(options) {
|
|
|
1889
1940
|
selectedService,
|
|
1890
1941
|
state.selectedSlot?.startAt
|
|
1891
1942
|
]);
|
|
1943
|
+
const paymentConfirmationSummary = resolveBookingPaymentConfirmationSummary({
|
|
1944
|
+
service: selectedService,
|
|
1945
|
+
priceAmount: selectedAppointmentPriceAmount,
|
|
1946
|
+
selectedCollectionOptionKind: state.selectedCollectionOptionKind,
|
|
1947
|
+
hasSelectedAppointmentPackage: Boolean(state.selectedAppointmentPackageId)
|
|
1948
|
+
});
|
|
1892
1949
|
const appointmentPackageItems = appointmentPackages.tag === "loaded" ? appointmentPackages.value : [];
|
|
1893
1950
|
const selectedAppointmentPackage = appointmentPackageItems.find((appointmentPackage) => appointmentPackage.customerPassId === state.selectedAppointmentPackageId) ?? null;
|
|
1894
1951
|
const spamProtectionEnabled = options.spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
@@ -1918,7 +1975,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
1918
1975
|
selectedSlidingAmount,
|
|
1919
1976
|
slidingScale: selectedServiceSlidingScale,
|
|
1920
1977
|
appointmentPackages: appointmentPackagesModel,
|
|
1921
|
-
errorMessage: paymentResolution.errorMessage ?? "This service cannot be booked right now."
|
|
1978
|
+
errorMessage: paymentResolution.errorMessage ?? "This service cannot be booked right now.",
|
|
1979
|
+
confirmationSummary: null
|
|
1922
1980
|
} : {
|
|
1923
1981
|
kind: "ok",
|
|
1924
1982
|
mode: paymentResolution.mode,
|
|
@@ -1928,9 +1986,12 @@ function useHeadlessBookingFlow(options) {
|
|
|
1928
1986
|
selectedSlidingAmountInput: state.selectedSlidingAmountInput,
|
|
1929
1987
|
selectedSlidingAmount,
|
|
1930
1988
|
slidingScale: selectedServiceSlidingScale,
|
|
1931
|
-
appointmentPackages: appointmentPackagesModel
|
|
1989
|
+
appointmentPackages: appointmentPackagesModel,
|
|
1990
|
+
confirmationSummary: paymentConfirmationSummary
|
|
1932
1991
|
};
|
|
1933
1992
|
return {
|
|
1993
|
+
mailingList,
|
|
1994
|
+
mailingListOptIn: state.mailingListOptIn,
|
|
1934
1995
|
status,
|
|
1935
1996
|
view,
|
|
1936
1997
|
steps: stepState.steps,
|
|
@@ -2022,6 +2083,10 @@ function useLatestRef(value) {
|
|
|
2022
2083
|
}
|
|
2023
2084
|
//#endregion
|
|
2024
2085
|
//#region ../blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.ts
|
|
2086
|
+
const APPOINTMENT_CHECKOUT_MAX_ATTEMPTS = 12;
|
|
2087
|
+
function resolveAppointmentCheckoutPollInterval(attempt) {
|
|
2088
|
+
return Math.min(1e3 * 2 ** (attempt - 1), 4e3);
|
|
2089
|
+
}
|
|
2025
2090
|
const appointmentCheckoutVerificationDeps = {
|
|
2026
2091
|
useBlockApi,
|
|
2027
2092
|
usePolling
|
|
@@ -2031,16 +2096,25 @@ function useAppointmentCheckoutVerification(config) {
|
|
|
2031
2096
|
}
|
|
2032
2097
|
function useAppointmentCheckoutVerificationWithDeps(config, deps) {
|
|
2033
2098
|
const api = deps.useBlockApi();
|
|
2099
|
+
const sessionId = config?.sessionId ?? null;
|
|
2100
|
+
const maxAttempts = config?.maxAttempts;
|
|
2101
|
+
const pollInterval = config?.pollInterval;
|
|
2034
2102
|
const pollingConfig = useMemo(() => {
|
|
2035
|
-
if (
|
|
2103
|
+
if (sessionId === null) return null;
|
|
2036
2104
|
return {
|
|
2037
|
-
|
|
2105
|
+
restartKey: sessionId,
|
|
2106
|
+
pollFn: () => api.getAppointmentBookingStatus({ sessionId }),
|
|
2038
2107
|
isComplete: (result) => (result.paymentStatus === "completed" || result.paymentStatus === "not_required") && result.appointmentStatus === "confirmed",
|
|
2039
2108
|
isFailed: (result) => result.paymentStatus === "failed" || result.paymentStatus === "cancelled" || result.paymentStatus === "refunded" || result.appointmentStatus === "cancelled",
|
|
2040
|
-
maxAttempts:
|
|
2041
|
-
interval:
|
|
2109
|
+
maxAttempts: maxAttempts ?? APPOINTMENT_CHECKOUT_MAX_ATTEMPTS,
|
|
2110
|
+
interval: pollInterval ?? resolveAppointmentCheckoutPollInterval
|
|
2042
2111
|
};
|
|
2043
|
-
}, [
|
|
2112
|
+
}, [
|
|
2113
|
+
api,
|
|
2114
|
+
sessionId,
|
|
2115
|
+
maxAttempts,
|
|
2116
|
+
pollInterval
|
|
2117
|
+
]);
|
|
2044
2118
|
const polling = deps.usePolling(pollingConfig);
|
|
2045
2119
|
return {
|
|
2046
2120
|
state: resolveAppointmentCheckoutVerificationState({
|
|
@@ -2228,6 +2302,25 @@ const TimeSlotSelector = ({ value, onChange, slots, isLoading, timezone, require
|
|
|
2228
2302
|
});
|
|
2229
2303
|
};
|
|
2230
2304
|
//#endregion
|
|
2305
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.tsx
|
|
2306
|
+
function BookingMailingListChoice({ booking }) {
|
|
2307
|
+
const id = React.useId();
|
|
2308
|
+
if (!booking.mailingList) return null;
|
|
2309
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
2310
|
+
className: "rb-space-y-2",
|
|
2311
|
+
children: [/* @__PURE__ */ jsx(CheckboxChoice, {
|
|
2312
|
+
id,
|
|
2313
|
+
name: "mailingListOptIn",
|
|
2314
|
+
checked: booking.mailingListOptIn,
|
|
2315
|
+
onChange: (event) => booking.actions.setMailingListOptIn(event.target.checked),
|
|
2316
|
+
label: `Email me news and updates from ${booking.mailingList.siteName}.`
|
|
2317
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
2318
|
+
className: "rb-caption status-muted",
|
|
2319
|
+
children: "Optional. You can unsubscribe at any time."
|
|
2320
|
+
})]
|
|
2321
|
+
});
|
|
2322
|
+
}
|
|
2323
|
+
//#endregion
|
|
2231
2324
|
//#region ../blocks/src/system/runtime/nodes/booking-form.service-choices.tsx
|
|
2232
2325
|
function optionCardClassName(isSelected) {
|
|
2233
2326
|
return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
|
|
@@ -2318,6 +2411,72 @@ function ServiceChoiceGrid({ booking, choices }) {
|
|
|
2318
2411
|
});
|
|
2319
2412
|
}
|
|
2320
2413
|
//#endregion
|
|
2414
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.submit-actions.tsx
|
|
2415
|
+
function resolvePrimaryActionLabel(isLastStep, requiresPayment) {
|
|
2416
|
+
if (!isLastStep) return "Continue";
|
|
2417
|
+
return requiresPayment ? "Continue to payment" : "Complete";
|
|
2418
|
+
}
|
|
2419
|
+
function formatBookingConfirmationDateTime(booking) {
|
|
2420
|
+
const startAt = booking.currentStep?.id === "datetime-selection" ? booking.availability.selectedSlot?.startAt : void 0;
|
|
2421
|
+
return startAt ? new Intl.DateTimeFormat(void 0, {
|
|
2422
|
+
dateStyle: "medium",
|
|
2423
|
+
timeStyle: "short",
|
|
2424
|
+
timeZone: booking.availability.timezone
|
|
2425
|
+
}).format(new Date(startAt)) : null;
|
|
2426
|
+
}
|
|
2427
|
+
function BookingPaymentConfirmationText({ booking, summary }) {
|
|
2428
|
+
if (!summary) return null;
|
|
2429
|
+
const dateTime = formatBookingConfirmationDateTime(booking);
|
|
2430
|
+
return /* @__PURE__ */ jsxs("p", {
|
|
2431
|
+
className: "ab-text rb-on-surface--muted",
|
|
2432
|
+
children: [
|
|
2433
|
+
summary.serviceTitle,
|
|
2434
|
+
" · ",
|
|
2435
|
+
summary.durationMinutes,
|
|
2436
|
+
" min ·",
|
|
2437
|
+
" ",
|
|
2438
|
+
formatCurrencyAmount(summary.priceAmount, summary.priceCurrency, { decimals: "auto" }),
|
|
2439
|
+
dateTime ? ` · ${dateTime}` : ""
|
|
2440
|
+
]
|
|
2441
|
+
});
|
|
2442
|
+
}
|
|
2443
|
+
function BookingFormSubmitActions({ booking, onSubmit }) {
|
|
2444
|
+
const currentStepIndex = booking.currentStep?.visibleIndex ?? 0;
|
|
2445
|
+
const isFirstStep = currentStepIndex === 0;
|
|
2446
|
+
const isLastStep = currentStepIndex === booking.steps.length - 1;
|
|
2447
|
+
const isSubmitting = booking.status.tag === "submitting";
|
|
2448
|
+
const paymentSummary = isLastStep && booking.payment.kind === "ok" ? booking.payment.confirmationSummary : null;
|
|
2449
|
+
const handlePrimaryAction = async () => {
|
|
2450
|
+
if ((await booking.actions.next()).ok && isLastStep) await onSubmit();
|
|
2451
|
+
};
|
|
2452
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BookingPaymentConfirmationText, {
|
|
2453
|
+
booking,
|
|
2454
|
+
summary: paymentSummary
|
|
2455
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
2456
|
+
className: "rb-wizard-actions",
|
|
2457
|
+
children: [!isFirstStep ? /* @__PURE__ */ jsx(ThemedButton, {
|
|
2458
|
+
type: "button",
|
|
2459
|
+
onClick: booking.actions.back,
|
|
2460
|
+
variant: "outline",
|
|
2461
|
+
size: "md",
|
|
2462
|
+
label: "Back"
|
|
2463
|
+
}) : null, /* @__PURE__ */ jsx(ThemedButton, {
|
|
2464
|
+
type: "button",
|
|
2465
|
+
onClick: () => {
|
|
2466
|
+
handlePrimaryAction();
|
|
2467
|
+
},
|
|
2468
|
+
disabled: isSubmitting,
|
|
2469
|
+
variant: "primary",
|
|
2470
|
+
size: "md",
|
|
2471
|
+
label: resolvePrimaryActionLabel(isLastStep, Boolean(paymentSummary)),
|
|
2472
|
+
pending: isSubmitting ? {
|
|
2473
|
+
label: "Submitting...",
|
|
2474
|
+
srLabel: "Submitting"
|
|
2475
|
+
} : void 0
|
|
2476
|
+
})]
|
|
2477
|
+
})] });
|
|
2478
|
+
}
|
|
2479
|
+
//#endregion
|
|
2321
2480
|
//#region ../blocks/src/system/runtime/nodes/booking-form.default-ui.tsx
|
|
2322
2481
|
function formatBookingAmount(amount, currency) {
|
|
2323
2482
|
return formatCurrencyAmount(amount, currency, { decimals: "auto" });
|
|
@@ -2326,13 +2485,6 @@ function HeadlessBookingDefaultForm({ booking, onSubmit }) {
|
|
|
2326
2485
|
const currentStep = booking.currentStep;
|
|
2327
2486
|
const errorSummaryId = React.useId();
|
|
2328
2487
|
const currentStepIndex = currentStep?.visibleIndex ?? 0;
|
|
2329
|
-
const isFirstStep = currentStepIndex === 0;
|
|
2330
|
-
const isLastStep = currentStepIndex === booking.steps.length - 1;
|
|
2331
|
-
const isSubmitting = booking.status.tag === "submitting";
|
|
2332
|
-
const handlePrimaryAction = async () => {
|
|
2333
|
-
if (!(await booking.actions.next()).ok) return;
|
|
2334
|
-
if (isLastStep) await onSubmit();
|
|
2335
|
-
};
|
|
2336
2488
|
if (!currentStep) return /* @__PURE__ */ jsx("div", {
|
|
2337
2489
|
className: "rb-text-center rb-py-12",
|
|
2338
2490
|
children: /* @__PURE__ */ jsx("p", {
|
|
@@ -2360,28 +2512,9 @@ function HeadlessBookingDefaultForm({ booking, onSubmit }) {
|
|
|
2360
2512
|
errors: currentStep.errors,
|
|
2361
2513
|
id: errorSummaryId
|
|
2362
2514
|
}),
|
|
2363
|
-
/* @__PURE__ */
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
type: "button",
|
|
2367
|
-
onClick: booking.actions.back,
|
|
2368
|
-
variant: "outline",
|
|
2369
|
-
size: "md",
|
|
2370
|
-
label: "Back"
|
|
2371
|
-
}) : null, /* @__PURE__ */ jsx(ThemedButton, {
|
|
2372
|
-
type: "button",
|
|
2373
|
-
onClick: () => {
|
|
2374
|
-
handlePrimaryAction();
|
|
2375
|
-
},
|
|
2376
|
-
disabled: isSubmitting,
|
|
2377
|
-
variant: "primary",
|
|
2378
|
-
size: "md",
|
|
2379
|
-
label: isLastStep ? "Complete" : "Continue",
|
|
2380
|
-
pending: isSubmitting ? {
|
|
2381
|
-
label: "Submitting...",
|
|
2382
|
-
srLabel: "Submitting"
|
|
2383
|
-
} : void 0
|
|
2384
|
-
})]
|
|
2515
|
+
/* @__PURE__ */ jsx(BookingFormSubmitActions, {
|
|
2516
|
+
booking,
|
|
2517
|
+
onSubmit
|
|
2385
2518
|
}),
|
|
2386
2519
|
/* @__PURE__ */ jsx(DefaultBookingDiscount, { booking }),
|
|
2387
2520
|
/* @__PURE__ */ jsx(DefaultBookingFeedback, { booking }),
|
|
@@ -2707,12 +2840,17 @@ function PaymentOptionContent({ description, helperText, id, summaryRows, title
|
|
|
2707
2840
|
});
|
|
2708
2841
|
}
|
|
2709
2842
|
function DefaultDynamicFields({ booking, fields }) {
|
|
2843
|
+
const lastContactIndex = fields.reduce((last, field, index) => [
|
|
2844
|
+
"name",
|
|
2845
|
+
"email",
|
|
2846
|
+
"phone"
|
|
2847
|
+
].includes(field.id) ? index : last, -1);
|
|
2710
2848
|
return /* @__PURE__ */ jsx("div", {
|
|
2711
2849
|
className: "rb-space-y-6",
|
|
2712
|
-
children: fields.map((field) => /* @__PURE__ */ jsx(DefaultDynamicField, {
|
|
2850
|
+
children: fields.map((field, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(DefaultDynamicField, {
|
|
2713
2851
|
booking,
|
|
2714
2852
|
field
|
|
2715
|
-
}, field.id))
|
|
2853
|
+
}), index === lastContactIndex && booking.mailingList ? /* @__PURE__ */ jsx(BookingMailingListChoice, { booking }) : null] }, field.id))
|
|
2716
2854
|
});
|
|
2717
2855
|
}
|
|
2718
2856
|
function DefaultDynamicField({ booking, field }) {
|
|
@@ -2983,9 +3121,122 @@ function DefaultBookingErrorSummary({ errors, id }) {
|
|
|
2983
3121
|
});
|
|
2984
3122
|
}
|
|
2985
3123
|
//#endregion
|
|
3124
|
+
//#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
|
|
3125
|
+
const SuccessMessage = ({ copy, resourceName, className, demoEmailSuppressed = false, customerEmail = null }) => {
|
|
3126
|
+
return /* @__PURE__ */ jsx(TerminalPanel, {
|
|
3127
|
+
tone: "success",
|
|
3128
|
+
title: "Booking confirmed",
|
|
3129
|
+
icon: /* @__PURE__ */ jsx(StateIcon, {
|
|
3130
|
+
variant: "success",
|
|
3131
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
|
|
3132
|
+
}),
|
|
3133
|
+
body: /* @__PURE__ */ jsx(BookingConfirmation, {
|
|
3134
|
+
demoEmailSuppressed,
|
|
3135
|
+
email: customerEmail,
|
|
3136
|
+
copy,
|
|
3137
|
+
messagePresentation: {
|
|
3138
|
+
kind: "paragraph",
|
|
3139
|
+
className: "ab-text"
|
|
3140
|
+
},
|
|
3141
|
+
noteClassName: "ab-text"
|
|
3142
|
+
}),
|
|
3143
|
+
secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
|
|
3144
|
+
className: "ab-text rb-on-surface--muted",
|
|
3145
|
+
children: ["Practitioner: ", resourceName]
|
|
3146
|
+
}) : null,
|
|
3147
|
+
className: ["ab-center", className ?? ""].join(" ").trim(),
|
|
3148
|
+
titleClassName: "ab-terminal-title",
|
|
3149
|
+
role: "alert",
|
|
3150
|
+
live: "polite"
|
|
3151
|
+
});
|
|
3152
|
+
};
|
|
3153
|
+
//#endregion
|
|
3154
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.checkout-return-context.ts
|
|
3155
|
+
function storageKey(sessionId) {
|
|
3156
|
+
return `riverbank:booking:mailing-list:${sessionId}`;
|
|
3157
|
+
}
|
|
3158
|
+
function saveAppointmentCheckoutReturnContext(sessionId, context) {
|
|
3159
|
+
if (!context.customerEmail && !context.mailingListNote) return;
|
|
3160
|
+
try {
|
|
3161
|
+
window.sessionStorage.setItem(storageKey(sessionId), JSON.stringify(context));
|
|
3162
|
+
} catch {}
|
|
3163
|
+
}
|
|
3164
|
+
function readAppointmentCheckoutReturnContext(sessionId) {
|
|
3165
|
+
try {
|
|
3166
|
+
const stored = window.sessionStorage.getItem(storageKey(sessionId));
|
|
3167
|
+
if (!stored) return null;
|
|
3168
|
+
return parseContext(stored);
|
|
3169
|
+
} catch {
|
|
3170
|
+
return null;
|
|
3171
|
+
}
|
|
3172
|
+
}
|
|
3173
|
+
function parseContext(value) {
|
|
3174
|
+
try {
|
|
3175
|
+
const parsed = JSON.parse(value);
|
|
3176
|
+
return isContext(parsed) ? parsed : null;
|
|
3177
|
+
} catch {
|
|
3178
|
+
return value === "confirmation_required" || value === "not_confirmed" ? {
|
|
3179
|
+
customerEmail: null,
|
|
3180
|
+
mailingListNote: value
|
|
3181
|
+
} : null;
|
|
3182
|
+
}
|
|
3183
|
+
}
|
|
3184
|
+
function isContext(value) {
|
|
3185
|
+
if (!isRecord(value)) return false;
|
|
3186
|
+
return (typeof value.customerEmail === "string" || value.customerEmail === null) && (value.mailingListNote === null || value.mailingListNote === "confirmation_required" || value.mailingListNote === "not_confirmed");
|
|
3187
|
+
}
|
|
3188
|
+
function isRecord(value) {
|
|
3189
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3190
|
+
}
|
|
3191
|
+
//#endregion
|
|
3192
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.completion.tsx
|
|
3193
|
+
function BookingFormCompletion({ resourceName, successMessage, redirectState, localNote, customerEmail, demoEmailSuppressed = false }) {
|
|
3194
|
+
const returnContext = redirectState.kind === "success" ? readAppointmentCheckoutReturnContext(redirectState.sessionId) : null;
|
|
3195
|
+
const note = redirectState.kind === "success" ? returnContext?.mailingListNote ?? null : localNote;
|
|
3196
|
+
const confirmedEmail = returnContext?.customerEmail ?? customerEmail;
|
|
3197
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SuccessMessage, {
|
|
3198
|
+
copy: getBookingSuccessCopy(successMessage),
|
|
3199
|
+
resourceName,
|
|
3200
|
+
demoEmailSuppressed,
|
|
3201
|
+
customerEmail: confirmedEmail
|
|
3202
|
+
}), note ? /* @__PURE__ */ jsx(BookingMailingListNote, {
|
|
3203
|
+
note,
|
|
3204
|
+
context: "booking",
|
|
3205
|
+
className: "rb-mt-4"
|
|
3206
|
+
}) : null] });
|
|
3207
|
+
}
|
|
3208
|
+
//#endregion
|
|
3209
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.submit-handler.ts
|
|
3210
|
+
function appendRebookFlag(url, enabled) {
|
|
3211
|
+
if (!enabled) return url;
|
|
3212
|
+
const nextUrl = new URL(url);
|
|
3213
|
+
nextUrl.searchParams.set("rebook", "1");
|
|
3214
|
+
return nextUrl.toString();
|
|
3215
|
+
}
|
|
3216
|
+
function createBookingFormSubmitHandler(input) {
|
|
3217
|
+
return async () => {
|
|
3218
|
+
const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", input.bookingAnchorId);
|
|
3219
|
+
const result = await input.booking.actions.submit({
|
|
3220
|
+
redirect: "manual",
|
|
3221
|
+
successUrl: appendRebookFlag(successUrl, input.isPortalRebook),
|
|
3222
|
+
cancelUrl: appendRebookFlag(cancelUrl, input.isPortalRebook)
|
|
3223
|
+
});
|
|
3224
|
+
if (!result.ok) return;
|
|
3225
|
+
storeDemoBookingPassIfAvailable(result.outcome.customerEmail, result.outcome.demoBookingPass);
|
|
3226
|
+
if (result.outcome.kind === "checkout_redirect") {
|
|
3227
|
+
saveAppointmentCheckoutReturnContext(result.outcome.sessionId, {
|
|
3228
|
+
customerEmail: result.outcome.customerEmail,
|
|
3229
|
+
mailingListNote: result.outcome.mailingListSignupNote ?? null
|
|
3230
|
+
});
|
|
3231
|
+
window.location.href = result.outcome.checkoutUrl;
|
|
3232
|
+
return;
|
|
3233
|
+
}
|
|
3234
|
+
input.setLocalMailingListNote(result.outcome.mailingListSignupNote ?? null);
|
|
3235
|
+
input.setLocalCustomerEmail(result.outcome.customerEmail);
|
|
3236
|
+
};
|
|
3237
|
+
}
|
|
3238
|
+
//#endregion
|
|
2986
3239
|
//#region ../blocks/src/system/runtime/nodes/booking-form.client.tsx
|
|
2987
|
-
const PORTAL_REBOOK_QUERY_PARAM = "rebook";
|
|
2988
|
-
const PORTAL_REBOOK_QUERY_VALUE = "1";
|
|
2989
3240
|
const REBOOK_COMPLETION_MODE_VERIFIED_CHECKOUT = "verified_checkout";
|
|
2990
3241
|
const REBOOK_COMPLETION_MODE_BYPASSED = "bypassed";
|
|
2991
3242
|
function getBookingRedirectLocationSnapshot() {
|
|
@@ -2998,12 +3249,6 @@ function getBookingRedirectLocationSnapshot() {
|
|
|
2998
3249
|
hash: window.location.hash
|
|
2999
3250
|
};
|
|
3000
3251
|
}
|
|
3001
|
-
function appendRebookFlag(url, enabled) {
|
|
3002
|
-
if (!enabled) return url;
|
|
3003
|
-
const nextUrl = new URL(url);
|
|
3004
|
-
nextUrl.searchParams.set(PORTAL_REBOOK_QUERY_PARAM, PORTAL_REBOOK_QUERY_VALUE);
|
|
3005
|
-
return nextUrl.toString();
|
|
3006
|
-
}
|
|
3007
3252
|
/**
|
|
3008
3253
|
* Themed surface container for every booking view state (wizard, success,
|
|
3009
3254
|
* verifying). Styled by the shared registration-surface layer.
|
|
@@ -3026,12 +3271,17 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
|
|
|
3026
3271
|
const isPortalRebook = render.hydration.rebookContext?.kind === "portal_rebook";
|
|
3027
3272
|
const hasLoggedRebookCompletionRef = useRef(false);
|
|
3028
3273
|
const [redirectState] = useState(() => getBookingRedirectStateFromLocation(getBookingRedirectLocationSnapshot()));
|
|
3274
|
+
const [localMailingListNote, setLocalMailingListNote] = useState(null);
|
|
3275
|
+
const [localCustomerEmail, setLocalCustomerEmail] = useState(null);
|
|
3029
3276
|
const showSpamProtection = render.hydration.spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
3030
3277
|
const api = useBlockApi();
|
|
3031
3278
|
const hasPortalAuth = api.config.auth.type === "bearer" || api.config.authOverrides?.portal?.type === "bearer";
|
|
3279
|
+
const formId = render.hydration.formId ?? form?.id ?? "booking-form";
|
|
3032
3280
|
const booking = useHeadlessBookingFlow({
|
|
3281
|
+
mailingList: render.hydration.mailingList,
|
|
3282
|
+
siteName: render.hydration.siteName,
|
|
3033
3283
|
siteId,
|
|
3034
|
-
formId
|
|
3284
|
+
formId,
|
|
3035
3285
|
form,
|
|
3036
3286
|
services,
|
|
3037
3287
|
serviceCategories: render.hydration.serviceCategories,
|
|
@@ -3101,22 +3351,23 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
|
|
|
3101
3351
|
children: render.display.message ?? "Booking form not found. Please check your configuration."
|
|
3102
3352
|
})
|
|
3103
3353
|
});
|
|
3104
|
-
const handleComplete =
|
|
3105
|
-
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
if (!result.ok) return;
|
|
3112
|
-
if (result.outcome.kind === "checkout_redirect") window.location.href = result.outcome.checkoutUrl;
|
|
3113
|
-
};
|
|
3354
|
+
const handleComplete = createBookingFormSubmitHandler({
|
|
3355
|
+
booking,
|
|
3356
|
+
bookingAnchorId,
|
|
3357
|
+
isPortalRebook,
|
|
3358
|
+
setLocalMailingListNote,
|
|
3359
|
+
setLocalCustomerEmail
|
|
3360
|
+
});
|
|
3114
3361
|
if (viewState.kind === "success") return /* @__PURE__ */ jsx(BookingSurface, {
|
|
3115
3362
|
id: bookingAnchorId,
|
|
3116
3363
|
className: render.display.className,
|
|
3117
|
-
children: /* @__PURE__ */ jsx(
|
|
3118
|
-
|
|
3119
|
-
resourceName: viewState.resourceName
|
|
3364
|
+
children: /* @__PURE__ */ jsx(BookingFormCompletion, {
|
|
3365
|
+
successMessage: render.display.successMessage,
|
|
3366
|
+
resourceName: viewState.resourceName,
|
|
3367
|
+
redirectState,
|
|
3368
|
+
localNote: localMailingListNote,
|
|
3369
|
+
customerEmail: localCustomerEmail,
|
|
3370
|
+
demoEmailSuppressed: render.hydration.demoEmailSuppressed
|
|
3120
3371
|
})
|
|
3121
3372
|
});
|
|
3122
3373
|
if (viewState.kind === "verifying") return /* @__PURE__ */ jsx(BookingSurface, {
|
|
@@ -3132,6 +3383,25 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
|
|
|
3132
3383
|
})
|
|
3133
3384
|
})
|
|
3134
3385
|
});
|
|
3386
|
+
if (viewState.kind === "timeout") return /* @__PURE__ */ jsxs(BookingSurface, {
|
|
3387
|
+
id: bookingAnchorId,
|
|
3388
|
+
className: render.display.className,
|
|
3389
|
+
children: [/* @__PURE__ */ jsx(FeedbackMessage, {
|
|
3390
|
+
tone: "info",
|
|
3391
|
+
className: "alert alert-info",
|
|
3392
|
+
role: "status",
|
|
3393
|
+
children: /* @__PURE__ */ jsx("p", {
|
|
3394
|
+
className: "ab-text",
|
|
3395
|
+
children: viewState.message
|
|
3396
|
+
})
|
|
3397
|
+
}), /* @__PURE__ */ jsx(ThemedButton, {
|
|
3398
|
+
type: "button",
|
|
3399
|
+
variant: "primary",
|
|
3400
|
+
size: "md",
|
|
3401
|
+
label: "Check again",
|
|
3402
|
+
onClick: verification.retry
|
|
3403
|
+
})]
|
|
3404
|
+
});
|
|
3135
3405
|
return /* @__PURE__ */ jsxs(BookingSurface, {
|
|
3136
3406
|
id: bookingAnchorId,
|
|
3137
3407
|
className: render.display.className,
|