@riverbankcms/sdk 0.130.2 → 0.134.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 +13 -3
- package/dist/{PreviewEditorSidebar-BY-1QdE2.mjs → PreviewEditorSidebar-DfRhJPFQ.mjs} +351 -95
- package/dist/{PreviewEditorUI-BS34jI9_.mjs → PreviewEditorUI-Dppxcr_g.mjs} +3 -3
- package/dist/{PreviewQueryProvider-BD0kOjtI.mjs → PreviewQueryProvider-D51gQaG3.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-B1pWnhu-.mjs → SdkPreviewModeRuntime-8CyGCXir.mjs} +91 -21
- package/dist/{SiteChromeCustomizeContext-BhUG_72i.mjs → SiteChromeCustomizeContext-DVMTMvqA.mjs} +6896 -4335
- package/dist/_dts/ai/src/contracts/proposals.d.ts +1105 -533
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +363 -276
- package/dist/_dts/api/src/accountApi.d.ts +5 -5
- package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +1 -1
- package/dist/_dts/api/src/bookingConfig.d.ts +13 -9
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +8 -19
- package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +31 -2
- package/dist/_dts/api/src/bookingOperations.d.ts +2 -14
- package/dist/_dts/api/src/bookingVerticals.d.ts +1 -140
- package/dist/_dts/api/src/bookings.d.ts +2 -2
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +45 -12
- package/dist/_dts/api/src/contentRuntime.d.ts +3 -2
- package/dist/_dts/api/src/courseEndpointDefinitions.d.ts +2 -2
- package/dist/_dts/api/src/courses.d.ts +1 -19
- package/dist/_dts/api/src/endpoints.d.ts +469 -349
- package/dist/_dts/api/src/event-destination-policy.d.ts +1 -1
- package/dist/_dts/api/src/eventManagementContracts.d.ts +91 -1
- package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +32 -0
- package/dist/_dts/api/src/giftingDashboard.d.ts +117 -0
- package/dist/_dts/api/src/giftingEndpointDefinitions.d.ts +124 -0
- package/dist/_dts/api/src/index.d.ts +4 -4
- 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/media.d.ts +1 -0
- package/dist/_dts/api/src/navigation/contracts.d.ts +9 -6
- package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +3 -4
- package/dist/_dts/api/src/navigation/linkResolver.d.ts +6 -2
- package/dist/_dts/api/src/navigation/types.d.ts +23 -6
- package/dist/_dts/api/src/navigation.d.ts +1 -1
- package/dist/_dts/api/src/publicBookingService.d.ts +15 -0
- package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +11 -0
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +28 -13
- package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +2 -0
- package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +3 -0
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +3 -3
- package/dist/_dts/api/src/sdkBookingVerticalContracts.d.ts +29 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +9 -32
- package/dist/_dts/api/src/sdkEndpointDefinitions.d.ts +23 -0
- package/dist/_dts/api/src/sdkSettingsContracts.d.ts +25 -0
- package/dist/_dts/api/src/sdkThemeCatalogContracts.d.ts +20 -0
- package/dist/_dts/api/src/sdkThemeWire.d.ts +64 -54
- package/dist/_dts/api/src/siteBanner.d.ts +4 -2
- package/dist/_dts/api/src/siteOnboarding.d.ts +3 -3
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +4 -10
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +0 -3
- package/dist/_dts/api/src/types.d.ts +2 -3
- package/dist/_dts/api/src/webhooks.d.ts +12 -12
- package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -13
- package/dist/_dts/blocks/src/client.d.ts +1 -1
- package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +9 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +54 -116
- package/dist/_dts/blocks/src/index.d.ts +4 -3
- package/dist/_dts/blocks/src/primitives/content/components/RichText.d.ts +2 -2
- package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +1 -0
- package/dist/_dts/blocks/src/subroutes/fold.d.ts +2 -1
- package/dist/_dts/blocks/src/system/blocks/courses/shared/index.d.ts +0 -3
- package/dist/_dts/blocks/src/system/blocks/courses/shared/pricing.d.ts +2 -50
- package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +1 -929
- package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -97
- package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +39 -6
- package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +2 -1
- package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +3 -3
- package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -3
- package/dist/_dts/blocks/src/system/blocks/events/shared/filtering.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -20
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +5 -9
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/index.d.ts +3 -0
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/pricing.d.ts +50 -0
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +135 -0
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +84 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +4 -4
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +148 -148
- package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +3 -2
- package/dist/_dts/blocks/src/system/blocks/shared/bookingConsent.d.ts +36 -0
- package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +7 -8
- package/dist/_dts/blocks/src/system/manifest/hydrateLinks.d.ts +9 -2
- package/dist/_dts/blocks/src/system/manifest/resolveBlockData.d.ts +8 -0
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +79 -79
- package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -11
- package/dist/_dts/blocks/src/system/runtime/api/types/courses.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/blockComposition.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/components/multi-step/DynamicFormFields.d.ts +3 -19
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +45 -72
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +22 -37
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +6 -6
- package/dist/_dts/blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.consent.d.ts +10 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.field-values.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.fields.d.ts +21 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +38 -144
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -19
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/course-page-surface-scope.d.ts +2 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.client.d.ts +4 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +19 -7
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +25 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/presentation.d.ts +75 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/view.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +5 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +5 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/RegistrationClosedState.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SiteCreditPreviewPanel.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +17 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +21 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/siteCreditPreview.d.ts +51 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +3 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +6 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/validation.d.ts +2 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/BookingModeStep.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/CheckIcon.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/ErrorStep.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/MembershipHero.d.ts +3 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/PaymentFailedStep.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/StepIndicator.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/VerifyingTimeoutStep.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationActiveSteps.d.ts +9 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration/CourseRegistrationErrorBoundary.d.ts → event-registration/whole-series/WholeSeriesRegistrationErrorBoundary.d.ts} +5 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationTerminalContent.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/WholeSeriesRegistrationWizard.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/components.d.ts +46 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/index.d.ts +4 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/presentation.d.ts +7 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/pricing.d.ts +14 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/types.d.ts +18 -16
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration/useCourseEligibility.d.ts → event-registration/whole-series/useWholeSeriesEligibility.d.ts} +6 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesPaymentVerification.d.ts +10 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationActions.d.ts +35 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration/useCourseRegistrationPortal.d.ts → event-registration/whole-series/useWholeSeriesRegistrationPortal.d.ts} +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationSelection.d.ts +35 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/useWholeSeriesRegistrationWizard.d.ts +185 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration/useCourseWaitlistSelection.d.ts → event-registration/whole-series/useWholeSeriesWaitlistSelection.d.ts} +5 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/utils.d.ts +4 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/whole-series-registration.headless.contract.d.ts +7 -7
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/whole-series-registration.headless.planning.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/whole-series/wholeSeriesPageSurfaceScope.d.ts +17 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration/courseRegistrationViewState.d.ts → event-registration/whole-series/wholeSeriesRegistrationViewState.d.ts} +7 -7
- package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/wizardSteps.d.ts +4 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -54
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +12 -11
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.server.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventSpotlight.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventDetailModal.d.ts +4 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModalCloseButton.d.ts +7 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventModals.d.ts +4 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +14 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +51 -14
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingConsentAgreement.d.ts +7 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.d.ts +12 -12
- package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +1 -0
- package/dist/_dts/blocks/src/system/transforms/registry/_utils/boxStyleClassNames.d.ts +30 -11
- package/dist/_dts/blocks/src/system/transforms/registry/boxStyles.d.ts +15 -4
- package/dist/_dts/blocks/src/system/transforms/registry/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/transforms/typed.d.ts +1 -4
- package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
- package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +13 -0
- package/dist/_dts/commerce/src/purchase/cancellationPolicy.d.ts +7 -0
- package/dist/_dts/commerce/src/purchase/canonicalRefundPlanner.d.ts +48 -0
- package/dist/_dts/commerce/src/purchase/checkoutCollectionPlan.d.ts +39 -0
- package/dist/_dts/commerce/src/purchase/checkoutCommitPlan.d.ts +40 -0
- package/dist/_dts/commerce/src/purchase/checkoutDiscountContextPlanning.d.ts +80 -0
- package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -0
- package/dist/_dts/commerce/src/purchase/checkoutOrderItemProjection.d.ts +22 -0
- package/dist/_dts/commerce/src/purchase/checkoutPaymentFlow.d.ts +50 -0
- package/dist/_dts/commerce/src/purchase/checkoutPaymentPlanPlanning.d.ts +30 -0
- package/dist/_dts/commerce/src/purchase/checkoutPaymentTermPlanning.d.ts +10 -0
- package/dist/_dts/commerce/src/purchase/checkoutPaymentTerms.d.ts +53 -0
- package/dist/_dts/commerce/src/purchase/checkoutQuantity.d.ts +8 -0
- package/dist/_dts/commerce/src/purchase/checkoutSessionMetadata.d.ts +76 -0
- package/dist/_dts/commerce/src/purchase/checkoutSettlement.d.ts +46 -0
- package/dist/_dts/commerce/src/purchase/checkoutStripeFinalizationPlanning.d.ts +12 -0
- package/dist/_dts/commerce/src/purchase/checkoutStripeSessionPlanning.d.ts +125 -0
- package/dist/_dts/commerce/src/purchase/checkoutValidatedItemPlanning.d.ts +55 -0
- package/dist/_dts/commerce/src/purchase/confirmationEmailPayment.d.ts +91 -0
- package/dist/_dts/commerce/src/purchase/discountApplication.d.ts +74 -0
- package/dist/_dts/commerce/src/purchase/index.d.ts +55 -0
- package/dist/_dts/commerce/src/purchase/oneTimeCheckoutPlanning.d.ts +86 -0
- package/dist/_dts/commerce/src/purchase/order-number.d.ts +33 -0
- package/dist/_dts/commerce/src/purchase/orderCancellationPlan.d.ts +19 -0
- package/dist/_dts/commerce/src/purchase/orderCompletionEmailPlan.d.ts +71 -0
- package/dist/_dts/commerce/src/purchase/orderConfirmationPlanning.d.ts +120 -0
- package/dist/_dts/commerce/src/purchase/orderFulfillmentPlan.d.ts +81 -0
- package/dist/_dts/commerce/src/purchase/orderFulfillmentResult.d.ts +8 -0
- package/dist/_dts/commerce/src/purchase/orderHistoryLedgerFilters.d.ts +1 -0
- package/dist/_dts/commerce/src/purchase/orderHistorySource.d.ts +11 -0
- package/dist/_dts/commerce/src/purchase/orderInstalmentAdminSettlement.d.ts +43 -0
- package/dist/_dts/commerce/src/purchase/orderInstalmentClosure.d.ts +29 -0
- package/dist/_dts/commerce/src/purchase/orderInstalmentLifecycle.d.ts +44 -0
- package/dist/_dts/commerce/src/purchase/orderInstalmentPayoff.d.ts +24 -0
- package/dist/_dts/commerce/src/purchase/orderInstalmentPlan.d.ts +40 -0
- package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +151 -0
- package/dist/_dts/commerce/src/purchase/orderItemSupport.d.ts +14 -0
- package/dist/_dts/commerce/src/purchase/orderListFilters.d.ts +3 -0
- package/dist/_dts/commerce/src/purchase/orderPaymentLinkPlanning.d.ts +60 -0
- package/dist/_dts/commerce/src/purchase/orderPaymentReceipt.d.ts +184 -0
- package/dist/_dts/commerce/src/purchase/orderPaymentState.d.ts +135 -0
- package/dist/_dts/commerce/src/purchase/orderPlanningTypes.d.ts +102 -0
- package/dist/_dts/commerce/src/purchase/orderRefundPlanning.d.ts +50 -0
- package/dist/_dts/commerce/src/purchase/orderRefundPolicy.d.ts +36 -0
- package/dist/_dts/commerce/src/purchase/orderTotals.d.ts +23 -0
- package/dist/_dts/commerce/src/purchase/orderTypes.d.ts +39 -0
- package/dist/_dts/commerce/src/purchase/pendingCheckoutSessionClaim.d.ts +1 -0
- package/dist/_dts/commerce/src/purchase/persistedCheckoutLines.d.ts +27 -0
- package/dist/_dts/commerce/src/purchase/protectedDepositRefundPolicy.d.ts +86 -0
- package/dist/_dts/commerce/src/purchase/refundPolicy.d.ts +8 -0
- package/dist/_dts/commerce/src/purchase/refundRailSplit.d.ts +40 -0
- package/dist/_dts/commerce/src/purchase/result.d.ts +2 -0
- package/dist/_dts/commerce/src/purchase/settlement.d.ts +97 -0
- package/dist/_dts/commerce/src/purchase/shopRefundPlanning.d.ts +43 -0
- package/dist/_dts/commerce/src/purchase/stateTransitions.d.ts +31 -0
- package/dist/_dts/commerce/src/purchase/stripeMinimumCharge.d.ts +10 -0
- package/dist/_dts/commerce/src/purchase/types.d.ts +168 -0
- package/dist/_dts/commerce/src/shop/shipmentEligibility.d.ts +14 -0
- package/dist/_dts/commerce/src/utils/assertNever.d.ts +1 -0
- package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -0
- package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -0
- package/dist/_dts/content-model/src/content-types/schema.d.ts +4 -4
- package/dist/_dts/core/src/booking-consent.d.ts +8 -0
- package/dist/_dts/core/src/booking-vertical-catalog.d.ts +741 -0
- package/dist/_dts/core/src/booking-vertical-config.d.ts +66 -0
- package/dist/_dts/core/src/booking-vertical-definitions.d.ts +68 -0
- package/dist/_dts/{api/src/bookingVerticalPreset.d.ts → core/src/booking-vertical-preset.d.ts} +1 -1
- package/dist/_dts/core/src/booking-verticals.d.ts +98 -0
- package/dist/_dts/core/src/event-page-selection.d.ts +22 -0
- package/dist/_dts/core/src/event-pricing.d.ts +5 -0
- package/dist/_dts/core/src/event-series-behaviour.d.ts +16 -0
- package/dist/_dts/core/src/index.d.ts +4 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +81 -3
- package/dist/_dts/db/src/schemas/forms.d.ts +25 -25
- package/dist/_dts/db/src/types/jsonb.d.ts +1 -1
- package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +2 -1
- package/dist/_dts/editor/src/primitives/rich-text/config.d.ts +2 -1
- package/dist/_dts/editor/src/primitives/rich-text/toolbar/linkPopoverUtils.d.ts +3 -2
- package/dist/_dts/editor/src/primitives/rich-text/useRichTextEditor.d.ts +3 -4
- package/dist/_dts/media-core/src/fileUploadCompletion.d.ts +3 -0
- package/dist/_dts/media-core/src/fileUploadDurableFinalization.d.ts +2 -0
- package/dist/_dts/media-core/src/identifiers.d.ts +10 -0
- package/dist/_dts/media-core/src/mediaWriteNormalizer.d.ts +2 -6
- package/dist/_dts/media-core/src/types.d.ts +2 -1
- package/dist/_dts/media-core/src/usageScanner.d.ts +1 -1
- package/dist/_dts/media-editor/src/index.d.ts +2 -2
- package/dist/_dts/media-editor/src/mediaSelection.d.ts +1 -22
- package/dist/_dts/media-editor/src/useMediaSelection.d.ts +0 -9
- package/dist/_dts/preview-next/src/client/preview/ButtonHoverRoleControls.d.ts +10 -0
- package/dist/_dts/preview-next/src/client/preview/ButtonStylePicker.d.ts +3 -2
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfiguratorWarningNotice.d.ts +7 -0
- package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +1 -1
- package/dist/_dts/sdk/src/bookings/types.d.ts +7 -89
- package/dist/_dts/sdk/src/client/eventSubrouteReadOperations.d.ts +11 -0
- package/dist/_dts/sdk/src/client/types.d.ts +12 -5
- package/dist/_dts/sdk/src/components.d.ts +1 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +30 -30
- package/dist/_dts/sdk/src/contracts/content.d.ts +10 -36
- package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
- package/dist/_dts/sdk/src/contracts/page.d.ts +2 -13
- package/dist/_dts/sdk/src/contracts/rendering.d.ts +1 -1
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -16
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +9 -9
- package/dist/_dts/sdk/src/next/pageMetadataProjection.d.ts +7 -0
- package/dist/_dts/sdk/src/next/resolveEventPageSubroute.d.ts +12 -0
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +11 -38
- package/dist/_dts/sdk/src/public-api/eventSubrouteContracts.d.ts +12 -0
- package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
- package/dist/_dts/sdk/src/rendering/client.d.ts +44 -0
- package/dist/_dts/sdk/src/rendering/index.d.ts +1 -1
- package/dist/_dts/sdk/src/routing/entrySubroutes.d.ts +1 -1
- package/dist/_dts/sdk/src/routing/resolveOccurrence.d.ts +4 -3
- package/dist/_dts/sdk/src/routing/resolvePageContent.d.ts +7 -3
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
- package/dist/_dts/theme-core/src/buttons/buttonSurfaceContext.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/contextualHover.d.ts +41 -0
- package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +3 -0
- package/dist/_dts/theme-core/src/buttons/resolveButtonHoverTreatment.d.ts +14 -0
- package/dist/_dts/theme-core/src/buttons/styles/domain.d.ts +21 -4
- package/dist/_dts/theme-core/src/buttons/styles/recipes/flatInk.d.ts +92 -0
- package/dist/_dts/theme-core/src/buttons/styles/recipes/staticRecipes.d.ts +10 -150
- package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +57 -102
- package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +50 -2
- package/dist/_dts/theme-core/src/buttons/types.d.ts +41 -12
- package/dist/_dts/theme-core/src/cards/types.d.ts +7 -29
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +90 -75
- package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -4
- package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
- package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
- package/dist/_dts/theme-core/src/schema.d.ts +98 -110
- package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +27 -0
- package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +27 -0
- package/dist/_dts/theme-core/src/site-styles/buttonSelectionCompiler.d.ts +18 -0
- package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +21 -0
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -4
- package/dist/_dts/theme-core/src/site-styles/logoBranding.d.ts +4 -4
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +2 -11
- package/dist/_dts/theme-core/src/site-styles/selectionFallbackWarning.d.ts +15 -0
- package/dist/_dts/theme-core/src/site-styles/types.d.ts +13 -1
- package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/button.d.ts +1 -1
- package/dist/_dts/ui/src/callout.d.ts +1 -1
- package/dist/_dts/ui/src/card.d.ts +1 -1
- package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -0
- package/dist/client/{StepIndicator-CLjQhkDb.mjs → BookingConsentAgreement-BxgpGEFD.mjs} +26 -4
- package/dist/client/{DiscountCodeDisclosure-BPZ-yfGI.mjs → DiscountCodeDisclosure-CfuPOHD0.mjs} +12 -12
- package/dist/client/{EventCombined.client-Cjt3kKYR.mjs → EventCombined.client-DB8Qfzi-.mjs} +37 -49
- package/dist/client/{EventListing.client-DY9dn6Fh.mjs → EventListing.client-DD4X8hp4.mjs} +2 -2
- package/dist/client/{LeafletStaticMap--2c61XYn.mjs → LeafletStaticMap-QhgIBQbv.mjs} +1 -1
- package/dist/client/{CourseRegistrationWizard-DGW9F0SQ.mjs → WholeSeriesRegistrationWizard-DwtC7bCs.mjs} +1460 -1247
- package/dist/client/{accordion-_boYwHHi.mjs → accordion-DFXpLvwg.mjs} +1 -1
- package/dist/client/{bookingForm--AqEfyBX.mjs → bookingForm-sI05d3lk.mjs} +73 -47
- package/dist/client/bookings.mjs +1719 -706
- package/dist/client/{carousel-CVI2dqZr.mjs → carousel-wjyWTZCh.mjs} +1 -1
- package/dist/client/{cart-DR6IiPz9.mjs → cart-DCwdpA4i.mjs} +3 -3
- package/dist/client/{checkout-CsrGAfQt.mjs → checkout-DTDW3l0R.mjs} +3 -3
- package/dist/client/checkoutUrls-DQYC_Br-.mjs +187 -0
- package/dist/client/client.mjs +6830 -3672
- package/dist/client/{context-B83PiNzm.mjs → context-TSK1CGx8.mjs} +1 -14
- package/dist/client/{courseRegistration-aNJVaLa3.mjs → courseRegistration-A-Tg7qw_.mjs} +11 -5
- package/dist/client/{eventCalendar-OZ7h59VN.mjs → eventCalendar-B0Zg-i_w.mjs} +41 -44
- package/dist/client/{eventCombined-BbJ6bFKz.mjs → eventCombined-B8Y2wizd.mjs} +3 -3
- package/dist/client/{eventDetails-BLyUBiCT.mjs → eventDetails-DPDOwURJ.mjs} +276 -94
- package/dist/client/{eventListing-DuP1yhBS.mjs → eventListing-CjBcmSLn.mjs} +3 -3
- package/dist/client/{eventRegistration-BXyECPa-.mjs → eventRegistration-CK30HsAq.mjs} +730 -190
- package/dist/client/{form-BA4t3kKU.mjs → form-CUXfsABE.mjs} +2 -2
- package/dist/client/{headerSection-CpNaJxhW.mjs → headerSection-N-mN3rjr.mjs} +2 -2
- package/dist/client/hooks.mjs +1418 -484
- package/dist/client/{locationMap-3HGMCL7_.mjs → locationMap-oiIDQMBt.mjs} +2 -2
- package/dist/client/{newsletterForm-C2s6Mw67.mjs → newsletterForm-CkQ2tTrM.mjs} +2 -2
- package/dist/client/pricing-Caa0QWzh.mjs +195 -0
- package/dist/client/{productDetail-C9joWhdE.mjs → productDetail-CnidyrsN.mjs} +3 -3
- package/dist/client/{productList-CjzdU3pB.mjs → productList-CttYcS_S.mjs} +3 -3
- package/dist/client/{propsDecoder-CBPGXEYX.mjs → propsDecoder-CeUMxI9a.mjs} +677 -350
- package/dist/client/rendering/client.mjs +6075 -4150
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +7589 -4388
- package/dist/client/{scrollToBlock-DZ73aEX6.mjs → scrollToBlock-lPr1oqxB.mjs} +1 -1
- package/dist/client/{shop-CQRai7hj.mjs → shop-DXQtMo2O.mjs} +6 -6
- package/dist/client/{shop-commerce-hP9UboOx.mjs → shop-commerce-quDL411J.mjs} +7 -164
- package/dist/client/{shop-commerce-store-DiD5a32e.mjs → shop-commerce-store-Dnu-8Iub.mjs} +1 -1
- package/dist/client/{shopShared-DP8DXTkF.mjs → shopShared-BWPUURvG.mjs} +3 -3
- package/dist/client/{useEventFilters-pF_OJNQP.mjs → useEventFilters-DRhWp2_5.mjs} +196 -7
- package/dist/client/{usePolling-Cls91SD2.mjs → usePolling-UN4WKnaM.mjs} +3 -3
- package/dist/preview-next/before-render.mjs +247 -60
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/keepAlive.mjs +247 -60
- package/dist/preview-next/middleware.mjs +247 -60
- package/dist/{previewAuthStore-CX1C_KJ4.mjs → previewAuthStore-BFKd4LrN.mjs} +247 -60
- package/dist/{sdk-runtime-5CcPAI14.mjs → sdk-runtime-Ca5RD78X.mjs} +2 -2
- package/dist/{separator-BXlYN_gr.mjs → separator-CMhj6BTi.mjs} +1 -1
- package/dist/server/components.mjs +3578 -1614
- package/dist/server/config-validation.mjs +1418 -485
- package/dist/server/config.mjs +1418 -485
- package/dist/server/data.mjs +1418 -484
- package/dist/server/index.mjs +289 -81
- package/dist/server/manifest.mjs +0 -1
- package/dist/server/next.mjs +3761 -1794
- package/dist/server/page-converter.mjs +911 -261
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +3580 -1613
- package/dist/server/rendering.mjs +3578 -1614
- package/dist/server/routing.mjs +1687 -689
- package/dist/server/server.mjs +1458 -563
- package/dist/server/theme-bridge.mjs +1996 -935
- package/dist/server/theme.mjs +346 -133
- package/dist/styles/index.css +1602 -796
- package/package.json +2 -2
- package/dist/_dts/api/src/bookingVerticalCatalog.d.ts +0 -746
- package/dist/_dts/api/src/eventSeriesPresentationPreset.d.ts +0 -12
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/CourseRegistrationWizard.d.ts +0 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/StepIndicator.d.ts +0 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/components.d.ts +0 -45
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/pricing.d.ts +0 -14
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCoursePaymentVerification.d.ts +0 -9
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationActions.d.ts +0 -35
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationSelection.d.ts +0 -31
- package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +0 -102
- package/dist/client/checkoutUrls-Ct8Mxna3.mjs +0 -26
- package/dist/client/eventProductEligibility-AVxyCB1u.mjs +0 -50
- package/dist/client/pricing-BiqIMgZk.mjs +0 -174
- /package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/PortalAuthSidebar.d.ts +0 -0
- /package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/SuccessStep.d.ts +0 -0
- /package/dist/_dts/blocks/src/system/runtime/nodes/{course-registration → event-registration/whole-series}/WaitlistStep.d.ts +0 -0
package/dist/server/config.mjs
CHANGED
|
@@ -1377,6 +1377,17 @@ const PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
|
1377
1377
|
}
|
|
1378
1378
|
});
|
|
1379
1379
|
//#endregion
|
|
1380
|
+
//#region ../api/src/publicEventEndpointDefinitions.ts
|
|
1381
|
+
const PUBLIC_EVENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({ resolveEventSubroute: {
|
|
1382
|
+
path: "/public/sites/{siteId}/events/subroutes/resolve",
|
|
1383
|
+
method: "GET",
|
|
1384
|
+
revalidate: 60,
|
|
1385
|
+
tags: [TAG_TEMPLATES.publicEvents, "event-subroute"],
|
|
1386
|
+
auth: "public",
|
|
1387
|
+
responseKind: "json",
|
|
1388
|
+
errors: []
|
|
1389
|
+
} });
|
|
1390
|
+
//#endregion
|
|
1380
1391
|
//#region ../api/src/siteApiKeyEndpointDefinitions.ts
|
|
1381
1392
|
const SITE_API_KEY_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
1382
1393
|
listSiteApiKeys: {
|
|
@@ -1503,13 +1514,249 @@ const EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
|
1503
1514
|
"resource:conflict",
|
|
1504
1515
|
"server:internal_error"
|
|
1505
1516
|
]
|
|
1517
|
+
},
|
|
1518
|
+
updateEventIdentity: {
|
|
1519
|
+
path: "/sites/{siteId}/bookings/events/{eventId}",
|
|
1520
|
+
method: "PATCH",
|
|
1521
|
+
tags: ["site-{siteId}", "event-series-{siteId}"],
|
|
1522
|
+
auth: "user",
|
|
1523
|
+
responseKind: "json",
|
|
1524
|
+
errors: [
|
|
1525
|
+
"validation:invalid_input",
|
|
1526
|
+
"resource:not_found",
|
|
1527
|
+
"server:internal_error"
|
|
1528
|
+
]
|
|
1529
|
+
},
|
|
1530
|
+
createWholeSeriesRun: {
|
|
1531
|
+
path: "/sites/{siteId}/bookings/events/{eventId}/runs",
|
|
1532
|
+
method: "POST",
|
|
1533
|
+
tags: ["site-{siteId}", "event-series-{siteId}"],
|
|
1534
|
+
auth: "user",
|
|
1535
|
+
responseKind: "json",
|
|
1536
|
+
errors: [
|
|
1537
|
+
"validation:invalid_input",
|
|
1538
|
+
"resource:not_found",
|
|
1539
|
+
"resource:already_exists",
|
|
1540
|
+
"server:internal_error"
|
|
1541
|
+
]
|
|
1542
|
+
},
|
|
1543
|
+
updateWholeSeriesRun: {
|
|
1544
|
+
path: "/sites/{siteId}/bookings/events/{eventId}/runs/{runId}",
|
|
1545
|
+
method: "PATCH",
|
|
1546
|
+
tags: ["site-{siteId}", "event-series-{siteId}"],
|
|
1547
|
+
auth: "user",
|
|
1548
|
+
responseKind: "json",
|
|
1549
|
+
errors: [
|
|
1550
|
+
"validation:invalid_input",
|
|
1551
|
+
"resource:not_found",
|
|
1552
|
+
"resource:conflict",
|
|
1553
|
+
"server:internal_error"
|
|
1554
|
+
]
|
|
1555
|
+
},
|
|
1556
|
+
cancelWholeSeriesRun: {
|
|
1557
|
+
path: "/sites/{siteId}/bookings/events/{eventId}/runs/{runId}/cancellation",
|
|
1558
|
+
method: "POST",
|
|
1559
|
+
tags: ["site-{siteId}", "event-series-{siteId}"],
|
|
1560
|
+
auth: "user",
|
|
1561
|
+
responseKind: "json",
|
|
1562
|
+
errors: [
|
|
1563
|
+
"validation:invalid_input",
|
|
1564
|
+
"resource:not_found",
|
|
1565
|
+
"resource:conflict",
|
|
1566
|
+
"server:internal_error"
|
|
1567
|
+
]
|
|
1568
|
+
}
|
|
1569
|
+
});
|
|
1570
|
+
//#endregion
|
|
1571
|
+
//#region ../api/src/giftingEndpointDefinitions.ts
|
|
1572
|
+
/**
|
|
1573
|
+
* Gifting endpoints (gift cards & vouchers) — the dashboard surface that manages
|
|
1574
|
+
* offers, gifts and settings, plus the public buy/claim surface.
|
|
1575
|
+
*/
|
|
1576
|
+
const GIFTING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
1577
|
+
createGiftingOffer: {
|
|
1578
|
+
path: "/sites/{siteId}/gifting/offers",
|
|
1579
|
+
method: "POST",
|
|
1580
|
+
tags: ["site-{siteId}", "gifting-offers-{siteId}"],
|
|
1581
|
+
auth: "user",
|
|
1582
|
+
responseKind: "json",
|
|
1583
|
+
errors: [
|
|
1584
|
+
"validation:invalid_input",
|
|
1585
|
+
"auth:forbidden",
|
|
1586
|
+
"server:internal_error"
|
|
1587
|
+
]
|
|
1588
|
+
},
|
|
1589
|
+
updateGiftingOffer: {
|
|
1590
|
+
path: "/sites/{siteId}/gifting/offers/{offerId}",
|
|
1591
|
+
method: "PATCH",
|
|
1592
|
+
tags: ["site-{siteId}", "gifting-offers-{siteId}"],
|
|
1593
|
+
auth: "user",
|
|
1594
|
+
responseKind: "json",
|
|
1595
|
+
errors: [
|
|
1596
|
+
"validation:invalid_input",
|
|
1597
|
+
"auth:forbidden",
|
|
1598
|
+
"resource:not_found",
|
|
1599
|
+
"resource:conflict",
|
|
1600
|
+
"server:internal_error"
|
|
1601
|
+
]
|
|
1602
|
+
},
|
|
1603
|
+
deleteGiftingOffer: {
|
|
1604
|
+
path: "/sites/{siteId}/gifting/offers/{offerId}",
|
|
1605
|
+
method: "DELETE",
|
|
1606
|
+
tags: ["site-{siteId}", "gifting-offers-{siteId}"],
|
|
1607
|
+
auth: "user",
|
|
1608
|
+
responseKind: "json",
|
|
1609
|
+
errors: [
|
|
1610
|
+
"auth:forbidden",
|
|
1611
|
+
"resource:not_found",
|
|
1612
|
+
"resource:conflict",
|
|
1613
|
+
"server:internal_error"
|
|
1614
|
+
]
|
|
1615
|
+
},
|
|
1616
|
+
duplicateGiftingOffer: {
|
|
1617
|
+
path: "/sites/{siteId}/gifting/offers/{offerId}/duplicate",
|
|
1618
|
+
method: "POST",
|
|
1619
|
+
tags: ["site-{siteId}", "gifting-offers-{siteId}"],
|
|
1620
|
+
auth: "user",
|
|
1621
|
+
responseKind: "json",
|
|
1622
|
+
errors: [
|
|
1623
|
+
"auth:forbidden",
|
|
1624
|
+
"resource:not_found",
|
|
1625
|
+
"server:internal_error"
|
|
1626
|
+
]
|
|
1627
|
+
},
|
|
1628
|
+
reorderGiftingOffers: {
|
|
1629
|
+
path: "/sites/{siteId}/gifting/offers/order",
|
|
1630
|
+
method: "PUT",
|
|
1631
|
+
tags: ["site-{siteId}", "gifting-offers-{siteId}"],
|
|
1632
|
+
auth: "user",
|
|
1633
|
+
responseKind: "json",
|
|
1634
|
+
errors: [
|
|
1635
|
+
"validation:invalid_input",
|
|
1636
|
+
"auth:forbidden",
|
|
1637
|
+
"resource:not_found",
|
|
1638
|
+
"server:internal_error"
|
|
1639
|
+
]
|
|
1640
|
+
},
|
|
1641
|
+
sendGift: {
|
|
1642
|
+
path: "/sites/{siteId}/gifting/gifts",
|
|
1643
|
+
method: "POST",
|
|
1644
|
+
tags: ["site-{siteId}", "gifting-gifts-{siteId}"],
|
|
1645
|
+
auth: "user",
|
|
1646
|
+
demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
|
|
1647
|
+
responseKind: "json",
|
|
1648
|
+
errors: [
|
|
1649
|
+
"validation:invalid_input",
|
|
1650
|
+
"auth:forbidden",
|
|
1651
|
+
"resource:not_found",
|
|
1652
|
+
"server:internal_error"
|
|
1653
|
+
]
|
|
1654
|
+
},
|
|
1655
|
+
resendGift: {
|
|
1656
|
+
path: "/sites/{siteId}/gifting/gifts/{giftId}/resend",
|
|
1657
|
+
method: "POST",
|
|
1658
|
+
tags: ["site-{siteId}", "gifting-gifts-{siteId}"],
|
|
1659
|
+
auth: "user",
|
|
1660
|
+
demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
|
|
1661
|
+
responseKind: "json",
|
|
1662
|
+
errors: [
|
|
1663
|
+
"auth:forbidden",
|
|
1664
|
+
"resource:not_found",
|
|
1665
|
+
"resource:conflict",
|
|
1666
|
+
"server:internal_error"
|
|
1667
|
+
]
|
|
1668
|
+
},
|
|
1669
|
+
correctGiftEmailAndResend: {
|
|
1670
|
+
path: "/sites/{siteId}/gifting/gifts/{giftId}/correct-email-and-resend",
|
|
1671
|
+
method: "POST",
|
|
1672
|
+
tags: ["site-{siteId}", "gifting-gifts-{siteId}"],
|
|
1673
|
+
auth: "user",
|
|
1674
|
+
demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
|
|
1675
|
+
responseKind: "json",
|
|
1676
|
+
errors: [
|
|
1677
|
+
"validation:invalid_input",
|
|
1678
|
+
"auth:forbidden",
|
|
1679
|
+
"resource:not_found",
|
|
1680
|
+
"resource:conflict",
|
|
1681
|
+
"server:internal_error"
|
|
1682
|
+
]
|
|
1683
|
+
},
|
|
1684
|
+
updateGiftingSettings: {
|
|
1685
|
+
path: "/sites/{siteId}/gifting/settings",
|
|
1686
|
+
method: "PATCH",
|
|
1687
|
+
tags: [
|
|
1688
|
+
"site-{siteId}",
|
|
1689
|
+
"gifting-offers-{siteId}",
|
|
1690
|
+
"gifting-gifts-{siteId}"
|
|
1691
|
+
],
|
|
1692
|
+
auth: "user",
|
|
1693
|
+
responseKind: "json",
|
|
1694
|
+
errors: [
|
|
1695
|
+
"validation:invalid_input",
|
|
1696
|
+
"auth:forbidden",
|
|
1697
|
+
"server:internal_error"
|
|
1698
|
+
]
|
|
1699
|
+
},
|
|
1700
|
+
listPublicGiftingOffers: {
|
|
1701
|
+
path: "/public/sites/{siteId}/gifting/offers",
|
|
1702
|
+
method: "GET",
|
|
1703
|
+
revalidate: 300,
|
|
1704
|
+
tags: [TAG_TEMPLATES.publicGifting],
|
|
1705
|
+
errors: [],
|
|
1706
|
+
auth: "public",
|
|
1707
|
+
responseKind: "json"
|
|
1708
|
+
},
|
|
1709
|
+
createPublicGiftingCheckout: {
|
|
1710
|
+
path: "/public/sites/{siteId}/gifting/checkout",
|
|
1711
|
+
method: "POST",
|
|
1712
|
+
tags: [TAG_TEMPLATES.publicGifting],
|
|
1713
|
+
errors: [],
|
|
1714
|
+
auth: "public",
|
|
1715
|
+
responseKind: "json"
|
|
1716
|
+
},
|
|
1717
|
+
claimGiftCardPublic: {
|
|
1718
|
+
path: "/public/sites/{siteId}/gifting/claim",
|
|
1719
|
+
method: "POST",
|
|
1720
|
+
tags: [TAG_TEMPLATES.publicGifting],
|
|
1721
|
+
errors: [],
|
|
1722
|
+
auth: "public",
|
|
1723
|
+
responseKind: "json"
|
|
1506
1724
|
}
|
|
1507
1725
|
});
|
|
1508
|
-
|
|
1726
|
+
//#endregion
|
|
1727
|
+
//#region ../api/src/sdkEndpointDefinitions.ts
|
|
1728
|
+
/** SDK management endpoints that do not belong to a CRUD resource family. */
|
|
1729
|
+
const SDK_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
1730
|
+
sdkUpdateSettings: {
|
|
1731
|
+
path: "/sdk/{siteId}/settings",
|
|
1732
|
+
method: "PATCH",
|
|
1733
|
+
auth: "service",
|
|
1734
|
+
responseKind: "json",
|
|
1735
|
+
errors: ["validation:invalid_input", "server:internal_error"]
|
|
1736
|
+
},
|
|
1737
|
+
sdkConfigureBookingVertical: {
|
|
1738
|
+
path: "/sdk/{siteId}/settings/booking/vertical",
|
|
1739
|
+
method: "POST",
|
|
1740
|
+
auth: "service",
|
|
1741
|
+
responseKind: "json"
|
|
1742
|
+
},
|
|
1743
|
+
sdkSetupRevalidationWebhook: {
|
|
1744
|
+
path: "/sdk/{siteId}/webhooks/revalidation/setup",
|
|
1745
|
+
method: "POST",
|
|
1746
|
+
auth: "service",
|
|
1747
|
+
responseKind: "json",
|
|
1748
|
+
errors: ["validation:invalid_input", "server:internal_error"]
|
|
1749
|
+
}
|
|
1750
|
+
});
|
|
1751
|
+
({
|
|
1752
|
+
...ACCOUNT_ENDPOINT_DEFINITIONS,
|
|
1753
|
+
...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
|
|
1754
|
+
...GIFTING_ENDPOINT_DEFINITIONS
|
|
1755
|
+
}), TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, { ...SITE_API_KEY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteBookingSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings, {
|
|
1509
1756
|
...NEWSLETTER_ENDPOINT_DEFINITIONS,
|
|
1510
1757
|
...APPOINTMENT_ENDPOINT_DEFINITIONS,
|
|
1511
1758
|
...COURSE_ENDPOINT_DEFINITIONS
|
|
1512
|
-
}, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.
|
|
1759
|
+
}, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteById, TAG_TEMPLATES.siteBySlug, TAG_TEMPLATES.siteByDomain, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.workflowRunById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.routeById, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.site, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.navigationItemById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteNavigation, TAG_TEMPLATES.navigationMenuById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.siteTheme, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteCollection, TAG_TEMPLATES.pageSurfaceById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.pageById, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteRedirects, TAG_TEMPLATES.siteRouteOutcomes, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.formSubmissionsBySlug, TAG_TEMPLATES.formById, TAG_TEMPLATES.siteForms, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEventFilters, { ...PUBLIC_WHOLE_SERIES_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicTeamMembers, TAG_TEMPLATES.publicWholeSeriesOfferings, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicPasses, TAG_TEMPLATES.publicMemberships, TAG_TEMPLATES.publicProducts, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
|
|
1513
1760
|
z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
|
|
1514
1761
|
z.object({
|
|
1515
1762
|
accessToken: z.string().min(1).max(4096),
|
|
@@ -2011,6 +2258,298 @@ function parseManagementKey(raw) {
|
|
|
2011
2258
|
if (typeof raw !== "string" || !raw.startsWith("bld_mgmt_sk_") || raw.length === 12) return err({ kind: "invalid-management-key" });
|
|
2012
2259
|
return ok(createSecretInternal("management-key", raw));
|
|
2013
2260
|
}
|
|
2261
|
+
//#endregion
|
|
2262
|
+
//#region ../core/src/event-series-behaviour.ts
|
|
2263
|
+
const SURFACE_EVENT_PRESET_VALUES = [
|
|
2264
|
+
"class",
|
|
2265
|
+
"course",
|
|
2266
|
+
"term",
|
|
2267
|
+
"workshop",
|
|
2268
|
+
"retreat",
|
|
2269
|
+
"performance"
|
|
2270
|
+
];
|
|
2271
|
+
//#endregion
|
|
2272
|
+
//#region ../core/src/booking-vertical-preset.ts
|
|
2273
|
+
const BOOKING_ENGINE_BY_BEHAVIOUR = {
|
|
2274
|
+
class: "event_series",
|
|
2275
|
+
workshop: "event_series",
|
|
2276
|
+
course: "event_series",
|
|
2277
|
+
retreat: "event_series",
|
|
2278
|
+
performance: "event_series",
|
|
2279
|
+
appointment: "appointment_service"
|
|
2280
|
+
};
|
|
2281
|
+
function verticalBookingPreset(id, verticalId, canonicalBehaviour, label, pluralLabel, description, availability = "onboarding") {
|
|
2282
|
+
return {
|
|
2283
|
+
id,
|
|
2284
|
+
verticalId,
|
|
2285
|
+
canonicalBehaviour,
|
|
2286
|
+
engine: BOOKING_ENGINE_BY_BEHAVIOUR[canonicalBehaviour],
|
|
2287
|
+
availability,
|
|
2288
|
+
label,
|
|
2289
|
+
pluralLabel,
|
|
2290
|
+
description
|
|
2291
|
+
};
|
|
2292
|
+
}
|
|
2293
|
+
//#endregion
|
|
2294
|
+
//#region ../core/src/booking-vertical-definitions.ts
|
|
2295
|
+
const VERTICAL_DEFINITIONS = [
|
|
2296
|
+
{
|
|
2297
|
+
id: "yoga_wellness",
|
|
2298
|
+
label: "Yoga, meditation or mindfulness",
|
|
2299
|
+
description: "Yoga studios, wellness teachers, and movement practitioners."
|
|
2300
|
+
},
|
|
2301
|
+
{
|
|
2302
|
+
id: "fitness_pt",
|
|
2303
|
+
label: "Fitness and personal training",
|
|
2304
|
+
description: "Personal trainers, group training, and fitness programmes."
|
|
2305
|
+
},
|
|
2306
|
+
{
|
|
2307
|
+
id: "dance_school",
|
|
2308
|
+
label: "Dance school",
|
|
2309
|
+
description: "Dance classes, courses or terms, workshops, private lessons, and shows."
|
|
2310
|
+
},
|
|
2311
|
+
{
|
|
2312
|
+
id: "physiotherapy_physical_health",
|
|
2313
|
+
label: "Physiotherapy & physical health",
|
|
2314
|
+
description: "Physiotherapists, chiropractors, osteopaths, sports therapists, and rehabilitation practitioners."
|
|
2315
|
+
},
|
|
2316
|
+
{
|
|
2317
|
+
id: "massage_bodywork",
|
|
2318
|
+
label: "Massage & bodywork",
|
|
2319
|
+
description: "Massage therapists, bodyworkers, and somatic practitioners."
|
|
2320
|
+
},
|
|
2321
|
+
{
|
|
2322
|
+
id: "therapist_practitioner",
|
|
2323
|
+
label: "Therapist or practitioner",
|
|
2324
|
+
description: "Appointments, sessions, consultations, and occasional group work."
|
|
2325
|
+
},
|
|
2326
|
+
{
|
|
2327
|
+
id: "beauty_spa",
|
|
2328
|
+
label: "Beauty or spa",
|
|
2329
|
+
description: "Treatment-led businesses with optional workshops."
|
|
2330
|
+
},
|
|
2331
|
+
{
|
|
2332
|
+
id: "consultant_coach",
|
|
2333
|
+
label: "Consultant or coach",
|
|
2334
|
+
description: "One-to-one calls, workshops, courses, and retreats."
|
|
2335
|
+
},
|
|
2336
|
+
{
|
|
2337
|
+
id: "training_provider",
|
|
2338
|
+
label: "Training provider",
|
|
2339
|
+
description: "Courses, workshops, classes, appointments, and residential training."
|
|
2340
|
+
},
|
|
2341
|
+
{
|
|
2342
|
+
id: "retreat_centre",
|
|
2343
|
+
label: "Retreat centre",
|
|
2344
|
+
description: "Residential retreats, workshops, classes, courses, and private sessions."
|
|
2345
|
+
},
|
|
2346
|
+
{
|
|
2347
|
+
id: "music_school",
|
|
2348
|
+
label: "Music teacher or school",
|
|
2349
|
+
description: "Lessons, classes, terms, workshops, and performances."
|
|
2350
|
+
},
|
|
2351
|
+
{
|
|
2352
|
+
id: "voice_singing",
|
|
2353
|
+
label: "Voice & Singing",
|
|
2354
|
+
description: "Singing lessons, choirs, voice circles, workshops, and performances."
|
|
2355
|
+
},
|
|
2356
|
+
{
|
|
2357
|
+
id: "performing_arts_school",
|
|
2358
|
+
label: "Theatre or performing arts school",
|
|
2359
|
+
description: "Classes, terms, workshops, performances, and lessons."
|
|
2360
|
+
},
|
|
2361
|
+
{
|
|
2362
|
+
id: "community_wellbeing",
|
|
2363
|
+
label: "Community or wellbeing centre",
|
|
2364
|
+
description: "Groups, workshops, courses, appointments, and retreats."
|
|
2365
|
+
},
|
|
2366
|
+
{
|
|
2367
|
+
id: "venue_event_space",
|
|
2368
|
+
label: "Venue or event space",
|
|
2369
|
+
description: "Room, resource, or access bookings. Depends on the future capacity-booking domain."
|
|
2370
|
+
}
|
|
2371
|
+
];
|
|
2372
|
+
VERTICAL_DEFINITIONS.map(({ id }) => id);
|
|
2373
|
+
//#endregion
|
|
2374
|
+
//#region ../core/src/booking-vertical-catalog.ts
|
|
2375
|
+
const VERTICAL_BOOKING_PRESETS = [
|
|
2376
|
+
verticalBookingPreset("yoga_wellness.classes", "yoga_wellness", "class", "Class", "Classes", "Regular scheduled classes and group sessions."),
|
|
2377
|
+
verticalBookingPreset("yoga_wellness.workshops", "yoga_wellness", "workshop", "Workshop", "Workshops", "One-off workshops, day retreats, or special sessions."),
|
|
2378
|
+
verticalBookingPreset("yoga_wellness.courses", "yoga_wellness", "course", "Course", "Courses", "Fixed-schedule courses or multi-session groups."),
|
|
2379
|
+
verticalBookingPreset("yoga_wellness.retreats", "yoga_wellness", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats and immersive experiences."),
|
|
2380
|
+
verticalBookingPreset("yoga_wellness.appointments", "yoga_wellness", "appointment", "Appointment", "Appointments", "Private sessions, consultations, or one-to-one support."),
|
|
2381
|
+
verticalBookingPreset("fitness_pt.group_training", "fitness_pt", "class", "Group training", "Group training", "Regular scheduled classes and group sessions."),
|
|
2382
|
+
verticalBookingPreset("fitness_pt.personal_training", "fitness_pt", "appointment", "Personal training", "Personal training", "One-to-one sessions booked from your availability."),
|
|
2383
|
+
verticalBookingPreset("fitness_pt.programmes", "fitness_pt", "course", "Programme", "Programmes", "Multi-session programmes like bootcamps or courses."),
|
|
2384
|
+
verticalBookingPreset("fitness_pt.workshops", "fitness_pt", "workshop", "Workshop", "Workshops", "One-off workshops, events, or special sessions."),
|
|
2385
|
+
verticalBookingPreset("fitness_pt.retreats", "fitness_pt", "retreat", "Retreat", "Retreats", "Multi-day or residential fitness experiences."),
|
|
2386
|
+
verticalBookingPreset("dance_school.classes", "dance_school", "class", "Class", "Classes", "Regular group classes and weekly sessions."),
|
|
2387
|
+
{
|
|
2388
|
+
...verticalBookingPreset("dance_school.terms", "dance_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
|
|
2389
|
+
eventPresetOverride: "term"
|
|
2390
|
+
},
|
|
2391
|
+
verticalBookingPreset("dance_school.courses", "dance_school", "course", "Course", "Courses", "Fixed-schedule courses or multi-session groups.", "settings"),
|
|
2392
|
+
verticalBookingPreset("dance_school.workshops", "dance_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
2393
|
+
verticalBookingPreset("dance_school.private_lessons", "dance_school", "appointment", "Private lesson", "Private lessons", "One-to-one lessons or coaching sessions."),
|
|
2394
|
+
verticalBookingPreset("dance_school.shows", "dance_school", "performance", "Show", "Shows", "Ticketed performances, showcases, and recitals."),
|
|
2395
|
+
verticalBookingPreset("physiotherapy_physical_health.appointments", "physiotherapy_physical_health", "appointment", "Appointment", "Appointments", "Assessments, treatments, follow-ups, and rehabilitation sessions."),
|
|
2396
|
+
verticalBookingPreset("physiotherapy_physical_health.rehab_classes", "physiotherapy_physical_health", "class", "Rehab class", "Rehab classes", "Regular rehabilitation, mobility, strength, or recovery classes."),
|
|
2397
|
+
verticalBookingPreset("physiotherapy_physical_health.workshops", "physiotherapy_physical_health", "workshop", "Workshop", "Workshops", "One-off workshops, talks, or practical group sessions."),
|
|
2398
|
+
verticalBookingPreset("massage_bodywork.treatments", "massage_bodywork", "appointment", "Treatment", "Treatments", "Massage treatments, bodywork sessions, and one-to-one appointments."),
|
|
2399
|
+
verticalBookingPreset("massage_bodywork.group_sessions", "massage_bodywork", "class", "Group session", "Group sessions", "Regular bodywork, somatic movement, or self-massage sessions."),
|
|
2400
|
+
verticalBookingPreset("massage_bodywork.workshops", "massage_bodywork", "workshop", "Workshop", "Workshops", "One-off bodywork, self-massage, or somatic practice workshops."),
|
|
2401
|
+
verticalBookingPreset("therapist_practitioner.appointments", "therapist_practitioner", "appointment", "Appointment", "Appointments", "Sessions, consultations, treatments, or assessments."),
|
|
2402
|
+
verticalBookingPreset("therapist_practitioner.workshops", "therapist_practitioner", "workshop", "Workshop", "Workshops", "One-off group workshops, talks, or wellbeing sessions."),
|
|
2403
|
+
verticalBookingPreset("therapist_practitioner.retreats", "therapist_practitioner", "retreat", "Retreat", "Retreats", "Multi-day retreats or immersive group experiences."),
|
|
2404
|
+
verticalBookingPreset("beauty_spa.appointments", "beauty_spa", "appointment", "Appointment", "Appointments", "Treatments, consultations, services, and sessions."),
|
|
2405
|
+
verticalBookingPreset("beauty_spa.workshops", "beauty_spa", "workshop", "Workshop", "Workshops", "Skincare workshops, makeup lessons, demos, or group events."),
|
|
2406
|
+
verticalBookingPreset("consultant_coach.appointments", "consultant_coach", "appointment", "Appointment", "Appointments", "One-to-one calls, consultations, reviews, or coaching sessions."),
|
|
2407
|
+
verticalBookingPreset("consultant_coach.workshops", "consultant_coach", "workshop", "Workshop", "Workshops", "One-off group sessions, webinars, or strategy days."),
|
|
2408
|
+
verticalBookingPreset("consultant_coach.courses", "consultant_coach", "course", "Course", "Courses", "Fixed-schedule cohorts or multi-session group programmes."),
|
|
2409
|
+
verticalBookingPreset("consultant_coach.retreats", "consultant_coach", "retreat", "Retreat", "Retreats", "Multi-day coaching retreats or immersive experiences."),
|
|
2410
|
+
verticalBookingPreset("training_provider.courses", "training_provider", "course", "Course", "Courses", "Fixed-schedule courses, cohorts, and multi-session training."),
|
|
2411
|
+
verticalBookingPreset("training_provider.workshops", "training_provider", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, and short training sessions."),
|
|
2412
|
+
verticalBookingPreset("training_provider.appointments", "training_provider", "appointment", "Appointment", "Appointments", "Consultations, assessments, mentoring, or office hours."),
|
|
2413
|
+
verticalBookingPreset("training_provider.classes", "training_provider", "class", "Class", "Classes", "Regular classes, sessions, or groups.", "settings"),
|
|
2414
|
+
verticalBookingPreset("training_provider.residentials", "training_provider", "retreat", "Residential", "Residentials", "Residential courses or multi-day training experiences.", "settings"),
|
|
2415
|
+
verticalBookingPreset("retreat_centre.retreats", "retreat_centre", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats with richer booking needs."),
|
|
2416
|
+
verticalBookingPreset("retreat_centre.workshops", "retreat_centre", "workshop", "Workshop", "Workshops", "One-day retreats, ceremonies, workshops, or special events."),
|
|
2417
|
+
verticalBookingPreset("retreat_centre.classes", "retreat_centre", "class", "Class", "Classes", "Regular sessions like guided meditations or group practices."),
|
|
2418
|
+
verticalBookingPreset("retreat_centre.courses", "retreat_centre", "course", "Course", "Courses", "Fixed-schedule programmes or multi-session experiences."),
|
|
2419
|
+
verticalBookingPreset("retreat_centre.appointments", "retreat_centre", "appointment", "Appointment", "Appointments", "Private sessions, therapies, consultations, or add-ons."),
|
|
2420
|
+
verticalBookingPreset("music_school.lessons", "music_school", "appointment", "Lesson", "Lessons", "One-to-one lessons, consultations, or coaching sessions."),
|
|
2421
|
+
verticalBookingPreset("music_school.classes", "music_school", "class", "Class", "Classes", "Regular group classes, ensembles, or recurring sessions."),
|
|
2422
|
+
{
|
|
2423
|
+
...verticalBookingPreset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
|
|
2424
|
+
eventPresetOverride: "term"
|
|
2425
|
+
},
|
|
2426
|
+
verticalBookingPreset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
2427
|
+
verticalBookingPreset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
|
|
2428
|
+
verticalBookingPreset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
|
|
2429
|
+
verticalBookingPreset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
|
|
2430
|
+
{
|
|
2431
|
+
...verticalBookingPreset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
|
|
2432
|
+
eventPresetOverride: "term"
|
|
2433
|
+
},
|
|
2434
|
+
verticalBookingPreset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
|
|
2435
|
+
verticalBookingPreset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
|
|
2436
|
+
verticalBookingPreset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
|
|
2437
|
+
{
|
|
2438
|
+
...verticalBookingPreset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
|
|
2439
|
+
eventPresetOverride: "term"
|
|
2440
|
+
},
|
|
2441
|
+
verticalBookingPreset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
2442
|
+
verticalBookingPreset("performing_arts_school.performances", "performing_arts_school", "performance", "Performance", "Performances", "Shows, showcases, productions, or ticketed performances."),
|
|
2443
|
+
verticalBookingPreset("performing_arts_school.lessons", "performing_arts_school", "appointment", "Lesson", "Lessons", "One-to-one lessons, coaching, or audition prep."),
|
|
2444
|
+
verticalBookingPreset("community_wellbeing.classes", "community_wellbeing", "class", "Class", "Classes", "Regular groups, sessions, practices, or weekly activities."),
|
|
2445
|
+
verticalBookingPreset("community_wellbeing.workshops", "community_wellbeing", "workshop", "Workshop", "Workshops", "One-off workshops, talks, events, or gatherings."),
|
|
2446
|
+
verticalBookingPreset("community_wellbeing.courses", "community_wellbeing", "course", "Course", "Courses", "Fixed-schedule courses, study groups, or multi-session programmes."),
|
|
2447
|
+
verticalBookingPreset("community_wellbeing.appointments", "community_wellbeing", "appointment", "Appointment", "Appointments", "One-to-one appointments, consultations, or support sessions."),
|
|
2448
|
+
verticalBookingPreset("community_wellbeing.retreats", "community_wellbeing", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats."),
|
|
2449
|
+
verticalBookingPreset("venue_event_space.resource_hire", "venue_event_space", "appointment", "Hire slot", "Hire slots", "Future room, venue, and resource hire bookings.", "future")
|
|
2450
|
+
];
|
|
2451
|
+
//#endregion
|
|
2452
|
+
//#region ../core/src/booking-vertical-config.ts
|
|
2453
|
+
const VERTICAL_ID_SET = new Set(VERTICAL_DEFINITIONS.map(({ id }) => id));
|
|
2454
|
+
const VERTICAL_PRESET_ID_SET = new Set(VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id));
|
|
2455
|
+
function parseVerticalId(value) {
|
|
2456
|
+
return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
|
|
2457
|
+
}
|
|
2458
|
+
function parseVerticalPresetId(value) {
|
|
2459
|
+
return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
|
|
2460
|
+
}
|
|
2461
|
+
function getVerticalPresetDefinition(presetId) {
|
|
2462
|
+
const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
|
|
2463
|
+
if (definition === void 0) throw new Error(`Unhandled vertical preset id: ${presetId}`);
|
|
2464
|
+
return definition;
|
|
2465
|
+
}
|
|
2466
|
+
function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
|
|
2467
|
+
return {
|
|
2468
|
+
verticalId,
|
|
2469
|
+
selectedPresetIds
|
|
2470
|
+
};
|
|
2471
|
+
}
|
|
2472
|
+
function toNonEmptyVerticalPresetIds(presetIds) {
|
|
2473
|
+
const firstPresetId = presetIds[0];
|
|
2474
|
+
return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
|
|
2475
|
+
}
|
|
2476
|
+
const DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
|
|
2477
|
+
verticalId: null,
|
|
2478
|
+
selectedPresetIds: []
|
|
2479
|
+
};
|
|
2480
|
+
function appendUniqueIssue(issues, issue) {
|
|
2481
|
+
return issues.some((existing) => existing.code === issue.code) ? issues : [...issues, issue];
|
|
2482
|
+
}
|
|
2483
|
+
function collectRawConfigIssues(rawConfig, config) {
|
|
2484
|
+
const rawPresetValue = rawConfig.selectedPresetIds;
|
|
2485
|
+
const rawPresetIds = Array.isArray(rawPresetValue) ? rawPresetValue : [];
|
|
2486
|
+
let issues = [];
|
|
2487
|
+
if (rawConfig.verticalId != null && config.verticalId === null) issues = appendUniqueIssue(issues, {
|
|
2488
|
+
code: "unknown_vertical",
|
|
2489
|
+
rawValue: rawConfig.verticalId
|
|
2490
|
+
});
|
|
2491
|
+
if (config.verticalId === null && config.selectedPresetIds.length > 0) issues = appendUniqueIssue(issues, { code: "missing_vertical" });
|
|
2492
|
+
if (rawPresetValue !== void 0 && !Array.isArray(rawPresetValue) || rawPresetIds.some((presetId) => parseVerticalPresetId(presetId) === null)) issues = appendUniqueIssue(issues, {
|
|
2493
|
+
code: "unknown_preset",
|
|
2494
|
+
rawValue: rawPresetValue
|
|
2495
|
+
});
|
|
2496
|
+
if (rawConfig.verticalId != null && config.selectedPresetIds.length === 0) issues = appendUniqueIssue(issues, { code: "empty_selected_presets" });
|
|
2497
|
+
return issues;
|
|
2498
|
+
}
|
|
2499
|
+
function collectPresetConfigIssues(config) {
|
|
2500
|
+
const seenPresetIds = /* @__PURE__ */ new Set();
|
|
2501
|
+
const seenBehaviours = /* @__PURE__ */ new Set();
|
|
2502
|
+
let issues = [];
|
|
2503
|
+
for (const presetId of config.selectedPresetIds) {
|
|
2504
|
+
const presetDefinition = getVerticalPresetDefinition(presetId);
|
|
2505
|
+
if (seenPresetIds.has(presetId)) issues = appendUniqueIssue(issues, { code: "duplicate_preset_id" });
|
|
2506
|
+
seenPresetIds.add(presetId);
|
|
2507
|
+
if (config.verticalId !== null && presetDefinition.verticalId !== config.verticalId) issues = appendUniqueIssue(issues, { code: "preset_vertical_mismatch" });
|
|
2508
|
+
if (presetDefinition.availability === "future") issues = appendUniqueIssue(issues, { code: "future_preset_selected" });
|
|
2509
|
+
if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) issues = appendUniqueIssue(issues, { code: "duplicate_canonical_behaviour" });
|
|
2510
|
+
seenBehaviours.add(presetDefinition.canonicalBehaviour);
|
|
2511
|
+
}
|
|
2512
|
+
return issues;
|
|
2513
|
+
}
|
|
2514
|
+
function getSiteVerticalConfigIssues(rawConfig, config) {
|
|
2515
|
+
let issues = collectRawConfigIssues(rawConfig, config);
|
|
2516
|
+
for (const issue of collectPresetConfigIssues(config)) issues = appendUniqueIssue(issues, issue);
|
|
2517
|
+
return issues;
|
|
2518
|
+
}
|
|
2519
|
+
function resolveSiteVerticalBookingConfig(rawConfig) {
|
|
2520
|
+
if (rawConfig == null) return {
|
|
2521
|
+
kind: "unconfigured",
|
|
2522
|
+
config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG
|
|
2523
|
+
};
|
|
2524
|
+
const verticalId = parseVerticalId(rawConfig.verticalId);
|
|
2525
|
+
const selectedPresetIds = (Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : []).map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
|
|
2526
|
+
const config = {
|
|
2527
|
+
verticalId,
|
|
2528
|
+
selectedPresetIds
|
|
2529
|
+
};
|
|
2530
|
+
if (rawConfig.verticalId == null && selectedPresetIds.length === 0) return {
|
|
2531
|
+
kind: "unconfigured",
|
|
2532
|
+
config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG
|
|
2533
|
+
};
|
|
2534
|
+
const issues = getSiteVerticalConfigIssues(rawConfig, config);
|
|
2535
|
+
if (issues.length > 0) return {
|
|
2536
|
+
kind: "invalid",
|
|
2537
|
+
config,
|
|
2538
|
+
issues
|
|
2539
|
+
};
|
|
2540
|
+
const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
|
|
2541
|
+
const configuredConfig = verticalId !== null && nonEmptyPresetIds !== null ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
|
|
2542
|
+
if (configuredConfig === null) return {
|
|
2543
|
+
kind: "invalid",
|
|
2544
|
+
config,
|
|
2545
|
+
issues: [{ code: "empty_selected_presets" }]
|
|
2546
|
+
};
|
|
2547
|
+
return {
|
|
2548
|
+
kind: "configured",
|
|
2549
|
+
config: configuredConfig,
|
|
2550
|
+
selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
|
|
2551
|
+
};
|
|
2552
|
+
}
|
|
2014
2553
|
z.object({
|
|
2015
2554
|
formulaVersion: z.literal("managed-domain-overage-v1"),
|
|
2016
2555
|
conversionRule: z.literal("usd-to-gbp-1-to-1-v1"),
|
|
@@ -2022,6 +2561,68 @@ z.object({
|
|
|
2022
2561
|
monthlyCurrency: z.literal("gbp")
|
|
2023
2562
|
});
|
|
2024
2563
|
//#endregion
|
|
2564
|
+
//#region ../blocks/src/system/types/link.ts
|
|
2565
|
+
const nullableString = z.union([z.string().min(1), z.null()]);
|
|
2566
|
+
const RESOLVED_INTERNAL_LINK_ENTITY_TYPES = [
|
|
2567
|
+
"page",
|
|
2568
|
+
"content",
|
|
2569
|
+
"pageSurface"
|
|
2570
|
+
];
|
|
2571
|
+
const resolvedInternalLinkKeys = [
|
|
2572
|
+
"entityId",
|
|
2573
|
+
"entityType",
|
|
2574
|
+
"href",
|
|
2575
|
+
"title",
|
|
2576
|
+
"typeLabel"
|
|
2577
|
+
];
|
|
2578
|
+
const internalRouteOnlyLinkSchema = z.object({
|
|
2579
|
+
kind: z.literal("internal"),
|
|
2580
|
+
routeId: z.string().min(1)
|
|
2581
|
+
}).passthrough().superRefine((value, ctx) => {
|
|
2582
|
+
if (!resolvedInternalLinkKeys.some((key) => value[key] != null)) return;
|
|
2583
|
+
ctx.addIssue({
|
|
2584
|
+
code: "custom",
|
|
2585
|
+
message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
|
|
2586
|
+
});
|
|
2587
|
+
});
|
|
2588
|
+
const internalResolvedLinkSchema = z.object({
|
|
2589
|
+
kind: z.literal("internal"),
|
|
2590
|
+
routeId: z.string().min(1),
|
|
2591
|
+
entityId: z.string().min(1),
|
|
2592
|
+
entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
|
|
2593
|
+
href: z.string().min(1),
|
|
2594
|
+
title: z.string().min(1),
|
|
2595
|
+
typeLabel: z.string().min(1),
|
|
2596
|
+
contentTypeKey: nullableString.optional(),
|
|
2597
|
+
contentTypeName: nullableString.optional(),
|
|
2598
|
+
updatedAt: nullableString.optional()
|
|
2599
|
+
}).passthrough();
|
|
2600
|
+
const internalLinkSchema = z.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
|
|
2601
|
+
const externalLinkSchema$1 = z.object({
|
|
2602
|
+
kind: z.literal("external"),
|
|
2603
|
+
href: z.string().min(1)
|
|
2604
|
+
}).passthrough();
|
|
2605
|
+
const customLinkSchema$1 = z.object({
|
|
2606
|
+
kind: z.literal("url"),
|
|
2607
|
+
href: z.string().min(1)
|
|
2608
|
+
}).passthrough();
|
|
2609
|
+
const pageLinkSchema$1 = z.object({
|
|
2610
|
+
kind: z.literal("page"),
|
|
2611
|
+
identifier: z.string().min(1)
|
|
2612
|
+
}).passthrough();
|
|
2613
|
+
const entryLinkSchema$1 = z.object({
|
|
2614
|
+
kind: z.literal("entry"),
|
|
2615
|
+
contentType: z.string().min(1),
|
|
2616
|
+
identifier: z.string().min(1)
|
|
2617
|
+
}).passthrough();
|
|
2618
|
+
z.union([
|
|
2619
|
+
internalLinkSchema,
|
|
2620
|
+
externalLinkSchema$1,
|
|
2621
|
+
customLinkSchema$1,
|
|
2622
|
+
pageLinkSchema$1,
|
|
2623
|
+
entryLinkSchema$1
|
|
2624
|
+
]);
|
|
2625
|
+
//#endregion
|
|
2025
2626
|
//#region ../api/src/navigation/contracts.ts
|
|
2026
2627
|
/**
|
|
2027
2628
|
* Canonical navigation/link Zod contracts.
|
|
@@ -2051,7 +2652,7 @@ const internalLinkPayloadSchema = z.object({
|
|
|
2051
2652
|
kind: z.literal("internal"),
|
|
2052
2653
|
routeId: z.string().uuid(),
|
|
2053
2654
|
entityId: z.string().uuid(),
|
|
2054
|
-
entityType: z.enum(
|
|
2655
|
+
entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
|
|
2055
2656
|
href: z.string().min(1),
|
|
2056
2657
|
title: z.string().min(1),
|
|
2057
2658
|
typeLabel: z.string().min(1),
|
|
@@ -3923,6 +4524,12 @@ const opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => pa
|
|
|
3923
4524
|
if (token === null) throw new Error("Invariant: opaque button token passed its schema");
|
|
3924
4525
|
return token;
|
|
3925
4526
|
});
|
|
4527
|
+
const contextualButtonHoverSchema = z.strictObject({
|
|
4528
|
+
kind: z.literal("shade-shift"),
|
|
4529
|
+
seedToken: opaqueButtonColourTokenSchema,
|
|
4530
|
+
fallbackDirection: z.enum(["lighter", "darker"]),
|
|
4531
|
+
preferredToken: opaqueButtonColourTokenSchema.optional()
|
|
4532
|
+
});
|
|
3926
4533
|
const buttonShadeAmountSchema = z.number().finite().min(0).max(900).multipleOf(100);
|
|
3927
4534
|
const buttonShadowIntensitySchema = z.enum([
|
|
3928
4535
|
"subtle",
|
|
@@ -4262,6 +4869,7 @@ const buttonVariantSchema = z.strictObject({
|
|
|
4262
4869
|
shadow: variantShadowSchema.optional(),
|
|
4263
4870
|
border: buttonBorderSchema.optional(),
|
|
4264
4871
|
hoverBackgroundToken: opaqueButtonColourTokenSchema.optional(),
|
|
4872
|
+
contextualHover: contextualButtonHoverSchema.optional(),
|
|
4265
4873
|
effects: variantEffectsSchema.optional(),
|
|
4266
4874
|
sizes: variantSizeOverridesSchema.optional(),
|
|
4267
4875
|
affordance: buttonVariantAffordanceSchema.optional()
|
|
@@ -4534,6 +5142,139 @@ function validateButtonTextContrast(input) {
|
|
|
4534
5142
|
};
|
|
4535
5143
|
}
|
|
4536
5144
|
//#endregion
|
|
5145
|
+
//#region ../theme-core/src/buttons/contextualHover.ts
|
|
5146
|
+
function resolveContextualHoverPreference(input) {
|
|
5147
|
+
const preferred = input.instruction.preferredToken;
|
|
5148
|
+
if (preferred && isSafeCandidate(preferred, input.palette, input.surface)) return {
|
|
5149
|
+
kind: "resolved",
|
|
5150
|
+
token: preferred,
|
|
5151
|
+
repair: null
|
|
5152
|
+
};
|
|
5153
|
+
const contextual = resolveContextualHover(input);
|
|
5154
|
+
return contextual.kind === "resolved" ? {
|
|
5155
|
+
kind: "resolved",
|
|
5156
|
+
token: contextual.token,
|
|
5157
|
+
repair: preferred ? {
|
|
5158
|
+
kind: "preferred-token-replaced",
|
|
5159
|
+
preferredToken: preferred,
|
|
5160
|
+
contextualToken: contextual.token
|
|
5161
|
+
} : null
|
|
5162
|
+
} : contextual;
|
|
5163
|
+
}
|
|
5164
|
+
/**
|
|
5165
|
+
* Resolves semantic shade movement from real palette steps. The persisted
|
|
5166
|
+
* instruction owns the colour family and deterministic unknown-surface
|
|
5167
|
+
* fallback; a proven surface may select the opposite direction when it gives
|
|
5168
|
+
* the button stronger separation while retaining the shared contrast contract.
|
|
5169
|
+
*/
|
|
5170
|
+
function resolveContextualHover(input) {
|
|
5171
|
+
const candidates = shadeCandidates(input.instruction.seedToken, input.palette);
|
|
5172
|
+
if (candidates.length === 0) return {
|
|
5173
|
+
kind: "unavailable",
|
|
5174
|
+
reason: "no-distinct-shade"
|
|
5175
|
+
};
|
|
5176
|
+
const textSafe = candidates.filter((candidate) => hasSafeTextContrast(candidate.token, input.palette));
|
|
5177
|
+
if (textSafe.length === 0) return {
|
|
5178
|
+
kind: "unavailable",
|
|
5179
|
+
reason: "no-text-safe-candidate"
|
|
5180
|
+
};
|
|
5181
|
+
if (!input.surface) {
|
|
5182
|
+
const selected = textSafe.find((candidate) => candidate.direction === input.instruction.fallbackDirection) ?? textSafe[0];
|
|
5183
|
+
return selected ? {
|
|
5184
|
+
kind: "resolved",
|
|
5185
|
+
token: selected.token,
|
|
5186
|
+
direction: selected.direction,
|
|
5187
|
+
evidence: "fallback-direction"
|
|
5188
|
+
} : {
|
|
5189
|
+
kind: "unavailable",
|
|
5190
|
+
reason: "no-text-safe-candidate"
|
|
5191
|
+
};
|
|
5192
|
+
}
|
|
5193
|
+
const selected = textSafe.map((candidate) => ({
|
|
5194
|
+
...candidate,
|
|
5195
|
+
surfaceContrast: contrastRatio(input.palette[candidate.token] ?? "", input.surface?.backgroundHex ?? "")
|
|
5196
|
+
})).filter((candidate) => candidate.surfaceContrast !== null && candidate.surfaceContrast >= BUTTON_CONTRAST_POLICY.nonTextMinimumRatio).sort((left, right) => {
|
|
5197
|
+
const distanceDifference = left.distance - right.distance;
|
|
5198
|
+
if (distanceDifference !== 0) return distanceDifference;
|
|
5199
|
+
const contrastDifference = (right.surfaceContrast ?? 0) - (left.surfaceContrast ?? 0);
|
|
5200
|
+
if (contrastDifference !== 0) return contrastDifference;
|
|
5201
|
+
if (left.direction === right.direction) return left.token.localeCompare(right.token);
|
|
5202
|
+
return left.direction === input.instruction.fallbackDirection ? -1 : 1;
|
|
5203
|
+
})[0];
|
|
5204
|
+
return selected ? {
|
|
5205
|
+
kind: "resolved",
|
|
5206
|
+
token: selected.token,
|
|
5207
|
+
direction: selected.direction,
|
|
5208
|
+
evidence: "known-surface"
|
|
5209
|
+
} : {
|
|
5210
|
+
kind: "unavailable",
|
|
5211
|
+
reason: "no-surface-safe-candidate"
|
|
5212
|
+
};
|
|
5213
|
+
}
|
|
5214
|
+
function shadeCandidates(seedToken, palette) {
|
|
5215
|
+
const match = String(seedToken).match(/^(.*?)(?:-(\d{2,3}))?$/);
|
|
5216
|
+
const family = match?.[1] ?? String(seedToken);
|
|
5217
|
+
const currentShade = match?.[2] ? Number(match[2]) : 500;
|
|
5218
|
+
const seedHex = palette[seedToken];
|
|
5219
|
+
const shades = Object.keys(palette).flatMap((token) => {
|
|
5220
|
+
const shade = token.match(new RegExp(`^${escapeRegExp(family)}-(\\d{2,3})$`));
|
|
5221
|
+
return shade?.[1] ? [Number(shade[1])] : [];
|
|
5222
|
+
}).filter((shade) => Number.isFinite(shade)).sort((left, right) => left - right);
|
|
5223
|
+
const lower = [...shades].filter((shade) => shade < currentShade).sort((left, right) => right - left);
|
|
5224
|
+
const higher = shades.filter((shade) => shade > currentShade);
|
|
5225
|
+
return [...lower.map((shade) => candidate(family, shade, currentShade, "lighter", seedHex, palette)), ...higher.map((shade) => candidate(family, shade, currentShade, "darker", seedHex, palette))].filter((value) => value !== null);
|
|
5226
|
+
}
|
|
5227
|
+
function candidate(family, shade, currentShade, direction, seedHex, palette) {
|
|
5228
|
+
const token = parseOpaqueButtonColourToken(`${family}-${shade}`);
|
|
5229
|
+
if (token === null) return null;
|
|
5230
|
+
const candidateHex = palette[token];
|
|
5231
|
+
if (!candidateHex || candidateHex === seedHex) return null;
|
|
5232
|
+
return {
|
|
5233
|
+
token,
|
|
5234
|
+
direction,
|
|
5235
|
+
distance: Math.abs(shade - currentShade),
|
|
5236
|
+
surfaceContrast: null
|
|
5237
|
+
};
|
|
5238
|
+
}
|
|
5239
|
+
function hasSafeTextContrast(token, palette) {
|
|
5240
|
+
const background = palette[token];
|
|
5241
|
+
const foreground = palette[onColorTokenName(token)];
|
|
5242
|
+
return typeof background === "string" && typeof foreground === "string" && contrastRatio(background, foreground) >= BUTTON_CONTRAST_POLICY.textMinimumRatio;
|
|
5243
|
+
}
|
|
5244
|
+
function isSafeCandidate(token, palette, surface) {
|
|
5245
|
+
if (!hasSafeTextContrast(token, palette)) return false;
|
|
5246
|
+
return surface ? contrastRatio(palette[token] ?? "", surface.backgroundHex) >= BUTTON_CONTRAST_POLICY.nonTextMinimumRatio : true;
|
|
5247
|
+
}
|
|
5248
|
+
function escapeRegExp(value) {
|
|
5249
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
5250
|
+
}
|
|
5251
|
+
//#endregion
|
|
5252
|
+
//#region ../theme-core/src/buttons/resolveButtonHoverTreatment.ts
|
|
5253
|
+
function resolveButtonHoverTreatment(input) {
|
|
5254
|
+
if (input.variant.contextualHover) {
|
|
5255
|
+
const contextual = resolveContextualHoverPreference({
|
|
5256
|
+
instruction: input.variant.contextualHover,
|
|
5257
|
+
palette: input.palette,
|
|
5258
|
+
surface: input.surface
|
|
5259
|
+
});
|
|
5260
|
+
if (contextual.kind === "resolved") return {
|
|
5261
|
+
treatment: {
|
|
5262
|
+
type: "solid",
|
|
5263
|
+
colorToken: contextual.token
|
|
5264
|
+
},
|
|
5265
|
+
repair: contextual.repair
|
|
5266
|
+
};
|
|
5267
|
+
}
|
|
5268
|
+
const token = input.variant.hoverBackgroundToken ?? (input.global.hoverColor === "token" ? input.global.hoverColorToken : void 0);
|
|
5269
|
+
return {
|
|
5270
|
+
treatment: token === void 0 ? input.fallback : {
|
|
5271
|
+
type: "solid",
|
|
5272
|
+
colorToken: token
|
|
5273
|
+
},
|
|
5274
|
+
repair: null
|
|
5275
|
+
};
|
|
5276
|
+
}
|
|
5277
|
+
//#endregion
|
|
4537
5278
|
//#region ../theme-core/src/buttons/resolveButtonColourStates.ts
|
|
4538
5279
|
function compileButtonColourStates(input) {
|
|
4539
5280
|
const baseTransition = applyColourEffects({
|
|
@@ -4544,9 +5285,16 @@ function compileButtonColourStates(input) {
|
|
|
4544
5285
|
palette: input.palette
|
|
4545
5286
|
});
|
|
4546
5287
|
if (!baseTransition.ok) return baseTransition;
|
|
5288
|
+
const hover = resolveButtonHoverTreatment({
|
|
5289
|
+
variant: input.variant,
|
|
5290
|
+
global: input.global,
|
|
5291
|
+
fallback: baseTransition.treatment,
|
|
5292
|
+
palette: input.palette,
|
|
5293
|
+
surface: input.surface
|
|
5294
|
+
});
|
|
4547
5295
|
const stateTreatments = {
|
|
4548
5296
|
base: baseTransition.treatment,
|
|
4549
|
-
hover:
|
|
5297
|
+
hover: hover.treatment,
|
|
4550
5298
|
focus: baseTransition.treatment,
|
|
4551
5299
|
active: baseTransition.treatment,
|
|
4552
5300
|
disabled: baseTransition.treatment
|
|
@@ -4585,14 +5333,8 @@ function compileButtonColourStates(input) {
|
|
|
4585
5333
|
ok: true,
|
|
4586
5334
|
states: resolved,
|
|
4587
5335
|
focusIndicator: resolveFocusIndicator(resolved.focus),
|
|
4588
|
-
nonColourEffects
|
|
4589
|
-
|
|
4590
|
-
}
|
|
4591
|
-
function hoverTreatment(variant, global, fallback) {
|
|
4592
|
-
const token = variant.hoverBackgroundToken ?? (global.hoverColor === "token" ? global.hoverColorToken : void 0);
|
|
4593
|
-
return token === void 0 ? fallback : {
|
|
4594
|
-
type: "solid",
|
|
4595
|
-
colorToken: token
|
|
5336
|
+
nonColourEffects,
|
|
5337
|
+
contextualHoverRepair: hover.repair
|
|
4596
5338
|
};
|
|
4597
5339
|
}
|
|
4598
5340
|
function applyColourEffects(input) {
|
|
@@ -5403,13 +6145,24 @@ function resolveContextualButtonRole(input) {
|
|
|
5403
6145
|
};
|
|
5404
6146
|
const rejected = [];
|
|
5405
6147
|
const preferred = compileCandidate(requested, input.buttonSystem, input.palette, input.surface);
|
|
5406
|
-
if (preferred.ok)
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
5412
|
-
|
|
6148
|
+
if (preferred.ok) {
|
|
6149
|
+
if (preferred.contextualHoverRepair) return {
|
|
6150
|
+
kind: "repaired",
|
|
6151
|
+
requestedRole: input.role,
|
|
6152
|
+
candidate: "contextual-hover",
|
|
6153
|
+
states: preferred.states,
|
|
6154
|
+
focusIndicator: preferred.focusIndicator,
|
|
6155
|
+
boundary: boundaryForVariant(requested),
|
|
6156
|
+
rejectedCandidates: []
|
|
6157
|
+
};
|
|
6158
|
+
return {
|
|
6159
|
+
kind: "preferred",
|
|
6160
|
+
requestedRole: input.role,
|
|
6161
|
+
states: preferred.states,
|
|
6162
|
+
focusIndicator: preferred.focusIndicator,
|
|
6163
|
+
boundary: boundaryForVariant(requested)
|
|
6164
|
+
};
|
|
6165
|
+
}
|
|
5413
6166
|
rejected.push({
|
|
5414
6167
|
candidate: "preferred",
|
|
5415
6168
|
error: preferred.error
|
|
@@ -5529,6 +6282,7 @@ function candidateVariant(fallback, requested, system) {
|
|
|
5529
6282
|
},
|
|
5530
6283
|
border: { widthClass: "border" },
|
|
5531
6284
|
hoverBackgroundToken: void 0,
|
|
6285
|
+
contextualHover: void 0,
|
|
5532
6286
|
effects: void 0
|
|
5533
6287
|
},
|
|
5534
6288
|
boundary: {
|
|
@@ -5640,13 +6394,7 @@ function readNonEmptyString(value) {
|
|
|
5640
6394
|
buttonSizeNameSchema.options;
|
|
5641
6395
|
//#endregion
|
|
5642
6396
|
//#region ../theme-core/src/buttons/styles/domain.ts
|
|
5643
|
-
const PUBLIC_BUTTON_ROLES =
|
|
5644
|
-
"primary",
|
|
5645
|
-
"secondary",
|
|
5646
|
-
"outline",
|
|
5647
|
-
"ghost",
|
|
5648
|
-
"accent"
|
|
5649
|
-
];
|
|
6397
|
+
const PUBLIC_BUTTON_ROLES = VARIANT_ROLES;
|
|
5650
6398
|
function defineButtonStyleRecipe(recipe) {
|
|
5651
6399
|
return recipe;
|
|
5652
6400
|
}
|
|
@@ -5742,6 +6490,14 @@ const BUTTON_STYLE_IDS = [
|
|
|
5742
6490
|
"quiet-arrow"
|
|
5743
6491
|
];
|
|
5744
6492
|
const quietArrowParametersSchema = z.object({ secondaryTreatment: z.enum(["outlined", "solid-accent"]) }).strict();
|
|
6493
|
+
const flatInkHoverTreatmentSchema = z.enum([
|
|
6494
|
+
"contextual",
|
|
6495
|
+
"secondary",
|
|
6496
|
+
"accent"
|
|
6497
|
+
]);
|
|
6498
|
+
const flatInkHoverPreferencesShape = Object.fromEntries(VARIANT_ROLES.map((role) => [role, flatInkHoverTreatmentSchema.optional()]));
|
|
6499
|
+
const flatInkHoverPreferencesSchema = z.strictObject(flatInkHoverPreferencesShape);
|
|
6500
|
+
const flatInkParametersSchema = z.strictObject({ hoverPreferences: flatInkHoverPreferencesSchema.optional() });
|
|
5745
6501
|
const emptyParametersSchema$1 = z.object({}).strict();
|
|
5746
6502
|
function selectionBranch(styleId, parameters) {
|
|
5747
6503
|
return z.object({
|
|
@@ -5756,7 +6512,7 @@ const buttonStyleSelectionSchema = z.discriminatedUnion("styleId", [
|
|
|
5756
6512
|
selectionBranch("editorial-link", emptyParametersSchema$1),
|
|
5757
6513
|
selectionBranch("pebble", emptyParametersSchema$1),
|
|
5758
6514
|
selectionBranch("ink-stamp", emptyParametersSchema$1),
|
|
5759
|
-
selectionBranch("flat-ink",
|
|
6515
|
+
selectionBranch("flat-ink", flatInkParametersSchema),
|
|
5760
6516
|
selectionBranch("brushed-wash", emptyParametersSchema$1),
|
|
5761
6517
|
selectionBranch("showtime-pill", emptyParametersSchema$1),
|
|
5762
6518
|
selectionBranch("joy-stamp", emptyParametersSchema$1),
|
|
@@ -5893,6 +6649,189 @@ const quietArrowRecipe = defineButtonStyleRecipe({
|
|
|
5893
6649
|
})
|
|
5894
6650
|
});
|
|
5895
6651
|
//#endregion
|
|
6652
|
+
//#region ../theme-core/src/buttons/styles/recipes/flatInk.ts
|
|
6653
|
+
const contextualRoleConfig = {
|
|
6654
|
+
primary: {
|
|
6655
|
+
contextualSeedToken: unsafeAsOpaqueButtonColourToken("primary"),
|
|
6656
|
+
fallbackDirection: "darker"
|
|
6657
|
+
},
|
|
6658
|
+
secondary: {
|
|
6659
|
+
contextualSeedToken: unsafeAsOpaqueButtonColourToken("surfaceAlt"),
|
|
6660
|
+
fallbackDirection: "darker"
|
|
6661
|
+
},
|
|
6662
|
+
outline: {
|
|
6663
|
+
contextualSeedToken: unsafeAsOpaqueButtonColourToken("surfaceAlt"),
|
|
6664
|
+
fallbackDirection: "darker"
|
|
6665
|
+
},
|
|
6666
|
+
ghost: {
|
|
6667
|
+
contextualSeedToken: unsafeAsOpaqueButtonColourToken("surfaceAlt"),
|
|
6668
|
+
fallbackDirection: "darker"
|
|
6669
|
+
},
|
|
6670
|
+
accent: {
|
|
6671
|
+
contextualSeedToken: unsafeAsOpaqueButtonColourToken("accent"),
|
|
6672
|
+
fallbackDirection: "darker"
|
|
6673
|
+
}
|
|
6674
|
+
};
|
|
6675
|
+
const hoverControl = {
|
|
6676
|
+
kind: "button-hover-by-role",
|
|
6677
|
+
parameter: "hoverPreferences",
|
|
6678
|
+
label: "Button hover",
|
|
6679
|
+
roles: contextualRoleConfig,
|
|
6680
|
+
options: [
|
|
6681
|
+
{
|
|
6682
|
+
value: "contextual",
|
|
6683
|
+
label: "Contextual shade shift"
|
|
6684
|
+
},
|
|
6685
|
+
{
|
|
6686
|
+
value: "secondary",
|
|
6687
|
+
label: "Secondary button colour"
|
|
6688
|
+
},
|
|
6689
|
+
{
|
|
6690
|
+
value: "accent",
|
|
6691
|
+
label: "Accent button colour"
|
|
6692
|
+
}
|
|
6693
|
+
]
|
|
6694
|
+
};
|
|
6695
|
+
const lift = { effectId: "lift" };
|
|
6696
|
+
const flatInkRecipe = defineButtonStyleRecipe({
|
|
6697
|
+
id: "flat-ink",
|
|
6698
|
+
accessibilityLabel: "Flat rounded buttons with arrow affordances",
|
|
6699
|
+
tags: {
|
|
6700
|
+
tone: "classic",
|
|
6701
|
+
energy: "calm",
|
|
6702
|
+
motion: "subtle",
|
|
6703
|
+
era: "editorial"
|
|
6704
|
+
},
|
|
6705
|
+
parameterSchema: flatInkParametersSchema,
|
|
6706
|
+
defaultParameters: {},
|
|
6707
|
+
controls: [hoverControl],
|
|
6708
|
+
defineSystem: (parameters) => ({
|
|
6709
|
+
global: {
|
|
6710
|
+
cornerStyle: "rounded",
|
|
6711
|
+
textTransform: "none",
|
|
6712
|
+
fontWeight: 600,
|
|
6713
|
+
typography: "body",
|
|
6714
|
+
letterSpacing: "tight",
|
|
6715
|
+
paddingPreset: "default",
|
|
6716
|
+
hoverTransform: "lift",
|
|
6717
|
+
hoverColor: "none"
|
|
6718
|
+
},
|
|
6719
|
+
sizes: {
|
|
6720
|
+
sm: {
|
|
6721
|
+
padding: "0.625rem 1.125rem",
|
|
6722
|
+
fontSize: "text-sm"
|
|
6723
|
+
},
|
|
6724
|
+
md: { padding: "0.8125rem 1.375rem" },
|
|
6725
|
+
lg: {
|
|
6726
|
+
padding: "0.9375rem 1.625rem",
|
|
6727
|
+
fontSize: "text-lg"
|
|
6728
|
+
},
|
|
6729
|
+
xl: {
|
|
6730
|
+
padding: "1.0625rem 2rem",
|
|
6731
|
+
fontSize: "text-xl"
|
|
6732
|
+
}
|
|
6733
|
+
},
|
|
6734
|
+
roles: {
|
|
6735
|
+
primary: {
|
|
6736
|
+
kind: "complete",
|
|
6737
|
+
appearance: {
|
|
6738
|
+
background: {
|
|
6739
|
+
type: "solid",
|
|
6740
|
+
colorToken: unsafeAsOpaqueButtonColourToken("primary")
|
|
6741
|
+
},
|
|
6742
|
+
borderRadius: "rounded-lg",
|
|
6743
|
+
affordance: { iconId: "ArrowRight" },
|
|
6744
|
+
...hoverAppearance("primary", parameters, [lift, {
|
|
6745
|
+
effectId: "background-on-hover",
|
|
6746
|
+
options: { colorToken: unsafeAsOpaqueButtonColourToken("secondary") }
|
|
6747
|
+
}])
|
|
6748
|
+
}
|
|
6749
|
+
},
|
|
6750
|
+
secondary: {
|
|
6751
|
+
kind: "complete",
|
|
6752
|
+
appearance: {
|
|
6753
|
+
background: {
|
|
6754
|
+
type: "surface",
|
|
6755
|
+
role: "link"
|
|
6756
|
+
},
|
|
6757
|
+
borderRadius: "rounded-lg",
|
|
6758
|
+
border: { widthClass: "border" },
|
|
6759
|
+
...hoverAppearance("secondary", parameters, [lift, {
|
|
6760
|
+
effectId: "background-on-hover",
|
|
6761
|
+
options: { colorToken: unsafeAsOpaqueButtonColourToken("surfaceAlt") }
|
|
6762
|
+
}])
|
|
6763
|
+
}
|
|
6764
|
+
},
|
|
6765
|
+
outline: {
|
|
6766
|
+
kind: "complete",
|
|
6767
|
+
appearance: {
|
|
6768
|
+
background: {
|
|
6769
|
+
type: "surface",
|
|
6770
|
+
role: "link"
|
|
6771
|
+
},
|
|
6772
|
+
borderRadius: "rounded-lg",
|
|
6773
|
+
border: { widthClass: "border" },
|
|
6774
|
+
...hoverAppearance("outline", parameters, [lift, {
|
|
6775
|
+
effectId: "background-on-hover",
|
|
6776
|
+
options: { colorToken: unsafeAsOpaqueButtonColourToken("surfaceAlt") }
|
|
6777
|
+
}])
|
|
6778
|
+
}
|
|
6779
|
+
},
|
|
6780
|
+
ghost: {
|
|
6781
|
+
kind: "complete",
|
|
6782
|
+
appearance: {
|
|
6783
|
+
background: {
|
|
6784
|
+
type: "surface",
|
|
6785
|
+
role: "link"
|
|
6786
|
+
},
|
|
6787
|
+
borderRadius: "rounded-lg",
|
|
6788
|
+
...hoverAppearance("ghost", parameters, [lift])
|
|
6789
|
+
}
|
|
6790
|
+
},
|
|
6791
|
+
accent: {
|
|
6792
|
+
kind: "complete",
|
|
6793
|
+
appearance: {
|
|
6794
|
+
background: {
|
|
6795
|
+
type: "solid",
|
|
6796
|
+
colorToken: unsafeAsOpaqueButtonColourToken("accent")
|
|
6797
|
+
},
|
|
6798
|
+
borderRadius: "rounded-lg",
|
|
6799
|
+
affordance: { iconId: "ArrowRight" },
|
|
6800
|
+
...hoverAppearance("accent", parameters, [lift])
|
|
6801
|
+
}
|
|
6802
|
+
}
|
|
6803
|
+
}
|
|
6804
|
+
})
|
|
6805
|
+
});
|
|
6806
|
+
function hoverAppearance(role, parameters, recommended) {
|
|
6807
|
+
const preference = parameters.hoverPreferences?.[role];
|
|
6808
|
+
if (preference === void 0) return { effects: { hover: [...recommended] } };
|
|
6809
|
+
if (preference === "contextual") {
|
|
6810
|
+
const config = contextualRoleConfig[role];
|
|
6811
|
+
return {
|
|
6812
|
+
effects: { hover: [lift] },
|
|
6813
|
+
contextualHover: {
|
|
6814
|
+
kind: "shade-shift",
|
|
6815
|
+
seedToken: config.contextualSeedToken,
|
|
6816
|
+
fallbackDirection: config.fallbackDirection
|
|
6817
|
+
}
|
|
6818
|
+
};
|
|
6819
|
+
}
|
|
6820
|
+
const config = contextualRoleConfig[role];
|
|
6821
|
+
return {
|
|
6822
|
+
effects: { hover: [lift] },
|
|
6823
|
+
contextualHover: {
|
|
6824
|
+
kind: "shade-shift",
|
|
6825
|
+
seedToken: config.contextualSeedToken,
|
|
6826
|
+
fallbackDirection: config.fallbackDirection,
|
|
6827
|
+
preferredToken: unsafeAsOpaqueButtonColourToken(paletteRole(preference))
|
|
6828
|
+
}
|
|
6829
|
+
};
|
|
6830
|
+
}
|
|
6831
|
+
function paletteRole(preference) {
|
|
6832
|
+
return preference;
|
|
6833
|
+
}
|
|
6834
|
+
//#endregion
|
|
5896
6835
|
//#region ../theme-core/src/buttons/styles/recipes/defineStaticButtonStyleRecipe.ts
|
|
5897
6836
|
const emptyParametersSchema = z.object({}).strict();
|
|
5898
6837
|
function defineStaticButtonStyleRecipe(input) {
|
|
@@ -6739,113 +7678,6 @@ const inkStampRecipe = defineStaticButtonStyleRecipe({
|
|
|
6739
7678
|
}
|
|
6740
7679
|
}
|
|
6741
7680
|
});
|
|
6742
|
-
const flatInkRecipe = defineStaticButtonStyleRecipe({
|
|
6743
|
-
id: "flat-ink",
|
|
6744
|
-
accessibilityLabel: "Flat rounded buttons with arrow affordances",
|
|
6745
|
-
tags: {
|
|
6746
|
-
tone: "classic",
|
|
6747
|
-
energy: "calm",
|
|
6748
|
-
motion: "subtle",
|
|
6749
|
-
era: "editorial"
|
|
6750
|
-
},
|
|
6751
|
-
system: {
|
|
6752
|
-
global: {
|
|
6753
|
-
cornerStyle: "rounded",
|
|
6754
|
-
textTransform: "none",
|
|
6755
|
-
fontWeight: 600,
|
|
6756
|
-
typography: "body",
|
|
6757
|
-
letterSpacing: "tight",
|
|
6758
|
-
paddingPreset: "default",
|
|
6759
|
-
hoverTransform: "lift",
|
|
6760
|
-
hoverColor: "none"
|
|
6761
|
-
},
|
|
6762
|
-
sizes: {
|
|
6763
|
-
sm: {
|
|
6764
|
-
padding: "0.625rem 1.125rem",
|
|
6765
|
-
fontSize: "text-sm"
|
|
6766
|
-
},
|
|
6767
|
-
md: { padding: "0.8125rem 1.375rem" },
|
|
6768
|
-
lg: {
|
|
6769
|
-
padding: "0.9375rem 1.625rem",
|
|
6770
|
-
fontSize: "text-lg"
|
|
6771
|
-
},
|
|
6772
|
-
xl: {
|
|
6773
|
-
padding: "1.0625rem 2rem",
|
|
6774
|
-
fontSize: "text-xl"
|
|
6775
|
-
}
|
|
6776
|
-
},
|
|
6777
|
-
roles: {
|
|
6778
|
-
primary: {
|
|
6779
|
-
kind: "complete",
|
|
6780
|
-
appearance: {
|
|
6781
|
-
background: {
|
|
6782
|
-
type: "solid",
|
|
6783
|
-
colorToken: "primary"
|
|
6784
|
-
},
|
|
6785
|
-
borderRadius: "rounded-lg",
|
|
6786
|
-
affordance: { iconId: "ArrowRight" },
|
|
6787
|
-
effects: { hover: [{ effectId: "lift" }, {
|
|
6788
|
-
effectId: "background-on-hover",
|
|
6789
|
-
options: { colorToken: unsafeAsOpaqueButtonColourToken("secondary") }
|
|
6790
|
-
}] }
|
|
6791
|
-
}
|
|
6792
|
-
},
|
|
6793
|
-
secondary: {
|
|
6794
|
-
kind: "complete",
|
|
6795
|
-
appearance: {
|
|
6796
|
-
background: {
|
|
6797
|
-
type: "surface",
|
|
6798
|
-
role: "link"
|
|
6799
|
-
},
|
|
6800
|
-
borderRadius: "rounded-lg",
|
|
6801
|
-
border: { widthClass: "border" },
|
|
6802
|
-
effects: { hover: [{ effectId: "lift" }, {
|
|
6803
|
-
effectId: "background-on-hover",
|
|
6804
|
-
options: { colorToken: unsafeAsOpaqueButtonColourToken("surfaceAlt") }
|
|
6805
|
-
}] }
|
|
6806
|
-
}
|
|
6807
|
-
},
|
|
6808
|
-
outline: {
|
|
6809
|
-
kind: "complete",
|
|
6810
|
-
appearance: {
|
|
6811
|
-
background: {
|
|
6812
|
-
type: "surface",
|
|
6813
|
-
role: "link"
|
|
6814
|
-
},
|
|
6815
|
-
borderRadius: "rounded-lg",
|
|
6816
|
-
border: { widthClass: "border" },
|
|
6817
|
-
effects: { hover: [{ effectId: "lift" }, {
|
|
6818
|
-
effectId: "background-on-hover",
|
|
6819
|
-
options: { colorToken: unsafeAsOpaqueButtonColourToken("surfaceAlt") }
|
|
6820
|
-
}] }
|
|
6821
|
-
}
|
|
6822
|
-
},
|
|
6823
|
-
ghost: {
|
|
6824
|
-
kind: "complete",
|
|
6825
|
-
appearance: {
|
|
6826
|
-
background: {
|
|
6827
|
-
type: "surface",
|
|
6828
|
-
role: "link"
|
|
6829
|
-
},
|
|
6830
|
-
borderRadius: "rounded-lg",
|
|
6831
|
-
effects: { hover: [{ effectId: "lift" }] }
|
|
6832
|
-
}
|
|
6833
|
-
},
|
|
6834
|
-
accent: {
|
|
6835
|
-
kind: "complete",
|
|
6836
|
-
appearance: {
|
|
6837
|
-
background: {
|
|
6838
|
-
type: "solid",
|
|
6839
|
-
colorToken: "accent"
|
|
6840
|
-
},
|
|
6841
|
-
borderRadius: "rounded-lg",
|
|
6842
|
-
affordance: { iconId: "ArrowRight" },
|
|
6843
|
-
effects: { hover: [{ effectId: "lift" }] }
|
|
6844
|
-
}
|
|
6845
|
-
}
|
|
6846
|
-
}
|
|
6847
|
-
}
|
|
6848
|
-
});
|
|
6849
7681
|
const showtimePillRecipe = defineStaticButtonStyleRecipe({
|
|
6850
7682
|
id: "showtime-pill",
|
|
6851
7683
|
accessibilityLabel: "Bold uppercase pill buttons with playful movement",
|
|
@@ -7267,8 +8099,8 @@ const openCardRoleValue = "open";
|
|
|
7267
8099
|
*/
|
|
7268
8100
|
const surfaceCardRoleValues = [...cardVariantRoleValues, openCardRoleValue];
|
|
7269
8101
|
/**
|
|
7270
|
-
* The closed
|
|
7271
|
-
*
|
|
8102
|
+
* The closed role vocabulary Looks and blocks use for surfaced and boxless
|
|
8103
|
+
* card choices.
|
|
7272
8104
|
*
|
|
7273
8105
|
* - `none` — no site-style card surface; the block's own composition and
|
|
7274
8106
|
* the author's own card fields govern the item. This is *not*
|
|
@@ -7280,11 +8112,6 @@ const surfaceCardRoleValues = [...cardVariantRoleValues, openCardRoleValue];
|
|
|
7280
8112
|
* - `alternative` — the statement card carrying the site's personality
|
|
7281
8113
|
*/
|
|
7282
8114
|
const cardRoleValues = [...surfaceCardRoleValues, boxlessCardVariantValue];
|
|
7283
|
-
const legacyCardVariantRoleAliases = {
|
|
7284
|
-
variant1: "alternative",
|
|
7285
|
-
variant2: "alternative",
|
|
7286
|
-
statement: "alternative"
|
|
7287
|
-
};
|
|
7288
8115
|
const cardSpacingSchema = z.enum([
|
|
7289
8116
|
"none",
|
|
7290
8117
|
"compact",
|
|
@@ -7314,33 +8141,21 @@ const gradientDirectionSchema = z.enum([
|
|
|
7314
8141
|
"to-br",
|
|
7315
8142
|
"to-bl"
|
|
7316
8143
|
]);
|
|
7317
|
-
|
|
8144
|
+
z.enum(cardVariantRoleValues);
|
|
7318
8145
|
const surfaceCardRoleSchema = z.enum(surfaceCardRoleValues);
|
|
7319
8146
|
const cardRoleSchema = z.enum(cardRoleValues);
|
|
7320
|
-
/**
|
|
7321
|
-
* Historical name for the role vocabulary as it reaches box styles. Widened to
|
|
7322
|
-
* the full `CardRole` set — old values keep parsing, `open` now parses too.
|
|
7323
|
-
*/
|
|
7324
|
-
const boxStylesCardVariantSchema = cardRoleSchema;
|
|
7325
8147
|
function isCardVariantRole(value) {
|
|
7326
8148
|
return typeof value === "string" && cardVariantRoleValues.includes(value);
|
|
7327
8149
|
}
|
|
7328
8150
|
function normalizeCardVariantRole(value) {
|
|
7329
|
-
|
|
7330
|
-
if (typeof value !== "string") return null;
|
|
7331
|
-
return legacyCardVariantRoleAliases[value] ?? null;
|
|
8151
|
+
return isCardVariantRole(value) ? value : null;
|
|
7332
8152
|
}
|
|
7333
|
-
/**
|
|
7334
|
-
* The one untrusted-input boundary for the role vocabulary. Legacy alias values
|
|
7335
|
-
* (`variant1`, `variant2`, `statement`) normalize here and nowhere else.
|
|
7336
|
-
*/
|
|
8153
|
+
/** The one untrusted-input boundary for the closed role vocabulary. */
|
|
7337
8154
|
function normalizeCardRole(value) {
|
|
7338
8155
|
if (value === "none") return boxlessCardVariantValue;
|
|
7339
8156
|
if (value === "open") return openCardRoleValue;
|
|
7340
8157
|
return normalizeCardVariantRole(value);
|
|
7341
8158
|
}
|
|
7342
|
-
/** Historical name for {@link normalizeCardRole}. */
|
|
7343
|
-
const normalizeBoxStylesCardVariant = normalizeCardRole;
|
|
7344
8159
|
const PRIORITY_ROLE_INFERENCE = {
|
|
7345
8160
|
1: "default",
|
|
7346
8161
|
2: "alternative"
|
|
@@ -8285,6 +9100,21 @@ const eventListTreatmentValues = [
|
|
|
8285
9100
|
"editorial-register",
|
|
8286
9101
|
"dense-index"
|
|
8287
9102
|
];
|
|
9103
|
+
const testimonialsCompositionTreatmentValues = [
|
|
9104
|
+
"open-editorial",
|
|
9105
|
+
"evergreen-lead",
|
|
9106
|
+
"room-and-response",
|
|
9107
|
+
"open-floor"
|
|
9108
|
+
];
|
|
9109
|
+
/**
|
|
9110
|
+
* How an offerings preview arranges its groups. Structure only — the group
|
|
9111
|
+
* card surface is the Look's `cardRole` and the site style's card system.
|
|
9112
|
+
*/
|
|
9113
|
+
const offeringsPreviewCompositionTreatmentValues = [
|
|
9114
|
+
"paired-feature-cards",
|
|
9115
|
+
"open-editorial-columns",
|
|
9116
|
+
"joined-programme-panel"
|
|
9117
|
+
];
|
|
8288
9118
|
const eyebrowTreatmentValues = [
|
|
8289
9119
|
"plain",
|
|
8290
9120
|
"accent",
|
|
@@ -8818,8 +9648,7 @@ const cardStylesOverrideSchema = z.object({
|
|
|
8818
9648
|
spacing: semanticSpacingSchema.nullable().optional(),
|
|
8819
9649
|
raised: z.boolean().nullable().optional(),
|
|
8820
9650
|
rounded: boxRoundedSchema.nullable().optional(),
|
|
8821
|
-
role: cardRoleSchema.nullable().optional()
|
|
8822
|
-
cardVariant: boxStylesCardVariantSchema.nullable().optional()
|
|
9651
|
+
role: cardRoleSchema.nullable().optional()
|
|
8823
9652
|
});
|
|
8824
9653
|
const blockStyleOverridesSchema = z.object({
|
|
8825
9654
|
sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
|
|
@@ -9708,7 +10537,12 @@ defineBlockAppearancePreset({
|
|
|
9708
10537
|
constraints: { layoutVariantKeys: ["cards"] },
|
|
9709
10538
|
design: {
|
|
9710
10539
|
sectionSurface: "base",
|
|
9711
|
-
contentFrame: plainFrame
|
|
10540
|
+
contentFrame: plainFrame,
|
|
10541
|
+
cardRole: "alternative",
|
|
10542
|
+
composition: {
|
|
10543
|
+
kind: "offerings-preview",
|
|
10544
|
+
treatment: "paired-feature-cards"
|
|
10545
|
+
}
|
|
9712
10546
|
}
|
|
9713
10547
|
}), defineBlockAppearancePreset({
|
|
9714
10548
|
id: "offerings-preview-open-editorial-columns",
|
|
@@ -9718,7 +10552,12 @@ defineBlockAppearancePreset({
|
|
|
9718
10552
|
constraints: { layoutVariantKeys: ["cards"] },
|
|
9719
10553
|
design: {
|
|
9720
10554
|
sectionSurface: "base",
|
|
9721
|
-
contentFrame: plainFrame
|
|
10555
|
+
contentFrame: plainFrame,
|
|
10556
|
+
cardRole: "open",
|
|
10557
|
+
composition: {
|
|
10558
|
+
kind: "offerings-preview",
|
|
10559
|
+
treatment: "open-editorial-columns"
|
|
10560
|
+
}
|
|
9722
10561
|
}
|
|
9723
10562
|
}), defineBlockAppearancePreset({
|
|
9724
10563
|
id: "offerings-preview-joined-programme-panel",
|
|
@@ -9728,7 +10567,12 @@ defineBlockAppearancePreset({
|
|
|
9728
10567
|
constraints: { layoutVariantKeys: ["cards"] },
|
|
9729
10568
|
design: {
|
|
9730
10569
|
sectionSurface: "base",
|
|
9731
|
-
contentFrame: plainFrame
|
|
10570
|
+
contentFrame: plainFrame,
|
|
10571
|
+
cardRole: "default",
|
|
10572
|
+
composition: {
|
|
10573
|
+
kind: "offerings-preview",
|
|
10574
|
+
treatment: "joined-programme-panel"
|
|
10575
|
+
}
|
|
9732
10576
|
}
|
|
9733
10577
|
}), defineBlockAppearancePreset({
|
|
9734
10578
|
id: "feature-cards-raised-rule",
|
|
@@ -9970,7 +10814,11 @@ defineBlockAppearancePreset({
|
|
|
9970
10814
|
constraints: { layoutVariantKeys: ["featured-editorial"] },
|
|
9971
10815
|
design: {
|
|
9972
10816
|
sectionSurface: "base",
|
|
9973
|
-
contentFrame: plainFrame
|
|
10817
|
+
contentFrame: plainFrame,
|
|
10818
|
+
composition: {
|
|
10819
|
+
kind: "testimonials",
|
|
10820
|
+
treatment: "evergreen-lead"
|
|
10821
|
+
}
|
|
9974
10822
|
}
|
|
9975
10823
|
}), defineBlockAppearancePreset({
|
|
9976
10824
|
id: "testimonials-room-and-response",
|
|
@@ -9980,7 +10828,11 @@ defineBlockAppearancePreset({
|
|
|
9980
10828
|
constraints: { layoutVariantKeys: ["featured-editorial"] },
|
|
9981
10829
|
design: {
|
|
9982
10830
|
sectionSurface: "base",
|
|
9983
|
-
contentFrame: plainFrame
|
|
10831
|
+
contentFrame: plainFrame,
|
|
10832
|
+
composition: {
|
|
10833
|
+
kind: "testimonials",
|
|
10834
|
+
treatment: "room-and-response"
|
|
10835
|
+
}
|
|
9984
10836
|
}
|
|
9985
10837
|
}), defineBlockAppearancePreset({
|
|
9986
10838
|
id: "testimonials-open-floor",
|
|
@@ -9990,7 +10842,11 @@ defineBlockAppearancePreset({
|
|
|
9990
10842
|
constraints: { layoutVariantKeys: ["featured-editorial"] },
|
|
9991
10843
|
design: {
|
|
9992
10844
|
sectionSurface: "base",
|
|
9993
|
-
contentFrame: plainFrame
|
|
10845
|
+
contentFrame: plainFrame,
|
|
10846
|
+
composition: {
|
|
10847
|
+
kind: "testimonials",
|
|
10848
|
+
treatment: "open-floor"
|
|
10849
|
+
}
|
|
9994
10850
|
}
|
|
9995
10851
|
}), defineBlockAppearancePreset({
|
|
9996
10852
|
id: "faq-base-accordion",
|
|
@@ -12915,7 +13771,8 @@ const curatedSiteStyles = [
|
|
|
12915
13771
|
buttonStyleChoices: [
|
|
12916
13772
|
buttonChoice("soft-pill"),
|
|
12917
13773
|
buttonChoice("pebble"),
|
|
12918
|
-
buttonChoice("confident-chip")
|
|
13774
|
+
buttonChoice("confident-chip"),
|
|
13775
|
+
buttonChoice("flat-ink")
|
|
12919
13776
|
],
|
|
12920
13777
|
paletteRecommendations: [
|
|
12921
13778
|
paletteRecommendation("soft-natural-sage"),
|
|
@@ -14430,7 +15287,6 @@ const ALLOWED_TRANSFORM_IDS = [
|
|
|
14430
15287
|
"boxStyles.resolveRootStyle",
|
|
14431
15288
|
"boxStyles.semanticGap",
|
|
14432
15289
|
"boxStyles.semanticGapValue",
|
|
14433
|
-
"boxStyles.cardVariantClass",
|
|
14434
15290
|
"containerStyles.resolveBoxClassName"
|
|
14435
15291
|
];
|
|
14436
15292
|
/**
|
|
@@ -15880,8 +16736,41 @@ function containerStylesField(options = {}) {
|
|
|
15880
16736
|
return createBoxStylesFieldWithDepth("container", options);
|
|
15881
16737
|
}
|
|
15882
16738
|
function cardStylesField(options = {}) {
|
|
16739
|
+
if (options.controls === "role-only") return createRoleOnlyCardStylesField(options);
|
|
15883
16740
|
return createBoxStylesFieldWithDepth("card", options);
|
|
15884
16741
|
}
|
|
16742
|
+
function createRoleOnlyCardStylesField(options) {
|
|
16743
|
+
const { id = "_cardStyles", label = "Card styles", renderInHeader, intent } = options;
|
|
16744
|
+
return {
|
|
16745
|
+
id,
|
|
16746
|
+
type: "modal",
|
|
16747
|
+
label,
|
|
16748
|
+
required: false,
|
|
16749
|
+
schema: { fields: [{
|
|
16750
|
+
id: "role",
|
|
16751
|
+
type: "select",
|
|
16752
|
+
label: "Card style",
|
|
16753
|
+
description: "Choose a semantic card style from the active site style.",
|
|
16754
|
+
required: false,
|
|
16755
|
+
multiple: false,
|
|
16756
|
+
defaultValue: "default",
|
|
16757
|
+
options: cardVariantRoleValues.map((value) => ({
|
|
16758
|
+
value,
|
|
16759
|
+
label: value === "default" ? "Default" : "Alternative"
|
|
16760
|
+
}))
|
|
16761
|
+
}] },
|
|
16762
|
+
ui: {
|
|
16763
|
+
...typeof renderInHeader === "boolean" ? { renderInHeader } : {},
|
|
16764
|
+
...intent ? { intent } : {},
|
|
16765
|
+
modalConfig: {
|
|
16766
|
+
buttonLabel: label,
|
|
16767
|
+
description: "Choose the site-style card role.",
|
|
16768
|
+
buttonVariant: "outline",
|
|
16769
|
+
showCustomizedIndicator: true
|
|
16770
|
+
}
|
|
16771
|
+
}
|
|
16772
|
+
};
|
|
16773
|
+
}
|
|
15885
16774
|
//#endregion
|
|
15886
16775
|
//#region ../blocks/src/system/fields/imageShape.ts
|
|
15887
16776
|
const standardImageShapeOptions = [
|
|
@@ -17068,21 +17957,29 @@ function cardRoleClass(role) {
|
|
|
17068
17957
|
return `card-role-${role}`;
|
|
17069
17958
|
}
|
|
17070
17959
|
/**
|
|
17960
|
+
* The role class for a card slot the *block* owns structurally, where a Look
|
|
17961
|
+
* may still name the surface.
|
|
17962
|
+
*
|
|
17963
|
+
* Some layouts have more than one card slot and decide themselves which one is
|
|
17964
|
+
* the statement — the featured-editorial testimonials field is a lead voice
|
|
17965
|
+
* beside its supporting voices, and that is structure, not composition. Those
|
|
17966
|
+
* slots still have to honour a Look that picks a surface, or a role-picking
|
|
17967
|
+
* Look would silently no-op under the layout. So the slot carries a default
|
|
17968
|
+
* role and the Look's compiled role wins over it when there is one.
|
|
17969
|
+
*
|
|
17970
|
+
* An explicit `none` is honoured as boxlessness and emits no class, matching
|
|
17971
|
+
* how the composite emitter reads it.
|
|
17972
|
+
*/
|
|
17973
|
+
/**
|
|
17071
17974
|
* The role a card renders with, and the one place a set of card styles becomes
|
|
17072
17975
|
* a role.
|
|
17073
17976
|
*
|
|
17074
|
-
* Precedence: a per-item override, then the `role` a Look
|
|
17075
|
-
* block's card styles
|
|
17076
|
-
*
|
|
17077
|
-
* vocabulary — an explicit `role` wins when a record carries both.
|
|
17078
|
-
*
|
|
17079
|
-
* Compiled and freshly authored card styles carry only `role`. `cardVariant`
|
|
17080
|
-
* survives on content persisted before the role contract, and normalizes here
|
|
17081
|
-
* rather than in `cardStylesOverrideSchema` because that content reaches the
|
|
17082
|
-
* renderer as a raw record without ever passing through the schema.
|
|
17977
|
+
* Precedence: a per-item override, then the `role` a Look or semantic field
|
|
17978
|
+
* compiled onto the block's card styles. Persisted inputs are normalized at
|
|
17979
|
+
* this boundary because raw block records do not pass through the theme schema.
|
|
17083
17980
|
*/
|
|
17084
17981
|
function resolveCardRoleForBoxStyles(input, override) {
|
|
17085
|
-
return override ?? normalizeCardRole(input.role)
|
|
17982
|
+
return override ?? normalizeCardRole(input.role);
|
|
17086
17983
|
}
|
|
17087
17984
|
/**
|
|
17088
17985
|
* Parse a block's own per-item surface vocabulary into a card role. The alias
|
|
@@ -17099,8 +17996,8 @@ function resolveItemCardRole(value, aliases) {
|
|
|
17099
17996
|
* The card surface for a set of box styles: one role, one class vocabulary, so
|
|
17100
17997
|
* a site-style swap re-skins the card whichever field named it.
|
|
17101
17998
|
*/
|
|
17102
|
-
function cardSurface(input, override) {
|
|
17103
|
-
const role = resolveCardRoleForBoxStyles(input, override);
|
|
17999
|
+
function cardSurface(input, override, fallback) {
|
|
18000
|
+
const role = resolveCardRoleForBoxStyles(input, override) ?? fallback ?? null;
|
|
17104
18001
|
if (!role) return {
|
|
17105
18002
|
role: null,
|
|
17106
18003
|
classes: []
|
|
@@ -17197,10 +18094,9 @@ function raisedClassFor(options) {
|
|
|
17197
18094
|
* of keeping a copy that drifts.
|
|
17198
18095
|
*/
|
|
17199
18096
|
function boxStyleClassNames(value, options) {
|
|
17200
|
-
|
|
17201
|
-
const input = value;
|
|
18097
|
+
const input = value && typeof value === "object" ? value : {};
|
|
17202
18098
|
const borderOverride = borderOverrideClass(input);
|
|
17203
|
-
const surface = cardSurface(input, options.cardRoleOverride);
|
|
18099
|
+
const surface = cardSurface(input, options.cardRoleOverride, options.cardRoleFallback);
|
|
17204
18100
|
const cardOwnsBorder = surface.role !== null && surface.role !== "none";
|
|
17205
18101
|
return [
|
|
17206
18102
|
borderOverride || cardOwnsBorder ? withoutBorderClasses(options.baseClass ?? "") : options.baseClass ?? "",
|
|
@@ -17348,29 +18244,41 @@ const cardRoleClassTransform = {
|
|
|
17348
18244
|
return baseClass ? `${baseClass.trim()} ${hook}` : hook;
|
|
17349
18245
|
}
|
|
17350
18246
|
};
|
|
17351
|
-
|
|
17352
|
-
|
|
18247
|
+
/**
|
|
18248
|
+
* The role class for a layout's own card slot, bound from the block's compiled
|
|
18249
|
+
* card styles so a Look that picks a surface still reaches a slot the layout
|
|
18250
|
+
* assigned a default role to.
|
|
18251
|
+
*/
|
|
18252
|
+
const cardSlotRoleTransform = {
|
|
18253
|
+
id: "boxStyles.cardSlotRole",
|
|
17353
18254
|
kind: "string",
|
|
17354
|
-
summary: "
|
|
17355
|
-
run: (value, options) => {
|
|
17356
|
-
|
|
17357
|
-
|
|
17358
|
-
|
|
17359
|
-
|
|
17360
|
-
return baseClass ? `${baseClass} ${roleClass}` : roleClass;
|
|
17361
|
-
}
|
|
18255
|
+
summary: "Resolve a layout card slot's role class, defaulting to the slot's own role",
|
|
18256
|
+
run: (value, options) => boxStyleClassNames(value, {
|
|
18257
|
+
baseClass: options?.baseClass,
|
|
18258
|
+
cardRoleFallback: options.slotDefault,
|
|
18259
|
+
includeSpacing: false
|
|
18260
|
+
})
|
|
17362
18261
|
};
|
|
18262
|
+
function resolveBorderColorState(value, options, viewModel) {
|
|
18263
|
+
const input = asPartialObject(options?.stylesPath ? readPath(viewModel, options.stylesPath) : value);
|
|
18264
|
+
if (!input) return null;
|
|
18265
|
+
return {
|
|
18266
|
+
input,
|
|
18267
|
+
role: resolveCardRoleForBoxStyles(input, options?.stylesPath ? resolveItemCardRole(value, options.itemRoleAliases) : void 0)
|
|
18268
|
+
};
|
|
18269
|
+
}
|
|
17363
18270
|
const boxStylesBorderColorTransform = {
|
|
17364
18271
|
id: "boxStyles.borderColor",
|
|
17365
18272
|
kind: "string",
|
|
17366
18273
|
summary: "Resolve border color from box styles border.colorToken",
|
|
17367
|
-
run: (value, options,
|
|
18274
|
+
run: (value, options, context) => {
|
|
17368
18275
|
const fallbackToken = options?.fallbackToken ?? "border";
|
|
17369
18276
|
const returnEmptyForDefault = options?.returnEmptyForDefault ?? false;
|
|
17370
18277
|
let explicitToken = null;
|
|
17371
|
-
const
|
|
17372
|
-
if (
|
|
17373
|
-
|
|
18278
|
+
const state = resolveBorderColorState(value, options, context.viewModel);
|
|
18279
|
+
if (state) {
|
|
18280
|
+
if (state.role && state.role !== "none") return "";
|
|
18281
|
+
const border = normalizeBoxStylesBorder(state.input.border);
|
|
17374
18282
|
if (border && border.enabled === true && border.colorToken) explicitToken = border.colorToken;
|
|
17375
18283
|
}
|
|
17376
18284
|
if (explicitToken) {
|
|
@@ -17590,7 +18498,7 @@ const boxStylesTransforms = [
|
|
|
17590
18498
|
roundedTransform,
|
|
17591
18499
|
boxStylesCompositeTransform,
|
|
17592
18500
|
cardRoleClassTransform,
|
|
17593
|
-
|
|
18501
|
+
cardSlotRoleTransform,
|
|
17594
18502
|
boxStylesBorderColorTransform,
|
|
17595
18503
|
sectionClassNameTransform,
|
|
17596
18504
|
containerStylesResolveClassName,
|
|
@@ -17697,10 +18605,16 @@ function styledCard(children, opts, ...mods) {
|
|
|
17697
18605
|
const style = {
|
|
17698
18606
|
...opts.style ?? {},
|
|
17699
18607
|
borderColor: { $bind: {
|
|
17700
|
-
from: opts.stylesFrom,
|
|
18608
|
+
from: opts.itemRole?.from ?? opts.stylesFrom,
|
|
17701
18609
|
transforms: [{
|
|
17702
18610
|
id: "boxStyles.borderColor",
|
|
17703
|
-
options: {
|
|
18611
|
+
options: {
|
|
18612
|
+
returnEmptyForDefault: true,
|
|
18613
|
+
...opts.itemRole ? {
|
|
18614
|
+
stylesPath: opts.stylesFrom,
|
|
18615
|
+
...opts.itemRole.aliases ? { itemRoleAliases: opts.itemRole.aliases } : {}
|
|
18616
|
+
} : {}
|
|
18617
|
+
}
|
|
17704
18618
|
}]
|
|
17705
18619
|
} }
|
|
17706
18620
|
};
|
|
@@ -18825,18 +19739,73 @@ function buildGridCardsLayout(className) {
|
|
|
18825
19739
|
return el("div", { className }, buildResponsiveGridCards());
|
|
18826
19740
|
}
|
|
18827
19741
|
/**
|
|
19742
|
+
* The card slots the featured-editorial layout has, and the role each one
|
|
19743
|
+
* defaults to.
|
|
19744
|
+
*
|
|
19745
|
+
* Which slot is the statement is *structure*, so the layout decides it: this
|
|
19746
|
+
* variant exists to put one lead voice beside its supporting voices. But a Look
|
|
19747
|
+
* that picks a surface has to keep meaning something here, so the lead slot's
|
|
19748
|
+
* role is a default the Look's compiled `cardRole` wins over — see
|
|
19749
|
+
* `cardSlotRoleClass`. Supporting voices stay the quiet everyday card.
|
|
19750
|
+
*/
|
|
19751
|
+
const FEATURED_EDITORIAL_SLOTS = {
|
|
19752
|
+
lead: {
|
|
19753
|
+
/** Composition CSS addresses the lead card's geometry through this. */
|
|
19754
|
+
variantClass: "rb-testimonials-fe-card--feature",
|
|
19755
|
+
slotDefault: "alternative",
|
|
19756
|
+
followsLook: true
|
|
19757
|
+
},
|
|
19758
|
+
support: {
|
|
19759
|
+
variantClass: null,
|
|
19760
|
+
slotDefault: "default",
|
|
19761
|
+
followsLook: false
|
|
19762
|
+
}
|
|
19763
|
+
};
|
|
19764
|
+
/** Where the testimonials block's compiled card styles live. */
|
|
19765
|
+
const TESTIMONIALS_CARD_STYLES_PATH = "content._cardStyles";
|
|
19766
|
+
/**
|
|
19767
|
+
* The class list for one featured-editorial card slot.
|
|
19768
|
+
*
|
|
19769
|
+
* A slot that follows the Look has to resolve at render time, so it binds
|
|
19770
|
+
* through the shared card-class emitter rather than naming a role class here;
|
|
19771
|
+
* a slot that does not is a plain string built by the same composite emitter.
|
|
19772
|
+
*/
|
|
19773
|
+
function featuredEditorialCardClassName(slot) {
|
|
19774
|
+
const { variantClass, slotDefault, followsLook } = FEATURED_EDITORIAL_SLOTS[slot];
|
|
19775
|
+
const baseClass = ["rb-testimonials-fe-card", variantClass].filter(Boolean).join(" ");
|
|
19776
|
+
if (!followsLook) return boxStyleClassNames({}, {
|
|
19777
|
+
baseClass,
|
|
19778
|
+
cardRoleFallback: slotDefault,
|
|
19779
|
+
includeSpacing: false
|
|
19780
|
+
});
|
|
19781
|
+
return { $bind: {
|
|
19782
|
+
from: TESTIMONIALS_CARD_STYLES_PATH,
|
|
19783
|
+
transforms: [{
|
|
19784
|
+
id: "boxStyles.cardSlotRole",
|
|
19785
|
+
options: {
|
|
19786
|
+
baseClass,
|
|
19787
|
+
slotDefault
|
|
19788
|
+
}
|
|
19789
|
+
}],
|
|
19790
|
+
fallback: boxStyleClassNames({}, {
|
|
19791
|
+
baseClass,
|
|
19792
|
+
cardRoleFallback: slotDefault,
|
|
19793
|
+
includeSpacing: false
|
|
19794
|
+
})
|
|
19795
|
+
} };
|
|
19796
|
+
}
|
|
19797
|
+
/**
|
|
18828
19798
|
* Build a single "featured editorial" testimonial card.
|
|
18829
19799
|
*
|
|
18830
|
-
* This card type deliberately renders NO avatar/headshot:
|
|
18831
|
-
*
|
|
18832
|
-
*
|
|
18833
|
-
*
|
|
18834
|
-
* - `rb-testimonials-fe-card--plain` → white surface card
|
|
19800
|
+
* This card type deliberately renders NO avatar/headshot: a quote mark, the
|
|
19801
|
+
* quote body, then the author name and a context line. The card surface comes
|
|
19802
|
+
* from the slot's card role — the site style owns the fill, border, corners and
|
|
19803
|
+
* padding.
|
|
18835
19804
|
*
|
|
18836
19805
|
* Extra modifiers (`repeat`, `when`) are forwarded to the card node so the
|
|
18837
19806
|
* caller can drive first-vs-rest branching.
|
|
18838
19807
|
*/
|
|
18839
|
-
function buildFeaturedEditorialCard(
|
|
19808
|
+
function buildFeaturedEditorialCard(slot, ...mods) {
|
|
18840
19809
|
const quoteMark = text({
|
|
18841
19810
|
as: "span",
|
|
18842
19811
|
className: "rb-testimonials-fe-qmark",
|
|
@@ -18850,11 +19819,11 @@ function buildFeaturedEditorialCard(variantClass, ...mods) {
|
|
|
18850
19819
|
as: "span",
|
|
18851
19820
|
className: "rb-testimonials-fe-context"
|
|
18852
19821
|
}, when("testimonial.content.jobTitle"), bind("testimonial.content.jobTitle"))]);
|
|
18853
|
-
return el("div", { className:
|
|
19822
|
+
return el("div", { className: featuredEditorialCardClassName(slot) }, [el("div", { className: "card-content rb-testimonials-fe-card-body" }, [
|
|
18854
19823
|
quoteMark,
|
|
18855
19824
|
quote,
|
|
18856
19825
|
meta
|
|
18857
|
-
], ...mods);
|
|
19826
|
+
])], ...mods);
|
|
18858
19827
|
}
|
|
18859
19828
|
/**
|
|
18860
19829
|
* Build the "featured editorial" layout: an asymmetric two-column arrangement
|
|
@@ -18868,7 +19837,7 @@ function buildFeaturedEditorialCard(variantClass, ...mods) {
|
|
|
18868
19837
|
* index scope in context, so entry 0 produces no node in the rest column.
|
|
18869
19838
|
*/
|
|
18870
19839
|
function buildFeaturedEditorialLayout() {
|
|
18871
|
-
return el("div", { className: "rb-testimonials-fe-grid" }, [buildFeaturedEditorialCard("
|
|
19840
|
+
return el("div", { className: "rb-testimonials-fe-grid" }, [buildFeaturedEditorialCard("lead", repeat("data.entries", "testimonial", { limit: 1 })), el("div", { className: "rb-testimonials-fe-col" }, [buildFeaturedEditorialCard("support", repeat("data.entries", "testimonial", { indexName: "tIndex" }), when("tIndex", {
|
|
18872
19841
|
equals: 0,
|
|
18873
19842
|
not: true
|
|
18874
19843
|
}))])]);
|
|
@@ -19595,7 +20564,7 @@ const newsletterFormFragment = defineFragment({
|
|
|
19595
20564
|
});
|
|
19596
20565
|
//#endregion
|
|
19597
20566
|
//#region ../blocks/src/system/fragments/library/card.ts
|
|
19598
|
-
const cardVariantOptions
|
|
20567
|
+
const cardVariantOptions = cardVariantRoleValues.map((value) => ({
|
|
19599
20568
|
value,
|
|
19600
20569
|
label: value === "default" ? "Default" : "Alternative"
|
|
19601
20570
|
}));
|
|
@@ -19693,7 +20662,7 @@ const cardFragment = defineFragment({
|
|
|
19693
20662
|
description: "Choose a card style from your theme",
|
|
19694
20663
|
required: false,
|
|
19695
20664
|
defaultValue: "default",
|
|
19696
|
-
options: cardVariantOptions
|
|
20665
|
+
options: cardVariantOptions,
|
|
19697
20666
|
ui: { intent: "style" }
|
|
19698
20667
|
}
|
|
19699
20668
|
],
|
|
@@ -19702,7 +20671,10 @@ const cardFragment = defineFragment({
|
|
|
19702
20671
|
className: { $bind: {
|
|
19703
20672
|
from: "variant",
|
|
19704
20673
|
fallback: "default",
|
|
19705
|
-
transforms: [{
|
|
20674
|
+
transforms: [{
|
|
20675
|
+
id: "boxStyles.cardRoleClass",
|
|
20676
|
+
options: { baseClass: "" }
|
|
20677
|
+
}]
|
|
19706
20678
|
} }
|
|
19707
20679
|
}, [media({
|
|
19708
20680
|
className: "card-media rb-w-full rb-h-auto rb-object-cover",
|
|
@@ -25648,19 +26620,30 @@ const blockBookingPaymentCollectionOptionSchema = z.union([
|
|
|
25648
26620
|
]);
|
|
25649
26621
|
const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
|
|
25650
26622
|
//#endregion
|
|
25651
|
-
//#region ../blocks/src/system/blocks/
|
|
25652
|
-
|
|
25653
|
-
|
|
25654
|
-
|
|
25655
|
-
|
|
26623
|
+
//#region ../blocks/src/system/blocks/shared/bookingConsent.ts
|
|
26624
|
+
const blockBookingConsentSchema = z.object({
|
|
26625
|
+
requirementId: z.string(),
|
|
26626
|
+
title: z.string(),
|
|
26627
|
+
agreement: RichTextDocSchema,
|
|
26628
|
+
checkboxLabel: z.string()
|
|
26629
|
+
});
|
|
26630
|
+
const bookingRequirementConsentFieldSchema = z.object({
|
|
26631
|
+
id: z.string(),
|
|
26632
|
+
label: z.string(),
|
|
26633
|
+
type: z.literal("booking_requirement_consent"),
|
|
26634
|
+
required: z.literal(true),
|
|
26635
|
+
agreement: RichTextDocSchema,
|
|
26636
|
+
checkboxLabel: z.string().min(1)
|
|
26637
|
+
});
|
|
26638
|
+
z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
|
|
26639
|
+
//#endregion
|
|
26640
|
+
//#region ../blocks/src/system/blocks/events/whole-series/schemas.ts
|
|
26641
|
+
const wholeSeriesVenueSchema = z.object({
|
|
25656
26642
|
id: z.string(),
|
|
25657
26643
|
name: z.string(),
|
|
25658
26644
|
address: z.string().nullable()
|
|
25659
26645
|
});
|
|
25660
|
-
|
|
25661
|
-
* Zod schema for course session (occurrence) data
|
|
25662
|
-
*/
|
|
25663
|
-
const courseSessionSchema = z.object({
|
|
26646
|
+
const wholeSeriesSessionSchema = z.object({
|
|
25664
26647
|
id: z.string(),
|
|
25665
26648
|
startsAt: z.string(),
|
|
25666
26649
|
endsAt: z.string(),
|
|
@@ -25668,14 +26651,14 @@ const courseSessionSchema = z.object({
|
|
|
25668
26651
|
capacityOverride: z.number().nullable().optional(),
|
|
25669
26652
|
overrides: z.record(z.string(), z.unknown()).nullable().optional()
|
|
25670
26653
|
});
|
|
25671
|
-
const
|
|
26654
|
+
const wholeSeriesTeamMemberSummarySchema = z.object({
|
|
25672
26655
|
id: z.string(),
|
|
25673
26656
|
name: z.string(),
|
|
25674
26657
|
roleLabel: z.string().nullable(),
|
|
25675
26658
|
summary: z.string().nullable(),
|
|
25676
26659
|
profilePath: z.string().nullable()
|
|
25677
26660
|
});
|
|
25678
|
-
const
|
|
26661
|
+
const wholeSeriesPricingOptionSchema = z.object({
|
|
25679
26662
|
id: z.string(),
|
|
25680
26663
|
name: z.string(),
|
|
25681
26664
|
description: z.string().nullable(),
|
|
@@ -25691,7 +26674,7 @@ const coursePricingOptionSchema = z.object({
|
|
|
25691
26674
|
"both"
|
|
25692
26675
|
]).nullable().optional()
|
|
25693
26676
|
});
|
|
25694
|
-
const
|
|
26677
|
+
const wholeSeriesPricingSchema = z.object({
|
|
25695
26678
|
bookingRequirement: z.enum(["none", "required"]),
|
|
25696
26679
|
pricingStrategy: z.enum([
|
|
25697
26680
|
"free",
|
|
@@ -25705,22 +26688,20 @@ const coursePricingSchema = z.object({
|
|
|
25705
26688
|
slidingMaxAmount: z.number().nullable().optional(),
|
|
25706
26689
|
slidingSuggestedAmount: z.number().nullable().optional(),
|
|
25707
26690
|
paymentTerms: blockBookingPaymentTermsSchema,
|
|
25708
|
-
options: z.array(
|
|
26691
|
+
options: z.array(wholeSeriesPricingOptionSchema)
|
|
25709
26692
|
});
|
|
25710
|
-
/**
|
|
25711
|
-
* Zod schema for public course data
|
|
25712
|
-
*/
|
|
25713
26693
|
const publicWholeSeriesOfferingSchema = z.object({
|
|
25714
26694
|
eventSeriesId: z.string(),
|
|
25715
26695
|
eventOfferingId: z.string(),
|
|
25716
26696
|
title: z.string(),
|
|
25717
26697
|
slug: z.string(),
|
|
25718
26698
|
description: z.unknown().nullable(),
|
|
25719
|
-
teamMembers: z.array(
|
|
26699
|
+
teamMembers: z.array(wholeSeriesTeamMemberSummarySchema).optional(),
|
|
25720
26700
|
enrollmentOpen: z.boolean(),
|
|
25721
|
-
pricing:
|
|
26701
|
+
pricing: wholeSeriesPricingSchema,
|
|
25722
26702
|
currency: z.string(),
|
|
25723
26703
|
paymentTerms: blockBookingPaymentTermsSchema,
|
|
26704
|
+
consent: blockBookingConsentSchema.nullable(),
|
|
25724
26705
|
enrollmentCapacity: z.number().nullable(),
|
|
25725
26706
|
acceptsMemberships: z.boolean(),
|
|
25726
26707
|
status: z.enum([
|
|
@@ -25731,12 +26712,10 @@ const publicWholeSeriesOfferingSchema = z.object({
|
|
|
25731
26712
|
sessionsCount: z.number(),
|
|
25732
26713
|
enrolledCount: z.number(),
|
|
25733
26714
|
availableSpots: z.number().nullable(),
|
|
25734
|
-
sessions: z.array(
|
|
25735
|
-
venue:
|
|
26715
|
+
sessions: z.array(wholeSeriesSessionSchema),
|
|
26716
|
+
venue: wholeSeriesVenueSchema.nullable()
|
|
25736
26717
|
});
|
|
25737
|
-
|
|
25738
|
-
const publicCourseSchema = publicWholeSeriesOfferingSchema;
|
|
25739
|
-
const publicCoursesArraySchema = z.array(publicWholeSeriesOfferingSchema);
|
|
26718
|
+
const publicWholeSeriesOfferingsArraySchema = z.array(publicWholeSeriesOfferingSchema);
|
|
25740
26719
|
//#endregion
|
|
25741
26720
|
//#region ../blocks/src/system/blocks/events/shared/schemas.ts
|
|
25742
26721
|
const eventPresetSchema = z.enum([
|
|
@@ -26040,6 +27019,7 @@ const publicEventSchema = z.object({
|
|
|
26040
27019
|
timeZone: z.string(),
|
|
26041
27020
|
pricing: publicEventPricingSchema,
|
|
26042
27021
|
paymentTerms: blockBookingPaymentTermsSchema,
|
|
27022
|
+
consent: blockBookingConsentSchema.nullable(),
|
|
26043
27023
|
accessRestriction: accessRestrictionSchema,
|
|
26044
27024
|
allowedCategoryIds: z.array(z.string()),
|
|
26045
27025
|
requireGuestDetails: z.boolean().optional(),
|
|
@@ -26047,7 +27027,7 @@ const publicEventSchema = z.object({
|
|
|
26047
27027
|
acceptsMemberships: z.boolean().optional(),
|
|
26048
27028
|
wholeSeries: z.object({
|
|
26049
27029
|
eventSeriesId: z.string(),
|
|
26050
|
-
pricing:
|
|
27030
|
+
pricing: wholeSeriesPricingSchema,
|
|
26051
27031
|
currency: z.string(),
|
|
26052
27032
|
enrollmentOpen: z.boolean()
|
|
26053
27033
|
}).nullable().optional()
|
|
@@ -26056,24 +27036,19 @@ const publicEventSchema = z.object({
|
|
|
26056
27036
|
* Schema for an array of public events
|
|
26057
27037
|
*/
|
|
26058
27038
|
const publicEventsArraySchema = z.array(publicEventSchema);
|
|
27039
|
+
//#endregion
|
|
27040
|
+
//#region ../blocks/src/system/blocks/events/shared/fields.ts
|
|
26059
27041
|
/**
|
|
26060
27042
|
* Shared card styling fields for event blocks
|
|
26061
27043
|
*/
|
|
26062
27044
|
const cardStylingFields = [
|
|
26063
|
-
{
|
|
26064
|
-
id: "
|
|
26065
|
-
type: "select",
|
|
27045
|
+
cardStylesField({
|
|
27046
|
+
id: "_cardStyles",
|
|
26066
27047
|
label: "Card style",
|
|
26067
|
-
|
|
26068
|
-
|
|
26069
|
-
|
|
26070
|
-
|
|
26071
|
-
options: cardVariantRoleValues.map((value) => ({
|
|
26072
|
-
value,
|
|
26073
|
-
label: value === "default" ? "Default" : "Alternative"
|
|
26074
|
-
})),
|
|
26075
|
-
ui: { intent: "style" }
|
|
26076
|
-
},
|
|
27048
|
+
controls: "role-only",
|
|
27049
|
+
renderInHeader: false,
|
|
27050
|
+
intent: "style"
|
|
27051
|
+
}),
|
|
26077
27052
|
createButtonVariantField({ description: "Choose a button style from your theme" }),
|
|
26078
27053
|
{
|
|
26079
27054
|
id: "buttonText",
|
|
@@ -26212,14 +27187,7 @@ function normalizeIdList(parts) {
|
|
|
26212
27187
|
}
|
|
26213
27188
|
//#endregion
|
|
26214
27189
|
//#region ../blocks/src/system/blocks/events/shared/filtering.ts
|
|
26215
|
-
const eventSurfacePresetValues =
|
|
26216
|
-
"course",
|
|
26217
|
-
"term",
|
|
26218
|
-
"class",
|
|
26219
|
-
"workshop",
|
|
26220
|
-
"retreat",
|
|
26221
|
-
"performance"
|
|
26222
|
-
];
|
|
27190
|
+
const eventSurfacePresetValues = SURFACE_EVENT_PRESET_VALUES;
|
|
26223
27191
|
const eventSurfaceScopeValues = [
|
|
26224
27192
|
"all",
|
|
26225
27193
|
"regularClassSchedule",
|
|
@@ -26400,6 +27368,25 @@ function resolveEventRegistrationScopedEvents(events, context) {
|
|
|
26400
27368
|
return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
|
|
26401
27369
|
}
|
|
26402
27370
|
//#endregion
|
|
27371
|
+
//#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
|
|
27372
|
+
function planEventRegistrationScope(input) {
|
|
27373
|
+
const subject = input.subject;
|
|
27374
|
+
const selectedRunOffering = input.wholeSeriesOffering;
|
|
27375
|
+
if (subject?.kind !== "eventOffering" || !selectedRunOffering) return {
|
|
27376
|
+
kind: "context",
|
|
27377
|
+
events: resolveEventRegistrationScopedEvents(input.events, {
|
|
27378
|
+
occurrenceContext: input.occurrenceContext,
|
|
27379
|
+
subject
|
|
27380
|
+
})
|
|
27381
|
+
};
|
|
27382
|
+
if (!(selectedRunOffering.eventOfferingId === subject.eventOfferingId && subject.availableEventSeriesIds.some((seriesId) => seriesId === selectedRunOffering.eventSeriesId))) return { kind: "invalidSelectedRun" };
|
|
27383
|
+
return {
|
|
27384
|
+
kind: "selectedRun",
|
|
27385
|
+
events: input.events.filter((event) => event.seriesId === selectedRunOffering.eventSeriesId),
|
|
27386
|
+
offering: selectedRunOffering
|
|
27387
|
+
};
|
|
27388
|
+
}
|
|
27389
|
+
//#endregion
|
|
26403
27390
|
//#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
|
|
26404
27391
|
function isRecord$5(value) {
|
|
26405
27392
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -26720,8 +27707,8 @@ const eventRegistrationHydrationSchemaShape = {
|
|
|
26720
27707
|
occurrenceContext: occurrenceContextSchema.optional(),
|
|
26721
27708
|
subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
|
|
26722
27709
|
events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
26723
|
-
wholeSeriesOfferings:
|
|
26724
|
-
wholeSeriesOffering:
|
|
27710
|
+
wholeSeriesOfferings: publicWholeSeriesOfferingsArraySchema.nullable().optional(),
|
|
27711
|
+
wholeSeriesOffering: publicWholeSeriesOfferingSchema.nullable().optional(),
|
|
26725
27712
|
maxTickets: z.string().optional(),
|
|
26726
27713
|
showVenue: z.boolean().optional(),
|
|
26727
27714
|
showCapacity: z.boolean().optional(),
|
|
@@ -26743,12 +27730,13 @@ const eventRegistrationSourceSchema = z.object({
|
|
|
26743
27730
|
portalToken: z.string().nullable().optional(),
|
|
26744
27731
|
previewToken: z.string().nullable().optional(),
|
|
26745
27732
|
...eventRegistrationHydrationSchemaShape,
|
|
27733
|
+
subjectWholeSeriesOffering: publicWholeSeriesOfferingSchema.nullable().optional(),
|
|
26746
27734
|
className: z.string().nullable().optional(),
|
|
26747
27735
|
buttonText: z.string().nullable().optional(),
|
|
26748
27736
|
maxTickets: z.string().nullable().optional(),
|
|
26749
27737
|
stage: previewStageSchema.optional()
|
|
26750
27738
|
});
|
|
26751
|
-
const eventRegistrationDisplaySchema = z.object({
|
|
27739
|
+
const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
|
|
26752
27740
|
kind: z.literal("event-registration"),
|
|
26753
27741
|
state: z.literal("generic-shell"),
|
|
26754
27742
|
className: z.string().nullable(),
|
|
@@ -26756,7 +27744,13 @@ const eventRegistrationDisplaySchema = z.object({
|
|
|
26756
27744
|
bodyText: z.string(),
|
|
26757
27745
|
stepLabels: z.array(z.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
|
|
26758
27746
|
summaryButtonText: z.string()
|
|
26759
|
-
})
|
|
27747
|
+
}), z.object({
|
|
27748
|
+
kind: z.literal("event-registration"),
|
|
27749
|
+
state: z.literal("registration-closed"),
|
|
27750
|
+
className: z.string().nullable(),
|
|
27751
|
+
titleText: z.string(),
|
|
27752
|
+
bodyText: z.string()
|
|
27753
|
+
})]);
|
|
26760
27754
|
const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
|
|
26761
27755
|
const eventRegistrationRenderSchema = z.object({
|
|
26762
27756
|
display: eventRegistrationDisplaySchema,
|
|
@@ -26770,6 +27764,13 @@ z.object({
|
|
|
26770
27764
|
stage: previewStageSchema.optional()
|
|
26771
27765
|
});
|
|
26772
27766
|
function buildEventRegistrationDisplay(source) {
|
|
27767
|
+
if (resolveWholeSeriesOffering(source)?.enrollmentOpen === false) return {
|
|
27768
|
+
kind: "event-registration",
|
|
27769
|
+
state: "registration-closed",
|
|
27770
|
+
className: source.className ?? null,
|
|
27771
|
+
titleText: "Registration closed",
|
|
27772
|
+
bodyText: "This run is no longer open for bookings."
|
|
27773
|
+
};
|
|
26773
27774
|
const stepLabels = buildEventRegistrationShellStepLabels(source);
|
|
26774
27775
|
return {
|
|
26775
27776
|
kind: "event-registration",
|
|
@@ -26781,6 +27782,9 @@ function buildEventRegistrationDisplay(source) {
|
|
|
26781
27782
|
summaryButtonText: source.buttonText?.trim() || "Register"
|
|
26782
27783
|
};
|
|
26783
27784
|
}
|
|
27785
|
+
function resolveWholeSeriesOffering(source) {
|
|
27786
|
+
return source.wholeSeriesOffering ?? source.subjectWholeSeriesOffering ?? null;
|
|
27787
|
+
}
|
|
26784
27788
|
function buildEventRegistrationShellStepLabels(source) {
|
|
26785
27789
|
const scopedEvents = scopeEventRegistrationEvents(source);
|
|
26786
27790
|
if (scopedEvents.length === 0) return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
|
|
@@ -26796,10 +27800,13 @@ function buildEventRegistrationShellStepLabels(source) {
|
|
|
26796
27800
|
}) : false).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
|
|
26797
27801
|
}
|
|
26798
27802
|
function scopeEventRegistrationEvents(source) {
|
|
26799
|
-
|
|
27803
|
+
const scope = planEventRegistrationScope({
|
|
27804
|
+
events: toRegistrationEvents(source.events ?? []),
|
|
27805
|
+
wholeSeriesOffering: source.wholeSeriesOffering,
|
|
26800
27806
|
occurrenceContext: source.occurrenceContext,
|
|
26801
27807
|
subject: source.subject
|
|
26802
27808
|
});
|
|
27809
|
+
return scope.kind === "invalidSelectedRun" ? [] : scope.events;
|
|
26803
27810
|
}
|
|
26804
27811
|
function shellLabelForRegistrationStep(step, events) {
|
|
26805
27812
|
switch (step) {
|
|
@@ -26838,7 +27845,7 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
26838
27845
|
subject: source.subject ?? null,
|
|
26839
27846
|
events: source.events ?? null,
|
|
26840
27847
|
wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
|
|
26841
|
-
wholeSeriesOffering: source
|
|
27848
|
+
wholeSeriesOffering: resolveWholeSeriesOffering(source),
|
|
26842
27849
|
maxTickets: source.maxTickets ?? void 0,
|
|
26843
27850
|
showVenue: source.showVenue,
|
|
26844
27851
|
showCapacity: source.showCapacity,
|
|
@@ -27059,7 +28066,9 @@ const eventRegistrationBlockDefinition = {
|
|
|
27059
28066
|
fallback: false
|
|
27060
28067
|
} },
|
|
27061
28068
|
events: { $bind: { from: "data.events" } },
|
|
27062
|
-
wholeSeriesOffering: { $bind: { from: "data.
|
|
28069
|
+
wholeSeriesOffering: { $bind: { from: "data.selectedRunOffering.offering" } },
|
|
28070
|
+
subjectWholeSeriesOffering: { $bind: { from: "data.subjectWholeSeriesOffering.offering" } },
|
|
28071
|
+
wholeSeriesOfferings: { $bind: { from: "data.wholeSeriesOfferings" } },
|
|
27063
28072
|
sitePasses: { $bind: { from: "data.sitePasses" } },
|
|
27064
28073
|
siteMemberships: { $bind: { from: "data.siteMemberships" } },
|
|
27065
28074
|
stage: { $bind: {
|
|
@@ -27073,7 +28082,9 @@ const eventRegistrationBlockDefinition = {
|
|
|
27073
28082
|
runtime: eventRegistrationBlockRuntime,
|
|
27074
28083
|
dataSchemas: {
|
|
27075
28084
|
events: publicEventsArraySchema.optional(),
|
|
27076
|
-
|
|
28085
|
+
selectedRunOffering: z.object({ offering: publicWholeSeriesOfferingSchema }).optional(),
|
|
28086
|
+
subjectWholeSeriesOffering: z.object({ offering: publicWholeSeriesOfferingSchema }).optional(),
|
|
28087
|
+
wholeSeriesOfferings: z.array(publicWholeSeriesOfferingSchema).optional(),
|
|
27077
28088
|
sitePasses: publicPassProductCollectionSchema.optional(),
|
|
27078
28089
|
siteMemberships: publicMembershipProductCollectionSchema.optional(),
|
|
27079
28090
|
occurrenceContext: occurrenceContextSchema.optional()
|
|
@@ -27090,11 +28101,29 @@ const eventRegistrationBlockDefinition = {
|
|
|
27090
28101
|
} },
|
|
27091
28102
|
readProfile: "registration",
|
|
27092
28103
|
seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
|
|
28104
|
+
seriesIds: { $bind: {
|
|
28105
|
+
from: "$root.subject.availableEventSeriesIds",
|
|
28106
|
+
transforms: [{ id: "value.csv" }]
|
|
28107
|
+
} },
|
|
28108
|
+
runSeriesId: { $bind: { from: "$root.entrySubrouteContext.run.seriesId" } },
|
|
27093
28109
|
includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
|
|
27094
28110
|
},
|
|
27095
28111
|
mode: "server"
|
|
27096
28112
|
},
|
|
27097
|
-
|
|
28113
|
+
selectedRunOffering: {
|
|
28114
|
+
endpoint: "getPublicWholeSeriesOffering",
|
|
28115
|
+
params: {
|
|
28116
|
+
siteId: { $bind: { from: "$root.siteId" } },
|
|
28117
|
+
eventSeriesId: { $bind: { from: "$root.entrySubrouteContext.run.seriesId" } },
|
|
28118
|
+
stage: { $bind: {
|
|
28119
|
+
from: "$root.previewStage",
|
|
28120
|
+
fallback: "published"
|
|
28121
|
+
} }
|
|
28122
|
+
},
|
|
28123
|
+
requiredParams: ["eventSeriesId"],
|
|
28124
|
+
mode: "server"
|
|
28125
|
+
},
|
|
28126
|
+
subjectWholeSeriesOffering: {
|
|
27098
28127
|
endpoint: "getPublicWholeSeriesOffering",
|
|
27099
28128
|
when: { $bind: {
|
|
27100
28129
|
from: "$root.subject.isWholeSeriesBooking",
|
|
@@ -27111,6 +28140,22 @@ const eventRegistrationBlockDefinition = {
|
|
|
27111
28140
|
requiredParams: ["eventSeriesId"],
|
|
27112
28141
|
mode: "server"
|
|
27113
28142
|
},
|
|
28143
|
+
wholeSeriesOfferings: {
|
|
28144
|
+
endpoint: "listPublicWholeSeriesOfferings",
|
|
28145
|
+
params: {
|
|
28146
|
+
siteId: { $bind: { from: "$root.siteId" } },
|
|
28147
|
+
eventSeriesIds: { $bind: {
|
|
28148
|
+
from: "$root.subject.availableEventSeriesIds",
|
|
28149
|
+
transforms: [{ id: "value.csv" }]
|
|
28150
|
+
} },
|
|
28151
|
+
stage: { $bind: {
|
|
28152
|
+
from: "$root.previewStage",
|
|
28153
|
+
fallback: "published"
|
|
28154
|
+
} }
|
|
28155
|
+
},
|
|
28156
|
+
requiredParams: ["eventSeriesIds"],
|
|
28157
|
+
mode: "server"
|
|
28158
|
+
},
|
|
27114
28159
|
sitePasses: {
|
|
27115
28160
|
endpoint: "listPublicPasses",
|
|
27116
28161
|
params: { siteId: { $bind: { from: "$root.siteId" } } },
|
|
@@ -27125,13 +28170,9 @@ const eventRegistrationBlockDefinition = {
|
|
|
27125
28170
|
};
|
|
27126
28171
|
//#endregion
|
|
27127
28172
|
//#region ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
|
|
27128
|
-
const
|
|
27129
|
-
siteId: z.string().optional(),
|
|
27130
|
-
apiBaseUrl: z.string().optional(),
|
|
27131
|
-
portalToken: z.string().nullable().optional(),
|
|
28173
|
+
const courseRegistrationHydrationSchemaShape = {
|
|
27132
28174
|
subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
|
|
27133
|
-
courses: z.array(
|
|
27134
|
-
className: z.string().nullable().optional(),
|
|
28175
|
+
courses: z.array(publicWholeSeriesOfferingSchema).nullable().optional(),
|
|
27135
28176
|
showSessions: z.boolean().optional(),
|
|
27136
28177
|
showPrice: z.boolean().optional(),
|
|
27137
28178
|
showCapacity: z.boolean().optional(),
|
|
@@ -27139,8 +28180,15 @@ const courseRegistrationSourceSchema = z.object({
|
|
|
27139
28180
|
successMessage: z.string().optional(),
|
|
27140
28181
|
waitlistMessage: z.string().optional(),
|
|
27141
28182
|
membershipMessage: z.string().optional(),
|
|
28183
|
+
buttonVariant: registrationButtonVariantSchema.optional()
|
|
28184
|
+
};
|
|
28185
|
+
const courseRegistrationSourceSchema = z.object({
|
|
28186
|
+
siteId: z.string().optional(),
|
|
28187
|
+
apiBaseUrl: z.string().optional(),
|
|
28188
|
+
portalToken: z.string().nullable().optional(),
|
|
28189
|
+
...courseRegistrationHydrationSchemaShape,
|
|
28190
|
+
className: z.string().nullable().optional(),
|
|
27142
28191
|
buttonText: z.string().nullable().optional(),
|
|
27143
|
-
buttonVariant: registrationButtonVariantSchema.optional(),
|
|
27144
28192
|
stage: previewStageSchema.optional()
|
|
27145
28193
|
});
|
|
27146
28194
|
const courseRegistrationDisplaySchema = z.object({
|
|
@@ -27149,18 +28197,7 @@ const courseRegistrationDisplaySchema = z.object({
|
|
|
27149
28197
|
className: z.string().nullable(),
|
|
27150
28198
|
summaryButtonText: z.string()
|
|
27151
28199
|
});
|
|
27152
|
-
const courseRegistrationHydrationSchema = z.object(
|
|
27153
|
-
subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
|
|
27154
|
-
courses: z.array(publicCourseSchema).nullable().optional(),
|
|
27155
|
-
showSessions: z.boolean().optional(),
|
|
27156
|
-
showPrice: z.boolean().optional(),
|
|
27157
|
-
showCapacity: z.boolean().optional(),
|
|
27158
|
-
showVenue: z.boolean().optional(),
|
|
27159
|
-
successMessage: z.string().optional(),
|
|
27160
|
-
waitlistMessage: z.string().optional(),
|
|
27161
|
-
membershipMessage: z.string().optional(),
|
|
27162
|
-
buttonVariant: registrationButtonVariantSchema.optional()
|
|
27163
|
-
});
|
|
28200
|
+
const courseRegistrationHydrationSchema = z.object(courseRegistrationHydrationSchemaShape);
|
|
27164
28201
|
const courseRegistrationRenderSchema = z.object({
|
|
27165
28202
|
display: courseRegistrationDisplaySchema,
|
|
27166
28203
|
hydration: courseRegistrationHydrationSchema
|
|
@@ -27365,7 +28402,7 @@ const courseRegistrationBlockDefinition = {
|
|
|
27365
28402
|
})]
|
|
27366
28403
|
}),
|
|
27367
28404
|
runtime: courseRegistrationBlockRuntime,
|
|
27368
|
-
dataSchemas: { courses:
|
|
28405
|
+
dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
|
|
27369
28406
|
dataLoaders: { courses: {
|
|
27370
28407
|
endpoint: "listPublicWholeSeriesOfferings",
|
|
27371
28408
|
params: {
|
|
@@ -27436,6 +28473,22 @@ const eventDetailsManifest = createBlockManifest({
|
|
|
27436
28473
|
defaultValue: true,
|
|
27437
28474
|
ui: { intent: "display" }
|
|
27438
28475
|
},
|
|
28476
|
+
{
|
|
28477
|
+
id: "showTitle",
|
|
28478
|
+
type: "boolean",
|
|
28479
|
+
label: "Show event title",
|
|
28480
|
+
required: false,
|
|
28481
|
+
defaultValue: false,
|
|
28482
|
+
ui: { intent: "display" }
|
|
28483
|
+
},
|
|
28484
|
+
{
|
|
28485
|
+
id: "showDescription",
|
|
28486
|
+
type: "boolean",
|
|
28487
|
+
label: "Show event description",
|
|
28488
|
+
required: false,
|
|
28489
|
+
defaultValue: false,
|
|
28490
|
+
ui: { intent: "display" }
|
|
28491
|
+
},
|
|
27439
28492
|
{
|
|
27440
28493
|
id: "showMap",
|
|
27441
28494
|
type: "boolean",
|
|
@@ -27472,10 +28525,22 @@ const eventDetailsManifest = createBlockManifest({
|
|
|
27472
28525
|
{
|
|
27473
28526
|
value: "10",
|
|
27474
28527
|
label: "10 dates"
|
|
28528
|
+
},
|
|
28529
|
+
{
|
|
28530
|
+
value: "all",
|
|
28531
|
+
label: "All dates"
|
|
27475
28532
|
}
|
|
27476
28533
|
],
|
|
27477
28534
|
ui: { intent: "display" }
|
|
27478
28535
|
},
|
|
28536
|
+
{
|
|
28537
|
+
id: "showCapacity",
|
|
28538
|
+
type: "boolean",
|
|
28539
|
+
label: "Show capacity",
|
|
28540
|
+
required: false,
|
|
28541
|
+
defaultValue: false,
|
|
28542
|
+
ui: { intent: "display" }
|
|
28543
|
+
},
|
|
27479
28544
|
{
|
|
27480
28545
|
id: "showCost",
|
|
27481
28546
|
type: "boolean",
|
|
@@ -27518,6 +28583,8 @@ const eventDetailsManifest = createBlockManifest({
|
|
|
27518
28583
|
} },
|
|
27519
28584
|
events: { $bind: { from: "data.eventDetailsData.events" } },
|
|
27520
28585
|
showVenue: { $bind: { from: "content.showVenue" } },
|
|
28586
|
+
showTitle: { $bind: { from: "content.showTitle" } },
|
|
28587
|
+
showDescription: { $bind: { from: "content.showDescription" } },
|
|
27521
28588
|
showMap: { $bind: { from: "content.showMap" } },
|
|
27522
28589
|
showOtherDates: { $bind: { from: "content.showOtherDates" } },
|
|
27523
28590
|
otherDatesLimit: { $bind: {
|
|
@@ -27528,6 +28595,10 @@ const eventDetailsManifest = createBlockManifest({
|
|
|
27528
28595
|
from: "content.showCost",
|
|
27529
28596
|
fallback: true
|
|
27530
28597
|
} },
|
|
28598
|
+
showCapacity: { $bind: {
|
|
28599
|
+
from: "content.showCapacity",
|
|
28600
|
+
fallback: false
|
|
28601
|
+
} },
|
|
27531
28602
|
showAcceptedPasses: { $bind: {
|
|
27532
28603
|
from: "content.showAcceptedPasses",
|
|
27533
28604
|
fallback: true
|
|
@@ -27582,6 +28653,11 @@ const eventDetailsBlockDefinition = {
|
|
|
27582
28653
|
limit: "100",
|
|
27583
28654
|
readProfile: "details",
|
|
27584
28655
|
seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
|
|
28656
|
+
seriesIds: { $bind: {
|
|
28657
|
+
from: "$root.subject.availableEventSeriesIds",
|
|
28658
|
+
transforms: [{ id: "value.csv" }]
|
|
28659
|
+
} },
|
|
28660
|
+
runSeriesId: { $bind: { from: "$root.entrySubrouteContext.run.seriesId" } },
|
|
27585
28661
|
includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
|
|
27586
28662
|
},
|
|
27587
28663
|
mode: "server"
|
|
@@ -27767,7 +28843,7 @@ const courseDetailsBlockDefinition = {
|
|
|
27767
28843
|
})], { gap: "lg" })
|
|
27768
28844
|
})]
|
|
27769
28845
|
}),
|
|
27770
|
-
dataSchemas: { courses:
|
|
28846
|
+
dataSchemas: { courses: publicWholeSeriesOfferingsArraySchema.optional() },
|
|
27771
28847
|
dataLoaders: { courses: {
|
|
27772
28848
|
endpoint: "listPublicWholeSeriesOfferings",
|
|
27773
28849
|
params: {
|
|
@@ -27886,8 +28962,8 @@ const eventSpotlightBlockDefinition = {
|
|
|
27886
28962
|
from: "content.columns",
|
|
27887
28963
|
fallback: "3"
|
|
27888
28964
|
} },
|
|
27889
|
-
|
|
27890
|
-
from: "content.
|
|
28965
|
+
cardRole: { $bind: {
|
|
28966
|
+
from: "content._cardStyles.role",
|
|
27891
28967
|
fallback: "default"
|
|
27892
28968
|
} },
|
|
27893
28969
|
buttonVariant: { $bind: {
|
|
@@ -28049,6 +29125,7 @@ const eventCollectionSourceSchemaShape = {
|
|
|
28049
29125
|
showVenue: z.boolean().nullable().optional(),
|
|
28050
29126
|
showMap: z.boolean().nullable().optional(),
|
|
28051
29127
|
showCapacity: z.boolean().nullable().optional(),
|
|
29128
|
+
cardRole: cardRoleSchema.optional(),
|
|
28052
29129
|
buttonVariant: eventButtonVariantSchema.optional(),
|
|
28053
29130
|
buttonText: z.string().optional(),
|
|
28054
29131
|
emptyMessage: z.string().optional(),
|
|
@@ -28076,6 +29153,7 @@ const eventCollectionDisplaySchemaShape = {
|
|
|
28076
29153
|
showVenue: z.boolean(),
|
|
28077
29154
|
showMap: z.boolean(),
|
|
28078
29155
|
showCapacity: z.boolean(),
|
|
29156
|
+
cardRole: cardRoleSchema,
|
|
28079
29157
|
buttonVariant: eventButtonVariantSchema,
|
|
28080
29158
|
buttonText: z.string(),
|
|
28081
29159
|
emptyMessage: z.string()
|
|
@@ -28125,6 +29203,7 @@ function buildEventCollectionPresentationDisplay(source) {
|
|
|
28125
29203
|
showVenue: source.showVenue ?? true,
|
|
28126
29204
|
showMap: source.showMap ?? true,
|
|
28127
29205
|
showCapacity: source.showCapacity ?? true,
|
|
29206
|
+
cardRole: source.cardRole ?? "default",
|
|
28128
29207
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
28129
29208
|
buttonText: source.buttonText ?? "Book",
|
|
28130
29209
|
emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
|
|
@@ -28142,8 +29221,6 @@ function buildEventCollectionHydration(source) {
|
|
|
28142
29221
|
}
|
|
28143
29222
|
//#endregion
|
|
28144
29223
|
//#region ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
|
|
28145
|
-
const legacyEventCardVariantSchema = z.enum(["variant1", "variant2"]);
|
|
28146
|
-
const eventCardVariantInputSchema = z.union([cardVariantRoleSchema, legacyEventCardVariantSchema]);
|
|
28147
29224
|
const cardOrientationSchema = z.enum(["vertical", "horizontal"]);
|
|
28148
29225
|
const eventSurfaceScopeSchema = z.enum(eventSurfaceScopeValues);
|
|
28149
29226
|
const eventScheduleScopeSchema = z.enum(eventScheduleScopeValues);
|
|
@@ -28158,7 +29235,7 @@ const eventListingSourceSchema = z.object({
|
|
|
28158
29235
|
paginationMode: z.enum(["loadMore", "seeAllLink"]).optional(),
|
|
28159
29236
|
seeAllUrl: z.string().optional(),
|
|
28160
29237
|
loadMoreText: z.string().optional(),
|
|
28161
|
-
|
|
29238
|
+
cardRole: cardRoleSchema.optional(),
|
|
28162
29239
|
buttonVariant: eventButtonVariantSchema.optional(),
|
|
28163
29240
|
buttonText: z.string().optional(),
|
|
28164
29241
|
showVenue: z.boolean().optional(),
|
|
@@ -28180,7 +29257,7 @@ const eventListingDisplaySchema = z.object({
|
|
|
28180
29257
|
emptyMessage: z.string(),
|
|
28181
29258
|
loadingMessage: z.string(),
|
|
28182
29259
|
containerClass: z.string(),
|
|
28183
|
-
|
|
29260
|
+
cardRole: cardRoleSchema,
|
|
28184
29261
|
buttonVariant: eventButtonVariantSchema,
|
|
28185
29262
|
buttonText: z.string(),
|
|
28186
29263
|
showVenue: z.boolean(),
|
|
@@ -28236,7 +29313,7 @@ const eventListingBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
28236
29313
|
emptyMessage: source.emptyMessage ?? "No upcoming events scheduled.",
|
|
28237
29314
|
loadingMessage: "Loading events…",
|
|
28238
29315
|
containerClass: getContainerClass(layout, source.columns ?? "3"),
|
|
28239
|
-
|
|
29316
|
+
cardRole: source.cardRole ?? "default",
|
|
28240
29317
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
28241
29318
|
buttonText: source.buttonText ?? "Book",
|
|
28242
29319
|
showVenue: source.showVenue ?? true,
|
|
@@ -28558,8 +29635,8 @@ const eventListingBlockDefinition = {
|
|
|
28558
29635
|
from: "content.loadMoreText",
|
|
28559
29636
|
fallback: "Load more events"
|
|
28560
29637
|
} },
|
|
28561
|
-
|
|
28562
|
-
from: "content.
|
|
29638
|
+
cardRole: { $bind: {
|
|
29639
|
+
from: "content._cardStyles.role",
|
|
28563
29640
|
fallback: "default"
|
|
28564
29641
|
} },
|
|
28565
29642
|
buttonVariant: { $bind: {
|
|
@@ -28829,6 +29906,10 @@ const eventCalendarLayout = [styledSection({
|
|
|
28829
29906
|
filterCategoryIds: { $bind: { from: "content.filterCategoryIds" } },
|
|
28830
29907
|
filterStaffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
|
|
28831
29908
|
filterVenueId: { $bind: { from: "content.filterVenueId" } },
|
|
29909
|
+
cardRole: { $bind: {
|
|
29910
|
+
from: "content._cardStyles.role",
|
|
29911
|
+
fallback: "default"
|
|
29912
|
+
} },
|
|
28832
29913
|
buttonVariant: { $bind: {
|
|
28833
29914
|
from: "content.buttonVariant",
|
|
28834
29915
|
fallback: "primary"
|
|
@@ -29461,11 +30542,11 @@ const eventCalendarAdditionalFields = [
|
|
|
29461
30542
|
searchThreshold: 8
|
|
29462
30543
|
}
|
|
29463
30544
|
}),
|
|
29464
|
-
...cardStylingFields.
|
|
30545
|
+
...cardStylingFields.map((field) => ({
|
|
29465
30546
|
...field,
|
|
29466
30547
|
ui: {
|
|
29467
30548
|
...field.ui ?? {},
|
|
29468
|
-
intent: field.id === "buttonVariant" ? "style" : "content"
|
|
30549
|
+
intent: field.id === "_cardStyles" || field.id === "buttonVariant" ? "style" : "content"
|
|
29469
30550
|
}
|
|
29470
30551
|
})),
|
|
29471
30552
|
{
|
|
@@ -29938,7 +31019,7 @@ const publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
|
|
|
29938
31019
|
entityId: z.string(),
|
|
29939
31020
|
path: z.string(),
|
|
29940
31021
|
title: z.string(),
|
|
29941
|
-
kind: z.enum(
|
|
31022
|
+
kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
|
|
29942
31023
|
contentTypeKey: z.string().nullable().optional()
|
|
29943
31024
|
})) });
|
|
29944
31025
|
const groupOverrideFields = [
|
|
@@ -30232,7 +31313,7 @@ const offeringsPreviewBlockDefinition = {
|
|
|
30232
31313
|
dataSchemas: {
|
|
30233
31314
|
...offeringsPreviewEventDataSchemas,
|
|
30234
31315
|
routeCandidates: publicRouteCandidatesSchema.optional(),
|
|
30235
|
-
courses:
|
|
31316
|
+
courses: publicWholeSeriesOfferingsArraySchema.optional()
|
|
30236
31317
|
},
|
|
30237
31318
|
dataLoaders: {
|
|
30238
31319
|
...offeringsPreviewEventDataLoaders,
|
|
@@ -31704,7 +32785,7 @@ const audioPlayerBlockDefinition = { manifest: createBlockManifest({
|
|
|
31704
32785
|
}
|
|
31705
32786
|
],
|
|
31706
32787
|
layout: styledSection({
|
|
31707
|
-
children: stack({ className: "rb-container rb-mx-auto rb-max-w-3xl" }, [el("div", { className: "
|
|
32788
|
+
children: stack({ className: "rb-container rb-mx-auto rb-max-w-3xl" }, [el("div", { className: boxStyleClassNames({ role: "default" }, {}) }, [media({
|
|
31708
32789
|
className: "card-media rb-aspect-video rb-w-full rb-object-cover",
|
|
31709
32790
|
size: {
|
|
31710
32791
|
width: 960,
|
|
@@ -34756,16 +35837,27 @@ function eventListCapable() {
|
|
|
34756
35837
|
looks: "supported",
|
|
34757
35838
|
sectionSurfaces: "supported",
|
|
34758
35839
|
contentFrames: ["plain", "panel"],
|
|
34759
|
-
cardRoles: "
|
|
35840
|
+
cardRoles: "supported",
|
|
34760
35841
|
eventListTreatments
|
|
34761
35842
|
});
|
|
34762
35843
|
}
|
|
35844
|
+
function eventSpotlightCapable() {
|
|
35845
|
+
return declareBlockDesignCapability({
|
|
35846
|
+
sectionSurfaces: "supported",
|
|
35847
|
+
contentFrames: ["plain"],
|
|
35848
|
+
cardRoles: "supported"
|
|
35849
|
+
});
|
|
35850
|
+
}
|
|
34763
35851
|
function offeringsPreviewCapable() {
|
|
34764
35852
|
return declareBlockDesignCapability({
|
|
34765
35853
|
looks: "supported",
|
|
34766
35854
|
sectionSurfaces: "supported",
|
|
34767
35855
|
contentFrames: ["plain"],
|
|
34768
|
-
cardRoles: "supported"
|
|
35856
|
+
cardRoles: "supported",
|
|
35857
|
+
compositions: {
|
|
35858
|
+
kind: "offerings-preview",
|
|
35859
|
+
treatments: offeringsPreviewCompositionTreatmentValues
|
|
35860
|
+
}
|
|
34769
35861
|
});
|
|
34770
35862
|
}
|
|
34771
35863
|
function defaultBoundaryBias(visualWeight) {
|
|
@@ -35058,7 +36150,7 @@ const systemBlockDefinitions = [
|
|
|
35058
36150
|
cardRoles: "supported",
|
|
35059
36151
|
compositions: {
|
|
35060
36152
|
kind: "testimonials",
|
|
35061
|
-
treatments:
|
|
36153
|
+
treatments: testimonialsCompositionTreatmentValues
|
|
35062
36154
|
},
|
|
35063
36155
|
headingDecorationCapability: {
|
|
35064
36156
|
kind: "supported",
|
|
@@ -35213,7 +36305,7 @@ const systemBlockDefinitions = [
|
|
|
35213
36305
|
weight: "standard"
|
|
35214
36306
|
})]
|
|
35215
36307
|
})),
|
|
35216
|
-
withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition,
|
|
36308
|
+
withDesignCapability("block.event-spotlight", eventSpotlightBlockDefinition, eventSpotlightCapable(), defineBlockDesignMetadata({
|
|
35217
36309
|
flow: offeringsFlow,
|
|
35218
36310
|
layoutProfiles: [layoutProfile({
|
|
35219
36311
|
variantKey: "default",
|
|
@@ -36452,184 +37544,29 @@ const EVENT_ATTENDEE_REFUND_INVALID_CODES = ["manual_booking_not_refundable", ..
|
|
|
36452
37544
|
[...EVENT_ATTENDEE_REFUND_INVALID_CODES, ...CANONICAL_ADMIN_REFUND_FAILURE_CODES];
|
|
36453
37545
|
[...STANDARD_LINE_ITEM_REFUND_INVALID_CODES, ...CANONICAL_ADMIN_REFUND_FAILURE_CODES];
|
|
36454
37546
|
//#endregion
|
|
36455
|
-
//#region ../api/src/
|
|
36456
|
-
|
|
36457
|
-
|
|
36458
|
-
|
|
36459
|
-
|
|
36460
|
-
|
|
36461
|
-
|
|
36462
|
-
|
|
36463
|
-
|
|
36464
|
-
|
|
36465
|
-
|
|
36466
|
-
|
|
36467
|
-
|
|
36468
|
-
|
|
36469
|
-
|
|
36470
|
-
|
|
36471
|
-
|
|
36472
|
-
|
|
36473
|
-
|
|
36474
|
-
|
|
36475
|
-
|
|
36476
|
-
|
|
36477
|
-
//#region ../api/src/bookingVerticalCatalog.ts
|
|
36478
|
-
const VERTICAL_BOOKING_PRESETS = [
|
|
36479
|
-
verticalBookingPreset("yoga_wellness.classes", "yoga_wellness", "class", "Class", "Classes", "Regular scheduled classes and group sessions."),
|
|
36480
|
-
verticalBookingPreset("yoga_wellness.workshops", "yoga_wellness", "workshop", "Workshop", "Workshops", "One-off workshops, day retreats, or special sessions."),
|
|
36481
|
-
verticalBookingPreset("yoga_wellness.courses", "yoga_wellness", "course", "Course", "Courses", "Fixed-schedule courses or multi-session groups."),
|
|
36482
|
-
verticalBookingPreset("yoga_wellness.retreats", "yoga_wellness", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats and immersive experiences."),
|
|
36483
|
-
verticalBookingPreset("yoga_wellness.appointments", "yoga_wellness", "appointment", "Appointment", "Appointments", "Private sessions, consultations, or one-to-one support."),
|
|
36484
|
-
verticalBookingPreset("fitness_pt.group_training", "fitness_pt", "class", "Group training", "Group training", "Regular scheduled classes and group sessions."),
|
|
36485
|
-
verticalBookingPreset("fitness_pt.personal_training", "fitness_pt", "appointment", "Personal training", "Personal training", "One-to-one sessions booked from your availability."),
|
|
36486
|
-
verticalBookingPreset("fitness_pt.programmes", "fitness_pt", "course", "Programme", "Programmes", "Multi-session programmes like bootcamps or courses."),
|
|
36487
|
-
verticalBookingPreset("fitness_pt.workshops", "fitness_pt", "workshop", "Workshop", "Workshops", "One-off workshops, events, or special sessions."),
|
|
36488
|
-
verticalBookingPreset("fitness_pt.retreats", "fitness_pt", "retreat", "Retreat", "Retreats", "Multi-day or residential fitness experiences."),
|
|
36489
|
-
verticalBookingPreset("dance_school.classes", "dance_school", "class", "Class", "Classes", "Regular group classes and weekly sessions."),
|
|
36490
|
-
verticalBookingPreset("dance_school.terms", "dance_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
|
|
36491
|
-
verticalBookingPreset("dance_school.courses", "dance_school", "course", "Course", "Courses", "Fixed-schedule courses or multi-session groups.", "settings"),
|
|
36492
|
-
verticalBookingPreset("dance_school.workshops", "dance_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
36493
|
-
verticalBookingPreset("dance_school.private_lessons", "dance_school", "appointment", "Private lesson", "Private lessons", "One-to-one lessons or coaching sessions."),
|
|
36494
|
-
verticalBookingPreset("dance_school.shows", "dance_school", "performance", "Show", "Shows", "Ticketed performances, showcases, and recitals."),
|
|
36495
|
-
verticalBookingPreset("physiotherapy_physical_health.appointments", "physiotherapy_physical_health", "appointment", "Appointment", "Appointments", "Assessments, treatments, follow-ups, and rehabilitation sessions."),
|
|
36496
|
-
verticalBookingPreset("physiotherapy_physical_health.rehab_classes", "physiotherapy_physical_health", "class", "Rehab class", "Rehab classes", "Regular rehabilitation, mobility, strength, or recovery classes."),
|
|
36497
|
-
verticalBookingPreset("physiotherapy_physical_health.workshops", "physiotherapy_physical_health", "workshop", "Workshop", "Workshops", "One-off workshops, talks, or practical group sessions."),
|
|
36498
|
-
verticalBookingPreset("massage_bodywork.treatments", "massage_bodywork", "appointment", "Treatment", "Treatments", "Massage treatments, bodywork sessions, and one-to-one appointments."),
|
|
36499
|
-
verticalBookingPreset("massage_bodywork.group_sessions", "massage_bodywork", "class", "Group session", "Group sessions", "Regular bodywork, somatic movement, or self-massage sessions."),
|
|
36500
|
-
verticalBookingPreset("massage_bodywork.workshops", "massage_bodywork", "workshop", "Workshop", "Workshops", "One-off bodywork, self-massage, or somatic practice workshops."),
|
|
36501
|
-
verticalBookingPreset("therapist_practitioner.appointments", "therapist_practitioner", "appointment", "Appointment", "Appointments", "Sessions, consultations, treatments, or assessments."),
|
|
36502
|
-
verticalBookingPreset("therapist_practitioner.workshops", "therapist_practitioner", "workshop", "Workshop", "Workshops", "One-off group workshops, talks, or wellbeing sessions."),
|
|
36503
|
-
verticalBookingPreset("therapist_practitioner.retreats", "therapist_practitioner", "retreat", "Retreat", "Retreats", "Multi-day retreats or immersive group experiences."),
|
|
36504
|
-
verticalBookingPreset("beauty_spa.appointments", "beauty_spa", "appointment", "Appointment", "Appointments", "Treatments, consultations, services, and sessions."),
|
|
36505
|
-
verticalBookingPreset("beauty_spa.workshops", "beauty_spa", "workshop", "Workshop", "Workshops", "Skincare workshops, makeup lessons, demos, or group events."),
|
|
36506
|
-
verticalBookingPreset("consultant_coach.appointments", "consultant_coach", "appointment", "Appointment", "Appointments", "One-to-one calls, consultations, reviews, or coaching sessions."),
|
|
36507
|
-
verticalBookingPreset("consultant_coach.workshops", "consultant_coach", "workshop", "Workshop", "Workshops", "One-off group sessions, webinars, or strategy days."),
|
|
36508
|
-
verticalBookingPreset("consultant_coach.courses", "consultant_coach", "course", "Course", "Courses", "Fixed-schedule cohorts or multi-session group programmes."),
|
|
36509
|
-
verticalBookingPreset("consultant_coach.retreats", "consultant_coach", "retreat", "Retreat", "Retreats", "Multi-day coaching retreats or immersive experiences."),
|
|
36510
|
-
verticalBookingPreset("training_provider.courses", "training_provider", "course", "Course", "Courses", "Fixed-schedule courses, cohorts, and multi-session training."),
|
|
36511
|
-
verticalBookingPreset("training_provider.workshops", "training_provider", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, and short training sessions."),
|
|
36512
|
-
verticalBookingPreset("training_provider.appointments", "training_provider", "appointment", "Appointment", "Appointments", "Consultations, assessments, mentoring, or office hours."),
|
|
36513
|
-
verticalBookingPreset("training_provider.classes", "training_provider", "class", "Class", "Classes", "Regular classes, sessions, or groups.", "settings"),
|
|
36514
|
-
verticalBookingPreset("training_provider.residentials", "training_provider", "retreat", "Residential", "Residentials", "Residential courses or multi-day training experiences.", "settings"),
|
|
36515
|
-
verticalBookingPreset("retreat_centre.retreats", "retreat_centre", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats with richer booking needs."),
|
|
36516
|
-
verticalBookingPreset("retreat_centre.workshops", "retreat_centre", "workshop", "Workshop", "Workshops", "One-day retreats, ceremonies, workshops, or special events."),
|
|
36517
|
-
verticalBookingPreset("retreat_centre.classes", "retreat_centre", "class", "Class", "Classes", "Regular sessions like guided meditations or group practices."),
|
|
36518
|
-
verticalBookingPreset("retreat_centre.courses", "retreat_centre", "course", "Course", "Courses", "Fixed-schedule programmes or multi-session experiences."),
|
|
36519
|
-
verticalBookingPreset("retreat_centre.appointments", "retreat_centre", "appointment", "Appointment", "Appointments", "Private sessions, therapies, consultations, or add-ons."),
|
|
36520
|
-
verticalBookingPreset("music_school.lessons", "music_school", "appointment", "Lesson", "Lessons", "One-to-one lessons, consultations, or coaching sessions."),
|
|
36521
|
-
verticalBookingPreset("music_school.classes", "music_school", "class", "Class", "Classes", "Regular group classes, ensembles, or recurring sessions."),
|
|
36522
|
-
verticalBookingPreset("music_school.terms", "music_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date group courses."),
|
|
36523
|
-
verticalBookingPreset("music_school.workshops", "music_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
36524
|
-
verticalBookingPreset("music_school.performances", "music_school", "performance", "Performance", "Performances", "Concerts, recitals, showcases, or ticketed performances."),
|
|
36525
|
-
verticalBookingPreset("voice_singing.lessons", "voice_singing", "appointment", "Voice session", "Voice sessions", "One-to-one singing lessons, voice coaching, or private practice sessions."),
|
|
36526
|
-
verticalBookingPreset("voice_singing.classes", "voice_singing", "class", "Ongoing weekly session", "Ongoing weekly sessions", "Regular choirs, voice circles, community singing, or group practice."),
|
|
36527
|
-
verticalBookingPreset("voice_singing.terms", "voice_singing", "course", "Singing term", "Singing terms", "Multi-week choir terms, voice courses, or fixed-date group programmes."),
|
|
36528
|
-
verticalBookingPreset("voice_singing.workshops", "voice_singing", "workshop", "Workshop", "Workshops", "One-off singing workshops, voice journeys, or devotional singing sessions."),
|
|
36529
|
-
verticalBookingPreset("voice_singing.performances", "voice_singing", "performance", "Performance", "Performances", "Choir concerts, sharing events, recitals, or community performances."),
|
|
36530
|
-
verticalBookingPreset("performing_arts_school.classes", "performing_arts_school", "class", "Class", "Classes", "Regular group classes, rehearsals, or weekly sessions."),
|
|
36531
|
-
verticalBookingPreset("performing_arts_school.terms", "performing_arts_school", "course", "Term", "Terms", "Multi-week term blocks or fixed-date course groups."),
|
|
36532
|
-
verticalBookingPreset("performing_arts_school.workshops", "performing_arts_school", "workshop", "Workshop", "Workshops", "One-off workshops, masterclasses, or intensives."),
|
|
36533
|
-
verticalBookingPreset("performing_arts_school.performances", "performing_arts_school", "performance", "Performance", "Performances", "Shows, showcases, productions, or ticketed performances."),
|
|
36534
|
-
verticalBookingPreset("performing_arts_school.lessons", "performing_arts_school", "appointment", "Lesson", "Lessons", "One-to-one lessons, coaching, or audition prep."),
|
|
36535
|
-
verticalBookingPreset("community_wellbeing.classes", "community_wellbeing", "class", "Class", "Classes", "Regular groups, sessions, practices, or weekly activities."),
|
|
36536
|
-
verticalBookingPreset("community_wellbeing.workshops", "community_wellbeing", "workshop", "Workshop", "Workshops", "One-off workshops, talks, events, or gatherings."),
|
|
36537
|
-
verticalBookingPreset("community_wellbeing.courses", "community_wellbeing", "course", "Course", "Courses", "Fixed-schedule courses, study groups, or multi-session programmes."),
|
|
36538
|
-
verticalBookingPreset("community_wellbeing.appointments", "community_wellbeing", "appointment", "Appointment", "Appointments", "One-to-one appointments, consultations, or support sessions."),
|
|
36539
|
-
verticalBookingPreset("community_wellbeing.retreats", "community_wellbeing", "retreat", "Retreat", "Retreats", "Multi-day or residential retreats."),
|
|
36540
|
-
verticalBookingPreset("venue_event_space.resource_hire", "venue_event_space", "appointment", "Hire slot", "Hire slots", "Future room, venue, and resource hire bookings.", "future")
|
|
36541
|
-
];
|
|
36542
|
-
const VERTICAL_ID_SET = /* @__PURE__ */ new Set([
|
|
36543
|
-
"yoga_wellness",
|
|
36544
|
-
"fitness_pt",
|
|
36545
|
-
"dance_school",
|
|
36546
|
-
"physiotherapy_physical_health",
|
|
36547
|
-
"massage_bodywork",
|
|
36548
|
-
"therapist_practitioner",
|
|
36549
|
-
"beauty_spa",
|
|
36550
|
-
"consultant_coach",
|
|
36551
|
-
"training_provider",
|
|
36552
|
-
"retreat_centre",
|
|
36553
|
-
"music_school",
|
|
36554
|
-
"voice_singing",
|
|
36555
|
-
"performing_arts_school",
|
|
36556
|
-
"community_wellbeing",
|
|
36557
|
-
"venue_event_space"
|
|
36558
|
-
]);
|
|
36559
|
-
const VERTICAL_PRESET_ID_SET = new Set(VERTICAL_BOOKING_PRESETS.map((presetDefinition) => presetDefinition.id));
|
|
36560
|
-
function parseVerticalId(value) {
|
|
36561
|
-
return typeof value === "string" && VERTICAL_ID_SET.has(value) ? value : null;
|
|
36562
|
-
}
|
|
36563
|
-
function parseVerticalPresetId(value) {
|
|
36564
|
-
return typeof value === "string" && VERTICAL_PRESET_ID_SET.has(value) ? value : null;
|
|
36565
|
-
}
|
|
36566
|
-
function getVerticalPresetDefinition(presetId) {
|
|
36567
|
-
const definition = VERTICAL_BOOKING_PRESETS.find((presetDefinition) => presetDefinition.id === presetId);
|
|
36568
|
-
if (!definition) throw new Error(`Unhandled vertical preset id: ${presetId}`);
|
|
36569
|
-
return definition;
|
|
36570
|
-
}
|
|
36571
|
-
function toNonEmptyVerticalPresetIds(presetIds) {
|
|
36572
|
-
const firstPresetId = presetIds[0];
|
|
36573
|
-
return firstPresetId ? [firstPresetId, ...presetIds.slice(1)] : null;
|
|
36574
|
-
}
|
|
36575
|
-
function createConfiguredSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
|
|
36576
|
-
return {
|
|
36577
|
-
verticalId,
|
|
36578
|
-
selectedPresetIds
|
|
36579
|
-
};
|
|
36580
|
-
}
|
|
36581
|
-
function createSiteVerticalBookingConfig(verticalId, selectedPresetIds) {
|
|
36582
|
-
const nonEmptyPresetIds = toNonEmptyVerticalPresetIds(selectedPresetIds);
|
|
36583
|
-
return nonEmptyPresetIds ? createConfiguredSiteVerticalBookingConfig(verticalId, nonEmptyPresetIds) : null;
|
|
36584
|
-
}
|
|
36585
|
-
function resolveSiteVerticalBookingConfig(rawConfig) {
|
|
36586
|
-
if (!rawConfig) return {
|
|
36587
|
-
kind: "unconfigured",
|
|
36588
|
-
config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG
|
|
36589
|
-
};
|
|
36590
|
-
const verticalId = parseVerticalId(rawConfig.verticalId);
|
|
36591
|
-
const selectedPresetIds = (Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : []).map(parseVerticalPresetId).filter((presetId) => Boolean(presetId));
|
|
36592
|
-
const config = {
|
|
36593
|
-
verticalId,
|
|
36594
|
-
selectedPresetIds
|
|
36595
|
-
};
|
|
36596
|
-
if (!verticalId && selectedPresetIds.length === 0) return {
|
|
36597
|
-
kind: "unconfigured",
|
|
36598
|
-
config: DEFAULT_SITE_VERTICAL_BOOKING_CONFIG
|
|
36599
|
-
};
|
|
36600
|
-
const issues = getSiteVerticalConfigIssues(rawConfig, config);
|
|
36601
|
-
if (issues.length > 0) return {
|
|
36602
|
-
kind: "invalid",
|
|
36603
|
-
config,
|
|
36604
|
-
issues
|
|
36605
|
-
};
|
|
36606
|
-
const configuredConfig = verticalId ? createSiteVerticalBookingConfig(verticalId, selectedPresetIds) : null;
|
|
36607
|
-
if (!configuredConfig) return {
|
|
36608
|
-
kind: "invalid",
|
|
36609
|
-
config,
|
|
36610
|
-
issues: ["empty_selected_presets"]
|
|
36611
|
-
};
|
|
36612
|
-
return {
|
|
36613
|
-
kind: "configured",
|
|
36614
|
-
config: configuredConfig,
|
|
36615
|
-
selectedPresets: configuredConfig.selectedPresetIds.map(getVerticalPresetDefinition)
|
|
36616
|
-
};
|
|
36617
|
-
}
|
|
36618
|
-
function getSiteVerticalConfigIssues(rawConfig, config) {
|
|
36619
|
-
const issues = /* @__PURE__ */ new Set();
|
|
36620
|
-
if (rawConfig.verticalId != null && !config.verticalId) issues.add("unknown_vertical");
|
|
36621
|
-
if (!config.verticalId && config.selectedPresetIds.length > 0) issues.add("missing_vertical");
|
|
36622
|
-
if ((Array.isArray(rawConfig.selectedPresetIds) ? rawConfig.selectedPresetIds : []).some((presetId) => parseVerticalPresetId(presetId) === null)) issues.add("unknown_preset");
|
|
36623
|
-
if (config.verticalId && config.selectedPresetIds.length === 0) issues.add("empty_selected_presets");
|
|
36624
|
-
const seenBehaviours = /* @__PURE__ */ new Set();
|
|
36625
|
-
for (const presetId of config.selectedPresetIds) {
|
|
36626
|
-
const presetDefinition = getVerticalPresetDefinition(presetId);
|
|
36627
|
-
if (config.verticalId && presetDefinition.verticalId !== config.verticalId) issues.add("preset_vertical_mismatch");
|
|
36628
|
-
if (presetDefinition.availability === "future") issues.add("future_preset_selected");
|
|
36629
|
-
if (seenBehaviours.has(presetDefinition.canonicalBehaviour)) issues.add("duplicate_canonical_behaviour");
|
|
36630
|
-
seenBehaviours.add(presetDefinition.canonicalBehaviour);
|
|
37547
|
+
//#region ../api/src/bookingVerticals.ts
|
|
37548
|
+
/**
|
|
37549
|
+
* Transport adapters for the booking-vertical domain.
|
|
37550
|
+
*
|
|
37551
|
+
* The domain catalog and all pure resolution/selection rules live in core;
|
|
37552
|
+
* this module owns only the Zod boundary used by API payloads.
|
|
37553
|
+
*/
|
|
37554
|
+
function formatRawDiagnosticValue(value) {
|
|
37555
|
+
const serialized = JSON.stringify(value);
|
|
37556
|
+
return serialized === void 0 ? String(value) : serialized;
|
|
37557
|
+
}
|
|
37558
|
+
function describeSiteVerticalConfigIssue(issue) {
|
|
37559
|
+
switch (issue.code) {
|
|
37560
|
+
case "unknown_vertical": return `${issue.code}: ${formatRawDiagnosticValue(issue.rawValue)}`;
|
|
37561
|
+
case "unknown_preset": return `${issue.code}: ${formatRawDiagnosticValue(issue.rawValue)}`;
|
|
37562
|
+
case "missing_vertical":
|
|
37563
|
+
case "empty_selected_presets":
|
|
37564
|
+
case "preset_vertical_mismatch":
|
|
37565
|
+
case "duplicate_preset_id":
|
|
37566
|
+
case "duplicate_canonical_behaviour":
|
|
37567
|
+
case "future_preset_selected": return issue.code;
|
|
37568
|
+
default: return assertNever$2(issue);
|
|
36631
37569
|
}
|
|
36632
|
-
return [...issues];
|
|
36633
37570
|
}
|
|
36634
37571
|
const VerticalIdSchema = z.string().trim().transform((value, ctx) => {
|
|
36635
37572
|
const parsed = parseVerticalId(value);
|
|
@@ -36661,16 +37598,12 @@ z.object({
|
|
|
36661
37598
|
if (resolved.kind === "invalid") {
|
|
36662
37599
|
ctx.addIssue({
|
|
36663
37600
|
code: z.ZodIssueCode.custom,
|
|
36664
|
-
message: `Invalid booking vertical config: ${resolved.issues.join(", ")}`
|
|
37601
|
+
message: `Invalid booking vertical config: ${resolved.issues.map(describeSiteVerticalConfigIssue).join(", ")}`
|
|
36665
37602
|
});
|
|
36666
37603
|
return z.NEVER;
|
|
36667
37604
|
}
|
|
36668
37605
|
return resolved.config;
|
|
36669
37606
|
});
|
|
36670
|
-
const DEFAULT_SITE_VERTICAL_BOOKING_CONFIG = {
|
|
36671
|
-
verticalId: null,
|
|
36672
|
-
selectedPresetIds: []
|
|
36673
|
-
};
|
|
36674
37607
|
//#endregion
|
|
36675
37608
|
//#region ../api/src/utils/isRecord.ts
|
|
36676
37609
|
function isRecord(value) {
|