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.
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { $ as createFormRef, $r as mapDrawingStyle, An as walkAndCollectImageAttrs, Ar as introCompositionTreatmentValues, At as generateHeaderScrollTreatmentStyles, Bn as getImageUrl, Br as serializeSurfaceTree, Bt as getComponentBorderWidthPx, C as sortRecord, Cn as boxBackgroundOverlaySchema, Cr as defineBlockDesignCapability, Ct as deriveSiteStyleBlockPolicy, D as mapEventCommandContent, Dn as stripStaleTransitionStyleGroup, Dr as eyebrowTreatmentValues, Dt as getGradientPreset, En as siteChromeBackgroundOverrideOwner, Er as eventListTreatmentValues, Et as gradientToCss, F as pageIdentifierForBlockCommand, Fn as isExplicitRectCrop, Fr as toNonEmptyReadonlyArray, Ft as BREAKPOINT_MD, G as ianaTimezoneSchema, Gn as buildRenderableMediaAssetIndex, Gr as surfaceForegroundValue, Gt as themeButtonExtraClassesWithTrailingIcon, H as bookingPaymentTermsSchema, Hn as mediaSchema, Hr as surfaceForegroundDeclarations, Ht as ICON_CONFIG, I as pageIdentifierForCommand, In as parseAspectRatioValue, Ir as visibleHeadingDecorationFamilyValues, It as BREAKPOINT_SM, J as createCommandRef, Jn as mediaIdentifierSchema, Jr as backgroundColorStyle, Jt as parseThemeForPersistence, K as createBlockRef, Kn as resolveManagedMediaReference, Kr as surfaceInkDeclarations, Kt as themeButtonSizeClassName, L as pagePathForCommand, Ln as resolveMediaTransformForAspect, Lr as parseResolvedSurface, Lt as BREAKPOINT_XL, M as blockIdentifierForCommand, Mn as looksLikeUuid, Mr as offeringsPreviewCompositionTreatmentValues, Mt as getHeaderPaintTargets, N as blockOrderIdentifiersForCommand, Nn as rotateNormalizedPoint, Nr as testimonialsCompositionTreatmentValues, Nt as renderHeaderPaintTargetRules, On as collectPortableMediaReferencesFromContent, Or as featureCardCompositionTreatmentValues, Ot as parseGradientPresetId, P as entryIdentifierForCommand, Pn as normalizeWidthCandidates, Pr as tileTreatmentValues, Pt as BREAKPOINT_LG, Q as createFooterRef, Qr as textColorStyle, Qt as normalizeCardRole, R as hasConfiguredBookingVertical, Rn as getDirectImageUrlForRelativePath, Rr as parseSurfaceTree, Rt as MQ_MD_DOWN, S as venueManagementFields, Sn as sectionForegroundBackground, Sr as assertNever$10, St as resolvePublishedLook, Tn as runtimeBoxBackgroundSchema, Tr as defineNoBlockDesignCapability, Tt as compiledRuntimeStyleFieldNames, U as require_jsx_runtime, Un as persistableMediaSchema, Ur as surfaceForegroundInputFromResolved, Ut as generateDefaultButtonSystem, V as bookingPaymentCollectionOptionSchema, Vn as isSiteScopedDirectImageStoragePath, Vr as surfaceDecorationColors, Vt as getComponentShadowVar, W as require_react, Wn as runtimeMediaSchema, Wr as surfaceForegroundStyle, Wt as parseThemeButtonVariantId, X as createEventCategoryRef, Xn as parseCanonicalMediaIdentifier, Xr as mergeStyles, Xt as cardRoleSchema, Y as createContentEntryRef, Yn as buildMediaIdentifierFromFilename, Yr as borderColorStyle, Yt as renderCssDeclarations, Z as createEventSeriesRef, Zn as parseMediaIdentifier, Zr as rgbColorValue, Zt as cardVariantRoleValues, _i as __toESM, _n as deriveSectionGround, _t as resolveLookSlotSurfaces, ai as PUBLIC_BUTTON_ROLES, b as isEventVisibility, bn as resolveSectionBackground, bt as resolveEffectiveArrangement, c as customLinkSchema$1, ci as resolveSurfaceForeground, cn as generateNavLinkCSS, ct as headerLeafTextColor, d as internalLinkSchema, di as defaultThemeTokens, dr as parseSafeDownloadFilename, ei as opaqueSurfaceDeclarations, er as deriveVideoSlotPolicy, et as createNavigationRef, f as internalResolvedLinkSchema, fi as expandPalette, fn as headerNeedsPhotoShade, fr as defineBlockDesignMetadata, ft as mergeHeaderNavTypographyPreference, g as linkSchema, gi as __commonJSMin, gn as sectionFactsForContent, gr as arrangementModes, gt as resolveItemSurface, h as isResolvedInternalLinkEntityType, hi as parseBlockColorToken, hn as composeBoundary, hr as cardListKnobBlocks, ht as arrangementSlotNames, ii as resolveTokenOrCssColorValue, ir as asRecord, it as refSlug, j as eventManagementTiming, jn as deleteEnvSpecificKeys, jr as makeBoundaryId, jt as generateMobileOverlayBackdropFilterFix, kn as summarizePortableMediaReferences, kr as headingDecorationColorTokenValues, kt as themeSchema, l as entryLinkSchema$1, li as surfaceInkPublication, lr as classifyKnownMimeType, lt as transparentHeaderForegroundInput, mi as parseThemeColorToken, mn as boundaryLayout, mr as cardListFamilyBlocks, mt as arrangementLookHooks, ni as resolveOnColorForThemeToken, o as classifySdkEventBookingOffer, oi as selectLogoVariant, on as footerForegroundCandidates, or as parseRelativeStoragePath, ot as effectiveHeaderNavLinkStyle, p as internalRouteOnlyLinkSchema, pi as getTextColorForBackground, pn as headerRootPaint, pr as resolveEffectiveKnobs, pt as readHeaderNavFontSizePreference, q as createBlocksRef, qn as mediaTypeDiscriminants, qr as surfaceInkStyle, qt as themeButtonVariantClassNames, ri as resolveThemeColorReferenceValue, rr as getMimeType, rt as createVenueRef, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, si as surfaceToneFromForegroundToken, sn as buildTextContrastShadow, sr as FILE_SIZE_LIMITS, st as headerForegroundCandidates, t as classifySdkEventTiming, ti as isCssColorLiteral, tr as resolveVideoSelectionIntentForMediaField, tt as createPageRef, u as externalLinkSchema$1, ui as TokenResolver, ur as managementMediaLibraryUploadLimitForMimeType, ut as readOpeningForegroundProjection, v as pageLinkSchema$1, vn as heroPhotoPaintsGround, vr as asDesignBlockId, vt as arrangementManifestFromVariants, w as stableStringify, wn as boxBackgroundSchema, wr as defineFrameCapability, wt as requireCuratedSiteStyle, xn as resolveSectionPhotoPlacement, xr as asSiteStyleId, xt as resolveModeArrangement, yn as parseCanonicalRuntimeBackground, yr as asLayoutVariantKey, yt as readStoredMode, z as eventCommandScheduleSchema, zn as getDirectImageUrlForSiteScopedPath, zr as resolveSurface, zt as headerVariantValues } from "../sdk-event-upsert-CH3xwzuX.mjs";
3
- import { $ as mapDrawingSchema, $n as ok, $t as isNonNegativeWholeCents$1, A as assessMailingListTargeting, At as addIntervalPreservingMonthAnchor, Bt as parseEventPageSurfaceSubject, C as exposeSecret, Ct as toScheduledBookingDateTime, D as parseMailingListContentVersionId, Dt as isLiveOrderInstalmentPlanStatus, E as parseMailingListBlockId, En as unsafeAsCheckoutLineId, Et as validateBookingPaymentOptionKinds, F as parseMailingListPlacementTargeting, Fn as unsafeAsMediaAssetId, Ft as omitZeroAmountFutureRows, G as locationMapLinks, Gt as publicEventPricingDisplay, H as assertAllowedPublicUrl, Ht as formatEventPricing, I as DEFAULT_MAILING_LIST_TARGETING, In as unsafeAsOccurrenceId, It as splitAmountWithRemainderInFirst, J as parseLocationValue, Jt as resolveExactOrFreePriceDisplay, K as locationValueSchema, Kt as publicEventPricingOptions, L as planMailingListChoicePresentation, Lt as resolveFlexibleBalanceDueAt, M as parseMailingListProviderScope, Mt as getBookingInstalmentDepositRefundability, N as parseFooterCompositionV1, Nt as getBookingInstalmentPlanIntervalCount, O as parseMailingListSignedSourceToken, On as unsafeAsDemoCapability, Ot as isSettleableFlexibleBalanceContractStatus, Pt as getBookingInstalmentProtectedDepositAmountCents, Qn as err, Qt as mapReadonlyNonEmptyArray, R as isCanonicalRichTextDoc, Rn as unsafeAsPassId, Rt as resolveFlexibleBalanceInitialPaymentCents, S as createSecret, Sn as parseUserId, St as toBookingTimeZone, T as slugify, U as decideLocationSave, Ut as isPublicEventPricingOptionDisplayable, V as parseWeeklyOpeningHours, Vn as unsafeAsPricingOptionId, Vt as formatBookingPriceDisplay, Wt as publicEventPricingCurrency, X as publicLocationSchema$1, Xt as fromArray, Y as projectPublicLocation, Yt as resolvePricingOptionsPriceDisplay, Z as toLocationCoordinates, _ as CANCELLED_SESSION_STATUS, _n as parseMembershipId, _t as parseBookingLocalDate, a as NAVIGATION_LOCATIONS, an as unsafeAsPositiveCents, at as formatTime$1, b as resolveWholeSeriesBookingPhase, bn as parseSiteId, bt as resolveBookingBusinessTimeZone, cn as assertNever, ct as resolveBookingDisplayContext, dn as parseCustomerId, dt as formatLocalScheduleDate, en as parseNonNegativeCents, et as selectCategoryView, f as EVENT_PRESET_VALUES, fn as parseDatedOfferingCapacityHoldAuditRef, ft as formatLocalScheduleTime, h as WHOLE_SERIES_EVENT_PRESET_VALUES, hn as parseEventSeriesId, ht as getLocalScheduleTime, i as EVENT_PRESET_VOCABULARY, in as unsafeAsNonNegativeCents, it as formatDateTimeRange, j as DEFAULT_MAILING_LIST_SUCCESS_MESSAGE, jn as unsafeAsEventInstanceId, jt as clampConfiguredAmount, k as parseMailingListRuntimeContext, kt as isSettleableOrderInstalmentPlanStatus, ln as formatDurationUnitLabel, lt as buildBookingUtcDateWindow, m as SURFACE_EVENT_PRESET_VALUES, mt as getLocalScheduleDate, nn as toCents, nt as formatDateRange, on as formatCurrencyAmount, ot as formatTimeRange, pn as parseDatedOfferingCapacityHoldId, pt as getBookingLocalDateKey, q as normalizeLocationAddressText, qt as publicEventPricingType, rn as toNonNegativeCents, rt as formatDateTime, sn as parseCurrencyCode, st as inferSiteDateLocale, tn as parsePositiveCents, tt as formatDate, u as resolveSiteVerticalBookingConfig, un as parseApiKeyId, ut as compareLocalScheduleDates, v as nextLiveRunSessionStartMs, vt as parseLocalScheduleTime, w as parseManagementKey, wt as toUtcIsoDateTimeString, x as resolveWholeSeriesRunLifecycle, xn as parseSiteTermsVersionId, xt as resolveBookingTimeZoneId, y as orderedLiveRunSessions, yn as parseRetiredCourseId, yt as parseUtcIsoDateTimeString, z as formatOpeningHoursRows, zn as unsafeAsPositiveByteCount, zt as deriveTotalTicketQuantity } from "../src-DsR6-gBQ.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 deriveCmsApiUrlFromDashboardUrl, K as applyLocalMediaPush, Kt as ApiRequestError, 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 createBearerAPIClient, 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-61TwBBCA.mjs";
5
- import { r as CLI_VERSION, t as loadConfigFile } from "../load-config-C7Ght4_r.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-zAAQrjXE.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-DB3FQqwH.mjs";
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$1 = Symbol.for("@riverbankcms/blocks/manifest-registry");
11267
- const isBlocksTestRuntime$1 = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.RIVERBANK_BLOCKS_TEST === "1";
11268
- const globalScope$1 = globalThis;
11269
- const manifestStore = isBlocksTestRuntime$1 ? new Map() : globalScope$1[REGISTRY_SYMBOL$1] ??= new Map();
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 menuHeader = contextualDropdownHeader(header);
13821
- const dropdown = resolveDropdownSurface(menuHeader, theme, tokens, solvedInks);
13822
- cssChunks.push(generateDropdownContainerStyles(menuHeader, themeId, tokens, dropdown));
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(header, themeId, tokens, surface) {
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 = header.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, textToken) {
13981
- const style = header.dropdownStyle;
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.textToken),
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(header.dropdownStyle).join("\n ")}\n}\n`;
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 contextualDropdownHeader(header) {
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 header;
14057
- const opening = header.scrollTreatment;
14058
- if (!opening) return {
14059
- ...header,
14060
- dropdownStyle: {
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 dark = opening.backgroundTone === "dark";
14066
- const textColor = dark ? "neutral-50" : "neutral-950";
14080
+ const textColor = tone === "dark" ? "neutral-50" : "neutral-950";
14067
14081
  return {
14068
- ...header,
14069
- dropdownStyle: {
14070
- ...style,
14071
- background: dark ? "neutral-950" : "neutral-50",
14072
- textColor,
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
- function dropdownTextCandidate(header) {
14079
- return header.dropdownStyle?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
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 backgroundToken = header.dropdownStyle?.background ?? "surface";
14083
- const candidate = dropdownTextCandidate(header);
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: header.dropdownStyle?.surfaceTreatment
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$81 = require_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$81.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
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$90 = require_react(), Internals$1 = {
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$90.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;
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
- function getTicketSelectionPurpose(admission) {
39352
- return admission.kind === "waitlist" ? "waitlist" : "book";
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: formatEventTimeRange(props$1.event, options),
44751
- price: formatEventPrice(props$1.event),
44752
- meta: eventItemMeta(props$1),
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 : formatEventTimeRange(props$1.event, eventDateOptions(props$1.event));
44765
- const price$1 = props$1.arrangement === "compact" && !parts.includes("price") ? formatEventPrice(props$1.event) : null;
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
- ...resolveEventLinkProps(props$1.event),
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 buildNewsletterDisplay(source) {
53797
- const context = source.mailingList;
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 ? item.path ? props$1.buttonText || "Book" : "Details coming soon" : "Registration closed",
62984
- ...open$1 && item.path ? { href: item.path } : {}
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)(ThemedButton, {
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)(ThemedButton, {
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)(ThemedButton, {
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)(ThemedButton, {
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
- /** JSON transports carry resolver inputs; rebuild every surface at this boundary. */
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.look, look.itemRoles, roleSurfaces)
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 background = resolveSectionBackground(parseCanonicalRuntimeBackground(opening.renderableContent), null);
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
- photoPlacement: resolveSectionPhotoPlacement(background, heroPhotoGround(opening))
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-DAdJwh-i.mjs");
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) {