@riverbankcms/sdk 0.139.0 → 0.140.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/README.md +1 -1
- package/dist/{PreviewEditorSidebar-BDeenhi3.mjs → PreviewEditorSidebar-CUyTzd5z.mjs} +4 -4
- package/dist/{PreviewEditorUI-DSRhgjF5.mjs → PreviewEditorUI-Agkw4v5i.mjs} +3 -3
- package/dist/{PreviewQueryProvider-D2K8GLUG.mjs → PreviewQueryProvider-CN0ewic5.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-CL7wSnYu.mjs → SdkPreviewModeRuntime-DdbeAdS8.mjs} +22 -8
- package/dist/{SiteChromeCustomizeContext-BhDn-5ir.mjs → SiteChromeCustomizeContext-CqGOz-Kv.mjs} +2053 -1110
- package/dist/_dts/ai/src/contracts/proposals.d.ts +165 -165
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +212 -212
- package/dist/_dts/api/src/accessAdmin.d.ts +74 -104
- package/dist/_dts/api/src/aiEndpoints.d.ts +5 -1
- package/dist/_dts/api/src/authSubmission.d.ts +46 -0
- package/dist/_dts/api/src/billing.d.ts +8 -4
- package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +23 -0
- package/dist/_dts/api/src/billingEndpointTypes.d.ts +26 -0
- package/dist/_dts/api/src/blocks.d.ts +2 -0
- package/dist/_dts/api/src/bookingRecords.d.ts +1 -2
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +8 -1
- package/dist/_dts/api/src/communications.d.ts +0 -1
- package/dist/_dts/api/src/contentRuntime.d.ts +8 -3
- package/dist/_dts/api/src/endpoints.d.ts +93 -64
- package/dist/_dts/api/src/event-destination-policy.d.ts +2 -1
- package/dist/_dts/api/src/footerSettings.d.ts +9 -6
- package/dist/_dts/api/src/index.d.ts +5 -6
- 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/mailingListIntegration.d.ts +8 -2
- package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
- package/dist/_dts/api/src/navigation/types.d.ts +1 -1
- package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +25 -0
- package/dist/_dts/api/src/onboarding/surfaceData.d.ts +32 -32
- package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +8 -0
- package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +1 -0
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +11 -3
- package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +3 -29
- package/dist/_dts/api/src/publicOnboardingAttemptEndpointDefinitions.d.ts +65 -0
- package/dist/_dts/api/src/saveOutcome.d.ts +20 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +3 -22
- package/dist/_dts/api/src/sdkPushContracts.d.ts +18 -0
- package/dist/_dts/api/src/sdkThemeWire.d.ts +44 -44
- package/dist/_dts/api/src/settings/permissions.d.ts +12 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +9 -5
- package/dist/_dts/api/src/siteOnboarding.d.ts +2 -9
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +2 -4
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +3 -1
- package/dist/_dts/api/src/siteSettings.d.ts +20 -7
- package/dist/_dts/api/src/types.d.ts +77 -77
- package/dist/_dts/api/src/wholeSeriesRuns.d.ts +2 -37
- package/dist/_dts/billing/src/membership/index.d.ts +3 -0
- package/dist/_dts/billing/src/plans/types.d.ts +3 -0
- package/dist/_dts/billing/src/site-arrangements.d.ts +14 -3
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
- package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +2 -0
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -0
- package/dist/_dts/blocks/src/portal/types.d.ts +2 -4
- package/dist/_dts/blocks/src/portal/waitlist-types.d.ts +35 -0
- package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
- package/dist/_dts/blocks/src/system/data/index.d.ts +2 -2
- package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +2 -1
- package/dist/_dts/blocks/src/system/data/types.d.ts +9 -0
- package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +0 -28
- package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +7 -3
- package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/waitlist-claims.d.ts +7 -2
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +30 -6
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +15 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +43 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +1 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/TicketSelectionStep.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/checkoutRecovery.d.ts +14 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +56 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -8
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useCheckoutRecovery.d.ts +8 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -7
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +10 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventSourceRecovery.d.ts +18 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.client.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +24 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +4 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -6
- package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +2 -0
- package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
- package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +27 -4
- package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +2 -1
- package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +3 -1
- package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +3 -0
- package/dist/_dts/core/src/branded.d.ts +0 -8
- package/dist/_dts/core/src/index.d.ts +1 -0
- package/dist/_dts/core/src/mailing-list-setup-parser.d.ts +1 -1
- package/dist/_dts/core/src/mailing-list-setup.d.ts +14 -1
- package/dist/_dts/core/src/mailing-list-submission.d.ts +7 -27
- package/dist/_dts/core/src/participants.d.ts +2 -29
- package/dist/_dts/core/src/public-experience.d.ts +4 -0
- package/dist/_dts/core/src/public-profile.d.ts +27 -1
- package/dist/_dts/core/src/site-route-target.d.ts +9 -2
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +293 -606
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListGlobalSettingsSummary.d.ts +10 -0
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/MailingListTargetingField.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/context.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/targetingState.d.ts +19 -0
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +14 -20
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +7 -1
- package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +1 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/cards/types.d.ts +21 -21
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +8 -2
- package/dist/_dts/theme-core/src/header/legacyHeaderVariant.d.ts +2 -2
- package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +54 -54
- package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +1 -4
- package/dist/_dts/theme-core/src/schema.d.ts +84 -84
- package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
- package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +77 -0
- package/dist/_dts/theme-core/src/surfaces/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/typography/generateTypographyCss.d.ts +2 -2
- package/dist/_dts/ui/src/lib/use-delayed-flag.d.ts +9 -0
- package/dist/_dts/ui/src/pending-button.d.ts +10 -0
- package/dist/client/{BookingConsentAgreement-CZvTDtsK.mjs → BookingConsentAgreement-CuKa82V4.mjs} +4 -4
- package/dist/client/{DiscountCodeDisclosure-D-DsLCMU.mjs → DiscountCodeDisclosure-BbYieKWB.mjs} +1 -1
- package/dist/client/{EventCombined.client-dWqgd5ZO.mjs → EventCombined.client-LTfR1Aby.mjs} +6 -6
- package/dist/client/{EventListing.client-BMRa9IYp.mjs → EventListing.client-DUHpYSuo.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-D21W9kBZ.mjs → LeafletStaticMap-CHRupL6m.mjs} +1 -1
- package/dist/client/{accordion-FxF_ta47.mjs → accordion-6HiIFxNL.mjs} +1 -1
- package/dist/client/{bookingForm-YnwW4TGw.mjs → bookingForm-Dlmid43H.mjs} +7 -7
- package/dist/client/bookings.mjs +325 -140
- package/dist/client/{carousel-vng7fFT5.mjs → carousel-DmkZRRq_.mjs} +2 -2
- package/dist/client/{carousel.client-59G_WMr4.mjs → carousel.client-DQTjCVQT.mjs} +1 -1
- package/dist/client/{cart-DEPDsjNk.mjs → cart-CIC24330.mjs} +3 -3
- package/dist/client/{checkout-CZRWu9rW.mjs → checkout-D1Zw9imo.mjs} +3 -3
- package/dist/client/{checkoutUrls-BuseL0dw.mjs → checkoutUrls-FL6lRkrt.mjs} +1 -1
- package/dist/client/client.mjs +1717 -882
- package/dist/client/{colorStyles-CrxJrPjJ.mjs → colorStyles-3013aRAY.mjs} +3 -1
- package/dist/client/{context-DvU_WUmd.mjs → context-Cy1OayHx.mjs} +6 -19
- package/dist/client/{dates-wnPMiRl5.mjs → dates-aDcfoLHr.mjs} +2 -2
- package/dist/client/{eventCalendar-BA3Q5L15.mjs → eventCalendar-FQxMPAjf.mjs} +8 -8
- package/dist/client/{eventCombined-51wgR-1R.mjs → eventCombined-Dr3ac6Hb.mjs} +3 -3
- package/dist/client/{eventDetails-modaetpm.mjs → eventDetails-D-AzUHFQ.mjs} +4 -4
- package/dist/client/{eventListing-D8t2J3Kv.mjs → eventListing-B3XxBf3i.mjs} +3 -3
- package/dist/client/{eventRegistration-CYqtkCE_.mjs → eventRegistration-I6EaokFD.mjs} +500 -152
- package/dist/client/{form-CBKXN5In.mjs → form-BbWckVWY.mjs} +3 -3
- package/dist/client/{headerSection-DylDqNrs.mjs → headerSection-C9qU4Y7x.mjs} +2 -2
- package/dist/client/hooks.mjs +445 -180
- package/dist/client/{locationMap-CvWrG0vZ.mjs → locationMap-CLCShvlG.mjs} +3 -3
- package/dist/client/{media-BOHuueS5.mjs → media-DHpfFwd3.mjs} +1 -1
- package/dist/client/{newsletterForm-Btwk70zw.mjs → newsletterForm-Briukxzi.mjs} +130 -87
- package/dist/client/{pricing-Uzw-GQ6Y.mjs → pricing-Copadu-2.mjs} +1 -1
- package/dist/client/{productDetail-JLcUYKnd.mjs → productDetail-oujlRd-r.mjs} +3 -3
- package/dist/client/{productList-FM0cbUzj.mjs → productList-BRiIRUcd.mjs} +3 -3
- package/dist/client/{propsDecoder-DYzafZb2.mjs → propsDecoder-CB2KS_ko.mjs} +130 -24
- package/dist/client/rendering/client.mjs +911 -400
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +1696 -818
- package/dist/client/{scrollToBlock-CvXszexS.mjs → scrollToBlock-B1IS1_ua.mjs} +1 -1
- package/dist/client/{shop-BIcjvy5a.mjs → shop-Vn6yNFED.mjs} +6 -6
- package/dist/client/{shop-commerce-BZQsy7xw.mjs → shop-commerce-BVTqipYp.mjs} +7 -7
- package/dist/client/{shop-commerce-store-D5V7XAb5.mjs → shop-commerce-store-BVnJVy7v.mjs} +1 -1
- package/dist/client/{shopShared-DowkXevB.mjs → shopShared-COIeK77T.mjs} +4 -4
- package/dist/client/{useEventFilters-oMoTw_JE.mjs → useEventFilters-DzIUcS9n.mjs} +7 -7
- package/dist/preview-next/before-render.mjs +119 -64
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/keepAlive.mjs +119 -64
- package/dist/preview-next/middleware.mjs +119 -64
- package/dist/{previewAuthStore-COUyAKaX.mjs → previewAuthStore-Gjb6r6vz.mjs} +119 -64
- package/dist/{sdk-runtime-D4k2LSGF.mjs → sdk-runtime-CnCLvZRv.mjs} +2 -2
- package/dist/{separator-UGtpag4Z.mjs → separator-DKDRJ1oH.mjs} +1 -1
- package/dist/server/components.mjs +787 -323
- package/dist/server/config-validation.mjs +328 -79
- package/dist/server/config.mjs +332 -83
- package/dist/server/data.mjs +441 -180
- package/dist/server/index.mjs +126 -66
- package/dist/server/next.mjs +1031 -595
- package/dist/server/page-converter.mjs +183 -74
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +1068 -592
- package/dist/server/rendering.mjs +802 -324
- package/dist/server/routing.mjs +506 -214
- package/dist/server/server.mjs +468 -244
- package/dist/server/theme-bridge.mjs +433 -100
- package/dist/server/theme.mjs +8 -2
- package/dist/styles/index.css +237 -43
- package/package.json +1 -1
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionCompactRow.d.ts +0 -29
- package/dist/_dts/blocks/src/system/runtime/shared/components/BookingOptionList.d.ts +0 -13
|
@@ -33,10 +33,12 @@ const unsafeAsMediaAssetId = (id) => id;
|
|
|
33
33
|
const unsafeAsStorageBucketName = (value) => value;
|
|
34
34
|
const unsafeAsStoragePath = (value) => value;
|
|
35
35
|
const unsafeAsUserId = (id) => id;
|
|
36
|
+
const unsafeAsContentVersionId = (id) => id;
|
|
36
37
|
const parseSiteId = (value) => parseUuidBrand(value, unsafeAsSiteId);
|
|
37
38
|
const parseApiKeyId = (value) => parseUuidBrand(value, unsafeAsApiKeyId);
|
|
38
39
|
const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
|
|
39
40
|
const parseUserId = (value) => parseUuidBrand(value, unsafeAsUserId);
|
|
41
|
+
const parseContentVersionId = (value) => parseUuidBrand(value, unsafeAsContentVersionId);
|
|
40
42
|
const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
|
|
41
43
|
//#endregion
|
|
42
44
|
//#region ../core/src/assert-never.ts
|
|
@@ -313,7 +315,7 @@ function parseEventPageSurfaceDestinationMode(value) {
|
|
|
313
315
|
return value === "cms-managed" || value === "system-managed" ? value : void 0;
|
|
314
316
|
}
|
|
315
317
|
function parseEventPageSurfaceSubject(value) {
|
|
316
|
-
if (!isRecord$
|
|
318
|
+
if (!isRecord$21(value)) return err({ kind: "notObject" });
|
|
317
319
|
switch (value.kind) {
|
|
318
320
|
case "eventSeries": {
|
|
319
321
|
const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
|
|
@@ -368,7 +370,7 @@ function parseEventSeriesIdList(values) {
|
|
|
368
370
|
}
|
|
369
371
|
return ok$1(parsed);
|
|
370
372
|
}
|
|
371
|
-
function isRecord$
|
|
373
|
+
function isRecord$21(value) {
|
|
372
374
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
373
375
|
}
|
|
374
376
|
//#endregion
|
|
@@ -625,16 +627,47 @@ function parsePositiveInteger(value) {
|
|
|
625
627
|
function parseNewsletterListId(value) {
|
|
626
628
|
return parseTrimmedMatchingString(value, UUID_PATTERN);
|
|
627
629
|
}
|
|
630
|
+
function parseMailchimpAccountId(value) {
|
|
631
|
+
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
632
|
+
}
|
|
628
633
|
function parseMailchimpAudienceId(value) {
|
|
629
634
|
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
630
635
|
}
|
|
631
636
|
function parseMailchimpInterestId(value) {
|
|
632
637
|
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
633
638
|
}
|
|
639
|
+
function parseBrevoAccountId(value) {
|
|
640
|
+
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
641
|
+
}
|
|
634
642
|
function parseBrevoListId(value) {
|
|
635
643
|
return parsePositiveInteger(value);
|
|
636
644
|
}
|
|
637
645
|
//#endregion
|
|
646
|
+
//#region ../core/src/mailing-list-setup.ts
|
|
647
|
+
function isRecord$20(value) {
|
|
648
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
649
|
+
}
|
|
650
|
+
const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
|
|
651
|
+
function parseMailingListProviderScope(value) {
|
|
652
|
+
if (!isRecord$20(value)) return err("invalid_mailing_list_provider_scope");
|
|
653
|
+
if (value.provider === "native") return ok$1({ provider: "native" });
|
|
654
|
+
if (value.provider === "brevo") {
|
|
655
|
+
const accountId = parseBrevoAccountId(value.accountId);
|
|
656
|
+
return accountId !== null ? ok$1({
|
|
657
|
+
provider: "brevo",
|
|
658
|
+
accountId
|
|
659
|
+
}) : err("invalid_mailing_list_provider_scope");
|
|
660
|
+
}
|
|
661
|
+
if (value.provider === "mailchimp") {
|
|
662
|
+
const accountId = parseMailchimpAccountId(value.accountId);
|
|
663
|
+
return accountId !== null ? ok$1({
|
|
664
|
+
provider: "mailchimp",
|
|
665
|
+
accountId
|
|
666
|
+
}) : err("invalid_mailing_list_provider_scope");
|
|
667
|
+
}
|
|
668
|
+
return err("invalid_mailing_list_provider_scope");
|
|
669
|
+
}
|
|
670
|
+
//#endregion
|
|
638
671
|
//#region ../core/src/mailing-list-setup-parser.ts
|
|
639
672
|
function parseMailingListGlobalForm(value) {
|
|
640
673
|
if (!isRecord$19(value)) return formError("shape");
|
|
@@ -643,12 +676,15 @@ function parseMailingListGlobalForm(value) {
|
|
|
643
676
|
if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
|
|
644
677
|
const buttonLabel = parseRequiredString(value.buttonLabel);
|
|
645
678
|
if (buttonLabel === null) return formError("buttonLabel");
|
|
679
|
+
const successMessage = parseRequiredString(value.successMessage);
|
|
680
|
+
if (successMessage === null) return formError("successMessage");
|
|
646
681
|
const privacyNote = parseOptionalString(value.privacyNote);
|
|
647
682
|
if (privacyNote === void 0) return formError("privacyNote");
|
|
648
683
|
return ok$1({
|
|
649
684
|
fields,
|
|
650
685
|
includeOptionalPhone: value.includeOptionalPhone,
|
|
651
686
|
buttonLabel,
|
|
687
|
+
successMessage,
|
|
652
688
|
privacyNote
|
|
653
689
|
});
|
|
654
690
|
}
|
|
@@ -978,11 +1014,17 @@ function parseMailingListSignedSourceToken(value) {
|
|
|
978
1014
|
const parsed = typeof value === "string" ? value.trim() : "";
|
|
979
1015
|
return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
|
|
980
1016
|
}
|
|
981
|
-
function
|
|
982
|
-
const parsed =
|
|
983
|
-
return parsed
|
|
1017
|
+
function parseMailingListContentVersionId(value) {
|
|
1018
|
+
const parsed = parseContentVersionId(value);
|
|
1019
|
+
return parsed.ok ? parsed.value : null;
|
|
1020
|
+
}
|
|
1021
|
+
function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
|
|
1022
|
+
const parsedBlockId = parseMailingListBlockId(blockId);
|
|
1023
|
+
const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
|
|
1024
|
+
return parsedBlockId !== null && parsedContentVersionId !== null ? {
|
|
984
1025
|
tag: "block_ref",
|
|
985
|
-
blockId:
|
|
1026
|
+
blockId: parsedBlockId,
|
|
1027
|
+
contentVersionId: parsedContentVersionId
|
|
986
1028
|
} : null;
|
|
987
1029
|
}
|
|
988
1030
|
//#endregion
|
|
@@ -5286,6 +5328,509 @@ function parseThemeColorToken(value) {
|
|
|
5286
5328
|
}
|
|
5287
5329
|
const themeColorTokenSchema = z.string().min(1).refine((value) => Boolean(isThemeColorToken(value)), "Expected a known Theme V2 color token");
|
|
5288
5330
|
//#endregion
|
|
5331
|
+
//#region ../theme-core/src/surfaces/foregroundRoles.ts
|
|
5332
|
+
const SURFACE_FOREGROUND_ROLES = [
|
|
5333
|
+
"text",
|
|
5334
|
+
"heading",
|
|
5335
|
+
"link",
|
|
5336
|
+
"supporting"
|
|
5337
|
+
];
|
|
5338
|
+
//#endregion
|
|
5339
|
+
//#region ../theme-core/src/surfaces/foregroundContract.ts
|
|
5340
|
+
const SURFACE_FOREGROUND_CSS_VARS = {
|
|
5341
|
+
text: "--rb-surface-text-color",
|
|
5342
|
+
heading: "--rb-surface-heading-color",
|
|
5343
|
+
link: "--rb-surface-link-color",
|
|
5344
|
+
supporting: "--rb-surface-supporting-color"
|
|
5345
|
+
};
|
|
5346
|
+
const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
|
|
5347
|
+
const DEFAULT_ROLE_FALLBACKS = {
|
|
5348
|
+
text: DEFAULT_SURFACE_TEXT_COLOR,
|
|
5349
|
+
heading: DEFAULT_SURFACE_TEXT_COLOR,
|
|
5350
|
+
link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
|
|
5351
|
+
supporting: "rgb(var(--tb-mutedText, 100 116 139))"
|
|
5352
|
+
};
|
|
5353
|
+
function requireSurfaceColorValue(role, value) {
|
|
5354
|
+
const normalized = value.trim();
|
|
5355
|
+
if (normalized.length === 0) throw new RangeError(`Surface foreground ${role} must be a non-empty CSS color.`);
|
|
5356
|
+
return normalized;
|
|
5357
|
+
}
|
|
5358
|
+
function completeSurfaceForegrounds(input) {
|
|
5359
|
+
const text = requireSurfaceColorValue("text", input.text);
|
|
5360
|
+
return {
|
|
5361
|
+
text,
|
|
5362
|
+
heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
|
|
5363
|
+
link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
|
|
5364
|
+
supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
|
|
5365
|
+
};
|
|
5366
|
+
}
|
|
5367
|
+
function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FALLBACKS[role]) {
|
|
5368
|
+
const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
|
|
5369
|
+
const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
|
|
5370
|
+
if (role === "text") return `var(${roleVariable}, ${fallback})`;
|
|
5371
|
+
return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
|
|
5372
|
+
}
|
|
5373
|
+
function surfaceForegroundValueWithOpacity(role, opacityPercent) {
|
|
5374
|
+
if (!Number.isFinite(opacityPercent) || opacityPercent < 0 || opacityPercent > 100) throw new RangeError("Surface foreground opacity must be between 0 and 100.");
|
|
5375
|
+
return `color-mix(in srgb, ${surfaceForegroundValue(role)} ${opacityPercent}%, transparent)`;
|
|
5376
|
+
}
|
|
5377
|
+
function surfaceForegroundStyle(input) {
|
|
5378
|
+
const foregrounds = completeSurfaceForegrounds(input);
|
|
5379
|
+
return {
|
|
5380
|
+
color: foregrounds.text,
|
|
5381
|
+
[SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
|
|
5382
|
+
[SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
|
|
5383
|
+
[SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
|
|
5384
|
+
[SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
|
|
5385
|
+
};
|
|
5386
|
+
}
|
|
5387
|
+
function surfaceForegroundDeclarations(input) {
|
|
5388
|
+
const foregrounds = completeSurfaceForegrounds(input);
|
|
5389
|
+
return [`color: ${foregrounds.text}`, ...SURFACE_FOREGROUND_ROLES.map((role) => `${SURFACE_FOREGROUND_CSS_VARS[role]}: ${foregrounds[role]}`)];
|
|
5390
|
+
}
|
|
5391
|
+
//#endregion
|
|
5392
|
+
//#region ../theme-core/src/palette/colors.ts
|
|
5393
|
+
const HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
|
|
5394
|
+
const NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
5395
|
+
const THEME_PALETTE_COLOR_ORDER = [
|
|
5396
|
+
"primary",
|
|
5397
|
+
"secondary",
|
|
5398
|
+
"accent",
|
|
5399
|
+
"success",
|
|
5400
|
+
"warning",
|
|
5401
|
+
"destructive",
|
|
5402
|
+
"background",
|
|
5403
|
+
"surface",
|
|
5404
|
+
"surfaceAlt",
|
|
5405
|
+
"muted",
|
|
5406
|
+
"text",
|
|
5407
|
+
"primaryForeground",
|
|
5408
|
+
"border"
|
|
5409
|
+
];
|
|
5410
|
+
const hexColorSchema = z.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
|
|
5411
|
+
const paletteModeSchema = z.enum(["light", "dark"]);
|
|
5412
|
+
const PALETTE_VALUE_KEY_PREFIX = "palette-value:v1|";
|
|
5413
|
+
z.string().regex(/^[0-9a-f]{64}$/, "Palette hash must be a lowercase SHA-256 value").transform((value) => value);
|
|
5414
|
+
const paletteColorsSchema = z.object({
|
|
5415
|
+
primary: hexColorSchema,
|
|
5416
|
+
primaryForeground: hexColorSchema,
|
|
5417
|
+
secondary: hexColorSchema,
|
|
5418
|
+
accent: hexColorSchema,
|
|
5419
|
+
success: hexColorSchema,
|
|
5420
|
+
warning: hexColorSchema,
|
|
5421
|
+
destructive: hexColorSchema,
|
|
5422
|
+
background: hexColorSchema,
|
|
5423
|
+
surface: hexColorSchema,
|
|
5424
|
+
surfaceAlt: hexColorSchema,
|
|
5425
|
+
muted: hexColorSchema,
|
|
5426
|
+
text: hexColorSchema,
|
|
5427
|
+
border: hexColorSchema
|
|
5428
|
+
}).strict().transform((value) => value);
|
|
5429
|
+
function normalizePaletteHex(value) {
|
|
5430
|
+
if (!NORMALIZABLE_HEX_REGEX.test(value)) return null;
|
|
5431
|
+
const normalized = value.toLowerCase();
|
|
5432
|
+
if (normalized.length === 7) return normalized;
|
|
5433
|
+
const triplet = normalized.slice(1);
|
|
5434
|
+
const red = triplet.charAt(0);
|
|
5435
|
+
const green = triplet.charAt(1);
|
|
5436
|
+
const blue = triplet.charAt(2);
|
|
5437
|
+
return `#${red}${red}${green}${green}${blue}${blue}`;
|
|
5438
|
+
}
|
|
5439
|
+
function paletteColorsFromEntries(entries) {
|
|
5440
|
+
const values = {};
|
|
5441
|
+
for (const entry of entries) {
|
|
5442
|
+
const parsedRole = paletteTokenNameSchema.safeParse(entry.name);
|
|
5443
|
+
if (!parsedRole.success) return {
|
|
5444
|
+
ok: false,
|
|
5445
|
+
error: {
|
|
5446
|
+
kind: "unknown-role",
|
|
5447
|
+
role: entry.name
|
|
5448
|
+
}
|
|
5449
|
+
};
|
|
5450
|
+
const role = parsedRole.data;
|
|
5451
|
+
if (values[role] !== void 0) return {
|
|
5452
|
+
ok: false,
|
|
5453
|
+
error: {
|
|
5454
|
+
kind: "duplicate-role",
|
|
5455
|
+
role
|
|
5456
|
+
}
|
|
5457
|
+
};
|
|
5458
|
+
const hex = normalizePaletteHex(entry.hex);
|
|
5459
|
+
if (!hex) return {
|
|
5460
|
+
ok: false,
|
|
5461
|
+
error: {
|
|
5462
|
+
kind: "invalid-color",
|
|
5463
|
+
role,
|
|
5464
|
+
value: entry.hex
|
|
5465
|
+
}
|
|
5466
|
+
};
|
|
5467
|
+
values[role] = hex;
|
|
5468
|
+
}
|
|
5469
|
+
const missing = PALETTE_TOKEN_NAMES.filter((role) => values[role] === void 0);
|
|
5470
|
+
if (missing.length > 0) return {
|
|
5471
|
+
ok: false,
|
|
5472
|
+
error: {
|
|
5473
|
+
kind: "missing-roles",
|
|
5474
|
+
roles: missing
|
|
5475
|
+
}
|
|
5476
|
+
};
|
|
5477
|
+
return {
|
|
5478
|
+
ok: true,
|
|
5479
|
+
colors: paletteColorsSchema.parse(values)
|
|
5480
|
+
};
|
|
5481
|
+
}
|
|
5482
|
+
function requirePaletteColorsFromEntries(entries) {
|
|
5483
|
+
const result = paletteColorsFromEntries(entries);
|
|
5484
|
+
if (result.ok) return result.colors;
|
|
5485
|
+
throw new Error(`Invalid complete palette: ${result.error.kind}`);
|
|
5486
|
+
}
|
|
5487
|
+
function paletteColorEntries(colors) {
|
|
5488
|
+
return THEME_PALETTE_COLOR_ORDER.map((name) => ({
|
|
5489
|
+
name,
|
|
5490
|
+
hex: colors[name]
|
|
5491
|
+
}));
|
|
5492
|
+
}
|
|
5493
|
+
function paletteColorFingerprint(colors) {
|
|
5494
|
+
return PALETTE_TOKEN_NAMES.map((name) => `${name}:${colors[name]}`).join("|");
|
|
5495
|
+
}
|
|
5496
|
+
function canonicalPaletteHashInput(colors, mode) {
|
|
5497
|
+
return `${mode}|${paletteColorFingerprint(colors)}`;
|
|
5498
|
+
}
|
|
5499
|
+
/**
|
|
5500
|
+
* Stable curated-catalogue identity. Do not reorder roles: the order comes
|
|
5501
|
+
* from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
|
|
5502
|
+
*/
|
|
5503
|
+
function paletteValueKey(colors, mode) {
|
|
5504
|
+
return `${PALETTE_VALUE_KEY_PREFIX}${canonicalPaletteHashInput(colors, mode)}`;
|
|
5505
|
+
}
|
|
5506
|
+
/** Parses only the exact v1 canonical form emitted by paletteValueKey. */
|
|
5507
|
+
function parsePaletteValueKey(value) {
|
|
5508
|
+
if (typeof value !== "string" || !value.startsWith(PALETTE_VALUE_KEY_PREFIX)) return null;
|
|
5509
|
+
const [rawMode, ...rawRoles] = value.slice(17).split("|");
|
|
5510
|
+
const mode = paletteModeSchema.safeParse(rawMode);
|
|
5511
|
+
if (!mode.success || rawRoles.length !== PALETTE_TOKEN_NAMES.length) return null;
|
|
5512
|
+
const colors = paletteColorsFromEntries(rawRoles.map((roleValue) => {
|
|
5513
|
+
const separator = roleValue.indexOf(":");
|
|
5514
|
+
return separator === -1 ? {
|
|
5515
|
+
name: "",
|
|
5516
|
+
hex: ""
|
|
5517
|
+
} : {
|
|
5518
|
+
name: roleValue.slice(0, separator),
|
|
5519
|
+
hex: roleValue.slice(separator + 1)
|
|
5520
|
+
};
|
|
5521
|
+
}));
|
|
5522
|
+
if (!colors.ok || paletteValueKey(colors.colors, mode.data) !== value) return null;
|
|
5523
|
+
return value;
|
|
5524
|
+
}
|
|
5525
|
+
const paletteValueKeySchema = z.string().transform((value, ctx) => {
|
|
5526
|
+
const parsed = parsePaletteValueKey(value);
|
|
5527
|
+
if (parsed) return parsed;
|
|
5528
|
+
ctx.addIssue({
|
|
5529
|
+
code: "custom",
|
|
5530
|
+
message: "Invalid canonical palette value key"
|
|
5531
|
+
});
|
|
5532
|
+
return z.NEVER;
|
|
5533
|
+
});
|
|
5534
|
+
//#endregion
|
|
5535
|
+
//#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
|
|
5536
|
+
/** Resolve an opaque colour, compositing alpha against an explicit underlay. */
|
|
5537
|
+
function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
|
|
5538
|
+
const opaque = resolveConcreteColorHex(reference, palette);
|
|
5539
|
+
if (opaque) return opaque;
|
|
5540
|
+
if (!underlayReference) return null;
|
|
5541
|
+
const underlayHex = resolveConcreteColorHex(underlayReference, palette);
|
|
5542
|
+
if (!underlayHex) return null;
|
|
5543
|
+
const parts = parseColorTokenParts(reference);
|
|
5544
|
+
if (parts.kind === "token" && parts.opacityPercent !== null) {
|
|
5545
|
+
const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
|
|
5546
|
+
return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
|
|
5547
|
+
}
|
|
5548
|
+
const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
|
|
5549
|
+
return rgba ? compositeHex(rgbToHex(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
|
|
5550
|
+
}
|
|
5551
|
+
/** Resolve a colour reference only when it is already fully opaque. */
|
|
5552
|
+
function resolveConcreteColorHex(reference, palette) {
|
|
5553
|
+
const literalHex = normalizePaletteHex(reference);
|
|
5554
|
+
if (literalHex) return literalHex;
|
|
5555
|
+
const parts = parseColorTokenParts(reference);
|
|
5556
|
+
if (parts.kind === "token") {
|
|
5557
|
+
if (parts.opacityPercent !== null) return null;
|
|
5558
|
+
return normalizePaletteHex(palette[parts.token] ?? "");
|
|
5559
|
+
}
|
|
5560
|
+
const literal = parts.kind === "raw" ? parts.value : reference;
|
|
5561
|
+
if (literal.toLowerCase() === "black") return "#000000";
|
|
5562
|
+
if (literal.toLowerCase() === "white") return "#ffffff";
|
|
5563
|
+
return normalizePaletteHex(literal);
|
|
5564
|
+
}
|
|
5565
|
+
function compositeHex(foregroundHex, underlayHex, alpha) {
|
|
5566
|
+
const foreground = hexToRgb(foregroundHex);
|
|
5567
|
+
const underlay = hexToRgb(underlayHex);
|
|
5568
|
+
const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
|
|
5569
|
+
return rgbToHex(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
|
|
5570
|
+
}
|
|
5571
|
+
function parseRgba(value) {
|
|
5572
|
+
const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
|
|
5573
|
+
if (!match) return null;
|
|
5574
|
+
const [, rSource, gSource, bSource] = match;
|
|
5575
|
+
if (!rSource || !gSource || !bSource) return null;
|
|
5576
|
+
const r = Number(rSource);
|
|
5577
|
+
const g = Number(gSource);
|
|
5578
|
+
const b = Number(bSource);
|
|
5579
|
+
const alpha = parseAlpha(match[4]);
|
|
5580
|
+
if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
|
|
5581
|
+
return {
|
|
5582
|
+
r,
|
|
5583
|
+
g,
|
|
5584
|
+
b,
|
|
5585
|
+
alpha
|
|
5586
|
+
};
|
|
5587
|
+
}
|
|
5588
|
+
function parseAlpha(source) {
|
|
5589
|
+
if (!source) return 1;
|
|
5590
|
+
const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
|
|
5591
|
+
return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
|
|
5592
|
+
}
|
|
5593
|
+
function isRgbChannel(value) {
|
|
5594
|
+
return Number.isFinite(value) && value >= 0 && value <= 255;
|
|
5595
|
+
}
|
|
5596
|
+
//#endregion
|
|
5597
|
+
//#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
|
|
5598
|
+
const FALLBACK_TEXT_TOKENS = [
|
|
5599
|
+
"text",
|
|
5600
|
+
"primaryForeground",
|
|
5601
|
+
"secondaryForeground",
|
|
5602
|
+
"accentForeground",
|
|
5603
|
+
"neutral-950",
|
|
5604
|
+
"neutral-50"
|
|
5605
|
+
];
|
|
5606
|
+
const CANONICAL_EQUIVALENT_TOKEN_ORDER = [
|
|
5607
|
+
"text",
|
|
5608
|
+
"primaryForeground",
|
|
5609
|
+
"secondaryForeground",
|
|
5610
|
+
"accentForeground",
|
|
5611
|
+
"onPrimary",
|
|
5612
|
+
"onSecondary",
|
|
5613
|
+
"onAccent",
|
|
5614
|
+
"onSurface",
|
|
5615
|
+
"neutral-950",
|
|
5616
|
+
"neutral-50"
|
|
5617
|
+
];
|
|
5618
|
+
/**
|
|
5619
|
+
* Resolve the complete foreground contract for an effective page/section or
|
|
5620
|
+
* site-chrome background.
|
|
5621
|
+
*
|
|
5622
|
+
* Deterministic colour backgrounds are validated at ordinary-text WCAG AA.
|
|
5623
|
+
* Existing image/video/gradient treatments are trusted only when they already
|
|
5624
|
+
* carry a usable foreground token; this function deliberately does not claim
|
|
5625
|
+
* pixel-level contrast proof for media.
|
|
5626
|
+
*/
|
|
5627
|
+
function resolveSurfaceForeground(background, palette, candidates = {}, options = {}) {
|
|
5628
|
+
const authored = foregroundCandidates(background, candidates);
|
|
5629
|
+
if (background === null) return resolveDeterministicForeground("background", {
|
|
5630
|
+
...authored,
|
|
5631
|
+
text: authored.text ?? "text"
|
|
5632
|
+
}, palette);
|
|
5633
|
+
if (background.type === "color") {
|
|
5634
|
+
const backgroundReference = normalizedReference(background.color);
|
|
5635
|
+
if (!backgroundReference || backgroundReference === "transparent") return { kind: "unknown" };
|
|
5636
|
+
return resolveDeterministicForeground(backgroundReference, authored, palette, options.compositeBase);
|
|
5637
|
+
}
|
|
5638
|
+
return resolveTrustedTreatmentForeground(authored, palette);
|
|
5639
|
+
}
|
|
5640
|
+
function foregroundCandidates(background, overrides) {
|
|
5641
|
+
return {
|
|
5642
|
+
text: overrides.text ?? background?.textColor ?? null,
|
|
5643
|
+
heading: overrides.heading ?? background?.headingColor ?? null,
|
|
5644
|
+
link: overrides.link ?? background?.linkColor ?? null,
|
|
5645
|
+
supporting: overrides.supporting ?? background?.supportingColor ?? null
|
|
5646
|
+
};
|
|
5647
|
+
}
|
|
5648
|
+
function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
|
|
5649
|
+
const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
|
|
5650
|
+
if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
|
|
5651
|
+
const backgroundToken = paletteToken(backgroundReference);
|
|
5652
|
+
const derivedOnToken = backgroundToken ? onColorTokenName(backgroundToken) : null;
|
|
5653
|
+
const text = firstSafeToken([
|
|
5654
|
+
candidates.text,
|
|
5655
|
+
derivedOnToken,
|
|
5656
|
+
...FALLBACK_TEXT_TOKENS
|
|
5657
|
+
], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
|
|
5658
|
+
if (!text) return { kind: "unknown" };
|
|
5659
|
+
return {
|
|
5660
|
+
kind: "known",
|
|
5661
|
+
roles: {
|
|
5662
|
+
text,
|
|
5663
|
+
heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
|
|
5664
|
+
link: safeTokenOr(candidates.link, text, backgroundHex, palette),
|
|
5665
|
+
supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
|
|
5666
|
+
}
|
|
5667
|
+
};
|
|
5668
|
+
}
|
|
5669
|
+
function resolveTrustedTreatmentForeground(candidates, palette) {
|
|
5670
|
+
const text = canonicalToken(candidates.text, palette);
|
|
5671
|
+
if (!text) return { kind: "unknown" };
|
|
5672
|
+
return {
|
|
5673
|
+
kind: "known",
|
|
5674
|
+
roles: {
|
|
5675
|
+
text,
|
|
5676
|
+
heading: canonicalToken(candidates.heading, palette) ?? text,
|
|
5677
|
+
link: canonicalToken(candidates.link, palette) ?? text,
|
|
5678
|
+
supporting: canonicalToken(candidates.supporting, palette) ?? text
|
|
5679
|
+
}
|
|
5680
|
+
};
|
|
5681
|
+
}
|
|
5682
|
+
function safeTokenOr(candidate, fallback, backgroundHex, palette) {
|
|
5683
|
+
return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
|
|
5684
|
+
}
|
|
5685
|
+
function firstSafeToken(candidates, backgroundHex, palette, preferredEquivalentTokens = []) {
|
|
5686
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5687
|
+
for (const candidate of candidates) {
|
|
5688
|
+
const token = canonicalToken(candidate, palette, preferredEquivalentTokens);
|
|
5689
|
+
if (!token || seen.has(token)) continue;
|
|
5690
|
+
seen.add(token);
|
|
5691
|
+
const foregroundHex = resolveConcreteColorHex(token, palette);
|
|
5692
|
+
if (foregroundHex && contrastRatio(backgroundHex, foregroundHex) >= 4.5) return token;
|
|
5693
|
+
}
|
|
5694
|
+
return null;
|
|
5695
|
+
}
|
|
5696
|
+
function canonicalToken(reference, palette, preferredEquivalentTokens = []) {
|
|
5697
|
+
const normalized = normalizedReference(reference);
|
|
5698
|
+
if (!normalized || normalized === "transparent") return null;
|
|
5699
|
+
const direct = parseThemeColorToken(normalized);
|
|
5700
|
+
if (direct && resolveConcreteColorHex(direct, palette)) return direct;
|
|
5701
|
+
const referenceHex = resolveConcreteColorHex(normalized, palette);
|
|
5702
|
+
if (!referenceHex) return null;
|
|
5703
|
+
const equivalent = [
|
|
5704
|
+
...preferredEquivalentTokens,
|
|
5705
|
+
...CANONICAL_EQUIVALENT_TOKEN_ORDER,
|
|
5706
|
+
...Object.keys(palette).sort()
|
|
5707
|
+
].find((token) => {
|
|
5708
|
+
const parsed = parseThemeColorToken(token);
|
|
5709
|
+
return parsed !== null && resolveConcreteColorHex(parsed, palette)?.toLowerCase() === referenceHex.toLowerCase();
|
|
5710
|
+
});
|
|
5711
|
+
return equivalent ? parseThemeColorToken(equivalent) : null;
|
|
5712
|
+
}
|
|
5713
|
+
function paletteToken(reference) {
|
|
5714
|
+
const parts = parseColorTokenParts(reference);
|
|
5715
|
+
return parts.kind === "token" && parts.opacityPercent === null ? parts.token : null;
|
|
5716
|
+
}
|
|
5717
|
+
function normalizedReference(value) {
|
|
5718
|
+
if (typeof value !== "string") return null;
|
|
5719
|
+
const normalized = value.trim();
|
|
5720
|
+
return normalized.length > 0 ? normalized : null;
|
|
5721
|
+
}
|
|
5722
|
+
//#endregion
|
|
5723
|
+
//#region ../theme-core/src/utils/colorStyles.ts
|
|
5724
|
+
const COLOR_VAR_PREFIX = "--tb-";
|
|
5725
|
+
function parseToken(source) {
|
|
5726
|
+
const parts = parseColorTokenParts(source);
|
|
5727
|
+
if (parts.kind === "raw") return {
|
|
5728
|
+
token: source,
|
|
5729
|
+
raw: parts.value
|
|
5730
|
+
};
|
|
5731
|
+
if (parts.kind === "invalid") return { token: source };
|
|
5732
|
+
return {
|
|
5733
|
+
token: parts.token,
|
|
5734
|
+
opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
|
|
5735
|
+
};
|
|
5736
|
+
}
|
|
5737
|
+
const SURFACE_TEXT_ROLE_BY_TOKEN = {
|
|
5738
|
+
text: "text",
|
|
5739
|
+
heading: "heading",
|
|
5740
|
+
mutedText: "supporting"
|
|
5741
|
+
};
|
|
5742
|
+
function surfaceRoleForTextToken(token) {
|
|
5743
|
+
return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
|
|
5744
|
+
}
|
|
5745
|
+
/**
|
|
5746
|
+
* Converts a theme color token to a CSS rgb value.
|
|
5747
|
+
* This is the primary function for applying theme colors to CSS properties.
|
|
5748
|
+
*
|
|
5749
|
+
* @param token - Theme color token (semantic, with opacity, or raw)
|
|
5750
|
+
* @returns CSS color value (rgb with optional alpha, or raw CSS value)
|
|
5751
|
+
*
|
|
5752
|
+
* @example
|
|
5753
|
+
* rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
|
|
5754
|
+
* rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
|
|
5755
|
+
* rgbColorValue('raw:transparent') // => 'transparent'
|
|
5756
|
+
*/
|
|
5757
|
+
function rgbColorValue(token) {
|
|
5758
|
+
const { token: baseToken, opacityPercent, raw } = parseToken(token);
|
|
5759
|
+
if (raw) return raw;
|
|
5760
|
+
const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
|
|
5761
|
+
if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
|
|
5762
|
+
return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
|
|
5763
|
+
}
|
|
5764
|
+
/**
|
|
5765
|
+
* Converts a theme color token to a CSS variable reference.
|
|
5766
|
+
* Note: This returns the base variable without rgb() wrapper, ignoring opacity.
|
|
5767
|
+
*
|
|
5768
|
+
* @param token - Theme color token
|
|
5769
|
+
* @returns CSS variable reference
|
|
5770
|
+
*
|
|
5771
|
+
* @example
|
|
5772
|
+
* cssVarValue('primary') // => 'var(--tb-primary)'
|
|
5773
|
+
* cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
|
|
5774
|
+
*/
|
|
5775
|
+
function cssVarValue(token) {
|
|
5776
|
+
const { token: baseToken } = parseToken(token);
|
|
5777
|
+
return `var(${COLOR_VAR_PREFIX}${baseToken})`;
|
|
5778
|
+
}
|
|
5779
|
+
/**
|
|
5780
|
+
* Creates a backgroundColor style object from a theme token.
|
|
5781
|
+
*
|
|
5782
|
+
* @param token - Theme color token
|
|
5783
|
+
* @returns CSSProperties with backgroundColor
|
|
5784
|
+
*/
|
|
5785
|
+
function backgroundColorStyle(token) {
|
|
5786
|
+
return { backgroundColor: rgbColorValue(token) };
|
|
5787
|
+
}
|
|
5788
|
+
/**
|
|
5789
|
+
* Creates a text color style object from a theme token.
|
|
5790
|
+
*
|
|
5791
|
+
* @param token - Theme color token
|
|
5792
|
+
* @returns CSSProperties with color
|
|
5793
|
+
*/
|
|
5794
|
+
function textColorStyle(token) {
|
|
5795
|
+
const parsed = parseToken(token);
|
|
5796
|
+
const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
|
|
5797
|
+
if (surfaceRole) return { color: parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent) };
|
|
5798
|
+
return { color: rgbColorValue(token) };
|
|
5799
|
+
}
|
|
5800
|
+
/**
|
|
5801
|
+
* Creates a border color style object from a theme token.
|
|
5802
|
+
*
|
|
5803
|
+
* @param token - Theme color token
|
|
5804
|
+
* @returns CSSProperties with borderColor
|
|
5805
|
+
*/
|
|
5806
|
+
function borderColorStyle(token) {
|
|
5807
|
+
return { borderColor: rgbColorValue(token) };
|
|
5808
|
+
}
|
|
5809
|
+
/**
|
|
5810
|
+
* Merges multiple CSSProperties objects into a single object.
|
|
5811
|
+
* Later styles override earlier ones. Undefined values are filtered out.
|
|
5812
|
+
* Returns undefined if the merged result is empty.
|
|
5813
|
+
*
|
|
5814
|
+
* @param styles - Variable number of CSSProperties objects (can be undefined)
|
|
5815
|
+
* @returns Merged CSSProperties object, or undefined if empty
|
|
5816
|
+
*
|
|
5817
|
+
* @example
|
|
5818
|
+
* mergeStyles(
|
|
5819
|
+
* backgroundColorStyle('surface'),
|
|
5820
|
+
* textColorStyle('text'),
|
|
5821
|
+
* borderColorStyle('border')
|
|
5822
|
+
* )
|
|
5823
|
+
* // => { backgroundColor: '...', color: '...', borderColor: '...' }
|
|
5824
|
+
*/
|
|
5825
|
+
function mergeStyles(...styles) {
|
|
5826
|
+
const merged = {};
|
|
5827
|
+
for (const style of styles) {
|
|
5828
|
+
if (!style) continue;
|
|
5829
|
+
Object.assign(merged, style);
|
|
5830
|
+
}
|
|
5831
|
+
return Object.keys(merged).length ? merged : void 0;
|
|
5832
|
+
}
|
|
5833
|
+
//#endregion
|
|
5289
5834
|
//#region ../theme-core/src/tokens/resolver.ts
|
|
5290
5835
|
/**
|
|
5291
5836
|
* Resolves theme tokens to CSS variables
|
|
@@ -5312,7 +5857,7 @@ var TokenResolver = class {
|
|
|
5312
5857
|
*/
|
|
5313
5858
|
getColor(token) {
|
|
5314
5859
|
if (!this.tokenExists(token)) console.warn(`[TokenResolver] Color token "${token}" not found in theme palette. Button may render incorrectly.`);
|
|
5315
|
-
return
|
|
5860
|
+
return rgbColorValue(token);
|
|
5316
5861
|
}
|
|
5317
5862
|
/**
|
|
5318
5863
|
* Adjust a color token's shade by a given amount
|
|
@@ -6018,398 +6563,6 @@ function resolveCardRole(theme, cardSystem, role) {
|
|
|
6018
6563
|
}
|
|
6019
6564
|
}
|
|
6020
6565
|
//#endregion
|
|
6021
|
-
//#region ../theme-core/src/surfaces/foregroundRoles.ts
|
|
6022
|
-
const SURFACE_FOREGROUND_ROLES = [
|
|
6023
|
-
"text",
|
|
6024
|
-
"heading",
|
|
6025
|
-
"link",
|
|
6026
|
-
"supporting"
|
|
6027
|
-
];
|
|
6028
|
-
//#endregion
|
|
6029
|
-
//#region ../theme-core/src/surfaces/foregroundContract.ts
|
|
6030
|
-
const SURFACE_FOREGROUND_CSS_VARS = {
|
|
6031
|
-
text: "--rb-surface-text-color",
|
|
6032
|
-
heading: "--rb-surface-heading-color",
|
|
6033
|
-
link: "--rb-surface-link-color",
|
|
6034
|
-
supporting: "--rb-surface-supporting-color"
|
|
6035
|
-
};
|
|
6036
|
-
const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
|
|
6037
|
-
const DEFAULT_ROLE_FALLBACKS = {
|
|
6038
|
-
text: DEFAULT_SURFACE_TEXT_COLOR,
|
|
6039
|
-
heading: DEFAULT_SURFACE_TEXT_COLOR,
|
|
6040
|
-
link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
|
|
6041
|
-
supporting: "rgb(var(--tb-mutedText, 100 116 139))"
|
|
6042
|
-
};
|
|
6043
|
-
function requireSurfaceColorValue(role, value) {
|
|
6044
|
-
const normalized = value.trim();
|
|
6045
|
-
if (normalized.length === 0) throw new RangeError(`Surface foreground ${role} must be a non-empty CSS color.`);
|
|
6046
|
-
return normalized;
|
|
6047
|
-
}
|
|
6048
|
-
function completeSurfaceForegrounds(input) {
|
|
6049
|
-
const text = requireSurfaceColorValue("text", input.text);
|
|
6050
|
-
return {
|
|
6051
|
-
text,
|
|
6052
|
-
heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
|
|
6053
|
-
link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
|
|
6054
|
-
supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
|
|
6055
|
-
};
|
|
6056
|
-
}
|
|
6057
|
-
function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FALLBACKS[role]) {
|
|
6058
|
-
const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
|
|
6059
|
-
const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
|
|
6060
|
-
if (role === "text") return `var(${roleVariable}, ${fallback})`;
|
|
6061
|
-
return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
|
|
6062
|
-
}
|
|
6063
|
-
function surfaceForegroundValueWithOpacity(role, opacityPercent) {
|
|
6064
|
-
if (!Number.isFinite(opacityPercent) || opacityPercent < 0 || opacityPercent > 100) throw new RangeError("Surface foreground opacity must be between 0 and 100.");
|
|
6065
|
-
return `color-mix(in srgb, ${surfaceForegroundValue(role)} ${opacityPercent}%, transparent)`;
|
|
6066
|
-
}
|
|
6067
|
-
function surfaceForegroundStyle(input) {
|
|
6068
|
-
const foregrounds = completeSurfaceForegrounds(input);
|
|
6069
|
-
return {
|
|
6070
|
-
color: foregrounds.text,
|
|
6071
|
-
[SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
|
|
6072
|
-
[SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
|
|
6073
|
-
[SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
|
|
6074
|
-
[SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
|
|
6075
|
-
};
|
|
6076
|
-
}
|
|
6077
|
-
function surfaceForegroundDeclarations(input) {
|
|
6078
|
-
const foregrounds = completeSurfaceForegrounds(input);
|
|
6079
|
-
return [`color: ${foregrounds.text}`, ...SURFACE_FOREGROUND_ROLES.map((role) => `${SURFACE_FOREGROUND_CSS_VARS[role]}: ${foregrounds[role]}`)];
|
|
6080
|
-
}
|
|
6081
|
-
//#endregion
|
|
6082
|
-
//#region ../theme-core/src/palette/colors.ts
|
|
6083
|
-
const HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
|
|
6084
|
-
const NORMALIZABLE_HEX_REGEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
6085
|
-
const THEME_PALETTE_COLOR_ORDER = [
|
|
6086
|
-
"primary",
|
|
6087
|
-
"secondary",
|
|
6088
|
-
"accent",
|
|
6089
|
-
"success",
|
|
6090
|
-
"warning",
|
|
6091
|
-
"destructive",
|
|
6092
|
-
"background",
|
|
6093
|
-
"surface",
|
|
6094
|
-
"surfaceAlt",
|
|
6095
|
-
"muted",
|
|
6096
|
-
"text",
|
|
6097
|
-
"primaryForeground",
|
|
6098
|
-
"border"
|
|
6099
|
-
];
|
|
6100
|
-
const hexColorSchema = z.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
|
|
6101
|
-
const paletteModeSchema = z.enum(["light", "dark"]);
|
|
6102
|
-
const PALETTE_VALUE_KEY_PREFIX = "palette-value:v1|";
|
|
6103
|
-
z.string().regex(/^[0-9a-f]{64}$/, "Palette hash must be a lowercase SHA-256 value").transform((value) => value);
|
|
6104
|
-
const paletteColorsSchema = z.object({
|
|
6105
|
-
primary: hexColorSchema,
|
|
6106
|
-
primaryForeground: hexColorSchema,
|
|
6107
|
-
secondary: hexColorSchema,
|
|
6108
|
-
accent: hexColorSchema,
|
|
6109
|
-
success: hexColorSchema,
|
|
6110
|
-
warning: hexColorSchema,
|
|
6111
|
-
destructive: hexColorSchema,
|
|
6112
|
-
background: hexColorSchema,
|
|
6113
|
-
surface: hexColorSchema,
|
|
6114
|
-
surfaceAlt: hexColorSchema,
|
|
6115
|
-
muted: hexColorSchema,
|
|
6116
|
-
text: hexColorSchema,
|
|
6117
|
-
border: hexColorSchema
|
|
6118
|
-
}).strict().transform((value) => value);
|
|
6119
|
-
function normalizePaletteHex(value) {
|
|
6120
|
-
if (!NORMALIZABLE_HEX_REGEX.test(value)) return null;
|
|
6121
|
-
const normalized = value.toLowerCase();
|
|
6122
|
-
if (normalized.length === 7) return normalized;
|
|
6123
|
-
const triplet = normalized.slice(1);
|
|
6124
|
-
const red = triplet.charAt(0);
|
|
6125
|
-
const green = triplet.charAt(1);
|
|
6126
|
-
const blue = triplet.charAt(2);
|
|
6127
|
-
return `#${red}${red}${green}${green}${blue}${blue}`;
|
|
6128
|
-
}
|
|
6129
|
-
function paletteColorsFromEntries(entries) {
|
|
6130
|
-
const values = {};
|
|
6131
|
-
for (const entry of entries) {
|
|
6132
|
-
const parsedRole = paletteTokenNameSchema.safeParse(entry.name);
|
|
6133
|
-
if (!parsedRole.success) return {
|
|
6134
|
-
ok: false,
|
|
6135
|
-
error: {
|
|
6136
|
-
kind: "unknown-role",
|
|
6137
|
-
role: entry.name
|
|
6138
|
-
}
|
|
6139
|
-
};
|
|
6140
|
-
const role = parsedRole.data;
|
|
6141
|
-
if (values[role] !== void 0) return {
|
|
6142
|
-
ok: false,
|
|
6143
|
-
error: {
|
|
6144
|
-
kind: "duplicate-role",
|
|
6145
|
-
role
|
|
6146
|
-
}
|
|
6147
|
-
};
|
|
6148
|
-
const hex = normalizePaletteHex(entry.hex);
|
|
6149
|
-
if (!hex) return {
|
|
6150
|
-
ok: false,
|
|
6151
|
-
error: {
|
|
6152
|
-
kind: "invalid-color",
|
|
6153
|
-
role,
|
|
6154
|
-
value: entry.hex
|
|
6155
|
-
}
|
|
6156
|
-
};
|
|
6157
|
-
values[role] = hex;
|
|
6158
|
-
}
|
|
6159
|
-
const missing = PALETTE_TOKEN_NAMES.filter((role) => values[role] === void 0);
|
|
6160
|
-
if (missing.length > 0) return {
|
|
6161
|
-
ok: false,
|
|
6162
|
-
error: {
|
|
6163
|
-
kind: "missing-roles",
|
|
6164
|
-
roles: missing
|
|
6165
|
-
}
|
|
6166
|
-
};
|
|
6167
|
-
return {
|
|
6168
|
-
ok: true,
|
|
6169
|
-
colors: paletteColorsSchema.parse(values)
|
|
6170
|
-
};
|
|
6171
|
-
}
|
|
6172
|
-
function requirePaletteColorsFromEntries(entries) {
|
|
6173
|
-
const result = paletteColorsFromEntries(entries);
|
|
6174
|
-
if (result.ok) return result.colors;
|
|
6175
|
-
throw new Error(`Invalid complete palette: ${result.error.kind}`);
|
|
6176
|
-
}
|
|
6177
|
-
function paletteColorEntries(colors) {
|
|
6178
|
-
return THEME_PALETTE_COLOR_ORDER.map((name) => ({
|
|
6179
|
-
name,
|
|
6180
|
-
hex: colors[name]
|
|
6181
|
-
}));
|
|
6182
|
-
}
|
|
6183
|
-
function paletteColorFingerprint(colors) {
|
|
6184
|
-
return PALETTE_TOKEN_NAMES.map((name) => `${name}:${colors[name]}`).join("|");
|
|
6185
|
-
}
|
|
6186
|
-
function canonicalPaletteHashInput(colors, mode) {
|
|
6187
|
-
return `${mode}|${paletteColorFingerprint(colors)}`;
|
|
6188
|
-
}
|
|
6189
|
-
/**
|
|
6190
|
-
* Stable curated-catalogue identity. Do not reorder roles: the order comes
|
|
6191
|
-
* from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
|
|
6192
|
-
*/
|
|
6193
|
-
function paletteValueKey(colors, mode) {
|
|
6194
|
-
return `${PALETTE_VALUE_KEY_PREFIX}${canonicalPaletteHashInput(colors, mode)}`;
|
|
6195
|
-
}
|
|
6196
|
-
/** Parses only the exact v1 canonical form emitted by paletteValueKey. */
|
|
6197
|
-
function parsePaletteValueKey(value) {
|
|
6198
|
-
if (typeof value !== "string" || !value.startsWith(PALETTE_VALUE_KEY_PREFIX)) return null;
|
|
6199
|
-
const [rawMode, ...rawRoles] = value.slice(17).split("|");
|
|
6200
|
-
const mode = paletteModeSchema.safeParse(rawMode);
|
|
6201
|
-
if (!mode.success || rawRoles.length !== PALETTE_TOKEN_NAMES.length) return null;
|
|
6202
|
-
const colors = paletteColorsFromEntries(rawRoles.map((roleValue) => {
|
|
6203
|
-
const separator = roleValue.indexOf(":");
|
|
6204
|
-
return separator === -1 ? {
|
|
6205
|
-
name: "",
|
|
6206
|
-
hex: ""
|
|
6207
|
-
} : {
|
|
6208
|
-
name: roleValue.slice(0, separator),
|
|
6209
|
-
hex: roleValue.slice(separator + 1)
|
|
6210
|
-
};
|
|
6211
|
-
}));
|
|
6212
|
-
if (!colors.ok || paletteValueKey(colors.colors, mode.data) !== value) return null;
|
|
6213
|
-
return value;
|
|
6214
|
-
}
|
|
6215
|
-
const paletteValueKeySchema = z.string().transform((value, ctx) => {
|
|
6216
|
-
const parsed = parsePaletteValueKey(value);
|
|
6217
|
-
if (parsed) return parsed;
|
|
6218
|
-
ctx.addIssue({
|
|
6219
|
-
code: "custom",
|
|
6220
|
-
message: "Invalid canonical palette value key"
|
|
6221
|
-
});
|
|
6222
|
-
return z.NEVER;
|
|
6223
|
-
});
|
|
6224
|
-
//#endregion
|
|
6225
|
-
//#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
|
|
6226
|
-
/** Resolve an opaque colour, compositing alpha against an explicit underlay. */
|
|
6227
|
-
function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
|
|
6228
|
-
const opaque = resolveConcreteColorHex(reference, palette);
|
|
6229
|
-
if (opaque) return opaque;
|
|
6230
|
-
if (!underlayReference) return null;
|
|
6231
|
-
const underlayHex = resolveConcreteColorHex(underlayReference, palette);
|
|
6232
|
-
if (!underlayHex) return null;
|
|
6233
|
-
const parts = parseColorTokenParts(reference);
|
|
6234
|
-
if (parts.kind === "token" && parts.opacityPercent !== null) {
|
|
6235
|
-
const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
|
|
6236
|
-
return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
|
|
6237
|
-
}
|
|
6238
|
-
const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
|
|
6239
|
-
return rgba ? compositeHex(rgbToHex(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
|
|
6240
|
-
}
|
|
6241
|
-
/** Resolve a colour reference only when it is already fully opaque. */
|
|
6242
|
-
function resolveConcreteColorHex(reference, palette) {
|
|
6243
|
-
const literalHex = normalizePaletteHex(reference);
|
|
6244
|
-
if (literalHex) return literalHex;
|
|
6245
|
-
const parts = parseColorTokenParts(reference);
|
|
6246
|
-
if (parts.kind === "token") {
|
|
6247
|
-
if (parts.opacityPercent !== null) return null;
|
|
6248
|
-
return normalizePaletteHex(palette[parts.token] ?? "");
|
|
6249
|
-
}
|
|
6250
|
-
const literal = parts.kind === "raw" ? parts.value : reference;
|
|
6251
|
-
if (literal.toLowerCase() === "black") return "#000000";
|
|
6252
|
-
if (literal.toLowerCase() === "white") return "#ffffff";
|
|
6253
|
-
return normalizePaletteHex(literal);
|
|
6254
|
-
}
|
|
6255
|
-
function compositeHex(foregroundHex, underlayHex, alpha) {
|
|
6256
|
-
const foreground = hexToRgb(foregroundHex);
|
|
6257
|
-
const underlay = hexToRgb(underlayHex);
|
|
6258
|
-
const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
|
|
6259
|
-
return rgbToHex(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
|
|
6260
|
-
}
|
|
6261
|
-
function parseRgba(value) {
|
|
6262
|
-
const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
|
|
6263
|
-
if (!match) return null;
|
|
6264
|
-
const [, rSource, gSource, bSource] = match;
|
|
6265
|
-
if (!rSource || !gSource || !bSource) return null;
|
|
6266
|
-
const r = Number(rSource);
|
|
6267
|
-
const g = Number(gSource);
|
|
6268
|
-
const b = Number(bSource);
|
|
6269
|
-
const alpha = parseAlpha(match[4]);
|
|
6270
|
-
if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
|
|
6271
|
-
return {
|
|
6272
|
-
r,
|
|
6273
|
-
g,
|
|
6274
|
-
b,
|
|
6275
|
-
alpha
|
|
6276
|
-
};
|
|
6277
|
-
}
|
|
6278
|
-
function parseAlpha(source) {
|
|
6279
|
-
if (!source) return 1;
|
|
6280
|
-
const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
|
|
6281
|
-
return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
|
|
6282
|
-
}
|
|
6283
|
-
function isRgbChannel(value) {
|
|
6284
|
-
return Number.isFinite(value) && value >= 0 && value <= 255;
|
|
6285
|
-
}
|
|
6286
|
-
//#endregion
|
|
6287
|
-
//#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
|
|
6288
|
-
const FALLBACK_TEXT_TOKENS = [
|
|
6289
|
-
"text",
|
|
6290
|
-
"primaryForeground",
|
|
6291
|
-
"secondaryForeground",
|
|
6292
|
-
"accentForeground",
|
|
6293
|
-
"neutral-950",
|
|
6294
|
-
"neutral-50"
|
|
6295
|
-
];
|
|
6296
|
-
const CANONICAL_EQUIVALENT_TOKEN_ORDER = [
|
|
6297
|
-
"text",
|
|
6298
|
-
"primaryForeground",
|
|
6299
|
-
"secondaryForeground",
|
|
6300
|
-
"accentForeground",
|
|
6301
|
-
"onPrimary",
|
|
6302
|
-
"onSecondary",
|
|
6303
|
-
"onAccent",
|
|
6304
|
-
"onSurface",
|
|
6305
|
-
"neutral-950",
|
|
6306
|
-
"neutral-50"
|
|
6307
|
-
];
|
|
6308
|
-
/**
|
|
6309
|
-
* Resolve the complete foreground contract for an effective page/section or
|
|
6310
|
-
* site-chrome background.
|
|
6311
|
-
*
|
|
6312
|
-
* Deterministic colour backgrounds are validated at ordinary-text WCAG AA.
|
|
6313
|
-
* Existing image/video/gradient treatments are trusted only when they already
|
|
6314
|
-
* carry a usable foreground token; this function deliberately does not claim
|
|
6315
|
-
* pixel-level contrast proof for media.
|
|
6316
|
-
*/
|
|
6317
|
-
function resolveSurfaceForeground(background, palette, candidates = {}, options = {}) {
|
|
6318
|
-
const authored = foregroundCandidates(background, candidates);
|
|
6319
|
-
if (background === null) return resolveDeterministicForeground("background", {
|
|
6320
|
-
...authored,
|
|
6321
|
-
text: authored.text ?? "text"
|
|
6322
|
-
}, palette);
|
|
6323
|
-
if (background.type === "color") {
|
|
6324
|
-
const backgroundReference = normalizedReference(background.color);
|
|
6325
|
-
if (!backgroundReference || backgroundReference === "transparent") return { kind: "unknown" };
|
|
6326
|
-
return resolveDeterministicForeground(backgroundReference, authored, palette, options.compositeBase);
|
|
6327
|
-
}
|
|
6328
|
-
return resolveTrustedTreatmentForeground(authored, palette);
|
|
6329
|
-
}
|
|
6330
|
-
function foregroundCandidates(background, overrides) {
|
|
6331
|
-
return {
|
|
6332
|
-
text: overrides.text ?? background?.textColor ?? null,
|
|
6333
|
-
heading: overrides.heading ?? background?.headingColor ?? null,
|
|
6334
|
-
link: overrides.link ?? background?.linkColor ?? null,
|
|
6335
|
-
supporting: overrides.supporting ?? background?.supportingColor ?? null
|
|
6336
|
-
};
|
|
6337
|
-
}
|
|
6338
|
-
function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
|
|
6339
|
-
const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
|
|
6340
|
-
if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
|
|
6341
|
-
const backgroundToken = paletteToken(backgroundReference);
|
|
6342
|
-
const derivedOnToken = backgroundToken ? onColorTokenName(backgroundToken) : null;
|
|
6343
|
-
const text = firstSafeToken([
|
|
6344
|
-
candidates.text,
|
|
6345
|
-
derivedOnToken,
|
|
6346
|
-
...FALLBACK_TEXT_TOKENS
|
|
6347
|
-
], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
|
|
6348
|
-
if (!text) return { kind: "unknown" };
|
|
6349
|
-
return {
|
|
6350
|
-
kind: "known",
|
|
6351
|
-
roles: {
|
|
6352
|
-
text,
|
|
6353
|
-
heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
|
|
6354
|
-
link: safeTokenOr(candidates.link, text, backgroundHex, palette),
|
|
6355
|
-
supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
|
|
6356
|
-
}
|
|
6357
|
-
};
|
|
6358
|
-
}
|
|
6359
|
-
function resolveTrustedTreatmentForeground(candidates, palette) {
|
|
6360
|
-
const text = canonicalToken(candidates.text, palette);
|
|
6361
|
-
if (!text) return { kind: "unknown" };
|
|
6362
|
-
return {
|
|
6363
|
-
kind: "known",
|
|
6364
|
-
roles: {
|
|
6365
|
-
text,
|
|
6366
|
-
heading: canonicalToken(candidates.heading, palette) ?? text,
|
|
6367
|
-
link: canonicalToken(candidates.link, palette) ?? text,
|
|
6368
|
-
supporting: canonicalToken(candidates.supporting, palette) ?? text
|
|
6369
|
-
}
|
|
6370
|
-
};
|
|
6371
|
-
}
|
|
6372
|
-
function safeTokenOr(candidate, fallback, backgroundHex, palette) {
|
|
6373
|
-
return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
|
|
6374
|
-
}
|
|
6375
|
-
function firstSafeToken(candidates, backgroundHex, palette, preferredEquivalentTokens = []) {
|
|
6376
|
-
const seen = /* @__PURE__ */ new Set();
|
|
6377
|
-
for (const candidate of candidates) {
|
|
6378
|
-
const token = canonicalToken(candidate, palette, preferredEquivalentTokens);
|
|
6379
|
-
if (!token || seen.has(token)) continue;
|
|
6380
|
-
seen.add(token);
|
|
6381
|
-
const foregroundHex = resolveConcreteColorHex(token, palette);
|
|
6382
|
-
if (foregroundHex && contrastRatio(backgroundHex, foregroundHex) >= 4.5) return token;
|
|
6383
|
-
}
|
|
6384
|
-
return null;
|
|
6385
|
-
}
|
|
6386
|
-
function canonicalToken(reference, palette, preferredEquivalentTokens = []) {
|
|
6387
|
-
const normalized = normalizedReference(reference);
|
|
6388
|
-
if (!normalized || normalized === "transparent") return null;
|
|
6389
|
-
const direct = parseThemeColorToken(normalized);
|
|
6390
|
-
if (direct && resolveConcreteColorHex(direct, palette)) return direct;
|
|
6391
|
-
const referenceHex = resolveConcreteColorHex(normalized, palette);
|
|
6392
|
-
if (!referenceHex) return null;
|
|
6393
|
-
const equivalent = [
|
|
6394
|
-
...preferredEquivalentTokens,
|
|
6395
|
-
...CANONICAL_EQUIVALENT_TOKEN_ORDER,
|
|
6396
|
-
...Object.keys(palette).sort()
|
|
6397
|
-
].find((token) => {
|
|
6398
|
-
const parsed = parseThemeColorToken(token);
|
|
6399
|
-
return parsed !== null && resolveConcreteColorHex(parsed, palette)?.toLowerCase() === referenceHex.toLowerCase();
|
|
6400
|
-
});
|
|
6401
|
-
return equivalent ? parseThemeColorToken(equivalent) : null;
|
|
6402
|
-
}
|
|
6403
|
-
function paletteToken(reference) {
|
|
6404
|
-
const parts = parseColorTokenParts(reference);
|
|
6405
|
-
return parts.kind === "token" && parts.opacityPercent === null ? parts.token : null;
|
|
6406
|
-
}
|
|
6407
|
-
function normalizedReference(value) {
|
|
6408
|
-
if (typeof value !== "string") return null;
|
|
6409
|
-
const normalized = value.trim();
|
|
6410
|
-
return normalized.length > 0 ? normalized : null;
|
|
6411
|
-
}
|
|
6412
|
-
//#endregion
|
|
6413
6566
|
//#region ../theme-core/src/cards/generateCardCss.ts
|
|
6414
6567
|
const PER_CORNER_RADIUS_MAP = {
|
|
6415
6568
|
square: "0",
|
|
@@ -11378,8 +11531,14 @@ const headerInteractionPillPaletteValues = [
|
|
|
11378
11531
|
"accent"
|
|
11379
11532
|
];
|
|
11380
11533
|
/**
|
|
11381
|
-
* "No pill":
|
|
11382
|
-
*
|
|
11534
|
+
* "No pill": a colour change on hover rather than a filled background.
|
|
11535
|
+
*
|
|
11536
|
+
* The palette step writes nothing (#1318 Phase 4c decision 2), but on a
|
|
11537
|
+
* foreground-adaptive style that is not the end of the story: the hover colour
|
|
11538
|
+
* is derived from the resolved opening foreground at render time, paired with
|
|
11539
|
+
* the resting colour, so `quiet` resolves to a definite colour rather than to
|
|
11540
|
+
* whatever brand token the recipe happened to name. See
|
|
11541
|
+
* `applyOpeningForeground`.
|
|
11383
11542
|
*
|
|
11384
11543
|
* It exists because "a colour change on hover, no filled background" was not
|
|
11385
11544
|
* expressible in the vocabulary, and it is what
|
|
@@ -14588,117 +14747,6 @@ function affordanceIconMaskUrl(iconId) {
|
|
|
14588
14747
|
return `data:image/svg+xml,${`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>${paths.map((d) => `<path d='${d}'/>`).join("")}</svg>`.replace(/"/g, "'").replace(/#/g, "%23").replace(/</g, "%3C").replace(/>/g, "%3E").replace(/\s+/g, " ")}`;
|
|
14589
14748
|
}
|
|
14590
14749
|
//#endregion
|
|
14591
|
-
//#region ../theme-core/src/utils/colorStyles.ts
|
|
14592
|
-
const COLOR_VAR_PREFIX = "--tb-";
|
|
14593
|
-
function parseToken(source) {
|
|
14594
|
-
const parts = parseColorTokenParts(source);
|
|
14595
|
-
if (parts.kind === "raw") return {
|
|
14596
|
-
token: source,
|
|
14597
|
-
raw: parts.value
|
|
14598
|
-
};
|
|
14599
|
-
if (parts.kind === "invalid") return { token: source };
|
|
14600
|
-
return {
|
|
14601
|
-
token: parts.token,
|
|
14602
|
-
opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
|
|
14603
|
-
};
|
|
14604
|
-
}
|
|
14605
|
-
const SURFACE_TEXT_ROLE_BY_TOKEN = {
|
|
14606
|
-
text: "text",
|
|
14607
|
-
heading: "heading",
|
|
14608
|
-
mutedText: "supporting"
|
|
14609
|
-
};
|
|
14610
|
-
function surfaceRoleForTextToken(token) {
|
|
14611
|
-
return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
|
|
14612
|
-
}
|
|
14613
|
-
/**
|
|
14614
|
-
* Converts a theme color token to a CSS rgb value.
|
|
14615
|
-
* This is the primary function for applying theme colors to CSS properties.
|
|
14616
|
-
*
|
|
14617
|
-
* @param token - Theme color token (semantic, with opacity, or raw)
|
|
14618
|
-
* @returns CSS color value (rgb with optional alpha, or raw CSS value)
|
|
14619
|
-
*
|
|
14620
|
-
* @example
|
|
14621
|
-
* rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
|
|
14622
|
-
* rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
|
|
14623
|
-
* rgbColorValue('raw:transparent') // => 'transparent'
|
|
14624
|
-
*/
|
|
14625
|
-
function rgbColorValue(token) {
|
|
14626
|
-
const { token: baseToken, opacityPercent, raw } = parseToken(token);
|
|
14627
|
-
if (raw) return raw;
|
|
14628
|
-
const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
|
|
14629
|
-
if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
|
|
14630
|
-
return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
|
|
14631
|
-
}
|
|
14632
|
-
/**
|
|
14633
|
-
* Converts a theme color token to a CSS variable reference.
|
|
14634
|
-
* Note: This returns the base variable without rgb() wrapper, ignoring opacity.
|
|
14635
|
-
*
|
|
14636
|
-
* @param token - Theme color token
|
|
14637
|
-
* @returns CSS variable reference
|
|
14638
|
-
*
|
|
14639
|
-
* @example
|
|
14640
|
-
* cssVarValue('primary') // => 'var(--tb-primary)'
|
|
14641
|
-
* cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
|
|
14642
|
-
*/
|
|
14643
|
-
function cssVarValue(token) {
|
|
14644
|
-
const { token: baseToken } = parseToken(token);
|
|
14645
|
-
return `var(${COLOR_VAR_PREFIX}${baseToken})`;
|
|
14646
|
-
}
|
|
14647
|
-
/**
|
|
14648
|
-
* Creates a backgroundColor style object from a theme token.
|
|
14649
|
-
*
|
|
14650
|
-
* @param token - Theme color token
|
|
14651
|
-
* @returns CSSProperties with backgroundColor
|
|
14652
|
-
*/
|
|
14653
|
-
function backgroundColorStyle(token) {
|
|
14654
|
-
return { backgroundColor: rgbColorValue(token) };
|
|
14655
|
-
}
|
|
14656
|
-
/**
|
|
14657
|
-
* Creates a text color style object from a theme token.
|
|
14658
|
-
*
|
|
14659
|
-
* @param token - Theme color token
|
|
14660
|
-
* @returns CSSProperties with color
|
|
14661
|
-
*/
|
|
14662
|
-
function textColorStyle(token) {
|
|
14663
|
-
const parsed = parseToken(token);
|
|
14664
|
-
const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
|
|
14665
|
-
if (surfaceRole) return { color: parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent) };
|
|
14666
|
-
return { color: rgbColorValue(token) };
|
|
14667
|
-
}
|
|
14668
|
-
/**
|
|
14669
|
-
* Creates a border color style object from a theme token.
|
|
14670
|
-
*
|
|
14671
|
-
* @param token - Theme color token
|
|
14672
|
-
* @returns CSSProperties with borderColor
|
|
14673
|
-
*/
|
|
14674
|
-
function borderColorStyle(token) {
|
|
14675
|
-
return { borderColor: rgbColorValue(token) };
|
|
14676
|
-
}
|
|
14677
|
-
/**
|
|
14678
|
-
* Merges multiple CSSProperties objects into a single object.
|
|
14679
|
-
* Later styles override earlier ones. Undefined values are filtered out.
|
|
14680
|
-
* Returns undefined if the merged result is empty.
|
|
14681
|
-
*
|
|
14682
|
-
* @param styles - Variable number of CSSProperties objects (can be undefined)
|
|
14683
|
-
* @returns Merged CSSProperties object, or undefined if empty
|
|
14684
|
-
*
|
|
14685
|
-
* @example
|
|
14686
|
-
* mergeStyles(
|
|
14687
|
-
* backgroundColorStyle('surface'),
|
|
14688
|
-
* textColorStyle('text'),
|
|
14689
|
-
* borderColorStyle('border')
|
|
14690
|
-
* )
|
|
14691
|
-
* // => { backgroundColor: '...', color: '...', borderColor: '...' }
|
|
14692
|
-
*/
|
|
14693
|
-
function mergeStyles(...styles) {
|
|
14694
|
-
const merged = {};
|
|
14695
|
-
for (const style of styles) {
|
|
14696
|
-
if (!style) continue;
|
|
14697
|
-
Object.assign(merged, style);
|
|
14698
|
-
}
|
|
14699
|
-
return Object.keys(merged).length ? merged : void 0;
|
|
14700
|
-
}
|
|
14701
|
-
//#endregion
|
|
14702
14750
|
//#region ../theme-core/src/utils/tokenOrColor.ts
|
|
14703
14751
|
/**
|
|
14704
14752
|
* Runtime color-reference fields intentionally accept any string, including
|
|
@@ -26896,6 +26944,28 @@ const bookingRequirementConsentFieldSchema = z.object({
|
|
|
26896
26944
|
const bookingConsentCarrierSchema = z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
|
|
26897
26945
|
//#endregion
|
|
26898
26946
|
//#region ../blocks/src/system/blocks/events/shared/schemas.ts
|
|
26947
|
+
const publicEventLoaderQuerySchemaShape = {
|
|
26948
|
+
limit: z.string().optional(),
|
|
26949
|
+
from: z.string().optional(),
|
|
26950
|
+
to: z.string().optional(),
|
|
26951
|
+
afterStartsAt: z.string().optional(),
|
|
26952
|
+
afterId: z.string().optional(),
|
|
26953
|
+
categoryIds: z.string().optional(),
|
|
26954
|
+
venueId: z.string().optional(),
|
|
26955
|
+
staffMemberId: z.string().optional(),
|
|
26956
|
+
eventSurface: z.string().optional(),
|
|
26957
|
+
eventPresets: z.string().optional(),
|
|
26958
|
+
scheduleScope: z.string().optional(),
|
|
26959
|
+
seriesId: z.string().optional(),
|
|
26960
|
+
seriesIds: z.string().optional(),
|
|
26961
|
+
runSeriesId: z.string().optional(),
|
|
26962
|
+
seriesSlug: z.string().optional(),
|
|
26963
|
+
includeOccurrenceId: z.string().optional(),
|
|
26964
|
+
readIntent: z.string().optional(),
|
|
26965
|
+
detailLevel: z.string().optional(),
|
|
26966
|
+
readProfile: z.string().optional()
|
|
26967
|
+
};
|
|
26968
|
+
z.object(publicEventLoaderQuerySchemaShape);
|
|
26899
26969
|
const eventPresetSchema = z.enum([
|
|
26900
26970
|
"event",
|
|
26901
26971
|
"class",
|
|
@@ -30337,7 +30407,7 @@ const publicPricingSchema = z.object({
|
|
|
30337
30407
|
singlePriceAmount: z.number().nullable(),
|
|
30338
30408
|
slidingMinAmount: z.number().nullable(),
|
|
30339
30409
|
slidingMaxAmount: z.number().nullable(),
|
|
30340
|
-
options: z.array(publicPricingOptionSchema)
|
|
30410
|
+
options: z.array(publicPricingOptionSchema).readonly()
|
|
30341
30411
|
});
|
|
30342
30412
|
const publicAppointmentServiceSchema = z.object({
|
|
30343
30413
|
id: z.string().min(1),
|
|
@@ -36971,6 +37041,44 @@ function toWholeSeriesRegistrationEvents(events) {
|
|
|
36971
37041
|
return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
|
|
36972
37042
|
}
|
|
36973
37043
|
//#endregion
|
|
37044
|
+
//#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
|
|
37045
|
+
const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
|
|
37046
|
+
const eventRecoveryRequestSchema = z.object({
|
|
37047
|
+
...stringEventQueryShape,
|
|
37048
|
+
limit: z.coerce.number().int().positive().optional(),
|
|
37049
|
+
eventSurface: z.enum(eventSurfaceScopeValues).optional(),
|
|
37050
|
+
scheduleScope: z.enum(eventScheduleScopeValues).optional(),
|
|
37051
|
+
detailLevel: z.enum(["full", "listing"]).optional(),
|
|
37052
|
+
stage: z.enum(["preview", "published"]).optional()
|
|
37053
|
+
});
|
|
37054
|
+
function resolveEventRegistrationEventSource(input) {
|
|
37055
|
+
if (input.wholeSeriesRunEvents != null) return {
|
|
37056
|
+
kind: "loaded",
|
|
37057
|
+
events: input.wholeSeriesRunEvents
|
|
37058
|
+
};
|
|
37059
|
+
if (input.events != null) return {
|
|
37060
|
+
kind: "loaded",
|
|
37061
|
+
events: input.events
|
|
37062
|
+
};
|
|
37063
|
+
return {
|
|
37064
|
+
kind: "unresolved",
|
|
37065
|
+
request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
|
|
37066
|
+
};
|
|
37067
|
+
}
|
|
37068
|
+
const eventLoaderFailureSchema = z.object({
|
|
37069
|
+
endpoint: z.literal("listPublicEvents"),
|
|
37070
|
+
params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
|
|
37071
|
+
});
|
|
37072
|
+
function parseEventLoaderRecoveryRequest(value) {
|
|
37073
|
+
const parsed = eventLoaderFailureSchema.safeParse(value);
|
|
37074
|
+
if (!parsed.success) return null;
|
|
37075
|
+
const { siteId: _siteId, stage, ...params } = parsed.data.params;
|
|
37076
|
+
return {
|
|
37077
|
+
...params,
|
|
37078
|
+
stage: stage ?? "published"
|
|
37079
|
+
};
|
|
37080
|
+
}
|
|
37081
|
+
//#endregion
|
|
36974
37082
|
//#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
|
|
36975
37083
|
const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
|
|
36976
37084
|
"Date",
|
|
@@ -36988,8 +37096,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
|
|
|
36988
37096
|
const eventRegistrationHydrationSchemaShape = {
|
|
36989
37097
|
occurrenceContext: occurrenceContextSchema.optional(),
|
|
36990
37098
|
subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
|
|
36991
|
-
events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
36992
|
-
wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
36993
37099
|
maxTickets: z.string().optional(),
|
|
36994
37100
|
showVenue: z.boolean().optional(),
|
|
36995
37101
|
showCapacity: z.boolean().optional(),
|
|
@@ -37001,12 +37107,22 @@ const eventRegistrationHydrationSchemaShape = {
|
|
|
37001
37107
|
sitePasses: publicPassProductCollectionSchema.nullable().optional(),
|
|
37002
37108
|
siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
|
|
37003
37109
|
};
|
|
37110
|
+
const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
|
|
37111
|
+
kind: z.literal("loaded"),
|
|
37112
|
+
events: z.array(eventRegistrationPublicEventSchema)
|
|
37113
|
+
}), z.object({
|
|
37114
|
+
kind: z.literal("unresolved"),
|
|
37115
|
+
request: eventRecoveryRequestSchema.nullable()
|
|
37116
|
+
})]);
|
|
37004
37117
|
const eventRegistrationSourceSchema = z.object({
|
|
37005
37118
|
siteId: z.string().optional(),
|
|
37006
37119
|
apiBaseUrl: z.string().optional(),
|
|
37007
37120
|
portalToken: z.string().nullable().optional(),
|
|
37008
37121
|
previewToken: z.string().nullable().optional(),
|
|
37009
37122
|
...eventRegistrationHydrationSchemaShape,
|
|
37123
|
+
events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
37124
|
+
wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
37125
|
+
eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
37010
37126
|
className: z.string().nullable().optional(),
|
|
37011
37127
|
buttonText: z.string().nullable().optional(),
|
|
37012
37128
|
maxTickets: z.string().nullable().optional(),
|
|
@@ -37027,7 +37143,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
|
|
|
37027
37143
|
titleText: z.string(),
|
|
37028
37144
|
bodyText: z.string()
|
|
37029
37145
|
})]);
|
|
37030
|
-
const eventRegistrationHydrationSchema = z.object(
|
|
37146
|
+
const eventRegistrationHydrationSchema = z.object({
|
|
37147
|
+
...eventRegistrationHydrationSchemaShape,
|
|
37148
|
+
eventSource: eventRegistrationEventSourceSchema
|
|
37149
|
+
});
|
|
37031
37150
|
const eventRegistrationRenderSchema = z.object({
|
|
37032
37151
|
display: eventRegistrationDisplaySchema,
|
|
37033
37152
|
hydration: eventRegistrationHydrationSchema
|
|
@@ -37086,16 +37205,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
|
|
|
37086
37205
|
function toScopedEventRegistrationEvents(scopedSourceEvents) {
|
|
37087
37206
|
return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
|
|
37088
37207
|
}
|
|
37089
|
-
function scopeEventRegistrationSourceEvents(source) {
|
|
37090
|
-
return resolveEventRegistrationScopedEvents(
|
|
37208
|
+
function scopeEventRegistrationSourceEvents(source, eventSource) {
|
|
37209
|
+
return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
|
|
37091
37210
|
occurrenceContext: source.occurrenceContext,
|
|
37092
37211
|
subject: source.subject
|
|
37093
37212
|
});
|
|
37094
37213
|
}
|
|
37095
|
-
function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
|
|
37096
|
-
if (source.events == null && source.wholeSeriesRunEvents == null) return null;
|
|
37097
|
-
return [...scopedSourceEvents];
|
|
37098
|
-
}
|
|
37099
37214
|
/**
|
|
37100
37215
|
* The one run this surface is registering for, when the scoped events describe
|
|
37101
37216
|
* exactly one. More than one run means the visitor still has to choose.
|
|
@@ -37135,14 +37250,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
37135
37250
|
render: createZodCodec(eventRegistrationRenderSchema)
|
|
37136
37251
|
},
|
|
37137
37252
|
buildRender: (source) => {
|
|
37138
|
-
const
|
|
37139
|
-
|
|
37253
|
+
const eventSource = resolveEventRegistrationEventSource({
|
|
37254
|
+
events: source.events,
|
|
37255
|
+
wholeSeriesRunEvents: source.wholeSeriesRunEvents,
|
|
37256
|
+
failures: source.eventLoaderFailures
|
|
37257
|
+
});
|
|
37258
|
+
const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
|
|
37140
37259
|
return {
|
|
37141
37260
|
display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
|
|
37142
37261
|
hydration: {
|
|
37143
37262
|
occurrenceContext: source.occurrenceContext ?? null,
|
|
37144
37263
|
subject: source.subject ?? null,
|
|
37145
|
-
|
|
37264
|
+
eventSource: eventSource.kind === "loaded" ? {
|
|
37265
|
+
...eventSource,
|
|
37266
|
+
events: [...scopedSourceEvents]
|
|
37267
|
+
} : eventSource,
|
|
37146
37268
|
maxTickets: source.maxTickets ?? void 0,
|
|
37147
37269
|
showVenue: source.showVenue,
|
|
37148
37270
|
showCapacity: source.showCapacity,
|
|
@@ -37332,6 +37454,7 @@ const eventRegistrationBlockDefinition = {
|
|
|
37332
37454
|
} },
|
|
37333
37455
|
events: { $bind: { from: "data.events" } },
|
|
37334
37456
|
wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
|
|
37457
|
+
loaderFailures: { $bind: { from: "$root.loaderFailures" } },
|
|
37335
37458
|
sitePasses: { $bind: { from: "data.sitePasses" } },
|
|
37336
37459
|
siteMemberships: { $bind: { from: "data.siteMemberships" } },
|
|
37337
37460
|
stage: { $bind: {
|
|
@@ -39314,6 +39437,15 @@ const newsletterFieldSchema = z.object({
|
|
|
39314
39437
|
placeholder: z.string().optional()
|
|
39315
39438
|
});
|
|
39316
39439
|
const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
|
|
39440
|
+
const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
|
|
39441
|
+
const parsed = parseMailingListContentVersionId(value);
|
|
39442
|
+
if (parsed) return parsed;
|
|
39443
|
+
ctx.addIssue({
|
|
39444
|
+
code: z.ZodIssueCode.custom,
|
|
39445
|
+
message: "Invalid mailing-list content version ID"
|
|
39446
|
+
});
|
|
39447
|
+
return z.NEVER;
|
|
39448
|
+
});
|
|
39317
39449
|
const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
|
|
39318
39450
|
const newsletterSourceCommonSchema = z.object({
|
|
39319
39451
|
siteId: z.string().optional(),
|
|
@@ -39327,7 +39459,8 @@ const newsletterSourceCommonSchema = z.object({
|
|
|
39327
39459
|
const newsletterSourceSchema = z.discriminatedUnion("source", [
|
|
39328
39460
|
newsletterSourceCommonSchema.extend({
|
|
39329
39461
|
source: z.literal("block"),
|
|
39330
|
-
blockId: z.string().nullable().optional()
|
|
39462
|
+
blockId: z.string().nullable().optional(),
|
|
39463
|
+
contentVersionId: z.string().nullable().optional()
|
|
39331
39464
|
}),
|
|
39332
39465
|
newsletterSourceCommonSchema.extend({
|
|
39333
39466
|
source: z.literal("signed-footer"),
|
|
@@ -39343,6 +39476,7 @@ const newsletterDisplaySchema = z.object({
|
|
|
39343
39476
|
availability: z.enum(["ready", "unavailable"]),
|
|
39344
39477
|
className: z.string().nullable(),
|
|
39345
39478
|
buttonLabel: z.string(),
|
|
39479
|
+
successMessage: z.string(),
|
|
39346
39480
|
buttonVariant: newsletterButtonVariantSchema,
|
|
39347
39481
|
privacyNote: z.string().nullable(),
|
|
39348
39482
|
fields: z.array(newsletterFieldSchema),
|
|
@@ -39357,7 +39491,8 @@ const newsletterHydrationSchema = z.object({
|
|
|
39357
39491
|
tag: z.literal("block-source"),
|
|
39358
39492
|
sourceRef: z.object({
|
|
39359
39493
|
tag: z.literal("block_ref"),
|
|
39360
|
-
blockId: mailingListSignupBlockIdSchema
|
|
39494
|
+
blockId: mailingListSignupBlockIdSchema,
|
|
39495
|
+
contentVersionId: mailingListContentVersionIdSchema
|
|
39361
39496
|
}).nullable()
|
|
39362
39497
|
}),
|
|
39363
39498
|
z.object({
|
|
@@ -39396,6 +39531,7 @@ function buildNewsletterDisplay(source) {
|
|
|
39396
39531
|
fields: { preset: "emailOnly" },
|
|
39397
39532
|
includeOptionalPhone: false,
|
|
39398
39533
|
buttonLabel: "Subscribe",
|
|
39534
|
+
successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
|
|
39399
39535
|
privacyNote: null
|
|
39400
39536
|
};
|
|
39401
39537
|
const targeting = source.targeting ?? { mode: "default" };
|
|
@@ -39405,6 +39541,7 @@ function buildNewsletterDisplay(source) {
|
|
|
39405
39541
|
availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
|
|
39406
39542
|
className: source.className ?? null,
|
|
39407
39543
|
buttonLabel: form.buttonLabel,
|
|
39544
|
+
successMessage: form.successMessage,
|
|
39408
39545
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
39409
39546
|
privacyNote: form.privacyNote,
|
|
39410
39547
|
fields: getGlobalFormFields(form),
|
|
@@ -39435,7 +39572,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
39435
39572
|
function projectNewsletterFormHydrationTarget(source) {
|
|
39436
39573
|
switch (source.source) {
|
|
39437
39574
|
case "block": {
|
|
39438
|
-
const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
|
|
39575
|
+
const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
|
|
39439
39576
|
if (sourceRef?.tag === "block_ref") return {
|
|
39440
39577
|
tag: "block-source",
|
|
39441
39578
|
sourceRef
|
|
@@ -41860,9 +41997,10 @@ function cx(...classes) {
|
|
|
41860
41997
|
* Server-safe placeholder for event registration.
|
|
41861
41998
|
* Provides a static container for island hydration without importing client hooks.
|
|
41862
41999
|
*/
|
|
41863
|
-
function EventRegistrationSSR({ blockId, subject, children, ...sourceProps }) {
|
|
42000
|
+
function EventRegistrationSSR({ blockId, subject, loaderFailures, children, ...sourceProps }) {
|
|
41864
42001
|
const islandProps = buildEventRegistrationInteractiveIslandProps({
|
|
41865
42002
|
...sourceProps,
|
|
42003
|
+
eventLoaderFailures: blockId ? loaderFailures?.[blockId] : void 0,
|
|
41866
42004
|
subject: normalizeEventRegistrationPageSurfaceSubject(subject)
|
|
41867
42005
|
});
|
|
41868
42006
|
const display = islandProps.render.display;
|
|
@@ -42195,7 +42333,7 @@ function NewsletterFormSSR(props) {
|
|
|
42195
42333
|
className: clsx("newsletter-form-ssr", className),
|
|
42196
42334
|
children: /* @__PURE__ */ jsx("p", {
|
|
42197
42335
|
role: "status",
|
|
42198
|
-
children: "
|
|
42336
|
+
children: "We can’t accept signups right now. Please try again later."
|
|
42199
42337
|
})
|
|
42200
42338
|
});
|
|
42201
42339
|
const renderField = (field) => {
|
|
@@ -42241,14 +42379,18 @@ function NewsletterFormSSR(props) {
|
|
|
42241
42379
|
children: [
|
|
42242
42380
|
fields.map(renderField),
|
|
42243
42381
|
islandProps.render.hydration.choicePresentation === "visitor_choice" ? /* @__PURE__ */ jsxs("fieldset", {
|
|
42244
|
-
className: "newsletter-topics",
|
|
42245
|
-
children: [/* @__PURE__ */ jsx("legend", {
|
|
42246
|
-
className: "
|
|
42382
|
+
className: "fb-fieldset newsletter-topics",
|
|
42383
|
+
children: [/* @__PURE__ */ jsx("legend", {
|
|
42384
|
+
className: "form-label",
|
|
42385
|
+
children: "What would you like to hear about?"
|
|
42386
|
+
}), display.choices.map((choice) => /* @__PURE__ */ jsxs("label", {
|
|
42387
|
+
className: "fb-inline form-label newsletter-topic-choice",
|
|
42247
42388
|
children: [/* @__PURE__ */ jsx("input", {
|
|
42248
42389
|
type: "checkbox",
|
|
42249
42390
|
name: "mailingListChoice",
|
|
42250
|
-
value: choice.id
|
|
42251
|
-
|
|
42391
|
+
value: choice.id,
|
|
42392
|
+
className: "form-checkbox"
|
|
42393
|
+
}), /* @__PURE__ */ jsx("span", { children: choice.label })]
|
|
42252
42394
|
}, choice.id))]
|
|
42253
42395
|
}) : null,
|
|
42254
42396
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -43237,6 +43379,18 @@ function resolveChildren(nodes, context) {
|
|
|
43237
43379
|
function isReactNode(value) {
|
|
43238
43380
|
return value !== null && value !== void 0;
|
|
43239
43381
|
}
|
|
43382
|
+
function resolveNodeMetadata(nodeType, context) {
|
|
43383
|
+
return {
|
|
43384
|
+
pathBase: context.pathBase,
|
|
43385
|
+
blockId: context.blockId,
|
|
43386
|
+
blockKind: context.blockKind,
|
|
43387
|
+
blockContent: context.blockContent,
|
|
43388
|
+
fragmentRegistry: context.fragmentRegistry,
|
|
43389
|
+
previewAuthoring: context.previewAuthoring,
|
|
43390
|
+
...nodeType.toLowerCase() === "newsletter-form" ? { contentVersionId: context.contentVersionId } : {},
|
|
43391
|
+
...nodeType === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {}
|
|
43392
|
+
};
|
|
43393
|
+
}
|
|
43240
43394
|
/**
|
|
43241
43395
|
* Resolves a node definition into a React element.
|
|
43242
43396
|
* Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
|
|
@@ -43272,13 +43426,7 @@ function resolveNode(node, context, indexFallback) {
|
|
|
43272
43426
|
const elementProps = {
|
|
43273
43427
|
...props,
|
|
43274
43428
|
key: node.key ?? indexFallback,
|
|
43275
|
-
|
|
43276
|
-
blockId: context.blockId,
|
|
43277
|
-
blockKind: context.blockKind,
|
|
43278
|
-
blockContent: context.blockContent,
|
|
43279
|
-
...node.type === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {},
|
|
43280
|
-
fragmentRegistry: context.fragmentRegistry,
|
|
43281
|
-
previewAuthoring: context.previewAuthoring
|
|
43429
|
+
...resolveNodeMetadata(node.type, context)
|
|
43282
43430
|
};
|
|
43283
43431
|
const element = React.createElement(component, elementProps, ...children);
|
|
43284
43432
|
if (headingDecorationPlan.kind === "skip") return element;
|
|
@@ -47288,7 +47436,7 @@ function pageBlockPosition(index, blockCount) {
|
|
|
47288
47436
|
//#endregion
|
|
47289
47437
|
//#region ../blocks/src/pageRendererContracts.ts
|
|
47290
47438
|
function buildPageRendererRootRuntime(dataContext) {
|
|
47291
|
-
const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false } = dataContext ?? {};
|
|
47439
|
+
const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false, loaderFailures = {} } = dataContext ?? {};
|
|
47292
47440
|
return {
|
|
47293
47441
|
siteId,
|
|
47294
47442
|
pageId,
|
|
@@ -47299,7 +47447,8 @@ function buildPageRendererRootRuntime(dataContext) {
|
|
|
47299
47447
|
portalToken,
|
|
47300
47448
|
bookingOfferingPresets,
|
|
47301
47449
|
mailingList,
|
|
47302
|
-
eventRegistrationOverlayEnabled
|
|
47450
|
+
eventRegistrationOverlayEnabled,
|
|
47451
|
+
loaderFailures
|
|
47303
47452
|
};
|
|
47304
47453
|
}
|
|
47305
47454
|
//#endregion
|
|
@@ -56543,7 +56692,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path) {
|
|
|
56543
56692
|
}
|
|
56544
56693
|
function makeDefaultBlockComponent(args) {
|
|
56545
56694
|
const { manifest } = args;
|
|
56546
|
-
return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
|
|
56695
|
+
return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, contentVersionId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
|
|
56547
56696
|
const perf = beginBlockRenderMeasurement();
|
|
56548
56697
|
if (!theme) throw new Error("Block rendering requires theme tokens; none were provided to makeDefaultBlockComponent");
|
|
56549
56698
|
if (!registry) throw new Error("Block rendering requires a component registry; none was provided");
|
|
@@ -56563,6 +56712,7 @@ function makeDefaultBlockComponent(args) {
|
|
|
56563
56712
|
theme: withButtonSystem(theme, themeConfig),
|
|
56564
56713
|
pathBase,
|
|
56565
56714
|
blockId,
|
|
56715
|
+
contentVersionId,
|
|
56566
56716
|
blockKind,
|
|
56567
56717
|
blockContent: mergedContent,
|
|
56568
56718
|
blockBindings,
|
|
@@ -57271,6 +57421,7 @@ function buildBlockOverrideProps(input) {
|
|
|
57271
57421
|
...blockSubjectProps(dataContext),
|
|
57272
57422
|
imageResolveContext: input.imageResolveContext,
|
|
57273
57423
|
blockId: block.id ?? null,
|
|
57424
|
+
contentVersionId: block.contentVersionId ?? null,
|
|
57274
57425
|
blockKind: block.kind
|
|
57275
57426
|
};
|
|
57276
57427
|
}
|
|
@@ -57371,6 +57522,7 @@ function toPresentationPage(page) {
|
|
|
57371
57522
|
id: block.id,
|
|
57372
57523
|
kind: block.kind,
|
|
57373
57524
|
purpose: block.purpose,
|
|
57525
|
+
...block.contentVersionId ? { contentVersionId: block.contentVersionId } : {},
|
|
57374
57526
|
...block.bindings ? { bindings: block.bindings } : {}
|
|
57375
57527
|
};
|
|
57376
57528
|
return block.admission.kind === "renderable" ? {
|
|
@@ -67643,7 +67795,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
67643
67795
|
text-align: left;
|
|
67644
67796
|
}
|
|
67645
67797
|
|
|
67646
|
-
:where(.theme-scope)
|
|
67798
|
+
:where(.theme-scope)
|
|
67799
|
+
:where([data-block="customer-portal"])
|
|
67800
|
+
.cp-login__subtitle {
|
|
67647
67801
|
color: var(--cp-muted);
|
|
67648
67802
|
font-size: 0.9375rem;
|
|
67649
67803
|
text-align: left;
|
|
@@ -67670,7 +67824,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
67670
67824
|
text-align: left;
|
|
67671
67825
|
}
|
|
67672
67826
|
|
|
67673
|
-
:where(.theme-scope)
|
|
67827
|
+
:where(.theme-scope)
|
|
67828
|
+
:where([data-block="customer-portal"])
|
|
67829
|
+
.cp-login__reset-link {
|
|
67674
67830
|
appearance: none;
|
|
67675
67831
|
background: none;
|
|
67676
67832
|
border: 0;
|
|
@@ -67684,11 +67840,15 @@ const containerResponsiveThemeCss = `/*
|
|
|
67684
67840
|
text-underline-offset: 0.15em;
|
|
67685
67841
|
}
|
|
67686
67842
|
|
|
67687
|
-
:where(.theme-scope)
|
|
67843
|
+
:where(.theme-scope)
|
|
67844
|
+
:where([data-block="customer-portal"])
|
|
67845
|
+
.cp-login__reset-link:hover {
|
|
67688
67846
|
color: var(--cp-text);
|
|
67689
67847
|
}
|
|
67690
67848
|
|
|
67691
|
-
:where(.theme-scope)
|
|
67849
|
+
:where(.theme-scope)
|
|
67850
|
+
:where([data-block="customer-portal"])
|
|
67851
|
+
.cp-login__reset-link:focus-visible {
|
|
67692
67852
|
outline: 2px solid currentColor;
|
|
67693
67853
|
outline-offset: 3px;
|
|
67694
67854
|
}
|
|
@@ -67733,7 +67893,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
67733
67893
|
border-bottom: none;
|
|
67734
67894
|
}
|
|
67735
67895
|
|
|
67736
|
-
:where(.theme-scope)
|
|
67896
|
+
:where(.theme-scope)
|
|
67897
|
+
:where([data-block="customer-portal"])
|
|
67898
|
+
.cp-header__welcome {
|
|
67737
67899
|
font-size: 1.125rem;
|
|
67738
67900
|
font-weight: 500;
|
|
67739
67901
|
}
|
|
@@ -67749,8 +67911,14 @@ const containerResponsiveThemeCss = `/*
|
|
|
67749
67911
|
}
|
|
67750
67912
|
|
|
67751
67913
|
@keyframes cp-fade-in {
|
|
67752
|
-
from {
|
|
67753
|
-
|
|
67914
|
+
from {
|
|
67915
|
+
opacity: 0;
|
|
67916
|
+
transform: translateY(4px);
|
|
67917
|
+
}
|
|
67918
|
+
to {
|
|
67919
|
+
opacity: 1;
|
|
67920
|
+
transform: translateY(0);
|
|
67921
|
+
}
|
|
67754
67922
|
}
|
|
67755
67923
|
|
|
67756
67924
|
/* Empty state */
|
|
@@ -67839,6 +68007,77 @@ const containerResponsiveThemeCss = `/*
|
|
|
67839
68007
|
margin-top: 1rem;
|
|
67840
68008
|
}
|
|
67841
68009
|
|
|
68010
|
+
/* Event waitlists */
|
|
68011
|
+
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-list {
|
|
68012
|
+
display: grid;
|
|
68013
|
+
gap: 1rem;
|
|
68014
|
+
}
|
|
68015
|
+
|
|
68016
|
+
:where(.theme-scope)
|
|
68017
|
+
:where([data-block="customer-portal"])
|
|
68018
|
+
.cp-waitlists
|
|
68019
|
+
> .cp-alert {
|
|
68020
|
+
margin-bottom: 1rem;
|
|
68021
|
+
}
|
|
68022
|
+
|
|
68023
|
+
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-card {
|
|
68024
|
+
transition:
|
|
68025
|
+
border-color 180ms ease,
|
|
68026
|
+
box-shadow 180ms ease;
|
|
68027
|
+
}
|
|
68028
|
+
|
|
68029
|
+
:where(.theme-scope)
|
|
68030
|
+
:where([data-block="customer-portal"])
|
|
68031
|
+
.cp-waitlist-card--focused {
|
|
68032
|
+
border-color: var(--cp-primary);
|
|
68033
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--cp-primary) 22%, transparent);
|
|
68034
|
+
}
|
|
68035
|
+
|
|
68036
|
+
:where(.theme-scope)
|
|
68037
|
+
:where([data-block="customer-portal"])
|
|
68038
|
+
.cp-waitlist-card__summary,
|
|
68039
|
+
:where(.theme-scope)
|
|
68040
|
+
:where([data-block="customer-portal"])
|
|
68041
|
+
.cp-waitlist-card__position {
|
|
68042
|
+
font-weight: 600;
|
|
68043
|
+
}
|
|
68044
|
+
|
|
68045
|
+
:where(.theme-scope)
|
|
68046
|
+
:where([data-block="customer-portal"])
|
|
68047
|
+
.cp-waitlist-card
|
|
68048
|
+
.cp-card-body
|
|
68049
|
+
p {
|
|
68050
|
+
margin: 0.4rem 0;
|
|
68051
|
+
}
|
|
68052
|
+
|
|
68053
|
+
@container rb-site (max-width: 640px) {
|
|
68054
|
+
@scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
|
|
68055
|
+
:where(.theme-scope)
|
|
68056
|
+
:where([data-block="customer-portal"])
|
|
68057
|
+
.cp-waitlist-card
|
|
68058
|
+
.cp-card-header {
|
|
68059
|
+
flex-direction: column-reverse;
|
|
68060
|
+
}
|
|
68061
|
+
|
|
68062
|
+
:where(.theme-scope)
|
|
68063
|
+
:where([data-block="customer-portal"])
|
|
68064
|
+
.cp-waitlist-card
|
|
68065
|
+
.cp-card-actions {
|
|
68066
|
+
align-items: stretch;
|
|
68067
|
+
flex-direction: column;
|
|
68068
|
+
}
|
|
68069
|
+
|
|
68070
|
+
:where(.theme-scope)
|
|
68071
|
+
:where([data-block="customer-portal"])
|
|
68072
|
+
.cp-waitlist-card
|
|
68073
|
+
.cp-card-actions
|
|
68074
|
+
> * {
|
|
68075
|
+
justify-content: center;
|
|
68076
|
+
text-align: center;
|
|
68077
|
+
}
|
|
68078
|
+
}
|
|
68079
|
+
}
|
|
68080
|
+
|
|
67842
68081
|
/* Badge */
|
|
67843
68082
|
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-badge {
|
|
67844
68083
|
display: inline-flex;
|
|
@@ -67975,11 +68214,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
67975
68214
|
background: rgba(var(--tb-border), 0.2);
|
|
67976
68215
|
}
|
|
67977
68216
|
|
|
67978
|
-
:where(.theme-scope)
|
|
68217
|
+
:where(.theme-scope)
|
|
68218
|
+
:where([data-block="customer-portal"])
|
|
68219
|
+
.cp-table
|
|
68220
|
+
tbody
|
|
68221
|
+
tr:last-child
|
|
68222
|
+
td {
|
|
67979
68223
|
border-bottom: none;
|
|
67980
68224
|
}
|
|
67981
68225
|
|
|
67982
|
-
:where(.theme-scope)
|
|
68226
|
+
:where(.theme-scope)
|
|
68227
|
+
:where([data-block="customer-portal"])
|
|
68228
|
+
:is(.cp-row--past, .cp-row--muted) {
|
|
67983
68229
|
opacity: 0.65;
|
|
67984
68230
|
}
|
|
67985
68231
|
|
|
@@ -67992,7 +68238,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
67992
68238
|
line-height: 1.2;
|
|
67993
68239
|
}
|
|
67994
68240
|
|
|
67995
|
-
:where(.theme-scope)
|
|
68241
|
+
:where(.theme-scope)
|
|
68242
|
+
:where([data-block="customer-portal"])
|
|
68243
|
+
.cp-row-title__badges {
|
|
67996
68244
|
margin-left: auto;
|
|
67997
68245
|
display: flex;
|
|
67998
68246
|
flex-wrap: wrap;
|
|
@@ -68000,7 +68248,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
68000
68248
|
gap: 0.375rem;
|
|
68001
68249
|
}
|
|
68002
68250
|
|
|
68003
|
-
:where(.theme-scope)
|
|
68251
|
+
:where(.theme-scope)
|
|
68252
|
+
:where([data-block="customer-portal"])
|
|
68253
|
+
.cp-row-title__text {
|
|
68004
68254
|
min-width: 0;
|
|
68005
68255
|
}
|
|
68006
68256
|
|
|
@@ -68020,12 +68270,16 @@ const containerResponsiveThemeCss = `/*
|
|
|
68020
68270
|
line-height: 1.35;
|
|
68021
68271
|
}
|
|
68022
68272
|
|
|
68023
|
-
:where(.theme-scope)
|
|
68273
|
+
:where(.theme-scope)
|
|
68274
|
+
:where([data-block="customer-portal"])
|
|
68275
|
+
.cp-row-note--success {
|
|
68024
68276
|
border-left-color: rgb(var(--tb-success));
|
|
68025
68277
|
color: rgb(var(--tb-success));
|
|
68026
68278
|
}
|
|
68027
68279
|
|
|
68028
|
-
:where(.theme-scope)
|
|
68280
|
+
:where(.theme-scope)
|
|
68281
|
+
:where([data-block="customer-portal"])
|
|
68282
|
+
.cp-row-note--error {
|
|
68029
68283
|
border-left-color: rgb(var(--tb-destructive));
|
|
68030
68284
|
color: rgb(var(--tb-destructive));
|
|
68031
68285
|
}
|
|
@@ -68044,16 +68298,23 @@ const containerResponsiveThemeCss = `/*
|
|
|
68044
68298
|
white-space: nowrap;
|
|
68045
68299
|
}
|
|
68046
68300
|
|
|
68047
|
-
:where(.theme-scope)
|
|
68301
|
+
:where(.theme-scope)
|
|
68302
|
+
:where([data-block="customer-portal"])
|
|
68303
|
+
.cp-col-actions
|
|
68304
|
+
.btn-sm {
|
|
68048
68305
|
white-space: nowrap;
|
|
68049
68306
|
}
|
|
68050
68307
|
|
|
68051
|
-
:where(.theme-scope)
|
|
68308
|
+
:where(.theme-scope)
|
|
68309
|
+
:where([data-block="customer-portal"])
|
|
68310
|
+
.cp-row-title__link {
|
|
68052
68311
|
color: inherit;
|
|
68053
68312
|
text-decoration: none;
|
|
68054
68313
|
}
|
|
68055
68314
|
|
|
68056
|
-
:where(.theme-scope)
|
|
68315
|
+
:where(.theme-scope)
|
|
68316
|
+
:where([data-block="customer-portal"])
|
|
68317
|
+
.cp-row-title__link:hover {
|
|
68057
68318
|
text-decoration: underline;
|
|
68058
68319
|
text-decoration-thickness: 2px;
|
|
68059
68320
|
text-underline-offset: 2px;
|
|
@@ -68075,7 +68336,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
68075
68336
|
}
|
|
68076
68337
|
|
|
68077
68338
|
/* Profile actions */
|
|
68078
|
-
:where(.theme-scope)
|
|
68339
|
+
:where(.theme-scope)
|
|
68340
|
+
:where([data-block="customer-portal"])
|
|
68341
|
+
.cp-profile__actions {
|
|
68079
68342
|
display: flex;
|
|
68080
68343
|
gap: 0.75rem;
|
|
68081
68344
|
margin-top: 1rem;
|
|
@@ -68142,28 +68405,39 @@ const containerResponsiveThemeCss = `/*
|
|
|
68142
68405
|
gap: 0.375rem;
|
|
68143
68406
|
}
|
|
68144
68407
|
|
|
68145
|
-
:where(.theme-scope)
|
|
68408
|
+
:where(.theme-scope)
|
|
68409
|
+
:where([data-block="customer-portal"])
|
|
68410
|
+
.cp-guest-edit-row__index {
|
|
68146
68411
|
font-size: 0.75rem;
|
|
68147
68412
|
font-weight: 500;
|
|
68148
68413
|
color: var(--cp-muted);
|
|
68149
68414
|
}
|
|
68150
68415
|
|
|
68151
|
-
:where(.theme-scope)
|
|
68416
|
+
:where(.theme-scope)
|
|
68417
|
+
:where([data-block="customer-portal"])
|
|
68418
|
+
.cp-guest-edit-row__fields {
|
|
68152
68419
|
display: flex;
|
|
68153
68420
|
gap: 0.5rem;
|
|
68154
68421
|
}
|
|
68155
68422
|
|
|
68156
|
-
:where(.theme-scope)
|
|
68423
|
+
:where(.theme-scope)
|
|
68424
|
+
:where([data-block="customer-portal"])
|
|
68425
|
+
.cp-guest-edit-row__fields
|
|
68426
|
+
input {
|
|
68157
68427
|
flex: 1;
|
|
68158
68428
|
min-width: 0;
|
|
68159
68429
|
}
|
|
68160
68430
|
|
|
68161
|
-
:where(.theme-scope)
|
|
68431
|
+
:where(.theme-scope)
|
|
68432
|
+
:where([data-block="customer-portal"])
|
|
68433
|
+
.cp-guest-edit-row__error {
|
|
68162
68434
|
font-size: 0.75rem;
|
|
68163
68435
|
color: var(--cp-error);
|
|
68164
68436
|
}
|
|
68165
68437
|
|
|
68166
|
-
:where(.theme-scope)
|
|
68438
|
+
:where(.theme-scope)
|
|
68439
|
+
:where([data-block="customer-portal"])
|
|
68440
|
+
.cp-guests__actions {
|
|
68167
68441
|
display: flex;
|
|
68168
68442
|
gap: 0.5rem;
|
|
68169
68443
|
margin-top: 0.5rem;
|
|
@@ -68177,13 +68451,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
68177
68451
|
}
|
|
68178
68452
|
|
|
68179
68453
|
/* In the actions modal, tiles sit on a surface modal, so use "background" for contrast. */
|
|
68180
|
-
:where(.theme-scope)
|
|
68454
|
+
:where(.theme-scope)
|
|
68455
|
+
:where([data-block="customer-portal"])
|
|
68456
|
+
.cp-actions-list
|
|
68457
|
+
:where(.rb-tile) {
|
|
68181
68458
|
--rb-event-tile-bg: rgb(var(--tb-background));
|
|
68182
68459
|
--rb-event-tile-border: rgb(var(--tb-border));
|
|
68183
68460
|
}
|
|
68184
68461
|
|
|
68185
68462
|
/* Actions trigger: icon-only kebab button */
|
|
68186
|
-
:where(.theme-scope)
|
|
68463
|
+
:where(.theme-scope)
|
|
68464
|
+
:where([data-block="customer-portal"])
|
|
68465
|
+
.cp-actions-trigger.btn-sm {
|
|
68187
68466
|
padding: 0.35rem !important;
|
|
68188
68467
|
line-height: 1 !important;
|
|
68189
68468
|
min-width: 32px;
|
|
@@ -68207,17 +68486,24 @@ const containerResponsiveThemeCss = `/*
|
|
|
68207
68486
|
gap: 0.25rem;
|
|
68208
68487
|
}
|
|
68209
68488
|
|
|
68210
|
-
:where(.theme-scope)
|
|
68489
|
+
:where(.theme-scope)
|
|
68490
|
+
:where([data-block="customer-portal"])
|
|
68491
|
+
.cp-action-tile__title {
|
|
68211
68492
|
font-weight: 600;
|
|
68212
68493
|
font-size: 0.9375rem;
|
|
68213
68494
|
}
|
|
68214
68495
|
|
|
68215
|
-
:where(.theme-scope)
|
|
68496
|
+
:where(.theme-scope)
|
|
68497
|
+
:where([data-block="customer-portal"])
|
|
68498
|
+
.cp-action-tile__desc {
|
|
68216
68499
|
font-size: 0.875rem;
|
|
68217
68500
|
line-height: 1.35;
|
|
68218
68501
|
}
|
|
68219
68502
|
|
|
68220
|
-
:where(.theme-scope)
|
|
68503
|
+
:where(.theme-scope)
|
|
68504
|
+
:where([data-block="customer-portal"])
|
|
68505
|
+
.cp-action-tile--danger
|
|
68506
|
+
.cp-action-tile__title {
|
|
68221
68507
|
color: rgb(var(--tb-destructive));
|
|
68222
68508
|
}
|
|
68223
68509
|
|
|
@@ -68239,7 +68525,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
68239
68525
|
text-decoration: underline;
|
|
68240
68526
|
}
|
|
68241
68527
|
|
|
68242
|
-
:where(.theme-scope)
|
|
68528
|
+
:where(.theme-scope)
|
|
68529
|
+
:where([data-block="customer-portal"])
|
|
68530
|
+
.cp-btn--link:hover {
|
|
68243
68531
|
color: var(--cp-primary-hover);
|
|
68244
68532
|
}
|
|
68245
68533
|
|
|
@@ -68278,34 +68566,48 @@ const containerResponsiveThemeCss = `/*
|
|
|
68278
68566
|
margin-top: 0.75rem;
|
|
68279
68567
|
}
|
|
68280
68568
|
|
|
68281
|
-
:where(.theme-scope)
|
|
68569
|
+
:where(.theme-scope)
|
|
68570
|
+
:where([data-block="customer-portal"])
|
|
68571
|
+
.cp-cancel-confirm__title {
|
|
68282
68572
|
font-weight: 600;
|
|
68283
68573
|
margin-bottom: 0.5rem;
|
|
68284
68574
|
}
|
|
68285
68575
|
|
|
68286
|
-
:where(.theme-scope)
|
|
68576
|
+
:where(.theme-scope)
|
|
68577
|
+
:where([data-block="customer-portal"])
|
|
68578
|
+
.cp-cancel-confirm__message {
|
|
68287
68579
|
margin-bottom: 0.25rem;
|
|
68288
68580
|
}
|
|
68289
68581
|
|
|
68290
|
-
:where(.theme-scope)
|
|
68582
|
+
:where(.theme-scope)
|
|
68583
|
+
:where([data-block="customer-portal"])
|
|
68584
|
+
.cp-cancel-confirm__warning {
|
|
68291
68585
|
margin-bottom: 0.75rem;
|
|
68292
68586
|
}
|
|
68293
68587
|
|
|
68294
|
-
:where(.theme-scope)
|
|
68588
|
+
:where(.theme-scope)
|
|
68589
|
+
:where([data-block="customer-portal"])
|
|
68590
|
+
.cp-cancel-confirm__actions {
|
|
68295
68591
|
display: flex;
|
|
68296
68592
|
gap: 0.75rem;
|
|
68297
68593
|
}
|
|
68298
68594
|
|
|
68299
68595
|
/* Membership actions */
|
|
68300
|
-
:where(.theme-scope)
|
|
68596
|
+
:where(.theme-scope)
|
|
68597
|
+
:where([data-block="customer-portal"])
|
|
68598
|
+
.cp-membership-actions {
|
|
68301
68599
|
margin-top: 0.75rem;
|
|
68302
68600
|
}
|
|
68303
68601
|
|
|
68304
|
-
:where(.theme-scope)
|
|
68602
|
+
:where(.theme-scope)
|
|
68603
|
+
:where([data-block="customer-portal"])
|
|
68604
|
+
.cp-section-actions {
|
|
68305
68605
|
margin-top: 1rem;
|
|
68306
68606
|
}
|
|
68307
68607
|
|
|
68308
|
-
:where(.theme-scope)
|
|
68608
|
+
:where(.theme-scope)
|
|
68609
|
+
:where([data-block="customer-portal"])
|
|
68610
|
+
.cp-card-subtitle--spaced {
|
|
68309
68611
|
margin-top: 0.75rem;
|
|
68310
68612
|
}
|
|
68311
68613
|
|
|
@@ -68329,9 +68631,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
68329
68631
|
display: none;
|
|
68330
68632
|
}
|
|
68331
68633
|
|
|
68332
|
-
:where(.theme-scope)
|
|
68333
|
-
|
|
68334
|
-
|
|
68634
|
+
:where(.theme-scope)
|
|
68635
|
+
:where([data-block="customer-portal"])
|
|
68636
|
+
.cp-table
|
|
68637
|
+
:is(th, td).cp-col-guests,
|
|
68638
|
+
:where(.theme-scope)
|
|
68639
|
+
:where([data-block="customer-portal"])
|
|
68640
|
+
.cp-table
|
|
68641
|
+
:is(th, td).cp-col-tickets,
|
|
68642
|
+
:where(.theme-scope)
|
|
68643
|
+
:where([data-block="customer-portal"])
|
|
68644
|
+
.cp-table
|
|
68645
|
+
:is(th, td).cp-col-actions {
|
|
68335
68646
|
display: none;
|
|
68336
68647
|
}
|
|
68337
68648
|
|
|
@@ -68340,24 +68651,34 @@ const containerResponsiveThemeCss = `/*
|
|
|
68340
68651
|
}
|
|
68341
68652
|
|
|
68342
68653
|
/* Make the cell a positioning context for the kebab */
|
|
68343
|
-
:where(.theme-scope)
|
|
68654
|
+
:where(.theme-scope)
|
|
68655
|
+
:where([data-block="customer-portal"])
|
|
68656
|
+
.cp-row
|
|
68657
|
+
> td:first-child {
|
|
68344
68658
|
position: relative;
|
|
68345
68659
|
padding-right: 2.5rem;
|
|
68346
68660
|
}
|
|
68347
68661
|
|
|
68348
68662
|
/* Position kebab in top-right of the cell */
|
|
68349
|
-
:where(.theme-scope)
|
|
68663
|
+
:where(.theme-scope)
|
|
68664
|
+
:where([data-block="customer-portal"])
|
|
68665
|
+
.cp-row-mobile-actions {
|
|
68350
68666
|
position: absolute;
|
|
68351
68667
|
top: 0.5rem;
|
|
68352
68668
|
right: 0.5rem;
|
|
68353
68669
|
margin-top: 0;
|
|
68354
68670
|
}
|
|
68355
68671
|
|
|
68356
|
-
:where(.theme-scope)
|
|
68672
|
+
:where(.theme-scope)
|
|
68673
|
+
:where([data-block="customer-portal"])
|
|
68674
|
+
.cp-row-mobile-actions
|
|
68675
|
+
.btn-sm {
|
|
68357
68676
|
width: auto;
|
|
68358
68677
|
}
|
|
68359
68678
|
|
|
68360
|
-
:where(.theme-scope)
|
|
68679
|
+
:where(.theme-scope)
|
|
68680
|
+
:where([data-block="customer-portal"])
|
|
68681
|
+
.cp-profile__edit {
|
|
68361
68682
|
align-self: stretch;
|
|
68362
68683
|
}
|
|
68363
68684
|
}
|
|
@@ -68805,6 +69126,30 @@ const containerResponsiveThemeCss = `/*
|
|
|
68805
69126
|
gap: 0.25rem;
|
|
68806
69127
|
}
|
|
68807
69128
|
|
|
69129
|
+
/* Topic choices (visitor picks what to hear about). Same treatment as the
|
|
69130
|
+
form block's .fb-fieldset / .fb-inline, defined here because the newsletter
|
|
69131
|
+
form also renders inside contact-newsletter and the site footer. */
|
|
69132
|
+
:where(.theme-scope) .newsletter-topics {
|
|
69133
|
+
display: flex;
|
|
69134
|
+
flex-direction: column;
|
|
69135
|
+
gap: 0.5rem;
|
|
69136
|
+
border: none;
|
|
69137
|
+
padding: 0;
|
|
69138
|
+
margin: 0;
|
|
69139
|
+
min-width: 0;
|
|
69140
|
+
}
|
|
69141
|
+
|
|
69142
|
+
:where(.theme-scope) .newsletter-topics > legend {
|
|
69143
|
+
padding: 0;
|
|
69144
|
+
margin-bottom: 0.25rem;
|
|
69145
|
+
}
|
|
69146
|
+
|
|
69147
|
+
:where(.theme-scope) .newsletter-topic-choice {
|
|
69148
|
+
display: flex;
|
|
69149
|
+
align-items: center;
|
|
69150
|
+
gap: 0.5rem;
|
|
69151
|
+
}
|
|
69152
|
+
|
|
68808
69153
|
/* Required indicator */
|
|
68809
69154
|
:where(.theme-scope) .newsletter-required {
|
|
68810
69155
|
color: rgb(var(--tb-primary));
|
|
@@ -68854,6 +69199,10 @@ const containerResponsiveThemeCss = `/*
|
|
|
68854
69199
|
flex-shrink: 0;
|
|
68855
69200
|
}
|
|
68856
69201
|
|
|
69202
|
+
:where(.theme-scope) .newsletter-inline .newsletter-topics {
|
|
69203
|
+
flex-basis: 100%;
|
|
69204
|
+
}
|
|
69205
|
+
|
|
68857
69206
|
/* Mobile fallback for inline variant */
|
|
68858
69207
|
@container rb-site (max-width: 640px) {
|
|
68859
69208
|
@scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
|
|
@@ -71312,7 +71661,7 @@ function PageContent(props) {
|
|
|
71312
71661
|
previewToken,
|
|
71313
71662
|
resolvedData,
|
|
71314
71663
|
bookingOfferingPresets: bookingOfferingPresets ?? [],
|
|
71315
|
-
mailingList,
|
|
71664
|
+
mailingList: mailingList ?? dataContext?.mailingList,
|
|
71316
71665
|
bookingTimeZone: resolveSdkBookingTimeZone(bookingTimeZone),
|
|
71317
71666
|
routes: routeMap,
|
|
71318
71667
|
pagesByIdentifier,
|
|
@@ -72067,8 +72416,12 @@ function shouldSkipResolvedLoader(input) {
|
|
|
72067
72416
|
* ```
|
|
72068
72417
|
*/
|
|
72069
72418
|
async function prefetchBlockData$1(page, context, options) {
|
|
72419
|
+
return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
|
|
72420
|
+
}
|
|
72421
|
+
async function prefetchBlockDataWithFailures(page, context, options) {
|
|
72070
72422
|
const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
|
|
72071
72423
|
const results = {};
|
|
72424
|
+
const loaderFailures = {};
|
|
72072
72425
|
const tasks = [];
|
|
72073
72426
|
for (const block of page.blocks) {
|
|
72074
72427
|
const blockId = block.id;
|
|
@@ -72116,6 +72469,11 @@ async function prefetchBlockData$1(page, context, options) {
|
|
|
72116
72469
|
const blockResults = results[blockId] ?? (results[blockId] = {});
|
|
72117
72470
|
blockResults[key] = data;
|
|
72118
72471
|
} catch (error) {
|
|
72472
|
+
const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
|
|
72473
|
+
blockFailures[key] = {
|
|
72474
|
+
endpoint,
|
|
72475
|
+
params
|
|
72476
|
+
};
|
|
72119
72477
|
if (onError) onError(error, {
|
|
72120
72478
|
block: block.kind,
|
|
72121
72479
|
loader: key
|
|
@@ -72125,7 +72483,10 @@ async function prefetchBlockData$1(page, context, options) {
|
|
|
72125
72483
|
}
|
|
72126
72484
|
}
|
|
72127
72485
|
if (tasks.length > 0) await Promise.all(tasks);
|
|
72128
|
-
return
|
|
72486
|
+
return {
|
|
72487
|
+
resolvedData: results,
|
|
72488
|
+
loaderFailures
|
|
72489
|
+
};
|
|
72129
72490
|
}
|
|
72130
72491
|
//#endregion
|
|
72131
72492
|
//#region ../blocks/src/system/data/loaderEndpoints.ts
|
|
@@ -72233,9 +72594,11 @@ function convertPageResponseBlock(block) {
|
|
|
72233
72594
|
if (typeof block.id !== "string" && block.id !== null) throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
|
|
72234
72595
|
if (typeof block.kind !== "string") throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
|
|
72235
72596
|
if (typeof block.purpose !== "string") throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
|
|
72597
|
+
if (block.contentVersionId !== void 0 && block.contentVersionId !== null && typeof block.contentVersionId !== "string") throw new Error(`Invalid content version id in page: expected string or null, got ${typeof block.contentVersionId}`);
|
|
72236
72598
|
const admission = readInvalidBlockAdmission(block.admission);
|
|
72237
72599
|
return {
|
|
72238
72600
|
id: block.id,
|
|
72601
|
+
...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
|
|
72239
72602
|
kind: block.kind,
|
|
72240
72603
|
purpose: block.purpose,
|
|
72241
72604
|
content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
|
|
@@ -72266,6 +72629,7 @@ function buildRenderablePageOutline(input) {
|
|
|
72266
72629
|
function admitSdkRuntimePageBlock(block, customBlocks) {
|
|
72267
72630
|
const base = {
|
|
72268
72631
|
id: block.id,
|
|
72632
|
+
...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
|
|
72269
72633
|
kind: block.kind,
|
|
72270
72634
|
purpose: block.purpose,
|
|
72271
72635
|
...block.bindings ? { bindings: block.bindings } : {}
|
|
@@ -73944,6 +74308,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
|
|
|
73944
74308
|
auth: "public",
|
|
73945
74309
|
responseKind: "json"
|
|
73946
74310
|
},
|
|
74311
|
+
getPublicBookingServiceBySlug: {
|
|
74312
|
+
path: "/public/bookings/services/by-slug/{slug}",
|
|
74313
|
+
method: "GET",
|
|
74314
|
+
revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
|
|
74315
|
+
tags: [TAG_TEMPLATES.publicBookingServices],
|
|
74316
|
+
auth: "public",
|
|
74317
|
+
responseKind: "json"
|
|
74318
|
+
},
|
|
73947
74319
|
getPublicBookingResourcesReference: {
|
|
73948
74320
|
path: "/public/bookings/resources/reference",
|
|
73949
74321
|
method: "GET",
|
|
@@ -74496,16 +74868,110 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
|
74496
74868
|
responseKind: "json"
|
|
74497
74869
|
}
|
|
74498
74870
|
});
|
|
74871
|
+
//#endregion
|
|
74872
|
+
//#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
|
|
74873
|
+
/**
|
|
74874
|
+
* The anonymous onboarding attempt, addressed by its opaque resume token.
|
|
74875
|
+
*
|
|
74876
|
+
* Every route here is reached before there is an account, so none of them can
|
|
74877
|
+
* be scoped to a site or a user: the token is the whole credential. They are
|
|
74878
|
+
* kept together so that stays obvious.
|
|
74879
|
+
*/
|
|
74880
|
+
const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
74881
|
+
createPublicOnboardingAttempt: {
|
|
74882
|
+
path: "/public/onboarding/attempts",
|
|
74883
|
+
method: "POST",
|
|
74884
|
+
auth: "public",
|
|
74885
|
+
errors: [],
|
|
74886
|
+
responseKind: "json"
|
|
74887
|
+
},
|
|
74888
|
+
createPublicOnboardingLogoUploadUrl: {
|
|
74889
|
+
path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
|
|
74890
|
+
method: "POST",
|
|
74891
|
+
auth: "public",
|
|
74892
|
+
errors: [],
|
|
74893
|
+
responseKind: "json"
|
|
74894
|
+
},
|
|
74895
|
+
uploadPublicOnboardingLogo: {
|
|
74896
|
+
path: "/public/onboarding/attempts/{attemptToken}/logo",
|
|
74897
|
+
method: "POST",
|
|
74898
|
+
auth: "public",
|
|
74899
|
+
errors: [],
|
|
74900
|
+
responseKind: "json"
|
|
74901
|
+
},
|
|
74902
|
+
getPublicOnboardingAttempt: {
|
|
74903
|
+
path: "/public/onboarding/attempts/{attemptToken}",
|
|
74904
|
+
method: "GET",
|
|
74905
|
+
auth: "public",
|
|
74906
|
+
errors: [],
|
|
74907
|
+
responseKind: "json"
|
|
74908
|
+
},
|
|
74909
|
+
getPublicOnboardingAttemptProgress: {
|
|
74910
|
+
path: "/public/onboarding/attempts/{attemptToken}/status",
|
|
74911
|
+
method: "GET",
|
|
74912
|
+
auth: "public",
|
|
74913
|
+
errors: [],
|
|
74914
|
+
responseKind: "json"
|
|
74915
|
+
},
|
|
74916
|
+
updatePublicOnboardingAttempt: {
|
|
74917
|
+
path: "/public/onboarding/attempts/{attemptToken}",
|
|
74918
|
+
method: "PATCH",
|
|
74919
|
+
auth: "public",
|
|
74920
|
+
errors: [],
|
|
74921
|
+
responseKind: "json"
|
|
74922
|
+
},
|
|
74923
|
+
runPublicOnboardingAttempt: {
|
|
74924
|
+
path: "/public/onboarding/attempts/{attemptToken}/run",
|
|
74925
|
+
method: "POST",
|
|
74926
|
+
auth: "public",
|
|
74927
|
+
errors: [],
|
|
74928
|
+
responseKind: "json"
|
|
74929
|
+
},
|
|
74930
|
+
resendPublicOnboardingAttemptConfirmation: {
|
|
74931
|
+
path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
|
|
74932
|
+
method: "POST",
|
|
74933
|
+
auth: "public",
|
|
74934
|
+
errors: [],
|
|
74935
|
+
responseKind: "json"
|
|
74936
|
+
}
|
|
74937
|
+
});
|
|
74938
|
+
//#endregion
|
|
74939
|
+
//#region ../api/src/billingEndpointDefinitions.ts
|
|
74940
|
+
const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
74941
|
+
adminChangePlan: {
|
|
74942
|
+
path: "/admin/billing/plan",
|
|
74943
|
+
method: "POST",
|
|
74944
|
+
tags: ["admin", "billing"],
|
|
74945
|
+
auth: "admin",
|
|
74946
|
+
responseKind: "json"
|
|
74947
|
+
},
|
|
74948
|
+
changePlan: {
|
|
74949
|
+
path: "/billing/plan/change",
|
|
74950
|
+
method: "POST",
|
|
74951
|
+
tags: ["billing"],
|
|
74952
|
+
auth: "user",
|
|
74953
|
+
responseKind: "json"
|
|
74954
|
+
},
|
|
74955
|
+
createBillingPortalSession: {
|
|
74956
|
+
path: "/billing/portal/session",
|
|
74957
|
+
method: "POST",
|
|
74958
|
+
tags: ["billing"],
|
|
74959
|
+
auth: "user",
|
|
74960
|
+
responseKind: "json"
|
|
74961
|
+
}
|
|
74962
|
+
});
|
|
74499
74963
|
({
|
|
74500
74964
|
...ACCOUNT_ENDPOINT_DEFINITIONS,
|
|
74965
|
+
...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
|
|
74501
74966
|
...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
|
|
74502
74967
|
...GIFTING_ENDPOINT_DEFINITIONS,
|
|
74503
|
-
...PUBLIC_READ_ENDPOINT_DEFINITIONS
|
|
74968
|
+
...PUBLIC_READ_ENDPOINT_DEFINITIONS,
|
|
74969
|
+
...BILLING_ENDPOINT_DEFINITIONS
|
|
74504
74970
|
}), 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, {
|
|
74505
74971
|
...NEWSLETTER_ENDPOINT_DEFINITIONS,
|
|
74506
74972
|
...APPOINTMENT_ENDPOINT_DEFINITIONS,
|
|
74507
74973
|
...EVENT_SERIES_REGISTRATION_ENDPOINT_DEFINITIONS
|
|
74508
|
-
}, 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.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.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
|
|
74974
|
+
}, 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.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.publicEvents, TAG_TEMPLATES.publicBookingServices, 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.siteForms, { ...PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEventFilters, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicShop, TAG_TEMPLATES.publicCheckout, TAG_TEMPLATES.siteRoutableContent, { ...PUBLIC_EVENT_CHECKOUT_ENDPOINT_DEFINITIONS }, TAG_TEMPLATES.publicEvents, TAG_TEMPLATES.publicEvents, { ...EVENT_MANAGEMENT_ENDPOINT_DEFINITIONS }, { ...SDK_MEDIA_ENDPOINT_DEFINITIONS }, { ...SDK_ENDPOINT_DEFINITIONS }, { ...SDK_ENTRY_READ_ENDPOINTS };
|
|
74509
74975
|
z.object({ refreshToken: z.string().min(1).max(4096) }).strict();
|
|
74510
74976
|
z.object({
|
|
74511
74977
|
accessToken: z.string().min(1).max(4096),
|
|
@@ -74933,7 +75399,17 @@ const riverbankSiteConfigInputSchema = z.object({
|
|
|
74933
75399
|
z.object({
|
|
74934
75400
|
config: riverbankSiteConfigInputSchema,
|
|
74935
75401
|
forceContentTypes: z.boolean().optional(),
|
|
74936
|
-
mode: z.enum(["apply", "preview"]).optional()
|
|
75402
|
+
mode: z.enum(["apply", "preview"]).optional(),
|
|
75403
|
+
expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
|
|
75404
|
+
if (value === void 0) return void 0;
|
|
75405
|
+
const parsed = parseMailingListProviderScope(value);
|
|
75406
|
+
if (parsed.ok) return parsed.value;
|
|
75407
|
+
ctx.addIssue({
|
|
75408
|
+
code: "custom",
|
|
75409
|
+
message: "Invalid mailing-list provider scope"
|
|
75410
|
+
});
|
|
75411
|
+
return z.NEVER;
|
|
75412
|
+
}).optional()
|
|
74937
75413
|
}).strict();
|
|
74938
75414
|
//#endregion
|
|
74939
75415
|
//#region ../api/src/sdkThemeWire.ts
|