@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
package/dist/server/next.mjs
CHANGED
|
@@ -68,11 +68,11 @@ var UnsafePathSegmentError = class extends Error {
|
|
|
68
68
|
function assertSafePathSegments(segments) {
|
|
69
69
|
for (const segment of segments) if (typeof segment === "string" && UNSAFE_PATH_SEGMENTS.has(segment)) throw new UnsafePathSegmentError(segment);
|
|
70
70
|
}
|
|
71
|
-
function isRecord$
|
|
71
|
+
function isRecord$41(value) {
|
|
72
72
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
73
73
|
}
|
|
74
74
|
function isPathContainer(value) {
|
|
75
|
-
return Array.isArray(value) || isRecord$
|
|
75
|
+
return Array.isArray(value) || isRecord$41(value);
|
|
76
76
|
}
|
|
77
77
|
function getContainerValue(container, segment) {
|
|
78
78
|
if (typeof segment === "number") return Array.isArray(container) ? container[segment] : void 0;
|
|
@@ -1124,10 +1124,12 @@ const unsafeAsStorageBucketName = (value) => value;
|
|
|
1124
1124
|
const unsafeAsStoragePath = (value) => value;
|
|
1125
1125
|
const unsafeAsPositiveByteCount = (value) => value;
|
|
1126
1126
|
const unsafeAsUserId = (id) => id;
|
|
1127
|
+
const unsafeAsContentVersionId = (id) => id;
|
|
1127
1128
|
const parseSiteId = (value) => parseUuidBrand$1(value, unsafeAsSiteId);
|
|
1128
1129
|
const parseApiKeyId = (value) => parseUuidBrand$1(value, unsafeAsApiKeyId);
|
|
1129
1130
|
const parseEventOfferingId = (value) => parseUuidBrand$1(value, unsafeAsEventOfferingId);
|
|
1130
1131
|
const parseUserId = (value) => parseUuidBrand$1(value, unsafeAsUserId);
|
|
1132
|
+
const parseContentVersionId = (value) => parseUuidBrand$1(value, unsafeAsContentVersionId);
|
|
1131
1133
|
const parseEventSeriesId = (value) => parseUuidBrand$1(value, unsafeAsEventSeriesId);
|
|
1132
1134
|
//#endregion
|
|
1133
1135
|
//#region ../core/src/assert-never.ts
|
|
@@ -1400,7 +1402,7 @@ function parseEventPageSurfaceDestinationMode(value) {
|
|
|
1400
1402
|
return value === "cms-managed" || value === "system-managed" ? value : void 0;
|
|
1401
1403
|
}
|
|
1402
1404
|
function parseEventPageSurfaceSubject(value) {
|
|
1403
|
-
if (!isRecord$
|
|
1405
|
+
if (!isRecord$40(value)) return err$3({ kind: "notObject" });
|
|
1404
1406
|
switch (value.kind) {
|
|
1405
1407
|
case "eventSeries": {
|
|
1406
1408
|
const eventSeriesId = parseEventSeriesId(value.eventSeriesId);
|
|
@@ -1455,7 +1457,7 @@ function parseEventSeriesIdList(values) {
|
|
|
1455
1457
|
}
|
|
1456
1458
|
return ok$3(parsed);
|
|
1457
1459
|
}
|
|
1458
|
-
function isRecord$
|
|
1460
|
+
function isRecord$40(value) {
|
|
1459
1461
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1460
1462
|
}
|
|
1461
1463
|
//#endregion
|
|
@@ -1699,7 +1701,7 @@ function toLocationCoordinates(value) {
|
|
|
1699
1701
|
}
|
|
1700
1702
|
//#endregion
|
|
1701
1703
|
//#region ../core/src/rich-text.ts
|
|
1702
|
-
function isRecord$
|
|
1704
|
+
function isRecord$38(value) {
|
|
1703
1705
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1704
1706
|
}
|
|
1705
1707
|
function hasOnlyKeys(value, allowed) {
|
|
@@ -1718,10 +1720,10 @@ function isDenseArrayOf(value, predicate) {
|
|
|
1718
1720
|
return true;
|
|
1719
1721
|
}
|
|
1720
1722
|
function isTipTapMark(value) {
|
|
1721
|
-
return isRecord$
|
|
1723
|
+
return isRecord$38(value) && hasOnlyKeys(value, markKeys) && typeof value.type === "string" && value.type.length > 0 && (value.attrs === void 0 || isRecord$38(value.attrs));
|
|
1722
1724
|
}
|
|
1723
1725
|
function isTipTapNode(value) {
|
|
1724
|
-
if (!isRecord$
|
|
1726
|
+
if (!isRecord$38(value) || !hasOnlyKeys(value, nodeKeys) || typeof value.type !== "string" || value.type.length === 0 || value.type === "doc" || value.attrs !== void 0 && !isRecord$38(value.attrs) || value.marks !== void 0 && (!Array.isArray(value.marks) || !isDenseArrayOf(value.marks, isTipTapMark)) || value.content !== void 0 && (!Array.isArray(value.content) || !isDenseArrayOf(value.content, isTipTapNode))) return false;
|
|
1725
1727
|
if (value.type === "text") return typeof value.text === "string" && value.text.length > 0 && value.content === void 0;
|
|
1726
1728
|
return value.text === void 0;
|
|
1727
1729
|
}
|
|
@@ -1740,22 +1742,28 @@ function parsePositiveInteger(value) {
|
|
|
1740
1742
|
function parseNewsletterListId(value) {
|
|
1741
1743
|
return parseTrimmedMatchingString(value, UUID_PATTERN$2);
|
|
1742
1744
|
}
|
|
1745
|
+
function parseMailchimpAccountId(value) {
|
|
1746
|
+
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
1747
|
+
}
|
|
1743
1748
|
function parseMailchimpAudienceId$1(value) {
|
|
1744
1749
|
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
1745
1750
|
}
|
|
1746
1751
|
function parseMailchimpInterestId(value) {
|
|
1747
1752
|
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
1748
1753
|
}
|
|
1754
|
+
function parseBrevoAccountId(value) {
|
|
1755
|
+
return parseTrimmedMatchingString(value, OPAQUE_ID_PATTERN);
|
|
1756
|
+
}
|
|
1749
1757
|
function parseBrevoListId(value) {
|
|
1750
1758
|
return parsePositiveInteger(value);
|
|
1751
1759
|
}
|
|
1752
1760
|
//#endregion
|
|
1753
1761
|
//#region ../core/src/mailing-list-targeting-parser.ts
|
|
1754
1762
|
function parseMailingListPlacementTargeting(value) {
|
|
1755
|
-
if (!isRecord$
|
|
1763
|
+
if (!isRecord$37(value)) return targetingError("shape");
|
|
1756
1764
|
if (value.mode === "default") return ok$3({ mode: "default" });
|
|
1757
1765
|
if (value.mode !== "custom") return targetingError("mode");
|
|
1758
|
-
if (!isRecord$
|
|
1766
|
+
if (!isRecord$37(value.selection)) return targetingError("selection");
|
|
1759
1767
|
switch (value.provider) {
|
|
1760
1768
|
case "native": return parseNativeTargeting(value.selection);
|
|
1761
1769
|
case "brevo": return parseBrevoTargeting(value.selection);
|
|
@@ -1859,7 +1867,7 @@ function parseUniqueIds(value, parseId) {
|
|
|
1859
1867
|
}
|
|
1860
1868
|
return ok$3(parsed);
|
|
1861
1869
|
}
|
|
1862
|
-
function isRecord$
|
|
1870
|
+
function isRecord$37(value) {
|
|
1863
1871
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1864
1872
|
}
|
|
1865
1873
|
function targetingError(field) {
|
|
@@ -1881,6 +1889,31 @@ new Map([
|
|
|
1881
1889
|
"legal"
|
|
1882
1890
|
].map((kind, index) => [kind, index]));
|
|
1883
1891
|
//#endregion
|
|
1892
|
+
//#region ../core/src/mailing-list-setup.ts
|
|
1893
|
+
function isRecord$34(value) {
|
|
1894
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1895
|
+
}
|
|
1896
|
+
const DEFAULT_MAILING_LIST_SUCCESS_MESSAGE = "Thanks — you're on the list.";
|
|
1897
|
+
function parseMailingListProviderScope(value) {
|
|
1898
|
+
if (!isRecord$34(value)) return err$3("invalid_mailing_list_provider_scope");
|
|
1899
|
+
if (value.provider === "native") return ok$3({ provider: "native" });
|
|
1900
|
+
if (value.provider === "brevo") {
|
|
1901
|
+
const accountId = parseBrevoAccountId(value.accountId);
|
|
1902
|
+
return accountId !== null ? ok$3({
|
|
1903
|
+
provider: "brevo",
|
|
1904
|
+
accountId
|
|
1905
|
+
}) : err$3("invalid_mailing_list_provider_scope");
|
|
1906
|
+
}
|
|
1907
|
+
if (value.provider === "mailchimp") {
|
|
1908
|
+
const accountId = parseMailchimpAccountId(value.accountId);
|
|
1909
|
+
return accountId !== null ? ok$3({
|
|
1910
|
+
provider: "mailchimp",
|
|
1911
|
+
accountId
|
|
1912
|
+
}) : err$3("invalid_mailing_list_provider_scope");
|
|
1913
|
+
}
|
|
1914
|
+
return err$3("invalid_mailing_list_provider_scope");
|
|
1915
|
+
}
|
|
1916
|
+
//#endregion
|
|
1884
1917
|
//#region ../core/src/mailing-list-setup-parser.ts
|
|
1885
1918
|
function parseMailingListGlobalForm(value) {
|
|
1886
1919
|
if (!isRecord$33(value)) return formError("shape");
|
|
@@ -1889,12 +1922,15 @@ function parseMailingListGlobalForm(value) {
|
|
|
1889
1922
|
if (typeof value.includeOptionalPhone !== "boolean") return formError("includeOptionalPhone");
|
|
1890
1923
|
const buttonLabel = parseRequiredString(value.buttonLabel);
|
|
1891
1924
|
if (buttonLabel === null) return formError("buttonLabel");
|
|
1925
|
+
const successMessage = parseRequiredString(value.successMessage);
|
|
1926
|
+
if (successMessage === null) return formError("successMessage");
|
|
1892
1927
|
const privacyNote = parseOptionalString(value.privacyNote);
|
|
1893
1928
|
if (privacyNote === void 0) return formError("privacyNote");
|
|
1894
1929
|
return ok$3({
|
|
1895
1930
|
fields,
|
|
1896
1931
|
includeOptionalPhone: value.includeOptionalPhone,
|
|
1897
1932
|
buttonLabel,
|
|
1933
|
+
successMessage,
|
|
1898
1934
|
privacyNote
|
|
1899
1935
|
});
|
|
1900
1936
|
}
|
|
@@ -2101,11 +2137,17 @@ function parseMailingListSignedSourceToken(value) {
|
|
|
2101
2137
|
const parsed = typeof value === "string" ? value.trim() : "";
|
|
2102
2138
|
return /^[A-Za-z0-9._~-]{16,1000}$/u.test(parsed) ? parsed : null;
|
|
2103
2139
|
}
|
|
2104
|
-
function
|
|
2105
|
-
const parsed =
|
|
2106
|
-
return parsed
|
|
2140
|
+
function parseMailingListContentVersionId(value) {
|
|
2141
|
+
const parsed = parseContentVersionId(value);
|
|
2142
|
+
return parsed.ok ? parsed.value : null;
|
|
2143
|
+
}
|
|
2144
|
+
function buildMailingListSignupBlockSourceRef(blockId, contentVersionId) {
|
|
2145
|
+
const parsedBlockId = parseMailingListBlockId(blockId);
|
|
2146
|
+
const parsedContentVersionId = parseMailingListContentVersionId(contentVersionId);
|
|
2147
|
+
return parsedBlockId !== null && parsedContentVersionId !== null ? {
|
|
2107
2148
|
tag: "block_ref",
|
|
2108
|
-
blockId:
|
|
2149
|
+
blockId: parsedBlockId,
|
|
2150
|
+
contentVersionId: parsedContentVersionId
|
|
2109
2151
|
} : null;
|
|
2110
2152
|
}
|
|
2111
2153
|
function sortStableJsonValue(value) {
|
|
@@ -5338,6 +5380,440 @@ function themeButtonClassName(spec) {
|
|
|
5338
5380
|
spec.extraClassName
|
|
5339
5381
|
].filter(Boolean).join(" ");
|
|
5340
5382
|
}
|
|
5383
|
+
const defaultThemeTokens = {
|
|
5384
|
+
color: {
|
|
5385
|
+
"background/base": "#ffffff",
|
|
5386
|
+
"background/elevated": "#f5f5f5",
|
|
5387
|
+
"surface/base": "#ffffff",
|
|
5388
|
+
"surface/subtle": "#f9f9fb",
|
|
5389
|
+
"surface/inverted": "#111111",
|
|
5390
|
+
"content/primary": "#111111",
|
|
5391
|
+
"content/secondary": "#3f3f46",
|
|
5392
|
+
"accent/primary": "#2563eb",
|
|
5393
|
+
"accent/secondary": "#1d4ed8",
|
|
5394
|
+
"border/base": "#e5e7eb"
|
|
5395
|
+
},
|
|
5396
|
+
typography: {
|
|
5397
|
+
"display/hero": {
|
|
5398
|
+
fontSize: "clamp(48px, 8vw, 96px)",
|
|
5399
|
+
lineHeight: "1.05",
|
|
5400
|
+
fontWeight: "700"
|
|
5401
|
+
},
|
|
5402
|
+
"display/section": {
|
|
5403
|
+
fontSize: "clamp(40px, 6vw, 72px)",
|
|
5404
|
+
lineHeight: "1.1",
|
|
5405
|
+
fontWeight: "700"
|
|
5406
|
+
},
|
|
5407
|
+
"heading/large": {
|
|
5408
|
+
fontSize: "clamp(32px, 4vw, 48px)",
|
|
5409
|
+
lineHeight: "1.2",
|
|
5410
|
+
fontWeight: "600"
|
|
5411
|
+
},
|
|
5412
|
+
"heading/medium": {
|
|
5413
|
+
fontSize: "clamp(24px, 3vw, 32px)",
|
|
5414
|
+
lineHeight: "1.25",
|
|
5415
|
+
fontWeight: "600"
|
|
5416
|
+
},
|
|
5417
|
+
"heading/small": {
|
|
5418
|
+
fontSize: "20px",
|
|
5419
|
+
lineHeight: "1.3",
|
|
5420
|
+
fontWeight: "600"
|
|
5421
|
+
},
|
|
5422
|
+
"body/normal": {
|
|
5423
|
+
fontSize: "16px",
|
|
5424
|
+
lineHeight: "1.6",
|
|
5425
|
+
fontWeight: "400"
|
|
5426
|
+
},
|
|
5427
|
+
"body/small": {
|
|
5428
|
+
fontSize: "14px",
|
|
5429
|
+
lineHeight: "1.5",
|
|
5430
|
+
fontWeight: "400"
|
|
5431
|
+
},
|
|
5432
|
+
caption: {
|
|
5433
|
+
fontSize: "12px",
|
|
5434
|
+
lineHeight: "1.4",
|
|
5435
|
+
fontWeight: "500"
|
|
5436
|
+
}
|
|
5437
|
+
},
|
|
5438
|
+
spacing: {
|
|
5439
|
+
none: "0px",
|
|
5440
|
+
"3xs": "4px",
|
|
5441
|
+
"2xs": "8px",
|
|
5442
|
+
xs: "12px",
|
|
5443
|
+
sm: "16px",
|
|
5444
|
+
md: "24px",
|
|
5445
|
+
lg: "32px",
|
|
5446
|
+
xl: "40px",
|
|
5447
|
+
"2xl": "56px",
|
|
5448
|
+
"3xl": "72px"
|
|
5449
|
+
},
|
|
5450
|
+
radius: {
|
|
5451
|
+
none: "0px",
|
|
5452
|
+
xs: "2px",
|
|
5453
|
+
sm: "4px",
|
|
5454
|
+
md: "8px",
|
|
5455
|
+
lg: "12px",
|
|
5456
|
+
pill: "999px",
|
|
5457
|
+
full: "9999px"
|
|
5458
|
+
},
|
|
5459
|
+
shadow: {
|
|
5460
|
+
none: "none",
|
|
5461
|
+
soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
|
|
5462
|
+
medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
|
|
5463
|
+
strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
|
|
5464
|
+
},
|
|
5465
|
+
palette: {
|
|
5466
|
+
surface: "#ffffff",
|
|
5467
|
+
"neutral-50": "#f9fafb",
|
|
5468
|
+
"neutral-900": "#111827",
|
|
5469
|
+
primary: "#2563eb",
|
|
5470
|
+
"primary-50": "#eff6ff",
|
|
5471
|
+
"primary-500": "#2563eb",
|
|
5472
|
+
"primary-900": "#1d4ed8",
|
|
5473
|
+
secondary: "#9333ea",
|
|
5474
|
+
"secondary-50": "#f3e8ff",
|
|
5475
|
+
"secondary-500": "#9333ea",
|
|
5476
|
+
"secondary-900": "#4c1d95",
|
|
5477
|
+
accent: "#f97316",
|
|
5478
|
+
"accent-50": "#fff7ed",
|
|
5479
|
+
"accent-500": "#f97316",
|
|
5480
|
+
"accent-900": "#7c2d12"
|
|
5481
|
+
}
|
|
5482
|
+
};
|
|
5483
|
+
/**
|
|
5484
|
+
* Project the expanded semantic palette into the token buckets consumed by
|
|
5485
|
+
* runtime transforms. Keep this mapping shared by full themes and the
|
|
5486
|
+
* tokens-only hosted-booking runtime so the two paths cannot drift.
|
|
5487
|
+
*/
|
|
5488
|
+
function buildThemeTokens(palette) {
|
|
5489
|
+
const tokens = cloneThemeTokens(defaultThemeTokens);
|
|
5490
|
+
const paletteStrings = {};
|
|
5491
|
+
for (const [key, value] of Object.entries(palette)) if (typeof value === "string" && value.trim().length > 0) paletteStrings[key] = value;
|
|
5492
|
+
tokens.palette = paletteStrings;
|
|
5493
|
+
const resolveColor = (...keys) => {
|
|
5494
|
+
for (const key of keys) {
|
|
5495
|
+
const value = paletteStrings[key];
|
|
5496
|
+
if (value) return value;
|
|
5497
|
+
}
|
|
5498
|
+
};
|
|
5499
|
+
const assignColor = (token, ...keys) => {
|
|
5500
|
+
const value = resolveColor(...keys);
|
|
5501
|
+
if (value) tokens.color[token] = value;
|
|
5502
|
+
};
|
|
5503
|
+
assignColor("background/base", "background", "surface", "primary-50");
|
|
5504
|
+
assignColor("background/elevated", "surface", "background");
|
|
5505
|
+
assignColor("surface/base", "surface", "background");
|
|
5506
|
+
assignColor("surface/subtle", "neutral-100", "surface", "background");
|
|
5507
|
+
assignColor("surface/inverted", "neutral-900", "text", "primary-900");
|
|
5508
|
+
assignColor("content/primary", "text", "body", "neutral-900");
|
|
5509
|
+
assignColor("content/secondary", "mutedText", "secondary", "neutral-600");
|
|
5510
|
+
assignColor("accent/primary", "primary", "accent");
|
|
5511
|
+
assignColor("accent/secondary", "accent", "secondary", "primary-400");
|
|
5512
|
+
assignColor("border/base", "border", "neutral-300");
|
|
5513
|
+
return tokens;
|
|
5514
|
+
}
|
|
5515
|
+
function cloneThemeTokens(source) {
|
|
5516
|
+
return JSON.parse(JSON.stringify(source));
|
|
5517
|
+
}
|
|
5518
|
+
//#endregion
|
|
5519
|
+
//#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
|
|
5520
|
+
/** Resolve an opaque colour, compositing alpha against an explicit underlay. */
|
|
5521
|
+
function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
|
|
5522
|
+
const opaque = resolveConcreteColorHex(reference, palette);
|
|
5523
|
+
if (opaque) return opaque;
|
|
5524
|
+
if (!underlayReference) return null;
|
|
5525
|
+
const underlayHex = resolveConcreteColorHex(underlayReference, palette);
|
|
5526
|
+
if (!underlayHex) return null;
|
|
5527
|
+
const parts = parseColorTokenParts(reference);
|
|
5528
|
+
if (parts.kind === "token" && parts.opacityPercent !== null) {
|
|
5529
|
+
const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
|
|
5530
|
+
return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
|
|
5531
|
+
}
|
|
5532
|
+
const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
|
|
5533
|
+
return rgba ? compositeHex(rgbToHex$1(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
|
|
5534
|
+
}
|
|
5535
|
+
/** Resolve a colour reference only when it is already fully opaque. */
|
|
5536
|
+
function resolveConcreteColorHex(reference, palette) {
|
|
5537
|
+
const literalHex = normalizePaletteHex(reference);
|
|
5538
|
+
if (literalHex) return literalHex;
|
|
5539
|
+
const parts = parseColorTokenParts(reference);
|
|
5540
|
+
if (parts.kind === "token") {
|
|
5541
|
+
if (parts.opacityPercent !== null) return null;
|
|
5542
|
+
return normalizePaletteHex(palette[parts.token] ?? "");
|
|
5543
|
+
}
|
|
5544
|
+
const literal = parts.kind === "raw" ? parts.value : reference;
|
|
5545
|
+
if (literal.toLowerCase() === "black") return "#000000";
|
|
5546
|
+
if (literal.toLowerCase() === "white") return "#ffffff";
|
|
5547
|
+
return normalizePaletteHex(literal);
|
|
5548
|
+
}
|
|
5549
|
+
function compositeHex(foregroundHex, underlayHex, alpha) {
|
|
5550
|
+
const foreground = hexToRgb$1(foregroundHex);
|
|
5551
|
+
const underlay = hexToRgb$1(underlayHex);
|
|
5552
|
+
const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
|
|
5553
|
+
return rgbToHex$1(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
|
|
5554
|
+
}
|
|
5555
|
+
function parseRgba(value) {
|
|
5556
|
+
const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
|
|
5557
|
+
if (!match) return null;
|
|
5558
|
+
const [, rSource, gSource, bSource] = match;
|
|
5559
|
+
if (!rSource || !gSource || !bSource) return null;
|
|
5560
|
+
const r = Number(rSource);
|
|
5561
|
+
const g = Number(gSource);
|
|
5562
|
+
const b = Number(bSource);
|
|
5563
|
+
const alpha = parseAlpha(match[4]);
|
|
5564
|
+
if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
|
|
5565
|
+
return {
|
|
5566
|
+
r,
|
|
5567
|
+
g,
|
|
5568
|
+
b,
|
|
5569
|
+
alpha
|
|
5570
|
+
};
|
|
5571
|
+
}
|
|
5572
|
+
function parseAlpha(source) {
|
|
5573
|
+
if (!source) return 1;
|
|
5574
|
+
const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
|
|
5575
|
+
return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
|
|
5576
|
+
}
|
|
5577
|
+
function isRgbChannel(value) {
|
|
5578
|
+
return Number.isFinite(value) && value >= 0 && value <= 255;
|
|
5579
|
+
}
|
|
5580
|
+
//#endregion
|
|
5581
|
+
//#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
|
|
5582
|
+
const FALLBACK_TEXT_TOKENS = [
|
|
5583
|
+
"text",
|
|
5584
|
+
"primaryForeground",
|
|
5585
|
+
"secondaryForeground",
|
|
5586
|
+
"accentForeground",
|
|
5587
|
+
"neutral-950",
|
|
5588
|
+
"neutral-50"
|
|
5589
|
+
];
|
|
5590
|
+
const CANONICAL_EQUIVALENT_TOKEN_ORDER = [
|
|
5591
|
+
"text",
|
|
5592
|
+
"primaryForeground",
|
|
5593
|
+
"secondaryForeground",
|
|
5594
|
+
"accentForeground",
|
|
5595
|
+
"onPrimary",
|
|
5596
|
+
"onSecondary",
|
|
5597
|
+
"onAccent",
|
|
5598
|
+
"onSurface",
|
|
5599
|
+
"neutral-950",
|
|
5600
|
+
"neutral-50"
|
|
5601
|
+
];
|
|
5602
|
+
/**
|
|
5603
|
+
* Resolve the complete foreground contract for an effective page/section or
|
|
5604
|
+
* site-chrome background.
|
|
5605
|
+
*
|
|
5606
|
+
* Deterministic colour backgrounds are validated at ordinary-text WCAG AA.
|
|
5607
|
+
* Existing image/video/gradient treatments are trusted only when they already
|
|
5608
|
+
* carry a usable foreground token; this function deliberately does not claim
|
|
5609
|
+
* pixel-level contrast proof for media.
|
|
5610
|
+
*/
|
|
5611
|
+
function resolveSurfaceForeground(background, palette, candidates = {}, options = {}) {
|
|
5612
|
+
const authored = foregroundCandidates(background, candidates);
|
|
5613
|
+
if (background === null) return resolveDeterministicForeground("background", {
|
|
5614
|
+
...authored,
|
|
5615
|
+
text: authored.text ?? "text"
|
|
5616
|
+
}, palette);
|
|
5617
|
+
if (background.type === "color") {
|
|
5618
|
+
const backgroundReference = normalizedReference(background.color);
|
|
5619
|
+
if (!backgroundReference || backgroundReference === "transparent") return { kind: "unknown" };
|
|
5620
|
+
return resolveDeterministicForeground(backgroundReference, authored, palette, options.compositeBase);
|
|
5621
|
+
}
|
|
5622
|
+
return resolveTrustedTreatmentForeground(authored, palette);
|
|
5623
|
+
}
|
|
5624
|
+
function foregroundCandidates(background, overrides) {
|
|
5625
|
+
return {
|
|
5626
|
+
text: overrides.text ?? background?.textColor ?? null,
|
|
5627
|
+
heading: overrides.heading ?? background?.headingColor ?? null,
|
|
5628
|
+
link: overrides.link ?? background?.linkColor ?? null,
|
|
5629
|
+
supporting: overrides.supporting ?? background?.supportingColor ?? null
|
|
5630
|
+
};
|
|
5631
|
+
}
|
|
5632
|
+
function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
|
|
5633
|
+
const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
|
|
5634
|
+
if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
|
|
5635
|
+
const backgroundToken = paletteToken(backgroundReference);
|
|
5636
|
+
const derivedOnToken = backgroundToken ? onColorTokenName(backgroundToken) : null;
|
|
5637
|
+
const text = firstSafeToken([
|
|
5638
|
+
candidates.text,
|
|
5639
|
+
derivedOnToken,
|
|
5640
|
+
...FALLBACK_TEXT_TOKENS
|
|
5641
|
+
], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
|
|
5642
|
+
if (!text) return { kind: "unknown" };
|
|
5643
|
+
return {
|
|
5644
|
+
kind: "known",
|
|
5645
|
+
roles: {
|
|
5646
|
+
text,
|
|
5647
|
+
heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
|
|
5648
|
+
link: safeTokenOr(candidates.link, text, backgroundHex, palette),
|
|
5649
|
+
supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
|
|
5650
|
+
}
|
|
5651
|
+
};
|
|
5652
|
+
}
|
|
5653
|
+
function resolveTrustedTreatmentForeground(candidates, palette) {
|
|
5654
|
+
const text = canonicalToken(candidates.text, palette);
|
|
5655
|
+
if (!text) return { kind: "unknown" };
|
|
5656
|
+
return {
|
|
5657
|
+
kind: "known",
|
|
5658
|
+
roles: {
|
|
5659
|
+
text,
|
|
5660
|
+
heading: canonicalToken(candidates.heading, palette) ?? text,
|
|
5661
|
+
link: canonicalToken(candidates.link, palette) ?? text,
|
|
5662
|
+
supporting: canonicalToken(candidates.supporting, palette) ?? text
|
|
5663
|
+
}
|
|
5664
|
+
};
|
|
5665
|
+
}
|
|
5666
|
+
function safeTokenOr(candidate, fallback, backgroundHex, palette) {
|
|
5667
|
+
return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
|
|
5668
|
+
}
|
|
5669
|
+
function firstSafeToken(candidates, backgroundHex, palette, preferredEquivalentTokens = []) {
|
|
5670
|
+
const seen = /* @__PURE__ */ new Set();
|
|
5671
|
+
for (const candidate of candidates) {
|
|
5672
|
+
const token = canonicalToken(candidate, palette, preferredEquivalentTokens);
|
|
5673
|
+
if (!token || seen.has(token)) continue;
|
|
5674
|
+
seen.add(token);
|
|
5675
|
+
const foregroundHex = resolveConcreteColorHex(token, palette);
|
|
5676
|
+
if (foregroundHex && contrastRatio(backgroundHex, foregroundHex) >= 4.5) return token;
|
|
5677
|
+
}
|
|
5678
|
+
return null;
|
|
5679
|
+
}
|
|
5680
|
+
function canonicalToken(reference, palette, preferredEquivalentTokens = []) {
|
|
5681
|
+
const normalized = normalizedReference(reference);
|
|
5682
|
+
if (!normalized || normalized === "transparent") return null;
|
|
5683
|
+
const direct = parseThemeColorToken(normalized);
|
|
5684
|
+
if (direct && resolveConcreteColorHex(direct, palette)) return direct;
|
|
5685
|
+
const referenceHex = resolveConcreteColorHex(normalized, palette);
|
|
5686
|
+
if (!referenceHex) return null;
|
|
5687
|
+
const equivalent = [
|
|
5688
|
+
...preferredEquivalentTokens,
|
|
5689
|
+
...CANONICAL_EQUIVALENT_TOKEN_ORDER,
|
|
5690
|
+
...Object.keys(palette).sort()
|
|
5691
|
+
].find((token) => {
|
|
5692
|
+
const parsed = parseThemeColorToken(token);
|
|
5693
|
+
return parsed !== null && resolveConcreteColorHex(parsed, palette)?.toLowerCase() === referenceHex.toLowerCase();
|
|
5694
|
+
});
|
|
5695
|
+
return equivalent ? parseThemeColorToken(equivalent) : null;
|
|
5696
|
+
}
|
|
5697
|
+
function paletteToken(reference) {
|
|
5698
|
+
const parts = parseColorTokenParts(reference);
|
|
5699
|
+
return parts.kind === "token" && parts.opacityPercent === null ? parts.token : null;
|
|
5700
|
+
}
|
|
5701
|
+
function normalizedReference(value) {
|
|
5702
|
+
if (typeof value !== "string") return null;
|
|
5703
|
+
const normalized = value.trim();
|
|
5704
|
+
return normalized.length > 0 ? normalized : null;
|
|
5705
|
+
}
|
|
5706
|
+
//#endregion
|
|
5707
|
+
//#region ../theme-core/src/utils/colorStyles.ts
|
|
5708
|
+
const COLOR_VAR_PREFIX = "--tb-";
|
|
5709
|
+
function parseToken(source) {
|
|
5710
|
+
const parts = parseColorTokenParts(source);
|
|
5711
|
+
if (parts.kind === "raw") return {
|
|
5712
|
+
token: source,
|
|
5713
|
+
raw: parts.value
|
|
5714
|
+
};
|
|
5715
|
+
if (parts.kind === "invalid") return { token: source };
|
|
5716
|
+
return {
|
|
5717
|
+
token: parts.token,
|
|
5718
|
+
opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
|
|
5719
|
+
};
|
|
5720
|
+
}
|
|
5721
|
+
const SURFACE_TEXT_ROLE_BY_TOKEN = {
|
|
5722
|
+
text: "text",
|
|
5723
|
+
heading: "heading",
|
|
5724
|
+
mutedText: "supporting"
|
|
5725
|
+
};
|
|
5726
|
+
function surfaceRoleForTextToken(token) {
|
|
5727
|
+
return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
|
|
5728
|
+
}
|
|
5729
|
+
/**
|
|
5730
|
+
* Converts a theme color token to a CSS rgb value.
|
|
5731
|
+
* This is the primary function for applying theme colors to CSS properties.
|
|
5732
|
+
*
|
|
5733
|
+
* @param token - Theme color token (semantic, with opacity, or raw)
|
|
5734
|
+
* @returns CSS color value (rgb with optional alpha, or raw CSS value)
|
|
5735
|
+
*
|
|
5736
|
+
* @example
|
|
5737
|
+
* rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
|
|
5738
|
+
* rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
|
|
5739
|
+
* rgbColorValue('raw:transparent') // => 'transparent'
|
|
5740
|
+
*/
|
|
5741
|
+
function rgbColorValue(token) {
|
|
5742
|
+
const { token: baseToken, opacityPercent, raw } = parseToken(token);
|
|
5743
|
+
if (raw) return raw;
|
|
5744
|
+
const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
|
|
5745
|
+
if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
|
|
5746
|
+
return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
|
|
5747
|
+
}
|
|
5748
|
+
/**
|
|
5749
|
+
* Converts a theme color token to a CSS variable reference.
|
|
5750
|
+
* Note: This returns the base variable without rgb() wrapper, ignoring opacity.
|
|
5751
|
+
*
|
|
5752
|
+
* @param token - Theme color token
|
|
5753
|
+
* @returns CSS variable reference
|
|
5754
|
+
*
|
|
5755
|
+
* @example
|
|
5756
|
+
* cssVarValue('primary') // => 'var(--tb-primary)'
|
|
5757
|
+
* cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
|
|
5758
|
+
*/
|
|
5759
|
+
function cssVarValue(token) {
|
|
5760
|
+
const { token: baseToken } = parseToken(token);
|
|
5761
|
+
return `var(${COLOR_VAR_PREFIX}${baseToken})`;
|
|
5762
|
+
}
|
|
5763
|
+
/**
|
|
5764
|
+
* Creates a backgroundColor style object from a theme token.
|
|
5765
|
+
*
|
|
5766
|
+
* @param token - Theme color token
|
|
5767
|
+
* @returns CSSProperties with backgroundColor
|
|
5768
|
+
*/
|
|
5769
|
+
function backgroundColorStyle(token) {
|
|
5770
|
+
return { backgroundColor: rgbColorValue(token) };
|
|
5771
|
+
}
|
|
5772
|
+
/**
|
|
5773
|
+
* Creates a text color style object from a theme token.
|
|
5774
|
+
*
|
|
5775
|
+
* @param token - Theme color token
|
|
5776
|
+
* @returns CSSProperties with color
|
|
5777
|
+
*/
|
|
5778
|
+
function textColorStyle(token) {
|
|
5779
|
+
const parsed = parseToken(token);
|
|
5780
|
+
const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
|
|
5781
|
+
if (surfaceRole) return { color: parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent) };
|
|
5782
|
+
return { color: rgbColorValue(token) };
|
|
5783
|
+
}
|
|
5784
|
+
/**
|
|
5785
|
+
* Creates a border color style object from a theme token.
|
|
5786
|
+
*
|
|
5787
|
+
* @param token - Theme color token
|
|
5788
|
+
* @returns CSSProperties with borderColor
|
|
5789
|
+
*/
|
|
5790
|
+
function borderColorStyle(token) {
|
|
5791
|
+
return { borderColor: rgbColorValue(token) };
|
|
5792
|
+
}
|
|
5793
|
+
/**
|
|
5794
|
+
* Merges multiple CSSProperties objects into a single object.
|
|
5795
|
+
* Later styles override earlier ones. Undefined values are filtered out.
|
|
5796
|
+
* Returns undefined if the merged result is empty.
|
|
5797
|
+
*
|
|
5798
|
+
* @param styles - Variable number of CSSProperties objects (can be undefined)
|
|
5799
|
+
* @returns Merged CSSProperties object, or undefined if empty
|
|
5800
|
+
*
|
|
5801
|
+
* @example
|
|
5802
|
+
* mergeStyles(
|
|
5803
|
+
* backgroundColorStyle('surface'),
|
|
5804
|
+
* textColorStyle('text'),
|
|
5805
|
+
* borderColorStyle('border')
|
|
5806
|
+
* )
|
|
5807
|
+
* // => { backgroundColor: '...', color: '...', borderColor: '...' }
|
|
5808
|
+
*/
|
|
5809
|
+
function mergeStyles(...styles) {
|
|
5810
|
+
const merged = {};
|
|
5811
|
+
for (const style of styles) {
|
|
5812
|
+
if (!style) continue;
|
|
5813
|
+
Object.assign(merged, style);
|
|
5814
|
+
}
|
|
5815
|
+
return Object.keys(merged).length ? merged : void 0;
|
|
5816
|
+
}
|
|
5341
5817
|
//#endregion
|
|
5342
5818
|
//#region ../theme-core/src/tokens/resolver.ts
|
|
5343
5819
|
/**
|
|
@@ -5365,7 +5841,7 @@ var TokenResolver = class {
|
|
|
5365
5841
|
*/
|
|
5366
5842
|
getColor(token) {
|
|
5367
5843
|
if (!this.tokenExists(token)) console.warn(`[TokenResolver] Color token "${token}" not found in theme palette. Button may render incorrectly.`);
|
|
5368
|
-
return
|
|
5844
|
+
return rgbColorValue(token);
|
|
5369
5845
|
}
|
|
5370
5846
|
/**
|
|
5371
5847
|
* Adjust a color token's shade by a given amount
|
|
@@ -6837,305 +7313,6 @@ function affordanceIconMaskUrl(iconId) {
|
|
|
6837
7313
|
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, " ")}`;
|
|
6838
7314
|
}
|
|
6839
7315
|
//#endregion
|
|
6840
|
-
//#region ../theme-core/src/palette/utils/opaqueSurfaceColor.ts
|
|
6841
|
-
/** Resolve an opaque colour, compositing alpha against an explicit underlay. */
|
|
6842
|
-
function resolveOpaqueSurfaceHex(reference, palette, underlayReference) {
|
|
6843
|
-
const opaque = resolveConcreteColorHex(reference, palette);
|
|
6844
|
-
if (opaque) return opaque;
|
|
6845
|
-
if (!underlayReference) return null;
|
|
6846
|
-
const underlayHex = resolveConcreteColorHex(underlayReference, palette);
|
|
6847
|
-
if (!underlayHex) return null;
|
|
6848
|
-
const parts = parseColorTokenParts(reference);
|
|
6849
|
-
if (parts.kind === "token" && parts.opacityPercent !== null) {
|
|
6850
|
-
const foregroundHex = normalizePaletteHex(palette[parts.token] ?? "");
|
|
6851
|
-
return foregroundHex ? compositeHex(foregroundHex, underlayHex, parts.opacityPercent / 100) : null;
|
|
6852
|
-
}
|
|
6853
|
-
const rgba = parseRgba(parts.kind === "raw" ? parts.value : reference);
|
|
6854
|
-
return rgba ? compositeHex(rgbToHex$1(rgba.r, rgba.g, rgba.b), underlayHex, rgba.alpha) : null;
|
|
6855
|
-
}
|
|
6856
|
-
/** Resolve a colour reference only when it is already fully opaque. */
|
|
6857
|
-
function resolveConcreteColorHex(reference, palette) {
|
|
6858
|
-
const literalHex = normalizePaletteHex(reference);
|
|
6859
|
-
if (literalHex) return literalHex;
|
|
6860
|
-
const parts = parseColorTokenParts(reference);
|
|
6861
|
-
if (parts.kind === "token") {
|
|
6862
|
-
if (parts.opacityPercent !== null) return null;
|
|
6863
|
-
return normalizePaletteHex(palette[parts.token] ?? "");
|
|
6864
|
-
}
|
|
6865
|
-
const literal = parts.kind === "raw" ? parts.value : reference;
|
|
6866
|
-
if (literal.toLowerCase() === "black") return "#000000";
|
|
6867
|
-
if (literal.toLowerCase() === "white") return "#ffffff";
|
|
6868
|
-
return normalizePaletteHex(literal);
|
|
6869
|
-
}
|
|
6870
|
-
function compositeHex(foregroundHex, underlayHex, alpha) {
|
|
6871
|
-
const foreground = hexToRgb$1(foregroundHex);
|
|
6872
|
-
const underlay = hexToRgb$1(underlayHex);
|
|
6873
|
-
const channel = (foregroundValue, underlayValue) => Math.round(foregroundValue * alpha + underlayValue * (1 - alpha));
|
|
6874
|
-
return rgbToHex$1(channel(foreground.r, underlay.r), channel(foreground.g, underlay.g), channel(foreground.b, underlay.b));
|
|
6875
|
-
}
|
|
6876
|
-
function parseRgba(value) {
|
|
6877
|
-
const match = value.trim().match(/^rgba?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*,\s*|\s+)([\d.]+)(?:\s*(?:,|\/)\s*([\d.]+%?))?\s*\)$/i);
|
|
6878
|
-
if (!match) return null;
|
|
6879
|
-
const [, rSource, gSource, bSource] = match;
|
|
6880
|
-
if (!rSource || !gSource || !bSource) return null;
|
|
6881
|
-
const r = Number(rSource);
|
|
6882
|
-
const g = Number(gSource);
|
|
6883
|
-
const b = Number(bSource);
|
|
6884
|
-
const alpha = parseAlpha(match[4]);
|
|
6885
|
-
if (alpha === null || !isRgbChannel(r) || !isRgbChannel(g) || !isRgbChannel(b)) return null;
|
|
6886
|
-
return {
|
|
6887
|
-
r,
|
|
6888
|
-
g,
|
|
6889
|
-
b,
|
|
6890
|
-
alpha
|
|
6891
|
-
};
|
|
6892
|
-
}
|
|
6893
|
-
function parseAlpha(source) {
|
|
6894
|
-
if (!source) return 1;
|
|
6895
|
-
const value = source.endsWith("%") ? Number(source.slice(0, -1)) / 100 : Number(source);
|
|
6896
|
-
return Number.isFinite(value) && value >= 0 && value <= 1 ? value : null;
|
|
6897
|
-
}
|
|
6898
|
-
function isRgbChannel(value) {
|
|
6899
|
-
return Number.isFinite(value) && value >= 0 && value <= 255;
|
|
6900
|
-
}
|
|
6901
|
-
//#endregion
|
|
6902
|
-
//#region ../theme-core/src/surfaces/resolveSurfaceForeground.ts
|
|
6903
|
-
const FALLBACK_TEXT_TOKENS = [
|
|
6904
|
-
"text",
|
|
6905
|
-
"primaryForeground",
|
|
6906
|
-
"secondaryForeground",
|
|
6907
|
-
"accentForeground",
|
|
6908
|
-
"neutral-950",
|
|
6909
|
-
"neutral-50"
|
|
6910
|
-
];
|
|
6911
|
-
const CANONICAL_EQUIVALENT_TOKEN_ORDER = [
|
|
6912
|
-
"text",
|
|
6913
|
-
"primaryForeground",
|
|
6914
|
-
"secondaryForeground",
|
|
6915
|
-
"accentForeground",
|
|
6916
|
-
"onPrimary",
|
|
6917
|
-
"onSecondary",
|
|
6918
|
-
"onAccent",
|
|
6919
|
-
"onSurface",
|
|
6920
|
-
"neutral-950",
|
|
6921
|
-
"neutral-50"
|
|
6922
|
-
];
|
|
6923
|
-
/**
|
|
6924
|
-
* Resolve the complete foreground contract for an effective page/section or
|
|
6925
|
-
* site-chrome background.
|
|
6926
|
-
*
|
|
6927
|
-
* Deterministic colour backgrounds are validated at ordinary-text WCAG AA.
|
|
6928
|
-
* Existing image/video/gradient treatments are trusted only when they already
|
|
6929
|
-
* carry a usable foreground token; this function deliberately does not claim
|
|
6930
|
-
* pixel-level contrast proof for media.
|
|
6931
|
-
*/
|
|
6932
|
-
function resolveSurfaceForeground(background, palette, candidates = {}, options = {}) {
|
|
6933
|
-
const authored = foregroundCandidates(background, candidates);
|
|
6934
|
-
if (background === null) return resolveDeterministicForeground("background", {
|
|
6935
|
-
...authored,
|
|
6936
|
-
text: authored.text ?? "text"
|
|
6937
|
-
}, palette);
|
|
6938
|
-
if (background.type === "color") {
|
|
6939
|
-
const backgroundReference = normalizedReference(background.color);
|
|
6940
|
-
if (!backgroundReference || backgroundReference === "transparent") return { kind: "unknown" };
|
|
6941
|
-
return resolveDeterministicForeground(backgroundReference, authored, palette, options.compositeBase);
|
|
6942
|
-
}
|
|
6943
|
-
return resolveTrustedTreatmentForeground(authored, palette);
|
|
6944
|
-
}
|
|
6945
|
-
function foregroundCandidates(background, overrides) {
|
|
6946
|
-
return {
|
|
6947
|
-
text: overrides.text ?? background?.textColor ?? null,
|
|
6948
|
-
heading: overrides.heading ?? background?.headingColor ?? null,
|
|
6949
|
-
link: overrides.link ?? background?.linkColor ?? null,
|
|
6950
|
-
supporting: overrides.supporting ?? background?.supportingColor ?? null
|
|
6951
|
-
};
|
|
6952
|
-
}
|
|
6953
|
-
function resolveDeterministicForeground(backgroundReference, candidates, palette, compositeBase) {
|
|
6954
|
-
const backgroundHex = resolveOpaqueSurfaceHex(backgroundReference, palette, compositeBase);
|
|
6955
|
-
if (!backgroundHex) return resolveTrustedTreatmentForeground(candidates, palette);
|
|
6956
|
-
const backgroundToken = paletteToken(backgroundReference);
|
|
6957
|
-
const derivedOnToken = backgroundToken ? onColorTokenName(backgroundToken) : null;
|
|
6958
|
-
const text = firstSafeToken([
|
|
6959
|
-
candidates.text,
|
|
6960
|
-
derivedOnToken,
|
|
6961
|
-
...FALLBACK_TEXT_TOKENS
|
|
6962
|
-
], backgroundHex, palette, derivedOnToken ? [derivedOnToken] : []);
|
|
6963
|
-
if (!text) return { kind: "unknown" };
|
|
6964
|
-
return {
|
|
6965
|
-
kind: "known",
|
|
6966
|
-
roles: {
|
|
6967
|
-
text,
|
|
6968
|
-
heading: safeTokenOr(candidates.heading, text, backgroundHex, palette),
|
|
6969
|
-
link: safeTokenOr(candidates.link, text, backgroundHex, palette),
|
|
6970
|
-
supporting: safeTokenOr(candidates.supporting, text, backgroundHex, palette)
|
|
6971
|
-
}
|
|
6972
|
-
};
|
|
6973
|
-
}
|
|
6974
|
-
function resolveTrustedTreatmentForeground(candidates, palette) {
|
|
6975
|
-
const text = canonicalToken(candidates.text, palette);
|
|
6976
|
-
if (!text) return { kind: "unknown" };
|
|
6977
|
-
return {
|
|
6978
|
-
kind: "known",
|
|
6979
|
-
roles: {
|
|
6980
|
-
text,
|
|
6981
|
-
heading: canonicalToken(candidates.heading, palette) ?? text,
|
|
6982
|
-
link: canonicalToken(candidates.link, palette) ?? text,
|
|
6983
|
-
supporting: canonicalToken(candidates.supporting, palette) ?? text
|
|
6984
|
-
}
|
|
6985
|
-
};
|
|
6986
|
-
}
|
|
6987
|
-
function safeTokenOr(candidate, fallback, backgroundHex, palette) {
|
|
6988
|
-
return firstSafeToken([candidate], backgroundHex, palette) ?? fallback;
|
|
6989
|
-
}
|
|
6990
|
-
function firstSafeToken(candidates, backgroundHex, palette, preferredEquivalentTokens = []) {
|
|
6991
|
-
const seen = /* @__PURE__ */ new Set();
|
|
6992
|
-
for (const candidate of candidates) {
|
|
6993
|
-
const token = canonicalToken(candidate, palette, preferredEquivalentTokens);
|
|
6994
|
-
if (!token || seen.has(token)) continue;
|
|
6995
|
-
seen.add(token);
|
|
6996
|
-
const foregroundHex = resolveConcreteColorHex(token, palette);
|
|
6997
|
-
if (foregroundHex && contrastRatio(backgroundHex, foregroundHex) >= 4.5) return token;
|
|
6998
|
-
}
|
|
6999
|
-
return null;
|
|
7000
|
-
}
|
|
7001
|
-
function canonicalToken(reference, palette, preferredEquivalentTokens = []) {
|
|
7002
|
-
const normalized = normalizedReference(reference);
|
|
7003
|
-
if (!normalized || normalized === "transparent") return null;
|
|
7004
|
-
const direct = parseThemeColorToken(normalized);
|
|
7005
|
-
if (direct && resolveConcreteColorHex(direct, palette)) return direct;
|
|
7006
|
-
const referenceHex = resolveConcreteColorHex(normalized, palette);
|
|
7007
|
-
if (!referenceHex) return null;
|
|
7008
|
-
const equivalent = [
|
|
7009
|
-
...preferredEquivalentTokens,
|
|
7010
|
-
...CANONICAL_EQUIVALENT_TOKEN_ORDER,
|
|
7011
|
-
...Object.keys(palette).sort()
|
|
7012
|
-
].find((token) => {
|
|
7013
|
-
const parsed = parseThemeColorToken(token);
|
|
7014
|
-
return parsed !== null && resolveConcreteColorHex(parsed, palette)?.toLowerCase() === referenceHex.toLowerCase();
|
|
7015
|
-
});
|
|
7016
|
-
return equivalent ? parseThemeColorToken(equivalent) : null;
|
|
7017
|
-
}
|
|
7018
|
-
function paletteToken(reference) {
|
|
7019
|
-
const parts = parseColorTokenParts(reference);
|
|
7020
|
-
return parts.kind === "token" && parts.opacityPercent === null ? parts.token : null;
|
|
7021
|
-
}
|
|
7022
|
-
function normalizedReference(value) {
|
|
7023
|
-
if (typeof value !== "string") return null;
|
|
7024
|
-
const normalized = value.trim();
|
|
7025
|
-
return normalized.length > 0 ? normalized : null;
|
|
7026
|
-
}
|
|
7027
|
-
//#endregion
|
|
7028
|
-
//#region ../theme-core/src/utils/colorStyles.ts
|
|
7029
|
-
const COLOR_VAR_PREFIX = "--tb-";
|
|
7030
|
-
function parseToken(source) {
|
|
7031
|
-
const parts = parseColorTokenParts(source);
|
|
7032
|
-
if (parts.kind === "raw") return {
|
|
7033
|
-
token: source,
|
|
7034
|
-
raw: parts.value
|
|
7035
|
-
};
|
|
7036
|
-
if (parts.kind === "invalid") return { token: source };
|
|
7037
|
-
return {
|
|
7038
|
-
token: parts.token,
|
|
7039
|
-
opacityPercent: parts.opacityPercent === null ? void 0 : parts.opacityPercent
|
|
7040
|
-
};
|
|
7041
|
-
}
|
|
7042
|
-
const SURFACE_TEXT_ROLE_BY_TOKEN = {
|
|
7043
|
-
text: "text",
|
|
7044
|
-
heading: "heading",
|
|
7045
|
-
mutedText: "supporting"
|
|
7046
|
-
};
|
|
7047
|
-
function surfaceRoleForTextToken(token) {
|
|
7048
|
-
return Object.prototype.hasOwnProperty.call(SURFACE_TEXT_ROLE_BY_TOKEN, token) ? SURFACE_TEXT_ROLE_BY_TOKEN[token] : null;
|
|
7049
|
-
}
|
|
7050
|
-
/**
|
|
7051
|
-
* Converts a theme color token to a CSS rgb value.
|
|
7052
|
-
* This is the primary function for applying theme colors to CSS properties.
|
|
7053
|
-
*
|
|
7054
|
-
* @param token - Theme color token (semantic, with opacity, or raw)
|
|
7055
|
-
* @returns CSS color value (rgb with optional alpha, or raw CSS value)
|
|
7056
|
-
*
|
|
7057
|
-
* @example
|
|
7058
|
-
* rgbColorValue('primary') // => 'rgb(var(--tb-primary))'
|
|
7059
|
-
* rgbColorValue('surface/95') // => 'rgb(var(--tb-surface) / 0.95)'
|
|
7060
|
-
* rgbColorValue('raw:transparent') // => 'transparent'
|
|
7061
|
-
*/
|
|
7062
|
-
function rgbColorValue(token) {
|
|
7063
|
-
const { token: baseToken, opacityPercent, raw } = parseToken(token);
|
|
7064
|
-
if (raw) return raw;
|
|
7065
|
-
const cssVar = `${COLOR_VAR_PREFIX}${baseToken}`;
|
|
7066
|
-
if (opacityPercent === void 0) return `rgb(var(${cssVar}))`;
|
|
7067
|
-
return `rgb(var(${cssVar}) / ${opacityPercent / 100})`;
|
|
7068
|
-
}
|
|
7069
|
-
/**
|
|
7070
|
-
* Converts a theme color token to a CSS variable reference.
|
|
7071
|
-
* Note: This returns the base variable without rgb() wrapper, ignoring opacity.
|
|
7072
|
-
*
|
|
7073
|
-
* @param token - Theme color token
|
|
7074
|
-
* @returns CSS variable reference
|
|
7075
|
-
*
|
|
7076
|
-
* @example
|
|
7077
|
-
* cssVarValue('primary') // => 'var(--tb-primary)'
|
|
7078
|
-
* cssVarValue('surface/95') // => 'var(--tb-surface)' (opacity ignored)
|
|
7079
|
-
*/
|
|
7080
|
-
function cssVarValue(token) {
|
|
7081
|
-
const { token: baseToken } = parseToken(token);
|
|
7082
|
-
return `var(${COLOR_VAR_PREFIX}${baseToken})`;
|
|
7083
|
-
}
|
|
7084
|
-
/**
|
|
7085
|
-
* Creates a backgroundColor style object from a theme token.
|
|
7086
|
-
*
|
|
7087
|
-
* @param token - Theme color token
|
|
7088
|
-
* @returns CSSProperties with backgroundColor
|
|
7089
|
-
*/
|
|
7090
|
-
function backgroundColorStyle(token) {
|
|
7091
|
-
return { backgroundColor: rgbColorValue(token) };
|
|
7092
|
-
}
|
|
7093
|
-
/**
|
|
7094
|
-
* Creates a text color style object from a theme token.
|
|
7095
|
-
*
|
|
7096
|
-
* @param token - Theme color token
|
|
7097
|
-
* @returns CSSProperties with color
|
|
7098
|
-
*/
|
|
7099
|
-
function textColorStyle(token) {
|
|
7100
|
-
const parsed = parseToken(token);
|
|
7101
|
-
const surfaceRole = parsed.raw ? null : surfaceRoleForTextToken(parsed.token);
|
|
7102
|
-
if (surfaceRole) return { color: parsed.opacityPercent === void 0 ? surfaceForegroundValue(surfaceRole) : surfaceForegroundValueWithOpacity(surfaceRole, parsed.opacityPercent) };
|
|
7103
|
-
return { color: rgbColorValue(token) };
|
|
7104
|
-
}
|
|
7105
|
-
/**
|
|
7106
|
-
* Creates a border color style object from a theme token.
|
|
7107
|
-
*
|
|
7108
|
-
* @param token - Theme color token
|
|
7109
|
-
* @returns CSSProperties with borderColor
|
|
7110
|
-
*/
|
|
7111
|
-
function borderColorStyle(token) {
|
|
7112
|
-
return { borderColor: rgbColorValue(token) };
|
|
7113
|
-
}
|
|
7114
|
-
/**
|
|
7115
|
-
* Merges multiple CSSProperties objects into a single object.
|
|
7116
|
-
* Later styles override earlier ones. Undefined values are filtered out.
|
|
7117
|
-
* Returns undefined if the merged result is empty.
|
|
7118
|
-
*
|
|
7119
|
-
* @param styles - Variable number of CSSProperties objects (can be undefined)
|
|
7120
|
-
* @returns Merged CSSProperties object, or undefined if empty
|
|
7121
|
-
*
|
|
7122
|
-
* @example
|
|
7123
|
-
* mergeStyles(
|
|
7124
|
-
* backgroundColorStyle('surface'),
|
|
7125
|
-
* textColorStyle('text'),
|
|
7126
|
-
* borderColorStyle('border')
|
|
7127
|
-
* )
|
|
7128
|
-
* // => { backgroundColor: '...', color: '...', borderColor: '...' }
|
|
7129
|
-
*/
|
|
7130
|
-
function mergeStyles(...styles) {
|
|
7131
|
-
const merged = {};
|
|
7132
|
-
for (const style of styles) {
|
|
7133
|
-
if (!style) continue;
|
|
7134
|
-
Object.assign(merged, style);
|
|
7135
|
-
}
|
|
7136
|
-
return Object.keys(merged).length ? merged : void 0;
|
|
7137
|
-
}
|
|
7138
|
-
//#endregion
|
|
7139
7316
|
//#region ../theme-core/src/utils/tokenOrColor.ts
|
|
7140
7317
|
/**
|
|
7141
7318
|
* Runtime color-reference fields intentionally accept any string, including
|
|
@@ -11833,8 +12010,14 @@ const headerInteractionPillPaletteValues = [
|
|
|
11833
12010
|
"accent"
|
|
11834
12011
|
];
|
|
11835
12012
|
/**
|
|
11836
|
-
* "No pill":
|
|
11837
|
-
*
|
|
12013
|
+
* "No pill": a colour change on hover rather than a filled background.
|
|
12014
|
+
*
|
|
12015
|
+
* The palette step writes nothing (#1318 Phase 4c decision 2), but on a
|
|
12016
|
+
* foreground-adaptive style that is not the end of the story: the hover colour
|
|
12017
|
+
* is derived from the resolved opening foreground at render time, paired with
|
|
12018
|
+
* the resting colour, so `quiet` resolves to a definite colour rather than to
|
|
12019
|
+
* whatever brand token the recipe happened to name. See
|
|
12020
|
+
* `applyOpeningForeground`.
|
|
11838
12021
|
*
|
|
11839
12022
|
* It exists because "a colour change on hover, no filled background" was not
|
|
11840
12023
|
* expressible in the vocabulary, and it is what
|
|
@@ -12858,6 +13041,28 @@ const bookingRequirementConsentFieldSchema = z$1.object({
|
|
|
12858
13041
|
const bookingConsentCarrierSchema = z$1.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
|
|
12859
13042
|
//#endregion
|
|
12860
13043
|
//#region ../blocks/src/system/blocks/events/shared/schemas.ts
|
|
13044
|
+
const publicEventLoaderQuerySchemaShape = {
|
|
13045
|
+
limit: z$1.string().optional(),
|
|
13046
|
+
from: z$1.string().optional(),
|
|
13047
|
+
to: z$1.string().optional(),
|
|
13048
|
+
afterStartsAt: z$1.string().optional(),
|
|
13049
|
+
afterId: z$1.string().optional(),
|
|
13050
|
+
categoryIds: z$1.string().optional(),
|
|
13051
|
+
venueId: z$1.string().optional(),
|
|
13052
|
+
staffMemberId: z$1.string().optional(),
|
|
13053
|
+
eventSurface: z$1.string().optional(),
|
|
13054
|
+
eventPresets: z$1.string().optional(),
|
|
13055
|
+
scheduleScope: z$1.string().optional(),
|
|
13056
|
+
seriesId: z$1.string().optional(),
|
|
13057
|
+
seriesIds: z$1.string().optional(),
|
|
13058
|
+
runSeriesId: z$1.string().optional(),
|
|
13059
|
+
seriesSlug: z$1.string().optional(),
|
|
13060
|
+
includeOccurrenceId: z$1.string().optional(),
|
|
13061
|
+
readIntent: z$1.string().optional(),
|
|
13062
|
+
detailLevel: z$1.string().optional(),
|
|
13063
|
+
readProfile: z$1.string().optional()
|
|
13064
|
+
};
|
|
13065
|
+
z$1.object(publicEventLoaderQuerySchemaShape);
|
|
12861
13066
|
const eventPresetSchema = z$1.enum([
|
|
12862
13067
|
"event",
|
|
12863
13068
|
"class",
|
|
@@ -15245,141 +15450,6 @@ function assertUniqueLayoutProfileKeys(profiles) {
|
|
|
15245
15450
|
});
|
|
15246
15451
|
if (duplicates.length > 0) throw new Error(`Duplicate block layout design profiles: ${duplicates.join(", ")}`);
|
|
15247
15452
|
}
|
|
15248
|
-
const defaultThemeTokens = {
|
|
15249
|
-
color: {
|
|
15250
|
-
"background/base": "#ffffff",
|
|
15251
|
-
"background/elevated": "#f5f5f5",
|
|
15252
|
-
"surface/base": "#ffffff",
|
|
15253
|
-
"surface/subtle": "#f9f9fb",
|
|
15254
|
-
"surface/inverted": "#111111",
|
|
15255
|
-
"content/primary": "#111111",
|
|
15256
|
-
"content/secondary": "#3f3f46",
|
|
15257
|
-
"accent/primary": "#2563eb",
|
|
15258
|
-
"accent/secondary": "#1d4ed8",
|
|
15259
|
-
"border/base": "#e5e7eb"
|
|
15260
|
-
},
|
|
15261
|
-
typography: {
|
|
15262
|
-
"display/hero": {
|
|
15263
|
-
fontSize: "clamp(48px, 8vw, 96px)",
|
|
15264
|
-
lineHeight: "1.05",
|
|
15265
|
-
fontWeight: "700"
|
|
15266
|
-
},
|
|
15267
|
-
"display/section": {
|
|
15268
|
-
fontSize: "clamp(40px, 6vw, 72px)",
|
|
15269
|
-
lineHeight: "1.1",
|
|
15270
|
-
fontWeight: "700"
|
|
15271
|
-
},
|
|
15272
|
-
"heading/large": {
|
|
15273
|
-
fontSize: "clamp(32px, 4vw, 48px)",
|
|
15274
|
-
lineHeight: "1.2",
|
|
15275
|
-
fontWeight: "600"
|
|
15276
|
-
},
|
|
15277
|
-
"heading/medium": {
|
|
15278
|
-
fontSize: "clamp(24px, 3vw, 32px)",
|
|
15279
|
-
lineHeight: "1.25",
|
|
15280
|
-
fontWeight: "600"
|
|
15281
|
-
},
|
|
15282
|
-
"heading/small": {
|
|
15283
|
-
fontSize: "20px",
|
|
15284
|
-
lineHeight: "1.3",
|
|
15285
|
-
fontWeight: "600"
|
|
15286
|
-
},
|
|
15287
|
-
"body/normal": {
|
|
15288
|
-
fontSize: "16px",
|
|
15289
|
-
lineHeight: "1.6",
|
|
15290
|
-
fontWeight: "400"
|
|
15291
|
-
},
|
|
15292
|
-
"body/small": {
|
|
15293
|
-
fontSize: "14px",
|
|
15294
|
-
lineHeight: "1.5",
|
|
15295
|
-
fontWeight: "400"
|
|
15296
|
-
},
|
|
15297
|
-
caption: {
|
|
15298
|
-
fontSize: "12px",
|
|
15299
|
-
lineHeight: "1.4",
|
|
15300
|
-
fontWeight: "500"
|
|
15301
|
-
}
|
|
15302
|
-
},
|
|
15303
|
-
spacing: {
|
|
15304
|
-
none: "0px",
|
|
15305
|
-
"3xs": "4px",
|
|
15306
|
-
"2xs": "8px",
|
|
15307
|
-
xs: "12px",
|
|
15308
|
-
sm: "16px",
|
|
15309
|
-
md: "24px",
|
|
15310
|
-
lg: "32px",
|
|
15311
|
-
xl: "40px",
|
|
15312
|
-
"2xl": "56px",
|
|
15313
|
-
"3xl": "72px"
|
|
15314
|
-
},
|
|
15315
|
-
radius: {
|
|
15316
|
-
none: "0px",
|
|
15317
|
-
xs: "2px",
|
|
15318
|
-
sm: "4px",
|
|
15319
|
-
md: "8px",
|
|
15320
|
-
lg: "12px",
|
|
15321
|
-
pill: "999px",
|
|
15322
|
-
full: "9999px"
|
|
15323
|
-
},
|
|
15324
|
-
shadow: {
|
|
15325
|
-
none: "none",
|
|
15326
|
-
soft: "0px 2px 8px rgba(15, 23, 42, 0.08)",
|
|
15327
|
-
medium: "0px 6px 18px rgba(15, 23, 42, 0.12)",
|
|
15328
|
-
strong: "0px 12px 36px rgba(15, 23, 42, 0.16)"
|
|
15329
|
-
},
|
|
15330
|
-
palette: {
|
|
15331
|
-
surface: "#ffffff",
|
|
15332
|
-
"neutral-50": "#f9fafb",
|
|
15333
|
-
"neutral-900": "#111827",
|
|
15334
|
-
primary: "#2563eb",
|
|
15335
|
-
"primary-50": "#eff6ff",
|
|
15336
|
-
"primary-500": "#2563eb",
|
|
15337
|
-
"primary-900": "#1d4ed8",
|
|
15338
|
-
secondary: "#9333ea",
|
|
15339
|
-
"secondary-50": "#f3e8ff",
|
|
15340
|
-
"secondary-500": "#9333ea",
|
|
15341
|
-
"secondary-900": "#4c1d95",
|
|
15342
|
-
accent: "#f97316",
|
|
15343
|
-
"accent-50": "#fff7ed",
|
|
15344
|
-
"accent-500": "#f97316",
|
|
15345
|
-
"accent-900": "#7c2d12"
|
|
15346
|
-
}
|
|
15347
|
-
};
|
|
15348
|
-
/**
|
|
15349
|
-
* Project the expanded semantic palette into the token buckets consumed by
|
|
15350
|
-
* runtime transforms. Keep this mapping shared by full themes and the
|
|
15351
|
-
* tokens-only hosted-booking runtime so the two paths cannot drift.
|
|
15352
|
-
*/
|
|
15353
|
-
function buildThemeTokens(palette) {
|
|
15354
|
-
const tokens = cloneThemeTokens(defaultThemeTokens);
|
|
15355
|
-
const paletteStrings = {};
|
|
15356
|
-
for (const [key, value] of Object.entries(palette)) if (typeof value === "string" && value.trim().length > 0) paletteStrings[key] = value;
|
|
15357
|
-
tokens.palette = paletteStrings;
|
|
15358
|
-
const resolveColor = (...keys) => {
|
|
15359
|
-
for (const key of keys) {
|
|
15360
|
-
const value = paletteStrings[key];
|
|
15361
|
-
if (value) return value;
|
|
15362
|
-
}
|
|
15363
|
-
};
|
|
15364
|
-
const assignColor = (token, ...keys) => {
|
|
15365
|
-
const value = resolveColor(...keys);
|
|
15366
|
-
if (value) tokens.color[token] = value;
|
|
15367
|
-
};
|
|
15368
|
-
assignColor("background/base", "background", "surface", "primary-50");
|
|
15369
|
-
assignColor("background/elevated", "surface", "background");
|
|
15370
|
-
assignColor("surface/base", "surface", "background");
|
|
15371
|
-
assignColor("surface/subtle", "neutral-100", "surface", "background");
|
|
15372
|
-
assignColor("surface/inverted", "neutral-900", "text", "primary-900");
|
|
15373
|
-
assignColor("content/primary", "text", "body", "neutral-900");
|
|
15374
|
-
assignColor("content/secondary", "mutedText", "secondary", "neutral-600");
|
|
15375
|
-
assignColor("accent/primary", "primary", "accent");
|
|
15376
|
-
assignColor("accent/secondary", "accent", "secondary", "primary-400");
|
|
15377
|
-
assignColor("border/base", "border", "neutral-300");
|
|
15378
|
-
return tokens;
|
|
15379
|
-
}
|
|
15380
|
-
function cloneThemeTokens(source) {
|
|
15381
|
-
return JSON.parse(JSON.stringify(source));
|
|
15382
|
-
}
|
|
15383
15453
|
//#endregion
|
|
15384
15454
|
//#region ../theme-core/src/site-styles/backgroundAppearance.ts
|
|
15385
15455
|
const backgroundAppearanceQuickColorTokenNames = [
|
|
@@ -31033,6 +31103,44 @@ function toWholeSeriesRegistrationEvents(events) {
|
|
|
31033
31103
|
return groupPublicEventsByRun(events).map(toWholeSeriesRegistrationEvent).filter((event) => event !== null);
|
|
31034
31104
|
}
|
|
31035
31105
|
//#endregion
|
|
31106
|
+
//#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
|
|
31107
|
+
const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
|
|
31108
|
+
const eventRecoveryRequestSchema = z$1.object({
|
|
31109
|
+
...stringEventQueryShape,
|
|
31110
|
+
limit: z$1.coerce.number().int().positive().optional(),
|
|
31111
|
+
eventSurface: z$1.enum(eventSurfaceScopeValues).optional(),
|
|
31112
|
+
scheduleScope: z$1.enum(eventScheduleScopeValues).optional(),
|
|
31113
|
+
detailLevel: z$1.enum(["full", "listing"]).optional(),
|
|
31114
|
+
stage: z$1.enum(["preview", "published"]).optional()
|
|
31115
|
+
});
|
|
31116
|
+
function resolveEventRegistrationEventSource(input) {
|
|
31117
|
+
if (input.wholeSeriesRunEvents != null) return {
|
|
31118
|
+
kind: "loaded",
|
|
31119
|
+
events: input.wholeSeriesRunEvents
|
|
31120
|
+
};
|
|
31121
|
+
if (input.events != null) return {
|
|
31122
|
+
kind: "loaded",
|
|
31123
|
+
events: input.events
|
|
31124
|
+
};
|
|
31125
|
+
return {
|
|
31126
|
+
kind: "unresolved",
|
|
31127
|
+
request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
|
|
31128
|
+
};
|
|
31129
|
+
}
|
|
31130
|
+
const eventLoaderFailureSchema = z$1.object({
|
|
31131
|
+
endpoint: z$1.literal("listPublicEvents"),
|
|
31132
|
+
params: eventRecoveryRequestSchema.extend({ siteId: z$1.string().optional() })
|
|
31133
|
+
});
|
|
31134
|
+
function parseEventLoaderRecoveryRequest(value) {
|
|
31135
|
+
const parsed = eventLoaderFailureSchema.safeParse(value);
|
|
31136
|
+
if (!parsed.success) return null;
|
|
31137
|
+
const { siteId: _siteId, stage, ...params } = parsed.data.params;
|
|
31138
|
+
return {
|
|
31139
|
+
...params,
|
|
31140
|
+
stage: stage ?? "published"
|
|
31141
|
+
};
|
|
31142
|
+
}
|
|
31143
|
+
//#endregion
|
|
31036
31144
|
//#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
|
|
31037
31145
|
const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
|
|
31038
31146
|
"Date",
|
|
@@ -31050,8 +31158,6 @@ const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistra
|
|
|
31050
31158
|
const eventRegistrationHydrationSchemaShape = {
|
|
31051
31159
|
occurrenceContext: occurrenceContextSchema.optional(),
|
|
31052
31160
|
subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
|
|
31053
|
-
events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
31054
|
-
wholeSeriesRunEvents: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
31055
31161
|
maxTickets: z$1.string().optional(),
|
|
31056
31162
|
showVenue: z$1.boolean().optional(),
|
|
31057
31163
|
showCapacity: z$1.boolean().optional(),
|
|
@@ -31063,12 +31169,22 @@ const eventRegistrationHydrationSchemaShape = {
|
|
|
31063
31169
|
sitePasses: publicPassProductCollectionSchema.nullable().optional(),
|
|
31064
31170
|
siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
|
|
31065
31171
|
};
|
|
31172
|
+
const eventRegistrationEventSourceSchema = z$1.discriminatedUnion("kind", [z$1.object({
|
|
31173
|
+
kind: z$1.literal("loaded"),
|
|
31174
|
+
events: z$1.array(eventRegistrationPublicEventSchema)
|
|
31175
|
+
}), z$1.object({
|
|
31176
|
+
kind: z$1.literal("unresolved"),
|
|
31177
|
+
request: eventRecoveryRequestSchema.nullable()
|
|
31178
|
+
})]);
|
|
31066
31179
|
const eventRegistrationSourceSchema = z$1.object({
|
|
31067
31180
|
siteId: z$1.string().optional(),
|
|
31068
31181
|
apiBaseUrl: z$1.string().optional(),
|
|
31069
31182
|
portalToken: z$1.string().nullable().optional(),
|
|
31070
31183
|
previewToken: z$1.string().nullable().optional(),
|
|
31071
31184
|
...eventRegistrationHydrationSchemaShape,
|
|
31185
|
+
events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
31186
|
+
wholeSeriesRunEvents: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
|
|
31187
|
+
eventLoaderFailures: z$1.record(z$1.string(), z$1.unknown()).nullable().optional(),
|
|
31072
31188
|
className: z$1.string().nullable().optional(),
|
|
31073
31189
|
buttonText: z$1.string().nullable().optional(),
|
|
31074
31190
|
maxTickets: z$1.string().nullable().optional(),
|
|
@@ -31089,7 +31205,10 @@ const eventRegistrationDisplaySchema = z$1.discriminatedUnion("state", [z$1.obje
|
|
|
31089
31205
|
titleText: z$1.string(),
|
|
31090
31206
|
bodyText: z$1.string()
|
|
31091
31207
|
})]);
|
|
31092
|
-
const eventRegistrationHydrationSchema = z$1.object(
|
|
31208
|
+
const eventRegistrationHydrationSchema = z$1.object({
|
|
31209
|
+
...eventRegistrationHydrationSchemaShape,
|
|
31210
|
+
eventSource: eventRegistrationEventSourceSchema
|
|
31211
|
+
});
|
|
31093
31212
|
const eventRegistrationRenderSchema = z$1.object({
|
|
31094
31213
|
display: eventRegistrationDisplaySchema,
|
|
31095
31214
|
hydration: eventRegistrationHydrationSchema
|
|
@@ -31148,16 +31267,12 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
|
|
|
31148
31267
|
function toScopedEventRegistrationEvents(scopedSourceEvents) {
|
|
31149
31268
|
return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
|
|
31150
31269
|
}
|
|
31151
|
-
function scopeEventRegistrationSourceEvents(source) {
|
|
31152
|
-
return resolveEventRegistrationScopedEvents(
|
|
31270
|
+
function scopeEventRegistrationSourceEvents(source, eventSource) {
|
|
31271
|
+
return resolveEventRegistrationScopedEvents(eventSource.kind === "loaded" ? eventSource.events : [], {
|
|
31153
31272
|
occurrenceContext: source.occurrenceContext,
|
|
31154
31273
|
subject: source.subject
|
|
31155
31274
|
});
|
|
31156
31275
|
}
|
|
31157
|
-
function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
|
|
31158
|
-
if (source.events == null && source.wholeSeriesRunEvents == null) return null;
|
|
31159
|
-
return [...scopedSourceEvents];
|
|
31160
|
-
}
|
|
31161
31276
|
/**
|
|
31162
31277
|
* The one run this surface is registering for, when the scoped events describe
|
|
31163
31278
|
* exactly one. More than one run means the visitor still has to choose.
|
|
@@ -31197,14 +31312,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
31197
31312
|
render: createZodCodec(eventRegistrationRenderSchema)
|
|
31198
31313
|
},
|
|
31199
31314
|
buildRender: (source) => {
|
|
31200
|
-
const
|
|
31201
|
-
|
|
31315
|
+
const eventSource = resolveEventRegistrationEventSource({
|
|
31316
|
+
events: source.events,
|
|
31317
|
+
wholeSeriesRunEvents: source.wholeSeriesRunEvents,
|
|
31318
|
+
failures: source.eventLoaderFailures
|
|
31319
|
+
});
|
|
31320
|
+
const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
|
|
31202
31321
|
return {
|
|
31203
31322
|
display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
|
|
31204
31323
|
hydration: {
|
|
31205
31324
|
occurrenceContext: source.occurrenceContext ?? null,
|
|
31206
31325
|
subject: source.subject ?? null,
|
|
31207
|
-
|
|
31326
|
+
eventSource: eventSource.kind === "loaded" ? {
|
|
31327
|
+
...eventSource,
|
|
31328
|
+
events: [...scopedSourceEvents]
|
|
31329
|
+
} : eventSource,
|
|
31208
31330
|
maxTickets: source.maxTickets ?? void 0,
|
|
31209
31331
|
showVenue: source.showVenue,
|
|
31210
31332
|
showCapacity: source.showCapacity,
|
|
@@ -31599,6 +31721,15 @@ const newsletterFieldSchema = z$1.object({
|
|
|
31599
31721
|
placeholder: z$1.string().optional()
|
|
31600
31722
|
});
|
|
31601
31723
|
const mailingListSignupBlockIdSchema = z$1.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
|
|
31724
|
+
const mailingListContentVersionIdSchema = z$1.string().transform((value, ctx) => {
|
|
31725
|
+
const parsed = parseMailingListContentVersionId(value);
|
|
31726
|
+
if (parsed) return parsed;
|
|
31727
|
+
ctx.addIssue({
|
|
31728
|
+
code: z$1.ZodIssueCode.custom,
|
|
31729
|
+
message: "Invalid mailing-list content version ID"
|
|
31730
|
+
});
|
|
31731
|
+
return z$1.NEVER;
|
|
31732
|
+
});
|
|
31602
31733
|
const signedMailingListSourceTokenSchema = z$1.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
|
|
31603
31734
|
const newsletterSourceCommonSchema = z$1.object({
|
|
31604
31735
|
siteId: z$1.string().optional(),
|
|
@@ -31612,7 +31743,8 @@ const newsletterSourceCommonSchema = z$1.object({
|
|
|
31612
31743
|
const newsletterSourceSchema = z$1.discriminatedUnion("source", [
|
|
31613
31744
|
newsletterSourceCommonSchema.extend({
|
|
31614
31745
|
source: z$1.literal("block"),
|
|
31615
|
-
blockId: z$1.string().nullable().optional()
|
|
31746
|
+
blockId: z$1.string().nullable().optional(),
|
|
31747
|
+
contentVersionId: z$1.string().nullable().optional()
|
|
31616
31748
|
}),
|
|
31617
31749
|
newsletterSourceCommonSchema.extend({
|
|
31618
31750
|
source: z$1.literal("signed-footer"),
|
|
@@ -31628,6 +31760,7 @@ const newsletterDisplaySchema = z$1.object({
|
|
|
31628
31760
|
availability: z$1.enum(["ready", "unavailable"]),
|
|
31629
31761
|
className: z$1.string().nullable(),
|
|
31630
31762
|
buttonLabel: z$1.string(),
|
|
31763
|
+
successMessage: z$1.string(),
|
|
31631
31764
|
buttonVariant: newsletterButtonVariantSchema,
|
|
31632
31765
|
privacyNote: z$1.string().nullable(),
|
|
31633
31766
|
fields: z$1.array(newsletterFieldSchema),
|
|
@@ -31642,7 +31775,8 @@ const newsletterHydrationSchema = z$1.object({
|
|
|
31642
31775
|
tag: z$1.literal("block-source"),
|
|
31643
31776
|
sourceRef: z$1.object({
|
|
31644
31777
|
tag: z$1.literal("block_ref"),
|
|
31645
|
-
blockId: mailingListSignupBlockIdSchema
|
|
31778
|
+
blockId: mailingListSignupBlockIdSchema,
|
|
31779
|
+
contentVersionId: mailingListContentVersionIdSchema
|
|
31646
31780
|
}).nullable()
|
|
31647
31781
|
}),
|
|
31648
31782
|
z$1.object({
|
|
@@ -31681,6 +31815,7 @@ function buildNewsletterDisplay(source) {
|
|
|
31681
31815
|
fields: { preset: "emailOnly" },
|
|
31682
31816
|
includeOptionalPhone: false,
|
|
31683
31817
|
buttonLabel: "Subscribe",
|
|
31818
|
+
successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
|
|
31684
31819
|
privacyNote: null
|
|
31685
31820
|
};
|
|
31686
31821
|
const targeting = source.targeting ?? { mode: "default" };
|
|
@@ -31690,6 +31825,7 @@ function buildNewsletterDisplay(source) {
|
|
|
31690
31825
|
availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
|
|
31691
31826
|
className: source.className ?? null,
|
|
31692
31827
|
buttonLabel: form.buttonLabel,
|
|
31828
|
+
successMessage: form.successMessage,
|
|
31693
31829
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
31694
31830
|
privacyNote: form.privacyNote,
|
|
31695
31831
|
fields: getGlobalFormFields(form),
|
|
@@ -31720,7 +31856,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
31720
31856
|
function projectNewsletterFormHydrationTarget(source) {
|
|
31721
31857
|
switch (source.source) {
|
|
31722
31858
|
case "block": {
|
|
31723
|
-
const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
|
|
31859
|
+
const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
|
|
31724
31860
|
if (sourceRef?.tag === "block_ref") return {
|
|
31725
31861
|
tag: "block-source",
|
|
31726
31862
|
sourceRef
|
|
@@ -33977,6 +34113,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
|
|
|
33977
34113
|
auth: "public",
|
|
33978
34114
|
responseKind: "json"
|
|
33979
34115
|
},
|
|
34116
|
+
getPublicBookingServiceBySlug: {
|
|
34117
|
+
path: "/public/bookings/services/by-slug/{slug}",
|
|
34118
|
+
method: "GET",
|
|
34119
|
+
revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
|
|
34120
|
+
tags: [TAG_TEMPLATES.publicBookingServices],
|
|
34121
|
+
auth: "public",
|
|
34122
|
+
responseKind: "json"
|
|
34123
|
+
},
|
|
33980
34124
|
getPublicBookingResourcesReference: {
|
|
33981
34125
|
path: "/public/bookings/resources/reference",
|
|
33982
34126
|
method: "GET",
|
|
@@ -34529,11 +34673,105 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
|
34529
34673
|
responseKind: "json"
|
|
34530
34674
|
}
|
|
34531
34675
|
});
|
|
34676
|
+
//#endregion
|
|
34677
|
+
//#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
|
|
34678
|
+
/**
|
|
34679
|
+
* The anonymous onboarding attempt, addressed by its opaque resume token.
|
|
34680
|
+
*
|
|
34681
|
+
* Every route here is reached before there is an account, so none of them can
|
|
34682
|
+
* be scoped to a site or a user: the token is the whole credential. They are
|
|
34683
|
+
* kept together so that stays obvious.
|
|
34684
|
+
*/
|
|
34685
|
+
const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
34686
|
+
createPublicOnboardingAttempt: {
|
|
34687
|
+
path: "/public/onboarding/attempts",
|
|
34688
|
+
method: "POST",
|
|
34689
|
+
auth: "public",
|
|
34690
|
+
errors: [],
|
|
34691
|
+
responseKind: "json"
|
|
34692
|
+
},
|
|
34693
|
+
createPublicOnboardingLogoUploadUrl: {
|
|
34694
|
+
path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
|
|
34695
|
+
method: "POST",
|
|
34696
|
+
auth: "public",
|
|
34697
|
+
errors: [],
|
|
34698
|
+
responseKind: "json"
|
|
34699
|
+
},
|
|
34700
|
+
uploadPublicOnboardingLogo: {
|
|
34701
|
+
path: "/public/onboarding/attempts/{attemptToken}/logo",
|
|
34702
|
+
method: "POST",
|
|
34703
|
+
auth: "public",
|
|
34704
|
+
errors: [],
|
|
34705
|
+
responseKind: "json"
|
|
34706
|
+
},
|
|
34707
|
+
getPublicOnboardingAttempt: {
|
|
34708
|
+
path: "/public/onboarding/attempts/{attemptToken}",
|
|
34709
|
+
method: "GET",
|
|
34710
|
+
auth: "public",
|
|
34711
|
+
errors: [],
|
|
34712
|
+
responseKind: "json"
|
|
34713
|
+
},
|
|
34714
|
+
getPublicOnboardingAttemptProgress: {
|
|
34715
|
+
path: "/public/onboarding/attempts/{attemptToken}/status",
|
|
34716
|
+
method: "GET",
|
|
34717
|
+
auth: "public",
|
|
34718
|
+
errors: [],
|
|
34719
|
+
responseKind: "json"
|
|
34720
|
+
},
|
|
34721
|
+
updatePublicOnboardingAttempt: {
|
|
34722
|
+
path: "/public/onboarding/attempts/{attemptToken}",
|
|
34723
|
+
method: "PATCH",
|
|
34724
|
+
auth: "public",
|
|
34725
|
+
errors: [],
|
|
34726
|
+
responseKind: "json"
|
|
34727
|
+
},
|
|
34728
|
+
runPublicOnboardingAttempt: {
|
|
34729
|
+
path: "/public/onboarding/attempts/{attemptToken}/run",
|
|
34730
|
+
method: "POST",
|
|
34731
|
+
auth: "public",
|
|
34732
|
+
errors: [],
|
|
34733
|
+
responseKind: "json"
|
|
34734
|
+
},
|
|
34735
|
+
resendPublicOnboardingAttemptConfirmation: {
|
|
34736
|
+
path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
|
|
34737
|
+
method: "POST",
|
|
34738
|
+
auth: "public",
|
|
34739
|
+
errors: [],
|
|
34740
|
+
responseKind: "json"
|
|
34741
|
+
}
|
|
34742
|
+
});
|
|
34743
|
+
//#endregion
|
|
34744
|
+
//#region ../api/src/billingEndpointDefinitions.ts
|
|
34745
|
+
const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
|
|
34746
|
+
adminChangePlan: {
|
|
34747
|
+
path: "/admin/billing/plan",
|
|
34748
|
+
method: "POST",
|
|
34749
|
+
tags: ["admin", "billing"],
|
|
34750
|
+
auth: "admin",
|
|
34751
|
+
responseKind: "json"
|
|
34752
|
+
},
|
|
34753
|
+
changePlan: {
|
|
34754
|
+
path: "/billing/plan/change",
|
|
34755
|
+
method: "POST",
|
|
34756
|
+
tags: ["billing"],
|
|
34757
|
+
auth: "user",
|
|
34758
|
+
responseKind: "json"
|
|
34759
|
+
},
|
|
34760
|
+
createBillingPortalSession: {
|
|
34761
|
+
path: "/billing/portal/session",
|
|
34762
|
+
method: "POST",
|
|
34763
|
+
tags: ["billing"],
|
|
34764
|
+
auth: "user",
|
|
34765
|
+
responseKind: "json"
|
|
34766
|
+
}
|
|
34767
|
+
});
|
|
34532
34768
|
const API_ENDPOINTS$1 = {
|
|
34533
34769
|
...ACCOUNT_ENDPOINT_DEFINITIONS,
|
|
34770
|
+
...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
|
|
34534
34771
|
...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
|
|
34535
34772
|
...GIFTING_ENDPOINT_DEFINITIONS,
|
|
34536
34773
|
...PUBLIC_READ_ENDPOINT_DEFINITIONS,
|
|
34774
|
+
...BILLING_ENDPOINT_DEFINITIONS,
|
|
34537
34775
|
aiContentUpdateChat: {
|
|
34538
34776
|
path: "/ai/content-update-chat",
|
|
34539
34777
|
method: "POST",
|
|
@@ -34687,55 +34925,6 @@ const API_ENDPOINTS$1 = {
|
|
|
34687
34925
|
errors: [],
|
|
34688
34926
|
responseKind: "json"
|
|
34689
34927
|
},
|
|
34690
|
-
createPublicOnboardingAttempt: {
|
|
34691
|
-
path: "/public/onboarding/attempts",
|
|
34692
|
-
method: "POST",
|
|
34693
|
-
auth: "public",
|
|
34694
|
-
errors: [],
|
|
34695
|
-
responseKind: "json"
|
|
34696
|
-
},
|
|
34697
|
-
createPublicOnboardingLogoUploadUrl: {
|
|
34698
|
-
path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
|
|
34699
|
-
method: "POST",
|
|
34700
|
-
auth: "public",
|
|
34701
|
-
errors: [],
|
|
34702
|
-
responseKind: "json"
|
|
34703
|
-
},
|
|
34704
|
-
uploadPublicOnboardingLogo: {
|
|
34705
|
-
path: "/public/onboarding/attempts/{attemptToken}/logo",
|
|
34706
|
-
method: "POST",
|
|
34707
|
-
auth: "public",
|
|
34708
|
-
errors: [],
|
|
34709
|
-
responseKind: "json"
|
|
34710
|
-
},
|
|
34711
|
-
getPublicOnboardingAttempt: {
|
|
34712
|
-
path: "/public/onboarding/attempts/{attemptToken}",
|
|
34713
|
-
method: "GET",
|
|
34714
|
-
auth: "public",
|
|
34715
|
-
errors: [],
|
|
34716
|
-
responseKind: "json"
|
|
34717
|
-
},
|
|
34718
|
-
getPublicOnboardingAttemptProgress: {
|
|
34719
|
-
path: "/public/onboarding/attempts/{attemptToken}/status",
|
|
34720
|
-
method: "GET",
|
|
34721
|
-
auth: "public",
|
|
34722
|
-
errors: [],
|
|
34723
|
-
responseKind: "json"
|
|
34724
|
-
},
|
|
34725
|
-
updatePublicOnboardingAttempt: {
|
|
34726
|
-
path: "/public/onboarding/attempts/{attemptToken}",
|
|
34727
|
-
method: "PATCH",
|
|
34728
|
-
auth: "public",
|
|
34729
|
-
errors: [],
|
|
34730
|
-
responseKind: "json"
|
|
34731
|
-
},
|
|
34732
|
-
runPublicOnboardingAttempt: {
|
|
34733
|
-
path: "/public/onboarding/attempts/{attemptToken}/run",
|
|
34734
|
-
method: "POST",
|
|
34735
|
-
auth: "public",
|
|
34736
|
-
errors: [],
|
|
34737
|
-
responseKind: "json"
|
|
34738
|
-
},
|
|
34739
34928
|
aiSiteWizardSuggestGoals: {
|
|
34740
34929
|
path: "/sites/{siteId}/ai/site-wizard/goals",
|
|
34741
34930
|
method: "POST",
|
|
@@ -36251,20 +36440,6 @@ const API_ENDPOINTS$1 = {
|
|
|
36251
36440
|
auth: "admin",
|
|
36252
36441
|
responseKind: "json"
|
|
36253
36442
|
},
|
|
36254
|
-
adminChangePlan: {
|
|
36255
|
-
path: "/admin/billing/plan",
|
|
36256
|
-
method: "POST",
|
|
36257
|
-
tags: ["admin", "billing"],
|
|
36258
|
-
auth: "admin",
|
|
36259
|
-
responseKind: "json"
|
|
36260
|
-
},
|
|
36261
|
-
changePlan: {
|
|
36262
|
-
path: "/billing/plan/change",
|
|
36263
|
-
method: "POST",
|
|
36264
|
-
tags: ["billing"],
|
|
36265
|
-
auth: "user",
|
|
36266
|
-
responseKind: "json"
|
|
36267
|
-
},
|
|
36268
36443
|
mfaTotpEnroll: {
|
|
36269
36444
|
path: "/auth/mfa/totp/enroll",
|
|
36270
36445
|
method: "POST",
|
|
@@ -36613,7 +36788,12 @@ const API_ENDPOINTS$1 = {
|
|
|
36613
36788
|
path: "/public/sites/{siteId}/sitemap",
|
|
36614
36789
|
method: "GET",
|
|
36615
36790
|
revalidate: 60,
|
|
36616
|
-
tags: [
|
|
36791
|
+
tags: [
|
|
36792
|
+
TAG_TEMPLATES.siteRoutableContent,
|
|
36793
|
+
TAG_TEMPLATES.siteSettings,
|
|
36794
|
+
TAG_TEMPLATES.publicEvents,
|
|
36795
|
+
TAG_TEMPLATES.publicBookingServices
|
|
36796
|
+
],
|
|
36617
36797
|
auth: "public",
|
|
36618
36798
|
responseKind: "json"
|
|
36619
36799
|
},
|
|
@@ -39932,6 +40112,17 @@ const API_ENDPOINTS$1 = {
|
|
|
39932
40112
|
auth: "public",
|
|
39933
40113
|
responseKind: "json"
|
|
39934
40114
|
},
|
|
40115
|
+
portalCancelWaitlistEntry: {
|
|
40116
|
+
path: "/portal/waitlists/{entryId}/cancel",
|
|
40117
|
+
method: "POST",
|
|
40118
|
+
auth: "public",
|
|
40119
|
+
responseKind: "json",
|
|
40120
|
+
errors: [
|
|
40121
|
+
"resource:not_found",
|
|
40122
|
+
"resource:conflict",
|
|
40123
|
+
"server:internal_error"
|
|
40124
|
+
]
|
|
40125
|
+
},
|
|
39935
40126
|
portalGetEventGuests: {
|
|
39936
40127
|
path: "/portal/events/{registrationId}/guests",
|
|
39937
40128
|
method: "GET",
|
|
@@ -44894,7 +45085,7 @@ const publicPricingSchema = z$1.object({
|
|
|
44894
45085
|
singlePriceAmount: z$1.number().nullable(),
|
|
44895
45086
|
slidingMinAmount: z$1.number().nullable(),
|
|
44896
45087
|
slidingMaxAmount: z$1.number().nullable(),
|
|
44897
|
-
options: z$1.array(publicPricingOptionSchema)
|
|
45088
|
+
options: z$1.array(publicPricingOptionSchema).readonly()
|
|
44898
45089
|
});
|
|
44899
45090
|
const publicAppointmentServiceSchema = z$1.object({
|
|
44900
45091
|
id: z$1.string().min(1),
|
|
@@ -47744,6 +47935,7 @@ const eventRegistrationBlockDefinition = {
|
|
|
47744
47935
|
} },
|
|
47745
47936
|
events: { $bind: { from: "data.events" } },
|
|
47746
47937
|
wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
|
|
47938
|
+
loaderFailures: { $bind: { from: "$root.loaderFailures" } },
|
|
47747
47939
|
sitePasses: { $bind: { from: "data.sitePasses" } },
|
|
47748
47940
|
siteMemberships: { $bind: { from: "data.siteMemberships" } },
|
|
47749
47941
|
stage: { $bind: {
|
|
@@ -51555,9 +51747,10 @@ function cx(...classes) {
|
|
|
51555
51747
|
* Server-safe placeholder for event registration.
|
|
51556
51748
|
* Provides a static container for island hydration without importing client hooks.
|
|
51557
51749
|
*/
|
|
51558
|
-
function EventRegistrationSSR({ blockId, subject, children, ...sourceProps }) {
|
|
51750
|
+
function EventRegistrationSSR({ blockId, subject, loaderFailures, children, ...sourceProps }) {
|
|
51559
51751
|
const islandProps = buildEventRegistrationInteractiveIslandProps({
|
|
51560
51752
|
...sourceProps,
|
|
51753
|
+
eventLoaderFailures: blockId ? loaderFailures?.[blockId] : void 0,
|
|
51561
51754
|
subject: normalizeEventRegistrationPageSurfaceSubject(subject)
|
|
51562
51755
|
});
|
|
51563
51756
|
const display = islandProps.render.display;
|
|
@@ -51890,7 +52083,7 @@ function NewsletterFormSSR(props) {
|
|
|
51890
52083
|
className: clsx("newsletter-form-ssr", className),
|
|
51891
52084
|
children: /* @__PURE__ */ jsx("p", {
|
|
51892
52085
|
role: "status",
|
|
51893
|
-
children: "
|
|
52086
|
+
children: "We can’t accept signups right now. Please try again later."
|
|
51894
52087
|
})
|
|
51895
52088
|
});
|
|
51896
52089
|
const renderField = (field) => {
|
|
@@ -51936,14 +52129,18 @@ function NewsletterFormSSR(props) {
|
|
|
51936
52129
|
children: [
|
|
51937
52130
|
fields.map(renderField),
|
|
51938
52131
|
islandProps.render.hydration.choicePresentation === "visitor_choice" ? /* @__PURE__ */ jsxs("fieldset", {
|
|
51939
|
-
className: "newsletter-topics",
|
|
51940
|
-
children: [/* @__PURE__ */ jsx("legend", {
|
|
51941
|
-
className: "
|
|
52132
|
+
className: "fb-fieldset newsletter-topics",
|
|
52133
|
+
children: [/* @__PURE__ */ jsx("legend", {
|
|
52134
|
+
className: "form-label",
|
|
52135
|
+
children: "What would you like to hear about?"
|
|
52136
|
+
}), display.choices.map((choice) => /* @__PURE__ */ jsxs("label", {
|
|
52137
|
+
className: "fb-inline form-label newsletter-topic-choice",
|
|
51942
52138
|
children: [/* @__PURE__ */ jsx("input", {
|
|
51943
52139
|
type: "checkbox",
|
|
51944
52140
|
name: "mailingListChoice",
|
|
51945
|
-
value: choice.id
|
|
51946
|
-
|
|
52141
|
+
value: choice.id,
|
|
52142
|
+
className: "form-checkbox"
|
|
52143
|
+
}), /* @__PURE__ */ jsx("span", { children: choice.label })]
|
|
51947
52144
|
}, choice.id))]
|
|
51948
52145
|
}) : null,
|
|
51949
52146
|
/* @__PURE__ */ jsx("div", {
|
|
@@ -52932,6 +53129,18 @@ function resolveChildren(nodes, context) {
|
|
|
52932
53129
|
function isReactNode(value) {
|
|
52933
53130
|
return value !== null && value !== void 0;
|
|
52934
53131
|
}
|
|
53132
|
+
function resolveNodeMetadata(nodeType, context) {
|
|
53133
|
+
return {
|
|
53134
|
+
pathBase: context.pathBase,
|
|
53135
|
+
blockId: context.blockId,
|
|
53136
|
+
blockKind: context.blockKind,
|
|
53137
|
+
blockContent: context.blockContent,
|
|
53138
|
+
fragmentRegistry: context.fragmentRegistry,
|
|
53139
|
+
previewAuthoring: context.previewAuthoring,
|
|
53140
|
+
...nodeType.toLowerCase() === "newsletter-form" ? { contentVersionId: context.contentVersionId } : {},
|
|
53141
|
+
...nodeType === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {}
|
|
53142
|
+
};
|
|
53143
|
+
}
|
|
52935
53144
|
/**
|
|
52936
53145
|
* Resolves a node definition into a React element.
|
|
52937
53146
|
* Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
|
|
@@ -52967,13 +53176,7 @@ function resolveNode(node, context, indexFallback) {
|
|
|
52967
53176
|
const elementProps = {
|
|
52968
53177
|
...props,
|
|
52969
53178
|
key: node.key ?? indexFallback,
|
|
52970
|
-
|
|
52971
|
-
blockId: context.blockId,
|
|
52972
|
-
blockKind: context.blockKind,
|
|
52973
|
-
blockContent: context.blockContent,
|
|
52974
|
-
...node.type === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {},
|
|
52975
|
-
fragmentRegistry: context.fragmentRegistry,
|
|
52976
|
-
previewAuthoring: context.previewAuthoring
|
|
53179
|
+
...resolveNodeMetadata(node.type, context)
|
|
52977
53180
|
};
|
|
52978
53181
|
const element = React.createElement(component, elementProps, ...children);
|
|
52979
53182
|
if (headingDecorationPlan.kind === "skip") return element;
|
|
@@ -56983,7 +57186,7 @@ function pageBlockPosition(index, blockCount) {
|
|
|
56983
57186
|
//#endregion
|
|
56984
57187
|
//#region ../blocks/src/pageRendererContracts.ts
|
|
56985
57188
|
function buildPageRendererRootRuntime(dataContext) {
|
|
56986
|
-
const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false } = dataContext ?? {};
|
|
57189
|
+
const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false, loaderFailures = {} } = dataContext ?? {};
|
|
56987
57190
|
return {
|
|
56988
57191
|
siteId,
|
|
56989
57192
|
pageId,
|
|
@@ -56994,7 +57197,8 @@ function buildPageRendererRootRuntime(dataContext) {
|
|
|
56994
57197
|
portalToken,
|
|
56995
57198
|
bookingOfferingPresets,
|
|
56996
57199
|
mailingList,
|
|
56997
|
-
eventRegistrationOverlayEnabled
|
|
57200
|
+
eventRegistrationOverlayEnabled,
|
|
57201
|
+
loaderFailures
|
|
56998
57202
|
};
|
|
56999
57203
|
}
|
|
57000
57204
|
//#endregion
|
|
@@ -65953,7 +66157,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path) {
|
|
|
65953
66157
|
}
|
|
65954
66158
|
function makeDefaultBlockComponent(args) {
|
|
65955
66159
|
const { manifest } = args;
|
|
65956
|
-
return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
|
|
66160
|
+
return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, contentVersionId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry, imageResolveContext, previewAuthoring }) {
|
|
65957
66161
|
const perf = beginBlockRenderMeasurement();
|
|
65958
66162
|
if (!theme) throw new Error("Block rendering requires theme tokens; none were provided to makeDefaultBlockComponent");
|
|
65959
66163
|
if (!registry) throw new Error("Block rendering requires a component registry; none was provided");
|
|
@@ -65973,6 +66177,7 @@ function makeDefaultBlockComponent(args) {
|
|
|
65973
66177
|
theme: withButtonSystem(theme, themeConfig),
|
|
65974
66178
|
pathBase,
|
|
65975
66179
|
blockId,
|
|
66180
|
+
contentVersionId,
|
|
65976
66181
|
blockKind,
|
|
65977
66182
|
blockContent: mergedContent,
|
|
65978
66183
|
blockBindings,
|
|
@@ -66727,6 +66932,7 @@ function buildBlockOverrideProps(input) {
|
|
|
66727
66932
|
...blockSubjectProps(dataContext),
|
|
66728
66933
|
imageResolveContext: input.imageResolveContext,
|
|
66729
66934
|
blockId: block.id ?? null,
|
|
66935
|
+
contentVersionId: block.contentVersionId ?? null,
|
|
66730
66936
|
blockKind: block.kind
|
|
66731
66937
|
};
|
|
66732
66938
|
}
|
|
@@ -66827,6 +67033,7 @@ function toPresentationPage(page) {
|
|
|
66827
67033
|
id: block.id,
|
|
66828
67034
|
kind: block.kind,
|
|
66829
67035
|
purpose: block.purpose,
|
|
67036
|
+
...block.contentVersionId ? { contentVersionId: block.contentVersionId } : {},
|
|
66830
67037
|
...block.bindings ? { bindings: block.bindings } : {}
|
|
66831
67038
|
};
|
|
66832
67039
|
return block.admission.kind === "renderable" ? {
|
|
@@ -78110,7 +78317,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78110
78317
|
text-align: left;
|
|
78111
78318
|
}
|
|
78112
78319
|
|
|
78113
|
-
:where(.theme-scope)
|
|
78320
|
+
:where(.theme-scope)
|
|
78321
|
+
:where([data-block="customer-portal"])
|
|
78322
|
+
.cp-login__subtitle {
|
|
78114
78323
|
color: var(--cp-muted);
|
|
78115
78324
|
font-size: 0.9375rem;
|
|
78116
78325
|
text-align: left;
|
|
@@ -78137,7 +78346,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78137
78346
|
text-align: left;
|
|
78138
78347
|
}
|
|
78139
78348
|
|
|
78140
|
-
:where(.theme-scope)
|
|
78349
|
+
:where(.theme-scope)
|
|
78350
|
+
:where([data-block="customer-portal"])
|
|
78351
|
+
.cp-login__reset-link {
|
|
78141
78352
|
appearance: none;
|
|
78142
78353
|
background: none;
|
|
78143
78354
|
border: 0;
|
|
@@ -78151,11 +78362,15 @@ const containerResponsiveThemeCss = `/*
|
|
|
78151
78362
|
text-underline-offset: 0.15em;
|
|
78152
78363
|
}
|
|
78153
78364
|
|
|
78154
|
-
:where(.theme-scope)
|
|
78365
|
+
:where(.theme-scope)
|
|
78366
|
+
:where([data-block="customer-portal"])
|
|
78367
|
+
.cp-login__reset-link:hover {
|
|
78155
78368
|
color: var(--cp-text);
|
|
78156
78369
|
}
|
|
78157
78370
|
|
|
78158
|
-
:where(.theme-scope)
|
|
78371
|
+
:where(.theme-scope)
|
|
78372
|
+
:where([data-block="customer-portal"])
|
|
78373
|
+
.cp-login__reset-link:focus-visible {
|
|
78159
78374
|
outline: 2px solid currentColor;
|
|
78160
78375
|
outline-offset: 3px;
|
|
78161
78376
|
}
|
|
@@ -78200,7 +78415,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78200
78415
|
border-bottom: none;
|
|
78201
78416
|
}
|
|
78202
78417
|
|
|
78203
|
-
:where(.theme-scope)
|
|
78418
|
+
:where(.theme-scope)
|
|
78419
|
+
:where([data-block="customer-portal"])
|
|
78420
|
+
.cp-header__welcome {
|
|
78204
78421
|
font-size: 1.125rem;
|
|
78205
78422
|
font-weight: 500;
|
|
78206
78423
|
}
|
|
@@ -78216,8 +78433,14 @@ const containerResponsiveThemeCss = `/*
|
|
|
78216
78433
|
}
|
|
78217
78434
|
|
|
78218
78435
|
@keyframes cp-fade-in {
|
|
78219
|
-
from {
|
|
78220
|
-
|
|
78436
|
+
from {
|
|
78437
|
+
opacity: 0;
|
|
78438
|
+
transform: translateY(4px);
|
|
78439
|
+
}
|
|
78440
|
+
to {
|
|
78441
|
+
opacity: 1;
|
|
78442
|
+
transform: translateY(0);
|
|
78443
|
+
}
|
|
78221
78444
|
}
|
|
78222
78445
|
|
|
78223
78446
|
/* Empty state */
|
|
@@ -78306,6 +78529,77 @@ const containerResponsiveThemeCss = `/*
|
|
|
78306
78529
|
margin-top: 1rem;
|
|
78307
78530
|
}
|
|
78308
78531
|
|
|
78532
|
+
/* Event waitlists */
|
|
78533
|
+
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-list {
|
|
78534
|
+
display: grid;
|
|
78535
|
+
gap: 1rem;
|
|
78536
|
+
}
|
|
78537
|
+
|
|
78538
|
+
:where(.theme-scope)
|
|
78539
|
+
:where([data-block="customer-portal"])
|
|
78540
|
+
.cp-waitlists
|
|
78541
|
+
> .cp-alert {
|
|
78542
|
+
margin-bottom: 1rem;
|
|
78543
|
+
}
|
|
78544
|
+
|
|
78545
|
+
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-card {
|
|
78546
|
+
transition:
|
|
78547
|
+
border-color 180ms ease,
|
|
78548
|
+
box-shadow 180ms ease;
|
|
78549
|
+
}
|
|
78550
|
+
|
|
78551
|
+
:where(.theme-scope)
|
|
78552
|
+
:where([data-block="customer-portal"])
|
|
78553
|
+
.cp-waitlist-card--focused {
|
|
78554
|
+
border-color: var(--cp-primary);
|
|
78555
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--cp-primary) 22%, transparent);
|
|
78556
|
+
}
|
|
78557
|
+
|
|
78558
|
+
:where(.theme-scope)
|
|
78559
|
+
:where([data-block="customer-portal"])
|
|
78560
|
+
.cp-waitlist-card__summary,
|
|
78561
|
+
:where(.theme-scope)
|
|
78562
|
+
:where([data-block="customer-portal"])
|
|
78563
|
+
.cp-waitlist-card__position {
|
|
78564
|
+
font-weight: 600;
|
|
78565
|
+
}
|
|
78566
|
+
|
|
78567
|
+
:where(.theme-scope)
|
|
78568
|
+
:where([data-block="customer-portal"])
|
|
78569
|
+
.cp-waitlist-card
|
|
78570
|
+
.cp-card-body
|
|
78571
|
+
p {
|
|
78572
|
+
margin: 0.4rem 0;
|
|
78573
|
+
}
|
|
78574
|
+
|
|
78575
|
+
@container rb-site (max-width: 640px) {
|
|
78576
|
+
@scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
|
|
78577
|
+
:where(.theme-scope)
|
|
78578
|
+
:where([data-block="customer-portal"])
|
|
78579
|
+
.cp-waitlist-card
|
|
78580
|
+
.cp-card-header {
|
|
78581
|
+
flex-direction: column-reverse;
|
|
78582
|
+
}
|
|
78583
|
+
|
|
78584
|
+
:where(.theme-scope)
|
|
78585
|
+
:where([data-block="customer-portal"])
|
|
78586
|
+
.cp-waitlist-card
|
|
78587
|
+
.cp-card-actions {
|
|
78588
|
+
align-items: stretch;
|
|
78589
|
+
flex-direction: column;
|
|
78590
|
+
}
|
|
78591
|
+
|
|
78592
|
+
:where(.theme-scope)
|
|
78593
|
+
:where([data-block="customer-portal"])
|
|
78594
|
+
.cp-waitlist-card
|
|
78595
|
+
.cp-card-actions
|
|
78596
|
+
> * {
|
|
78597
|
+
justify-content: center;
|
|
78598
|
+
text-align: center;
|
|
78599
|
+
}
|
|
78600
|
+
}
|
|
78601
|
+
}
|
|
78602
|
+
|
|
78309
78603
|
/* Badge */
|
|
78310
78604
|
:where(.theme-scope) :where([data-block="customer-portal"]) .cp-badge {
|
|
78311
78605
|
display: inline-flex;
|
|
@@ -78442,11 +78736,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
78442
78736
|
background: rgba(var(--tb-border), 0.2);
|
|
78443
78737
|
}
|
|
78444
78738
|
|
|
78445
|
-
:where(.theme-scope)
|
|
78739
|
+
:where(.theme-scope)
|
|
78740
|
+
:where([data-block="customer-portal"])
|
|
78741
|
+
.cp-table
|
|
78742
|
+
tbody
|
|
78743
|
+
tr:last-child
|
|
78744
|
+
td {
|
|
78446
78745
|
border-bottom: none;
|
|
78447
78746
|
}
|
|
78448
78747
|
|
|
78449
|
-
:where(.theme-scope)
|
|
78748
|
+
:where(.theme-scope)
|
|
78749
|
+
:where([data-block="customer-portal"])
|
|
78750
|
+
:is(.cp-row--past, .cp-row--muted) {
|
|
78450
78751
|
opacity: 0.65;
|
|
78451
78752
|
}
|
|
78452
78753
|
|
|
@@ -78459,7 +78760,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78459
78760
|
line-height: 1.2;
|
|
78460
78761
|
}
|
|
78461
78762
|
|
|
78462
|
-
:where(.theme-scope)
|
|
78763
|
+
:where(.theme-scope)
|
|
78764
|
+
:where([data-block="customer-portal"])
|
|
78765
|
+
.cp-row-title__badges {
|
|
78463
78766
|
margin-left: auto;
|
|
78464
78767
|
display: flex;
|
|
78465
78768
|
flex-wrap: wrap;
|
|
@@ -78467,7 +78770,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78467
78770
|
gap: 0.375rem;
|
|
78468
78771
|
}
|
|
78469
78772
|
|
|
78470
|
-
:where(.theme-scope)
|
|
78773
|
+
:where(.theme-scope)
|
|
78774
|
+
:where([data-block="customer-portal"])
|
|
78775
|
+
.cp-row-title__text {
|
|
78471
78776
|
min-width: 0;
|
|
78472
78777
|
}
|
|
78473
78778
|
|
|
@@ -78487,12 +78792,16 @@ const containerResponsiveThemeCss = `/*
|
|
|
78487
78792
|
line-height: 1.35;
|
|
78488
78793
|
}
|
|
78489
78794
|
|
|
78490
|
-
:where(.theme-scope)
|
|
78795
|
+
:where(.theme-scope)
|
|
78796
|
+
:where([data-block="customer-portal"])
|
|
78797
|
+
.cp-row-note--success {
|
|
78491
78798
|
border-left-color: rgb(var(--tb-success));
|
|
78492
78799
|
color: rgb(var(--tb-success));
|
|
78493
78800
|
}
|
|
78494
78801
|
|
|
78495
|
-
:where(.theme-scope)
|
|
78802
|
+
:where(.theme-scope)
|
|
78803
|
+
:where([data-block="customer-portal"])
|
|
78804
|
+
.cp-row-note--error {
|
|
78496
78805
|
border-left-color: rgb(var(--tb-destructive));
|
|
78497
78806
|
color: rgb(var(--tb-destructive));
|
|
78498
78807
|
}
|
|
@@ -78511,16 +78820,23 @@ const containerResponsiveThemeCss = `/*
|
|
|
78511
78820
|
white-space: nowrap;
|
|
78512
78821
|
}
|
|
78513
78822
|
|
|
78514
|
-
:where(.theme-scope)
|
|
78823
|
+
:where(.theme-scope)
|
|
78824
|
+
:where([data-block="customer-portal"])
|
|
78825
|
+
.cp-col-actions
|
|
78826
|
+
.btn-sm {
|
|
78515
78827
|
white-space: nowrap;
|
|
78516
78828
|
}
|
|
78517
78829
|
|
|
78518
|
-
:where(.theme-scope)
|
|
78830
|
+
:where(.theme-scope)
|
|
78831
|
+
:where([data-block="customer-portal"])
|
|
78832
|
+
.cp-row-title__link {
|
|
78519
78833
|
color: inherit;
|
|
78520
78834
|
text-decoration: none;
|
|
78521
78835
|
}
|
|
78522
78836
|
|
|
78523
|
-
:where(.theme-scope)
|
|
78837
|
+
:where(.theme-scope)
|
|
78838
|
+
:where([data-block="customer-portal"])
|
|
78839
|
+
.cp-row-title__link:hover {
|
|
78524
78840
|
text-decoration: underline;
|
|
78525
78841
|
text-decoration-thickness: 2px;
|
|
78526
78842
|
text-underline-offset: 2px;
|
|
@@ -78542,7 +78858,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78542
78858
|
}
|
|
78543
78859
|
|
|
78544
78860
|
/* Profile actions */
|
|
78545
|
-
:where(.theme-scope)
|
|
78861
|
+
:where(.theme-scope)
|
|
78862
|
+
:where([data-block="customer-portal"])
|
|
78863
|
+
.cp-profile__actions {
|
|
78546
78864
|
display: flex;
|
|
78547
78865
|
gap: 0.75rem;
|
|
78548
78866
|
margin-top: 1rem;
|
|
@@ -78609,28 +78927,39 @@ const containerResponsiveThemeCss = `/*
|
|
|
78609
78927
|
gap: 0.375rem;
|
|
78610
78928
|
}
|
|
78611
78929
|
|
|
78612
|
-
:where(.theme-scope)
|
|
78930
|
+
:where(.theme-scope)
|
|
78931
|
+
:where([data-block="customer-portal"])
|
|
78932
|
+
.cp-guest-edit-row__index {
|
|
78613
78933
|
font-size: 0.75rem;
|
|
78614
78934
|
font-weight: 500;
|
|
78615
78935
|
color: var(--cp-muted);
|
|
78616
78936
|
}
|
|
78617
78937
|
|
|
78618
|
-
:where(.theme-scope)
|
|
78938
|
+
:where(.theme-scope)
|
|
78939
|
+
:where([data-block="customer-portal"])
|
|
78940
|
+
.cp-guest-edit-row__fields {
|
|
78619
78941
|
display: flex;
|
|
78620
78942
|
gap: 0.5rem;
|
|
78621
78943
|
}
|
|
78622
78944
|
|
|
78623
|
-
:where(.theme-scope)
|
|
78945
|
+
:where(.theme-scope)
|
|
78946
|
+
:where([data-block="customer-portal"])
|
|
78947
|
+
.cp-guest-edit-row__fields
|
|
78948
|
+
input {
|
|
78624
78949
|
flex: 1;
|
|
78625
78950
|
min-width: 0;
|
|
78626
78951
|
}
|
|
78627
78952
|
|
|
78628
|
-
:where(.theme-scope)
|
|
78953
|
+
:where(.theme-scope)
|
|
78954
|
+
:where([data-block="customer-portal"])
|
|
78955
|
+
.cp-guest-edit-row__error {
|
|
78629
78956
|
font-size: 0.75rem;
|
|
78630
78957
|
color: var(--cp-error);
|
|
78631
78958
|
}
|
|
78632
78959
|
|
|
78633
|
-
:where(.theme-scope)
|
|
78960
|
+
:where(.theme-scope)
|
|
78961
|
+
:where([data-block="customer-portal"])
|
|
78962
|
+
.cp-guests__actions {
|
|
78634
78963
|
display: flex;
|
|
78635
78964
|
gap: 0.5rem;
|
|
78636
78965
|
margin-top: 0.5rem;
|
|
@@ -78644,13 +78973,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
78644
78973
|
}
|
|
78645
78974
|
|
|
78646
78975
|
/* In the actions modal, tiles sit on a surface modal, so use "background" for contrast. */
|
|
78647
|
-
:where(.theme-scope)
|
|
78976
|
+
:where(.theme-scope)
|
|
78977
|
+
:where([data-block="customer-portal"])
|
|
78978
|
+
.cp-actions-list
|
|
78979
|
+
:where(.rb-tile) {
|
|
78648
78980
|
--rb-event-tile-bg: rgb(var(--tb-background));
|
|
78649
78981
|
--rb-event-tile-border: rgb(var(--tb-border));
|
|
78650
78982
|
}
|
|
78651
78983
|
|
|
78652
78984
|
/* Actions trigger: icon-only kebab button */
|
|
78653
|
-
:where(.theme-scope)
|
|
78985
|
+
:where(.theme-scope)
|
|
78986
|
+
:where([data-block="customer-portal"])
|
|
78987
|
+
.cp-actions-trigger.btn-sm {
|
|
78654
78988
|
padding: 0.35rem !important;
|
|
78655
78989
|
line-height: 1 !important;
|
|
78656
78990
|
min-width: 32px;
|
|
@@ -78674,17 +79008,24 @@ const containerResponsiveThemeCss = `/*
|
|
|
78674
79008
|
gap: 0.25rem;
|
|
78675
79009
|
}
|
|
78676
79010
|
|
|
78677
|
-
:where(.theme-scope)
|
|
79011
|
+
:where(.theme-scope)
|
|
79012
|
+
:where([data-block="customer-portal"])
|
|
79013
|
+
.cp-action-tile__title {
|
|
78678
79014
|
font-weight: 600;
|
|
78679
79015
|
font-size: 0.9375rem;
|
|
78680
79016
|
}
|
|
78681
79017
|
|
|
78682
|
-
:where(.theme-scope)
|
|
79018
|
+
:where(.theme-scope)
|
|
79019
|
+
:where([data-block="customer-portal"])
|
|
79020
|
+
.cp-action-tile__desc {
|
|
78683
79021
|
font-size: 0.875rem;
|
|
78684
79022
|
line-height: 1.35;
|
|
78685
79023
|
}
|
|
78686
79024
|
|
|
78687
|
-
:where(.theme-scope)
|
|
79025
|
+
:where(.theme-scope)
|
|
79026
|
+
:where([data-block="customer-portal"])
|
|
79027
|
+
.cp-action-tile--danger
|
|
79028
|
+
.cp-action-tile__title {
|
|
78688
79029
|
color: rgb(var(--tb-destructive));
|
|
78689
79030
|
}
|
|
78690
79031
|
|
|
@@ -78706,7 +79047,9 @@ const containerResponsiveThemeCss = `/*
|
|
|
78706
79047
|
text-decoration: underline;
|
|
78707
79048
|
}
|
|
78708
79049
|
|
|
78709
|
-
:where(.theme-scope)
|
|
79050
|
+
:where(.theme-scope)
|
|
79051
|
+
:where([data-block="customer-portal"])
|
|
79052
|
+
.cp-btn--link:hover {
|
|
78710
79053
|
color: var(--cp-primary-hover);
|
|
78711
79054
|
}
|
|
78712
79055
|
|
|
@@ -78745,34 +79088,48 @@ const containerResponsiveThemeCss = `/*
|
|
|
78745
79088
|
margin-top: 0.75rem;
|
|
78746
79089
|
}
|
|
78747
79090
|
|
|
78748
|
-
:where(.theme-scope)
|
|
79091
|
+
:where(.theme-scope)
|
|
79092
|
+
:where([data-block="customer-portal"])
|
|
79093
|
+
.cp-cancel-confirm__title {
|
|
78749
79094
|
font-weight: 600;
|
|
78750
79095
|
margin-bottom: 0.5rem;
|
|
78751
79096
|
}
|
|
78752
79097
|
|
|
78753
|
-
:where(.theme-scope)
|
|
79098
|
+
:where(.theme-scope)
|
|
79099
|
+
:where([data-block="customer-portal"])
|
|
79100
|
+
.cp-cancel-confirm__message {
|
|
78754
79101
|
margin-bottom: 0.25rem;
|
|
78755
79102
|
}
|
|
78756
79103
|
|
|
78757
|
-
:where(.theme-scope)
|
|
79104
|
+
:where(.theme-scope)
|
|
79105
|
+
:where([data-block="customer-portal"])
|
|
79106
|
+
.cp-cancel-confirm__warning {
|
|
78758
79107
|
margin-bottom: 0.75rem;
|
|
78759
79108
|
}
|
|
78760
79109
|
|
|
78761
|
-
:where(.theme-scope)
|
|
79110
|
+
:where(.theme-scope)
|
|
79111
|
+
:where([data-block="customer-portal"])
|
|
79112
|
+
.cp-cancel-confirm__actions {
|
|
78762
79113
|
display: flex;
|
|
78763
79114
|
gap: 0.75rem;
|
|
78764
79115
|
}
|
|
78765
79116
|
|
|
78766
79117
|
/* Membership actions */
|
|
78767
|
-
:where(.theme-scope)
|
|
79118
|
+
:where(.theme-scope)
|
|
79119
|
+
:where([data-block="customer-portal"])
|
|
79120
|
+
.cp-membership-actions {
|
|
78768
79121
|
margin-top: 0.75rem;
|
|
78769
79122
|
}
|
|
78770
79123
|
|
|
78771
|
-
:where(.theme-scope)
|
|
79124
|
+
:where(.theme-scope)
|
|
79125
|
+
:where([data-block="customer-portal"])
|
|
79126
|
+
.cp-section-actions {
|
|
78772
79127
|
margin-top: 1rem;
|
|
78773
79128
|
}
|
|
78774
79129
|
|
|
78775
|
-
:where(.theme-scope)
|
|
79130
|
+
:where(.theme-scope)
|
|
79131
|
+
:where([data-block="customer-portal"])
|
|
79132
|
+
.cp-card-subtitle--spaced {
|
|
78776
79133
|
margin-top: 0.75rem;
|
|
78777
79134
|
}
|
|
78778
79135
|
|
|
@@ -78796,9 +79153,18 @@ const containerResponsiveThemeCss = `/*
|
|
|
78796
79153
|
display: none;
|
|
78797
79154
|
}
|
|
78798
79155
|
|
|
78799
|
-
:where(.theme-scope)
|
|
78800
|
-
|
|
78801
|
-
|
|
79156
|
+
:where(.theme-scope)
|
|
79157
|
+
:where([data-block="customer-portal"])
|
|
79158
|
+
.cp-table
|
|
79159
|
+
:is(th, td).cp-col-guests,
|
|
79160
|
+
:where(.theme-scope)
|
|
79161
|
+
:where([data-block="customer-portal"])
|
|
79162
|
+
.cp-table
|
|
79163
|
+
:is(th, td).cp-col-tickets,
|
|
79164
|
+
:where(.theme-scope)
|
|
79165
|
+
:where([data-block="customer-portal"])
|
|
79166
|
+
.cp-table
|
|
79167
|
+
:is(th, td).cp-col-actions {
|
|
78802
79168
|
display: none;
|
|
78803
79169
|
}
|
|
78804
79170
|
|
|
@@ -78807,24 +79173,34 @@ const containerResponsiveThemeCss = `/*
|
|
|
78807
79173
|
}
|
|
78808
79174
|
|
|
78809
79175
|
/* Make the cell a positioning context for the kebab */
|
|
78810
|
-
:where(.theme-scope)
|
|
79176
|
+
:where(.theme-scope)
|
|
79177
|
+
:where([data-block="customer-portal"])
|
|
79178
|
+
.cp-row
|
|
79179
|
+
> td:first-child {
|
|
78811
79180
|
position: relative;
|
|
78812
79181
|
padding-right: 2.5rem;
|
|
78813
79182
|
}
|
|
78814
79183
|
|
|
78815
79184
|
/* Position kebab in top-right of the cell */
|
|
78816
|
-
:where(.theme-scope)
|
|
79185
|
+
:where(.theme-scope)
|
|
79186
|
+
:where([data-block="customer-portal"])
|
|
79187
|
+
.cp-row-mobile-actions {
|
|
78817
79188
|
position: absolute;
|
|
78818
79189
|
top: 0.5rem;
|
|
78819
79190
|
right: 0.5rem;
|
|
78820
79191
|
margin-top: 0;
|
|
78821
79192
|
}
|
|
78822
79193
|
|
|
78823
|
-
:where(.theme-scope)
|
|
79194
|
+
:where(.theme-scope)
|
|
79195
|
+
:where([data-block="customer-portal"])
|
|
79196
|
+
.cp-row-mobile-actions
|
|
79197
|
+
.btn-sm {
|
|
78824
79198
|
width: auto;
|
|
78825
79199
|
}
|
|
78826
79200
|
|
|
78827
|
-
:where(.theme-scope)
|
|
79201
|
+
:where(.theme-scope)
|
|
79202
|
+
:where([data-block="customer-portal"])
|
|
79203
|
+
.cp-profile__edit {
|
|
78828
79204
|
align-self: stretch;
|
|
78829
79205
|
}
|
|
78830
79206
|
}
|
|
@@ -79272,6 +79648,30 @@ const containerResponsiveThemeCss = `/*
|
|
|
79272
79648
|
gap: 0.25rem;
|
|
79273
79649
|
}
|
|
79274
79650
|
|
|
79651
|
+
/* Topic choices (visitor picks what to hear about). Same treatment as the
|
|
79652
|
+
form block's .fb-fieldset / .fb-inline, defined here because the newsletter
|
|
79653
|
+
form also renders inside contact-newsletter and the site footer. */
|
|
79654
|
+
:where(.theme-scope) .newsletter-topics {
|
|
79655
|
+
display: flex;
|
|
79656
|
+
flex-direction: column;
|
|
79657
|
+
gap: 0.5rem;
|
|
79658
|
+
border: none;
|
|
79659
|
+
padding: 0;
|
|
79660
|
+
margin: 0;
|
|
79661
|
+
min-width: 0;
|
|
79662
|
+
}
|
|
79663
|
+
|
|
79664
|
+
:where(.theme-scope) .newsletter-topics > legend {
|
|
79665
|
+
padding: 0;
|
|
79666
|
+
margin-bottom: 0.25rem;
|
|
79667
|
+
}
|
|
79668
|
+
|
|
79669
|
+
:where(.theme-scope) .newsletter-topic-choice {
|
|
79670
|
+
display: flex;
|
|
79671
|
+
align-items: center;
|
|
79672
|
+
gap: 0.5rem;
|
|
79673
|
+
}
|
|
79674
|
+
|
|
79275
79675
|
/* Required indicator */
|
|
79276
79676
|
:where(.theme-scope) .newsletter-required {
|
|
79277
79677
|
color: rgb(var(--tb-primary));
|
|
@@ -79321,6 +79721,10 @@ const containerResponsiveThemeCss = `/*
|
|
|
79321
79721
|
flex-shrink: 0;
|
|
79322
79722
|
}
|
|
79323
79723
|
|
|
79724
|
+
:where(.theme-scope) .newsletter-inline .newsletter-topics {
|
|
79725
|
+
flex-basis: 100%;
|
|
79726
|
+
}
|
|
79727
|
+
|
|
79324
79728
|
/* Mobile fallback for inline variant */
|
|
79325
79729
|
@container rb-site (max-width: 640px) {
|
|
79326
79730
|
@scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
|
|
@@ -81833,8 +82237,12 @@ function shouldSkipResolvedLoader(input) {
|
|
|
81833
82237
|
* ```
|
|
81834
82238
|
*/
|
|
81835
82239
|
async function prefetchBlockData$1(page, context, options) {
|
|
82240
|
+
return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
|
|
82241
|
+
}
|
|
82242
|
+
async function prefetchBlockDataWithFailures(page, context, options) {
|
|
81836
82243
|
const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
|
|
81837
82244
|
const results = {};
|
|
82245
|
+
const loaderFailures = {};
|
|
81838
82246
|
const tasks = [];
|
|
81839
82247
|
for (const block of page.blocks) {
|
|
81840
82248
|
const blockId = block.id;
|
|
@@ -81882,6 +82290,11 @@ async function prefetchBlockData$1(page, context, options) {
|
|
|
81882
82290
|
const blockResults = results[blockId] ?? (results[blockId] = {});
|
|
81883
82291
|
blockResults[key] = data;
|
|
81884
82292
|
} catch (error) {
|
|
82293
|
+
const blockFailures = loaderFailures[blockId] ?? (loaderFailures[blockId] = {});
|
|
82294
|
+
blockFailures[key] = {
|
|
82295
|
+
endpoint,
|
|
82296
|
+
params
|
|
82297
|
+
};
|
|
81885
82298
|
if (onError) onError(error, {
|
|
81886
82299
|
block: block.kind,
|
|
81887
82300
|
loader: key
|
|
@@ -81891,7 +82304,10 @@ async function prefetchBlockData$1(page, context, options) {
|
|
|
81891
82304
|
}
|
|
81892
82305
|
}
|
|
81893
82306
|
if (tasks.length > 0) await Promise.all(tasks);
|
|
81894
|
-
return
|
|
82307
|
+
return {
|
|
82308
|
+
resolvedData: results,
|
|
82309
|
+
loaderFailures
|
|
82310
|
+
};
|
|
81895
82311
|
}
|
|
81896
82312
|
//#endregion
|
|
81897
82313
|
//#region ../blocks/src/system/data/loaderEndpoints.ts
|
|
@@ -82302,7 +82718,17 @@ const riverbankSiteConfigInputSchema = z$1.object({
|
|
|
82302
82718
|
z$1.object({
|
|
82303
82719
|
config: riverbankSiteConfigInputSchema,
|
|
82304
82720
|
forceContentTypes: z$1.boolean().optional(),
|
|
82305
|
-
mode: z$1.enum(["apply", "preview"]).optional()
|
|
82721
|
+
mode: z$1.enum(["apply", "preview"]).optional(),
|
|
82722
|
+
expectedMailingListProviderScope: z$1.unknown().transform((value, ctx) => {
|
|
82723
|
+
if (value === void 0) return void 0;
|
|
82724
|
+
const parsed = parseMailingListProviderScope(value);
|
|
82725
|
+
if (parsed.ok) return parsed.value;
|
|
82726
|
+
ctx.addIssue({
|
|
82727
|
+
code: "custom",
|
|
82728
|
+
message: "Invalid mailing-list provider scope"
|
|
82729
|
+
});
|
|
82730
|
+
return z$1.NEVER;
|
|
82731
|
+
}).optional()
|
|
82306
82732
|
}).strict();
|
|
82307
82733
|
//#endregion
|
|
82308
82734
|
//#region ../api/src/sdkThemeWire.ts
|
|
@@ -84055,9 +84481,11 @@ function convertPageResponseBlock(block) {
|
|
|
84055
84481
|
if (typeof block.id !== "string" && block.id !== null) throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
|
|
84056
84482
|
if (typeof block.kind !== "string") throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
|
|
84057
84483
|
if (typeof block.purpose !== "string") throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
|
|
84484
|
+
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}`);
|
|
84058
84485
|
const admission = readInvalidBlockAdmission(block.admission);
|
|
84059
84486
|
return {
|
|
84060
84487
|
id: block.id,
|
|
84488
|
+
...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
|
|
84061
84489
|
kind: block.kind,
|
|
84062
84490
|
purpose: block.purpose,
|
|
84063
84491
|
content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
|
|
@@ -84090,6 +84518,7 @@ function projectRenderablePageOutline(page) {
|
|
|
84090
84518
|
...page,
|
|
84091
84519
|
blocks: page.blocks.flatMap((block) => block.admission.kind === "renderable" ? [{
|
|
84092
84520
|
id: block.id,
|
|
84521
|
+
...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
|
|
84093
84522
|
kind: block.kind,
|
|
84094
84523
|
purpose: block.purpose,
|
|
84095
84524
|
content: block.admission.content,
|
|
@@ -84100,6 +84529,7 @@ function projectRenderablePageOutline(page) {
|
|
|
84100
84529
|
function admitSdkRuntimePageBlock(block, customBlocks) {
|
|
84101
84530
|
const base = {
|
|
84102
84531
|
id: block.id,
|
|
84532
|
+
...block.contentVersionId !== void 0 ? { contentVersionId: block.contentVersionId } : {},
|
|
84103
84533
|
kind: block.kind,
|
|
84104
84534
|
purpose: block.purpose,
|
|
84105
84535
|
...block.bindings ? { bindings: block.bindings } : {}
|
|
@@ -86760,6 +87190,7 @@ function readEntrySlotKey(block) {
|
|
|
86760
87190
|
function admitEntrySlotBlock(block, customBlocks) {
|
|
86761
87191
|
const base = {
|
|
86762
87192
|
id: block.id ?? block.blockId ?? null,
|
|
87193
|
+
contentVersionId: block.contentVersionId,
|
|
86763
87194
|
kind: block.kind,
|
|
86764
87195
|
purpose: block.purpose,
|
|
86765
87196
|
...isRecord$1(block.bindings) ? { bindings: block.bindings } : {}
|
|
@@ -87273,7 +87704,7 @@ function PageContent(props) {
|
|
|
87273
87704
|
previewToken,
|
|
87274
87705
|
resolvedData,
|
|
87275
87706
|
bookingOfferingPresets: bookingOfferingPresets ?? [],
|
|
87276
|
-
mailingList,
|
|
87707
|
+
mailingList: mailingList ?? dataContext?.mailingList,
|
|
87277
87708
|
bookingTimeZone: resolveSdkBookingTimeZone(bookingTimeZone),
|
|
87278
87709
|
routes: routeMap,
|
|
87279
87710
|
pagesByIdentifier,
|
|
@@ -88478,7 +88909,7 @@ var CircuitOpenError = class extends Error {
|
|
|
88478
88909
|
* 1. This constant
|
|
88479
88910
|
* 2. The "version" field in package.json
|
|
88480
88911
|
*/
|
|
88481
|
-
const SDK_VERSION = "0.
|
|
88912
|
+
const SDK_VERSION = "0.140.0";
|
|
88482
88913
|
//#endregion
|
|
88483
88914
|
//#region src/next/content-load-failure.ts
|
|
88484
88915
|
const SdkContentLoadError = RiverbankContentLoadError;
|
|
@@ -89440,7 +89871,12 @@ const API_ENDPOINTS = Object.freeze({
|
|
|
89440
89871
|
path: "/public/sites/{siteId}/sitemap",
|
|
89441
89872
|
method: "GET",
|
|
89442
89873
|
revalidate: 60,
|
|
89443
|
-
tags: [
|
|
89874
|
+
tags: [
|
|
89875
|
+
"riverbank:site:{siteId}:routable-content",
|
|
89876
|
+
"riverbank:site:{siteId}:settings",
|
|
89877
|
+
"riverbank:site:{siteId}:public-events",
|
|
89878
|
+
"riverbank:site:{siteId}:public-booking-services"
|
|
89879
|
+
],
|
|
89444
89880
|
auth: "public",
|
|
89445
89881
|
responseKind: "json"
|
|
89446
89882
|
}
|