riverbankcms 0.25.0 → 0.26.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, $n as deriveVideoSlotPolicy, $r as resolveTokenOrCssColorValue, An as deleteEnvSpecificKeys, Ar as makeBoundaryId, At as generateHeaderScrollTreatmentStyles, Bn as isSiteScopedDirectImageStoragePath, Br as surfaceDecorationColors, Bt as getComponentBorderWidthPx, C as sortRecord, Cn as boxBackgroundSchema, Cr as defineFrameCapability, Ct as deriveSiteStyleBlockPolicy, D as mapEventCommandContent, Dn as collectPortableMediaReferencesFromContent, Dr as featureCardCompositionTreatmentValues, Dt as getGradientPreset, En as stripStaleTransitionStyleGroup, Er as eyebrowTreatmentValues, Et as gradientToCss, F as pageIdentifierForBlockCommand, Fn as parseAspectRatioValue, Fr as visibleHeadingDecorationFamilyValues, Ft as BREAKPOINT_MD, G as ianaTimezoneSchema, Gn as resolveManagedMediaReference, Gr as mergeStyles, Gt as themeButtonExtraClassesWithTrailingIcon, H as bookingPaymentTermsSchema, Hn as persistableMediaSchema, Hr as TokenResolver, Ht as ICON_CONFIG, I as pageIdentifierForCommand, In as resolveMediaTransformForAspect, Ir as parseResolvedSurface, It as BREAKPOINT_SM, J as createCommandRef, Jn as buildMediaIdentifierFromFilename, Jr as mapDrawingStyle, Jt as parseThemeForPersistence, K as createBlockRef, Kn as mediaTypeDiscriminants, Kr as rgbColorValue, Kt as themeButtonSizeClassName, L as pagePathForCommand, Ln as getDirectImageUrlForRelativePath, Lr as parseSurfaceTree, Lt as BREAKPOINT_XL, M as blockIdentifierForCommand, Mn as rotateNormalizedPoint, Mr as testimonialsCompositionTreatmentValues, Mt as getHeaderPaintTargets, N as blockOrderIdentifiersForCommand, Nn as normalizeWidthCandidates, Nr as tileTreatmentValues, Nt as renderHeaderPaintTargetRules, On as summarizePortableMediaReferences, Or as headingDecorationColorTokenValues, Ot as parseGradientPresetId, P as entryIdentifierForCommand, Pn as isExplicitRectCrop, Pr as toNonEmptyReadonlyArray, Pt as BREAKPOINT_LG, Q as createFooterRef, Qr as resolveThemeColorReferenceValue, Qt as normalizeCardRole, R as hasConfiguredBookingVertical, Rn as getDirectImageUrlForSiteScopedPath, Rr as resolveSurface, Rt as MQ_MD_DOWN, S as venueManagementFields, Sn as boxBackgroundOverlaySchema, Sr as defineBlockDesignCapability, St as resolvePublishedLook, Tn as siteChromeBackgroundOverrideOwner, Tr as eventListTreatmentValues, Tt as compiledRuntimeStyleFieldNames, U as require_jsx_runtime, Un as runtimeMediaSchema, Ur as backgroundColorStyle, Ut as generateDefaultButtonSystem, V as bookingPaymentCollectionOptionSchema, Vn as mediaSchema, Vr as resolveSurfaceForeground, Vt as getComponentShadowVar, W as require_react, Wn as buildRenderableMediaAssetIndex, Wr as borderColorStyle, Wt as parseThemeButtonVariantId, X as createEventCategoryRef, Xn as parseMediaIdentifier, Xr as isCssColorLiteral, Xt as cardRoleSchema, Y as createContentEntryRef, Yn as parseCanonicalMediaIdentifier, Yr as opaqueSurfaceDeclarations, Yt as renderCssDeclarations, Z as createEventSeriesRef, Zr as resolveOnColorForThemeToken, Zt as cardVariantRoleValues, _n as heroPhotoPaintsGround, _r as asDesignBlockId, _t as resolveLookSlotSurfaces, ai as surfaceForegroundInputFromResolved, ar as parseRelativeStoragePath, b as isEventVisibility, bn as resolveSectionPhotoPlacement, br as asSiteStyleId, bt as resolveEffectiveArrangement, c as customLinkSchema$1, ci as expandPalette, cn as generateNavLinkCSS, cr as classifyKnownMimeType, ct as headerLeafTextColor, d as internalLinkSchema, di as parseBlockColorToken, dr as defineBlockDesignMetadata, ei as PUBLIC_BUTTON_ROLES, er as resolveVideoSelectionIntentForMediaField, et as createNavigationRef, f as internalResolvedLinkSchema, fi as __commonJSMin, fn as headerRootPaint, fr as resolveEffectiveKnobs, ft as mergeHeaderNavTypographyPreference, g as linkSchema, gn as deriveSectionGround, gt as resolveItemSurface, h as isResolvedInternalLinkEntityType, hn as sectionFactsForContent, hr as arrangementModes, ht as arrangementSlotNames, ii as surfaceForegroundDeclarations, it as refSlug, j as eventManagementTiming, jn as looksLikeUuid, jr as offeringsPreviewCompositionTreatmentValues, jt as generateMobileOverlayBackdropFilterFix, kn as walkAndCollectImageAttrs, kr as introCompositionTreatmentValues, kt as themeSchema, l as entryLinkSchema$1, li as getTextColorForBackground, lr as managementMediaLibraryUploadLimitForMimeType, lt as transparentHeaderForegroundInput, mn as composeBoundary, mr as cardListKnobBlocks, mt as arrangementLookHooks, ni as surfaceToneFromForegroundToken, nr as getMimeType, o as classifySdkEventBookingOffer, oi as surfaceForegroundStyle, on as footerForegroundCandidates, or as FILE_SIZE_LIMITS, ot as effectiveHeaderNavLinkStyle, p as internalRouteOnlyLinkSchema, pi as __toESM, pn as boundaryLayout, pr as cardListFamilyBlocks, pt as readHeaderNavFontSizePreference, q as createBlocksRef, qn as mediaIdentifierSchema, qr as textColorStyle, qt as themeButtonVariantClassNames, ri as defaultThemeTokens, rr as asRecord, rt as createVenueRef, s as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, si as surfaceForegroundValue, sn as buildTextContrastShadow, st as headerForegroundCandidates, t as classifySdkEventTiming, ti as selectLogoVariant, tt as createPageRef, u as externalLinkSchema$1, ui as parseThemeColorToken, ur as parseSafeDownloadFilename, ut as readOpeningForegroundProjection, v as pageLinkSchema$1, vn as parseCanonicalRuntimeBackground, vr as asLayoutVariantKey, vt as arrangementManifestFromVariants, w as stableStringify, wn as runtimeBoxBackgroundSchema, wr as defineNoBlockDesignCapability, wt as requireCuratedSiteStyle, xn as sectionForegroundBackground, xr as assertNever$10, xt as resolveModeArrangement, yn as resolveSectionBackground, yt as readStoredMode, z as eventCommandScheduleSchema, zn as getImageUrl, zr as serializeSurfaceTree, zt as headerVariantValues } from "../sdk-event-upsert-4t4e1z-h.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-LhtqTjH7.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-nATGxgma.mjs";
5
- import { r as CLI_VERSION, t as loadConfigFile } from "../load-config-DwiS-Ibn.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-XRzH6yFb.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-ChNV88KF.mjs";
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";
8
8
  import { config } from "dotenv";
