@riverbankcms/sdk 0.145.0 → 0.147.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 +29 -0
- package/dist/{PreviewEditorSidebar-O-V6Pl5a.mjs → PreviewEditorSidebar-DtpB3_sS.mjs} +51 -33
- package/dist/{PreviewEditorUI-1UlX_9cw.mjs → PreviewEditorUI-DxTLgaHo.mjs} +3 -3
- package/dist/{PreviewQueryProvider-BxGwdOCV.mjs → PreviewQueryProvider-Dd4dxOiU.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-DYbA_4iv.mjs → SdkPreviewModeRuntime-DMMNCngt.mjs} +311 -186
- package/dist/{SiteChromeCustomizeContext-CNTKQ9nx.mjs → SiteChromeCustomizeContext-DQXZXiqS.mjs} +3808 -2395
- package/dist/_dts/ai/src/contracts/proposals.d.ts +1122 -0
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +102 -0
- package/dist/_dts/api/src/accountApi.d.ts +5 -5
- package/dist/_dts/api/src/bookingConfig.d.ts +24 -1
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +11 -26
- package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
- package/dist/_dts/api/src/bookingOperations.d.ts +2 -44
- 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 +11 -49
- package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
- package/dist/_dts/api/src/bookings.d.ts +1 -0
- package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
- package/dist/_dts/api/src/communications.d.ts +20 -4
- package/dist/_dts/api/src/contentRuntime.d.ts +3 -7
- package/dist/_dts/api/src/endpoints.d.ts +816 -655
- package/dist/_dts/api/src/event-visibility.d.ts +20 -0
- package/dist/_dts/api/src/eventManagementContracts.d.ts +72 -4
- package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
- package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
- package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
- package/dist/_dts/api/src/index.d.ts +9 -2
- package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
- package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
- package/dist/_dts/api/src/launchReadiness.d.ts +19 -6
- package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
- 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/newsletterCampaignCommandEndpoints.d.ts +13 -0
- package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +57 -0
- package/dist/_dts/api/src/occurrenceScheduling.d.ts +29 -0
- package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
- package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
- package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +48 -0
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +55 -1
- package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
- package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
- package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
- package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
- package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
- package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
- package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
- package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
- package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
- package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
- package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +6 -49
- package/dist/_dts/api/src/siteOnboarding.d.ts +72 -18
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
- package/dist/_dts/api/src/types.d.ts +7 -1
- package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
- package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -0
- package/dist/_dts/blocks/src/index.d.ts +2 -0
- package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +29 -1
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -1
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
- package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
- package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
- package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -0
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -0
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +19 -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-note.d.ts +3 -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.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 +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +8 -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 +3 -0
- 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/SuccessStep.d.ts +3 -0
- 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/eventSourceRecovery.d.ts +1 -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 +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +3 -0
- 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 +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +20 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +34 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -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/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/content-editor/src/index.d.ts +1 -0
- package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
- package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
- package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -5
- package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
- package/dist/_dts/core/src/editor-state.d.ts +2 -7
- package/dist/_dts/core/src/index.d.ts +2 -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 +9 -1
- 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/public-event-booking-availability.d.ts +20 -1
- package/dist/_dts/core/src/public-profile.d.ts +3 -1
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +151 -24
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
- package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
- package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
- package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -8
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
- package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +5 -5
- package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -2
- package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -2
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
- package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +5 -1
- package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/surfaces/src/index.d.ts +9 -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/inputs/checkable.d.ts +42 -0
- package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -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/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/navigation-tabs.d.ts +2 -1
- 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-DlVOmpW4.mjs → BookingMailingListNote-1n4Ch_u_.mjs} +15 -4
- package/dist/client/CheckboxChoice-B33MqoUo.mjs +24 -0
- package/dist/client/{DiscountCodeDisclosure-T9q623PQ.mjs → DiscountCodeDisclosure-CKJtz0mY.mjs} +1 -1
- package/dist/client/{EventCombined.client-DnsUeONl.mjs → EventCombined.client-C0pgma9y.mjs} +7 -7
- package/dist/client/{EventListing.client-CNBFqJS4.mjs → EventListing.client-4fhLOvHP.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-C7higg52.mjs → LeafletStaticMap-DScC4F3w.mjs} +1 -1
- package/dist/client/{scrollToBlock-CWs8EIdo.mjs → TerminalPanel-B5ZUsYhe.mjs} +77 -77
- package/dist/client/{ThemedButton-LAJTNrS8.mjs → ThemedButton-DoVIV1Ao.mjs} +2 -2
- package/dist/client/{accordion-BcNF9TjX.mjs → accordion-CoT5g7zo.mjs} +1 -1
- package/dist/client/{bookingForm-BUaQ3S03.mjs → bookingForm-BWxB46xD.mjs} +251 -150
- package/dist/client/bookings.mjs +415 -234
- package/dist/client/{carousel-CTdF6e0V.mjs → carousel-DtNYWFd3.mjs} +2 -2
- package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
- package/dist/client/{cart-pGtyf_XU.mjs → cart-z4qZih1Y.mjs} +3 -3
- package/dist/client/{checkout-Da9WSn7Y.mjs → checkout-DpL7euFH.mjs} +3 -3
- package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-BEfR7kVu.mjs} +1 -1
- package/dist/client/client.mjs +3721 -2220
- package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
- package/dist/client/{context-BFeY_Wbm.mjs → context-C8TinPJc.mjs} +1 -1
- package/dist/client/{dates-BhwVSxDg.mjs → dates-vwwxTeB0.mjs} +2 -3
- package/dist/client/{eventCalendar-BAtdnR4s.mjs → eventCalendar-DIbHfJXO.mjs} +10 -10
- package/dist/client/{eventCombined-RksA3tRC.mjs → eventCombined-DoGMJ6cg.mjs} +4 -4
- package/dist/client/{eventDetails-BB9hB4wR.mjs → eventDetails-BjN9v6a1.mjs} +4 -4
- package/dist/client/{eventListing-BpJBkviM.mjs → eventListing-DajjWgOv.mjs} +4 -4
- package/dist/client/{eventRegistration-B18jFq_o.mjs → eventRegistration-DMq9gMA-.mjs} +121 -54
- package/dist/client/{form-Dodt8Y8t.mjs → form-Qf6qTbos.mjs} +136 -105
- package/dist/client/{headerSection-B0qj9ttg.mjs → headerSection-D7qJrqFX.mjs} +3 -3
- package/dist/client/hooks.mjs +1148 -179
- package/dist/client/{locationMap-gn-iMk7a.mjs → locationMap-CCF9-t_0.mjs} +4 -4
- package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
- package/dist/client/{media-BtJ37tzS.mjs → media-CwBGetqC.mjs} +1 -1
- package/dist/client/{newsletterForm-oByLdFkr.mjs → newsletterForm-DzCLSP4S.mjs} +206 -104
- package/dist/client/{pricing-BOU0_Hai.mjs → pricing-Cgxv2KLC.mjs} +1 -1
- package/dist/client/{productDetail-D9v1zH2j.mjs → productDetail-ru9w5GHx.mjs} +3 -3
- package/dist/client/{productList-D-mItx1n.mjs → productList-zaapKSl-.mjs} +3 -3
- package/dist/client/{propsDecoder-C3TP_z4x.mjs → propsDecoder-CwvvNOHx.mjs} +91 -28
- package/dist/client/rendering/client.mjs +1441 -826
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +3652 -2005
- package/dist/client/{routeIslandApiConfig-DzN1W0sq.mjs → routeIslandApiConfig-BwVFo0Y4.mjs} +1 -1
- package/dist/client/{shop-commerce-gklw_hLF.mjs → shop-commerce-De7gEnkA.mjs} +8 -8
- package/dist/client/{shop-commerce-store-Sf1eyTaZ.mjs → shop-commerce-store-B3MCxIBW.mjs} +1 -1
- package/dist/client/{shop-Dufw7N7o.mjs → shop-mktkXvbV.mjs} +7 -7
- package/dist/client/{shopShared-B5nyA41S.mjs → shopShared-TqExh235.mjs} +5 -5
- package/dist/client/{useEventFilters-CLL829vy.mjs → useEventFilters-n_OjkIjX.mjs} +8 -8
- package/dist/preview-next/before-render.mjs +490 -153
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/editor-base.css +64 -2
- package/dist/preview-next/editor-chrome.css +7 -4
- package/dist/preview-next/keepAlive.mjs +450 -153
- package/dist/preview-next/middleware.mjs +451 -153
- package/dist/{previewAuthStore-BxAFlu-j.mjs → previewAuthStore-C_EHQ5XA.mjs} +475 -153
- package/dist/{sdk-runtime-D0uZFev7.mjs → sdk-runtime-BIkJg5y1.mjs} +2 -2
- package/dist/{separator-EvdCAn4V.mjs → separator-C9qDP95Z.mjs} +1 -1
- package/dist/server/components.mjs +4957 -3509
- package/dist/server/config-validation.mjs +1115 -189
- package/dist/server/config.mjs +1115 -189
- package/dist/server/data.mjs +1113 -188
- package/dist/server/index.mjs +492 -154
- package/dist/server/navigation.mjs +13 -2
- package/dist/server/next.mjs +4798 -3462
- package/dist/server/page-converter.mjs +143 -89
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +3862 -2414
- package/dist/server/rendering.mjs +5648 -4154
- package/dist/server/routing.mjs +1223 -329
- package/dist/server/server.mjs +1172 -314
- package/dist/server/theme-bridge.mjs +533 -128
- package/dist/server/theme.mjs +5 -1
- package/dist/styles/index.css +218 -69
- package/package.json +1 -1
- package/dist/_dts/core/src/participant-identity.d.ts +0 -135
package/dist/client/bookings.mjs
CHANGED
|
@@ -3162,6 +3162,12 @@ function layoutServicesByCategory(categories, services, options) {
|
|
|
3162
3162
|
other
|
|
3163
3163
|
};
|
|
3164
3164
|
}
|
|
3165
|
+
//#endregion
|
|
3166
|
+
//#region ../core/src/mailing-list-runtime.ts
|
|
3167
|
+
function resolveBookingSignupOffer(context, siteName) {
|
|
3168
|
+
const name = siteName?.trim() ?? "";
|
|
3169
|
+
return context?.tag === "configured" && context.bookingSignup.tag === "offered" ? { siteName: name.length > 0 ? name : "this site" } : null;
|
|
3170
|
+
}
|
|
3165
3171
|
function sessionStartMs(session) {
|
|
3166
3172
|
return Date.parse(session.startsAt);
|
|
3167
3173
|
}
|
|
@@ -7943,6 +7949,7 @@ const publicEventLoaderQuerySchemaShape = {
|
|
|
7943
7949
|
seriesSlug: z.string().optional(),
|
|
7944
7950
|
includeOccurrenceId: z.string().optional(),
|
|
7945
7951
|
readIntent: z.string().optional(),
|
|
7952
|
+
detailAdmission: z.string().optional(),
|
|
7946
7953
|
detailLevel: z.string().optional(),
|
|
7947
7954
|
readProfile: z.string().optional()
|
|
7948
7955
|
};
|
|
@@ -8109,11 +8116,11 @@ const publicEventBookingAvailabilitySchema = z.discriminatedUnion("kind", [z.obj
|
|
|
8109
8116
|
"series_archived",
|
|
8110
8117
|
"parent_archived",
|
|
8111
8118
|
"parent_inconsistent",
|
|
8112
|
-
"not_public",
|
|
8113
8119
|
"already_started",
|
|
8114
8120
|
"enrollment_closed"
|
|
8115
8121
|
])
|
|
8116
8122
|
})]);
|
|
8123
|
+
const publicEventBookingClosedDetailSchema = z.discriminatedUnion("kind", [z.object({ kind: z.literal("opensSoon") }), z.object({ kind: z.literal("paused") })]);
|
|
8117
8124
|
const publicRunSessionSchema = z.object({
|
|
8118
8125
|
occurrenceId: z.string(),
|
|
8119
8126
|
startsAt: z.string(),
|
|
@@ -8158,6 +8165,7 @@ const publicEventBaseSchema = z.object({
|
|
|
8158
8165
|
destination: publicEventDestinationSchema,
|
|
8159
8166
|
requiresRegistration: z.boolean(),
|
|
8160
8167
|
bookingAvailability: publicEventBookingAvailabilitySchema,
|
|
8168
|
+
bookingClosedDetail: publicEventBookingClosedDetailSchema.optional(),
|
|
8161
8169
|
deliveryMode: z.enum([
|
|
8162
8170
|
"in_person",
|
|
8163
8171
|
"online",
|
|
@@ -9387,105 +9395,6 @@ function useBlockApi() {
|
|
|
9387
9395
|
if (!client) throw new Error("useBlockApi must be used within a BlockApiProvider. Make sure your component is wrapped with <BlockApiProvider>.");
|
|
9388
9396
|
return client;
|
|
9389
9397
|
}
|
|
9390
|
-
//#endregion
|
|
9391
|
-
//#region ../blocks/src/system/runtime/shared/components/CheckIcon.tsx
|
|
9392
|
-
function CheckIcon({ className, strokeWidth = 2 }) {
|
|
9393
|
-
return /* @__PURE__ */ jsx("svg", {
|
|
9394
|
-
fill: "none",
|
|
9395
|
-
strokeLinecap: "round",
|
|
9396
|
-
strokeLinejoin: "round",
|
|
9397
|
-
strokeWidth,
|
|
9398
|
-
viewBox: "0 0 24 24",
|
|
9399
|
-
stroke: "currentColor",
|
|
9400
|
-
className,
|
|
9401
|
-
width: "1em",
|
|
9402
|
-
height: "1em",
|
|
9403
|
-
"aria-hidden": "true",
|
|
9404
|
-
children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" })
|
|
9405
|
-
});
|
|
9406
|
-
}
|
|
9407
|
-
//#endregion
|
|
9408
|
-
//#region ../blocks/src/system/runtime/shared/components/StateIcon.tsx
|
|
9409
|
-
/**
|
|
9410
|
-
* Circular icon wrapper for terminal state screens (success, error, waitlist, etc.).
|
|
9411
|
-
*
|
|
9412
|
-
* Layout is provided by shared `rb-state-icon` CSS; color variants are
|
|
9413
|
-
* block-scoped by the owning registration surface.
|
|
9414
|
-
*/
|
|
9415
|
-
function StateIcon({ variant, children }) {
|
|
9416
|
-
return /* @__PURE__ */ jsx("div", {
|
|
9417
|
-
className: `rb-state-icon rb-state-icon--${variant}`,
|
|
9418
|
-
"aria-hidden": "true",
|
|
9419
|
-
children
|
|
9420
|
-
});
|
|
9421
|
-
}
|
|
9422
|
-
//#endregion
|
|
9423
|
-
//#region ../blocks/src/system/runtime/shared/components/TerminalPanel.tsx
|
|
9424
|
-
function joinClasses$1(...parts) {
|
|
9425
|
-
return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
|
|
9426
|
-
}
|
|
9427
|
-
function TerminalPanel({ tone, title, titleAs: Title = "h3", body, secondaryBody, icon, actions, className, titleClassName, bodyClassName, secondaryBodyClassName, iconClassName, actionsClassName, role, live }) {
|
|
9428
|
-
const resolvedRole = role ?? (tone === "error" ? "alert" : "status");
|
|
9429
|
-
const resolvedLive = live ?? (resolvedRole === "alert" ? "assertive" : "polite");
|
|
9430
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
9431
|
-
className,
|
|
9432
|
-
"data-terminal-panel": true,
|
|
9433
|
-
"data-terminal-tone": tone,
|
|
9434
|
-
role: resolvedRole,
|
|
9435
|
-
"aria-live": resolvedLive === "off" ? void 0 : resolvedLive,
|
|
9436
|
-
children: [
|
|
9437
|
-
icon ? /* @__PURE__ */ jsx("div", {
|
|
9438
|
-
className: joinClasses$1(iconClassName),
|
|
9439
|
-
"data-terminal-icon": true,
|
|
9440
|
-
children: icon
|
|
9441
|
-
}) : null,
|
|
9442
|
-
/* @__PURE__ */ jsx(Title, {
|
|
9443
|
-
className: joinClasses$1(titleClassName),
|
|
9444
|
-
"data-terminal-title": true,
|
|
9445
|
-
children: title
|
|
9446
|
-
}),
|
|
9447
|
-
body ? /* @__PURE__ */ jsx("div", {
|
|
9448
|
-
className: joinClasses$1(bodyClassName),
|
|
9449
|
-
"data-terminal-body": true,
|
|
9450
|
-
children: body
|
|
9451
|
-
}) : null,
|
|
9452
|
-
actions ? /* @__PURE__ */ jsx("div", {
|
|
9453
|
-
className: joinClasses$1(actionsClassName),
|
|
9454
|
-
"data-terminal-actions": true,
|
|
9455
|
-
children: actions
|
|
9456
|
-
}) : null,
|
|
9457
|
-
secondaryBody ? /* @__PURE__ */ jsx("div", {
|
|
9458
|
-
className: joinClasses$1(secondaryBodyClassName),
|
|
9459
|
-
"data-terminal-secondary-body": true,
|
|
9460
|
-
children: secondaryBody
|
|
9461
|
-
}) : null
|
|
9462
|
-
]
|
|
9463
|
-
});
|
|
9464
|
-
}
|
|
9465
|
-
//#endregion
|
|
9466
|
-
//#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
|
|
9467
|
-
const SuccessMessage = ({ message, resourceName, className }) => {
|
|
9468
|
-
return /* @__PURE__ */ jsx(TerminalPanel, {
|
|
9469
|
-
tone: "success",
|
|
9470
|
-
title: "Booking confirmed",
|
|
9471
|
-
icon: /* @__PURE__ */ jsx(StateIcon, {
|
|
9472
|
-
variant: "success",
|
|
9473
|
-
children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
|
|
9474
|
-
}),
|
|
9475
|
-
body: /* @__PURE__ */ jsx("p", {
|
|
9476
|
-
className: "ab-text",
|
|
9477
|
-
children: message
|
|
9478
|
-
}),
|
|
9479
|
-
secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
|
|
9480
|
-
className: "ab-text rb-on-surface--muted",
|
|
9481
|
-
children: ["Practitioner: ", resourceName]
|
|
9482
|
-
}) : null,
|
|
9483
|
-
className: ["ab-center", className ?? ""].join(" ").trim(),
|
|
9484
|
-
titleClassName: "ab-terminal-title",
|
|
9485
|
-
role: "alert",
|
|
9486
|
-
live: "polite"
|
|
9487
|
-
});
|
|
9488
|
-
};
|
|
9489
9398
|
new TextEncoder();
|
|
9490
9399
|
//#endregion
|
|
9491
9400
|
//#region ../altcha/src/index.ts
|
|
@@ -9569,7 +9478,8 @@ const BOOKING_FORM_DATA_RESERVED_KEY_VALUES = [
|
|
|
9569
9478
|
"discountCode",
|
|
9570
9479
|
"selectedSlidingAmountInput",
|
|
9571
9480
|
"selectedCollectionOptionKind",
|
|
9572
|
-
"selectedAppointmentPackageId"
|
|
9481
|
+
"selectedAppointmentPackageId",
|
|
9482
|
+
"mailingListOptIn"
|
|
9573
9483
|
];
|
|
9574
9484
|
const BOOKING_FORM_DATA_RESERVED_KEYS = new Set(BOOKING_FORM_DATA_RESERVED_KEY_VALUES);
|
|
9575
9485
|
//#endregion
|
|
@@ -9989,6 +9899,7 @@ function prepareBookingSubmission(input) {
|
|
|
9989
9899
|
startAt: selectedSlot,
|
|
9990
9900
|
endAt: endDate.toISOString(),
|
|
9991
9901
|
customFields: collectBookingCustomFields(input.data),
|
|
9902
|
+
...selectedMailingListOptIn(input.data),
|
|
9992
9903
|
timezone: toBookingTimeZone(input.viewerTimeZone ?? null)
|
|
9993
9904
|
};
|
|
9994
9905
|
if (customerPassId) return {
|
|
@@ -10039,6 +9950,9 @@ function prepareBookingSubmission(input) {
|
|
|
10039
9950
|
}
|
|
10040
9951
|
};
|
|
10041
9952
|
}
|
|
9953
|
+
function selectedMailingListOptIn(data) {
|
|
9954
|
+
return data.mailingListOptIn === true ? { mailingListOptIn: true } : {};
|
|
9955
|
+
}
|
|
10042
9956
|
function formatBookingSubmissionPreparationError(error) {
|
|
10043
9957
|
switch (error.tag) {
|
|
10044
9958
|
case "missing-required-booking-information": return "Missing required booking information";
|
|
@@ -10619,6 +10533,7 @@ function useBookingSubmission(_siteId) {
|
|
|
10619
10533
|
startAt: data.startAt,
|
|
10620
10534
|
endAt: data.endAt,
|
|
10621
10535
|
customFields: data.customFields,
|
|
10536
|
+
mailingListOptIn: data.mailingListOptIn,
|
|
10622
10537
|
timezone: data.timezone,
|
|
10623
10538
|
customerPassId: data.customerPassId
|
|
10624
10539
|
}) : await api.submitBooking({
|
|
@@ -10628,6 +10543,7 @@ function useBookingSubmission(_siteId) {
|
|
|
10628
10543
|
startAt: data.startAt,
|
|
10629
10544
|
endAt: data.endAt,
|
|
10630
10545
|
customFields: data.customFields,
|
|
10546
|
+
mailingListOptIn: data.mailingListOptIn,
|
|
10631
10547
|
timezone: data.timezone,
|
|
10632
10548
|
discountCode: data.discountCode,
|
|
10633
10549
|
selectedSlidingAmount: data.selectedSlidingAmount,
|
|
@@ -10663,6 +10579,40 @@ function useBookingSubmission(_siteId) {
|
|
|
10663
10579
|
};
|
|
10664
10580
|
}
|
|
10665
10581
|
//#endregion
|
|
10582
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.submit-success.ts
|
|
10583
|
+
function completeBookingSubmission(input) {
|
|
10584
|
+
const { data } = input;
|
|
10585
|
+
if (data.type === "checkout_redirect") {
|
|
10586
|
+
if (input.redirect === "auto" && typeof window !== "undefined") input.navigateToCheckout(data.checkoutUrl);
|
|
10587
|
+
return {
|
|
10588
|
+
ok: true,
|
|
10589
|
+
outcome: {
|
|
10590
|
+
kind: "checkout_redirect",
|
|
10591
|
+
checkoutUrl: data.checkoutUrl,
|
|
10592
|
+
sessionId: data.sessionId,
|
|
10593
|
+
...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
|
|
10594
|
+
}
|
|
10595
|
+
};
|
|
10596
|
+
}
|
|
10597
|
+
input.dispatch({
|
|
10598
|
+
type: "feedback-set",
|
|
10599
|
+
feedback: {
|
|
10600
|
+
kind: "success",
|
|
10601
|
+
message: getBookingSuccessMessage(input.successMessage),
|
|
10602
|
+
resourceName: data.appointment.resourceName
|
|
10603
|
+
}
|
|
10604
|
+
});
|
|
10605
|
+
return {
|
|
10606
|
+
ok: true,
|
|
10607
|
+
outcome: {
|
|
10608
|
+
kind: "booked",
|
|
10609
|
+
appointmentId: data.appointment.id,
|
|
10610
|
+
resourceName: data.appointment.resourceName,
|
|
10611
|
+
...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
|
|
10612
|
+
}
|
|
10613
|
+
};
|
|
10614
|
+
}
|
|
10615
|
+
//#endregion
|
|
10666
10616
|
//#region ../blocks/src/system/runtime/api/types/discounts.ts
|
|
10667
10617
|
function discountAvailabilityHasDiscounts(availability) {
|
|
10668
10618
|
return availability.type !== "none";
|
|
@@ -11193,6 +11143,40 @@ function clearBookingFieldError(errors, fieldId) {
|
|
|
11193
11143
|
};
|
|
11194
11144
|
}
|
|
11195
11145
|
//#endregion
|
|
11146
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-state.ts
|
|
11147
|
+
function bookingFormDataWithEligibleOptIn(data, eligible) {
|
|
11148
|
+
return {
|
|
11149
|
+
...data,
|
|
11150
|
+
mailingListOptIn: eligible && data.mailingListOptIn === true
|
|
11151
|
+
};
|
|
11152
|
+
}
|
|
11153
|
+
function isBookingContactEvent(event) {
|
|
11154
|
+
return event.type === "field-updated" || event.type === "field-touched" || event.type === "mailing-list-opt-in-set";
|
|
11155
|
+
}
|
|
11156
|
+
function applyBookingContactEvent(state, event) {
|
|
11157
|
+
switch (event.type) {
|
|
11158
|
+
case "field-updated": return {
|
|
11159
|
+
...state,
|
|
11160
|
+
fieldValues: {
|
|
11161
|
+
...state.fieldValues,
|
|
11162
|
+
[event.fieldId]: event.value
|
|
11163
|
+
},
|
|
11164
|
+
validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
|
|
11165
|
+
};
|
|
11166
|
+
case "field-touched": return {
|
|
11167
|
+
...state,
|
|
11168
|
+
touchedFields: {
|
|
11169
|
+
...state.touchedFields,
|
|
11170
|
+
[event.fieldId]: true
|
|
11171
|
+
}
|
|
11172
|
+
};
|
|
11173
|
+
case "mailing-list-opt-in-set": return {
|
|
11174
|
+
...state,
|
|
11175
|
+
mailingListOptIn: event.checked
|
|
11176
|
+
};
|
|
11177
|
+
}
|
|
11178
|
+
}
|
|
11179
|
+
//#endregion
|
|
11196
11180
|
//#region ../blocks/src/system/runtime/nodes/booking-form.field-values.ts
|
|
11197
11181
|
function collectInitialBookingFieldValues(initialData) {
|
|
11198
11182
|
const values = {};
|
|
@@ -11218,6 +11202,7 @@ function createInitialBookingFlowReducerState(input) {
|
|
|
11218
11202
|
selectedDate: toOptionalString(initialData.selectedDate),
|
|
11219
11203
|
selectedSlot: null,
|
|
11220
11204
|
fieldValues: collectInitialBookingFieldValues(initialData),
|
|
11205
|
+
mailingListOptIn: initialData.mailingListOptIn === true,
|
|
11221
11206
|
touchedFields: {},
|
|
11222
11207
|
attemptedStepIds: {},
|
|
11223
11208
|
discountCode: toOptionalString(initialData.discountCode) ?? "",
|
|
@@ -11270,6 +11255,7 @@ function applyAvailabilitySelectionInvalidation(state, invalidation) {
|
|
|
11270
11255
|
};
|
|
11271
11256
|
}
|
|
11272
11257
|
function bookingFlowReducer(state, event) {
|
|
11258
|
+
if (isBookingContactEvent(event)) return applyBookingContactEvent(state, event);
|
|
11273
11259
|
switch (event.type) {
|
|
11274
11260
|
case "service-selected": return applyBookingServiceSelection(state, event.serviceId);
|
|
11275
11261
|
case "resource-selected": return {
|
|
@@ -11292,21 +11278,6 @@ function bookingFlowReducer(state, event) {
|
|
|
11292
11278
|
feedback: clearAvailabilityFeedback(state.feedback),
|
|
11293
11279
|
validationErrors: clearBookingFormError(state.validationErrors)
|
|
11294
11280
|
};
|
|
11295
|
-
case "field-updated": return {
|
|
11296
|
-
...state,
|
|
11297
|
-
fieldValues: {
|
|
11298
|
-
...state.fieldValues,
|
|
11299
|
-
[event.fieldId]: event.value
|
|
11300
|
-
},
|
|
11301
|
-
validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
|
|
11302
|
-
};
|
|
11303
|
-
case "field-touched": return {
|
|
11304
|
-
...state,
|
|
11305
|
-
touchedFields: {
|
|
11306
|
-
...state.touchedFields,
|
|
11307
|
-
[event.fieldId]: true
|
|
11308
|
-
}
|
|
11309
|
-
};
|
|
11310
11281
|
case "step-advance-attempted": return state.attemptedStepIds[event.stepId] ? state : {
|
|
11311
11282
|
...state,
|
|
11312
11283
|
attemptedStepIds: {
|
|
@@ -11444,6 +11415,7 @@ function deriveBookingSlotDisplayOptions(input) {
|
|
|
11444
11415
|
function toBookingFormData(state) {
|
|
11445
11416
|
return {
|
|
11446
11417
|
...state.fieldValues,
|
|
11418
|
+
mailingListOptIn: state.mailingListOptIn,
|
|
11447
11419
|
serviceId: state.selectedServiceId,
|
|
11448
11420
|
resourceId: state.selectedResourceId ?? state.selectedSlot?.resourceId,
|
|
11449
11421
|
selectedDate: state.selectedDate,
|
|
@@ -11706,10 +11678,7 @@ function buildBookingSubmitPlan(input) {
|
|
|
11706
11678
|
};
|
|
11707
11679
|
const prepared = prepareBookingSubmission({
|
|
11708
11680
|
formId: input.formId,
|
|
11709
|
-
data: toBookingFormData(
|
|
11710
|
-
...input.state,
|
|
11711
|
-
altchaSolution: input.altchaSolution ?? input.state.altchaSolution
|
|
11712
|
-
}),
|
|
11681
|
+
data: bookingFormDataWithEligibleOptIn(toBookingFormData(input.state), Boolean(input.mailingListEligible)),
|
|
11713
11682
|
services: input.services,
|
|
11714
11683
|
defaultServiceId: input.defaultServiceId,
|
|
11715
11684
|
defaultResourceId: input.defaultResourceId,
|
|
@@ -11964,6 +11933,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
11964
11933
|
const canLoadAppointmentPackages = Boolean(options.enableAppointmentPackages && hasPortalBearerAuth && selectedService && !selectedServiceSlidingScale && (selectedService.priceAmount ?? 0) > 0);
|
|
11965
11934
|
const appointmentPackagesUnavailableReason = !options.enableAppointmentPackages ? "disabled" : !selectedService || selectedServiceSlidingScale || (selectedService.priceAmount ?? 0) <= 0 ? "missing-priced-service" : !hasPortalBearerAuth ? "missing-portal-auth" : null;
|
|
11966
11935
|
const data = useMemo(() => toBookingFormData(state), [state]);
|
|
11936
|
+
const mailingList = resolveBookingSignupOffer(options.mailingList, options.siteName);
|
|
11937
|
+
const mailingListEligible = mailingList !== null;
|
|
11967
11938
|
const availabilityDatesQuery = useMemo(() => buildBookingAvailabilityQuery({
|
|
11968
11939
|
serviceId: selectedServiceId,
|
|
11969
11940
|
resourceId: selectedResourceId,
|
|
@@ -12224,7 +12195,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
12224
12195
|
viewerTimeZone: latest.viewerTimeZone,
|
|
12225
12196
|
redirect: submitOptions?.redirect ?? "manual",
|
|
12226
12197
|
successUrl: submitOptions?.successUrl,
|
|
12227
|
-
cancelUrl: submitOptions?.cancelUrl
|
|
12198
|
+
cancelUrl: submitOptions?.cancelUrl,
|
|
12199
|
+
mailingListEligible
|
|
12228
12200
|
});
|
|
12229
12201
|
if (!plan.ok) {
|
|
12230
12202
|
dispatch({
|
|
@@ -12257,37 +12229,18 @@ function useHeadlessBookingFlow(options) {
|
|
|
12257
12229
|
message: result.error
|
|
12258
12230
|
};
|
|
12259
12231
|
}
|
|
12260
|
-
|
|
12261
|
-
|
|
12262
|
-
|
|
12263
|
-
|
|
12264
|
-
|
|
12265
|
-
|
|
12266
|
-
checkoutUrl: result.data.checkoutUrl
|
|
12267
|
-
}
|
|
12268
|
-
};
|
|
12269
|
-
}
|
|
12270
|
-
dispatch({
|
|
12271
|
-
type: "feedback-set",
|
|
12272
|
-
feedback: {
|
|
12273
|
-
kind: "success",
|
|
12274
|
-
message: getBookingSuccessMessage(latest.successMessage),
|
|
12275
|
-
resourceName: result.data.appointment.resourceName
|
|
12276
|
-
}
|
|
12232
|
+
return completeBookingSubmission({
|
|
12233
|
+
data: result.data,
|
|
12234
|
+
redirect: plan.redirect,
|
|
12235
|
+
successMessage: latest.successMessage,
|
|
12236
|
+
navigateToCheckout: latest.navigateToCheckout,
|
|
12237
|
+
dispatch
|
|
12277
12238
|
});
|
|
12278
|
-
return {
|
|
12279
|
-
ok: true,
|
|
12280
|
-
outcome: {
|
|
12281
|
-
kind: "booked",
|
|
12282
|
-
appointmentId: result.data.appointment.id,
|
|
12283
|
-
resourceName: result.data.appointment.resourceName
|
|
12284
|
-
}
|
|
12285
|
-
};
|
|
12286
12239
|
} finally {
|
|
12287
12240
|
submittingRef.current = false;
|
|
12288
12241
|
dispatch({ type: "submission-finished" });
|
|
12289
12242
|
}
|
|
12290
|
-
}, [latestRef]);
|
|
12243
|
+
}, [latestRef, mailingListEligible]);
|
|
12291
12244
|
const actions = useMemo(() => ({
|
|
12292
12245
|
selectService: (serviceId) => dispatch({
|
|
12293
12246
|
type: "service-selected",
|
|
@@ -12310,6 +12263,10 @@ function useHeadlessBookingFlow(options) {
|
|
|
12310
12263
|
fieldId: unsafeAsBookingFieldId(fieldId),
|
|
12311
12264
|
value
|
|
12312
12265
|
}),
|
|
12266
|
+
setMailingListOptIn: (checked) => dispatch({
|
|
12267
|
+
type: "mailing-list-opt-in-set",
|
|
12268
|
+
checked
|
|
12269
|
+
}),
|
|
12313
12270
|
markFieldTouched: (fieldId) => dispatch({
|
|
12314
12271
|
type: "field-touched",
|
|
12315
12272
|
fieldId: unsafeAsBookingFieldId(fieldId)
|
|
@@ -12468,6 +12425,8 @@ function useHeadlessBookingFlow(options) {
|
|
|
12468
12425
|
appointmentPackages: appointmentPackagesModel
|
|
12469
12426
|
};
|
|
12470
12427
|
return {
|
|
12428
|
+
mailingList,
|
|
12429
|
+
mailingListOptIn: state.mailingListOptIn,
|
|
12471
12430
|
status,
|
|
12472
12431
|
view,
|
|
12473
12432
|
steps: stepState.steps,
|
|
@@ -12932,7 +12891,7 @@ function ThemedButton({ variant, size, extraClassName, screenReaderSuffix, label
|
|
|
12932
12891
|
}
|
|
12933
12892
|
//#endregion
|
|
12934
12893
|
//#region ../blocks/src/system/runtime/shared/components/FeedbackMessage.tsx
|
|
12935
|
-
function joinClasses(...parts) {
|
|
12894
|
+
function joinClasses$1(...parts) {
|
|
12936
12895
|
return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
|
|
12937
12896
|
}
|
|
12938
12897
|
/**
|
|
@@ -12951,17 +12910,17 @@ function FeedbackMessage({ tone, treatment = "panel", children, className, id, t
|
|
|
12951
12910
|
const shouldWrapBody = Boolean(title || bodyClassName) || treatment === "field-note";
|
|
12952
12911
|
return /* @__PURE__ */ jsxs("div", {
|
|
12953
12912
|
id,
|
|
12954
|
-
className: joinClasses(className, treatmentClass(treatment)) || void 0,
|
|
12913
|
+
className: joinClasses$1(className, treatmentClass(treatment)) || void 0,
|
|
12955
12914
|
"data-feedback-tone": tone,
|
|
12956
12915
|
"data-feedback-treatment": treatment,
|
|
12957
12916
|
role,
|
|
12958
12917
|
"aria-live": resolvedLive === "off" ? void 0 : resolvedLive,
|
|
12959
12918
|
children: [title ? /* @__PURE__ */ jsx("p", {
|
|
12960
|
-
className: joinClasses(titleClassName),
|
|
12919
|
+
className: joinClasses$1(titleClassName),
|
|
12961
12920
|
"data-feedback-title": true,
|
|
12962
12921
|
children: title
|
|
12963
12922
|
}) : null, shouldWrapBody ? /* @__PURE__ */ jsx("div", {
|
|
12964
|
-
className: joinClasses(bodyClassName),
|
|
12923
|
+
className: joinClasses$1(bodyClassName),
|
|
12965
12924
|
"data-feedback-body": true,
|
|
12966
12925
|
children
|
|
12967
12926
|
}) : children]
|
|
@@ -13143,6 +13102,23 @@ const TimeSlotSelector = ({ value, onChange, slots, isLoading, timezone, require
|
|
|
13143
13102
|
});
|
|
13144
13103
|
};
|
|
13145
13104
|
//#endregion
|
|
13105
|
+
//#region ../blocks/src/system/runtime/shared/components/CheckIcon.tsx
|
|
13106
|
+
function CheckIcon({ className, strokeWidth = 2 }) {
|
|
13107
|
+
return /* @__PURE__ */ jsx("svg", {
|
|
13108
|
+
fill: "none",
|
|
13109
|
+
strokeLinecap: "round",
|
|
13110
|
+
strokeLinejoin: "round",
|
|
13111
|
+
strokeWidth,
|
|
13112
|
+
viewBox: "0 0 24 24",
|
|
13113
|
+
stroke: "currentColor",
|
|
13114
|
+
className,
|
|
13115
|
+
width: "1em",
|
|
13116
|
+
height: "1em",
|
|
13117
|
+
"aria-hidden": "true",
|
|
13118
|
+
children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" })
|
|
13119
|
+
});
|
|
13120
|
+
}
|
|
13121
|
+
//#endregion
|
|
13146
13122
|
//#region ../blocks/src/system/runtime/shared/components/StepIndicator.tsx
|
|
13147
13123
|
/**
|
|
13148
13124
|
* Shared step indicator component for registration wizards.
|
|
@@ -14106,6 +14082,45 @@ function BookingConsentAgreement({ agreement, showTitle = true, title, titleId }
|
|
|
14106
14082
|
})] });
|
|
14107
14083
|
}
|
|
14108
14084
|
//#endregion
|
|
14085
|
+
//#region ../blocks/src/system/runtime/shared/components/CheckboxChoice.tsx
|
|
14086
|
+
/**
|
|
14087
|
+
* The customer-facing checkbox every block renders. Styling comes from the
|
|
14088
|
+
* theme's input CSS (`.form-check`, `.form-checkbox`), so it follows each
|
|
14089
|
+
* site's input colours, borders and corners.
|
|
14090
|
+
*/
|
|
14091
|
+
function CheckboxChoice({ label, presentation = "row", className, ...inputProps }) {
|
|
14092
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
14093
|
+
className: clsx("form-check", presentation === "tile" && "form-check--tile", className),
|
|
14094
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
14095
|
+
...inputProps,
|
|
14096
|
+
type: "checkbox",
|
|
14097
|
+
className: "form-checkbox"
|
|
14098
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
14099
|
+
className: "form-check-label",
|
|
14100
|
+
children: label
|
|
14101
|
+
})]
|
|
14102
|
+
});
|
|
14103
|
+
}
|
|
14104
|
+
//#endregion
|
|
14105
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.tsx
|
|
14106
|
+
function BookingMailingListChoice({ booking }) {
|
|
14107
|
+
const id = React.useId();
|
|
14108
|
+
if (!booking.mailingList) return null;
|
|
14109
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14110
|
+
className: "rb-space-y-2",
|
|
14111
|
+
children: [/* @__PURE__ */ jsx(CheckboxChoice, {
|
|
14112
|
+
id,
|
|
14113
|
+
name: "mailingListOptIn",
|
|
14114
|
+
checked: booking.mailingListOptIn,
|
|
14115
|
+
onChange: (event) => booking.actions.setMailingListOptIn(event.target.checked),
|
|
14116
|
+
label: `Email me news and updates from ${booking.mailingList.siteName}.`
|
|
14117
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
14118
|
+
className: "rb-caption status-muted",
|
|
14119
|
+
children: "Optional. You can unsubscribe at any time."
|
|
14120
|
+
})]
|
|
14121
|
+
});
|
|
14122
|
+
}
|
|
14123
|
+
//#endregion
|
|
14109
14124
|
//#region ../blocks/src/system/runtime/nodes/booking-form.service-choices.tsx
|
|
14110
14125
|
function optionCardClassName(isSelected) {
|
|
14111
14126
|
return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
|
|
@@ -14585,12 +14600,17 @@ function PaymentOptionContent({ description, helperText, id, summaryRows, title
|
|
|
14585
14600
|
});
|
|
14586
14601
|
}
|
|
14587
14602
|
function DefaultDynamicFields({ booking, fields }) {
|
|
14603
|
+
const lastContactIndex = fields.reduce((last, field, index) => [
|
|
14604
|
+
"name",
|
|
14605
|
+
"email",
|
|
14606
|
+
"phone"
|
|
14607
|
+
].includes(field.id) ? index : last, -1);
|
|
14588
14608
|
return /* @__PURE__ */ jsx("div", {
|
|
14589
14609
|
className: "rb-space-y-6",
|
|
14590
|
-
children: fields.map((field) => /* @__PURE__ */ jsx(DefaultDynamicField, {
|
|
14610
|
+
children: fields.map((field, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(DefaultDynamicField, {
|
|
14591
14611
|
booking,
|
|
14592
14612
|
field
|
|
14593
|
-
}, field.id))
|
|
14613
|
+
}), index === lastContactIndex && booking.mailingList ? /* @__PURE__ */ jsx(BookingMailingListChoice, { booking }) : null] }, field.id))
|
|
14594
14614
|
});
|
|
14595
14615
|
}
|
|
14596
14616
|
function DefaultDynamicField({ booking, field }) {
|
|
@@ -14691,7 +14711,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
|
|
|
14691
14711
|
case "radio": return /* @__PURE__ */ jsx("div", {
|
|
14692
14712
|
className: "rb-space-y-2",
|
|
14693
14713
|
children: field.field.options?.map((option) => /* @__PURE__ */ jsxs("label", {
|
|
14694
|
-
className: "
|
|
14714
|
+
className: "form-check",
|
|
14695
14715
|
children: [/* @__PURE__ */ jsx("input", {
|
|
14696
14716
|
type: "radio",
|
|
14697
14717
|
name: field.id,
|
|
@@ -14703,7 +14723,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
|
|
|
14703
14723
|
...validationProps,
|
|
14704
14724
|
className: "form-radio"
|
|
14705
14725
|
}), /* @__PURE__ */ jsx("span", {
|
|
14706
|
-
className: "
|
|
14726
|
+
className: "form-check-label",
|
|
14707
14727
|
children: option.label
|
|
14708
14728
|
})]
|
|
14709
14729
|
}, option.value))
|
|
@@ -14713,47 +14733,20 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
|
|
|
14713
14733
|
const checkedValues = toStringArray(value);
|
|
14714
14734
|
return /* @__PURE__ */ jsx("div", {
|
|
14715
14735
|
className: "rb-space-y-2",
|
|
14716
|
-
children: field.field.options.map((option) => /* @__PURE__ */
|
|
14717
|
-
|
|
14718
|
-
|
|
14719
|
-
|
|
14720
|
-
|
|
14721
|
-
value: option.value
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
onBlur,
|
|
14727
|
-
...validationProps,
|
|
14728
|
-
className: "form-checkbox"
|
|
14729
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
14730
|
-
className: "rb-caption",
|
|
14731
|
-
children: option.label
|
|
14732
|
-
})]
|
|
14736
|
+
children: field.field.options.map((option) => /* @__PURE__ */ jsx(CheckboxChoice, {
|
|
14737
|
+
name: field.id,
|
|
14738
|
+
value: option.value,
|
|
14739
|
+
checked: checkedValues.includes(option.value),
|
|
14740
|
+
onChange: (event) => {
|
|
14741
|
+
onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
|
|
14742
|
+
},
|
|
14743
|
+
onBlur,
|
|
14744
|
+
...validationProps,
|
|
14745
|
+
label: option.label
|
|
14733
14746
|
}, option.value))
|
|
14734
14747
|
});
|
|
14735
14748
|
}
|
|
14736
|
-
return /* @__PURE__ */
|
|
14737
|
-
className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
|
|
14738
|
-
children: [/* @__PURE__ */ jsx("input", {
|
|
14739
|
-
type: "checkbox",
|
|
14740
|
-
id: field.inputId,
|
|
14741
|
-
name: field.id,
|
|
14742
|
-
checked: Boolean(value),
|
|
14743
|
-
onChange: (event) => onChange(event.target.checked),
|
|
14744
|
-
onBlur,
|
|
14745
|
-
required: field.required,
|
|
14746
|
-
...validationProps,
|
|
14747
|
-
className: "form-checkbox"
|
|
14748
|
-
}), /* @__PURE__ */ jsx("span", {
|
|
14749
|
-
className: "rb-caption",
|
|
14750
|
-
children: field.field.placeholder || field.label
|
|
14751
|
-
})]
|
|
14752
|
-
});
|
|
14753
|
-
case "booking_requirement_consent": return /* @__PURE__ */ jsxs("label", {
|
|
14754
|
-
className: "rb-flex rb-items-start rb-gap-2 rb-cursor-pointer",
|
|
14755
|
-
children: [/* @__PURE__ */ jsx("input", {
|
|
14756
|
-
type: "checkbox",
|
|
14749
|
+
return /* @__PURE__ */ jsx(CheckboxChoice, {
|
|
14757
14750
|
id: field.inputId,
|
|
14758
14751
|
name: field.id,
|
|
14759
14752
|
checked: Boolean(value),
|
|
@@ -14761,11 +14754,18 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
|
|
|
14761
14754
|
onBlur,
|
|
14762
14755
|
required: field.required,
|
|
14763
14756
|
...validationProps,
|
|
14764
|
-
|
|
14765
|
-
})
|
|
14766
|
-
|
|
14767
|
-
|
|
14768
|
-
|
|
14757
|
+
label: field.field.placeholder || field.label
|
|
14758
|
+
});
|
|
14759
|
+
case "booking_requirement_consent": return /* @__PURE__ */ jsx(CheckboxChoice, {
|
|
14760
|
+
id: field.inputId,
|
|
14761
|
+
name: field.id,
|
|
14762
|
+
checked: Boolean(value),
|
|
14763
|
+
onChange: (event) => onChange(event.target.checked),
|
|
14764
|
+
onBlur,
|
|
14765
|
+
required: field.required,
|
|
14766
|
+
...validationProps,
|
|
14767
|
+
label: field.field.checkboxLabel,
|
|
14768
|
+
presentation: "tile"
|
|
14769
14769
|
});
|
|
14770
14770
|
case "number": return /* @__PURE__ */ jsx("input", {
|
|
14771
14771
|
...commonProps,
|
|
@@ -14946,9 +14946,169 @@ function consumeSearchParams(paramNames) {
|
|
|
14946
14946
|
return values;
|
|
14947
14947
|
}
|
|
14948
14948
|
//#endregion
|
|
14949
|
+
//#region ../blocks/src/system/runtime/shared/components/StateIcon.tsx
|
|
14950
|
+
/**
|
|
14951
|
+
* Circular icon wrapper for terminal state screens (success, error, waitlist, etc.).
|
|
14952
|
+
*
|
|
14953
|
+
* Layout is provided by shared `rb-state-icon` CSS; color variants are
|
|
14954
|
+
* block-scoped by the owning registration surface.
|
|
14955
|
+
*/
|
|
14956
|
+
function StateIcon({ variant, children }) {
|
|
14957
|
+
return /* @__PURE__ */ jsx("div", {
|
|
14958
|
+
className: `rb-state-icon rb-state-icon--${variant}`,
|
|
14959
|
+
"aria-hidden": "true",
|
|
14960
|
+
children
|
|
14961
|
+
});
|
|
14962
|
+
}
|
|
14963
|
+
//#endregion
|
|
14964
|
+
//#region ../blocks/src/system/runtime/shared/components/TerminalPanel.tsx
|
|
14965
|
+
function joinClasses(...parts) {
|
|
14966
|
+
return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
|
|
14967
|
+
}
|
|
14968
|
+
function TerminalPanel({ tone, title, titleAs: Title = "h3", body, secondaryBody, icon, actions, className, titleClassName, bodyClassName, secondaryBodyClassName, iconClassName, actionsClassName, role, live }) {
|
|
14969
|
+
const resolvedRole = role ?? (tone === "error" ? "alert" : "status");
|
|
14970
|
+
const resolvedLive = live ?? (resolvedRole === "alert" ? "assertive" : "polite");
|
|
14971
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14972
|
+
className,
|
|
14973
|
+
"data-terminal-panel": true,
|
|
14974
|
+
"data-terminal-tone": tone,
|
|
14975
|
+
role: resolvedRole,
|
|
14976
|
+
"aria-live": resolvedLive === "off" ? void 0 : resolvedLive,
|
|
14977
|
+
children: [
|
|
14978
|
+
icon ? /* @__PURE__ */ jsx("div", {
|
|
14979
|
+
className: joinClasses(iconClassName),
|
|
14980
|
+
"data-terminal-icon": true,
|
|
14981
|
+
children: icon
|
|
14982
|
+
}) : null,
|
|
14983
|
+
/* @__PURE__ */ jsx(Title, {
|
|
14984
|
+
className: joinClasses(titleClassName),
|
|
14985
|
+
"data-terminal-title": true,
|
|
14986
|
+
children: title
|
|
14987
|
+
}),
|
|
14988
|
+
body ? /* @__PURE__ */ jsx("div", {
|
|
14989
|
+
className: joinClasses(bodyClassName),
|
|
14990
|
+
"data-terminal-body": true,
|
|
14991
|
+
children: body
|
|
14992
|
+
}) : null,
|
|
14993
|
+
actions ? /* @__PURE__ */ jsx("div", {
|
|
14994
|
+
className: joinClasses(actionsClassName),
|
|
14995
|
+
"data-terminal-actions": true,
|
|
14996
|
+
children: actions
|
|
14997
|
+
}) : null,
|
|
14998
|
+
secondaryBody ? /* @__PURE__ */ jsx("div", {
|
|
14999
|
+
className: joinClasses(secondaryBodyClassName),
|
|
15000
|
+
"data-terminal-secondary-body": true,
|
|
15001
|
+
children: secondaryBody
|
|
15002
|
+
}) : null
|
|
15003
|
+
]
|
|
15004
|
+
});
|
|
15005
|
+
}
|
|
15006
|
+
//#endregion
|
|
15007
|
+
//#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
|
|
15008
|
+
const SuccessMessage = ({ message, resourceName, className }) => {
|
|
15009
|
+
return /* @__PURE__ */ jsx(TerminalPanel, {
|
|
15010
|
+
tone: "success",
|
|
15011
|
+
title: "Booking confirmed",
|
|
15012
|
+
icon: /* @__PURE__ */ jsx(StateIcon, {
|
|
15013
|
+
variant: "success",
|
|
15014
|
+
children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
|
|
15015
|
+
}),
|
|
15016
|
+
body: /* @__PURE__ */ jsx("p", {
|
|
15017
|
+
className: "ab-text",
|
|
15018
|
+
children: message
|
|
15019
|
+
}),
|
|
15020
|
+
secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
|
|
15021
|
+
className: "ab-text rb-on-surface--muted",
|
|
15022
|
+
children: ["Practitioner: ", resourceName]
|
|
15023
|
+
}) : null,
|
|
15024
|
+
className: ["ab-center", className ?? ""].join(" ").trim(),
|
|
15025
|
+
titleClassName: "ab-terminal-title",
|
|
15026
|
+
role: "alert",
|
|
15027
|
+
live: "polite"
|
|
15028
|
+
});
|
|
15029
|
+
};
|
|
15030
|
+
//#endregion
|
|
15031
|
+
//#region ../blocks/src/system/runtime/shared/mailingListSignupCopy.ts
|
|
15032
|
+
const MAILING_LIST_CONFIRMATION_MESSAGE = "Please check your inbox to confirm your signup.";
|
|
15033
|
+
function getBookingMailingListNoteCopy(note, context) {
|
|
15034
|
+
if (note === "confirmation_required") return {
|
|
15035
|
+
title: MAILING_LIST_CONFIRMATION_MESSAGE,
|
|
15036
|
+
detail: context === "booking" ? "This is separate from your booking confirmation." : null
|
|
15037
|
+
};
|
|
15038
|
+
return {
|
|
15039
|
+
title: "We couldn’t confirm your mailing-list signup.",
|
|
15040
|
+
detail: context === "booking" ? "This does not affect your booking." : null
|
|
15041
|
+
};
|
|
15042
|
+
}
|
|
15043
|
+
//#endregion
|
|
15044
|
+
//#region ../blocks/src/system/runtime/shared/components/BookingMailingListNote.tsx
|
|
15045
|
+
function BookingMailingListNote(props) {
|
|
15046
|
+
const copy = getBookingMailingListNoteCopy(props.note, props.context);
|
|
15047
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
15048
|
+
role: "status",
|
|
15049
|
+
className: props.className,
|
|
15050
|
+
children: [/* @__PURE__ */ jsx("p", { children: copy.title }), copy.detail ? /* @__PURE__ */ jsx("p", { children: copy.detail }) : null]
|
|
15051
|
+
});
|
|
15052
|
+
}
|
|
15053
|
+
//#endregion
|
|
15054
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-note.ts
|
|
15055
|
+
function storageKey(sessionId) {
|
|
15056
|
+
return `riverbank:booking:mailing-list:${sessionId}`;
|
|
15057
|
+
}
|
|
15058
|
+
function saveAppointmentMailingListNote(sessionId, note) {
|
|
15059
|
+
if (!note) return;
|
|
15060
|
+
try {
|
|
15061
|
+
window.sessionStorage.setItem(storageKey(sessionId), note);
|
|
15062
|
+
} catch {}
|
|
15063
|
+
}
|
|
15064
|
+
function readAppointmentMailingListNote(sessionId) {
|
|
15065
|
+
try {
|
|
15066
|
+
const stored = window.sessionStorage.getItem(storageKey(sessionId));
|
|
15067
|
+
return stored === "confirmation_required" || stored === "not_confirmed" ? stored : null;
|
|
15068
|
+
} catch {
|
|
15069
|
+
return null;
|
|
15070
|
+
}
|
|
15071
|
+
}
|
|
15072
|
+
//#endregion
|
|
15073
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.completion.tsx
|
|
15074
|
+
function BookingFormCompletion({ resourceName, successMessage, redirectState, localNote }) {
|
|
15075
|
+
const note = redirectState.kind === "success" ? readAppointmentMailingListNote(redirectState.sessionId) : localNote;
|
|
15076
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SuccessMessage, {
|
|
15077
|
+
message: getBookingSuccessMessage(successMessage),
|
|
15078
|
+
resourceName
|
|
15079
|
+
}), note ? /* @__PURE__ */ jsx(BookingMailingListNote, {
|
|
15080
|
+
note,
|
|
15081
|
+
context: "booking",
|
|
15082
|
+
className: "rb-mt-4"
|
|
15083
|
+
}) : null] });
|
|
15084
|
+
}
|
|
15085
|
+
//#endregion
|
|
15086
|
+
//#region ../blocks/src/system/runtime/nodes/booking-form.submit-handler.ts
|
|
15087
|
+
function appendRebookFlag(url, enabled) {
|
|
15088
|
+
if (!enabled) return url;
|
|
15089
|
+
const nextUrl = new URL(url);
|
|
15090
|
+
nextUrl.searchParams.set("rebook", "1");
|
|
15091
|
+
return nextUrl.toString();
|
|
15092
|
+
}
|
|
15093
|
+
function createBookingFormSubmitHandler(input) {
|
|
15094
|
+
return async () => {
|
|
15095
|
+
const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", input.bookingAnchorId);
|
|
15096
|
+
const result = await input.booking.actions.submit({
|
|
15097
|
+
redirect: "manual",
|
|
15098
|
+
successUrl: appendRebookFlag(successUrl, input.isPortalRebook),
|
|
15099
|
+
cancelUrl: appendRebookFlag(cancelUrl, input.isPortalRebook)
|
|
15100
|
+
});
|
|
15101
|
+
if (!result.ok) return;
|
|
15102
|
+
if (result.outcome.kind === "checkout_redirect") {
|
|
15103
|
+
saveAppointmentMailingListNote(result.outcome.sessionId, result.outcome.mailingListSignupNote);
|
|
15104
|
+
window.location.href = result.outcome.checkoutUrl;
|
|
15105
|
+
return;
|
|
15106
|
+
}
|
|
15107
|
+
input.setLocalMailingListNote(result.outcome.mailingListSignupNote ?? null);
|
|
15108
|
+
};
|
|
15109
|
+
}
|
|
15110
|
+
//#endregion
|
|
14949
15111
|
//#region ../blocks/src/system/runtime/nodes/booking-form.client.tsx
|
|
14950
|
-
const PORTAL_REBOOK_QUERY_PARAM = "rebook";
|
|
14951
|
-
const PORTAL_REBOOK_QUERY_VALUE = "1";
|
|
14952
15112
|
const REBOOK_COMPLETION_MODE_VERIFIED_CHECKOUT = "verified_checkout";
|
|
14953
15113
|
const REBOOK_COMPLETION_MODE_BYPASSED = "bypassed";
|
|
14954
15114
|
function getBookingRedirectLocationSnapshot() {
|
|
@@ -14961,12 +15121,6 @@ function getBookingRedirectLocationSnapshot() {
|
|
|
14961
15121
|
hash: window.location.hash
|
|
14962
15122
|
};
|
|
14963
15123
|
}
|
|
14964
|
-
function appendRebookFlag(url, enabled) {
|
|
14965
|
-
if (!enabled) return url;
|
|
14966
|
-
const nextUrl = new URL(url);
|
|
14967
|
-
nextUrl.searchParams.set(PORTAL_REBOOK_QUERY_PARAM, PORTAL_REBOOK_QUERY_VALUE);
|
|
14968
|
-
return nextUrl.toString();
|
|
14969
|
-
}
|
|
14970
15124
|
/**
|
|
14971
15125
|
* Themed surface container for every booking view state (wizard, success,
|
|
14972
15126
|
* verifying). Styled by the shared registration-surface layer.
|
|
@@ -14989,12 +15143,16 @@ const BookingFormClient$1 = ({ siteId: siteIdProp, render }) => {
|
|
|
14989
15143
|
const isPortalRebook = render.hydration.rebookContext?.kind === "portal_rebook";
|
|
14990
15144
|
const hasLoggedRebookCompletionRef = useRef(false);
|
|
14991
15145
|
const [redirectState] = useState(() => getBookingRedirectStateFromLocation(getBookingRedirectLocationSnapshot()));
|
|
15146
|
+
const [localMailingListNote, setLocalMailingListNote] = useState(null);
|
|
14992
15147
|
const showSpamProtection = render.hydration.spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
14993
15148
|
const api = useBlockApi();
|
|
14994
15149
|
const hasPortalAuth = api.config.auth.type === "bearer" || api.config.authOverrides?.portal?.type === "bearer";
|
|
15150
|
+
const formId = render.hydration.formId ?? form?.id ?? "booking-form";
|
|
14995
15151
|
const booking = useHeadlessBookingFlow({
|
|
15152
|
+
mailingList: render.hydration.mailingList,
|
|
15153
|
+
siteName: render.hydration.siteName,
|
|
14996
15154
|
siteId,
|
|
14997
|
-
formId
|
|
15155
|
+
formId,
|
|
14998
15156
|
form,
|
|
14999
15157
|
services,
|
|
15000
15158
|
serviceCategories: render.hydration.serviceCategories,
|
|
@@ -15064,22 +15222,20 @@ const BookingFormClient$1 = ({ siteId: siteIdProp, render }) => {
|
|
|
15064
15222
|
children: render.display.message ?? "Booking form not found. Please check your configuration."
|
|
15065
15223
|
})
|
|
15066
15224
|
});
|
|
15067
|
-
const handleComplete =
|
|
15068
|
-
|
|
15069
|
-
|
|
15070
|
-
|
|
15071
|
-
|
|
15072
|
-
|
|
15073
|
-
});
|
|
15074
|
-
if (!result.ok) return;
|
|
15075
|
-
if (result.outcome.kind === "checkout_redirect") window.location.href = result.outcome.checkoutUrl;
|
|
15076
|
-
};
|
|
15225
|
+
const handleComplete = createBookingFormSubmitHandler({
|
|
15226
|
+
booking,
|
|
15227
|
+
bookingAnchorId,
|
|
15228
|
+
isPortalRebook,
|
|
15229
|
+
setLocalMailingListNote
|
|
15230
|
+
});
|
|
15077
15231
|
if (viewState.kind === "success") return /* @__PURE__ */ jsx(BookingSurface, {
|
|
15078
15232
|
id: bookingAnchorId,
|
|
15079
15233
|
className: render.display.className,
|
|
15080
|
-
children: /* @__PURE__ */ jsx(
|
|
15081
|
-
|
|
15082
|
-
resourceName: viewState.resourceName
|
|
15234
|
+
children: /* @__PURE__ */ jsx(BookingFormCompletion, {
|
|
15235
|
+
successMessage: render.display.successMessage,
|
|
15236
|
+
resourceName: viewState.resourceName,
|
|
15237
|
+
redirectState,
|
|
15238
|
+
localNote: localMailingListNote
|
|
15083
15239
|
})
|
|
15084
15240
|
});
|
|
15085
15241
|
if (viewState.kind === "verifying") return /* @__PURE__ */ jsx(BookingSurface, {
|
|
@@ -15188,7 +15344,8 @@ function createInitialRegistrationFormData() {
|
|
|
15188
15344
|
email: "",
|
|
15189
15345
|
phone: "",
|
|
15190
15346
|
notes: "",
|
|
15191
|
-
consentAccepted: false
|
|
15347
|
+
consentAccepted: false,
|
|
15348
|
+
mailingListOptIn: false
|
|
15192
15349
|
};
|
|
15193
15350
|
}
|
|
15194
15351
|
function validateFormData(formData, requiresConsent = false) {
|
|
@@ -16312,7 +16469,10 @@ async function handleCheckoutReturn(options, deps, returnContextRef) {
|
|
|
16312
16469
|
}
|
|
16313
16470
|
const { checkoutAttemptId } = command;
|
|
16314
16471
|
const pending = deps.getPendingRegistration(siteId, checkoutAttemptId);
|
|
16315
|
-
returnContextRef.current = {
|
|
16472
|
+
returnContextRef.current = {
|
|
16473
|
+
checkoutAttemptId,
|
|
16474
|
+
mailingListSignupNote: pending?.mailingListSignupNote
|
|
16475
|
+
};
|
|
16316
16476
|
if (pending) restorePendingPresentation(options, pending);
|
|
16317
16477
|
options.setStep("verifying-payment");
|
|
16318
16478
|
try {
|
|
@@ -16333,7 +16493,10 @@ function completeVerifiedRegistration(options, deps, returnContext) {
|
|
|
16333
16493
|
const siteId = options.api.config.siteId;
|
|
16334
16494
|
const checkoutAttemptId = returnContext?.checkoutAttemptId;
|
|
16335
16495
|
if (siteId && checkoutAttemptId) deps.clearPendingRegistration(siteId, checkoutAttemptId);
|
|
16336
|
-
options.setRegistrationResult({
|
|
16496
|
+
options.setRegistrationResult({
|
|
16497
|
+
status: "confirmed",
|
|
16498
|
+
mailingListSignupNote: returnContext?.mailingListSignupNote
|
|
16499
|
+
});
|
|
16337
16500
|
options.setStep("success");
|
|
16338
16501
|
}
|
|
16339
16502
|
function useEventRegistrationStripeReturnWithDeps(options, deps) {
|
|
@@ -16406,6 +16569,9 @@ function registrationErrorPresentation(error) {
|
|
|
16406
16569
|
}
|
|
16407
16570
|
//#endregion
|
|
16408
16571
|
//#region ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
|
|
16572
|
+
function wantsMailingListSignup(options) {
|
|
16573
|
+
return options.mailingListSignup !== null && options.formData.mailingListOptIn === true;
|
|
16574
|
+
}
|
|
16409
16575
|
function createClientCommandId(cryptoSource = {
|
|
16410
16576
|
randomUUID: globalThis.crypto.randomUUID?.bind(globalThis.crypto),
|
|
16411
16577
|
getRandomValues: (bytes) => globalThis.crypto.getRandomValues(bytes)
|
|
@@ -16503,7 +16669,8 @@ async function completeRegistrationSubmission(options, deps, prepared, result, s
|
|
|
16503
16669
|
case "paymentStatusRequired":
|
|
16504
16670
|
options.setPaymentStatusRecovery({
|
|
16505
16671
|
kind: "ready",
|
|
16506
|
-
subject: result.subject
|
|
16672
|
+
subject: result.subject,
|
|
16673
|
+
mailingListSignupNote: result.mailingListSignupNote
|
|
16507
16674
|
});
|
|
16508
16675
|
options.setStep("payment-status");
|
|
16509
16676
|
return {
|
|
@@ -16512,14 +16679,15 @@ async function completeRegistrationSubmission(options, deps, prepared, result, s
|
|
|
16512
16679
|
};
|
|
16513
16680
|
case "checkoutRequired":
|
|
16514
16681
|
options.setPendingRegistrationReference(result.reference);
|
|
16515
|
-
savePendingCheckout(options, deps, prepared, result.submissionId, result.reference);
|
|
16682
|
+
savePendingCheckout(options, deps, prepared, result.submissionId, result.reference, result.mailingListSignupNote);
|
|
16516
16683
|
options.setStep("redirecting");
|
|
16517
16684
|
return redirectToCheckout(result.checkoutUrl, submitOptions);
|
|
16518
16685
|
case "waitlisted":
|
|
16519
16686
|
options.setRegistrationResult({
|
|
16520
16687
|
status: "waitlist",
|
|
16521
16688
|
title: "Added to waitlist",
|
|
16522
|
-
message: result.waitlist.message
|
|
16689
|
+
message: result.waitlist.message,
|
|
16690
|
+
mailingListSignupNote: result.mailingListSignupNote
|
|
16523
16691
|
});
|
|
16524
16692
|
break;
|
|
16525
16693
|
case "bookingComplete":
|
|
@@ -16527,7 +16695,8 @@ async function completeRegistrationSubmission(options, deps, prepared, result, s
|
|
|
16527
16695
|
options.setPendingRegistrationReference(result.reference);
|
|
16528
16696
|
options.setRegistrationResult({
|
|
16529
16697
|
status: "confirmed",
|
|
16530
|
-
message: result.summary.paymentMethod === "pass" ? result.summary.message : void 0
|
|
16698
|
+
message: result.summary.paymentMethod === "pass" ? result.summary.message : void 0,
|
|
16699
|
+
mailingListSignupNote: result.mailingListSignupNote
|
|
16531
16700
|
});
|
|
16532
16701
|
break;
|
|
16533
16702
|
}
|
|
@@ -16586,7 +16755,7 @@ function resolveSelectionSnapshot(method, passId, membershipId, bundleProductId,
|
|
|
16586
16755
|
if (method === "free") return { method };
|
|
16587
16756
|
throw new Error("Choose an available payment option.");
|
|
16588
16757
|
}
|
|
16589
|
-
function savePendingCheckout(options, deps, prepared, checkoutAttemptId, reference) {
|
|
16758
|
+
function savePendingCheckout(options, deps, prepared, checkoutAttemptId, reference, mailingListSignupNote) {
|
|
16590
16759
|
const siteId = options.api.config.siteId;
|
|
16591
16760
|
if (!siteId) return;
|
|
16592
16761
|
deps.savePendingRegistration(siteId, checkoutAttemptId, {
|
|
@@ -16595,7 +16764,8 @@ function savePendingCheckout(options, deps, prepared, checkoutAttemptId, referen
|
|
|
16595
16764
|
ticketSelections: prepared.ticketSelections,
|
|
16596
16765
|
selectedEventId: options.registrationTarget?.selectedEventId ?? null,
|
|
16597
16766
|
selectedAttendanceMode: options.selectedAttendanceMode,
|
|
16598
|
-
paymentSelection: prepared.selectionSnapshot
|
|
16767
|
+
paymentSelection: prepared.selectionSnapshot,
|
|
16768
|
+
mailingListSignupNote
|
|
16599
16769
|
});
|
|
16600
16770
|
}
|
|
16601
16771
|
function redirectToCheckout(checkoutUrl, submitOptions) {
|
|
@@ -16609,7 +16779,7 @@ function redirectToCheckout(checkoutUrl, submitOptions) {
|
|
|
16609
16779
|
};
|
|
16610
16780
|
}
|
|
16611
16781
|
function registrationRequestIntentKey(request) {
|
|
16612
|
-
const { registrationCommandId: _command, altchaSolution: _proof, checkout, ...intent } = request;
|
|
16782
|
+
const { registrationCommandId: _command, altchaSolution: _proof, mailingListOptIn: _marketingConsent, checkout, ...intent } = request;
|
|
16613
16783
|
return JSON.stringify({
|
|
16614
16784
|
...intent,
|
|
16615
16785
|
checkout: checkout ? {
|
|
@@ -16634,6 +16804,7 @@ function buildRegistrationRequest(options, prepared, method, passId, membershipI
|
|
|
16634
16804
|
phone: options.formData.phone.trim() || void 0,
|
|
16635
16805
|
notes: options.formData.notes.trim() || void 0,
|
|
16636
16806
|
consentAccepted: options.formData.consentAccepted,
|
|
16807
|
+
mailingListOptIn: wantsMailingListSignup(options),
|
|
16637
16808
|
altchaSolution: options.altchaSolution,
|
|
16638
16809
|
paymentMethod: method,
|
|
16639
16810
|
customerPassId: method === "pass" ? passId : void 0,
|
|
@@ -17627,13 +17798,17 @@ function isCheckableRecovery(state) {
|
|
|
17627
17798
|
function assistanceRequired(recovery) {
|
|
17628
17799
|
return {
|
|
17629
17800
|
kind: "assistanceRequired",
|
|
17630
|
-
subject: recovery.subject
|
|
17801
|
+
subject: recovery.subject,
|
|
17802
|
+
mailingListSignupNote: recovery.mailingListSignupNote
|
|
17631
17803
|
};
|
|
17632
17804
|
}
|
|
17633
17805
|
function applyStatusOutcome(outcome, recovery, setters, setRecovery) {
|
|
17634
17806
|
if (outcome.kind === "resolved") {
|
|
17635
17807
|
setters.setPendingRegistrationReference(outcome.reference);
|
|
17636
|
-
setters.setRegistrationResult({
|
|
17808
|
+
setters.setRegistrationResult({
|
|
17809
|
+
status: "confirmed",
|
|
17810
|
+
mailingListSignupNote: recovery.mailingListSignupNote
|
|
17811
|
+
});
|
|
17637
17812
|
setRecovery(null);
|
|
17638
17813
|
setters.setStep("success");
|
|
17639
17814
|
return;
|
|
@@ -17762,6 +17937,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
|
|
|
17762
17937
|
const paymentSelection = flowState.paymentSelection;
|
|
17763
17938
|
const [selectedEvent, setSelectedEvent] = useState(preSelectedEvent ?? null);
|
|
17764
17939
|
const [formData, setFormData] = useState(createInitialRegistrationFormData);
|
|
17940
|
+
const mailingListSignup = resolveBookingSignupOffer(options.mailingList, options.siteName);
|
|
17765
17941
|
const [errors, setErrors] = useState({});
|
|
17766
17942
|
const [guests, setGuests] = useState([]);
|
|
17767
17943
|
const [guestErrors, setGuestErrors] = useState({});
|
|
@@ -18208,6 +18384,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
|
|
|
18208
18384
|
ticketSelections,
|
|
18209
18385
|
selectedSlidingAmount,
|
|
18210
18386
|
formData,
|
|
18387
|
+
mailingListSignup,
|
|
18211
18388
|
altchaSolution,
|
|
18212
18389
|
requireGuestDetails,
|
|
18213
18390
|
guests,
|
|
@@ -18304,6 +18481,7 @@ function useEventRegistrationWizardWithDeps(options, deps) {
|
|
|
18304
18481
|
hasValidTicketSelection,
|
|
18305
18482
|
eventRequiresPayment,
|
|
18306
18483
|
formData,
|
|
18484
|
+
mailingListSignup,
|
|
18307
18485
|
setFormData,
|
|
18308
18486
|
errors,
|
|
18309
18487
|
guests,
|
|
@@ -18515,7 +18693,8 @@ function useEventRegistrationControllerWithDeps(options, deps) {
|
|
|
18515
18693
|
},
|
|
18516
18694
|
attendee: {
|
|
18517
18695
|
values: wizard.formData,
|
|
18518
|
-
errors: wizard.errors
|
|
18696
|
+
errors: wizard.errors,
|
|
18697
|
+
mailingListSignup: wizard.mailingListSignup
|
|
18519
18698
|
},
|
|
18520
18699
|
guests: {
|
|
18521
18700
|
required: wizard.requireGuestDetails,
|
|
@@ -18613,7 +18792,9 @@ function useEventRegistrationWizardControllerWithDeps(options, deps) {
|
|
|
18613
18792
|
occurrenceContext: options.occurrenceContext ?? null,
|
|
18614
18793
|
subject: options.subject ?? null,
|
|
18615
18794
|
events: [...options.events ?? []],
|
|
18616
|
-
maxTicketsNum
|
|
18795
|
+
maxTicketsNum,
|
|
18796
|
+
mailingList: options.mailingList,
|
|
18797
|
+
siteName: options.siteName
|
|
18617
18798
|
}) };
|
|
18618
18799
|
}
|
|
18619
18800
|
function resolveExistingRegistrationState(wizard) {
|