riverbankcms 0.25.0 → 0.27.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/dist/acceptance/matrix.mjs +3 -3
- package/dist/cli/index.mjs +464 -565
- package/dist/{entryCommands-nATGxgma.mjs → entryCommands-Dg5IT7Uv.mjs} +377 -79
- package/dist/{eventUpsertInputSchema-XRzH6yFb.mjs → eventUpsertInputSchema-D4xpVjUT.mjs} +3 -2
- package/dist/load-config-BcATOVmw.mjs +4 -0
- package/dist/{load-config-DwiS-Ibn.mjs → load-config-DsPKn5yN.mjs} +2 -2
- package/dist/{plan-ChNV88KF.mjs → plan-oltx4aO0.mjs} +1 -1
- package/dist/scaffold/index.mjs +2 -2
- package/dist/{sdk-event-upsert-4t4e1z-h.mjs → sdk-event-upsert-CnvVuQJy.mjs} +5514 -3529
- package/dist/{src-LhtqTjH7.mjs → src-DqoU7zKs.mjs} +8 -2
- package/dist/testing.mjs +4 -4
- package/package.json +1 -1
- package/dist/load-config-zu397zDX.mjs +0 -4
package/dist/cli/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as
|
|
3
|
-
import { $
|
|
4
|
-
import { $ as normalizeMediaValueToIdentifierOnly, $t as createCommandContext, A as formatDiffDetail, An as getEnvPrefix, At as navigationIdentity, B as buildFieldChanges, Bn as portablePageDesignSchema, Bt as preparePushConfigTarget, C as reportFromOutcomes, Cn as requireEnvironmentWriteAuthorization, Ct as fileExists, D as normalizeRemoteHomepageReference, Dn as transportSuggestion, Dt as writeJsonFileAtomic, E as createEmptySyncResult, En as formatError, Et as writeJsonFile, F as calculatePullDiff, Fn as createManagementClient, Ft as navigationCommandItemToManagementInput, G as syncLocalMediaForPull, Gt as APPOINTMENT_SERVICE_VISIBILITY_VALUES, H as formatFieldPath, Hn as API_ENDPOINTS, Ht as extractApiErrorMessage, I as buildJsonDiff, In as ManagementApiError, It as normalizeNavigationConfigItemForCommand, J as admitBinaryWriteDestination, Jt as
|
|
5
|
-
import { r as CLI_VERSION, t as loadConfigFile } from "../load-config-
|
|
6
|
-
import { a as RichTextDocSchema, c as isRecord$18, i as findUnfilledSentinels, n as buildEntryScaffold, o as isRichTextDoc, r as validateEntryInstance, s as isObjectRecord, t as eventUpsertInputSchema } from "../eventUpsertInputSchema-
|
|
7
|
-
import { a as prepareScaffoldExecution, c as LOCAL_PACKAGE_VENDOR_DIR, d as loadGeneratedPackageRanges, i as preflightScaffoldTargets, n as createScaffoldCompletion, s as deriveScaffoldLocalManifest, t as deriveScaffoldPlan } from "../plan-
|
|
2
|
+
import { $ as createFooterRef, $n as parseCanonicalMediaIdentifier, $r as textColorStyle, $t as cardVariantRoleValues, An as stripStaleTransitionStyleGroup, Ar as eyebrowTreatmentValues, At as parseGradientPresetId, B as eventCommandScheduleSchema, Bn as resolveMediaTransformForAspect, Br as parseResolvedSurface, Bt as MQ_MD_DOWN, C as sortRecord, Cn as resolveCompiledSectionContextFromContent, Ct as resolveModeArrangement, D as resolveEventSeriesWaitlistMapping, Dn as boxBackgroundSchema, Dr as defineFrameCapability, Dt as compiledRuntimeStyleFieldNames, En as boxBackgroundOverlaySchema, Er as defineBlockDesignCapability, Et as requireCuratedSiteStyle, F as entryIdentifierForCommand, Fn as looksLikeUuid, Fr as offeringsPreviewCompositionTreatmentValues, Ft as renderHeaderPaintTargetRules, G as require_react, Gn as mediaSchema, Gr as isCssColorLiteral, Gt as generateDefaultButtonSystem, H as bookingPaymentCollectionOptionSchema, Hn as getDirectImageUrlForSiteScopedPath, Hr as resolveSurface, Ht as getComponentBorderWidthPx, I as pageIdentifierForBlockCommand, In as rotateNormalizedPoint, Ir as testimonialsCompositionTreatmentValues, It as BREAKPOINT_LG, J as createBlocksRef, Jn as buildRenderableMediaAssetIndex, Jr as resolveTokenOrCssColorValue, Jt as themeButtonSizeClassName, K as ianaTimezoneSchema, Kn as persistableMediaSchema, Kr as resolveOnColorForThemeToken, Kt as parseThemeButtonVariantId, L as pageIdentifierForCommand, Ln as normalizeWidthCandidates, Lr as tileTreatmentValues, Lt as BREAKPOINT_MD, M as eventManagementTiming, Mn as summarizePortableMediaReferences, Mr as headingDecorationColorTokenValues, Mt as generateHeaderScrollTreatmentStyles, N as blockIdentifierForCommand, Nn as walkAndCollectImageAttrs, Nr as introCompositionTreatmentValues, Nt as generateMobileOverlayBackdropFilterFix, O as mapEventCommandContent, On as runtimeBoxBackgroundSchema, Or as defineNoBlockDesignCapability, Ot as gradientToCss, P as blockOrderIdentifiersForCommand, Pn as deleteEnvSpecificKeys, Pr as makeBoundaryId, Pt as getHeaderPaintTargets, Q as createEventSeriesRef, Qn as buildMediaIdentifierFromFilename, Qr as rgbColorValue, Qt as cardRoleSchema, R as pagePathForCommand, Rn as isExplicitRectCrop, Rr as toNonEmptyReadonlyArray, Rt as BREAKPOINT_SM, S as venueManagementFields, Sn as parseCanonicalRuntimeBackground, Sr as asLayoutVariantKey, St as resolveEffectiveArrangement, Tn as sectionForegroundBackground, Tr as assertNever$10, Tt as deriveSiteStyleBlockPolicy, U as bookingPaymentTermsSchema, Un as getImageUrl, Ur as serializeSurfaceTree, Ut as getComponentShadowVar, Vn as getDirectImageUrlForRelativePath, Vr as parseSurfaceTree, Vt as headerVariantValues, W as require_jsx_runtime, Wn as isSiteScopedDirectImageStoragePath, Wr as surfaceDecorationColors, Wt as ICON_CONFIG, X as createContentEntryRef, Xn as mediaTypeDiscriminants, Xr as borderColorStyle, Xt as parseThemeForPersistence, Y as createCommandRef, Yn as resolveManagedMediaReference, Yr as backgroundColorStyle, Yt as themeButtonVariantClassNames, Z as createEventCategoryRef, Zn as mediaIdentifierSchema, Zr as mergeStyles, Zt as renderCssDeclarations, _i as parseThemeColorToken, _n as composeBoundary, _r as cardListFamilyBlocks, _t as arrangementSlotNames, ai as surfaceInkPublication, at as refSlug, b as isEventVisibility, bi as __toESM, bn as deriveSectionGround, bt as arrangementManifestFromVariants, c as customLinkSchema$1, ci as TokenResolver, cn as footerForegroundCandidates, ct as headerForegroundCandidates, d as internalLinkSchema, di as surfaceForegroundInputFromResolved, dt as readOpeningForegroundProjection, ei as mapDrawingStyle, en as normalizeCardRole, er as parseMediaIdentifier, et as createFormRef, f as internalResolvedLinkSchema, fi as surfaceForegroundStyle, fr as classifyKnownMimeType, ft as readOpeningToneProjection, g as linkSchema, gi as PUBLIC_BUTTON_ROLES, gn as boundaryLayout, gr as resolveEffectiveKnobs, gt as arrangementLookHooks, h as isResolvedInternalLinkEntityType, hi as surfaceInkStyle, hn as headerRootPaint, hr as defineBlockDesignMetadata, ht as readHeaderNavFontSizePreference, i as sdkEventUpsertOptionalFieldSchemas, ii as resolveSurfaceForeground, ir as resolveVideoSelectionIntentForMediaField, it as createVenueRef, jn as collectPortableMediaReferencesFromContent, jr as featureCardCompositionTreatmentValues, jt as themeSchema, kn as siteChromeBackgroundOverrideOwner, kr as eventListTreatmentValues, kt as getGradientPreset, l as entryLinkSchema$1, li as defaultThemeTokens, ln as buildTextContrastShadow, lr as parseRelativeStoragePath, lt as headerLeafTextColor, mi as surfaceInkDeclarations, mn as headerNeedsPhotoShade, mr as parseSafeDownloadFilename, mt as mergeHeaderNavTypographyPreference, ni as selectLogoVariant, nt as createPageRef, o as classifySdkEventBookingOffer, oi as expandPalette, or as getMimeType, p as internalRouteOnlyLinkSchema, pi as surfaceForegroundValue, pr as managementMediaLibraryUploadLimitForMimeType, q as createBlockRef, qn as runtimeMediaSchema, qr as resolveThemeColorReferenceValue, qt as themeButtonExtraClassesWithTrailingIcon, ri as surfaceToneFromForegroundToken, rr as deriveVideoSlotPolicy, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, si as getTextColorForBackground, sr as asRecord, st as effectiveHeaderNavLinkStyle, t as classifySdkEventTiming, ti as opaqueSurfaceDeclarations, tt as createNavigationRef, u as externalLinkSchema$1, ui as surfaceForegroundDeclarations, un as generateNavLinkCSS, ur as FILE_SIZE_LIMITS, ut as transparentHeaderForegroundInput, v as pageLinkSchema$1, vi as parseBlockColorToken, vn as sectionFactsForContent, vr as cardListKnobBlocks, vt as resolveItemSurface, w as stableStringify, wn as resolveSectionBackground, wr as asSiteStyleId, wt as resolvePublishedLook, xn as heroPhotoPaintsGround, xr as asDesignBlockId, xt as readStoredMode, yi as __commonJSMin, yn as applyLookPhotoTreatment, yr as arrangementModes, yt as resolveLookSlotSurfaces, z as hasConfiguredBookingVertical, zn as parseAspectRatioValue, zr as visibleHeadingDecorationFamilyValues, zt as BREAKPOINT_XL } from "../sdk-event-upsert-CnvVuQJy.mjs";
|
|
3
|
+
import { $n as err, $t as mapReadonlyNonEmptyArray, A as parseMailingListRuntimeContext, At as isSettleableOrderInstalmentPlanStatus, B as formatOpeningHoursRows, Bn as unsafeAsPositiveByteCount, Bt as deriveTotalTicketQuantity, C as createSecret, Cn as parseUserId, Ct as toBookingTimeZone, D as parseMailingListBlockId, Dn as unsafeAsCheckoutLineId, Dt as validateBookingPaymentOptionKinds, E as slugify, Ft as getBookingInstalmentProtectedDepositAmountCents, Gt as publicEventPricingCurrency, H as parseWeeklyOpeningHours, Hn as unsafeAsPricingOptionId, Ht as formatBookingPriceDisplay, I as parseMailingListPlacementTargeting, In as unsafeAsMediaAssetId, It as omitZeroAmountFutureRows, J as normalizeLocationAddressText, Jt as publicEventPricingType, K as locationMapLinks, Kt as publicEventPricingDisplay, L as DEFAULT_MAILING_LIST_TARGETING, Ln as unsafeAsOccurrenceId, Lt as splitAmountWithRemainderInFirst, M as DEFAULT_MAILING_LIST_SUCCESS_MESSAGE, Mn as unsafeAsEventInstanceId, Mt as clampConfiguredAmount, N as parseMailingListProviderScope, Nt as getBookingInstalmentDepositRefundability, O as parseMailingListContentVersionId, Ot as isLiveOrderInstalmentPlanStatus, P as parseFooterCompositionV1, Pt as getBookingInstalmentPlanIntervalCount, Q as toLocationCoordinates, R as planMailingListChoicePresentation, Rt as resolveFlexibleBalanceDueAt, S as resolveWholeSeriesRunLifecycle, Sn as parseSiteTermsVersionId, St as resolveBookingTimeZoneId, T as parseManagementKey, Tt as toUtcIsoDateTimeString, U as assertAllowedPublicUrl, Ut as formatEventPricing, Vt as parseEventPageSurfaceSubject, W as decideLocationSave, Wt as isPublicEventPricingOptionDisplayable, X as projectPublicLocation, Xt as resolvePricingOptionsPriceDisplay, Y as parseLocationValue, Yt as resolveExactOrFreePriceDisplay, Z as publicLocationSchema$1, Zt as fromArray, a as NAVIGATION_LOCATIONS, an as unsafeAsNonNegativeCents, at as formatDateTimeRange, b as orderedLiveRunSessions, bn as parseRetiredCourseId, bt as parseUtcIsoDateTimeString, cn as parseCurrencyCode, ct as inferSiteDateLocale, dn as parseApiKeyId, dt as compareLocalScheduleDates, en as isNonNegativeWholeCents$1, er as ok, et as mapDrawingSchema, f as EVENT_PRESET_VALUES, fn as parseCustomerId, ft as formatLocalScheduleDate, gn as parseEventSeriesId, gt as getLocalScheduleTime, h as WHOLE_SERIES_EVENT_PRESET_VALUES, ht as getLocalScheduleDate, i as EVENT_PRESET_VOCABULARY, in as toNonNegativeCents, it as formatDateTime, j as assessMailingListTargeting, jt as addIntervalPreservingMonthAnchor, k as parseMailingListSignedSourceToken, kn as unsafeAsDemoCapability, kt as isSettleableFlexibleBalanceContractStatus, ln as assertNever, lt as resolveBookingDisplayContext, m as SURFACE_EVENT_PRESET_VALUES, mn as parseDatedOfferingCapacityHoldId, mt as getBookingLocalDateKey, nn as parsePositiveCents, nt as formatDate, on as unsafeAsPositiveCents, ot as formatTime$1, pn as parseDatedOfferingCapacityHoldAuditRef, pt as formatLocalScheduleTime, q as locationValueSchema, qt as publicEventPricingOptions, rn as toCents, rt as formatDateRange, sn as formatCurrencyAmount, st as formatTimeRange, tn as parseNonNegativeCents, tr as blockInteractionContextSchema, tt as selectCategoryView, u as resolveSiteVerticalBookingConfig, un as formatDurationUnitLabel, ut as buildBookingUtcDateWindow, v as CANCELLED_SESSION_STATUS, vn as parseMembershipId, vt as parseBookingLocalDate, w as exposeSecret, wt as toScheduledBookingDateTime, x as resolveWholeSeriesBookingPhase, xn as parseSiteId, xt as resolveBookingBusinessTimeZone, y as nextLiveRunSessionStartMs, yt as parseLocalScheduleTime, z as isCanonicalRichTextDoc, zn as unsafeAsPassId, zt as resolveFlexibleBalanceInitialPaymentCents } from "../src-DqoU7zKs.mjs";
|
|
4
|
+
import { $ as normalizeMediaValueToIdentifierOnly, $t as createCommandContext, A as formatDiffDetail, An as getEnvPrefix, At as navigationIdentity, B as buildFieldChanges, Bn as portablePageDesignSchema, Bt as preparePushConfigTarget, C as reportFromOutcomes, Cn as requireEnvironmentWriteAuthorization, Ct as fileExists, D as normalizeRemoteHomepageReference, Dn as transportSuggestion, Dt as writeJsonFileAtomic, E as createEmptySyncResult, En as formatError, Et as writeJsonFile, F as calculatePullDiff, Fn as createManagementClient, Ft as navigationCommandItemToManagementInput, G as syncLocalMediaForPull, Gt as APPOINTMENT_SERVICE_VISIBILITY_VALUES, H as formatFieldPath, Hn as API_ENDPOINTS, Ht as extractApiErrorMessage, I as buildJsonDiff, In as ManagementApiError, It as normalizeNavigationConfigItemForCommand, J as admitBinaryWriteDestination, Jt as ApiRequestError, K as applyLocalMediaPush, Kt as createBearerAPIClient, L as hasPageOperations, Ln as sdkEventScheduleSchema, Lt as applyPushConfigPlan, M as hasPendingChanges, Mn as isLocalConfigured, Mt as convertPulledFooterToLocal, N as findChangedFieldsWithValues, Nn as isRemoteConfigured, Nt as convertPulledNavigationToLocal, O as calculateDiff, On as CliExit, Ot as isMediaValue, P as formatHumanDiff, Pn as loadSdkEnvironment, Pt as convertPulledPagesToLocal, Q as normalizeMediaIdentifierInput, Qt as createClientForEnv, R as pageMetadataForUpsert, Rn as sdkSettingsUpdateSchema, Rt as createPushConfigCommand, S as planCliCommandBatchForBindings, Sn as planEnvironmentWriteAuthorization, St as ensureDir, T as executeResidualSettingsSyncPlan, Tn as ErrorCodes, Tt as readJsonFile, U as revalidateLocalMediaPushPlan, Un as ApiEnvelopeError, Ut as normalizeApiError, V as formatFieldChange, Vn as sdkConfiguredBookingVerticalConfigSchema, Vt as revalidatePushConfigPlan, Wn as unwrapResponse, Wt as isRecord$2, X as writeBinaryFileAtomic, Xt as bindRequestTimeout, Y as readStableBinaryFile, Yt as mapEnvironmentExecutionOutcomesJson, Z as sha256, Zt as confirmAction, _ as commandExecutionToReport, _n as withErrorHandling, _t as metadataFilePath, a as executeEntryCommandPlanAsReport, an as getOutputContext, at as readEntries, b as executeCompiledCliCommandPlanAsReport, bn as parseEnvironmentSelection, bt as writeMetadataFile, c as titleFromEntryData, cn as managementClientConfigFor, ct as readEventsMeta, d as unsafeAsCliEntryIdentifier, dn as parseJsonData, dt as readNavigationMeta, en as createGetCommand, et as walkLocalContentMedia, f as unsafeAsCliFormSlug, fn as parsePaginationOptions, ft as readPagesMeta, g as commandCompileFailureToReport, gn as withConfirmation, gt as ensureMetadataDir, h as mutationCounterForEffect, hn as withCommandContext, ht as writeMediaManifest, i as entrySiteCommandTypes, in as formatDateShort, it as findLegacyEntryFiles, j as formatDiffSummary, jn as getEnvironmentDebugInfo, jt as navigationIdentityMap, k as calculateFooterDiff, kt as duplicateNavigationIdentityMessage, l as unsafeAsCliBlockIdentifier, ln as mapEntryForOutput, lt as readFooterMeta, m as commandReportToSyncResult, mn as runWithInvocation, mt as readVenuesMeta, n as entryCommandCompileErrorToReport, nn as createOutputForCommand, nt as downloadMedia, o as executeEntryCommandPlanAsSyncResult, on as getOutputOnlyContext, ot as readAllMeta, p as unsafeAsCliPageIdentifier, pn as resolveCommandPath, pt as readSettingsMeta, q as prepareLocalMediaForPush, qt as deriveCmsApiUrlFromDashboardUrl, r as entryCommandReportToSyncResult, rn as currentInvocationEnvelope, rt as extractMediaIdentifiers, s as syncResultForEntryCommandCompileError, sn as handleCommandError, st as readEventCategoriesMeta, t as compileEntryPushCommands, tn as createListCommand, tt as buildStorageUrl, u as unsafeAsCliContentTypeKey, un as parseJsonArray, ut as readFormsMeta, v as commandReportHasFailures, vn as withOutputOnlyErrorHandling, vt as metadataTargetFromEnvironment, w as mergeManySyncResults, wn as withRiverbankEnv, wt as listFiles, x as formatManagementError, xn as planEnvironmentExecution, xt as writeMetadataRecordMap, y as executeCliCommandPlan, yn as executeEnvironmentPlan, yt as readMetadataFile, zn as linkPayloadSchema, zt as loadPushConfigTarget } from "../entryCommands-Dg5IT7Uv.mjs";
|
|
5
|
+
import { r as CLI_VERSION, t as loadConfigFile } from "../load-config-DsPKn5yN.mjs";
|
|
6
|
+
import { a as RichTextDocSchema, c as isRecord$18, i as findUnfilledSentinels, n as buildEntryScaffold, o as isRichTextDoc, r as validateEntryInstance, s as isObjectRecord, t as eventUpsertInputSchema } from "../eventUpsertInputSchema-D4xpVjUT.mjs";
|
|
7
|
+
import { a as prepareScaffoldExecution, c as LOCAL_PACKAGE_VENDOR_DIR, d as loadGeneratedPackageRanges, i as preflightScaffoldTargets, n as createScaffoldCompletion, s as deriveScaffoldLocalManifest, t as deriveScaffoldPlan } from "../plan-oltx4aO0.mjs";
|
|
8
8
|
import { config } from "dotenv";
|
|
9
9
|
import { Command, CommanderError } from "commander";
|
|
10
10
|
import * as fs$2 from "fs/promises";
|
|
@@ -1277,6 +1277,9 @@ function parseLocalEventRun(raw, filePath) {
|
|
|
1277
1277
|
assertLocalEventRunName(fields$1, identity.bookingScope, filePath);
|
|
1278
1278
|
assertLocalEventRunRefs(fields$1, filePath);
|
|
1279
1279
|
assertLocalEventRunVisibility(fields$1, filePath);
|
|
1280
|
+
if (!sdkEventUpsertOptionalFieldSchemas.waitlistMode.safeParse(fields$1.waitlistMode).success) {
|
|
1281
|
+
throw new InvalidLocalEventScheduleIdentityError(filePath, "waitlistMode must be inherit, off or on");
|
|
1282
|
+
}
|
|
1280
1283
|
if ("categoryRef" in fields$1) {
|
|
1281
1284
|
throw new InvalidLocalEventScheduleIdentityError(filePath, "Move categoryRef to the parent Event file");
|
|
1282
1285
|
}
|
|
@@ -2191,6 +2194,7 @@ function mapEventRunToComparable(run) {
|
|
|
2191
2194
|
authoredSchedule: run.authoredSchedule,
|
|
2192
2195
|
occurrences: run.occurrences,
|
|
2193
2196
|
capacity: run.capacity,
|
|
2197
|
+
waitlistMode: run.waitlistMode,
|
|
2194
2198
|
bookingOffer: run.bookingOffer,
|
|
2195
2199
|
venueRef: run.venueRef,
|
|
2196
2200
|
formRef: run.formRef,
|
|
@@ -4090,6 +4094,7 @@ function normalizeRemoteRun(run) {
|
|
|
4090
4094
|
authoredSchedule: run.authoredSchedule ?? null,
|
|
4091
4095
|
occurrences: [...run.occurrences],
|
|
4092
4096
|
capacity: run.capacity,
|
|
4097
|
+
waitlistMode: nullishToNull(run.waitlistMode),
|
|
4093
4098
|
bookingOffer: normalizeCanonicalBookingOffer(run.bookingOffer),
|
|
4094
4099
|
venueRef: run.venueRef,
|
|
4095
4100
|
formRef: run.formRef,
|
|
@@ -4111,6 +4116,7 @@ function normalizeLocalRun(local, remote) {
|
|
|
4111
4116
|
authoredSchedule: local.authoredSchedule ?? null,
|
|
4112
4117
|
occurrences: [...local.occurrences],
|
|
4113
4118
|
capacity: overrideWhenDefined(local.capacity, base.capacity, (value) => typeof value === "number" ? value : null),
|
|
4119
|
+
waitlistMode: local.waitlistMode === undefined ? base.waitlistMode : local.waitlistMode,
|
|
4114
4120
|
bookingOffer: overrideWhenDefined(local.bookingOffer, base.bookingOffer, normalizeCanonicalBookingOffer),
|
|
4115
4121
|
venueRef: overrideWhenDefined(local.venueRef, base.venueRef, normalizeNullableString),
|
|
4116
4122
|
formRef: overrideWhenDefined(local.formRef, base.formRef, normalizeNullableString),
|
|
@@ -4149,6 +4155,7 @@ function normalizeNewLocalRun(run) {
|
|
|
4149
4155
|
authoredSchedule: run.authoredSchedule ?? null,
|
|
4150
4156
|
occurrences: [...run.occurrences],
|
|
4151
4157
|
capacity: run.capacity ?? null,
|
|
4158
|
+
waitlistMode: nullishToNull(run.waitlistMode),
|
|
4152
4159
|
bookingOffer: normalizeCanonicalBookingOffer(run.bookingOffer),
|
|
4153
4160
|
venueRef: run.venueRef ?? null,
|
|
4154
4161
|
formRef: run.formRef ?? null,
|
|
@@ -4849,6 +4856,7 @@ function buildEventSeriesCommand(event, run, schedule, offer) {
|
|
|
4849
4856
|
categoryIdentifier: event.categoryRef ?? undefined,
|
|
4850
4857
|
formIdentifier: run.formRef ?? undefined,
|
|
4851
4858
|
capacity: eventCapacity(run.capacity),
|
|
4859
|
+
...run.waitlistMode === undefined ? {} : { waitlist: { kind: run.waitlistMode === "on" ? "enabled_when_full" : run.waitlistMode === "off" ? "disabled" : "inherit" } },
|
|
4852
4860
|
bookingOffer: offer.bookingOffer,
|
|
4853
4861
|
...schedule.schedule !== undefined ? { schedule: schedule.schedule } : { occurrences: schedule.occurrences },
|
|
4854
4862
|
content: eventContent(event.content),
|
|
@@ -5085,6 +5093,8 @@ function preferredRef(identifier, ref) {
|
|
|
5085
5093
|
}
|
|
5086
5094
|
function eventRunUpsertInput(command, eventIdentifier) {
|
|
5087
5095
|
const { input } = command;
|
|
5096
|
+
const waitlist = resolveEventSeriesWaitlistMapping(input.waitlist);
|
|
5097
|
+
if (waitlist.kind === "unsupported") throw new Error(waitlist.gap.message);
|
|
5088
5098
|
return {
|
|
5089
5099
|
identifier: input.slug,
|
|
5090
5100
|
eventRef: eventIdentifier,
|
|
@@ -5096,6 +5106,7 @@ function eventRunUpsertInput(command, eventIdentifier) {
|
|
|
5096
5106
|
status: input.status,
|
|
5097
5107
|
...input.bookingScope === "whole_series" ? {} : { visibility: managementVisibility(input.visibility) },
|
|
5098
5108
|
capacity: capacityLimit(input.capacity),
|
|
5109
|
+
...waitlist.waitlistMode === undefined ? {} : { waitlistMode: waitlist.waitlistMode },
|
|
5099
5110
|
bookingOffer: input.bookingOffer,
|
|
5100
5111
|
attendeeMigration: input.attendeeMigration,
|
|
5101
5112
|
venueRef: preferredRef(input.venueIdentifier, input.venueRef),
|
|
@@ -11049,6 +11060,13 @@ function formatValidationResult(pageIdentifier, blockIdentifier$1, blockKind, re
|
|
|
11049
11060
|
return lines;
|
|
11050
11061
|
}
|
|
11051
11062
|
|
|
11063
|
+
//#endregion
|
|
11064
|
+
//#region ../blocks/src/system/registryStore.ts
|
|
11065
|
+
const REGISTRY_SYMBOL$1 = Symbol.for("@riverbankcms/blocks/system/definitions");
|
|
11066
|
+
const isBlocksTestRuntime$1 = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.RIVERBANK_BLOCKS_TEST === "1";
|
|
11067
|
+
const globalScope$1 = globalThis;
|
|
11068
|
+
const blockStore = isBlocksTestRuntime$1 ? new Map() : globalScope$1[REGISTRY_SYMBOL$1] ??= new Map();
|
|
11069
|
+
|
|
11052
11070
|
//#endregion
|
|
11053
11071
|
//#region ../blocks/src/system/manifest/augmentManifest.ts
|
|
11054
11072
|
/**
|
|
@@ -11263,10 +11281,10 @@ function resolveBlockTitle(manifest, blockContent, blockKind) {
|
|
|
11263
11281
|
|
|
11264
11282
|
//#endregion
|
|
11265
11283
|
//#region ../blocks/src/system/manifest/registry.ts
|
|
11266
|
-
const REGISTRY_SYMBOL
|
|
11267
|
-
const isBlocksTestRuntime
|
|
11268
|
-
const globalScope
|
|
11269
|
-
const manifestStore = isBlocksTestRuntime
|
|
11284
|
+
const REGISTRY_SYMBOL = Symbol.for("@riverbankcms/blocks/manifest-registry");
|
|
11285
|
+
const isBlocksTestRuntime = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.RIVERBANK_BLOCKS_TEST === "1";
|
|
11286
|
+
const globalScope = globalThis;
|
|
11287
|
+
const manifestStore = isBlocksTestRuntime ? new Map() : globalScope[REGISTRY_SYMBOL] ??= new Map();
|
|
11270
11288
|
function registerManifest(manifest) {
|
|
11271
11289
|
manifestStore.set(manifest.name, manifest);
|
|
11272
11290
|
return manifest;
|
|
@@ -13796,13 +13814,14 @@ const FLOATING_BLUR = "blur(16px)";
|
|
|
13796
13814
|
* Similar to button system - generates theme-scoped CSS using [data-theme-scope] selector
|
|
13797
13815
|
*/
|
|
13798
13816
|
function generateHeaderCss(options) {
|
|
13799
|
-
const { themeId, theme, responsiveMode = DEFAULT_THEME_RESPONSIVE_MODE } = options;
|
|
13817
|
+
const { themeId, theme, responsiveMode = DEFAULT_THEME_RESPONSIVE_MODE, solvedInks = "withhold" } = options;
|
|
13800
13818
|
const tokens = new TokenResolver(theme);
|
|
13801
13819
|
const header = theme.header;
|
|
13802
13820
|
const cssChunks = [];
|
|
13803
13821
|
const headerContrastTreatment = resolveHeaderContrastTreatment(header);
|
|
13804
13822
|
const headerNavTextSize = resolveHeaderNavTextSize(header);
|
|
13805
|
-
cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
|
|
13823
|
+
cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, headerPaintInks(header, theme, solvedInks)));
|
|
13824
|
+
cssChunks.push(generateOpeningPhotoShade(header, themeId));
|
|
13806
13825
|
cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
|
|
13807
13826
|
cssChunks.push(generateHeaderLogoStyles({
|
|
13808
13827
|
logo: header.logo,
|
|
@@ -13816,20 +13835,26 @@ function generateHeaderCss(options) {
|
|
|
13816
13835
|
}));
|
|
13817
13836
|
cssChunks.push(generateLogoTextBehaviorStyles(header.logoText, themeId));
|
|
13818
13837
|
cssChunks.push(generateHeaderNavLinkStyles(header, themeId, tokens, theme, headerContrastTreatment, headerNavTextSize));
|
|
13819
|
-
|
|
13820
|
-
cssChunks.push(
|
|
13838
|
+
const dropdown = resolveDropdownSurface(header, theme, tokens, solvedInks);
|
|
13839
|
+
cssChunks.push(generateDropdownContainerStyles(themeId, tokens, dropdown));
|
|
13840
|
+
cssChunks.push(generateDropdownLinkStyles(header, themeId, tokens, theme, dropdown));
|
|
13821
13841
|
cssChunks.push(generateDropdownCaretStyles(themeId));
|
|
13822
13842
|
cssChunks.push(generateDropdownTriggerOverrides(header, themeId));
|
|
13823
|
-
cssChunks.push(generateMobilePanelStyles(
|
|
13843
|
+
cssChunks.push(generateMobilePanelStyles(themeId, dropdown));
|
|
13824
13844
|
if (header.variant === "floating" && header.container) {
|
|
13825
13845
|
cssChunks.push(generateFloatingContainerStyles(header, themeId, tokens, responsiveMode));
|
|
13826
13846
|
}
|
|
13827
|
-
cssChunks.push(generateNavContainerStyles(header, themeId, tokens));
|
|
13847
|
+
cssChunks.push(generateNavContainerStyles(header, themeId, tokens, theme, solvedInks));
|
|
13828
13848
|
cssChunks.push(generateHeaderCtaTreatmentStyles(header, themeId, tokens));
|
|
13829
13849
|
cssChunks.push(generateCtaGapStyles(header, themeId));
|
|
13830
13850
|
return cssChunks.filter(Boolean).join("\n\n");
|
|
13831
13851
|
}
|
|
13832
13852
|
const _testExports = { generateHeaderRootStyles };
|
|
13853
|
+
/** Scope shading to the actual opening under overlay chrome, including hidden-header pages. */
|
|
13854
|
+
function generateOpeningPhotoShade(header, themeId) {
|
|
13855
|
+
const shade = headerNeedsPhotoShade(header) ? "linear-gradient(to bottom, rgba(0,0,0,0.78) 0px, rgba(0,0,0,0.64) 110px, transparent 220px)" : "linear-gradient(transparent, transparent)";
|
|
13856
|
+
return `:where([data-theme-scope="${themeId}"]) [data-site-document-layout-mode="header-overlay"] :is([data-page-block-position="first"], [data-page-block-position="only"]) { --rb-opening-photo-shade: ${shade}; }`;
|
|
13857
|
+
}
|
|
13833
13858
|
function resolveHeaderContrastTreatment(header) {
|
|
13834
13859
|
if (header.navLinkStyle?.contrastTreatment) {
|
|
13835
13860
|
return header.navLinkStyle.contrastTreatment;
|
|
@@ -13852,7 +13877,7 @@ function isDetachedFloatingHeaderShape(header) {
|
|
|
13852
13877
|
/**
|
|
13853
13878
|
* Generate root header container styles
|
|
13854
13879
|
*/
|
|
13855
|
-
function generateHeaderRootStyles(header, themeId, tokens) {
|
|
13880
|
+
function generateHeaderRootStyles(header, themeId, tokens, inks) {
|
|
13856
13881
|
const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
|
|
13857
13882
|
const rules = [];
|
|
13858
13883
|
const isContainedNav = headerRootPaint(header) === "contained-nav";
|
|
@@ -13864,7 +13889,11 @@ function generateHeaderRootStyles(header, themeId, tokens) {
|
|
|
13864
13889
|
} : buildHeaderSurfaceRules(header, tokens);
|
|
13865
13890
|
const floatingSurfaceBorder = header.variant === "floating";
|
|
13866
13891
|
if (!floatingSurfaceBorder) rules.push(...surfaceRules.border);
|
|
13867
|
-
const basePaintRules = floatingSurfaceBorder ? [
|
|
13892
|
+
const basePaintRules = floatingSurfaceBorder ? [
|
|
13893
|
+
...surfaceRules.base,
|
|
13894
|
+
...surfaceRules.border,
|
|
13895
|
+
...inks
|
|
13896
|
+
] : [...surfaceRules.base, ...inks];
|
|
13868
13897
|
const scrolledPaintRules = floatingSurfaceBorder ? surfaceRules.border : [];
|
|
13869
13898
|
if (header.positioning === "sticky" || header.positioning === "fixed") {
|
|
13870
13899
|
const shadowElevation = header.shadow?.elevation ?? "none";
|
|
@@ -13923,14 +13952,13 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
|
|
|
13923
13952
|
/**
|
|
13924
13953
|
* Generate dropdown menu container styles
|
|
13925
13954
|
*/
|
|
13926
|
-
function generateDropdownContainerStyles(
|
|
13955
|
+
function generateDropdownContainerStyles(themeId, tokens, surface) {
|
|
13927
13956
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
|
|
13928
13957
|
const rules = [];
|
|
13929
|
-
const dropdownStyle =
|
|
13958
|
+
const dropdownStyle = surface.style;
|
|
13930
13959
|
rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
|
|
13931
|
-
|
|
13932
|
-
rules.push(
|
|
13933
|
-
rules.push(...surface.declarations(tokens));
|
|
13960
|
+
rules.push(`background-color: ${surface.backgroundColor};`);
|
|
13961
|
+
rules.push(...surface.foregroundDeclarations);
|
|
13934
13962
|
const borderToken = dropdownStyle?.borderColor;
|
|
13935
13963
|
if (borderToken === null) {
|
|
13936
13964
|
rules.push(`border: none;`);
|
|
@@ -13951,79 +13979,64 @@ function generateDropdownContainerStyles(header, themeId, tokens, theme) {
|
|
|
13951
13979
|
};
|
|
13952
13980
|
rules.push(`border-radius: ${radiusMap[borderRadius]};`);
|
|
13953
13981
|
rules.push(`padding: 0.5rem 0;`);
|
|
13954
|
-
return `\n${selector} {\n ${rules.join("\n ")}\n}\n
|
|
13955
|
-
}
|
|
13956
|
-
function
|
|
13957
|
-
const
|
|
13958
|
-
|
|
13959
|
-
|
|
13960
|
-
|
|
13961
|
-
|
|
13962
|
-
|
|
13963
|
-
|
|
13964
|
-
|
|
13965
|
-
|
|
13966
|
-
|
|
13967
|
-
|
|
13968
|
-
|
|
13969
|
-
|
|
13970
|
-
|
|
13971
|
-
|
|
13972
|
-
|
|
13973
|
-
}
|
|
13974
|
-
}]
|
|
13975
|
-
};
|
|
13976
|
-
if (configuredDropdownStyle?.hoverTextColor) {
|
|
13977
|
-
hoverEffects.hover?.push({
|
|
13978
|
-
effectId: "text-color-change",
|
|
13979
|
-
options: { hoverColorToken: configuredDropdownStyle.hoverTextColor }
|
|
13980
|
-
});
|
|
13981
|
-
hoverEffects.active?.push({
|
|
13982
|
-
effectId: "text-color-change",
|
|
13983
|
-
options: { hoverColorToken: configuredDropdownStyle.hoverTextColor }
|
|
13984
|
-
});
|
|
13985
|
-
}
|
|
13986
|
-
const dropdownLinkStyle = {
|
|
13982
|
+
return `\n${selector} {\n ${rules.join("\n ")}\n}\n` + generateDropdownFrosting(selector, surface);
|
|
13983
|
+
}
|
|
13984
|
+
function dropdownLinkEffects(style, textToken, opacity) {
|
|
13985
|
+
const background = style?.hoverBackground === undefined ? textToken : style.hoverBackground;
|
|
13986
|
+
return [...background === null ? [] : [{
|
|
13987
|
+
effectId: "background-on-hover-alpha",
|
|
13988
|
+
options: {
|
|
13989
|
+
colorToken: background,
|
|
13990
|
+
opacity
|
|
13991
|
+
}
|
|
13992
|
+
}], ...style?.hoverTextColor ? [{
|
|
13993
|
+
effectId: "text-color-change",
|
|
13994
|
+
options: { hoverColorToken: style.hoverTextColor }
|
|
13995
|
+
}] : []];
|
|
13996
|
+
}
|
|
13997
|
+
function dropdownNavLinkStyle(header, surface) {
|
|
13998
|
+
const style = surface.style;
|
|
13999
|
+
const textToken = surface.textToken;
|
|
14000
|
+
return {
|
|
13987
14001
|
name: "Dropdown",
|
|
13988
14002
|
typography: "body",
|
|
13989
|
-
fontWeight:
|
|
13990
|
-
textTransform:
|
|
14003
|
+
fontWeight: style?.fontWeight ?? header.navWeight ?? "medium",
|
|
14004
|
+
textTransform: style?.textTransform ?? "none",
|
|
13991
14005
|
italic: false,
|
|
13992
|
-
colorToken:
|
|
14006
|
+
colorToken: textToken,
|
|
13993
14007
|
padding: "compact",
|
|
13994
14008
|
borderRadius: "sm",
|
|
13995
|
-
effects:
|
|
14009
|
+
effects: {
|
|
14010
|
+
hover: dropdownLinkEffects(style, textToken, 12),
|
|
14011
|
+
active: dropdownLinkEffects(style, textToken, 18)
|
|
14012
|
+
}
|
|
13996
14013
|
};
|
|
14014
|
+
}
|
|
14015
|
+
function dropdownTypographyRules(style) {
|
|
14016
|
+
const letterSpacing = style?.letterSpacing ?? "normal";
|
|
14017
|
+
const spacing = {
|
|
14018
|
+
normal: "0em",
|
|
14019
|
+
wide: "0.05em",
|
|
14020
|
+
wider: "0.1em"
|
|
14021
|
+
};
|
|
14022
|
+
const sizes = {
|
|
14023
|
+
xs: "0.75rem",
|
|
14024
|
+
sm: "0.875rem",
|
|
14025
|
+
base: "1rem",
|
|
14026
|
+
lg: "1.125rem"
|
|
14027
|
+
};
|
|
14028
|
+
return [...letterSpacing === "normal" ? [] : [`letter-spacing: ${spacing[letterSpacing]};`], `font-size: ${sizes[style?.textSize ?? "sm"]};`];
|
|
14029
|
+
}
|
|
14030
|
+
function generateDropdownLinkStyles(header, themeId, tokens, theme, surface) {
|
|
13997
14031
|
const baseCSS = generateNavLinkCSS({
|
|
13998
14032
|
themeId,
|
|
13999
14033
|
tokens,
|
|
14000
14034
|
theme,
|
|
14001
|
-
style:
|
|
14035
|
+
style: dropdownNavLinkStyle(header, surface),
|
|
14002
14036
|
className: "nav-dropdown-link"
|
|
14003
14037
|
});
|
|
14004
|
-
const
|
|
14005
|
-
|
|
14006
|
-
if (letterSpacing !== "normal") {
|
|
14007
|
-
const letterSpacingMap = {
|
|
14008
|
-
normal: "0em",
|
|
14009
|
-
wide: "0.05em",
|
|
14010
|
-
wider: "0.1em"
|
|
14011
|
-
};
|
|
14012
|
-
additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
|
|
14013
|
-
}
|
|
14014
|
-
const textSize = configuredDropdownStyle?.textSize ?? "sm";
|
|
14015
|
-
const textSizeMap = {
|
|
14016
|
-
xs: "0.75rem",
|
|
14017
|
-
sm: "0.875rem",
|
|
14018
|
-
base: "1rem",
|
|
14019
|
-
lg: "1.125rem"
|
|
14020
|
-
};
|
|
14021
|
-
additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
|
|
14022
|
-
if (additionalRules.length > 0) {
|
|
14023
|
-
const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
|
|
14024
|
-
return baseCSS + `\n${selector} {\n ${additionalRules.join("\n ")}\n}\n`;
|
|
14025
|
-
}
|
|
14026
|
-
return baseCSS;
|
|
14038
|
+
const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
|
|
14039
|
+
return baseCSS + `\n${selector} {\n ${dropdownTypographyRules(surface.style).join("\n ")}\n}\n`;
|
|
14027
14040
|
}
|
|
14028
14041
|
function generateDropdownCaretStyles(themeId) {
|
|
14029
14042
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-caret`;
|
|
@@ -14054,43 +14067,72 @@ ${selector} {
|
|
|
14054
14067
|
}
|
|
14055
14068
|
`.trim();
|
|
14056
14069
|
}
|
|
14057
|
-
/**
|
|
14058
|
-
|
|
14059
|
-
|
|
14060
|
-
|
|
14061
|
-
|
|
14062
|
-
|
|
14063
|
-
|
|
14064
|
-
|
|
14065
|
-
|
|
14066
|
-
|
|
14070
|
+
/** Reuse the header's decided opening tone; unknown openings retain opaque paint. */
|
|
14071
|
+
function contextualDropdownStyle(header) {
|
|
14072
|
+
const style = header.dropdownStyle;
|
|
14073
|
+
const treatment = style?.surfaceTreatment;
|
|
14074
|
+
if (!style || treatment?.kind !== "frosted" || treatment.tone !== "opening") return style;
|
|
14075
|
+
const tone = readOpeningToneProjection(header);
|
|
14076
|
+
if (!tone) return {
|
|
14077
|
+
...style,
|
|
14078
|
+
surfaceTreatment: { kind: "solid" }
|
|
14079
|
+
};
|
|
14080
|
+
const textColor = tone === "dark" ? "neutral-50" : "neutral-950";
|
|
14081
|
+
return {
|
|
14082
|
+
...style,
|
|
14083
|
+
background: tone === "dark" ? "neutral-950" : "neutral-50",
|
|
14084
|
+
textColor,
|
|
14085
|
+
hoverBackground: textColor,
|
|
14086
|
+
borderColor: null
|
|
14087
|
+
};
|
|
14088
|
+
}
|
|
14089
|
+
/** Menu text wins; only an absent preference falls back to the header's ink. */
|
|
14090
|
+
function dropdownTextCandidate(style, header) {
|
|
14091
|
+
return style?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
|
|
14092
|
+
}
|
|
14093
|
+
function resolveDropdownSurface(header, theme, tokens, solvedInks) {
|
|
14094
|
+
const style = contextualDropdownStyle(header);
|
|
14095
|
+
const backgroundToken = style?.background ?? "surface";
|
|
14096
|
+
const candidate = dropdownTextCandidate(style, header);
|
|
14067
14097
|
const foreground = resolveSurfaceForeground({
|
|
14068
14098
|
type: "color",
|
|
14069
14099
|
color: backgroundToken,
|
|
14070
14100
|
textColor: candidate
|
|
14071
14101
|
}, expandPalette(theme.palette));
|
|
14072
14102
|
return {
|
|
14073
|
-
backgroundToken,
|
|
14103
|
+
backgroundColor: tokens.getColor(backgroundToken),
|
|
14074
14104
|
textToken: foreground.kind === "known" ? foreground.roles.text : candidate,
|
|
14075
|
-
|
|
14105
|
+
foregroundDeclarations: [...foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(candidate)};`], ...surfaceInkDeclarations(surfaceInkPublication(foreground, solvedInks))],
|
|
14106
|
+
treatment: style?.surfaceTreatment,
|
|
14107
|
+
style
|
|
14076
14108
|
};
|
|
14077
14109
|
}
|
|
14078
|
-
/**
|
|
14079
|
-
|
|
14080
|
-
|
|
14081
|
-
|
|
14082
|
-
|
|
14110
|
+
/** Solid paint is the fallback. Blur is enhancement, never the readability mechanism. */
|
|
14111
|
+
function generateDropdownFrosting(selector, surface) {
|
|
14112
|
+
if (surface.treatment?.kind !== "frosted") return "";
|
|
14113
|
+
const blur = surface.treatment.blur === "sm" ? "8px" : "12px";
|
|
14114
|
+
return `
|
|
14115
|
+
@supports (background-color: color-mix(in srgb, white, transparent)) and ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
|
|
14116
|
+
${selector} {
|
|
14117
|
+
background-color: color-mix(in srgb, ${surface.backgroundColor} ${surface.treatment.opacity * 100}%, transparent);
|
|
14118
|
+
backdrop-filter: blur(${blur});
|
|
14119
|
+
-webkit-backdrop-filter: blur(${blur});
|
|
14120
|
+
${surface.treatment.opacity < 1 ? surfaceInkDeclarations({ kind: "reset" }).join("\n ") : ""}
|
|
14121
|
+
}
|
|
14122
|
+
}
|
|
14123
|
+
`;
|
|
14124
|
+
}
|
|
14125
|
+
/** Mobile shares the resolved opaque surface, never desktop translucency. */
|
|
14126
|
+
function generateMobilePanelStyles(themeId, surface) {
|
|
14083
14127
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-mobile-panel`;
|
|
14084
14128
|
const selfSelector = `:where(.nav-mobile-panel[data-theme-scope="${themeId}"])`;
|
|
14085
|
-
const
|
|
14086
|
-
const rules = [`background-color: ${tokens.getColor(surface.backgroundToken)};`, ...surface.declarations(tokens)];
|
|
14087
|
-
const body = renderCssDeclarations(rules);
|
|
14129
|
+
const body = renderCssDeclarations([`background-color: ${surface.backgroundColor};`, ...surface.foregroundDeclarations]);
|
|
14088
14130
|
return `\n${selector} {\n ${body}\n}\n\n${selfSelector} {\n ${body}\n}\n`;
|
|
14089
14131
|
}
|
|
14090
14132
|
/**
|
|
14091
14133
|
* Generate nav container styles (pill/glass)
|
|
14092
14134
|
*/
|
|
14093
|
-
function generateNavContainerStyles(header, themeId, tokens) {
|
|
14135
|
+
function generateNavContainerStyles(header, themeId, tokens, theme, solvedInks) {
|
|
14094
14136
|
const navContainer = header.navContainer;
|
|
14095
14137
|
const navContainerType = navContainer?.type ?? "none";
|
|
14096
14138
|
if (!navContainer || navContainerType === "none") return "";
|
|
@@ -14106,27 +14148,31 @@ function generateNavContainerStyles(header, themeId, tokens) {
|
|
|
14106
14148
|
rules.push("align-self: flex-start;");
|
|
14107
14149
|
}
|
|
14108
14150
|
}
|
|
14109
|
-
|
|
14110
|
-
|
|
14111
|
-
|
|
14112
|
-
|
|
14113
|
-
|
|
14114
|
-
|
|
14115
|
-
|
|
14116
|
-
|
|
14117
|
-
|
|
14118
|
-
|
|
14119
|
-
|
|
14120
|
-
|
|
14121
|
-
|
|
14122
|
-
|
|
14123
|
-
|
|
14124
|
-
|
|
14125
|
-
}
|
|
14126
|
-
if (rules.length > 0) {
|
|
14127
|
-
return `${selector} { ${rules.join(" ")} }`;
|
|
14151
|
+
rules.push(...navContainerSurfaceRules(header, navContainer, tokens, theme, solvedInks));
|
|
14152
|
+
return `${selector} { ${rules.join(" ")} }`;
|
|
14153
|
+
}
|
|
14154
|
+
/** Paint and publication are decided together, so translucent containers cannot borrow solid inks. */
|
|
14155
|
+
function navContainerSurfaceRules(header, container, tokens, theme, policy) {
|
|
14156
|
+
if (container.type === "glass") {
|
|
14157
|
+
const opacity$1 = resolveFloatingGlassOpacity(header, container.opacity, .15);
|
|
14158
|
+
const background$1 = container.tint ? buildTint(tokens.getColor(container.tint), opacity$1) : buildRgbWhite(opacity$1);
|
|
14159
|
+
return [
|
|
14160
|
+
`background-color: ${background$1};`,
|
|
14161
|
+
`backdrop-filter: ${HEADER_BLUR};`,
|
|
14162
|
+
`-webkit-backdrop-filter: ${HEADER_BLUR};`,
|
|
14163
|
+
"border: 1px solid rgba(255, 255, 255, 0.2);",
|
|
14164
|
+
"box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);",
|
|
14165
|
+
...surfaceInkDeclarations({ kind: "reset" })
|
|
14166
|
+
];
|
|
14128
14167
|
}
|
|
14129
|
-
|
|
14168
|
+
const opacity = clampOpacity(container.opacity, .15);
|
|
14169
|
+
const background = container.tint ? buildTint(tokens.getColor(container.tint), opacity) : tokens.getColor("surface");
|
|
14170
|
+
const solid = container.tint ? opacity === 1 ? container.tint : null : "surface";
|
|
14171
|
+
return [
|
|
14172
|
+
`background-color: ${background};`,
|
|
14173
|
+
`border: 1px solid ${tokens.getColor("border")};`,
|
|
14174
|
+
...headerContainerInks(solid, theme, policy)
|
|
14175
|
+
];
|
|
14130
14176
|
}
|
|
14131
14177
|
/**
|
|
14132
14178
|
* Generate floating container styles
|
|
@@ -14144,6 +14190,7 @@ function generateFloatingContainerStyles(header, themeId, tokens, responsiveMode
|
|
|
14144
14190
|
}
|
|
14145
14191
|
rules.push(`backdrop-filter: ${FLOATING_BLUR};`);
|
|
14146
14192
|
rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
|
|
14193
|
+
rules.push(...surfaceInkDeclarations({ kind: "reset" }));
|
|
14147
14194
|
if (container.border) {
|
|
14148
14195
|
rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
|
|
14149
14196
|
}
|
|
@@ -14270,6 +14317,21 @@ function applyAlpha(color, opacity) {
|
|
|
14270
14317
|
}
|
|
14271
14318
|
return color;
|
|
14272
14319
|
}
|
|
14320
|
+
/** Container glass is deliberately unmeasured; an opaque pill owns its solid paint. */
|
|
14321
|
+
function headerContainerInks(color, theme, policy) {
|
|
14322
|
+
if (color === null) return surfaceInkDeclarations({ kind: "reset" });
|
|
14323
|
+
const foreground = resolveSurfaceForeground({
|
|
14324
|
+
type: "color",
|
|
14325
|
+
color
|
|
14326
|
+
}, expandPalette(theme.palette));
|
|
14327
|
+
return surfaceInkDeclarations(surfaceInkPublication(foreground, policy));
|
|
14328
|
+
}
|
|
14329
|
+
/** Floating mobile bars paint the header background even when the root overlays the page. */
|
|
14330
|
+
function headerPaintInks(header, theme, policy) {
|
|
14331
|
+
if (headerRootPaint(header) === "contained-nav") return [];
|
|
14332
|
+
const foreground = resolveSurfaceForeground(header.background, expandPalette(theme.palette));
|
|
14333
|
+
return surfaceInkDeclarations(surfaceInkPublication(foreground, policy));
|
|
14334
|
+
}
|
|
14273
14335
|
|
|
14274
14336
|
//#endregion
|
|
14275
14337
|
//#region ../blocks/src/system/transforms/registry/_utils/themeColorResolution.ts
|
|
@@ -14281,7 +14343,7 @@ function resolveBackgroundColorValue(value, context) {
|
|
|
14281
14343
|
//#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
|
|
14282
14344
|
const sectionSurfaceCache = new WeakMap();
|
|
14283
14345
|
function resolveHeaderRootForeground(header, palette, isTransparent) {
|
|
14284
|
-
if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "
|
|
14346
|
+
if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "inherits" };
|
|
14285
14347
|
const background = header?.background;
|
|
14286
14348
|
return resolveSurfaceForeground(background ?? {
|
|
14287
14349
|
type: "color",
|
|
@@ -14297,12 +14359,32 @@ function resolveFooterRootForeground(footer, palette, proseHoverCandidate) {
|
|
|
14297
14359
|
function resolveSurfaceForegroundStyles(value, context, options) {
|
|
14298
14360
|
const resolved = cachedSectionSurface(value, context, options);
|
|
14299
14361
|
const foreground = resolved.foreground;
|
|
14300
|
-
|
|
14301
|
-
|
|
14302
|
-
|
|
14303
|
-
|
|
14304
|
-
|
|
14305
|
-
|
|
14362
|
+
const inks = surfaceInkStyle(resolved.inks);
|
|
14363
|
+
switch (foreground.kind) {
|
|
14364
|
+
case "inherits":
|
|
14365
|
+
case "unmeasured-paint": return {
|
|
14366
|
+
...resolved.buttonStyles,
|
|
14367
|
+
...inks
|
|
14368
|
+
};
|
|
14369
|
+
case "known": return {
|
|
14370
|
+
...arrangementSurfaceInk(foreground, context),
|
|
14371
|
+
...resolved.buttonStyles,
|
|
14372
|
+
...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context))),
|
|
14373
|
+
...inks
|
|
14374
|
+
};
|
|
14375
|
+
}
|
|
14376
|
+
}
|
|
14377
|
+
/**
|
|
14378
|
+
* The render's ink policy, set by the runtime its theme tokens came from. A
|
|
14379
|
+
* render that can't vouch for its runtime withholds, so its owned surfaces
|
|
14380
|
+
* reset the inks rather than publish ones solved for tokens that may differ.
|
|
14381
|
+
*/
|
|
14382
|
+
function transformSolvedInks(context) {
|
|
14383
|
+
return context.theme.solvedInks ?? "withhold";
|
|
14384
|
+
}
|
|
14385
|
+
/** Chrome roots publish the same ink decision as sections. */
|
|
14386
|
+
function solvedInkStyle(foreground, context) {
|
|
14387
|
+
return surfaceInkStyle(surfaceInkPublication(foreground, transformSolvedInks(context)));
|
|
14306
14388
|
}
|
|
14307
14389
|
/** The section ground's resolved foreground, for decorations drawn on that ground (maps). */
|
|
14308
14390
|
function resolveSectionSurfaceForeground(value, context, options) {
|
|
@@ -14334,7 +14416,8 @@ function resolveRuntimeSectionSurface(value, context, options) {
|
|
|
14334
14416
|
palette: context.theme.palette,
|
|
14335
14417
|
buttonSystem: context.theme.buttons,
|
|
14336
14418
|
linkHoverToken: context.proseHoverCandidate,
|
|
14337
|
-
compositeBase: options?.fallbackToken
|
|
14419
|
+
compositeBase: options?.fallbackToken,
|
|
14420
|
+
solvedInks: transformSolvedInks(context)
|
|
14338
14421
|
});
|
|
14339
14422
|
}
|
|
14340
14423
|
function arrangementSurfaceInk(foreground, context) {
|
|
@@ -14343,7 +14426,7 @@ function arrangementSurfaceInk(foreground, context) {
|
|
|
14343
14426
|
}
|
|
14344
14427
|
/** Decoration roles already resolved by the surface owner, shared with footer arrangements. */
|
|
14345
14428
|
function surfaceInkStyles(foreground, palette) {
|
|
14346
|
-
if (foreground.kind
|
|
14429
|
+
if (foreground.kind !== "known") return {};
|
|
14347
14430
|
const decorations$1 = surfaceDecorationColors(foreground, palette);
|
|
14348
14431
|
return {
|
|
14349
14432
|
"--rb-surface-muted-color": foreground.roles.muted ?? foreground.roles.text,
|
|
@@ -18326,6 +18409,7 @@ const newsletterFormFragment = defineFragment({
|
|
|
18326
18409
|
}
|
|
18327
18410
|
],
|
|
18328
18411
|
layout: [el("newsletter-form", withApiBindings({
|
|
18412
|
+
interactionContext: { $bind: { from: "$root.interactionContext" } },
|
|
18329
18413
|
lookSlots: { $bind: { from: "content._lookSlots" } },
|
|
18330
18414
|
source: { $bind: {
|
|
18331
18415
|
from: "mailingListSource",
|
|
@@ -19873,7 +19957,8 @@ function readinessStage(surface) {
|
|
|
19873
19957
|
//#region ../blocks/src/system/blocks/readiness.ts
|
|
19874
19958
|
const newsletterReadiness = {
|
|
19875
19959
|
needs: ["mailingList"],
|
|
19876
|
-
assess: (content, facts) => {
|
|
19960
|
+
assess: (content, facts, interaction) => {
|
|
19961
|
+
if (interaction?.kind === "demo") return ready;
|
|
19877
19962
|
if (facts.mailingList.kind === "Unavailable") return unknownReadiness;
|
|
19878
19963
|
const targeting = parseMailingListPlacementTargeting(content.targeting ?? { mode: "default" });
|
|
19879
19964
|
if (!targeting.ok) return unknownReadiness;
|
|
@@ -21842,8 +21927,11 @@ function resolveHeaderVisualStyles(header) {
|
|
|
21842
21927
|
return visuals;
|
|
21843
21928
|
}
|
|
21844
21929
|
function resolvedForegroundStyle(foreground) {
|
|
21845
|
-
|
|
21846
|
-
|
|
21930
|
+
switch (foreground.kind) {
|
|
21931
|
+
case "inherits":
|
|
21932
|
+
case "unmeasured-paint": return undefined;
|
|
21933
|
+
case "known": return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
|
|
21934
|
+
}
|
|
21847
21935
|
}
|
|
21848
21936
|
function footerBottomBarBorderWidthStyle(width) {
|
|
21849
21937
|
if (!width) return undefined;
|
|
@@ -21929,7 +22017,7 @@ const headerRootStyleTransform = {
|
|
|
21929
22017
|
const foreground = resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent);
|
|
21930
22018
|
const foregroundStyle = resolvedForegroundStyle(foreground) ?? (visuals.isTransparent ? surfaceForegroundStyle(transparentHeaderForegroundInput(header, context.theme.palette)) : { color: rgbColorValue(headerLeafTextColor(header)) });
|
|
21931
22019
|
const borderColorToken = header?.border?.colorToken ?? "border";
|
|
21932
|
-
return mergeStyles(foregroundStyle, borderColorStyle(borderColorToken));
|
|
22020
|
+
return mergeStyles(foregroundStyle, solvedInkStyle(foreground, context), borderColorStyle(borderColorToken));
|
|
21933
22021
|
}
|
|
21934
22022
|
};
|
|
21935
22023
|
const headerSectionBackgroundTransform = {
|
|
@@ -21958,9 +22046,10 @@ const footerRootStyleTransform = {
|
|
|
21958
22046
|
styleParts.push(backgroundColorStyle(token));
|
|
21959
22047
|
}
|
|
21960
22048
|
}
|
|
21961
|
-
|
|
22049
|
+
const foreground = resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate);
|
|
22050
|
+
styleParts.push(resolvedForegroundStyle(foreground), solvedInkStyle(foreground, context));
|
|
21962
22051
|
if (footer?.variant === "centred") {
|
|
21963
|
-
styleParts.push(surfaceInkStyles(
|
|
22052
|
+
styleParts.push(surfaceInkStyles(foreground, context.theme.palette));
|
|
21964
22053
|
}
|
|
21965
22054
|
styleParts.push(borderColorStyle("border"));
|
|
21966
22055
|
return mergeStyles(...styleParts);
|
|
@@ -22026,21 +22115,27 @@ const footerBottomBarStyleTransform = {
|
|
|
22026
22115
|
run: (value, _options, context) => {
|
|
22027
22116
|
const footer = asPartialObject(value);
|
|
22028
22117
|
const bottomBar = footer?.bottomBar;
|
|
22029
|
-
return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : undefined, footerBottomBarBorderColorStyle(footer), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette));
|
|
22118
|
+
return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : undefined, footerBottomBarBorderColorStyle(footer), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette), footerBottomBarInkStyle(footer, context));
|
|
22030
22119
|
}
|
|
22031
22120
|
};
|
|
22032
22121
|
function footerBottomBarForegroundStyle(footer, palette) {
|
|
22033
22122
|
if (!footer?.bottomBar) return undefined;
|
|
22123
|
+
const foreground = footerBottomBarSurfaceForeground(footer, palette);
|
|
22124
|
+
return foreground === null ? backgroundlessBottomBarForegroundStyle(footer) : resolvedForegroundStyle(foreground);
|
|
22125
|
+
}
|
|
22126
|
+
/** A bar without its own colour paints nothing, so the footer's inks carry on. */
|
|
22127
|
+
function footerBottomBarInkStyle(footer, context) {
|
|
22128
|
+
const foreground = footer ? footerBottomBarSurfaceForeground(footer, context.theme.palette) : null;
|
|
22129
|
+
return foreground === null ? undefined : solvedInkStyle(foreground, context);
|
|
22130
|
+
}
|
|
22131
|
+
function footerBottomBarSurfaceForeground(footer, palette) {
|
|
22034
22132
|
const bar = footer.bottomBar;
|
|
22035
|
-
if (bar
|
|
22036
|
-
|
|
22037
|
-
}
|
|
22038
|
-
const foreground = resolveSurfaceForeground(bar.background, palette, {
|
|
22133
|
+
if (bar?.background?.type !== "color") return null;
|
|
22134
|
+
return resolveSurfaceForeground(bar.background, palette, {
|
|
22039
22135
|
text: bar.textColor,
|
|
22040
22136
|
link: footer.bottomTextLinkStyle?.colorToken ?? bar.textColor,
|
|
22041
22137
|
linkHover: footer.bottomTextLinkStyle?.hoverColorToken
|
|
22042
22138
|
}, { compositeBase: measuredFooterBackdrop(footer, palette) });
|
|
22043
|
-
return resolvedForegroundStyle(foreground);
|
|
22044
22139
|
}
|
|
22045
22140
|
function backgroundlessBottomBarForegroundStyle(footer) {
|
|
22046
22141
|
if (footer.background?.contentOwner === siteChromeBackgroundOverrideOwner) {
|
|
@@ -30668,7 +30763,7 @@ function MembershipHero({ membershipName, classPrefix, onBookForSomeoneElse }) {
|
|
|
30668
30763
|
* LICENSE file in the root directory of this source tree.
|
|
30669
30764
|
*/
|
|
30670
30765
|
var require_react_dom_production = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
30671
|
-
var React$
|
|
30766
|
+
var React$82 = require_react();
|
|
30672
30767
|
function formatProdErrorMessage(code) {
|
|
30673
30768
|
var url = "https://react.dev/errors/" + code;
|
|
30674
30769
|
if (1 < arguments.length) {
|
|
@@ -30705,7 +30800,7 @@ var require_react_dom_production = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
30705
30800
|
implementation
|
|
30706
30801
|
};
|
|
30707
30802
|
}
|
|
30708
|
-
var ReactSharedInternals = React$
|
|
30803
|
+
var ReactSharedInternals = React$82.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
|
30709
30804
|
function getCrossOriginStringAs(as, input) {
|
|
30710
30805
|
if ("font" === as) return "";
|
|
30711
30806
|
if ("string" === typeof input) return "use-credentials" === input ? input : "";
|
|
@@ -30848,7 +30943,7 @@ var require_react_dom_development = /* @__PURE__ */ __commonJSMin(((exports) =>
|
|
|
30848
30943
|
return dispatcher;
|
|
30849
30944
|
}
|
|
30850
30945
|
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
|
|
30851
|
-
var React$
|
|
30946
|
+
var React$91 = require_react(), Internals$1 = {
|
|
30852
30947
|
d: {
|
|
30853
30948
|
f: noop$2,
|
|
30854
30949
|
r: function() {
|
|
@@ -30864,7 +30959,7 @@ var require_react_dom_development = /* @__PURE__ */ __commonJSMin(((exports) =>
|
|
|
30864
30959
|
},
|
|
30865
30960
|
p: 0,
|
|
30866
30961
|
findDOMNode: null
|
|
30867
|
-
}, REACT_PORTAL_TYPE$1 = Symbol.for("react.portal"), ReactSharedInternals$1 = React$
|
|
30962
|
+
}, REACT_PORTAL_TYPE$1 = Symbol.for("react.portal"), ReactSharedInternals$1 = React$91.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
|
30868
30963
|
"function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error("React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");
|
|
30869
30964
|
exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals$1;
|
|
30870
30965
|
exports.createPortal = function(children, container) {
|
|
@@ -36126,37 +36221,6 @@ function buildTransferredAttendeeConfirmationEmailPaymentSummary(options) {
|
|
|
36126
36221
|
}
|
|
36127
36222
|
return assertNever$7(options.paymentMethod);
|
|
36128
36223
|
}
|
|
36129
|
-
function toConfirmationEmailTemplatePaymentFields(summary) {
|
|
36130
|
-
if (!summary) {
|
|
36131
|
-
return {};
|
|
36132
|
-
}
|
|
36133
|
-
switch (summary.kind) {
|
|
36134
|
-
case "free": return { paymentMethod: "free" };
|
|
36135
|
-
case "manual_due": return { paymentMethod: "manual" };
|
|
36136
|
-
case "managed_balance_due": return {
|
|
36137
|
-
paymentMethod: "manual",
|
|
36138
|
-
managedBalanceDueAt: summary.dueAt
|
|
36139
|
-
};
|
|
36140
|
-
case "waived": return { paymentMethod: "waived" };
|
|
36141
|
-
case "pass": return {
|
|
36142
|
-
paymentMethod: "pass",
|
|
36143
|
-
passName: summary.passName,
|
|
36144
|
-
passCreditsUsed: summary.passCreditsUsed
|
|
36145
|
-
};
|
|
36146
|
-
case "membership": return {
|
|
36147
|
-
paymentMethod: "membership",
|
|
36148
|
-
membershipName: summary.membershipName
|
|
36149
|
-
};
|
|
36150
|
-
case "monetary": return {
|
|
36151
|
-
paymentMethod: "stripe",
|
|
36152
|
-
amountPaid: summary.amountPaidCents,
|
|
36153
|
-
amountOutstanding: summary.amountOutstandingCents,
|
|
36154
|
-
currency: summary.currency,
|
|
36155
|
-
managedBalanceDueAt: summary.dueAt
|
|
36156
|
-
};
|
|
36157
|
-
}
|
|
36158
|
-
return assertNever$7(summary);
|
|
36159
|
-
}
|
|
36160
36224
|
|
|
36161
36225
|
//#endregion
|
|
36162
36226
|
//#region ../commerce/src/purchase/discountApplication.ts
|
|
@@ -36604,6 +36668,7 @@ function buildOrderConfirmationContent(input) {
|
|
|
36604
36668
|
})) } : null
|
|
36605
36669
|
};
|
|
36606
36670
|
const templateVars = {
|
|
36671
|
+
customer_first_name: firstWordOf(customerDisplayName),
|
|
36607
36672
|
customer_name: customerDisplayName,
|
|
36608
36673
|
site_name: input.siteTitle ?? "Your Business",
|
|
36609
36674
|
order_subject: confirmationCopy.subject,
|
|
@@ -36635,6 +36700,10 @@ function buildOrderConfirmationContent(input) {
|
|
|
36635
36700
|
}
|
|
36636
36701
|
};
|
|
36637
36702
|
}
|
|
36703
|
+
/** The first word of their name (or their email, when that's all there is), for the headline. */
|
|
36704
|
+
function firstWordOf(displayName) {
|
|
36705
|
+
return displayName.trim().split(/\s+/)[0] || displayName;
|
|
36706
|
+
}
|
|
36638
36707
|
function resolveConfirmationCopy(variant, orderNumber) {
|
|
36639
36708
|
switch (variant.kind) {
|
|
36640
36709
|
case "pass_only": {
|
|
@@ -38613,11 +38682,6 @@ const eventRegistrationErrors = {
|
|
|
38613
38682
|
message: "The payment options for this event have changed. Please check the latest options before continuing.",
|
|
38614
38683
|
action: "payment-options"
|
|
38615
38684
|
},
|
|
38616
|
-
verificationFailed: {
|
|
38617
|
-
endsCommand: false,
|
|
38618
|
-
message: "We couldn’t confirm this request came from a person. Please refresh the page and try again.",
|
|
38619
|
-
action: "none"
|
|
38620
|
-
},
|
|
38621
38685
|
idempotencyConflict: {
|
|
38622
38686
|
endsCommand: false,
|
|
38623
38687
|
message: "You’ve already started booking this event. Please finish in the other tab if it’s still open, or check your booking status before starting again.",
|
|
@@ -39264,8 +39328,11 @@ function getStepLabel(step) {
|
|
|
39264
39328
|
function visitorHoldsOwnPlace(input) {
|
|
39265
39329
|
return input.hasWaitlistClaim || input.retryingHeldPlace;
|
|
39266
39330
|
}
|
|
39267
|
-
|
|
39268
|
-
|
|
39331
|
+
/** A first quote needs a selection, including when all published tickets are full.
|
|
39332
|
+
* Cached capacity permits requesting waitlist places; fresh admission still owns continuation. */
|
|
39333
|
+
function getTicketSelectionPurpose(input) {
|
|
39334
|
+
if (input.admission.kind === "waitlist") return "waitlist";
|
|
39335
|
+
return input.admission.kind === "checking" && input.event && canJoinEventWaitlist(input.event, { attendanceMode: input.attendanceMode }) ? "waitlist" : "book";
|
|
39269
39336
|
}
|
|
39270
39337
|
function resolveRegistrationAdmission(input) {
|
|
39271
39338
|
if (input.holdsOwnPlace) return { kind: "resume" };
|
|
@@ -41378,7 +41445,6 @@ const eventRegistrationCommonSchemaShape = {
|
|
|
41378
41445
|
successMessage: z.string().optional(),
|
|
41379
41446
|
buttonVariant: registrationButtonVariantSchema.optional(),
|
|
41380
41447
|
host: bookingHostSchema.optional(),
|
|
41381
|
-
spamProtectionEnabled: z.boolean().optional(),
|
|
41382
41448
|
supportEmail: z.string().optional(),
|
|
41383
41449
|
sitePasses: publicPassProductCollectionSchema.nullable().optional(),
|
|
41384
41450
|
siteMemberships: publicMembershipProductCollectionSchema.nullable().optional(),
|
|
@@ -41578,7 +41644,6 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
41578
41644
|
successMessage: source.successMessage,
|
|
41579
41645
|
buttonVariant: source.buttonVariant,
|
|
41580
41646
|
host: source.host ?? "overlay",
|
|
41581
|
-
spamProtectionEnabled: source.spamProtectionEnabled,
|
|
41582
41647
|
supportEmail: source.supportEmail,
|
|
41583
41648
|
sitePasses: source.sitePasses ?? null,
|
|
41584
41649
|
siteMemberships: source.siteMemberships ?? null,
|
|
@@ -44352,17 +44417,7 @@ function resolveCardListSchedule(item, mode) {
|
|
|
44352
44417
|
}
|
|
44353
44418
|
/** Each part owns optional-content collapse once, for calendar and catalogue items. */
|
|
44354
44419
|
const partRenderers = {
|
|
44355
|
-
title:
|
|
44356
|
-
...listLookSlot(presentation, "item-title"),
|
|
44357
|
-
children: item.titleLink || item.href ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
44358
|
-
...item.titleLink,
|
|
44359
|
-
href: item.titleLink?.href ?? item.href ?? undefined,
|
|
44360
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LinkedLabel, {
|
|
44361
|
-
label: item.title,
|
|
44362
|
-
newTabHint: item.newTabHint
|
|
44363
|
-
})
|
|
44364
|
-
}) : item.title
|
|
44365
|
-
}),
|
|
44420
|
+
title: CardListTitle,
|
|
44366
44421
|
text: ({ item, presentation }) => item.textDocument ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RichText, {
|
|
44367
44422
|
doc: item.textDocument,
|
|
44368
44423
|
...listLookSlot(presentation, "item-text"),
|
|
@@ -44371,14 +44426,7 @@ const partRenderers = {
|
|
|
44371
44426
|
...listLookSlot(presentation, "item-text"),
|
|
44372
44427
|
children: item.text
|
|
44373
44428
|
}) : null,
|
|
44374
|
-
media:
|
|
44375
|
-
...listLookSlot(presentation, "item-media"),
|
|
44376
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MediaNodeServer, {
|
|
44377
|
-
value: item.media,
|
|
44378
|
-
size: ImagePresets.card,
|
|
44379
|
-
...listLookSlot(presentation, "photo")
|
|
44380
|
-
})
|
|
44381
|
-
}) : null,
|
|
44429
|
+
media: CardListMedia,
|
|
44382
44430
|
facts: ({ item, presentation }) => item.facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", {
|
|
44383
44431
|
...listLookSlot(presentation, "facts"),
|
|
44384
44432
|
children: item.facts.map(({ label, value }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
@@ -44466,6 +44514,41 @@ const partRenderers = {
|
|
|
44466
44514
|
children: props$1.actionNode
|
|
44467
44515
|
})
|
|
44468
44516
|
};
|
|
44517
|
+
/** Title and photo share the same destination and external-link behavior. */
|
|
44518
|
+
function cardListItemLink(item) {
|
|
44519
|
+
return item.titleLink ?? (item.href ? { href: item.href } : null);
|
|
44520
|
+
}
|
|
44521
|
+
function CardListTitle({ item, presentation, Title = "h3" }) {
|
|
44522
|
+
const link$2 = cardListItemLink(item);
|
|
44523
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Title, {
|
|
44524
|
+
...listLookSlot(presentation, "item-title"),
|
|
44525
|
+
children: link$2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
44526
|
+
...link$2,
|
|
44527
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LinkedLabel, {
|
|
44528
|
+
label: item.title,
|
|
44529
|
+
newTabHint: item.newTabHint
|
|
44530
|
+
})
|
|
44531
|
+
}) : item.title
|
|
44532
|
+
});
|
|
44533
|
+
}
|
|
44534
|
+
function CardListMedia({ item, presentation }) {
|
|
44535
|
+
if (!item.media) return null;
|
|
44536
|
+
const link$2 = cardListItemLink(item);
|
|
44537
|
+
const photo = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MediaNodeServer, {
|
|
44538
|
+
value: item.media,
|
|
44539
|
+
size: ImagePresets.card,
|
|
44540
|
+
...listLookSlot(presentation, "photo")
|
|
44541
|
+
});
|
|
44542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
44543
|
+
...listLookSlot(presentation, "item-media"),
|
|
44544
|
+
children: link$2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
44545
|
+
...link$2,
|
|
44546
|
+
className: "rb-block rb-h-full",
|
|
44547
|
+
"aria-label": `${item.title}${item.newTabHint ? " (opens in a new tab)" : ""}`,
|
|
44548
|
+
children: photo
|
|
44549
|
+
}) : photo
|
|
44550
|
+
});
|
|
44551
|
+
}
|
|
44469
44552
|
function CardListContentPart({ part, ...props$1 }) {
|
|
44470
44553
|
return partRenderers[part](props$1);
|
|
44471
44554
|
}
|
|
@@ -44546,6 +44629,56 @@ function LinkedLabel({ label, newTabHint }) {
|
|
|
44546
44629
|
})] });
|
|
44547
44630
|
}
|
|
44548
44631
|
|
|
44632
|
+
//#endregion
|
|
44633
|
+
//#region ../blocks/src/system/runtime/nodes/events/shared/EventCardIcons.tsx
|
|
44634
|
+
function MapPinIcon({ className, size = 16, strokeWidth = 2 }) {
|
|
44635
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
|
|
44636
|
+
className,
|
|
44637
|
+
width: size,
|
|
44638
|
+
height: size,
|
|
44639
|
+
viewBox: "0 0 24 24",
|
|
44640
|
+
fill: "none",
|
|
44641
|
+
stroke: "currentColor",
|
|
44642
|
+
strokeWidth,
|
|
44643
|
+
strokeLinecap: "round",
|
|
44644
|
+
strokeLinejoin: "round",
|
|
44645
|
+
"aria-hidden": "true",
|
|
44646
|
+
focusable: "false",
|
|
44647
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
|
|
44648
|
+
cx: "12",
|
|
44649
|
+
cy: "10",
|
|
44650
|
+
r: "3"
|
|
44651
|
+
})]
|
|
44652
|
+
});
|
|
44653
|
+
}
|
|
44654
|
+
function CalendarIcon({ className, size = 16, strokeWidth = 2 }) {
|
|
44655
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
|
|
44656
|
+
className,
|
|
44657
|
+
width: size,
|
|
44658
|
+
height: size,
|
|
44659
|
+
viewBox: "0 0 24 24",
|
|
44660
|
+
fill: "none",
|
|
44661
|
+
stroke: "currentColor",
|
|
44662
|
+
strokeWidth,
|
|
44663
|
+
strokeLinecap: "round",
|
|
44664
|
+
strokeLinejoin: "round",
|
|
44665
|
+
"aria-hidden": "true",
|
|
44666
|
+
focusable: "false",
|
|
44667
|
+
children: [
|
|
44668
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
|
|
44669
|
+
x: "3",
|
|
44670
|
+
y: "4",
|
|
44671
|
+
width: "18",
|
|
44672
|
+
height: "18",
|
|
44673
|
+
rx: "2"
|
|
44674
|
+
}),
|
|
44675
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M16 2v4" }),
|
|
44676
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 2v4" }),
|
|
44677
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 10h18" })
|
|
44678
|
+
]
|
|
44679
|
+
});
|
|
44680
|
+
}
|
|
44681
|
+
|
|
44549
44682
|
//#endregion
|
|
44550
44683
|
//#region ../blocks/src/system/runtime/nodes/events/shared/EventItem.tsx
|
|
44551
44684
|
/** Arrangement content choices are data, ready for other live offering lists to reuse. */
|
|
@@ -44579,6 +44712,8 @@ const eventItemParts = {
|
|
|
44579
44712
|
"date",
|
|
44580
44713
|
"title",
|
|
44581
44714
|
"meta",
|
|
44715
|
+
"time",
|
|
44716
|
+
"places",
|
|
44582
44717
|
"action"
|
|
44583
44718
|
],
|
|
44584
44719
|
"month-day": [
|
|
@@ -44591,20 +44726,41 @@ const eventItemParts = {
|
|
|
44591
44726
|
function eventItemFacts(props$1) {
|
|
44592
44727
|
const options = eventDateOptions(props$1.event);
|
|
44593
44728
|
const availability = getEventAvailabilityStatus(props$1.event);
|
|
44729
|
+
const time = formatEventTimeRange(props$1.event, options);
|
|
44730
|
+
const price$1 = formatEventPrice(props$1.event);
|
|
44594
44731
|
return {
|
|
44595
44732
|
date: formatEventCompactDateRail(props$1.event.startsAt, options, "as-written"),
|
|
44596
|
-
time
|
|
44597
|
-
price:
|
|
44598
|
-
|
|
44599
|
-
|
|
44600
|
-
|
|
44601
|
-
|
|
44602
|
-
|
|
44733
|
+
time,
|
|
44734
|
+
price: price$1,
|
|
44735
|
+
link: resolveEventLinkProps(props$1.event),
|
|
44736
|
+
meta: eventItemMeta(props$1, {
|
|
44737
|
+
time,
|
|
44738
|
+
price: price$1
|
|
44739
|
+
}),
|
|
44740
|
+
venueIcon: props$1.arrangement === "compact" && props$1.showVenue !== false && Boolean(props$1.event.venue),
|
|
44603
44741
|
places: props$1.showCapacity ? formatEventRemainingPlaces(props$1.event, { full: "Sold out" }) : null,
|
|
44604
44742
|
availability: availability.isFull ? "full" : availability.status === "filling" ? "low" : "available",
|
|
44605
44743
|
description: props$1.event.presentation?.summary ?? props$1.event.description
|
|
44606
44744
|
};
|
|
44607
44745
|
}
|
|
44746
|
+
/** Compact rows keep pricing in the details rail and time in the action rail. */
|
|
44747
|
+
function eventItemMeta(props$1, formatted) {
|
|
44748
|
+
const parts = props$1.parts ?? eventItemParts[props$1.arrangement];
|
|
44749
|
+
const venue = props$1.showVenue !== false ? props$1.event.venue?.name : null;
|
|
44750
|
+
const teacher = formatEventTeacherLine(props$1.event);
|
|
44751
|
+
const time = parts.includes("time") ? null : formatted.time;
|
|
44752
|
+
const price$1 = props$1.arrangement === "compact" && !parts.includes("price") ? formatted.price : null;
|
|
44753
|
+
return (props$1.arrangement === "compact" ? [
|
|
44754
|
+
venue,
|
|
44755
|
+
teacher,
|
|
44756
|
+
price$1,
|
|
44757
|
+
time
|
|
44758
|
+
] : [
|
|
44759
|
+
time,
|
|
44760
|
+
teacher,
|
|
44761
|
+
venue
|
|
44762
|
+
]).filter(Boolean).join(" · ");
|
|
44763
|
+
}
|
|
44608
44764
|
/**
|
|
44609
44765
|
* Keep one RSC component boundary per item. Re-forwarding shared presentation
|
|
44610
44766
|
* props through layout/part components multiplies React's development debug
|
|
@@ -44638,21 +44794,28 @@ function renderCalendarItem(props$1) {
|
|
|
44638
44794
|
...listLookSlot(props$1, props$1.arrangement === "grid" ? "item-body" : "what"),
|
|
44639
44795
|
children: parts.filter(body).map(renderPart)
|
|
44640
44796
|
}),
|
|
44641
|
-
parts.filter((part) => [
|
|
44797
|
+
renderCalendarTrailingParts(props$1, parts.filter((part) => [
|
|
44642
44798
|
"time",
|
|
44643
44799
|
"places",
|
|
44644
44800
|
"price",
|
|
44645
44801
|
"action"
|
|
44646
|
-
].includes(part) && !body(part))
|
|
44802
|
+
].includes(part) && !body(part)), renderPart)
|
|
44647
44803
|
]
|
|
44648
44804
|
});
|
|
44649
44805
|
}
|
|
44806
|
+
function renderCalendarTrailingParts(props$1, parts, renderPart) {
|
|
44807
|
+
const content = parts.map(renderPart);
|
|
44808
|
+
return props$1.arrangement === "compact" && parts.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
44809
|
+
...listLookSlot(props$1, "item-actions"),
|
|
44810
|
+
children: content
|
|
44811
|
+
}) : content;
|
|
44812
|
+
}
|
|
44650
44813
|
function eventItemTag(arrangement) {
|
|
44651
44814
|
return arrangement === "ledger" || arrangement === "day-groups" ? "li" : "article";
|
|
44652
44815
|
}
|
|
44653
44816
|
function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
44654
44817
|
switch (part) {
|
|
44655
|
-
case "image": return renderEventItemImage(props$1);
|
|
44818
|
+
case "image": return renderEventItemImage(props$1, facts.link);
|
|
44656
44819
|
case "date": return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("time", {
|
|
44657
44820
|
...listLookSlot(props$1, "date"),
|
|
44658
44821
|
dateTime: props$1.event.startsAt,
|
|
@@ -44675,13 +44838,13 @@ function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
|
44675
44838
|
case "title": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
|
|
44676
44839
|
...listLookSlot(props$1, "item-title"),
|
|
44677
44840
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
44678
|
-
...
|
|
44841
|
+
...facts.link,
|
|
44679
44842
|
children: props$1.event.title
|
|
44680
44843
|
})
|
|
44681
44844
|
});
|
|
44682
|
-
case "time": return /* @__PURE__ */ (0, import_jsx_runtime.
|
|
44845
|
+
case "time": return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
|
|
44683
44846
|
...listLookSlot(props$1, "time"),
|
|
44684
|
-
children: facts.time
|
|
44847
|
+
children: [props$1.arrangement === "compact" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ClockIcon, { "aria-hidden": "true" }) : null, facts.time]
|
|
44685
44848
|
});
|
|
44686
44849
|
case "places": return facts.places ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
44687
44850
|
...listLookSlot(props$1, "places"),
|
|
@@ -44703,8 +44866,7 @@ function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
|
44703
44866
|
item: {
|
|
44704
44867
|
id: props$1.event.id,
|
|
44705
44868
|
title: props$1.event.title,
|
|
44706
|
-
text: facts.description
|
|
44707
|
-
action: { label: "" }
|
|
44869
|
+
text: facts.description
|
|
44708
44870
|
},
|
|
44709
44871
|
presentation: props$1
|
|
44710
44872
|
});
|
|
@@ -44716,6 +44878,7 @@ function renderEventItemMeta({ props: props$1, facts }) {
|
|
|
44716
44878
|
return facts.meta || places ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
|
|
44717
44879
|
...listLookSlot(props$1, "item-meta"),
|
|
44718
44880
|
children: [
|
|
44881
|
+
facts.venueIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MapPinIcon, {}) : null,
|
|
44719
44882
|
facts.meta,
|
|
44720
44883
|
facts.meta && places ? " · " : null,
|
|
44721
44884
|
places ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
@@ -44725,14 +44888,15 @@ function renderEventItemMeta({ props: props$1, facts }) {
|
|
|
44725
44888
|
]
|
|
44726
44889
|
}) : null;
|
|
44727
44890
|
}
|
|
44728
|
-
function renderEventItemImage(props$1) {
|
|
44891
|
+
function renderEventItemImage(props$1, link$2) {
|
|
44729
44892
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardListContentPart, {
|
|
44730
44893
|
part: "media",
|
|
44731
44894
|
item: {
|
|
44732
44895
|
id: props$1.event.id,
|
|
44733
44896
|
title: props$1.event.title,
|
|
44734
44897
|
media: props$1.event.presentation?.image,
|
|
44735
|
-
|
|
44898
|
+
titleLink: link$2,
|
|
44899
|
+
newTabHint: link$2.target === "_blank"
|
|
44736
44900
|
},
|
|
44737
44901
|
presentation: props$1
|
|
44738
44902
|
});
|
|
@@ -45122,56 +45286,6 @@ function cropHeightStyle(height, heightAs) {
|
|
|
45122
45286
|
return heightAs === "minimum" ? { minHeight: height } : { height };
|
|
45123
45287
|
}
|
|
45124
45288
|
|
|
45125
|
-
//#endregion
|
|
45126
|
-
//#region ../blocks/src/system/runtime/nodes/events/shared/EventCardIcons.tsx
|
|
45127
|
-
function MapPinIcon({ className, size = 16, strokeWidth = 2 }) {
|
|
45128
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
|
|
45129
|
-
className,
|
|
45130
|
-
width: size,
|
|
45131
|
-
height: size,
|
|
45132
|
-
viewBox: "0 0 24 24",
|
|
45133
|
-
fill: "none",
|
|
45134
|
-
stroke: "currentColor",
|
|
45135
|
-
strokeWidth,
|
|
45136
|
-
strokeLinecap: "round",
|
|
45137
|
-
strokeLinejoin: "round",
|
|
45138
|
-
"aria-hidden": "true",
|
|
45139
|
-
focusable: "false",
|
|
45140
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
|
|
45141
|
-
cx: "12",
|
|
45142
|
-
cy: "10",
|
|
45143
|
-
r: "3"
|
|
45144
|
-
})]
|
|
45145
|
-
});
|
|
45146
|
-
}
|
|
45147
|
-
function CalendarIcon({ className, size = 16, strokeWidth = 2 }) {
|
|
45148
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
|
|
45149
|
-
className,
|
|
45150
|
-
width: size,
|
|
45151
|
-
height: size,
|
|
45152
|
-
viewBox: "0 0 24 24",
|
|
45153
|
-
fill: "none",
|
|
45154
|
-
stroke: "currentColor",
|
|
45155
|
-
strokeWidth,
|
|
45156
|
-
strokeLinecap: "round",
|
|
45157
|
-
strokeLinejoin: "round",
|
|
45158
|
-
"aria-hidden": "true",
|
|
45159
|
-
focusable: "false",
|
|
45160
|
-
children: [
|
|
45161
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
|
|
45162
|
-
x: "3",
|
|
45163
|
-
y: "4",
|
|
45164
|
-
width: "18",
|
|
45165
|
-
height: "18",
|
|
45166
|
-
rx: "2"
|
|
45167
|
-
}),
|
|
45168
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M16 2v4" }),
|
|
45169
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 2v4" }),
|
|
45170
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 10h18" })
|
|
45171
|
-
]
|
|
45172
|
-
});
|
|
45173
|
-
}
|
|
45174
|
-
|
|
45175
45289
|
//#endregion
|
|
45176
45290
|
//#region ../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx
|
|
45177
45291
|
/** The category's badge, when the event has a category. */
|
|
@@ -46243,7 +46357,7 @@ function buildEventCollectionListDisplay(source) {
|
|
|
46243
46357
|
events: Array.isArray(source.events) ? [...source.events] : [],
|
|
46244
46358
|
listLayout: source.listLayout ?? "stack",
|
|
46245
46359
|
listColumns: source.listColumns ?? "3",
|
|
46246
|
-
eventsPerPage: source.lookSlots !== undefined && source.listLayout === "compact" ? 3 :
|
|
46360
|
+
eventsPerPage: resolveEventCalendarListPageSize({ eventsPerPage: source.eventsPerPage ?? (source.lookSlots !== undefined && source.listLayout === "compact" ? "3" : undefined) }),
|
|
46247
46361
|
paginationAction,
|
|
46248
46362
|
sectionAction: paginationAction.kind === "seeAllLink" ? {
|
|
46249
46363
|
href: paginationAction.href,
|
|
@@ -53521,6 +53635,7 @@ function withOptionalPhone(fields$1, includePhone) {
|
|
|
53521
53635
|
|
|
53522
53636
|
//#endregion
|
|
53523
53637
|
//#region ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
|
|
53638
|
+
const NEWSLETTER_DEMO_MESSAGE = "This is a demo. No signup has been saved.";
|
|
53524
53639
|
const NEWSLETTER_SIGNUPS_PAUSED_MESSAGE = "We can’t accept signups right now. Please try again later.";
|
|
53525
53640
|
function newsletterBlockSubmissionMessage(target) {
|
|
53526
53641
|
if (target.tag === "block-source") {
|
|
@@ -53580,6 +53695,7 @@ const newsletterSourceCommonSchema = z.object({
|
|
|
53580
53695
|
siteId: z.string().optional(),
|
|
53581
53696
|
apiBaseUrl: z.string().optional(),
|
|
53582
53697
|
mailingList: mailingListContextSchema.optional(),
|
|
53698
|
+
interactionContext: blockInteractionContextSchema.optional(),
|
|
53583
53699
|
targeting: mailingListTargetingSchema.optional(),
|
|
53584
53700
|
buttonVariant: newsletterButtonVariantSchema.nullable().optional(),
|
|
53585
53701
|
spamProtectionEnabled: z.boolean().optional(),
|
|
@@ -53636,6 +53752,7 @@ const newsletterHydrationSchema = z.object({
|
|
|
53636
53752
|
token: signedMailingListSourceTokenSchema
|
|
53637
53753
|
})
|
|
53638
53754
|
}),
|
|
53755
|
+
z.object({ tag: z.literal("demo") }),
|
|
53639
53756
|
z.object({ tag: z.literal("preview") }),
|
|
53640
53757
|
z.object({
|
|
53641
53758
|
tag: z.literal("unpublished-preview"),
|
|
@@ -53664,25 +53781,28 @@ const newsletterIslandMetaCodec = createZodCodec(z.object({
|
|
|
53664
53781
|
apiBaseUrl: z.string().optional()
|
|
53665
53782
|
}));
|
|
53666
53783
|
const newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
|
|
53667
|
-
function
|
|
53668
|
-
|
|
53669
|
-
const form$1 = context?.tag === "configured" ? context.form : {
|
|
53784
|
+
function newsletterGlobalForm(context) {
|
|
53785
|
+
return context?.tag === "configured" ? context.form : {
|
|
53670
53786
|
fields: { preset: "emailOnly" },
|
|
53671
53787
|
includeOptionalPhone: false,
|
|
53672
53788
|
buttonLabel: "Subscribe",
|
|
53673
53789
|
successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
|
|
53674
53790
|
privacyNote: null
|
|
53675
53791
|
};
|
|
53792
|
+
}
|
|
53793
|
+
function buildNewsletterDisplay(source) {
|
|
53794
|
+
const context = source.mailingList;
|
|
53795
|
+
const form$1 = newsletterGlobalForm(context);
|
|
53676
53796
|
const targeting = source.targeting ?? { mode: "default" };
|
|
53677
53797
|
const assessment = assessMailingListTargeting(context, targeting);
|
|
53678
53798
|
const choices = resolveRuntimeChoices(assessment);
|
|
53679
53799
|
return {
|
|
53680
53800
|
kind: "newsletter-form",
|
|
53681
53801
|
...source.lookSlots ? { lookSlots: source.lookSlots } : {},
|
|
53682
|
-
availability: assessment.tag === "available" ? "ready" : "unavailable",
|
|
53802
|
+
availability: source.interactionContext?.kind === "demo" || assessment.tag === "available" ? "ready" : "unavailable",
|
|
53683
53803
|
className: source.className ?? null,
|
|
53684
53804
|
buttonLabel: form$1.buttonLabel,
|
|
53685
|
-
successMessage: form$1.successMessage,
|
|
53805
|
+
successMessage: source.interactionContext?.kind === "demo" ? NEWSLETTER_DEMO_MESSAGE : form$1.successMessage,
|
|
53686
53806
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
53687
53807
|
privacyNote: form$1.privacyNote,
|
|
53688
53808
|
fields: getGlobalFormFields(form$1, source),
|
|
@@ -53705,12 +53825,13 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
53705
53825
|
setupRevision: source.mailingList?.tag === "configured" ? source.mailingList.revision : null,
|
|
53706
53826
|
choiceProvider: targeting.mode === "custom" ? targeting.provider : null,
|
|
53707
53827
|
choicePresentation: presentation.tag,
|
|
53708
|
-
spamProtectionEnabled: source.spamProtectionEnabled
|
|
53828
|
+
spamProtectionEnabled: source.interactionContext?.kind === "demo" ? false : source.spamProtectionEnabled
|
|
53709
53829
|
}
|
|
53710
53830
|
};
|
|
53711
53831
|
}
|
|
53712
53832
|
});
|
|
53713
53833
|
function projectNewsletterFormHydrationTarget(source) {
|
|
53834
|
+
if (source.interactionContext?.kind === "demo") return { tag: "demo" };
|
|
53714
53835
|
switch (source.source) {
|
|
53715
53836
|
case "block": {
|
|
53716
53837
|
switch (source.newsletterBlockSubmission.tag) {
|
|
@@ -55778,10 +55899,6 @@ function normalizeBlockContent(definition$1, content) {
|
|
|
55778
55899
|
...Object.fromEntries(Object.entries(normalized).filter(([key]) => owned.has(key)))
|
|
55779
55900
|
};
|
|
55780
55901
|
}
|
|
55781
|
-
const REGISTRY_SYMBOL = Symbol.for("@riverbankcms/blocks/system/definitions");
|
|
55782
|
-
const isBlocksTestRuntime = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.RIVERBANK_BLOCKS_TEST === "1";
|
|
55783
|
-
const globalScope = globalThis;
|
|
55784
|
-
const blockStore = isBlocksTestRuntime ? new Map() : globalScope[REGISTRY_SYMBOL] ??= new Map();
|
|
55785
55902
|
function ensureDefaults() {
|
|
55786
55903
|
ensureSystemBlockDefinitionsRegistered();
|
|
55787
55904
|
}
|
|
@@ -56319,7 +56436,10 @@ const systemCustomizeFacetDefinitions = [
|
|
|
56319
56436
|
], "icons"),
|
|
56320
56437
|
blockKinds: cardListFamilyBlocks
|
|
56321
56438
|
},
|
|
56322
|
-
|
|
56439
|
+
{
|
|
56440
|
+
...fixedKnob("block.event-calendar", "showCapacity", "Places left", onOff, "true", false, true),
|
|
56441
|
+
description: "Show how many places are left on each event"
|
|
56442
|
+
}
|
|
56323
56443
|
];
|
|
56324
56444
|
const systemCustomizeFacetIds = systemCustomizeFacetDefinitions.map((definition$1) => definition$1.id);
|
|
56325
56445
|
const systemCustomizeFacetValues = Array.from(new Set(systemCustomizeFacetDefinitions.flatMap((definition$1) => definition$1.values.map((option) => option.value))));
|
|
@@ -60157,8 +60277,7 @@ function buildStandardBookingPaymentDisclosure(input, payment, amount) {
|
|
|
60157
60277
|
...discountCode ? { discountCode } : {},
|
|
60158
60278
|
...amount,
|
|
60159
60279
|
...selectedCollectionOptionKind ? { selectedCollectionOptionKind } : {},
|
|
60160
|
-
shownTerms: input.shownTerms ?? snapshotBookingShownTerms(payment, input.promisedDiscountId)
|
|
60161
|
-
altchaSolution: input.altchaSolution ?? null
|
|
60280
|
+
shownTerms: input.shownTerms ?? snapshotBookingShownTerms(payment, input.promisedDiscountId)
|
|
60162
60281
|
};
|
|
60163
60282
|
}
|
|
60164
60283
|
function validateBookingSlidingSelection(service, data) {
|
|
@@ -60511,8 +60630,7 @@ function buildEventRegistrationSourceProps(input) {
|
|
|
60511
60630
|
showVenue: input.showVenue,
|
|
60512
60631
|
showCapacity: input.showCapacity,
|
|
60513
60632
|
successMessage: input.successMessage,
|
|
60514
|
-
buttonVariant: input.buttonVariant
|
|
60515
|
-
spamProtectionEnabled: input.spamProtectionEnabled
|
|
60633
|
+
buttonVariant: input.buttonVariant
|
|
60516
60634
|
};
|
|
60517
60635
|
}
|
|
60518
60636
|
|
|
@@ -60602,7 +60720,6 @@ const bookingSourceSchema = z.object({
|
|
|
60602
60720
|
successMessage: z.string().nullable().optional(),
|
|
60603
60721
|
form: bookingSourceFormSchema.nullable().optional(),
|
|
60604
60722
|
services: bookingServicesSourceSchema.nullable().optional(),
|
|
60605
|
-
spamProtectionEnabled: z.boolean().optional(),
|
|
60606
60723
|
className: z.string().nullable().optional()
|
|
60607
60724
|
});
|
|
60608
60725
|
const bookingDisplaySchema = z.object({
|
|
@@ -60631,8 +60748,7 @@ const bookingHydrationSchema = z.object({
|
|
|
60631
60748
|
rebookContext: z.object({ kind: z.literal("portal_rebook") }).nullable().optional(),
|
|
60632
60749
|
form: bookingConfigSchema.nullable(),
|
|
60633
60750
|
services: z.array(bookingServiceSchema),
|
|
60634
|
-
serviceCategories: z.array(bookingServiceCategorySchema).optional()
|
|
60635
|
-
spamProtectionEnabled: z.boolean().optional()
|
|
60751
|
+
serviceCategories: z.array(bookingServiceCategorySchema).optional()
|
|
60636
60752
|
});
|
|
60637
60753
|
const bookingRenderSchema = z.object({
|
|
60638
60754
|
display: bookingDisplaySchema,
|
|
@@ -60683,8 +60799,7 @@ const bookingFormBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
60683
60799
|
rebookContext: source.rebookContext ?? null,
|
|
60684
60800
|
form: form$1,
|
|
60685
60801
|
services,
|
|
60686
|
-
serviceCategories: normalizeBookingServiceCategories(source.services)
|
|
60687
|
-
spamProtectionEnabled: source.spamProtectionEnabled
|
|
60802
|
+
serviceCategories: normalizeBookingServiceCategories(source.services)
|
|
60688
60803
|
}
|
|
60689
60804
|
};
|
|
60690
60805
|
}
|
|
@@ -62843,13 +62958,12 @@ function previewCardContent(item, props$1, datesBySeries, typeLabel) {
|
|
|
62843
62958
|
}
|
|
62844
62959
|
function nativeRunCardContent(item, content, props$1) {
|
|
62845
62960
|
const open$1 = resolveWholeSeriesBookingPhase(item.run.run, props$1.now).kind === "open";
|
|
62961
|
+
const path$3 = content.titleLink?.href ?? null;
|
|
62846
62962
|
return {
|
|
62847
62963
|
...content,
|
|
62848
|
-
href: item.path,
|
|
62849
|
-
titleLink: undefined,
|
|
62850
62964
|
action: {
|
|
62851
|
-
label: open$1 ?
|
|
62852
|
-
...open$1 &&
|
|
62965
|
+
label: open$1 ? path$3 ? props$1.buttonText || "Book" : "Details coming soon" : "Registration closed",
|
|
62966
|
+
...open$1 && path$3 ? { href: path$3 } : {}
|
|
62853
62967
|
}
|
|
62854
62968
|
};
|
|
62855
62969
|
}
|
|
@@ -65528,6 +65642,16 @@ function EventRegistrationShell({ display }) {
|
|
|
65528
65642
|
}
|
|
65529
65643
|
var event_registration_server_default = EventRegistrationSSR;
|
|
65530
65644
|
|
|
65645
|
+
//#endregion
|
|
65646
|
+
//#region ../blocks/src/system/runtime/shared/components/ProtectedSubmitButton.tsx
|
|
65647
|
+
/** Verification readiness is decided here, never recomputed by individual forms. */
|
|
65648
|
+
function ProtectedSubmitButton({ submission, disabled, ...props$1 }) {
|
|
65649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemedButton, {
|
|
65650
|
+
...props$1,
|
|
65651
|
+
disabled: disabled || submission.kind === "waiting"
|
|
65652
|
+
});
|
|
65653
|
+
}
|
|
65654
|
+
|
|
65531
65655
|
//#endregion
|
|
65532
65656
|
//#region ../blocks/src/system/runtime/nodes/form.fields.tsx
|
|
65533
65657
|
function fieldBasics(field) {
|
|
@@ -65710,14 +65834,15 @@ function FormFieldGroups({ groups, lookSlots }) {
|
|
|
65710
65834
|
children: group.fields.map(renderField$1)
|
|
65711
65835
|
}, group.key) : renderField$1(group.field)) });
|
|
65712
65836
|
}
|
|
65713
|
-
function FormSubmitAction({ lookSlots, submitLabel, disabled }) {
|
|
65837
|
+
function FormSubmitAction({ lookSlots, submitLabel, disabled, submission }) {
|
|
65714
65838
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65715
65839
|
className: "fb-actions",
|
|
65716
65840
|
...listLookSlot({ lookSlots }, "actions"),
|
|
65717
65841
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65718
65842
|
className: "fb-actions-inner",
|
|
65719
65843
|
...listLookSlot({ lookSlots }, "inline"),
|
|
65720
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65844
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
65845
|
+
submission,
|
|
65721
65846
|
...listLookSlot({ lookSlots }, "action"),
|
|
65722
65847
|
type: "submit",
|
|
65723
65848
|
variant: "primary",
|
|
@@ -65782,6 +65907,7 @@ const FormNodeSSR = ({ blockId, lookSlots, value, submitLabel, successMessage, c
|
|
|
65782
65907
|
lookSlots: display.lookSlots
|
|
65783
65908
|
}),
|
|
65784
65909
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormSubmitAction, {
|
|
65910
|
+
submission: { kind: "waiting" },
|
|
65785
65911
|
submitLabel: display.submitLabel,
|
|
65786
65912
|
lookSlots: display.lookSlots
|
|
65787
65913
|
})
|
|
@@ -65846,7 +65972,7 @@ function NewsletterExtraField({ field, disabled, error: error$1, lookSlots }) {
|
|
|
65846
65972
|
});
|
|
65847
65973
|
}
|
|
65848
65974
|
/** The email field and submit button sharing one input-styled shell. */
|
|
65849
|
-
function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, error: error$1 }) {
|
|
65975
|
+
function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, submission, disabled, error: error$1 }) {
|
|
65850
65976
|
const inputId = inputIdFor(field);
|
|
65851
65977
|
const errorId = `${inputId}-error`;
|
|
65852
65978
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
@@ -65873,7 +65999,8 @@ function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, err
|
|
|
65873
65999
|
messageId: errorId
|
|
65874
66000
|
})
|
|
65875
66001
|
}),
|
|
65876
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66002
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66003
|
+
submission,
|
|
65877
66004
|
type: "submit",
|
|
65878
66005
|
variant: buttonVariant,
|
|
65879
66006
|
size: "md",
|
|
@@ -65892,7 +66019,7 @@ function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, err
|
|
|
65892
66019
|
* The submit action: joined to the email field when the preset has one
|
|
65893
66020
|
* (every current preset does), otherwise a plain themed button.
|
|
65894
66021
|
*/
|
|
65895
|
-
function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVariant, buttonLabel, disabled, error: error$1 }) {
|
|
66022
|
+
function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVariant, buttonLabel, submission, disabled, error: error$1 }) {
|
|
65896
66023
|
if (lookSlots) {
|
|
65897
66024
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [emailField$1 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NewsletterExtraField, {
|
|
65898
66025
|
field: emailField$1,
|
|
@@ -65901,7 +66028,8 @@ function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVarian
|
|
|
65901
66028
|
error: error$1
|
|
65902
66029
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65903
66030
|
...listLookSlot({ lookSlots }, "actions"),
|
|
65904
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66031
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66032
|
+
submission,
|
|
65905
66033
|
...listLookSlot({ lookSlots }, "action"),
|
|
65906
66034
|
type: "submit",
|
|
65907
66035
|
variant: buttonVariant,
|
|
@@ -65916,13 +66044,15 @@ function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVarian
|
|
|
65916
66044
|
field: emailField$1,
|
|
65917
66045
|
buttonVariant,
|
|
65918
66046
|
buttonLabel,
|
|
66047
|
+
submission,
|
|
65919
66048
|
disabled,
|
|
65920
66049
|
error: error$1
|
|
65921
66050
|
});
|
|
65922
66051
|
}
|
|
65923
66052
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65924
66053
|
className: "newsletter-submit",
|
|
65925
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66054
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66055
|
+
submission,
|
|
65926
66056
|
type: "submit",
|
|
65927
66057
|
variant: buttonVariant,
|
|
65928
66058
|
size: "md",
|
|
@@ -66021,6 +66151,7 @@ function NewsletterFormSSR(props$1) {
|
|
|
66021
66151
|
}, field.id))
|
|
66022
66152
|
}) : null,
|
|
66023
66153
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(NewsletterSubmitRow, {
|
|
66154
|
+
submission: { kind: "waiting" },
|
|
66024
66155
|
lookSlots: display.lookSlots,
|
|
66025
66156
|
emailField: emailField$1,
|
|
66026
66157
|
buttonVariant: display.buttonVariant,
|
|
@@ -68860,10 +68991,15 @@ function arrangementRuntime(content) {
|
|
|
68860
68991
|
const value = parseSurfaceTree(content._arrangementLooks);
|
|
68861
68992
|
return isObjectRecord(value) && isObjectRecord(value.byMode) && Array.isArray(value.available) && Array.isArray(value.rhythm) ? restoreArrangementRuntime(value) : null;
|
|
68862
68993
|
}
|
|
68863
|
-
/**
|
|
68994
|
+
/**
|
|
68995
|
+
* JSON transports carry resolver inputs; rebuild every surface at this boundary.
|
|
68996
|
+
* A payload cached before compiled looks carried `slotRoles` gets the Look's own.
|
|
68997
|
+
*/
|
|
68864
68998
|
function restoreCompiledLook(look) {
|
|
68999
|
+
const transported = look;
|
|
68865
69000
|
return {
|
|
68866
69001
|
...look,
|
|
69002
|
+
slotRoles: transported.slotRoles ?? look.look.structure.slotRoles ?? {},
|
|
68867
69003
|
itemSurfaces: Object.fromEntries(Object.entries(look.itemSurfaces).map(([slot, surface]) => [slot, parseResolvedSurface(surface)])),
|
|
68868
69004
|
...look.roleSurfaces ? { roleSurfaces: {
|
|
68869
69005
|
card: parseResolvedSurface(look.roleSurfaces.card),
|
|
@@ -68916,6 +69052,7 @@ function planArrangementContent(blockKind, manifest, content, audience) {
|
|
|
68916
69052
|
});
|
|
68917
69053
|
return {
|
|
68918
69054
|
...activeContent,
|
|
69055
|
+
...arrangementPhotoTreatmentContent(activeContent, effective.look),
|
|
68919
69056
|
...mode !== null ? { variant: mode } : {},
|
|
68920
69057
|
...effectiveContent,
|
|
68921
69058
|
...photoContent,
|
|
@@ -68937,6 +69074,16 @@ function planArrangementContent(blockKind, manifest, content, audience) {
|
|
|
68937
69074
|
blockLook: effective.look.id
|
|
68938
69075
|
};
|
|
68939
69076
|
}
|
|
69077
|
+
/** Typed Look composition owns contrast treatment; parsing preserves authored paint. */
|
|
69078
|
+
function arrangementPhotoTreatmentContent(content, look) {
|
|
69079
|
+
if (!look.structure.photoTreatment) return {};
|
|
69080
|
+
const authored = parseCanonicalRuntimeBackground(content);
|
|
69081
|
+
if (authored.kind === "none") return {};
|
|
69082
|
+
return { _sectionStyles: {
|
|
69083
|
+
...isObjectRecord(content._sectionStyles) ? content._sectionStyles : {},
|
|
69084
|
+
background: applyLookPhotoTreatment(authored.background, look.structure.photoTreatment)
|
|
69085
|
+
} };
|
|
69086
|
+
}
|
|
68940
69087
|
/** Widget section hooks use the theme; hero background geometry never travels to list islands. */
|
|
68941
69088
|
function arrangementContentSlots(blockKind) {
|
|
68942
69089
|
return Object.fromEntries(arrangementSlotNames.filter((slot) => (!slot.startsWith("price-") || blockKind === "block.shop") && slot !== "schedule-section" && slot !== "shop-section" && (slot !== "background" || blockKind === "block.hero")).map((slot) => [slot, slot]));
|
|
@@ -69029,6 +69176,7 @@ function applyArrangementRhythm(entry, position) {
|
|
|
69029
69176
|
const tinted = resolveArrangementTints(updated$1, grounded, runtime, surface) ?? grounded;
|
|
69030
69177
|
return {
|
|
69031
69178
|
...entry,
|
|
69179
|
+
styleBackground: arrangementGroundToken(resolveSectionBackground({ kind: "none" }, null, rhythm)),
|
|
69032
69180
|
renderableContent: {
|
|
69033
69181
|
...updated$1,
|
|
69034
69182
|
_effectiveLook: tinted,
|
|
@@ -69141,7 +69289,7 @@ function resolveArrangementRoleSurfaces(look, runtime, background) {
|
|
|
69141
69289
|
...look,
|
|
69142
69290
|
ground,
|
|
69143
69291
|
roleSurfaces,
|
|
69144
|
-
itemSurfaces: resolveLookSlotSurfaces(look
|
|
69292
|
+
itemSurfaces: resolveLookSlotSurfaces(look, look.itemRoles, roleSurfaces)
|
|
69145
69293
|
};
|
|
69146
69294
|
}
|
|
69147
69295
|
/** The arrangement key is resolved once by planBlock, including pinned Looks. */
|
|
@@ -69149,7 +69297,7 @@ function heroPhotoGround(entry) {
|
|
|
69149
69297
|
return entry.kind === "renderable" && entry.block.kind === "block.hero" ? { paintsGround: heroPhotoPaintsGround(entry.effectiveArrangementKey ?? undefined) } : undefined;
|
|
69150
69298
|
}
|
|
69151
69299
|
/** Header consumers receive the opening that the public render plan actually admits. */
|
|
69152
|
-
function resolvePageOpeningSection(page, options
|
|
69300
|
+
function resolvePageOpeningSection(page, options) {
|
|
69153
69301
|
const presentation = toPresentationPage(page);
|
|
69154
69302
|
if (!presentation) return null;
|
|
69155
69303
|
const opening = buildPageRenderPlan({
|
|
@@ -69163,11 +69311,12 @@ function resolvePageOpeningSection(page, options = {}) {
|
|
|
69163
69311
|
blockOverrides: undefined
|
|
69164
69312
|
}).entries[0];
|
|
69165
69313
|
if (!opening) return null;
|
|
69166
|
-
const
|
|
69314
|
+
const appearance = resolveCompiledSectionContextFromContent(opening.renderableContent, expandPalette(options.theme.palette), heroPhotoGround(opening));
|
|
69167
69315
|
return {
|
|
69168
69316
|
blockKind: opening.block.kind,
|
|
69169
69317
|
content: opening.renderableContent,
|
|
69170
|
-
|
|
69318
|
+
appearance,
|
|
69319
|
+
photoPlacement: appearance.openingPhotoBehindText ? "behind-text" : "none"
|
|
69171
69320
|
};
|
|
69172
69321
|
}
|
|
69173
69322
|
|
|
@@ -79899,7 +80048,7 @@ async function loadConfig(configPath, output) {
|
|
|
79899
80048
|
return { errorMessage: "No config path provided." };
|
|
79900
80049
|
}
|
|
79901
80050
|
try {
|
|
79902
|
-
const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-
|
|
80051
|
+
const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-BcATOVmw.mjs");
|
|
79903
80052
|
const rawConfig = await loadConfigFile$1(configPath);
|
|
79904
80053
|
const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);
|
|
79905
80054
|
if (!parsed.success) {
|
|
@@ -82657,6 +82806,7 @@ function cancelledRunInput(run) {
|
|
|
82657
82806
|
status: "cancelled",
|
|
82658
82807
|
visibility: run.visibility,
|
|
82659
82808
|
capacity: run.capacity,
|
|
82809
|
+
waitlistMode: run.waitlistMode,
|
|
82660
82810
|
bookingOffer: run.bookingOffer,
|
|
82661
82811
|
venueRef: run.venueRef,
|
|
82662
82812
|
formRef: run.formRef,
|
|
@@ -95463,257 +95613,6 @@ async function retryResendRequest(apiClient, { domainId, options }) {
|
|
|
95463
95613
|
}
|
|
95464
95614
|
}
|
|
95465
95615
|
|
|
95466
|
-
//#endregion
|
|
95467
|
-
//#region ../api/src/admin.ts
|
|
95468
|
-
async function startImpersonation(apiClient, body, options) {
|
|
95469
|
-
try {
|
|
95470
|
-
return unwrapResponse(await apiClient({
|
|
95471
|
-
endpoint: "adminStartImpersonation",
|
|
95472
|
-
body,
|
|
95473
|
-
options
|
|
95474
|
-
}));
|
|
95475
|
-
} catch (error$1) {
|
|
95476
|
-
return normalizeApiError(error$1, "Failed to start impersonation session");
|
|
95477
|
-
}
|
|
95478
|
-
}
|
|
95479
|
-
async function stopImpersonation(apiClient, body, options) {
|
|
95480
|
-
try {
|
|
95481
|
-
return unwrapResponse(await apiClient({
|
|
95482
|
-
endpoint: "adminStopImpersonation",
|
|
95483
|
-
body,
|
|
95484
|
-
options
|
|
95485
|
-
}));
|
|
95486
|
-
} catch (error$1) {
|
|
95487
|
-
return normalizeApiError(error$1, "Failed to stop impersonation session");
|
|
95488
|
-
}
|
|
95489
|
-
}
|
|
95490
|
-
async function assignAdminRole(apiClient, body, options) {
|
|
95491
|
-
try {
|
|
95492
|
-
return unwrapResponse(await apiClient({
|
|
95493
|
-
endpoint: "adminAssignRole",
|
|
95494
|
-
body,
|
|
95495
|
-
options
|
|
95496
|
-
}));
|
|
95497
|
-
} catch (error$1) {
|
|
95498
|
-
return normalizeApiError(error$1, "Failed to assign admin role");
|
|
95499
|
-
}
|
|
95500
|
-
}
|
|
95501
|
-
async function revokeAdminRole(apiClient, body, options) {
|
|
95502
|
-
try {
|
|
95503
|
-
return unwrapResponse(await apiClient({
|
|
95504
|
-
endpoint: "adminRevokeRole",
|
|
95505
|
-
body,
|
|
95506
|
-
options
|
|
95507
|
-
}));
|
|
95508
|
-
} catch (error$1) {
|
|
95509
|
-
return normalizeApiError(error$1, "Failed to revoke admin role");
|
|
95510
|
-
}
|
|
95511
|
-
}
|
|
95512
|
-
async function adminChangePlan(apiClient, body, options) {
|
|
95513
|
-
try {
|
|
95514
|
-
return unwrapResponse(await apiClient({
|
|
95515
|
-
endpoint: "adminChangePlan",
|
|
95516
|
-
body: {
|
|
95517
|
-
...body,
|
|
95518
|
-
attemptId: body.attemptId ?? crypto.randomUUID()
|
|
95519
|
-
},
|
|
95520
|
-
options
|
|
95521
|
-
}));
|
|
95522
|
-
} catch (error$1) {
|
|
95523
|
-
return normalizeApiError(error$1, "Failed to update billing plan");
|
|
95524
|
-
}
|
|
95525
|
-
}
|
|
95526
|
-
async function listAdminInvites(apiClient, params = {}, options) {
|
|
95527
|
-
try {
|
|
95528
|
-
return unwrapResponse(await apiClient({
|
|
95529
|
-
endpoint: "adminListInvites",
|
|
95530
|
-
params,
|
|
95531
|
-
options
|
|
95532
|
-
}));
|
|
95533
|
-
} catch (error$1) {
|
|
95534
|
-
return normalizeApiError(error$1, "Failed to load invites");
|
|
95535
|
-
}
|
|
95536
|
-
}
|
|
95537
|
-
async function createAdminInvite(apiClient, body, options) {
|
|
95538
|
-
try {
|
|
95539
|
-
return unwrapResponse(await apiClient({
|
|
95540
|
-
endpoint: "adminCreateInvite",
|
|
95541
|
-
body,
|
|
95542
|
-
options
|
|
95543
|
-
}));
|
|
95544
|
-
} catch (error$1) {
|
|
95545
|
-
return normalizeApiError(error$1, "Failed to create invite");
|
|
95546
|
-
}
|
|
95547
|
-
}
|
|
95548
|
-
async function revokeAdminInvite(apiClient, inviteId, options) {
|
|
95549
|
-
try {
|
|
95550
|
-
return unwrapResponse(await apiClient({
|
|
95551
|
-
endpoint: "adminRevokeInvite",
|
|
95552
|
-
params: { inviteId },
|
|
95553
|
-
options
|
|
95554
|
-
}));
|
|
95555
|
-
} catch (error$1) {
|
|
95556
|
-
return normalizeApiError(error$1, "Failed to revoke invite");
|
|
95557
|
-
}
|
|
95558
|
-
}
|
|
95559
|
-
async function createAdminUser(apiClient, body, options) {
|
|
95560
|
-
try {
|
|
95561
|
-
return unwrapResponse(await apiClient({
|
|
95562
|
-
endpoint: "adminCreateUser",
|
|
95563
|
-
body,
|
|
95564
|
-
options
|
|
95565
|
-
}));
|
|
95566
|
-
} catch (error$1) {
|
|
95567
|
-
return normalizeApiError(error$1, "Failed to create user");
|
|
95568
|
-
}
|
|
95569
|
-
}
|
|
95570
|
-
async function adminDeleteSite(apiClient, siteId, options) {
|
|
95571
|
-
try {
|
|
95572
|
-
return unwrapResponse(await apiClient({
|
|
95573
|
-
endpoint: "adminDeleteSite",
|
|
95574
|
-
params: { siteId },
|
|
95575
|
-
options
|
|
95576
|
-
}));
|
|
95577
|
-
} catch (error$1) {
|
|
95578
|
-
return normalizeApiError(error$1, "Failed to delete site");
|
|
95579
|
-
}
|
|
95580
|
-
}
|
|
95581
|
-
async function adminDeleteUser(apiClient, userId, params = {}, options) {
|
|
95582
|
-
const forceQuery = params.force ? { force: "true" } : {};
|
|
95583
|
-
try {
|
|
95584
|
-
return unwrapResponse(await apiClient({
|
|
95585
|
-
endpoint: "adminDeleteUser",
|
|
95586
|
-
params: {
|
|
95587
|
-
userId,
|
|
95588
|
-
...forceQuery
|
|
95589
|
-
},
|
|
95590
|
-
options
|
|
95591
|
-
}));
|
|
95592
|
-
} catch (error$1) {
|
|
95593
|
-
return normalizeApiError(error$1, "Failed to delete user");
|
|
95594
|
-
}
|
|
95595
|
-
}
|
|
95596
|
-
async function listAllowedDomains(apiClient, params = {}, options) {
|
|
95597
|
-
try {
|
|
95598
|
-
return unwrapResponse(await apiClient({
|
|
95599
|
-
endpoint: "adminListAllowedDomains",
|
|
95600
|
-
params,
|
|
95601
|
-
options
|
|
95602
|
-
}));
|
|
95603
|
-
} catch (error$1) {
|
|
95604
|
-
return normalizeApiError(error$1, "Failed to load allowed domains");
|
|
95605
|
-
}
|
|
95606
|
-
}
|
|
95607
|
-
async function addAllowedDomain(apiClient, body, options) {
|
|
95608
|
-
try {
|
|
95609
|
-
return unwrapResponse(await apiClient({
|
|
95610
|
-
endpoint: "adminAddAllowedDomain",
|
|
95611
|
-
body,
|
|
95612
|
-
options
|
|
95613
|
-
}));
|
|
95614
|
-
} catch (error$1) {
|
|
95615
|
-
return normalizeApiError(error$1, "Failed to add domain");
|
|
95616
|
-
}
|
|
95617
|
-
}
|
|
95618
|
-
async function deleteAllowedDomain(apiClient, domainId, options) {
|
|
95619
|
-
try {
|
|
95620
|
-
return unwrapResponse(await apiClient({
|
|
95621
|
-
endpoint: "adminDeleteAllowedDomain",
|
|
95622
|
-
params: { domainId },
|
|
95623
|
-
options
|
|
95624
|
-
}));
|
|
95625
|
-
} catch (error$1) {
|
|
95626
|
-
return normalizeApiError(error$1, "Failed to remove domain");
|
|
95627
|
-
}
|
|
95628
|
-
}
|
|
95629
|
-
async function listGscPropertiesAdmin(apiClient, options) {
|
|
95630
|
-
try {
|
|
95631
|
-
return unwrapResponse(await apiClient({
|
|
95632
|
-
endpoint: "listGscPropertiesAdmin",
|
|
95633
|
-
options
|
|
95634
|
-
}));
|
|
95635
|
-
} catch (error$1) {
|
|
95636
|
-
return normalizeApiError(error$1, "Failed to load GSC properties");
|
|
95637
|
-
}
|
|
95638
|
-
}
|
|
95639
|
-
async function setGscPersistEnabled(apiClient, body, options) {
|
|
95640
|
-
try {
|
|
95641
|
-
return unwrapResponse(await apiClient({
|
|
95642
|
-
endpoint: "adminGscMetaPersist",
|
|
95643
|
-
body,
|
|
95644
|
-
options
|
|
95645
|
-
}));
|
|
95646
|
-
} catch (error$1) {
|
|
95647
|
-
return normalizeApiError(error$1, "Failed to update GSC persist toggle");
|
|
95648
|
-
}
|
|
95649
|
-
}
|
|
95650
|
-
async function startGscVerification(apiClient, body, options) {
|
|
95651
|
-
try {
|
|
95652
|
-
return unwrapResponse(await apiClient({
|
|
95653
|
-
endpoint: "adminGscVerifyStart",
|
|
95654
|
-
body,
|
|
95655
|
-
options
|
|
95656
|
-
}));
|
|
95657
|
-
} catch (error$1) {
|
|
95658
|
-
return normalizeApiError(error$1, "Failed to start GSC verification");
|
|
95659
|
-
}
|
|
95660
|
-
}
|
|
95661
|
-
async function confirmGscVerification(apiClient, body, options) {
|
|
95662
|
-
try {
|
|
95663
|
-
return unwrapResponse(await apiClient({
|
|
95664
|
-
endpoint: "adminGscVerifyConfirm",
|
|
95665
|
-
body,
|
|
95666
|
-
options
|
|
95667
|
-
}));
|
|
95668
|
-
} catch (error$1) {
|
|
95669
|
-
return normalizeApiError(error$1, "Failed to confirm GSC verification");
|
|
95670
|
-
}
|
|
95671
|
-
}
|
|
95672
|
-
async function runGscIngestionForSite(apiClient, body, options) {
|
|
95673
|
-
try {
|
|
95674
|
-
return unwrapResponse(await apiClient({
|
|
95675
|
-
endpoint: "adminSeoIngestRun",
|
|
95676
|
-
body,
|
|
95677
|
-
options
|
|
95678
|
-
}));
|
|
95679
|
-
} catch (error$1) {
|
|
95680
|
-
return normalizeApiError(error$1, "Failed to run GSC ingestion");
|
|
95681
|
-
}
|
|
95682
|
-
}
|
|
95683
|
-
async function getPriceOverride(apiClient, params, options) {
|
|
95684
|
-
try {
|
|
95685
|
-
return unwrapResponse(await apiClient({
|
|
95686
|
-
endpoint: "adminGetPriceOverride",
|
|
95687
|
-
params,
|
|
95688
|
-
options
|
|
95689
|
-
}));
|
|
95690
|
-
} catch (error$1) {
|
|
95691
|
-
return normalizeApiError(error$1, "Failed to get price override");
|
|
95692
|
-
}
|
|
95693
|
-
}
|
|
95694
|
-
async function upsertPriceOverride(apiClient, body, options) {
|
|
95695
|
-
try {
|
|
95696
|
-
return unwrapResponse(await apiClient({
|
|
95697
|
-
endpoint: "adminUpsertPriceOverride",
|
|
95698
|
-
body,
|
|
95699
|
-
options
|
|
95700
|
-
}));
|
|
95701
|
-
} catch (error$1) {
|
|
95702
|
-
return normalizeApiError(error$1, "Failed to set custom price");
|
|
95703
|
-
}
|
|
95704
|
-
}
|
|
95705
|
-
async function deletePriceOverride(apiClient, body, options) {
|
|
95706
|
-
try {
|
|
95707
|
-
return unwrapResponse(await apiClient({
|
|
95708
|
-
endpoint: "adminDeletePriceOverride",
|
|
95709
|
-
body,
|
|
95710
|
-
options
|
|
95711
|
-
}));
|
|
95712
|
-
} catch (error$1) {
|
|
95713
|
-
return normalizeApiError(error$1, "Failed to clear custom price");
|
|
95714
|
-
}
|
|
95715
|
-
}
|
|
95716
|
-
|
|
95717
95616
|
//#endregion
|
|
95718
95617
|
//#region ../api/src/auth.ts
|
|
95719
95618
|
function extractErrorMessage(error$1, fallback) {
|