9
9
  import { Command, CommanderError } from "commander";
10
10
  import * as fs$2 from "fs/promises";
@@ -13796,13 +13796,14 @@ const FLOATING_BLUR = "blur(16px)";
13796
13796
  * Similar to button system - generates theme-scoped CSS using [data-theme-scope] selector
13797
13797
  */
13798
13798
  function generateHeaderCss(options) {
13799
- const { themeId, theme, responsiveMode = DEFAULT_THEME_RESPONSIVE_MODE } = options;
13799
+ const { themeId, theme, responsiveMode = DEFAULT_THEME_RESPONSIVE_MODE, solvedInks = "withhold" } = options;
13800
13800
  const tokens = new TokenResolver(theme);
13801
13801
  const header = theme.header;
13802
13802
  const cssChunks = [];
13803
13803
  const headerContrastTreatment = resolveHeaderContrastTreatment(header);
13804
13804
  const headerNavTextSize = resolveHeaderNavTextSize(header);
13805
- cssChunks.push(generateHeaderRootStyles(header, themeId, tokens));
13805
+ cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, headerPaintInks(header, theme, solvedInks)));
13806
+ cssChunks.push(generateOpeningPhotoShade(header, themeId));
13806
13807
  cssChunks.push(generateMobileOverlayBackdropFilterFix(themeId, header.variant));
13807
13808
  cssChunks.push(generateHeaderLogoStyles({
13808
13809
  logo: header.logo,
@@ -13816,20 +13817,27 @@ function generateHeaderCss(options) {
13816
13817
  }));
13817
13818
  cssChunks.push(generateLogoTextBehaviorStyles(header.logoText, themeId));
13818
13819
  cssChunks.push(generateHeaderNavLinkStyles(header, themeId, tokens, theme, headerContrastTreatment, headerNavTextSize));
13819
- cssChunks.push(generateDropdownContainerStyles(header, themeId, tokens, theme));
13820
- cssChunks.push(generateDropdownLinkStyles(header, themeId, tokens, theme));
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));
13821
13824
  cssChunks.push(generateDropdownCaretStyles(themeId));
13822
13825
  cssChunks.push(generateDropdownTriggerOverrides(header, themeId));
13823
- cssChunks.push(generateMobilePanelStyles(header, themeId, tokens, theme));
13826
+ cssChunks.push(generateMobilePanelStyles(themeId, dropdown));
13824
13827
  if (header.variant === "floating" && header.container) {
13825
13828
  cssChunks.push(generateFloatingContainerStyles(header, themeId, tokens, responsiveMode));
13826
13829
  }
13827
- cssChunks.push(generateNavContainerStyles(header, themeId, tokens));
13830
+ cssChunks.push(generateNavContainerStyles(header, themeId, tokens, theme, solvedInks));
13828
13831
  cssChunks.push(generateHeaderCtaTreatmentStyles(header, themeId, tokens));
13829
13832
  cssChunks.push(generateCtaGapStyles(header, themeId));
13830
13833
  return cssChunks.filter(Boolean).join("\n\n");
13831
13834
  }
13832
13835
  const _testExports = { generateHeaderRootStyles };
