riverbankcms 0.26.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 +154 -388
- package/dist/{entryCommands-61TwBBCA.mjs → entryCommands-Dg5IT7Uv.mjs} +369 -79
- package/dist/{eventUpsertInputSchema-zAAQrjXE.mjs → eventUpsertInputSchema-D4xpVjUT.mjs} +3 -2
- package/dist/load-config-BcATOVmw.mjs +4 -0
- package/dist/{load-config-C7Ght4_r.mjs → load-config-DsPKn5yN.mjs} +2 -2
- package/dist/{plan-DB3FQqwH.mjs → plan-oltx4aO0.mjs} +1 -1
- package/dist/scaffold/index.mjs +2 -2
- package/dist/{sdk-event-upsert-CH3xwzuX.mjs → sdk-event-upsert-CnvVuQJy.mjs} +2896 -2770
- package/dist/{src-DsR6-gBQ.mjs → src-DqoU7zKs.mjs} +7 -1
- package/dist/testing.mjs +4 -4
- package/package.json +1 -1
- package/dist/load-config-DAdJwh-i.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;
|
|
@@ -13817,10 +13835,9 @@ function generateHeaderCss(options) {
|
|
|
13817
13835
|
}));
|
|
13818
13836
|
cssChunks.push(generateLogoTextBehaviorStyles(header.logoText, themeId));
|
|
13819
13837
|
cssChunks.push(generateHeaderNavLinkStyles(header, themeId, tokens, theme, headerContrastTreatment, headerNavTextSize));
|
|
13820
|
-
const
|
|
13821
|
-
|
|
13822
|
-
cssChunks.push(
|
|
13823
|
-
cssChunks.push(generateDropdownLinkStyles(menuHeader, themeId, tokens, theme, dropdown));
|
|
13838
|
+
const dropdown = resolveDropdownSurface(header, theme, tokens, solvedInks);
|
|
13839
|
+
cssChunks.push(generateDropdownContainerStyles(themeId, tokens, dropdown));
|
|
13840
|
+
cssChunks.push(generateDropdownLinkStyles(header, themeId, tokens, theme, dropdown));
|
|
13824
13841
|
cssChunks.push(generateDropdownCaretStyles(themeId));
|
|
13825
13842
|
cssChunks.push(generateDropdownTriggerOverrides(header, themeId));
|
|
13826
13843
|
cssChunks.push(generateMobilePanelStyles(themeId, dropdown));
|
|
@@ -13935,10 +13952,10 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
|
|
|
13935
13952
|
/**
|
|
13936
13953
|
* Generate dropdown menu container styles
|
|
13937
13954
|
*/
|
|
13938
|
-
function generateDropdownContainerStyles(
|
|
13955
|
+
function generateDropdownContainerStyles(themeId, tokens, surface) {
|
|
13939
13956
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
|
|
13940
13957
|
const rules = [];
|
|
13941
|
-
const dropdownStyle =
|
|
13958
|
+
const dropdownStyle = surface.style;
|
|
13942
13959
|
rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
|
|
13943
13960
|
rules.push(`background-color: ${surface.backgroundColor};`);
|
|
13944
13961
|
rules.push(...surface.foregroundDeclarations);
|
|
@@ -13977,8 +13994,9 @@ function dropdownLinkEffects(style, textToken, opacity) {
|
|
|
13977
13994
|
options: { hoverColorToken: style.hoverTextColor }
|
|
13978
13995
|
}] : []];
|
|
13979
13996
|
}
|
|
13980
|
-
function dropdownNavLinkStyle(header,
|
|
13981
|
-
const style =
|
|
13997
|
+
function dropdownNavLinkStyle(header, surface) {
|
|
13998
|
+
const style = surface.style;
|
|
13999
|
+
const textToken = surface.textToken;
|
|
13982
14000
|
return {
|
|
13983
14001
|
name: "Dropdown",
|
|
13984
14002
|
typography: "body",
|
|
@@ -14014,11 +14032,11 @@ function generateDropdownLinkStyles(header, themeId, tokens, theme, surface) {
|
|
|
14014
14032
|
themeId,
|
|
14015
14033
|
tokens,
|
|
14016
14034
|
theme,
|
|
14017
|
-
style: dropdownNavLinkStyle(header, surface
|
|
14035
|
+
style: dropdownNavLinkStyle(header, surface),
|
|
14018
14036
|
className: "nav-dropdown-link"
|
|
14019
14037
|
});
|
|
14020
14038
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
|
|
14021
|
-
return baseCSS + `\n${selector} {\n ${dropdownTypographyRules(
|
|
14039
|
+
return baseCSS + `\n${selector} {\n ${dropdownTypographyRules(surface.style).join("\n ")}\n}\n`;
|
|
14022
14040
|
}
|
|
14023
14041
|
function generateDropdownCaretStyles(themeId) {
|
|
14024
14042
|
const selector = `:where([data-theme-scope="${themeId}"]) .nav-caret`;
|
|
@@ -14050,37 +14068,32 @@ ${selector} {
|
|
|
14050
14068
|
`.trim();
|
|
14051
14069
|
}
|
|
14052
14070
|
/** Reuse the header's decided opening tone; unknown openings retain opaque paint. */
|
|
14053
|
-
function
|
|
14071
|
+
function contextualDropdownStyle(header) {
|
|
14054
14072
|
const style = header.dropdownStyle;
|
|
14055
14073
|
const treatment = style?.surfaceTreatment;
|
|
14056
|
-
if (!style || treatment?.kind !== "frosted" || treatment.tone !== "opening") return
|
|
14057
|
-
const
|
|
14058
|
-
if (!
|
|
14059
|
-
...
|
|
14060
|
-
|
|
14061
|
-
...style,
|
|
14062
|
-
surfaceTreatment: { kind: "solid" }
|
|
14063
|
-
}
|
|
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" }
|
|
14064
14079
|
};
|
|
14065
|
-
const
|
|
14066
|
-
const textColor = dark ? "neutral-50" : "neutral-950";
|
|
14080
|
+
const textColor = tone === "dark" ? "neutral-50" : "neutral-950";
|
|
14067
14081
|
return {
|
|
14068
|
-
...
|
|
14069
|
-
|
|
14070
|
-
|
|
14071
|
-
|
|
14072
|
-
|
|
14073
|
-
hoverBackground: textColor,
|
|
14074
|
-
borderColor: null
|
|
14075
|
-
}
|
|
14082
|
+
...style,
|
|
14083
|
+
background: tone === "dark" ? "neutral-950" : "neutral-50",
|
|
14084
|
+
textColor,
|
|
14085
|
+
hoverBackground: textColor,
|
|
14086
|
+
borderColor: null
|
|
14076
14087
|
};
|
|
14077
14088
|
}
|
|
14078
|
-
|
|
14079
|
-
|
|
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");
|
|
14080
14092
|
}
|
|
14081
14093
|
function resolveDropdownSurface(header, theme, tokens, solvedInks) {
|
|
14082
|
-
const
|
|
14083
|
-
const
|
|
14094
|
+
const style = contextualDropdownStyle(header);
|
|
14095
|
+
const backgroundToken = style?.background ?? "surface";
|
|
14096
|
+
const candidate = dropdownTextCandidate(style, header);
|
|
14084
14097
|
const foreground = resolveSurfaceForeground({
|
|
14085
14098
|
type: "color",
|
|
14086
14099
|
color: backgroundToken,
|
|
@@ -14090,7 +14103,8 @@ function resolveDropdownSurface(header, theme, tokens, solvedInks) {
|
|
|
14090
14103
|
backgroundColor: tokens.getColor(backgroundToken),
|
|
14091
14104
|
textToken: foreground.kind === "known" ? foreground.roles.text : candidate,
|
|
14092
14105
|
foregroundDeclarations: [...foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(candidate)};`], ...surfaceInkDeclarations(surfaceInkPublication(foreground, solvedInks))],
|
|
14093
|
-
treatment:
|
|
14106
|
+
treatment: style?.surfaceTreatment,
|
|
14107
|
+
style
|
|
14094
14108
|
};
|
|
14095
14109
|
}
|
|
14096
14110
|
/** Solid paint is the fallback. Blur is enhancement, never the readability mechanism. */
|
|
@@ -18395,6 +18409,7 @@ const newsletterFormFragment = defineFragment({
|
|
|
18395
18409
|
}
|
|
18396
18410
|
],
|
|
18397
18411
|
layout: [el("newsletter-form", withApiBindings({
|
|
18412
|
+
interactionContext: { $bind: { from: "$root.interactionContext" } },
|
|
18398
18413
|
lookSlots: { $bind: { from: "content._lookSlots" } },
|
|
18399
18414
|
source: { $bind: {
|
|
18400
18415
|
from: "mailingListSource",
|
|
@@ -19942,7 +19957,8 @@ function readinessStage(surface) {
|
|
|
19942
19957
|
//#region ../blocks/src/system/blocks/readiness.ts
|
|
19943
19958
|
const newsletterReadiness = {
|
|
19944
19959
|
needs: ["mailingList"],
|
|
19945
|
-
assess: (content, facts) => {
|
|
19960
|
+
assess: (content, facts, interaction) => {
|
|
19961
|
+
if (interaction?.kind === "demo") return ready;
|
|
19946
19962
|
if (facts.mailingList.kind === "Unavailable") return unknownReadiness;
|
|
19947
19963
|
const targeting = parseMailingListPlacementTargeting(content.targeting ?? { mode: "default" });
|
|
19948
19964
|
if (!targeting.ok) return unknownReadiness;
|
|
@@ -30747,7 +30763,7 @@ function MembershipHero({ membershipName, classPrefix, onBookForSomeoneElse }) {
|
|
|
30747
30763
|
* LICENSE file in the root directory of this source tree.
|
|
30748
30764
|
*/
|
|
30749
30765
|
var require_react_dom_production = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
30750
|
-
var React$
|
|
30766
|
+
var React$82 = require_react();
|
|
30751
30767
|
function formatProdErrorMessage(code) {
|
|
30752
30768
|
var url = "https://react.dev/errors/" + code;
|
|
30753
30769
|
if (1 < arguments.length) {
|
|
@@ -30784,7 +30800,7 @@ var require_react_dom_production = /* @__PURE__ */ __commonJSMin(((exports) => {
|
|
|
30784
30800
|
implementation
|
|
30785
30801
|
};
|
|
30786
30802
|
}
|
|
30787
|
-
var ReactSharedInternals = React$
|
|
30803
|
+
var ReactSharedInternals = React$82.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
|
|
30788
30804
|
function getCrossOriginStringAs(as, input) {
|
|
30789
30805
|
if ("font" === as) return "";
|
|
30790
30806
|
if ("string" === typeof input) return "use-credentials" === input ? input : "";
|
|
@@ -30927,7 +30943,7 @@ var require_react_dom_development = /* @__PURE__ */ __commonJSMin(((exports) =>
|
|
|
30927
30943
|
return dispatcher;
|
|
30928
30944
|
}
|
|
30929
30945
|
"undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
|
|
30930
|
-
var React$
|
|
30946
|
+
var React$91 = require_react(), Internals$1 = {
|
|
30931
30947
|
d: {
|
|
30932
30948
|
f: noop$2,
|
|
30933
30949
|
r: function() {
|
|
@@ -30943,7 +30959,7 @@ var require_react_dom_development = /* @__PURE__ */ __commonJSMin(((exports) =>
|
|
|
30943
30959
|
},
|
|
30944
30960
|
p: 0,
|
|
30945
30961
|
findDOMNode: null
|
|
30946
|
-
}, 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;
|
|
30947
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");
|
|
30948
30964
|
exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals$1;
|
|
30949
30965
|
exports.createPortal = function(children, container) {
|
|
@@ -36205,37 +36221,6 @@ function buildTransferredAttendeeConfirmationEmailPaymentSummary(options) {
|
|
|
36205
36221
|
}
|
|
36206
36222
|
return assertNever$7(options.paymentMethod);
|
|
36207
36223
|
}
|
|
36208
|
-
function toConfirmationEmailTemplatePaymentFields(summary) {
|
|
36209
|
-
if (!summary) {
|
|
36210
|
-
return {};
|
|
36211
|
-
}
|
|
36212
|
-
switch (summary.kind) {
|
|
36213
|
-
case "free": return { paymentMethod: "free" };
|
|
36214
|
-
case "manual_due": return { paymentMethod: "manual" };
|
|
36215
|
-
case "managed_balance_due": return {
|
|
36216
|
-
paymentMethod: "manual",
|
|
36217
|
-
managedBalanceDueAt: summary.dueAt
|
|
36218
|
-
};
|
|
36219
|
-
case "waived": return { paymentMethod: "waived" };
|
|
36220
|
-
case "pass": return {
|
|
36221
|
-
paymentMethod: "pass",
|
|
36222
|
-
passName: summary.passName,
|
|
36223
|
-
passCreditsUsed: summary.passCreditsUsed
|
|
36224
|
-
};
|
|
36225
|
-
case "membership": return {
|
|
36226
|
-
paymentMethod: "membership",
|
|
36227
|
-
membershipName: summary.membershipName
|
|
36228
|
-
};
|
|
36229
|
-
case "monetary": return {
|
|
36230
|
-
paymentMethod: "stripe",
|
|
36231
|
-
amountPaid: summary.amountPaidCents,
|
|
36232
|
-
amountOutstanding: summary.amountOutstandingCents,
|
|
36233
|
-
currency: summary.currency,
|
|
36234
|
-
managedBalanceDueAt: summary.dueAt
|
|
36235
|
-
};
|
|
36236
|
-
}
|
|
36237
|
-
return assertNever$7(summary);
|
|
36238
|
-
}
|
|
36239
36224
|
|
|
36240
36225
|
//#endregion
|
|
36241
36226
|
//#region ../commerce/src/purchase/discountApplication.ts
|
|
@@ -38697,11 +38682,6 @@ const eventRegistrationErrors = {
|
|
|
38697
38682
|
message: "The payment options for this event have changed. Please check the latest options before continuing.",
|
|
38698
38683
|
action: "payment-options"
|
|
38699
38684
|
},
|
|
38700
|
-
verificationFailed: {
|
|
38701
|
-
endsCommand: false,
|
|
38702
|
-
message: "We couldn’t confirm this request came from a person. Please refresh the page and try again.",
|
|
38703
|
-
action: "none"
|
|
38704
|
-
},
|
|
38705
38685
|
idempotencyConflict: {
|
|
38706
38686
|
endsCommand: false,
|
|
38707
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.",
|
|
@@ -39348,8 +39328,11 @@ function getStepLabel(step) {
|
|
|
39348
39328
|
function visitorHoldsOwnPlace(input) {
|
|
39349
39329
|
return input.hasWaitlistClaim || input.retryingHeldPlace;
|
|
39350
39330
|
}
|
|
39351
|
-
|
|
39352
|
-
|
|
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";
|
|
39353
39336
|
}
|
|
39354
39337
|
function resolveRegistrationAdmission(input) {
|
|
39355
39338
|
if (input.holdsOwnPlace) return { kind: "resume" };
|
|
@@ -41462,7 +41445,6 @@ const eventRegistrationCommonSchemaShape = {
|
|
|
41462
41445
|
successMessage: z.string().optional(),
|
|
41463
41446
|
buttonVariant: registrationButtonVariantSchema.optional(),
|
|
41464
41447
|
host: bookingHostSchema.optional(),
|
|
41465
|
-
spamProtectionEnabled: z.boolean().optional(),
|
|
41466
41448
|
supportEmail: z.string().optional(),
|
|
41467
41449
|
sitePasses: publicPassProductCollectionSchema.nullable().optional(),
|
|
41468
41450
|
siteMemberships: publicMembershipProductCollectionSchema.nullable().optional(),
|
|
@@ -41662,7 +41644,6 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
41662
41644
|
successMessage: source.successMessage,
|
|
41663
41645
|
buttonVariant: source.buttonVariant,
|
|
41664
41646
|
host: source.host ?? "overlay",
|
|
41665
|
-
spamProtectionEnabled: source.spamProtectionEnabled,
|
|
41666
41647
|
supportEmail: source.supportEmail,
|
|
41667
41648
|
sitePasses: source.sitePasses ?? null,
|
|
41668
41649
|
siteMemberships: source.siteMemberships ?? null,
|
|
@@ -44745,11 +44726,17 @@ const eventItemParts = {
|
|
|
44745
44726
|
function eventItemFacts(props$1) {
|
|
44746
44727
|
const options = eventDateOptions(props$1.event);
|
|
44747
44728
|
const availability = getEventAvailabilityStatus(props$1.event);
|
|
44729
|
+
const time = formatEventTimeRange(props$1.event, options);
|
|
44730
|
+
const price$1 = formatEventPrice(props$1.event);
|
|
44748
44731
|
return {
|
|
44749
44732
|
date: formatEventCompactDateRail(props$1.event.startsAt, options, "as-written"),
|
|
44750
|
-
time
|
|
44751
|
-
price:
|
|
44752
|
-
|
|
44733
|
+
time,
|
|
44734
|
+
price: price$1,
|
|
44735
|
+
link: resolveEventLinkProps(props$1.event),
|
|
44736
|
+
meta: eventItemMeta(props$1, {
|
|
44737
|
+
time,
|
|
44738
|
+
price: price$1
|
|
44739
|
+
}),
|
|
44753
44740
|
venueIcon: props$1.arrangement === "compact" && props$1.showVenue !== false && Boolean(props$1.event.venue),
|
|
44754
44741
|
places: props$1.showCapacity ? formatEventRemainingPlaces(props$1.event, { full: "Sold out" }) : null,
|
|
44755
44742
|
availability: availability.isFull ? "full" : availability.status === "filling" ? "low" : "available",
|
|
@@ -44757,12 +44744,12 @@ function eventItemFacts(props$1) {
|
|
|
44757
44744
|
};
|
|
44758
44745
|
}
|
|
44759
44746
|
/** Compact rows keep pricing in the details rail and time in the action rail. */
|
|
44760
|
-
function eventItemMeta(props$1) {
|
|
44747
|
+
function eventItemMeta(props$1, formatted) {
|
|
44761
44748
|
const parts = props$1.parts ?? eventItemParts[props$1.arrangement];
|
|
44762
44749
|
const venue = props$1.showVenue !== false ? props$1.event.venue?.name : null;
|
|
44763
44750
|
const teacher = formatEventTeacherLine(props$1.event);
|
|
44764
|
-
const time = parts.includes("time") ? null :
|
|
44765
|
-
const price$1 = props$1.arrangement === "compact" && !parts.includes("price") ?
|
|
44751
|
+
const time = parts.includes("time") ? null : formatted.time;
|
|
44752
|
+
const price$1 = props$1.arrangement === "compact" && !parts.includes("price") ? formatted.price : null;
|
|
44766
44753
|
return (props$1.arrangement === "compact" ? [
|
|
44767
44754
|
venue,
|
|
44768
44755
|
teacher,
|
|
@@ -44828,7 +44815,7 @@ function eventItemTag(arrangement) {
|
|
|
44828
44815
|
}
|
|
44829
44816
|
function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
44830
44817
|
switch (part) {
|
|
44831
|
-
case "image": return renderEventItemImage(props$1);
|
|
44818
|
+
case "image": return renderEventItemImage(props$1, facts.link);
|
|
44832
44819
|
case "date": return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("time", {
|
|
44833
44820
|
...listLookSlot(props$1, "date"),
|
|
44834
44821
|
dateTime: props$1.event.startsAt,
|
|
@@ -44851,7 +44838,7 @@ function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
|
44851
44838
|
case "title": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
|
|
44852
44839
|
...listLookSlot(props$1, "item-title"),
|
|
44853
44840
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
|
|
44854
|
-
...
|
|
44841
|
+
...facts.link,
|
|
44855
44842
|
children: props$1.event.title
|
|
44856
44843
|
})
|
|
44857
44844
|
});
|
|
@@ -44879,8 +44866,7 @@ function renderEventItemContentPart({ part, props: props$1, facts }) {
|
|
|
44879
44866
|
item: {
|
|
44880
44867
|
id: props$1.event.id,
|
|
44881
44868
|
title: props$1.event.title,
|
|
44882
|
-
text: facts.description
|
|
44883
|
-
action: { label: "" }
|
|
44869
|
+
text: facts.description
|
|
44884
44870
|
},
|
|
44885
44871
|
presentation: props$1
|
|
44886
44872
|
});
|
|
@@ -44902,8 +44888,7 @@ function renderEventItemMeta({ props: props$1, facts }) {
|
|
|
44902
44888
|
]
|
|
44903
44889
|
}) : null;
|
|
44904
44890
|
}
|
|
44905
|
-
function renderEventItemImage(props$1) {
|
|
44906
|
-
const link$2 = resolveEventLinkProps(props$1.event);
|
|
44891
|
+
function renderEventItemImage(props$1, link$2) {
|
|
44907
44892
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardListContentPart, {
|
|
44908
44893
|
part: "media",
|
|
44909
44894
|
item: {
|
|
@@ -53650,6 +53635,7 @@ function withOptionalPhone(fields$1, includePhone) {
|
|
|
53650
53635
|
|
|
53651
53636
|
//#endregion
|
|
53652
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.";
|
|
53653
53639
|
const NEWSLETTER_SIGNUPS_PAUSED_MESSAGE = "We can’t accept signups right now. Please try again later.";
|
|
53654
53640
|
function newsletterBlockSubmissionMessage(target) {
|
|
53655
53641
|
if (target.tag === "block-source") {
|
|
@@ -53709,6 +53695,7 @@ const newsletterSourceCommonSchema = z.object({
|
|
|
53709
53695
|
siteId: z.string().optional(),
|
|
53710
53696
|
apiBaseUrl: z.string().optional(),
|
|
53711
53697
|
mailingList: mailingListContextSchema.optional(),
|
|
53698
|
+
interactionContext: blockInteractionContextSchema.optional(),
|
|
53712
53699
|
targeting: mailingListTargetingSchema.optional(),
|
|
53713
53700
|
buttonVariant: newsletterButtonVariantSchema.nullable().optional(),
|
|
53714
53701
|
spamProtectionEnabled: z.boolean().optional(),
|
|
@@ -53765,6 +53752,7 @@ const newsletterHydrationSchema = z.object({
|
|
|
53765
53752
|
token: signedMailingListSourceTokenSchema
|
|
53766
53753
|
})
|
|
53767
53754
|
}),
|
|
53755
|
+
z.object({ tag: z.literal("demo") }),
|
|
53768
53756
|
z.object({ tag: z.literal("preview") }),
|
|
53769
53757
|
z.object({
|
|
53770
53758
|
tag: z.literal("unpublished-preview"),
|
|
@@ -53793,25 +53781,28 @@ const newsletterIslandMetaCodec = createZodCodec(z.object({
|
|
|
53793
53781
|
apiBaseUrl: z.string().optional()
|
|
53794
53782
|
}));
|
|
53795
53783
|
const newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
|
|
53796
|
-
function
|
|
53797
|
-
|
|
53798
|
-
const form$1 = context?.tag === "configured" ? context.form : {
|
|
53784
|
+
function newsletterGlobalForm(context) {
|
|
53785
|
+
return context?.tag === "configured" ? context.form : {
|
|
53799
53786
|
fields: { preset: "emailOnly" },
|
|
53800
53787
|
includeOptionalPhone: false,
|
|
53801
53788
|
buttonLabel: "Subscribe",
|
|
53802
53789
|
successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
|
|
53803
53790
|
privacyNote: null
|
|
53804
53791
|
};
|
|
53792
|
+
}
|
|
53793
|
+
function buildNewsletterDisplay(source) {
|
|
53794
|
+
const context = source.mailingList;
|
|
53795
|
+
const form$1 = newsletterGlobalForm(context);
|
|
53805
53796
|
const targeting = source.targeting ?? { mode: "default" };
|
|
53806
53797
|
const assessment = assessMailingListTargeting(context, targeting);
|
|
53807
53798
|
const choices = resolveRuntimeChoices(assessment);
|
|
53808
53799
|
return {
|
|
53809
53800
|
kind: "newsletter-form",
|
|
53810
53801
|
...source.lookSlots ? { lookSlots: source.lookSlots } : {},
|
|
53811
|
-
availability: assessment.tag === "available" ? "ready" : "unavailable",
|
|
53802
|
+
availability: source.interactionContext?.kind === "demo" || assessment.tag === "available" ? "ready" : "unavailable",
|
|
53812
53803
|
className: source.className ?? null,
|
|
53813
53804
|
buttonLabel: form$1.buttonLabel,
|
|
53814
|
-
successMessage: form$1.successMessage,
|
|
53805
|
+
successMessage: source.interactionContext?.kind === "demo" ? NEWSLETTER_DEMO_MESSAGE : form$1.successMessage,
|
|
53815
53806
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
53816
53807
|
privacyNote: form$1.privacyNote,
|
|
53817
53808
|
fields: getGlobalFormFields(form$1, source),
|
|
@@ -53834,12 +53825,13 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
53834
53825
|
setupRevision: source.mailingList?.tag === "configured" ? source.mailingList.revision : null,
|
|
53835
53826
|
choiceProvider: targeting.mode === "custom" ? targeting.provider : null,
|
|
53836
53827
|
choicePresentation: presentation.tag,
|
|
53837
|
-
spamProtectionEnabled: source.spamProtectionEnabled
|
|
53828
|
+
spamProtectionEnabled: source.interactionContext?.kind === "demo" ? false : source.spamProtectionEnabled
|
|
53838
53829
|
}
|
|
53839
53830
|
};
|
|
53840
53831
|
}
|
|
53841
53832
|
});
|
|
53842
53833
|
function projectNewsletterFormHydrationTarget(source) {
|
|
53834
|
+
if (source.interactionContext?.kind === "demo") return { tag: "demo" };
|
|
53843
53835
|
switch (source.source) {
|
|
53844
53836
|
case "block": {
|
|
53845
53837
|
switch (source.newsletterBlockSubmission.tag) {
|
|
@@ -55907,10 +55899,6 @@ function normalizeBlockContent(definition$1, content) {
|
|
|
55907
55899
|
...Object.fromEntries(Object.entries(normalized).filter(([key]) => owned.has(key)))
|
|
55908
55900
|
};
|
|
55909
55901
|
}
|
|
55910
|
-
const REGISTRY_SYMBOL = Symbol.for("@riverbankcms/blocks/system/definitions");
|
|
55911
|
-
const isBlocksTestRuntime = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.RIVERBANK_BLOCKS_TEST === "1";
|
|
55912
|
-
const globalScope = globalThis;
|
|
55913
|
-
const blockStore = isBlocksTestRuntime ? new Map() : globalScope[REGISTRY_SYMBOL] ??= new Map();
|
|
55914
55902
|
function ensureDefaults() {
|
|
55915
55903
|
ensureSystemBlockDefinitionsRegistered();
|
|
55916
55904
|
}
|
|
@@ -60289,8 +60277,7 @@ function buildStandardBookingPaymentDisclosure(input, payment, amount) {
|
|
|
60289
60277
|
...discountCode ? { discountCode } : {},
|
|
60290
60278
|
...amount,
|
|
60291
60279
|
...selectedCollectionOptionKind ? { selectedCollectionOptionKind } : {},
|
|
60292
|
-
shownTerms: input.shownTerms ?? snapshotBookingShownTerms(payment, input.promisedDiscountId)
|
|
60293
|
-
altchaSolution: input.altchaSolution ?? null
|
|
60280
|
+
shownTerms: input.shownTerms ?? snapshotBookingShownTerms(payment, input.promisedDiscountId)
|
|
60294
60281
|
};
|
|
60295
60282
|
}
|
|
60296
60283
|
function validateBookingSlidingSelection(service, data) {
|
|
@@ -60643,8 +60630,7 @@ function buildEventRegistrationSourceProps(input) {
|
|
|
60643
60630
|
showVenue: input.showVenue,
|
|
60644
60631
|
showCapacity: input.showCapacity,
|
|
60645
60632
|
successMessage: input.successMessage,
|
|
60646
|
-
buttonVariant: input.buttonVariant
|
|
60647
|
-
spamProtectionEnabled: input.spamProtectionEnabled
|
|
60633
|
+
buttonVariant: input.buttonVariant
|
|
60648
60634
|
};
|
|
60649
60635
|
}
|
|
60650
60636
|
|
|
@@ -60734,7 +60720,6 @@ const bookingSourceSchema = z.object({
|
|
|
60734
60720
|
successMessage: z.string().nullable().optional(),
|
|
60735
60721
|
form: bookingSourceFormSchema.nullable().optional(),
|
|
60736
60722
|
services: bookingServicesSourceSchema.nullable().optional(),
|
|
60737
|
-
spamProtectionEnabled: z.boolean().optional(),
|
|
60738
60723
|
className: z.string().nullable().optional()
|
|
60739
60724
|
});
|
|
60740
60725
|
const bookingDisplaySchema = z.object({
|
|
@@ -60763,8 +60748,7 @@ const bookingHydrationSchema = z.object({
|
|
|
60763
60748
|
rebookContext: z.object({ kind: z.literal("portal_rebook") }).nullable().optional(),
|
|
60764
60749
|
form: bookingConfigSchema.nullable(),
|
|
60765
60750
|
services: z.array(bookingServiceSchema),
|
|
60766
|
-
serviceCategories: z.array(bookingServiceCategorySchema).optional()
|
|
60767
|
-
spamProtectionEnabled: z.boolean().optional()
|
|
60751
|
+
serviceCategories: z.array(bookingServiceCategorySchema).optional()
|
|
60768
60752
|
});
|
|
60769
60753
|
const bookingRenderSchema = z.object({
|
|
60770
60754
|
display: bookingDisplaySchema,
|
|
@@ -60815,8 +60799,7 @@ const bookingFormBlockRuntime = defineClientOwnedBlockRuntime({
|
|
|
60815
60799
|
rebookContext: source.rebookContext ?? null,
|
|
60816
60800
|
form: form$1,
|
|
60817
60801
|
services,
|
|
60818
|
-
serviceCategories: normalizeBookingServiceCategories(source.services)
|
|
60819
|
-
spamProtectionEnabled: source.spamProtectionEnabled
|
|
60802
|
+
serviceCategories: normalizeBookingServiceCategories(source.services)
|
|
60820
60803
|
}
|
|
60821
60804
|
};
|
|
60822
60805
|
}
|
|
@@ -62975,13 +62958,12 @@ function previewCardContent(item, props$1, datesBySeries, typeLabel) {
|
|
|
62975
62958
|
}
|
|
62976
62959
|
function nativeRunCardContent(item, content, props$1) {
|
|
62977
62960
|
const open$1 = resolveWholeSeriesBookingPhase(item.run.run, props$1.now).kind === "open";
|
|
62961
|
+
const path$3 = content.titleLink?.href ?? null;
|
|
62978
62962
|
return {
|
|
62979
62963
|
...content,
|
|
62980
|
-
href: item.path,
|
|
62981
|
-
titleLink: undefined,
|
|
62982
62964
|
action: {
|
|
62983
|
-
label: open$1 ?
|
|
62984
|
-
...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 } : {}
|
|
62985
62967
|
}
|
|
62986
62968
|
};
|
|
62987
62969
|
}
|
|
@@ -65660,6 +65642,16 @@ function EventRegistrationShell({ display }) {
|
|
|
65660
65642
|
}
|
|
65661
65643
|
var event_registration_server_default = EventRegistrationSSR;
|
|
65662
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
|
+
|
|
65663
65655
|
//#endregion
|
|
65664
65656
|
//#region ../blocks/src/system/runtime/nodes/form.fields.tsx
|
|
65665
65657
|
function fieldBasics(field) {
|
|
@@ -65842,14 +65834,15 @@ function FormFieldGroups({ groups, lookSlots }) {
|
|
|
65842
65834
|
children: group.fields.map(renderField$1)
|
|
65843
65835
|
}, group.key) : renderField$1(group.field)) });
|
|
65844
65836
|
}
|
|
65845
|
-
function FormSubmitAction({ lookSlots, submitLabel, disabled }) {
|
|
65837
|
+
function FormSubmitAction({ lookSlots, submitLabel, disabled, submission }) {
|
|
65846
65838
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65847
65839
|
className: "fb-actions",
|
|
65848
65840
|
...listLookSlot({ lookSlots }, "actions"),
|
|
65849
65841
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
65850
65842
|
className: "fb-actions-inner",
|
|
65851
65843
|
...listLookSlot({ lookSlots }, "inline"),
|
|
65852
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
65844
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
65845
|
+
submission,
|
|
65853
65846
|
...listLookSlot({ lookSlots }, "action"),
|
|
65854
65847
|
type: "submit",
|
|
65855
65848
|
variant: "primary",
|
|
@@ -65914,6 +65907,7 @@ const FormNodeSSR = ({ blockId, lookSlots, value, submitLabel, successMessage, c
|
|
|
65914
65907
|
lookSlots: display.lookSlots
|
|
65915
65908
|
}),
|
|
65916
65909
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormSubmitAction, {
|
|
65910
|
+
submission: { kind: "waiting" },
|
|
65917
65911
|
submitLabel: display.submitLabel,
|
|
65918
65912
|
lookSlots: display.lookSlots
|
|
65919
65913
|
})
|
|
@@ -65978,7 +65972,7 @@ function NewsletterExtraField({ field, disabled, error: error$1, lookSlots }) {
|
|
|
65978
65972
|
});
|
|
65979
65973
|
}
|
|
65980
65974
|
/** The email field and submit button sharing one input-styled shell. */
|
|
65981
|
-
function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, error: error$1 }) {
|
|
65975
|
+
function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, submission, disabled, error: error$1 }) {
|
|
65982
65976
|
const inputId = inputIdFor(field);
|
|
65983
65977
|
const errorId = `${inputId}-error`;
|
|
65984
65978
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
@@ -66005,7 +65999,8 @@ function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, err
|
|
|
66005
65999
|
messageId: errorId
|
|
66006
66000
|
})
|
|
66007
66001
|
}),
|
|
66008
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66002
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66003
|
+
submission,
|
|
66009
66004
|
type: "submit",
|
|
66010
66005
|
variant: buttonVariant,
|
|
66011
66006
|
size: "md",
|
|
@@ -66024,7 +66019,7 @@ function NewsletterEmailEntry({ field, buttonVariant, buttonLabel, disabled, err
|
|
|
66024
66019
|
* The submit action: joined to the email field when the preset has one
|
|
66025
66020
|
* (every current preset does), otherwise a plain themed button.
|
|
66026
66021
|
*/
|
|
66027
|
-
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 }) {
|
|
66028
66023
|
if (lookSlots) {
|
|
66029
66024
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [emailField$1 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NewsletterExtraField, {
|
|
66030
66025
|
field: emailField$1,
|
|
@@ -66033,7 +66028,8 @@ function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVarian
|
|
|
66033
66028
|
error: error$1
|
|
66034
66029
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
66035
66030
|
...listLookSlot({ lookSlots }, "actions"),
|
|
66036
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66031
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66032
|
+
submission,
|
|
66037
66033
|
...listLookSlot({ lookSlots }, "action"),
|
|
66038
66034
|
type: "submit",
|
|
66039
66035
|
variant: buttonVariant,
|
|
@@ -66048,13 +66044,15 @@ function NewsletterSubmitRow({ emailField: emailField$1, lookSlots, buttonVarian
|
|
|
66048
66044
|
field: emailField$1,
|
|
66049
66045
|
buttonVariant,
|
|
66050
66046
|
buttonLabel,
|
|
66047
|
+
submission,
|
|
66051
66048
|
disabled,
|
|
66052
66049
|
error: error$1
|
|
66053
66050
|
});
|
|
66054
66051
|
}
|
|
66055
66052
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
66056
66053
|
className: "newsletter-submit",
|
|
66057
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
66054
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ProtectedSubmitButton, {
|
|
66055
|
+
submission,
|
|
66058
66056
|
type: "submit",
|
|
66059
66057
|
variant: buttonVariant,
|
|
66060
66058
|
size: "md",
|
|
@@ -66153,6 +66151,7 @@ function NewsletterFormSSR(props$1) {
|
|
|
66153
66151
|
}, field.id))
|
|
66154
66152
|
}) : null,
|
|
66155
66153
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(NewsletterSubmitRow, {
|
|
66154
|
+
submission: { kind: "waiting" },
|
|
66156
66155
|
lookSlots: display.lookSlots,
|
|
66157
66156
|
emailField: emailField$1,
|
|
66158
66157
|
buttonVariant: display.buttonVariant,
|
|
@@ -68992,10 +68991,15 @@ function arrangementRuntime(content) {
|
|
|
68992
68991
|
const value = parseSurfaceTree(content._arrangementLooks);
|
|
68993
68992
|
return isObjectRecord(value) && isObjectRecord(value.byMode) && Array.isArray(value.available) && Array.isArray(value.rhythm) ? restoreArrangementRuntime(value) : null;
|
|
68994
68993
|
}
|
|
68995
|
-
/**
|
|
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
|
+
*/
|
|
68996
68998
|
function restoreCompiledLook(look) {
|
|
68999
|
+
const transported = look;
|
|
68997
69000
|
return {
|
|
68998
69001
|
...look,
|
|
69002
|
+
slotRoles: transported.slotRoles ?? look.look.structure.slotRoles ?? {},
|
|
68999
69003
|
itemSurfaces: Object.fromEntries(Object.entries(look.itemSurfaces).map(([slot, surface]) => [slot, parseResolvedSurface(surface)])),
|
|
69000
69004
|
...look.roleSurfaces ? { roleSurfaces: {
|
|
69001
69005
|
card: parseResolvedSurface(look.roleSurfaces.card),
|
|
@@ -69048,6 +69052,7 @@ function planArrangementContent(blockKind, manifest, content, audience) {
|
|
|
69048
69052
|
});
|
|
69049
69053
|
return {
|
|
69050
69054
|
...activeContent,
|
|
69055
|
+
...arrangementPhotoTreatmentContent(activeContent, effective.look),
|
|
69051
69056
|
...mode !== null ? { variant: mode } : {},
|
|
69052
69057
|
...effectiveContent,
|
|
69053
69058
|
...photoContent,
|
|
@@ -69069,6 +69074,16 @@ function planArrangementContent(blockKind, manifest, content, audience) {
|
|
|
69069
69074
|
blockLook: effective.look.id
|
|
69070
69075
|
};
|
|
69071
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
|
+
}
|
|
69072
69087
|
/** Widget section hooks use the theme; hero background geometry never travels to list islands. */
|
|
69073
69088
|
function arrangementContentSlots(blockKind) {
|
|
69074
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]));
|
|
@@ -69274,7 +69289,7 @@ function resolveArrangementRoleSurfaces(look, runtime, background) {
|
|
|
69274
69289
|
...look,
|
|
69275
69290
|
ground,
|
|
69276
69291
|
roleSurfaces,
|
|
69277
|
-
itemSurfaces: resolveLookSlotSurfaces(look
|
|
69292
|
+
itemSurfaces: resolveLookSlotSurfaces(look, look.itemRoles, roleSurfaces)
|
|
69278
69293
|
};
|
|
69279
69294
|
}
|
|
69280
69295
|
/** The arrangement key is resolved once by planBlock, including pinned Looks. */
|
|
@@ -69282,7 +69297,7 @@ function heroPhotoGround(entry) {
|
|
|
69282
69297
|
return entry.kind === "renderable" && entry.block.kind === "block.hero" ? { paintsGround: heroPhotoPaintsGround(entry.effectiveArrangementKey ?? undefined) } : undefined;
|
|
69283
69298
|
}
|
|
69284
69299
|
/** Header consumers receive the opening that the public render plan actually admits. */
|
|
69285
|
-
function resolvePageOpeningSection(page, options
|
|
69300
|
+
function resolvePageOpeningSection(page, options) {
|
|
69286
69301
|
const presentation = toPresentationPage(page);
|
|
69287
69302
|
if (!presentation) return null;
|
|
69288
69303
|
const opening = buildPageRenderPlan({
|
|
@@ -69296,11 +69311,12 @@ function resolvePageOpeningSection(page, options = {}) {
|
|
|
69296
69311
|
blockOverrides: undefined
|
|
69297
69312
|
}).entries[0];
|
|
69298
69313
|
if (!opening) return null;
|
|
69299
|
-
const
|
|
69314
|
+
const appearance = resolveCompiledSectionContextFromContent(opening.renderableContent, expandPalette(options.theme.palette), heroPhotoGround(opening));
|
|
69300
69315
|
return {
|
|
69301
69316
|
blockKind: opening.block.kind,
|
|
69302
69317
|
content: opening.renderableContent,
|
|
69303
|
-
|
|
69318
|
+
appearance,
|
|
69319
|
+
photoPlacement: appearance.openingPhotoBehindText ? "behind-text" : "none"
|
|
69304
69320
|
};
|
|
69305
69321
|
}
|
|
69306
69322
|
|
|
@@ -80032,7 +80048,7 @@ async function loadConfig(configPath, output) {
|
|
|
80032
80048
|
return { errorMessage: "No config path provided." };
|
|
80033
80049
|
}
|
|
80034
80050
|
try {
|
|
80035
|
-
const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-
|
|
80051
|
+
const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-BcATOVmw.mjs");
|
|
80036
80052
|
const rawConfig = await loadConfigFile$1(configPath);
|
|
80037
80053
|
const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);
|
|
80038
80054
|
if (!parsed.success) {
|
|
@@ -82790,6 +82806,7 @@ function cancelledRunInput(run) {
|
|
|
82790
82806
|
status: "cancelled",
|
|
82791
82807
|
visibility: run.visibility,
|
|
82792
82808
|
capacity: run.capacity,
|
|
82809
|
+
waitlistMode: run.waitlistMode,
|
|
82793
82810
|
bookingOffer: run.bookingOffer,
|
|
82794
82811
|
venueRef: run.venueRef,
|
|
82795
82812
|
formRef: run.formRef,
|
|
@@ -95596,257 +95613,6 @@ async function retryResendRequest(apiClient, { domainId, options }) {
|
|
|
95596
95613
|
}
|
|
95597
95614
|
}
|
|
95598
95615
|
|
|
95599
|
-
//#endregion
|
|
95600
|
-
//#region ../api/src/admin.ts
|
|
95601
|
-
async function startImpersonation(apiClient, body, options) {
|
|
95602
|
-
try {
|
|
95603
|
-
return unwrapResponse(await apiClient({
|
|
95604
|
-
endpoint: "adminStartImpersonation",
|
|
95605
|
-
body,
|
|
95606
|
-
options
|
|
95607
|
-
}));
|
|
95608
|
-
} catch (error$1) {
|
|
95609
|
-
return normalizeApiError(error$1, "Failed to start impersonation session");
|
|
95610
|
-
}
|
|
95611
|
-
}
|
|
95612
|
-
async function stopImpersonation(apiClient, body, options) {
|
|
95613
|
-
try {
|
|
95614
|
-
return unwrapResponse(await apiClient({
|
|
95615
|
-
endpoint: "adminStopImpersonation",
|
|
95616
|
-
body,
|
|
95617
|
-
options
|
|
95618
|
-
}));
|
|
95619
|
-
} catch (error$1) {
|
|
95620
|
-
return normalizeApiError(error$1, "Failed to stop impersonation session");
|
|
95621
|
-
}
|
|
95622
|
-
}
|
|
95623
|
-
async function assignAdminRole(apiClient, body, options) {
|
|
95624
|
-
try {
|
|
95625
|
-
return unwrapResponse(await apiClient({
|
|
95626
|
-
endpoint: "adminAssignRole",
|
|
95627
|
-
body,
|
|
95628
|
-
options
|
|
95629
|
-
}));
|
|
95630
|
-
} catch (error$1) {
|
|
95631
|
-
return normalizeApiError(error$1, "Failed to assign admin role");
|
|
95632
|
-
}
|
|
95633
|
-
}
|
|
95634
|
-
async function revokeAdminRole(apiClient, body, options) {
|
|
95635
|
-
try {
|
|
95636
|
-
return unwrapResponse(await apiClient({
|
|
95637
|
-
endpoint: "adminRevokeRole",
|
|
95638
|
-
body,
|
|
95639
|
-
options
|
|
95640
|
-
}));
|
|
95641
|
-
} catch (error$1) {
|
|
95642
|
-
return normalizeApiError(error$1, "Failed to revoke admin role");
|
|
95643
|
-
}
|
|
95644
|
-
}
|
|
95645
|
-
async function adminChangePlan(apiClient, body, options) {
|
|
95646
|
-
try {
|
|
95647
|
-
return unwrapResponse(await apiClient({
|
|
95648
|
-
endpoint: "adminChangePlan",
|
|
95649
|
-
body: {
|
|
95650
|
-
...body,
|
|
95651
|
-
attemptId: body.attemptId ?? crypto.randomUUID()
|
|
95652
|
-
},
|
|
95653
|
-
options
|
|
95654
|
-
}));
|
|
95655
|
-
} catch (error$1) {
|
|
95656
|
-
return normalizeApiError(error$1, "Failed to update billing plan");
|
|
95657
|
-
}
|
|
95658
|
-
}
|
|
95659
|
-
async function listAdminInvites(apiClient, params = {}, options) {
|
|
95660
|
-
try {
|
|
95661
|
-
return unwrapResponse(await apiClient({
|
|
95662
|
-
endpoint: "adminListInvites",
|
|
95663
|
-
params,
|
|
95664
|
-
options
|
|
95665
|
-
}));
|
|
95666
|
-
} catch (error$1) {
|
|
95667
|
-
return normalizeApiError(error$1, "Failed to load invites");
|
|
95668
|
-
}
|
|
95669
|
-
}
|
|
95670
|
-
async function createAdminInvite(apiClient, body, options) {
|
|
95671
|
-
try {
|
|
95672
|
-
return unwrapResponse(await apiClient({
|
|
95673
|
-
endpoint: "adminCreateInvite",
|
|
95674
|
-
body,
|
|
95675
|
-
options
|
|
95676
|
-
}));
|
|
95677
|
-
} catch (error$1) {
|
|
95678
|
-
return normalizeApiError(error$1, "Failed to create invite");
|
|
95679
|
-
}
|
|
95680
|
-
}
|
|
95681
|
-
async function revokeAdminInvite(apiClient, inviteId, options) {
|
|
95682
|
-
try {
|
|
95683
|
-
return unwrapResponse(await apiClient({
|
|
95684
|
-
endpoint: "adminRevokeInvite",
|
|
95685
|
-
params: { inviteId },
|
|
95686
|
-
options
|
|
95687
|
-
}));
|
|
95688
|
-
} catch (error$1) {
|
|
95689
|
-
return normalizeApiError(error$1, "Failed to revoke invite");
|
|
95690
|
-
}
|
|
95691
|
-
}
|
|
95692
|
-
async function createAdminUser(apiClient, body, options) {
|
|
95693
|
-
try {
|
|
95694
|
-
return unwrapResponse(await apiClient({
|
|
95695
|
-
endpoint: "adminCreateUser",
|
|
95696
|
-
body,
|
|
95697
|
-
options
|
|
95698
|
-
}));
|
|
95699
|
-
} catch (error$1) {
|
|
95700
|
-
return normalizeApiError(error$1, "Failed to create user");
|
|
95701
|
-
}
|
|
95702
|
-
}
|
|
95703
|
-
async function adminDeleteSite(apiClient, siteId, options) {
|
|
95704
|
-
try {
|
|
95705
|
-
return unwrapResponse(await apiClient({
|
|
95706
|
-
endpoint: "adminDeleteSite",
|
|
95707
|
-
params: { siteId },
|
|
95708
|
-
options
|
|
95709
|
-
}));
|
|
95710
|
-
} catch (error$1) {
|
|
95711
|
-
return normalizeApiError(error$1, "Failed to delete site");
|
|
95712
|
-
}
|
|
95713
|
-
}
|
|
95714
|
-
async function adminDeleteUser(apiClient, userId, params = {}, options) {
|
|
95715
|
-
const forceQuery = params.force ? { force: "true" } : {};
|
|
95716
|
-
try {
|
|
95717
|
-
return unwrapResponse(await apiClient({
|
|
95718
|
-
endpoint: "adminDeleteUser",
|
|
95719
|
-
params: {
|
|
95720
|
-
userId,
|
|
95721
|
-
...forceQuery
|
|
95722
|
-
},
|
|
95723
|
-
options
|
|
95724
|
-
}));
|
|
95725
|
-
} catch (error$1) {
|
|
95726
|
-
return normalizeApiError(error$1, "Failed to delete user");
|
|
95727
|
-
}
|
|
95728
|
-
}
|
|
95729
|
-
async function listAllowedDomains(apiClient, params = {}, options) {
|
|
95730
|
-
try {
|
|
95731
|
-
return unwrapResponse(await apiClient({
|
|
95732
|
-
endpoint: "adminListAllowedDomains",
|
|
95733
|
-
params,
|
|
95734
|
-
options
|
|
95735
|
-
}));
|
|
95736
|
-
} catch (error$1) {
|
|
95737
|
-
return normalizeApiError(error$1, "Failed to load allowed domains");
|
|
95738
|
-
}
|
|
95739
|
-
}
|
|
95740
|
-
async function addAllowedDomain(apiClient, body, options) {
|
|
95741
|
-
try {
|
|
95742
|
-
return unwrapResponse(await apiClient({
|
|
95743
|
-
endpoint: "adminAddAllowedDomain",
|
|
95744
|
-
body,
|
|
95745
|
-
options
|
|
95746
|
-
}));
|
|
95747
|
-
} catch (error$1) {
|
|
95748
|
-
return normalizeApiError(error$1, "Failed to add domain");
|
|
95749
|
-
}
|
|
95750
|
-
}
|
|
95751
|
-
async function deleteAllowedDomain(apiClient, domainId, options) {
|
|
95752
|
-
try {
|
|
95753
|
-
return unwrapResponse(await apiClient({
|
|
95754
|
-
endpoint: "adminDeleteAllowedDomain",
|
|
95755
|
-
params: { domainId },
|
|
95756
|
-
options
|
|
95757
|
-
}));
|
|
95758
|
-
} catch (error$1) {
|
|
95759
|
-
return normalizeApiError(error$1, "Failed to remove domain");
|
|
95760
|
-
}
|
|
95761
|
-
}
|
|
95762
|
-
async function listGscPropertiesAdmin(apiClient, options) {
|
|
95763
|
-
try {
|
|
95764
|
-
return unwrapResponse(await apiClient({
|
|
95765
|
-
endpoint: "listGscPropertiesAdmin",
|
|
95766
|
-
options
|
|
95767
|
-
}));
|
|
95768
|
-
} catch (error$1) {
|
|
95769
|
-
return normalizeApiError(error$1, "Failed to load GSC properties");
|
|
95770
|
-
}
|
|
95771
|
-
}
|
|
95772
|
-
async function setGscPersistEnabled(apiClient, body, options) {
|
|
95773
|
-
try {
|
|
95774
|
-
return unwrapResponse(await apiClient({
|
|
95775
|
-
endpoint: "adminGscMetaPersist",
|
|
95776
|
-
body,
|
|
95777
|
-
options
|
|
95778
|
-
}));
|
|
95779
|
-
} catch (error$1) {
|
|
95780
|
-
return normalizeApiError(error$1, "Failed to update GSC persist toggle");
|
|
95781
|
-
}
|
|
95782
|
-
}
|
|
95783
|
-
async function startGscVerification(apiClient, body, options) {
|
|
95784
|
-
try {
|
|
95785
|
-
return unwrapResponse(await apiClient({
|
|
95786
|
-
endpoint: "adminGscVerifyStart",
|
|
95787
|
-
body,
|
|
95788
|
-
options
|
|
95789
|
-
}));
|
|
95790
|
-
} catch (error$1) {
|
|
95791
|
-
return normalizeApiError(error$1, "Failed to start GSC verification");
|
|
95792
|
-
}
|
|
95793
|
-
}
|
|
95794
|
-
async function confirmGscVerification(apiClient, body, options) {
|
|
95795
|
-
try {
|
|
95796
|
-
return unwrapResponse(await apiClient({
|
|
95797
|
-
endpoint: "adminGscVerifyConfirm",
|
|
95798
|
-
body,
|
|
95799
|
-
options
|
|
95800
|
-
}));
|
|
95801
|
-
} catch (error$1) {
|
|
95802
|
-
return normalizeApiError(error$1, "Failed to confirm GSC verification");
|
|
95803
|
-
}
|
|
95804
|
-
}
|
|
95805
|
-
async function runGscIngestionForSite(apiClient, body, options) {
|
|
95806
|
-
try {
|
|
95807
|
-
return unwrapResponse(await apiClient({
|
|
95808
|
-
endpoint: "adminSeoIngestRun",
|
|
95809
|
-
body,
|
|
95810
|
-
options
|
|
95811
|
-
}));
|
|
95812
|
-
} catch (error$1) {
|
|
95813
|
-
return normalizeApiError(error$1, "Failed to run GSC ingestion");
|
|
95814
|
-
}
|
|
95815
|
-
}
|
|
95816
|
-
async function getPriceOverride(apiClient, params, options) {
|
|
95817
|
-
try {
|
|
95818
|
-
return unwrapResponse(await apiClient({
|
|
95819
|
-
endpoint: "adminGetPriceOverride",
|
|
95820
|
-
params,
|
|
95821
|
-
options
|
|
95822
|
-
}));
|
|
95823
|
-
} catch (error$1) {
|
|
95824
|
-
return normalizeApiError(error$1, "Failed to get price override");
|
|
95825
|
-
}
|
|
95826
|
-
}
|
|
95827
|
-
async function upsertPriceOverride(apiClient, body, options) {
|
|
95828
|
-
try {
|
|
95829
|
-
return unwrapResponse(await apiClient({
|
|
95830
|
-
endpoint: "adminUpsertPriceOverride",
|
|
95831
|
-
body,
|
|
95832
|
-
options
|
|
95833
|
-
}));
|
|
95834
|
-
} catch (error$1) {
|
|
95835
|
-
return normalizeApiError(error$1, "Failed to set custom price");
|
|
95836
|
-
}
|
|
95837
|
-
}
|
|
95838
|
-
async function deletePriceOverride(apiClient, body, options) {
|
|
95839
|
-
try {
|
|
95840
|
-
return unwrapResponse(await apiClient({
|
|
95841
|
-
endpoint: "adminDeletePriceOverride",
|
|
95842
|
-
body,
|
|
95843
|
-
options
|
|
95844
|
-
}));
|
|
95845
|
-
} catch (error$1) {
|
|
95846
|
-
return normalizeApiError(error$1, "Failed to clear custom price");
|
|
95847
|
-
}
|
|
95848
|
-
}
|
|
95849
|
-
|
|
95850
95616
|
//#endregion
|
|
95851
95617
|
//#region ../api/src/auth.ts
|
|
95852
95618
|
function extractErrorMessage(error$1, fallback) {
|