13836
+ /** Scope shading to the actual opening under overlay chrome, including hidden-header pages. */
13837
+ function generateOpeningPhotoShade(header, themeId) {
13838
+ const shade = headerNeedsPhotoShade(header) ? "linear-gradient(to bottom, rgba(0,0,0,0.78) 0px, rgba(0,0,0,0.64) 110px, transparent 220px)" : "linear-gradient(transparent, transparent)";
13839
+ return `:where([data-theme-scope="${themeId}"]) [data-site-document-layout-mode="header-overlay"] :is([data-page-block-position="first"], [data-page-block-position="only"]) { --rb-opening-photo-shade: ${shade}; }`;
13840
+ }
13833
13841
  function resolveHeaderContrastTreatment(header) {
13834
13842
  if (header.navLinkStyle?.contrastTreatment) {
13835
13843
  return header.navLinkStyle.contrastTreatment;
@@ -13852,7 +13860,7 @@ function isDetachedFloatingHeaderShape(header) {
13852
13860
  /**
13853
13861
  * Generate root header container styles
13854
13862
  */
13855
- function generateHeaderRootStyles(header, themeId, tokens) {
13863
+ function generateHeaderRootStyles(header, themeId, tokens, inks) {
13856
13864
  const selector = `:where([data-theme-scope="${themeId}"]) .header-root`;
13857
13865
  const rules = [];
13858
13866
  const isContainedNav = headerRootPaint(header) === "contained-nav";
@@ -13864,7 +13872,11 @@ function generateHeaderRootStyles(header, themeId, tokens) {
13864
13872
  } : buildHeaderSurfaceRules(header, tokens);
13865
13873
  const floatingSurfaceBorder = header.variant === "floating";
13866
13874
  if (!floatingSurfaceBorder) rules.push(...surfaceRules.border);
13867
- const basePaintRules = floatingSurfaceBorder ? [...surfaceRules.base, ...surfaceRules.border] : surfaceRules.base;
13875
+ const basePaintRules = floatingSurfaceBorder ? [
13876
+ ...surfaceRules.base,
13877
+ ...surfaceRules.border,
13878
+ ...inks
13879
+ ] : [...surfaceRules.base, ...inks];
13868
13880
  const scrolledPaintRules = floatingSurfaceBorder ? surfaceRules.border : [];
13869
13881
  if (header.positioning === "sticky" || header.positioning === "fixed") {
13870
13882
  const shadowElevation = header.shadow?.elevation ?? "none";
@@ -13923,14 +13935,13 @@ function generateLogoTextBehaviorStyles(logoText, themeId) {
13923
13935
  /**
13924
13936
  * Generate dropdown menu container styles
13925
13937
  */
13926
- function generateDropdownContainerStyles(header, themeId, tokens, theme) {
13938
+ function generateDropdownContainerStyles(header, themeId, tokens, surface) {
13927
13939
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
13928
13940
  const rules = [];
13929
13941
  const dropdownStyle = header.dropdownStyle;
13930
13942
  rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
13931
- const surface = resolveDropdownSurface(header, theme);
13932
- rules.push(`background-color: ${tokens.getColor(surface.backgroundToken)};`);
13933
- rules.push(...surface.declarations(tokens));
13943
+ rules.push(`background-color: ${surface.backgroundColor};`);
13944
+ rules.push(...surface.foregroundDeclarations);
13934
13945
  const borderToken = dropdownStyle?.borderColor;
13935
13946
  if (borderToken === null) {
13936
13947
  rules.push(`border: none;`);
@@ -13951,79 +13962,63 @@ function generateDropdownContainerStyles(header, themeId, tokens, theme) {
13951
13962
  };
13952
13963
  rules.push(`border-radius: ${radiusMap[borderRadius]};`);
13953
13964
  rules.push(`padding: 0.5rem 0;`);
13954
- return `\n${selector} {\n ${rules.join("\n ")}\n}\n`;
13955
- }
13956
- function generateDropdownLinkStyles(header, themeId, tokens, theme) {
13957
- const configuredDropdownStyle = header.dropdownStyle;
13958
- const textColorToken = resolveDropdownSurface(header, theme).textToken;
13959
- const hoverBgToken = configuredDropdownStyle?.hoverBackground ?? textColorToken;
13960
- const hoverEffects = {
13961
- hover: hoverBgToken === null ? [] : [{
13962
- effectId: "background-on-hover-alpha",
13963
- options: {
13964
- colorToken: hoverBgToken,
13965
- opacity: 12
13966
- }
13967
- }],
13968
- active: hoverBgToken === null ? [] : [{
13969
- effectId: "background-on-hover-alpha",
13970
- options: {
13971
- colorToken: hoverBgToken,
13972
- opacity: 18
13973
- }
13974
- }]
13975
- };
13976
- if (configuredDropdownStyle?.hoverTextColor) {
13977
- hoverEffects.hover?.push({
13978
- effectId: "text-color-change",
13979
- options: { hoverColorToken: configuredDropdownStyle.hoverTextColor }
13980
- });
13981
- hoverEffects.active?.push({
13982
- effectId: "text-color-change",
13983
- options: { hoverColorToken: configuredDropdownStyle.hoverTextColor }
13984
- });
13985
- }
13986
- const dropdownLinkStyle = {
13965
+ return `\n${selector} {\n ${rules.join("\n ")}\n}\n` + generateDropdownFrosting(selector, surface);
13966
+ }
13967
+ function dropdownLinkEffects(style, textToken, opacity) {
13968
+ const background = style?.hoverBackground === undefined ? textToken : style.hoverBackground;
13969
+ return [...background === null ? [] : [{
13970
+ effectId: "background-on-hover-alpha",
13971
+ options: {
13972
+ colorToken: background,
13973
+ opacity
13974
+ }
13975
+ }], ...style?.hoverTextColor ? [{
13976
+ effectId: "text-color-change",
13977
+ options: { hoverColorToken: style.hoverTextColor }
13978
+ }] : []];
13979
+ }
13980
+ function dropdownNavLinkStyle(header, textToken) {
13981
+ const style = header.dropdownStyle;
13982
+ return {
13987
13983
  name: "Dropdown",
13988
13984
  typography: "body",
13989
- fontWeight: configuredDropdownStyle?.fontWeight ?? header.navWeight ?? "medium",
13990
- textTransform: configuredDropdownStyle?.textTransform ?? "none",
13985
+ fontWeight: style?.fontWeight ?? header.navWeight ?? "medium",
13986
+ textTransform: style?.textTransform ?? "none",
13991
13987
  italic: false,
13992
- colorToken: textColorToken,
13988
+ colorToken: textToken,
13993
13989
  padding: "compact",
13994
13990
  borderRadius: "sm",
13995
- effects: hoverEffects
13991
+ effects: {
13992
+ hover: dropdownLinkEffects(style, textToken, 12),
13993
+ active: dropdownLinkEffects(style, textToken, 18)
13994
+ }
13996
13995
  };
13996
+ }
13997
+ function dropdownTypographyRules(style) {
13998
+ const letterSpacing = style?.letterSpacing ?? "normal";
13999
+ const spacing = {
14000
+ normal: "0em",
14001
+ wide: "0.05em",
14002
+ wider: "0.1em"
14003
+ };
14004
+ const sizes = {
14005
+ xs: "0.75rem",
14006
+ sm: "0.875rem",
14007
+ base: "1rem",
14008
+ lg: "1.125rem"
14009
+ };
14010
+ return [...letterSpacing === "normal" ? [] : [`letter-spacing: ${spacing[letterSpacing]};`], `font-size: ${sizes[style?.textSize ?? "sm"]};`];
14011
+ }
14012
+ function generateDropdownLinkStyles(header, themeId, tokens, theme, surface) {
13997
14013
  const baseCSS = generateNavLinkCSS({
13998
14014
  themeId,
13999
14015
  tokens,
14000
14016
  theme,
14001
- style: dropdownLinkStyle,
14017
+ style: dropdownNavLinkStyle(header, surface.textToken),
14002
14018
  className: "nav-dropdown-link"
14003
14019
  });
14004
- const additionalRules = [];
14005
- const letterSpacing = configuredDropdownStyle?.letterSpacing ?? "normal";
14006
- if (letterSpacing !== "normal") {
14007
- const letterSpacingMap = {
14008
- normal: "0em",
14009
- wide: "0.05em",
14010
- wider: "0.1em"
14011
- };
14012
- additionalRules.push(`letter-spacing: ${letterSpacingMap[letterSpacing]};`);
14013
- }
14014
- const textSize = configuredDropdownStyle?.textSize ?? "sm";
14015
- const textSizeMap = {
14016
- xs: "0.75rem",
14017
- sm: "0.875rem",
14018
- base: "1rem",
14019
- lg: "1.125rem"
14020
- };
14021
- additionalRules.push(`font-size: ${textSizeMap[textSize]};`);
14022
- if (additionalRules.length > 0) {
14023
- const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
14024
- return baseCSS + `\n${selector} {\n ${additionalRules.join("\n ")}\n}\n`;
14025
- }
14026
- return baseCSS;
14020
+ const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-link`;
14021
+ return baseCSS + `\n${selector} {\n ${dropdownTypographyRules(header.dropdownStyle).join("\n ")}\n}\n`;
14027
14022
  }
14028
14023
  function generateDropdownCaretStyles(themeId) {
14029
14024
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-caret`;
@@ -14054,43 +14049,76 @@ ${selector} {
14054
14049
  }
14055
14050
  `.trim();
14056
14051
  }
14057
- /**
14058
- * The dropdown menu and mobile panel share one surface: `dropdownStyle`'s
14059
- * background, with the text candidate (the dropdown's own colour, then the
14060
- * header's nav colour) validated against it through the surface contract. The
14061
- * nav colour is chosen for the header bar, which can be dark or transparent,
14062
- * so it only carries over when it is legible on the menu too.
14063
- */
14064
- function resolveDropdownSurface(header, theme) {
14052
+ /** Reuse the header's decided opening tone; unknown openings retain opaque paint. */
14053
+ function contextualDropdownHeader(header) {
14054
+ const style = header.dropdownStyle;
14055
+ 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
+ }
14064
+ };
14065
+ const dark = opening.backgroundTone === "dark";
14066
+ const textColor = dark ? "neutral-50" : "neutral-950";
14067
+ return {
14068
+ ...header,
14069
+ dropdownStyle: {
14070
+ ...style,
14071
+ background: dark ? "neutral-950" : "neutral-50",
14072
+ textColor,
14073
+ hoverBackground: textColor,
14074
+ borderColor: null
14075
+ }
14076
+ };
14077
+ }
14078
+ function dropdownTextCandidate(header) {
14079
+ return header.dropdownStyle?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
14080
+ }
14081
+ function resolveDropdownSurface(header, theme, tokens, solvedInks) {
14065
14082
  const backgroundToken = header.dropdownStyle?.background ?? "surface";
14066
- const candidate = header.dropdownStyle?.textColor ?? ((header.navColor ?? header.textColor)?.trim() || "text");
14083
+ const candidate = dropdownTextCandidate(header);
14067
14084
  const foreground = resolveSurfaceForeground({
14068
14085
  type: "color",
14069
14086
  color: backgroundToken,
14070
14087
  textColor: candidate
14071
14088
  }, expandPalette(theme.palette));
14072
14089
  return {
14073
- backgroundToken,
14090
+ backgroundColor: tokens.getColor(backgroundToken),
14074
14091
  textToken: foreground.kind === "known" ? foreground.roles.text : candidate,
14075
- declarations: (tokens) => foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(candidate)};`]
14092
+ foregroundDeclarations: [...foreground.kind === "known" ? surfaceForegroundDeclarations(surfaceForegroundInputFromResolved(foreground, (token) => tokens.getColor(token))) : [`color: ${tokens.getColor(candidate)};`], ...surfaceInkDeclarations(surfaceInkPublication(foreground, solvedInks))],
14093
+ treatment: header.dropdownStyle?.surfaceTreatment
14076
14094
  };
14077
14095
  }
14078
- /**
14079
- * Generate mobile navigation panel styles
14080
- * Uses the same dropdownStyle settings as the desktop dropdown menus
14081
- */
14082
- function generateMobilePanelStyles(header, themeId, tokens, theme) {
14096
+ /** Solid paint is the fallback. Blur is enhancement, never the readability mechanism. */
14097
+ function generateDropdownFrosting(selector, surface) {
14098
+ if (surface.treatment?.kind !== "frosted") return "";
14099
+ const blur = surface.treatment.blur === "sm" ? "8px" : "12px";
14100
+ return `
14101
+ @supports (background-color: color-mix(in srgb, white, transparent)) and ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
14102
+ ${selector} {
14103
+ background-color: color-mix(in srgb, ${surface.backgroundColor} ${surface.treatment.opacity * 100}%, transparent);
14104
+ backdrop-filter: blur(${blur});
14105
+ -webkit-backdrop-filter: blur(${blur});
14106
+ ${surface.treatment.opacity < 1 ? surfaceInkDeclarations({ kind: "reset" }).join("\n ") : ""}
14107
+ }
14108
+ }
14109
+ `;
14110
+ }
14111
+ /** Mobile shares the resolved opaque surface, never desktop translucency. */
14112
+ function generateMobilePanelStyles(themeId, surface) {
14083
14113
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-mobile-panel`;
14084
14114
  const selfSelector = `:where(.nav-mobile-panel[data-theme-scope="${themeId}"])`;
14085
- const surface = resolveDropdownSurface(header, theme);
14086
- const rules = [`background-color: ${tokens.getColor(surface.backgroundToken)};`, ...surface.declarations(tokens)];
14087
- const body = renderCssDeclarations(rules);
14115
+ const body = renderCssDeclarations([`background-color: ${surface.backgroundColor};`, ...surface.foregroundDeclarations]);
14088
14116
  return `\n${selector} {\n ${body}\n}\n\n${selfSelector} {\n ${body}\n}\n`;
14089
14117
  }
14090
14118
  /**
14091
14119
  * Generate nav container styles (pill/glass)
14092
14120
  */
14093
- function generateNavContainerStyles(header, themeId, tokens) {
14121
+ function generateNavContainerStyles(header, themeId, tokens, theme, solvedInks) {
14094
14122
  const navContainer = header.navContainer;
14095
14123
  const navContainerType = navContainer?.type ?? "none";
14096
14124
  if (!navContainer || navContainerType === "none") return "";
@@ -14106,27 +14134,31 @@ function generateNavContainerStyles(header, themeId, tokens) {
14106
14134
  rules.push("align-self: flex-start;");
14107
14135
  }
14108
14136
  }
14109
- if (navContainerType === "glass") {
14110
- const opacity = resolveFloatingGlassOpacity(header, navContainer.opacity, .15);
14111
- const background = navContainer.tint ? buildTint(tokens.getColor(navContainer.tint), opacity) : buildRgbWhite(opacity);
14112
- rules.push(`background-color: ${background};`);
14113
- rules.push(`backdrop-filter: ${HEADER_BLUR};`);
14114
- rules.push(`-webkit-backdrop-filter: ${HEADER_BLUR};`);
14115
- rules.push("border: 1px solid rgba(255, 255, 255, 0.2);");
14116
- rules.push("box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);");
14117
- } else if (navContainerType === "pill") {
14118
- const opacity = clampOpacity(navContainer.opacity, .15);
14119
- if (navContainer.tint) {
14120
- rules.push(`background-color: ${buildTint(tokens.getColor(navContainer.tint), opacity)};`);
14121
- } else {
14122
- rules.push(`background-color: ${tokens.getColor("surface")};`);
14123
- }
14124
- rules.push(`border: 1px solid ${tokens.getColor("border")};`);
14125
- }
14126
- if (rules.length > 0) {
14127
- return `${selector} { ${rules.join(" ")} }`;
14137
+ rules.push(...navContainerSurfaceRules(header, navContainer, tokens, theme, solvedInks));
14138
+ return `${selector} { ${rules.join(" ")} }`;
14139
+ }
14140
+ /** Paint and publication are decided together, so translucent containers cannot borrow solid inks. */
14141
+ function navContainerSurfaceRules(header, container, tokens, theme, policy) {
14142
+ if (container.type === "glass") {
14143
+ const opacity$1 = resolveFloatingGlassOpacity(header, container.opacity, .15);
14144
+ const background$1 = container.tint ? buildTint(tokens.getColor(container.tint), opacity$1) : buildRgbWhite(opacity$1);
14145
+ return [
14146
+ `background-color: ${background$1};`,
14147
+ `backdrop-filter: ${HEADER_BLUR};`,
14148
+ `-webkit-backdrop-filter: ${HEADER_BLUR};`,
14149
+ "border: 1px solid rgba(255, 255, 255, 0.2);",
14150
+ "box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);",
14151
+ ...surfaceInkDeclarations({ kind: "reset" })
14152
+ ];
14128
14153
  }
14129
- return "";
14154
+ const opacity = clampOpacity(container.opacity, .15);
14155
+ const background = container.tint ? buildTint(tokens.getColor(container.tint), opacity) : tokens.getColor("surface");
14156
+ const solid = container.tint ? opacity === 1 ? container.tint : null : "surface";
14157
+ return [
14158
+ `background-color: ${background};`,
14159
+ `border: 1px solid ${tokens.getColor("border")};`,
14160
+ ...headerContainerInks(solid, theme, policy)
14161
+ ];
14130
14162
  }
14131
14163
  /**
14132
14164
  * Generate floating container styles
@@ -14144,6 +14176,7 @@ function generateFloatingContainerStyles(header, themeId, tokens, responsiveMode
14144
14176
  }
14145
14177
  rules.push(`backdrop-filter: ${FLOATING_BLUR};`);
14146
14178
  rules.push(`-webkit-backdrop-filter: ${FLOATING_BLUR};`);
14179
+ rules.push(...surfaceInkDeclarations({ kind: "reset" }));
14147
14180
  if (container.border) {
14148
14181
  rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`);
14149
14182
  }
@@ -14270,6 +14303,21 @@ function applyAlpha(color, opacity) {
14270
14303
  }
14271
14304
  return color;
14272
14305
  }
14306
+ /** Container glass is deliberately unmeasured; an opaque pill owns its solid paint. */
14307
+ function headerContainerInks(color, theme, policy) {
14308
+ if (color === null) return surfaceInkDeclarations({ kind: "reset" });
14309
+ const foreground = resolveSurfaceForeground({
14310
+ type: "color",
14311
+ color
14312
+ }, expandPalette(theme.palette));
14313
+ return surfaceInkDeclarations(surfaceInkPublication(foreground, policy));
14314
+ }
14315
+ /** Floating mobile bars paint the header background even when the root overlays the page. */
14316
+ function headerPaintInks(header, theme, policy) {
14317
+ if (headerRootPaint(header) === "contained-nav") return [];
14318
+ const foreground = resolveSurfaceForeground(header.background, expandPalette(theme.palette));
14319
+ return surfaceInkDeclarations(surfaceInkPublication(foreground, policy));
14320
+ }
14273
14321
 
14274
14322
  //#endregion
14275
14323
  //#region ../blocks/src/system/transforms/registry/_utils/themeColorResolution.ts
@@ -14281,7 +14329,7 @@ function resolveBackgroundColorValue(value, context) {
14281
14329
  //#region ../blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.ts
14282
14330
  const sectionSurfaceCache = new WeakMap();
14283
14331
  function resolveHeaderRootForeground(header, palette, isTransparent) {
14284
- if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "unknown" };
14332
+ if (isTransparent) return readOpeningForegroundProjection(header) ?? { kind: "inherits" };
14285
14333
  const background = header?.background;
14286
14334
  return resolveSurfaceForeground(background ?? {
14287
14335
  type: "color",
@@ -14297,12 +14345,32 @@ function resolveFooterRootForeground(footer, palette, proseHoverCandidate) {
14297
14345
  function resolveSurfaceForegroundStyles(value, context, options) {
14298
14346
  const resolved = cachedSectionSurface(value, context, options);
14299
14347
  const foreground = resolved.foreground;
14300
- if (foreground.kind === "unknown") return { ...resolved.buttonStyles };
14301
- return {
14302
- ...arrangementSurfaceInk(foreground, context),
14303
- ...resolved.buttonStyles,
14304
- ...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context)))
14305
- };
14348
+ const inks = surfaceInkStyle(resolved.inks);
14349
+ switch (foreground.kind) {
14350
+ case "inherits":
14351
+ case "unmeasured-paint": return {
14352
+ ...resolved.buttonStyles,
14353
+ ...inks
14354
+ };
14355
+ case "known": return {
14356
+ ...arrangementSurfaceInk(foreground, context),
14357
+ ...resolved.buttonStyles,
14358
+ ...surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, (token) => resolveBackgroundColorValue(token, context))),
14359
+ ...inks
14360
+ };
14361
+ }
14362
+ }
14363
+ /**
14364
+ * The render's ink policy, set by the runtime its theme tokens came from. A
14365
+ * render that can't vouch for its runtime withholds, so its owned surfaces
14366
+ * reset the inks rather than publish ones solved for tokens that may differ.
14367
+ */
14368
+ function transformSolvedInks(context) {
14369
+ return context.theme.solvedInks ?? "withhold";
14370
+ }
14371
+ /** Chrome roots publish the same ink decision as sections. */
14372
+ function solvedInkStyle(foreground, context) {
14373
+ return surfaceInkStyle(surfaceInkPublication(foreground, transformSolvedInks(context)));
14306
14374
  }
14307
14375
  /** The section ground's resolved foreground, for decorations drawn on that ground (maps). */
14308
14376
  function resolveSectionSurfaceForeground(value, context, options) {
@@ -14334,7 +14402,8 @@ function resolveRuntimeSectionSurface(value, context, options) {
14334
14402
  palette: context.theme.palette,
14335
14403
  buttonSystem: context.theme.buttons,
14336
14404
  linkHoverToken: context.proseHoverCandidate,
14337
- compositeBase: options?.fallbackToken
14405
+ compositeBase: options?.fallbackToken,
14406
+ solvedInks: transformSolvedInks(context)
14338
14407
  });
14339
14408
  }
14340
14409
  function arrangementSurfaceInk(foreground, context) {
@@ -14343,7 +14412,7 @@ function arrangementSurfaceInk(foreground, context) {
14343
14412
  }
14344
14413
  /** Decoration roles already resolved by the surface owner, shared with footer arrangements. */
14345
14414
  function surfaceInkStyles(foreground, palette) {
14346
- if (foreground.kind === "unknown") return {};
14415
+ if (foreground.kind !== "known") return {};
14347
14416
  const decorations$1 = surfaceDecorationColors(foreground, palette);
14348
14417
  return {
14349
14418
  "--rb-surface-muted-color": foreground.roles.muted ?? foreground.roles.text,
@@ -21842,8 +21911,11 @@ function resolveHeaderVisualStyles(header) {
21842
21911
  return visuals;
21843
21912
  }
21844
21913
  function resolvedForegroundStyle(foreground) {
21845
- if (foreground.kind === "unknown") return undefined;
21846
- return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
21914
+ switch (foreground.kind) {
21915
+ case "inherits":
21916
+ case "unmeasured-paint": return undefined;
21917
+ case "known": return surfaceForegroundStyle(surfaceForegroundInputFromResolved(foreground, rgbColorValue));
21918
+ }
21847
21919
  }
21848
21920
  function footerBottomBarBorderWidthStyle(width) {
21849
21921
  if (!width) return undefined;
@@ -21929,7 +22001,7 @@ const headerRootStyleTransform = {
21929
22001
  const foreground = resolveHeaderRootForeground(header, context.theme.palette, visuals.isTransparent);
21930
22002
  const foregroundStyle = resolvedForegroundStyle(foreground) ?? (visuals.isTransparent ? surfaceForegroundStyle(transparentHeaderForegroundInput(header, context.theme.palette)) : { color: rgbColorValue(headerLeafTextColor(header)) });
21931
22003
  const borderColorToken = header?.border?.colorToken ?? "border";
21932
- return mergeStyles(foregroundStyle, borderColorStyle(borderColorToken));
22004
+ return mergeStyles(foregroundStyle, solvedInkStyle(foreground, context), borderColorStyle(borderColorToken));
21933
22005
  }
21934
22006
  };
21935
22007
  const headerSectionBackgroundTransform = {
@@ -21958,9 +22030,10 @@ const footerRootStyleTransform = {
21958
22030
  styleParts.push(backgroundColorStyle(token));
21959
22031
  }
21960
22032
  }
21961
- styleParts.push(resolvedForegroundStyle(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate)));
22033
+ const foreground = resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate);
22034
+ styleParts.push(resolvedForegroundStyle(foreground), solvedInkStyle(foreground, context));
21962
22035
  if (footer?.variant === "centred") {
21963
- styleParts.push(surfaceInkStyles(resolveFooterRootForeground(footer, context.theme.palette, context.proseHoverCandidate), context.theme.palette));
22036
+ styleParts.push(surfaceInkStyles(foreground, context.theme.palette));
21964
22037
  }
21965
22038
  styleParts.push(borderColorStyle("border"));
21966
22039
  return mergeStyles(...styleParts);
@@ -22026,21 +22099,27 @@ const footerBottomBarStyleTransform = {
22026
22099
  run: (value, _options, context) => {
22027
22100
  const footer = asPartialObject(value);
22028
22101
  const bottomBar = footer?.bottomBar;
22029
- return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : undefined, footerBottomBarBorderColorStyle(footer), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette));
22102
+ return mergeStyles(bottomBar?.background?.type === "color" ? backgroundColorStyle(bottomBar.background.color ?? "surface") : undefined, footerBottomBarBorderColorStyle(footer), footerBottomBarBorderWidthStyle(bottomBar?.borderTop?.width), footerBottomBarForegroundStyle(footer, context.theme.palette), footerBottomBarInkStyle(footer, context));
22030
22103
  }
22031
22104
  };
22032
22105
  function footerBottomBarForegroundStyle(footer, palette) {
22033
22106
  if (!footer?.bottomBar) return undefined;
22107
+ const foreground = footerBottomBarSurfaceForeground(footer, palette);
22108
+ return foreground === null ? backgroundlessBottomBarForegroundStyle(footer) : resolvedForegroundStyle(foreground);
22109
+ }
22110
+ /** A bar without its own colour paints nothing, so the footer's inks carry on. */
22111
+ function footerBottomBarInkStyle(footer, context) {
22112
+ const foreground = footer ? footerBottomBarSurfaceForeground(footer, context.theme.palette) : null;
22113
+ return foreground === null ? undefined : solvedInkStyle(foreground, context);
22114
+ }
22115
+ function footerBottomBarSurfaceForeground(footer, palette) {
22034
22116
  const bar = footer.bottomBar;
22035
- if (bar.background?.type !== "color") {
22036
- return backgroundlessBottomBarForegroundStyle(footer);
22037
- }
22038
- const foreground = resolveSurfaceForeground(bar.background, palette, {
22117
+ if (bar?.background?.type !== "color") return null;
22118
+ return resolveSurfaceForeground(bar.background, palette, {
22039
22119
  text: bar.textColor,
22040
22120
  link: footer.bottomTextLinkStyle?.colorToken ?? bar.textColor,
22041
22121
  linkHover: footer.bottomTextLinkStyle?.hoverColorToken
22042
22122
  }, { compositeBase: measuredFooterBackdrop(footer, palette) });
22043
- return resolvedForegroundStyle(foreground);
22044
22123
  }
22045
22124
  function backgroundlessBottomBarForegroundStyle(footer) {
22046
22125
  if (footer.background?.contentOwner === siteChromeBackgroundOverrideOwner) {
@@ -36604,6 +36683,7 @@ function buildOrderConfirmationContent(input) {
36604
36683
  })) } : null
36605
36684
  };
36606
36685
  const templateVars = {
36686
+ customer_first_name: firstWordOf(customerDisplayName),
36607
36687
  customer_name: customerDisplayName,
36608
36688
  site_name: input.siteTitle ?? "Your Business",
36609
36689
  order_subject: confirmationCopy.subject,
@@ -36635,6 +36715,10 @@ function buildOrderConfirmationContent(input) {
36635
36715
  }
36636
36716
  };
36637
36717
  }
36718
+ /** The first word of their name (or their email, when that's all there is), for the headline. */
36719
+ function firstWordOf(displayName) {
36720
+ return displayName.trim().split(/\s+/)[0] || displayName;
36721
+ }
36638
36722
  function resolveConfirmationCopy(variant, orderNumber) {
36639
36723
  switch (variant.kind) {
36640
36724
  case "pass_only": {
@@ -44352,17 +44436,7 @@ function resolveCardListSchedule(item, mode) {
44352
44436
  }
44353
44437
  /** Each part owns optional-content collapse once, for calendar and catalogue items. */
44354
44438
  const partRenderers = {
44355
- title: ({ item, presentation, Title = "h3" }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Title, {
44356
- ...listLookSlot(presentation, "item-title"),
44357
- children: item.titleLink || item.href ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
44358
- ...item.titleLink,
44359
- href: item.titleLink?.href ?? item.href ?? undefined,
44360
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LinkedLabel, {
44361
- label: item.title,
44362
- newTabHint: item.newTabHint
44363
- })
44364
- }) : item.title
44365
- }),
44439
+ title: CardListTitle,
44366
44440
  text: ({ item, presentation }) => item.textDocument ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RichText, {
44367
44441
  doc: item.textDocument,
44368
44442
  ...listLookSlot(presentation, "item-text"),
@@ -44371,14 +44445,7 @@ const partRenderers = {
44371
44445
  ...listLookSlot(presentation, "item-text"),
44372
44446
  children: item.text
44373
44447
  }) : null,
44374
- media: ({ item, presentation }) => item.media ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
44375
- ...listLookSlot(presentation, "item-media"),
44376
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MediaNodeServer, {
44377
- value: item.media,
44378
- size: ImagePresets.card,
44379
- ...listLookSlot(presentation, "photo")
44380
- })
44381
- }) : null,
44448
+ media: CardListMedia,
44382
44449
  facts: ({ item, presentation }) => item.facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", {
44383
44450
  ...listLookSlot(presentation, "facts"),
44384
44451
  children: item.facts.map(({ label, value }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -44466,6 +44533,41 @@ const partRenderers = {
44466
44533
  children: props$1.actionNode
44467
44534
  })
44468
44535
  };
44536
+ /** Title and photo share the same destination and external-link behavior. */
44537
+ function cardListItemLink(item) {
44538
+ return item.titleLink ?? (item.href ? { href: item.href } : null);
44539
+ }
44540
+ function CardListTitle({ item, presentation, Title = "h3" }) {
44541
+ const link$2 = cardListItemLink(item);
44542
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Title, {
44543
+ ...listLookSlot(presentation, "item-title"),
44544
+ children: link$2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
44545
+ ...link$2,
44546
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LinkedLabel, {
44547
+ label: item.title,
44548
+ newTabHint: item.newTabHint
44549
+ })
44550
+ }) : item.title
44551
+ });
44552
+ }
44553
+ function CardListMedia({ item, presentation }) {
44554
+ if (!item.media) return null;
44555
+ const link$2 = cardListItemLink(item);
44556
+ const photo = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MediaNodeServer, {
44557
+ value: item.media,
44558
+ size: ImagePresets.card,
44559
+ ...listLookSlot(presentation, "photo")
44560
+ });
44561
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
44562
+ ...listLookSlot(presentation, "item-media"),
44563
+ children: link$2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
44564
+ ...link$2,
44565
+ className: "rb-block rb-h-full",
44566
+ "aria-label": `${item.title}${item.newTabHint ? " (opens in a new tab)" : ""}`,
44567
+ children: photo
44568
+ }) : photo
44569
+ });
44570
+ }
44469
44571
  function CardListContentPart({ part, ...props$1 }) {
44470
44572
  return partRenderers[part](props$1);
44471
44573
  }
@@ -44546,6 +44648,56 @@ function LinkedLabel({ label, newTabHint }) {
44546
44648
  })] });
44547
44649
  }
44548
44650
 
44651
+ //#endregion
44652
+ //#region ../blocks/src/system/runtime/nodes/events/shared/EventCardIcons.tsx
44653
+ function MapPinIcon({ className, size = 16, strokeWidth = 2 }) {
44654
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
44655
+ className,
44656
+ width: size,
44657
+ height: size,
44658
+ viewBox: "0 0 24 24",
44659
+ fill: "none",
44660
+ stroke: "currentColor",
44661
+ strokeWidth,
44662
+ strokeLinecap: "round",
44663
+ strokeLinejoin: "round",
44664
+ "aria-hidden": "true",
44665
+ focusable: "false",
44666
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
44667
+ cx: "12",
44668
+ cy: "10",
44669
+ r: "3"
44670
+ })]
44671
+ });
44672
+ }
44673
+ function CalendarIcon({ className, size = 16, strokeWidth = 2 }) {
44674
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
44675
+ className,
44676
+ width: size,
44677
+ height: size,
44678
+ viewBox: "0 0 24 24",
44679
+ fill: "none",
44680
+ stroke: "currentColor",
44681
+ strokeWidth,
44682
+ strokeLinecap: "round",
44683
+ strokeLinejoin: "round",
44684
+ "aria-hidden": "true",
44685
+ focusable: "false",
44686
+ children: [
44687
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
44688
+ x: "3",
44689
+ y: "4",
44690
+ width: "18",
44691
+ height: "18",
44692
+ rx: "2"
44693
+ }),
44694
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M16 2v4" }),
44695
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 2v4" }),
44696
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 10h18" })
44697
+ ]
44698
+ });
44699
+ }
44700
+
44549
44701
  //#endregion
44550
44702
  //#region ../blocks/src/system/runtime/nodes/events/shared/EventItem.tsx
44551
44703
  /** Arrangement content choices are data, ready for other live offering lists to reuse. */
@@ -44579,6 +44731,8 @@ const eventItemParts = {
44579
44731
  "date",
44580
44732
  "title",
44581
44733
  "meta",
44734
+ "time",
44735
+ "places",
44582
44736
  "action"
44583
44737
  ],
44584
44738
  "month-day": [
@@ -44595,16 +44749,31 @@ function eventItemFacts(props$1) {
44595
44749
  date: formatEventCompactDateRail(props$1.event.startsAt, options, "as-written"),
44596
44750
  time: formatEventTimeRange(props$1.event, options),
44597
44751
  price: formatEventPrice(props$1.event),
44598
- meta: [
44599
- ...(props$1.parts ?? eventItemParts[props$1.arrangement]).includes("time") ? [] : [formatEventTimeRange(props$1.event, options)],
44600
- formatEventTeacherLine(props$1.event),
44601
- props$1.showVenue !== false ? props$1.event.venue?.name : null
44602
- ].filter(Boolean).join(" · "),
44752
+ meta: eventItemMeta(props$1),
44753
+ venueIcon: props$1.arrangement === "compact" && props$1.showVenue !== false && Boolean(props$1.event.venue),
44603
44754
  places: props$1.showCapacity ? formatEventRemainingPlaces(props$1.event, { full: "Sold out" }) : null,
44604
44755
  availability: availability.isFull ? "full" : availability.status === "filling" ? "low" : "available",
44605
44756
  description: props$1.event.presentation?.summary ?? props$1.event.description
44606
44757
  };
44607
44758
  }
44759
+ /** Compact rows keep pricing in the details rail and time in the action rail. */
44760
+ function eventItemMeta(props$1) {
44761
+ const parts = props$1.parts ?? eventItemParts[props$1.arrangement];
44762
+ const venue = props$1.showVenue !== false ? props$1.event.venue?.name : null;
44763
+ 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;
44766
+ return (props$1.arrangement === "compact" ? [
44767
+ venue,
44768
+ teacher,
44769
+ price$1,
44770
+ time
44771
+ ] : [
44772
+ time,
44773
+ teacher,
44774
+ venue
44775
+ ]).filter(Boolean).join(" · ");
44776
+ }
44608
44777
  /**
44609
44778
  * Keep one RSC component boundary per item. Re-forwarding shared presentation
44610
44779
  * props through layout/part components multiplies React's development debug
@@ -44638,15 +44807,22 @@ function renderCalendarItem(props$1) {
44638
44807
  ...listLookSlot(props$1, props$1.arrangement === "grid" ? "item-body" : "what"),
44639
44808
  children: parts.filter(body).map(renderPart)
44640
44809
  }),
44641
- parts.filter((part) => [
44810
+ renderCalendarTrailingParts(props$1, parts.filter((part) => [
44642
44811
  "time",
44643
44812
  "places",
44644
44813
  "price",
44645
44814
  "action"
44646
- ].includes(part) && !body(part)).map(renderPart)
44815
+ ].includes(part) && !body(part)), renderPart)
44647
44816
  ]
44648
44817
  });
44649
44818
  }
44819
+ function renderCalendarTrailingParts(props$1, parts, renderPart) {
44820
+ const content = parts.map(renderPart);
44821
+ return props$1.arrangement === "compact" && parts.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
44822
+ ...listLookSlot(props$1, "item-actions"),
44823
+ children: content
44824
+ }) : content;
44825
+ }
44650
44826
  function eventItemTag(arrangement) {
44651
44827
  return arrangement === "ledger" || arrangement === "day-groups" ? "li" : "article";
44652
44828
  }
@@ -44679,9 +44855,9 @@ function renderEventItemContentPart({ part, props: props$1, facts }) {
44679
44855
  children: props$1.event.title
44680
44856
  })
44681
44857
  });
44682
- case "time": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
44858
+ case "time": return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
44683
44859
  ...listLookSlot(props$1, "time"),
44684
- children: facts.time
44860
+ children: [props$1.arrangement === "compact" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ClockIcon, { "aria-hidden": "true" }) : null, facts.time]
44685
44861
  });
44686
44862
  case "places": return facts.places ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
44687
44863
  ...listLookSlot(props$1, "places"),
@@ -44716,6 +44892,7 @@ function renderEventItemMeta({ props: props$1, facts }) {
44716
44892
  return facts.meta || places ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
44717
44893
  ...listLookSlot(props$1, "item-meta"),
44718
44894
  children: [
44895
+ facts.venueIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MapPinIcon, {}) : null,
44719
44896
  facts.meta,
44720
44897
  facts.meta && places ? " · " : null,
44721
44898
  places ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
@@ -44726,13 +44903,15 @@ function renderEventItemMeta({ props: props$1, facts }) {
44726
44903
  }) : null;
44727
44904
  }
44728
44905
  function renderEventItemImage(props$1) {
44906
+ const link$2 = resolveEventLinkProps(props$1.event);
44729
44907
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardListContentPart, {
44730
44908
  part: "media",
44731
44909
  item: {
44732
44910
  id: props$1.event.id,
44733
44911
  title: props$1.event.title,
44734
44912
  media: props$1.event.presentation?.image,
44735
- action: { label: "" }
44913
+ titleLink: link$2,
44914
+ newTabHint: link$2.target === "_blank"
44736
44915
  },
44737
44916
  presentation: props$1
44738
44917
  });
@@ -45122,56 +45301,6 @@ function cropHeightStyle(height, heightAs) {
45122
45301
  return heightAs === "minimum" ? { minHeight: height } : { height };
45123
45302
  }
45124
45303
 
45125
- //#endregion
45126
- //#region ../blocks/src/system/runtime/nodes/events/shared/EventCardIcons.tsx
45127
- function MapPinIcon({ className, size = 16, strokeWidth = 2 }) {
45128
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
45129
- className,
45130
- width: size,
45131
- height: size,
45132
- viewBox: "0 0 24 24",
45133
- fill: "none",
45134
- stroke: "currentColor",
45135
- strokeWidth,
45136
- strokeLinecap: "round",
45137
- strokeLinejoin: "round",
45138
- "aria-hidden": "true",
45139
- focusable: "false",
45140
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
45141
- cx: "12",
45142
- cy: "10",
45143
- r: "3"
45144
- })]
45145
- });
45146
- }
45147
- function CalendarIcon({ className, size = 16, strokeWidth = 2 }) {
45148
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
45149
- className,
45150
- width: size,
45151
- height: size,
45152
- viewBox: "0 0 24 24",
45153
- fill: "none",
45154
- stroke: "currentColor",
45155
- strokeWidth,
45156
- strokeLinecap: "round",
45157
- strokeLinejoin: "round",
45158
- "aria-hidden": "true",
45159
- focusable: "false",
45160
- children: [
45161
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
45162
- x: "3",
45163
- y: "4",
45164
- width: "18",
45165
- height: "18",
45166
- rx: "2"
45167
- }),
45168
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M16 2v4" }),
45169
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M8 2v4" }),
45170
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 10h18" })
45171
- ]
45172
- });
45173
- }
45174
-
45175
45304
  //#endregion
45176
45305
  //#region ../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx
45177
45306
  /** The category's badge, when the event has a category. */
@@ -46243,7 +46372,7 @@ function buildEventCollectionListDisplay(source) {
46243
46372
  events: Array.isArray(source.events) ? [...source.events] : [],
46244
46373
  listLayout: source.listLayout ?? "stack",
46245
46374
  listColumns: source.listColumns ?? "3",
46246
- eventsPerPage: source.lookSlots !== undefined && source.listLayout === "compact" ? 3 : resolveEventCalendarListPageSize({ eventsPerPage: source.eventsPerPage }),
46375
+ eventsPerPage: resolveEventCalendarListPageSize({ eventsPerPage: source.eventsPerPage ?? (source.lookSlots !== undefined && source.listLayout === "compact" ? "3" : undefined) }),
46247
46376
  paginationAction,
46248
46377
  sectionAction: paginationAction.kind === "seeAllLink" ? {
46249
46378
  href: paginationAction.href,
@@ -56319,7 +56448,10 @@ const systemCustomizeFacetDefinitions = [
56319
56448
  ], "icons"),
56320
56449
  blockKinds: cardListFamilyBlocks
56321
56450
  },
56322
- fixedKnob("block.event-calendar", "showCapacity", "Show places left", onOff, "true", false, true)
56451
+ {
56452
+ ...fixedKnob("block.event-calendar", "showCapacity", "Places left", onOff, "true", false, true),
56453
+ description: "Show how many places are left on each event"
56454
+ }
56323
56455
  ];
56324
56456
  const systemCustomizeFacetIds = systemCustomizeFacetDefinitions.map((definition$1) => definition$1.id);
56325
56457
  const systemCustomizeFacetValues = Array.from(new Set(systemCustomizeFacetDefinitions.flatMap((definition$1) => definition$1.values.map((option) => option.value))));
@@ -69029,6 +69161,7 @@ function applyArrangementRhythm(entry, position) {
69029
69161
  const tinted = resolveArrangementTints(updated$1, grounded, runtime, surface) ?? grounded;
69030
69162
  return {
69031
69163
  ...entry,
69164
+ styleBackground: arrangementGroundToken(resolveSectionBackground({ kind: "none" }, null, rhythm)),
69032
69165
  renderableContent: {
69033
69166
  ...updated$1,
69034
69167
  _effectiveLook: tinted,
@@ -79899,7 +80032,7 @@ async function loadConfig(configPath, output) {
79899
80032
  return { errorMessage: "No config path provided." };
79900
80033
  }
79901
80034
  try {
79902
- const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-zu397zDX.mjs");
80035
+ const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-DAdJwh-i.mjs");
79903
80036
  const rawConfig = await loadConfigFile$1(configPath);
79904
80037
  const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);
79905
80038
  if (!parsed.success) {