riverbankcms 0.7.0 → 0.7.1

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,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { $ as defineBlockDesignMetadata, $n as surfaceForegroundDeclarations, $t as borderColorStyle, An as NAV_LINK_TEXT_SIZE_MAP, Ar as __toESM, At as themeSchema, Bn as ICON_SIZE_PX, Bt as BREAKPOINT_SM, C as retargetCompiledBoundaryRuntimeForContentAdjacency, Cn as getComponentShadowVar, Cr as createFormRef, Ct as themeButtonClassName, Dn as NAV_LINK_LETTER_SPACING_MAP, Dr as createVenueRef, Dt as generateShadowValue, En as NAV_LINK_BORDER_RADIUS_MAP, Er as createSiteCommandSiteRef, Et as formatButtonColourContractError, Fn as ACCORDION_OPEN_ACCENT_THICKNESS, Ft as generateMobileOverlayBackdropFilterFix, G as parseGradientPresetId, Gn as isOnColorBackgroundCandidateToken, Gt as MQ_SM_UP, H as gradientToCss, Hn as getDefaultCardVariants, Ht as MQ_LG_UP, In as ACCORDION_SPACING_MAP, It as getHeaderPaintTargets, J as backgroundAppearanceColorTokenNames, Jt as isCssColorLiteral, Kn as onColorTokenName, Kt as MQ_TABLET_ONLY, Ln as ACCORDION_TRIGGER_FONT_SCALE, Lt as renderHeaderPaintTargetRules, Mn as INPUT_FONT_SIZE_MAP, Mt as boxBackgroundOverlaySchema, Nn as INPUT_SPACING_MAP, Nt as boxBackgroundSchema, On as NAV_LINK_PADDING_MAP, Or as refSlug, Ot as expandPalette, P as compileTransitionRuntime, Pn as LABEL_FONT_SIZE_MAP, Pt as generateHeaderScrollTreatmentStyles, Q as defaultThemeTokens, Qn as DEFAULT_SURFACE_TEXT_COLOR, Qt as backgroundColorStyle, Rn as ACCORDION_TRIGGER_LETTER_SPACING, Rt as BREAKPOINT_LG, Sn as getComponentBorderWidthPx, Sr as createFooterRef, St as parseThemeButtonVariantId, T as readHeaderNavFontSizePreference, Tn as parseCustomCssRules, Tr as createPageRef, Tt as compileButtonColourStates, U as GRADIENT_PRESET_IDS, Un as generateCardCss, Ut as MQ_MD_DOWN, Vn as generateCardCoreCss, Vt as BREAKPOINT_XL, W as getGradientPreset, Wn as resolveSurfaceForeground, Wt as MQ_SM_DOWN, X as parseBackgroundAppearanceColorToken, Xn as hexToRgb, Xt as resolveThemeColorReferenceValue, Y as backgroundAppearanceQuickColorTokenNames, Yn as featuresFromHex, Yt as resolveOnColorForThemeToken, Z as buildThemeTokens, Zt as resolveTokenOrCssColorValue, _ as entryIdentifierForCommand, _n as makeBoundaryId, _r as createBlocksRef, _t as resolveContextualButtonRole, a as classifySdkEventBookingOffer, ar as cardVariantRoleValues, b as pagePathForCommand, bn as tileTreatmentValues, br as createEventCategoryRef, bt as generateBaseInteractiveCSS, c as stableStringify, cn as assertNever$4, cr as mediaIdentifierSchema, ct as PUBLIC_BUTTON_ROLES, d as mapEventCommandContent, dn as defineNoBlockDesignCapability, dr as persistableMediaSchema, dt as RESOLVED_BUTTON_DISABLED_DECLARATIONS, en as cssVarValue, er as surfaceForegroundStyle, et as require_jsx_runtime, f as evaluateSiteCommandBatchExposure, fn as eventListTreatmentValues, fr as VARIANT_ROLES, ft as resolvedButtonColourDeclarations, g as blockOrderIdentifiersForCommand, gn as introCompositionTreatmentValues, gr as createBlockRef, gt as deriveButtonSurfaceContext, h as blockIdentifierForCommand, hn as headingDecorationColorTokenValues, hr as parseBlockColorToken, ht as contextualButtonSurfaceStyles, in as pageDesignEditorBackgroundOverrideOwner, ir as cardRoleSchema, j as getCuratedSiteStyle, jn as FONT_WEIGHT_MAP, kn as NAV_LINK_PADDING_X_MAP, kr as slugPart, kt as getTextColorForBackground, l as createDryRunReport, ln as defineBlockDesignCapability, lr as mediaSchema, lt as AFFORDANCE_SUPPRESS_CLASS, m as getSiteCommandMetadata, mn as featureCardCompositionTreatmentValues, mr as unsafeAsOpaqueButtonColourToken, mt as contextualButtonSurfaceResetStyles, nn as rgbColorValue, nr as TokenResolver, nt as pickShadeTowardBackground, o as venueManagementFields, on as asDesignBlockId, or as normalizeCardRole, p as evaluateSiteCommandExposure, pn as eyebrowTreatmentValues, pr as buttonVariantIdSchema, pt as resolvedButtonFocusDeclarations, q as boundaryRuntimeMetricsForTransition, qn as ORDINARY_TEXT_MIN_CONTRAST_RATIO, qt as headerVariantValues, rn as textColorStyle, rr as generateShadowValue$1, rt as generateCssVars, s as sortRecord, t as classifySdkEventTiming, tn as mergeStyles, tr as surfaceForegroundValue, tt as require_react, u as parseAndPlanCommandBatchForTypes, un as defineFrameCapability, ur as mediaTypeDiscriminants, ut as generateButtonCss, v as pageIdentifierForBlockCommand, vn as offeringsPreviewCompositionTreatmentValues, vr as createCommandRef, vt as generateDefaultButtonSystem, w as mergeHeaderNavTypographyPreference, wn as parseBlockCustomCssRules, wr as createNavigationRef, wt as parseThemeForPersistence, x as hasConfiguredBookingVertical, xn as visibleHeadingDecorationFamilyValues, xr as createEventSeriesRef, xt as generateInteractiveChildInheritanceCSS, y as pageIdentifierForCommand, yn as testimonialsCompositionTreatmentValues, yr as createContentEntryRef, yt as generateEffectsCSS, zn as ICON_CONFIG, zt as BREAKPOINT_MD } from "../sdk-event-upsert-CS9tY-KW.mjs";
3
- import { $ as publicEventPricingDisplay, A as assertAllowedPublicUrl, B as getBookingLocalDateKey, C as parseMailingListSignedSourceToken, Ct as unsafeAsMediaAssetId, D as parseFooterCompositionV1, Et as unsafeAsPositiveByteCount, F as formatBookingDate, G as toScheduledBookingDateRange, H as getLocalScheduleTime, I as formatBookingDateParts, J as parseEventPageSurfaceSubject, K as toScheduledBookingDateTime, L as formatBookingTime, M as normalizeLocationAddressText, N as toLocationCoordinates, Nt as unsafeAsStaffMemberId, O as parseMailingListPlacementTargeting, P as buildBookingUtcDateWindow, Q as publicEventPricingCurrency, R as formatLocalScheduleDate, Rt as err, S as parseMailingListBlockId, T as planMailingListChoicePresentation, V as getLocalScheduleDate, W as toBookingTimeZone, X as formatEventPricing, Y as formatBookingPriceDisplay, Z as isPublicEventPricingOptionDisplayable, _ as createSecret, _t as unsafeAsDemoCapability, at as formatCurrencyAmount, c as DEFAULT_EVENT_TYPE_PRESETS, ct as parseEventSeriesId, d as SURFACE_EVENT_PRESET_VALUES, dt as parseSiteId, et as publicEventPricingType, f as WHOLE_SERIES_EVENT_PRESET_VALUES, ft as parseUserId, g as resolveWholeSeriesBookingPhase, h as orderedLiveRunSessions, i as isEventSeriesVerticalPresetDefinition, l as EVENT_PRESET_VALUES, lt as parseMediaAssetId, m as CANCELLED_SESSION_STATUS, n as areConfiguredBookingVerticalConfigsEqual, nt as resolvePricingOptionsPriceDisplay, ot as assertNever, p as publicReadFreshnessSeconds, pt as unsafeAsAppointmentResourceId, s as resolveSiteVerticalBookingConfig, st as parseApiKeyId, t as NAVIGATION_LOCATIONS, tt as resolveExactOrFreePriceDisplay, ut as parsePageId, v as exposeSecret, w as parseMailingListRuntimeContext, x as buildMailingListSignupBlockSourceRef, y as parseManagementKey, z as formatLocalScheduleTime, zt as ok } from "../src-DT7DBZtQ.mjs";
4
- import { $ as createOutputForCommand, A as isExplicitRectCrop, At as formatIgnoredDocumentSyncSectionWarning, B as resolveVideoSelectionIntentForMediaField, Bt as internalResolvedLinkSchema, C as attachRenderableMediaAssetFields, Ct as getEnvPrefix, D as looksLikeUuid$1, Dt as isRemoteConfigured, E as deleteEnvSpecificKeys, Et as isLocalConfigured, F as getImageUrl, Ft as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, G as classifyKnownMimeType, Gt as pageLinkSchema$1, H as asRecord$1, Ht as isInternalResolvedLinkValue, I as isSiteScopedDirectImageStoragePath, It as customLinkSchema$1, J as confirmAction, K as managementMediaLibraryUploadLimitForMimeType, Kt as sdkConfiguredBookingVerticalConfigSchema, L as buildMediaIdentifierFromFilename, Lt as entryLinkSchema$1, M as resolveMediaTransformForAspect, Mt as sdkSettingsUpdateSchema, N as getDirectImageUrlForRelativePath, Nt as sdkThemeWireSchema, O as rotateNormalizedPoint, Ot as loadSdkEnvironment, P as getDirectImageUrlForSiteScopedPath, Pt as linkPayloadSchema, Q as createListCommand, R as parseMediaIdentifier, Rt as externalLinkSchema$1, S as isMediaValue, St as CliExit, T as walkAndCollectImageAttrs, Tt as getEnvironmentDebugInfo, U as parseRelativeStoragePath, Ut as isResolvedInternalLinkEntityType, V as getMimeType, Vt as internalRouteOnlyLinkSchema, W as FILE_SIZE_LIMITS, Wt as linkSchema, X as createCommandContext, Y as createClientForEnv, Z as createGetCommand, _ as extractMediaIdentifiers, _t as planEnvironmentExecution, a as syncLocalMediaForPull, at as mapEntryForOutput, b as hasOwnSettingsField, bt as withRiverbankEnv, c as admitBinaryWriteDestination, ct as parsePaginationOptions, d as sha256, dt as withCommandContext, et as currentInvocationEnvelope, f as normalizeMediaIdentifierInput, ft as withConfirmation, g as downloadMedia, gt as parseEnvironmentSelection, h as buildStorageUrl, ht as executeEnvironmentPlan, it as handleCommandError, j as parseAspectRatioValue, jt as ManagementApiError, k as normalizeWidthCandidates, kt as createManagementClient, l as readStableBinaryFile, lt as resolveCommandPath, m as walkLocalContentMedia, mt as withOutputOnlyErrorHandling, n as createStyleCommand, nt as getOutputContext, o as applyLocalMediaPush, ot as parseJsonArray, p as normalizeMediaValueToIdentifierOnly, pt as withErrorHandling, q as parseSafeDownloadFilename, r as revalidateLocalMediaPushPlan, rt as getOutputOnlyContext, s as prepareLocalMediaForPush, st as parseJsonData, tt as formatDateShort, u as writeBinaryFileAtomic, ut as runWithInvocation, v as SETTINGS_FILE_FIELDS, vt as planEnvironmentWriteAuthorization, w as buildRenderableMediaAssetIndex, wt as getEnvVarName, x as writeMediaManifest, xt as formatError, y as buildSettingsUpdateInput, yt as requireEnvironmentWriteAuthorization, z as deriveVideoSlotPolicy, zt as internalLinkSchema } from "../style-D2srLsI5.mjs";
5
- import { r as CLI_VERSION } from "../sdk-peer-BjTmH5Mt.mjs";
6
- import { t as loadConfigFile } from "../load-config-DBGNYfxV.mjs";
7
- import { a as RichTextDocSchema, c as isRecord$17, i as findUnfilledSentinels, n as buildEntryScaffold, o as isRichTextDoc, r as validateEntryInstance, s as isObjectRecord, t as eventUpsertInputSchema } from "../eventUpsertInputSchema-CWglzaib.mjs";
8
- 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-DgjlCWxa.mjs";
2
+ import { $ as require_react, $n as DEFAULT_SURFACE_TEXT_COLOR, An as ACCORDION_TRIGGER_LETTER_SPACING, Ar as __toESM, At as boxBackgroundOverlaySchema, Bn as mergeStyles, Bt as MQ_LG_UP, C as retargetCompiledBoundaryRuntimeForContentAdjacency, Cn as FONT_WEIGHT_MAP, Cr as createFormRef, Ct as compileButtonColourStates, Dn as ACCORDION_OPEN_ACCENT_THICKNESS, Dr as createVenueRef, Dt as getTextColorForBackground, En as LABEL_FONT_SIZE_MAP, Er as createSiteCommandSiteRef, Et as expandPalette, Fn as generateCardCss, Ft as renderHeaderPaintTargetRules, G as parseGradientPresetId, Gn as onColorTokenName, Gt as headerVariantValues, H as gradientToCss, Hn as textColorStyle, Ht as MQ_SM_DOWN, In as TokenResolver, It as BREAKPOINT_LG, J as backgroundAppearanceColorTokenNames, Jn as ORDINARY_TEXT_MIN_CONTRAST_RATIO, Jt as resolveThemeColorReferenceValue, Kn as buildThemeTokens, Kt as isCssColorLiteral, Ln as backgroundColorStyle, Lt as BREAKPOINT_MD, Mn as ICON_SIZE_PX, Mt as generateHeaderScrollTreatmentStyles, Nn as generateCardCoreCss, Nt as generateMobileOverlayBackdropFilterFix, On as ACCORDION_SPACING_MAP, Or as refSlug, Ot as themeSchema, P as compileTransitionRuntime, Pn as getDefaultCardVariants, Pt as getHeaderPaintTargets, Q as require_jsx_runtime, Qt as asDesignBlockId, Rn as borderColorStyle, Rt as BREAKPOINT_SM, Sn as NAV_LINK_TEXT_SIZE_MAP, Sr as createFooterRef, St as parseThemeForPersistence, T as readHeaderNavFontSizePreference, Tn as INPUT_SPACING_MAP, Tr as createPageRef, Tt as generateShadowValue, U as GRADIENT_PRESET_IDS, Un as resolveSurfaceForeground, Ut as MQ_SM_UP, Vn as rgbColorValue, Vt as MQ_MD_DOWN, W as getGradientPreset, Wn as isOnColorBackgroundCandidateToken, Wt as MQ_TABLET_ONLY, X as parseBackgroundAppearanceColorToken, Xn as featuresFromHex, Xt as pageDesignEditorBackgroundOverrideOwner, Y as backgroundAppearanceQuickColorTokenNames, Yt as resolveTokenOrCssColorValue, Z as defineBlockDesignMetadata, Zn as hexToRgb, _ as entryIdentifierForCommand, _n as parseCustomCssRules, _r as createBlocksRef, _t as generateEffectsCSS, a as classifySdkEventBookingOffer, an as eyebrowTreatmentValues, ar as cardVariantRoleValues, b as pagePathForCommand, bn as NAV_LINK_PADDING_MAP, br as createEventCategoryRef, bt as parseThemeButtonVariantId, c as stableStringify, cn as introCompositionTreatmentValues, cr as mediaIdentifierSchema, ct as generateButtonCss, d as mapEventCommandContent, dn as testimonialsCompositionTreatmentValues, dr as persistableMediaSchema, dt as resolvedButtonFocusDeclarations, en as assertNever$4, er as surfaceForegroundDeclarations, et as pickShadeTowardBackground, f as evaluateSiteCommandBatchExposure, fn as tileTreatmentValues, fr as VARIANT_ROLES, ft as contextualButtonSurfaceResetStyles, g as blockOrderIdentifiersForCommand, gn as parseBlockCustomCssRules, gr as createBlockRef, gt as generateDefaultButtonSystem, h as blockIdentifierForCommand, hn as getComponentShadowVar, hr as parseBlockColorToken, ht as resolveContextualButtonRole, in as eventListTreatmentValues, ir as cardRoleSchema, j as getCuratedSiteStyle, jn as ICON_CONFIG, jt as boxBackgroundSchema, kn as ACCORDION_TRIGGER_FONT_SCALE, kr as slugPart, l as createDryRunReport, ln as makeBoundaryId, lr as mediaSchema, lt as RESOLVED_BUTTON_DISABLED_DECLARATIONS, m as getSiteCommandMetadata, mn as getComponentBorderWidthPx, mr as unsafeAsOpaqueButtonColourToken, mt as deriveButtonSurfaceContext, nn as defineFrameCapability, nr as surfaceForegroundValue, o as venueManagementFields, on as featureCardCompositionTreatmentValues, or as normalizeCardRole, ot as PUBLIC_BUTTON_ROLES, p as evaluateSiteCommandExposure, pn as visibleHeadingDecorationFamilyValues, pr as buttonVariantIdSchema, pt as contextualButtonSurfaceStyles, q as boundaryRuntimeMetricsForTransition, qn as defaultThemeTokens, qt as resolveOnColorForThemeToken, rn as defineNoBlockDesignCapability, rr as generateShadowValue$1, s as sortRecord, sn as headingDecorationColorTokenValues, st as AFFORDANCE_SUPPRESS_CLASS, t as classifySdkEventTiming, tn as defineBlockDesignCapability, tr as surfaceForegroundStyle, tt as generateCssVars, u as parseAndPlanCommandBatchForTypes, un as offeringsPreviewCompositionTreatmentValues, ur as mediaTypeDiscriminants, ut as resolvedButtonColourDeclarations, v as pageIdentifierForBlockCommand, vn as NAV_LINK_BORDER_RADIUS_MAP, vr as createCommandRef, vt as generateBaseInteractiveCSS, w as mergeHeaderNavTypographyPreference, wn as INPUT_FONT_SIZE_MAP, wr as createNavigationRef, wt as formatButtonColourContractError, x as hasConfiguredBookingVertical, xn as NAV_LINK_PADDING_X_MAP, xr as createEventSeriesRef, xt as themeButtonClassName, y as pageIdentifierForCommand, yn as NAV_LINK_LETTER_SPACING_MAP, yr as createContentEntryRef, yt as generateInteractiveChildInheritanceCSS, zn as cssVarValue, zt as BREAKPOINT_XL } from "../sdk-event-upsert-Cp043nSP.mjs";
3
+ import { $ as formatEventPricing, A as parseFooterCompositionV1, B as formatBookingTime, C as parseMailingListContentVersionId, D as DEFAULT_MAILING_LIST_SUCCESS_MESSAGE, E as planMailingListChoicePresentation, Et as unsafeAsMediaAssetId, F as normalizeLocationAddressText, G as getLocalScheduleTime, H as formatLocalScheduleTime, Ht as ok, I as toLocationCoordinates, It as unsafeAsStaffMemberId, J as toScheduledBookingDateRange, L as buildBookingUtcDateWindow, N as assertAllowedPublicUrl, O as parseMailingListProviderScope, Q as formatBookingPriceDisplay, R as formatBookingDate, S as parseMailingListBlockId, T as parseMailingListRuntimeContext, U as getBookingLocalDateKey, V as formatLocalScheduleDate, Vt as err, W as getLocalScheduleDate, Y as toScheduledBookingDateTime, Z as parseEventPageSurfaceSubject, _ as createSecret, at as resolvePricingOptionsPriceDisplay, bt as unsafeAsDemoCapability, c as DEFAULT_EVENT_TYPE_PRESETS, ct as formatCurrencyAmount, d as SURFACE_EVENT_PRESET_VALUES, dt as parseEventSeriesId, et as isPublicEventPricingOptionDisplayable, f as WHOLE_SERIES_EVENT_PRESET_VALUES, ft as parseMediaAssetId, g as resolveWholeSeriesBookingPhase, gt as unsafeAsAppointmentResourceId, h as orderedLiveRunSessions, ht as parseUserId, i as isEventSeriesVerticalPresetDefinition, it as resolveExactOrFreePriceDisplay, j as parseMailingListPlacementTargeting, kt as unsafeAsPositiveByteCount, l as EVENT_PRESET_VALUES, lt as assertNever, m as CANCELLED_SESSION_STATUS, mt as parseSiteId, n as areConfiguredBookingVerticalConfigsEqual, nt as publicEventPricingDisplay, p as publicReadFreshnessSeconds, pt as parsePageId, q as toBookingTimeZone, rt as publicEventPricingType, s as resolveSiteVerticalBookingConfig, t as NAVIGATION_LOCATIONS, tt as publicEventPricingCurrency, ut as parseApiKeyId, v as exposeSecret, w as parseMailingListSignedSourceToken, x as buildMailingListSignupBlockSourceRef, y as parseManagementKey, z as formatBookingDateParts } from "../src-B8fOSKJ6.mjs";
4
+ import { $ as createOutputForCommand, A as isExplicitRectCrop, At as formatIgnoredDocumentSyncSectionWarning, B as resolveVideoSelectionIntentForMediaField, Bt as internalResolvedLinkSchema, C as attachRenderableMediaAssetFields, Ct as getEnvPrefix, D as looksLikeUuid$1, Dt as isRemoteConfigured, E as deleteEnvSpecificKeys, Et as isLocalConfigured, F as getImageUrl, Ft as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, G as classifyKnownMimeType, Gt as pageLinkSchema$1, H as asRecord$1, Ht as isInternalResolvedLinkValue, I as isSiteScopedDirectImageStoragePath, It as customLinkSchema$1, J as confirmAction, K as managementMediaLibraryUploadLimitForMimeType, Kt as sdkConfiguredBookingVerticalConfigSchema, L as buildMediaIdentifierFromFilename, Lt as entryLinkSchema$1, M as resolveMediaTransformForAspect, Mt as sdkSettingsUpdateSchema, N as getDirectImageUrlForRelativePath, Nt as sdkThemeWireSchema, O as rotateNormalizedPoint, Ot as loadSdkEnvironment, P as getDirectImageUrlForSiteScopedPath, Pt as linkPayloadSchema, Q as createListCommand, R as parseMediaIdentifier, Rt as externalLinkSchema$1, S as isMediaValue, St as CliExit, T as walkAndCollectImageAttrs, Tt as getEnvironmentDebugInfo, U as parseRelativeStoragePath, Ut as isResolvedInternalLinkEntityType, V as getMimeType, Vt as internalRouteOnlyLinkSchema, W as FILE_SIZE_LIMITS, Wt as linkSchema, X as createCommandContext, Y as createClientForEnv, Z as createGetCommand, _ as extractMediaIdentifiers, _t as planEnvironmentExecution, a as syncLocalMediaForPull, at as mapEntryForOutput, b as hasOwnSettingsField, bt as withRiverbankEnv, c as admitBinaryWriteDestination, ct as parsePaginationOptions, d as sha256, dt as withCommandContext, et as currentInvocationEnvelope, f as normalizeMediaIdentifierInput, ft as withConfirmation, g as downloadMedia, gt as parseEnvironmentSelection, h as buildStorageUrl, ht as executeEnvironmentPlan, it as handleCommandError, j as parseAspectRatioValue, jt as ManagementApiError, k as normalizeWidthCandidates, kt as createManagementClient, l as readStableBinaryFile, lt as resolveCommandPath, m as walkLocalContentMedia, mt as withOutputOnlyErrorHandling, n as createStyleCommand, nt as getOutputContext, o as applyLocalMediaPush, ot as parseJsonArray, p as normalizeMediaValueToIdentifierOnly, pt as withErrorHandling, q as parseSafeDownloadFilename, r as revalidateLocalMediaPushPlan, rt as getOutputOnlyContext, s as prepareLocalMediaForPush, st as parseJsonData, tt as formatDateShort, u as writeBinaryFileAtomic, ut as runWithInvocation, v as SETTINGS_FILE_FIELDS, vt as planEnvironmentWriteAuthorization, w as buildRenderableMediaAssetIndex, wt as getEnvVarName, x as writeMediaManifest, xt as formatError, y as buildSettingsUpdateInput, yt as requireEnvironmentWriteAuthorization, z as deriveVideoSlotPolicy, zt as internalLinkSchema } from "../style-BiosmAJm.mjs";
5
+ import { r as CLI_VERSION } from "../sdk-peer-CADuG9SR.mjs";
6
+ import { t as loadConfigFile } from "../load-config-CkSoLJFY.mjs";
7
+ import { a as RichTextDocSchema, c as isRecord$17, i as findUnfilledSentinels, n as buildEntryScaffold, o as isRichTextDoc, r as validateEntryInstance, s as isObjectRecord, t as eventUpsertInputSchema } from "../eventUpsertInputSchema-DP8gbZJ9.mjs";
8
+ 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-BFmMfERc.mjs";
9
9
  import { config } from "dotenv";
10
10
  import { Command, CommanderError } from "commander";
11
11
  import * as fs$1 from "fs/promises";
@@ -1739,6 +1739,14 @@ const PUBLIC_BOOKING_AVAILABILITY_ENDPOINT_DEFINITIONS = defineEndpointDefinitio
1739
1739
  auth: "public",
1740
1740
  responseKind: "json"
1741
1741
  },
1742
+ getPublicBookingServiceBySlug: {
1743
+ path: "/public/bookings/services/by-slug/{slug}",
1744
+ method: "GET",
1745
+ revalidate: publicReadFreshnessSeconds("getPublicBookingService"),
1746
+ tags: [TAG_TEMPLATES.publicBookingServices],
1747
+ auth: "public",
1748
+ responseKind: "json"
1749
+ },
1742
1750
  getPublicBookingResourcesReference: {
1743
1751
  path: "/public/bookings/resources/reference",
1744
1752
  method: "GET",
@@ -2298,13 +2306,109 @@ const PUBLIC_READ_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
2298
2306
  }
2299
2307
  });
2300
2308
 
2309
+ //#endregion
2310
+ //#region ../api/src/publicOnboardingAttemptEndpointDefinitions.ts
2311
+ /**
2312
+ * The anonymous onboarding attempt, addressed by its opaque resume token.
2313
+ *
2314
+ * Every route here is reached before there is an account, so none of them can
2315
+ * be scoped to a site or a user: the token is the whole credential. They are
2316
+ * kept together so that stays obvious.
2317
+ */
2318
+ const PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
2319
+ createPublicOnboardingAttempt: {
2320
+ path: "/public/onboarding/attempts",
2321
+ method: "POST",
2322
+ auth: "public",
2323
+ errors: [],
2324
+ responseKind: "json"
2325
+ },
2326
+ createPublicOnboardingLogoUploadUrl: {
2327
+ path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
2328
+ method: "POST",
2329
+ auth: "public",
2330
+ errors: [],
2331
+ responseKind: "json"
2332
+ },
2333
+ uploadPublicOnboardingLogo: {
2334
+ path: "/public/onboarding/attempts/{attemptToken}/logo",
2335
+ method: "POST",
2336
+ auth: "public",
2337
+ errors: [],
2338
+ responseKind: "json"
2339
+ },
2340
+ getPublicOnboardingAttempt: {
2341
+ path: "/public/onboarding/attempts/{attemptToken}",
2342
+ method: "GET",
2343
+ auth: "public",
2344
+ errors: [],
2345
+ responseKind: "json"
2346
+ },
2347
+ getPublicOnboardingAttemptProgress: {
2348
+ path: "/public/onboarding/attempts/{attemptToken}/status",
2349
+ method: "GET",
2350
+ auth: "public",
2351
+ errors: [],
2352
+ responseKind: "json"
2353
+ },
2354
+ updatePublicOnboardingAttempt: {
2355
+ path: "/public/onboarding/attempts/{attemptToken}",
2356
+ method: "PATCH",
2357
+ auth: "public",
2358
+ errors: [],
2359
+ responseKind: "json"
2360
+ },
2361
+ runPublicOnboardingAttempt: {
2362
+ path: "/public/onboarding/attempts/{attemptToken}/run",
2363
+ method: "POST",
2364
+ auth: "public",
2365
+ errors: [],
2366
+ responseKind: "json"
2367
+ },
2368
+ resendPublicOnboardingAttemptConfirmation: {
2369
+ path: "/public/onboarding/attempts/{attemptToken}/resend-confirmation",
2370
+ method: "POST",
2371
+ auth: "public",
2372
+ errors: [],
2373
+ responseKind: "json"
2374
+ }
2375
+ });
2376
+
2377
+ //#endregion
2378
+ //#region ../api/src/billingEndpointDefinitions.ts
2379
+ const BILLING_ENDPOINT_DEFINITIONS = defineEndpointDefinitions({
2380
+ adminChangePlan: {
2381
+ path: "/admin/billing/plan",
2382
+ method: "POST",
2383
+ tags: ["admin", "billing"],
2384
+ auth: "admin",
2385
+ responseKind: "json"
2386
+ },
2387
+ changePlan: {
2388
+ path: "/billing/plan/change",
2389
+ method: "POST",
2390
+ tags: ["billing"],
2391
+ auth: "user",
2392
+ responseKind: "json"
2393
+ },
2394
+ createBillingPortalSession: {
2395
+ path: "/billing/portal/session",
2396
+ method: "POST",
2397
+ tags: ["billing"],
2398
+ auth: "user",
2399
+ responseKind: "json"
2400
+ }
2401
+ });
2402
+
2301
2403
  //#endregion
2302
2404
  //#region ../api/src/endpoints.ts
2303
2405
  const ENDPOINT_DEFINITIONS = {
2304
2406
  ...ACCOUNT_ENDPOINT_DEFINITIONS,
2407
+ ...PUBLIC_ONBOARDING_ATTEMPT_ENDPOINT_DEFINITIONS,
2305
2408
  ...PUBLIC_EVENT_ENDPOINT_DEFINITIONS,
2306
2409
  ...GIFTING_ENDPOINT_DEFINITIONS,
2307
2410
  ...PUBLIC_READ_ENDPOINT_DEFINITIONS,
2411
+ ...BILLING_ENDPOINT_DEFINITIONS,
2308
2412
  aiContentUpdateChat: {
2309
2413
  path: "/ai/content-update-chat",
2310
2414
  method: "POST",
@@ -2458,55 +2562,6 @@ const ENDPOINT_DEFINITIONS = {
2458
2562
  errors: [],
2459
2563
  responseKind: "json"
2460
2564
  },
2461
- createPublicOnboardingAttempt: {
2462
- path: "/public/onboarding/attempts",
2463
- method: "POST",
2464
- auth: "public",
2465
- errors: [],
2466
- responseKind: "json"
2467
- },
2468
- createPublicOnboardingLogoUploadUrl: {
2469
- path: "/public/onboarding/attempts/{attemptToken}/logo-upload-url",
2470
- method: "POST",
2471
- auth: "public",
2472
- errors: [],
2473
- responseKind: "json"
2474
- },
2475
- uploadPublicOnboardingLogo: {
2476
- path: "/public/onboarding/attempts/{attemptToken}/logo",
2477
- method: "POST",
2478
- auth: "public",
2479
- errors: [],
2480
- responseKind: "json"
2481
- },
2482
- getPublicOnboardingAttempt: {
2483
- path: "/public/onboarding/attempts/{attemptToken}",
2484
- method: "GET",
2485
- auth: "public",
2486
- errors: [],
2487
- responseKind: "json"
2488
- },
2489
- getPublicOnboardingAttemptProgress: {
2490
- path: "/public/onboarding/attempts/{attemptToken}/status",
2491
- method: "GET",
2492
- auth: "public",
2493
- errors: [],
2494
- responseKind: "json"
2495
- },
2496
- updatePublicOnboardingAttempt: {
2497
- path: "/public/onboarding/attempts/{attemptToken}",
2498
- method: "PATCH",
2499
- auth: "public",
2500
- errors: [],
2501
- responseKind: "json"
2502
- },
2503
- runPublicOnboardingAttempt: {
2504
- path: "/public/onboarding/attempts/{attemptToken}/run",
2505
- method: "POST",
2506
- auth: "public",
2507
- errors: [],
2508
- responseKind: "json"
2509
- },
2510
2565
  aiSiteWizardSuggestGoals: {
2511
2566
  path: "/sites/{siteId}/ai/site-wizard/goals",
2512
2567
  method: "POST",
@@ -4022,20 +4077,6 @@ const ENDPOINT_DEFINITIONS = {
4022
4077
  auth: "admin",
4023
4078
  responseKind: "json"
4024
4079
  },
4025
- adminChangePlan: {
4026
- path: "/admin/billing/plan",
4027
- method: "POST",
4028
- tags: ["admin", "billing"],
4029
- auth: "admin",
4030
- responseKind: "json"
4031
- },
4032
- changePlan: {
4033
- path: "/billing/plan/change",
4034
- method: "POST",
4035
- tags: ["billing"],
4036
- auth: "user",
4037
- responseKind: "json"
4038
- },
4039
4080
  mfaTotpEnroll: {
4040
4081
  path: "/auth/mfa/totp/enroll",
4041
4082
  method: "POST",
@@ -4384,7 +4425,12 @@ const ENDPOINT_DEFINITIONS = {
4384
4425
  path: "/public/sites/{siteId}/sitemap",
4385
4426
  method: "GET",
4386
4427
  revalidate: 60,
4387
- tags: [TAG_TEMPLATES.siteRoutableContent, TAG_TEMPLATES.siteSettings],
4428
+ tags: [
4429
+ TAG_TEMPLATES.siteRoutableContent,
4430
+ TAG_TEMPLATES.siteSettings,
4431
+ TAG_TEMPLATES.publicEvents,
4432
+ TAG_TEMPLATES.publicBookingServices
4433
+ ],
4388
4434
  auth: "public",
4389
4435
  responseKind: "json"
4390
4436
  },
@@ -7703,6 +7749,17 @@ const ENDPOINT_DEFINITIONS = {
7703
7749
  auth: "public",
7704
7750
  responseKind: "json"
7705
7751
  },
7752
+ portalCancelWaitlistEntry: {
7753
+ path: "/portal/waitlists/{entryId}/cancel",
7754
+ method: "POST",
7755
+ auth: "public",
7756
+ responseKind: "json",
7757
+ errors: [
7758
+ "resource:not_found",
7759
+ "resource:conflict",
7760
+ "server:internal_error"
7761
+ ]
7762
+ },
7706
7763
  portalGetEventGuests: {
7707
7764
  path: "/portal/events/{registrationId}/guests",
7708
7765
  method: "GET",
@@ -8971,7 +9028,8 @@ async function pushToDashboard(dashboardUrl, siteId, apiKey, config$1, options)
8971
9028
  body: {
8972
9029
  config: config$1,
8973
9030
  forceContentTypes: options?.forceContentTypes ?? false,
8974
- mode: options?.dryRun ? "preview" : "apply"
9031
+ mode: options?.dryRun ? "preview" : "apply",
9032
+ expectedMailingListProviderScope: options?.expectedMailingListProviderScope ?? undefined
8975
9033
  },
8976
9034
  options: { signal: AbortSignal.timeout(3e4) }
8977
9035
  }));
@@ -9224,7 +9282,8 @@ async function revalidatePushConfigPlan(context, plan) {
9224
9282
  async function applyPushConfigPlan(output, context, plan, options, isJsonOutput) {
9225
9283
  const response = options.dryRun ? plan.preview : await pushToDashboard(context.dashboard, plan.config.siteId, context.apiKey, plan.config, {
9226
9284
  forceContentTypes: plan.forceContentTypes,
9227
- dryRun: false
9285
+ dryRun: false,
9286
+ expectedMailingListProviderScope: plan.preview.mailingListProviderScope
9228
9287
  });
9229
9288
  return {
9230
9289
  response,
@@ -10570,9 +10629,9 @@ const DASHBOARD_SITE_NAV_DESCRIPTORS = [
10570
10629
  },
10571
10630
  {
10572
10631
  id: "site.newsletter",
10573
- label: "Newsletter",
10632
+ label: "Mailing list",
10574
10633
  stage: "internal",
10575
- minRole: "editor",
10634
+ minRole: "administrator",
10576
10635
  featureFlag: "newsletterVisible"
10577
10636
  },
10578
10637
  {
@@ -10677,6 +10736,12 @@ const SETTINGS_SURFACE_POLICIES = {
10677
10736
  pageAccessPolicy: editorPolicy,
10678
10737
  actionIds: []
10679
10738
  },
10739
+ "settings.business": {
10740
+ surfaceId: "settings.business",
10741
+ navVisibilityPolicy: editorPolicy,
10742
+ pageAccessPolicy: editorPolicy,
10743
+ actionIds: ["privacy.update"]
10744
+ },
10680
10745
  "settings.privacy": {
10681
10746
  surfaceId: "settings.privacy",
10682
10747
  navVisibilityPolicy: administratorPolicy,
@@ -10845,6 +10910,21 @@ const DASHBOARD_SETTINGS_NAV_GROUPS = [
10845
10910
  ],
10846
10911
  stage: "ga"
10847
10912
  },
10913
+ {
10914
+ id: "settings.business",
10915
+ label: "Business details",
10916
+ keywords: [
10917
+ "business",
10918
+ "contact",
10919
+ "email",
10920
+ "phone",
10921
+ "address",
10922
+ "opening hours",
10923
+ "social",
10924
+ "premises"
10925
+ ],
10926
+ stage: "ga"
10927
+ },
10848
10928
  {
10849
10929
  id: "settings.privacy",
10850
10930
  label: "Privacy",
@@ -22878,6 +22958,28 @@ const bookingConsentCarrierSchema = z.union([blockBookingConsentSchema, bookingR
22878
22958
 
22879
22959
  //#endregion
22880
22960
  //#region ../blocks/src/system/blocks/events/shared/schemas.ts
22961
+ const publicEventLoaderQuerySchemaShape = {
22962
+ limit: z.string().optional(),
22963
+ from: z.string().optional(),
22964
+ to: z.string().optional(),
22965
+ afterStartsAt: z.string().optional(),
22966
+ afterId: z.string().optional(),
22967
+ categoryIds: z.string().optional(),
22968
+ venueId: z.string().optional(),
22969
+ staffMemberId: z.string().optional(),
22970
+ eventSurface: z.string().optional(),
22971
+ eventPresets: z.string().optional(),
22972
+ scheduleScope: z.string().optional(),
22973
+ seriesId: z.string().optional(),
22974
+ seriesIds: z.string().optional(),
22975
+ runSeriesId: z.string().optional(),
22976
+ seriesSlug: z.string().optional(),
22977
+ includeOccurrenceId: z.string().optional(),
22978
+ readIntent: z.string().optional(),
22979
+ detailLevel: z.string().optional(),
22980
+ readProfile: z.string().optional()
22981
+ };
22982
+ const publicEventLoaderQuerySchema = z.object(publicEventLoaderQuerySchemaShape);
22881
22983
  const eventPresetSchema = z.enum([
22882
22984
  "event",
22883
22985
  "class",
@@ -23374,7 +23476,7 @@ function planCalendarMonthRanges(months) {
23374
23476
  const sorted = [...new Set(months)].sort();
23375
23477
  const ranges = [];
23376
23478
  for (const month of sorted) {
23377
- const previous = ranges.at(-1);
23479
+ const previous = ranges[ranges.length - 1];
23378
23480
  const end = calendarMonthKey(addMonths(calendarMonthDate(month), 1));
23379
23481
  if (previous?.endMonthExclusive === month && monthNumber(end) - monthNumber(previous.startMonth) <= 3) previous.endMonthExclusive = end;
23380
23482
  else ranges.push({
@@ -26931,7 +27033,7 @@ const publicPricingSchema = z.object({
26931
27033
  singlePriceAmount: z.number().nullable(),
26932
27034
  slidingMinAmount: z.number().nullable(),
26933
27035
  slidingMaxAmount: z.number().nullable(),
26934
- options: z.array(publicPricingOptionSchema)
27036
+ options: z.array(publicPricingOptionSchema).readonly()
26935
27037
  });
26936
27038
  const publicAppointmentServiceSchema = z.object({
26937
27039
  id: z.string().min(1),
@@ -37143,6 +37245,49 @@ function getRegistrationStartAt(event, occurrenceContext) {
37143
37245
  return event?.registrationSubject.kind === "wholeSeries" ? event.startsAt : occurrenceContext?.startsAt ?? event?.startsAt;
37144
37246
  }
37145
37247
 
37248
+ //#endregion
37249
+ //#region ../blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.ts
37250
+ const { limit: _rawLimit, eventSurface: _rawEventSurface, scheduleScope: _rawScheduleScope, detailLevel: _rawDetailLevel, ...stringEventQueryShape } = publicEventLoaderQuerySchemaShape;
37251
+ const eventRecoveryRequestSchema = z.object({
37252
+ ...stringEventQueryShape,
37253
+ limit: z.coerce.number().int().positive().optional(),
37254
+ eventSurface: z.enum(eventSurfaceScopeValues).optional(),
37255
+ scheduleScope: z.enum(eventScheduleScopeValues).optional(),
37256
+ detailLevel: z.enum(["full", "listing"]).optional(),
37257
+ stage: z.enum(["preview", "published"]).optional()
37258
+ });
37259
+ function resolveEventRegistrationEventSource(input) {
37260
+ if (input.wholeSeriesRunEvents != null) {
37261
+ return {
37262
+ kind: "loaded",
37263
+ events: input.wholeSeriesRunEvents
37264
+ };
37265
+ }
37266
+ if (input.events != null) {
37267
+ return {
37268
+ kind: "loaded",
37269
+ events: input.events
37270
+ };
37271
+ }
37272
+ return {
37273
+ kind: "unresolved",
37274
+ request: parseEventLoaderRecoveryRequest(input.failures?.wholeSeriesRunEvents ?? input.failures?.events)
37275
+ };
37276
+ }
37277
+ const eventLoaderFailureSchema = z.object({
37278
+ endpoint: z.literal("listPublicEvents"),
37279
+ params: eventRecoveryRequestSchema.extend({ siteId: z.string().optional() })
37280
+ });
37281
+ function parseEventLoaderRecoveryRequest(value) {
37282
+ const parsed = eventLoaderFailureSchema.safeParse(value);
37283
+ if (!parsed.success) return null;
37284
+ const { siteId: _siteId, stage, ...params } = parsed.data.params;
37285
+ return {
37286
+ ...params,
37287
+ stage: stage ?? "published"
37288
+ };
37289
+ }
37290
+
37146
37291
  //#endregion
37147
37292
  //#region ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
37148
37293
  const EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = [
@@ -37161,8 +37306,6 @@ const eventRegistrationPublicEventSchema = z.preprocess(normalizeEventRegistrati
37161
37306
  const eventRegistrationHydrationSchemaShape = {
37162
37307
  occurrenceContext: occurrenceContextSchema.optional(),
37163
37308
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
37164
- events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
37165
- wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
37166
37309
  maxTickets: z.string().optional(),
37167
37310
  showVenue: z.boolean().optional(),
37168
37311
  showCapacity: z.boolean().optional(),
@@ -37174,12 +37317,22 @@ const eventRegistrationHydrationSchemaShape = {
37174
37317
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
37175
37318
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
37176
37319
  };
37320
+ const eventRegistrationEventSourceSchema = z.discriminatedUnion("kind", [z.object({
37321
+ kind: z.literal("loaded"),
37322
+ events: z.array(eventRegistrationPublicEventSchema)
37323
+ }), z.object({
37324
+ kind: z.literal("unresolved"),
37325
+ request: eventRecoveryRequestSchema.nullable()
37326
+ })]);
37177
37327
  const eventRegistrationSourceSchema = z.object({
37178
37328
  siteId: z.string().optional(),
37179
37329
  apiBaseUrl: z.string().optional(),
37180
37330
  portalToken: z.string().nullable().optional(),
37181
37331
  previewToken: z.string().nullable().optional(),
37182
37332
  ...eventRegistrationHydrationSchemaShape,
37333
+ events: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
37334
+ wholeSeriesRunEvents: z.array(eventRegistrationPublicEventSchema).nullable().optional(),
37335
+ eventLoaderFailures: z.record(z.string(), z.unknown()).nullable().optional(),
37183
37336
  className: z.string().nullable().optional(),
37184
37337
  buttonText: z.string().nullable().optional(),
37185
37338
  maxTickets: z.string().nullable().optional(),
@@ -37200,7 +37353,10 @@ const eventRegistrationDisplaySchema = z.discriminatedUnion("state", [z.object({
37200
37353
  titleText: z.string(),
37201
37354
  bodyText: z.string()
37202
37355
  })]);
37203
- const eventRegistrationHydrationSchema = z.object(eventRegistrationHydrationSchemaShape);
37356
+ const eventRegistrationHydrationSchema = z.object({
37357
+ ...eventRegistrationHydrationSchemaShape,
37358
+ eventSource: eventRegistrationEventSourceSchema
37359
+ });
37204
37360
  const eventRegistrationRenderSchema = z.object({
37205
37361
  display: eventRegistrationDisplaySchema,
37206
37362
  hydration: eventRegistrationHydrationSchema
@@ -37266,17 +37422,13 @@ function buildEventRegistrationShellStepLabels(source, scopedSourceEvents) {
37266
37422
  function toScopedEventRegistrationEvents(scopedSourceEvents) {
37267
37423
  return [...toRegistrationEvents(scopedSourceEvents), ...toWholeSeriesRegistrationEvents(scopedSourceEvents)];
37268
37424
  }
37269
- function scopeEventRegistrationSourceEvents(source) {
37270
- const sourceEvents = source.wholeSeriesRunEvents ?? source.events ?? [];
37425
+ function scopeEventRegistrationSourceEvents(source, eventSource) {
37426
+ const sourceEvents = eventSource.kind === "loaded" ? eventSource.events : [];
37271
37427
  return resolveEventRegistrationScopedEvents(sourceEvents, {
37272
37428
  occurrenceContext: source.occurrenceContext,
37273
37429
  subject: source.subject
37274
37430
  });
37275
37431
  }
37276
- function resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents) {
37277
- if (source.events == null && source.wholeSeriesRunEvents == null) return null;
37278
- return [...scopedSourceEvents];
37279
- }
37280
37432
  /**
37281
37433
  * The one run this surface is registering for, when the scoped events describe
37282
37434
  * exactly one. More than one run means the visitor still has to choose.
@@ -37320,14 +37472,21 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
37320
37472
  render: createZodCodec(eventRegistrationRenderSchema)
37321
37473
  },
37322
37474
  buildRender: (source) => {
37323
- const scopedSourceEvents = scopeEventRegistrationSourceEvents(source);
37324
- const events = resolveLoadedEventRegistrationSourceEvents(source, scopedSourceEvents);
37475
+ const eventSource = resolveEventRegistrationEventSource({
37476
+ events: source.events,
37477
+ wholeSeriesRunEvents: source.wholeSeriesRunEvents,
37478
+ failures: source.eventLoaderFailures
37479
+ });
37480
+ const scopedSourceEvents = scopeEventRegistrationSourceEvents(source, eventSource);
37325
37481
  return {
37326
37482
  display: buildEventRegistrationDisplayFromScopedEvents(source, scopedSourceEvents),
37327
37483
  hydration: {
37328
37484
  occurrenceContext: source.occurrenceContext ?? null,
37329
37485
  subject: source.subject ?? null,
37330
- events,
37486
+ eventSource: eventSource.kind === "loaded" ? {
37487
+ ...eventSource,
37488
+ events: [...scopedSourceEvents]
37489
+ } : eventSource,
37331
37490
  maxTickets: source.maxTickets ?? undefined,
37332
37491
  showVenue: source.showVenue,
37333
37492
  showCapacity: source.showCapacity,
@@ -37552,6 +37711,7 @@ const eventRegistrationManifest = createBlockManifest({
37552
37711
  } },
37553
37712
  events: { $bind: { from: "data.events" } },
37554
37713
  wholeSeriesRunEvents: { $bind: { from: "data.wholeSeriesRunEvents" } },
37714
+ loaderFailures: { $bind: { from: "$root.loaderFailures" } },
37555
37715
  sitePasses: { $bind: { from: "data.sitePasses" } },
37556
37716
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
37557
37717
  stage: { $bind: {
@@ -39628,6 +39788,15 @@ const newsletterFieldSchema = z.object({
39628
39788
  placeholder: z.string().optional()
39629
39789
  });
39630
39790
  const mailingListSignupBlockIdSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignupBlockId);
39791
+ const mailingListContentVersionIdSchema = z.string().transform((value, ctx) => {
39792
+ const parsed = parseMailingListContentVersionId(value);
39793
+ if (parsed) return parsed;
39794
+ ctx.addIssue({
39795
+ code: z.ZodIssueCode.custom,
39796
+ message: "Invalid mailing-list content version ID"
39797
+ });
39798
+ return z.NEVER;
39799
+ });
39631
39800
  const signedMailingListSourceTokenSchema = z.string().trim().min(1).transform(parseRequiredMailingListSignedSourceToken);
39632
39801
  const newsletterSourceCommonSchema = z.object({
39633
39802
  siteId: z.string().optional(),
@@ -39641,7 +39810,8 @@ const newsletterSourceCommonSchema = z.object({
39641
39810
  const newsletterSourceSchema = z.discriminatedUnion("source", [
39642
39811
  newsletterSourceCommonSchema.extend({
39643
39812
  source: z.literal("block"),
39644
- blockId: z.string().nullable().optional()
39813
+ blockId: z.string().nullable().optional(),
39814
+ contentVersionId: z.string().nullable().optional()
39645
39815
  }),
39646
39816
  newsletterSourceCommonSchema.extend({
39647
39817
  source: z.literal("signed-footer"),
@@ -39657,6 +39827,7 @@ const newsletterDisplaySchema = z.object({
39657
39827
  availability: z.enum(["ready", "unavailable"]),
39658
39828
  className: z.string().nullable(),
39659
39829
  buttonLabel: z.string(),
39830
+ successMessage: z.string(),
39660
39831
  buttonVariant: newsletterButtonVariantSchema,
39661
39832
  privacyNote: z.string().nullable(),
39662
39833
  fields: z.array(newsletterFieldSchema),
@@ -39671,7 +39842,8 @@ const newsletterHydrationSchema = z.object({
39671
39842
  tag: z.literal("block-source"),
39672
39843
  sourceRef: z.object({
39673
39844
  tag: z.literal("block_ref"),
39674
- blockId: mailingListSignupBlockIdSchema
39845
+ blockId: mailingListSignupBlockIdSchema,
39846
+ contentVersionId: mailingListContentVersionIdSchema
39675
39847
  }).nullable()
39676
39848
  }),
39677
39849
  z.object({
@@ -39711,6 +39883,7 @@ function buildNewsletterDisplay(source) {
39711
39883
  fields: { preset: "emailOnly" },
39712
39884
  includeOptionalPhone: false,
39713
39885
  buttonLabel: "Subscribe",
39886
+ successMessage: DEFAULT_MAILING_LIST_SUCCESS_MESSAGE,
39714
39887
  privacyNote: null
39715
39888
  };
39716
39889
  const targeting = source.targeting ?? { mode: "default" };
@@ -39720,6 +39893,7 @@ function buildNewsletterDisplay(source) {
39720
39893
  availability: runtimeTargetingIsAvailable(context, targeting, choices) ? "ready" : "unavailable",
39721
39894
  className: source.className ?? null,
39722
39895
  buttonLabel: form$1.buttonLabel,
39896
+ successMessage: form$1.successMessage,
39723
39897
  buttonVariant: source.buttonVariant ?? "primary",
39724
39898
  privacyNote: form$1.privacyNote,
39725
39899
  fields: getGlobalFormFields(form$1),
@@ -39750,7 +39924,7 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
39750
39924
  function projectNewsletterFormHydrationTarget(source) {
39751
39925
  switch (source.source) {
39752
39926
  case "block": {
39753
- const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId);
39927
+ const sourceRef = buildMailingListSignupBlockSourceRef(source.blockId, source.contentVersionId);
39754
39928
  if (sourceRef?.tag === "block_ref") {
39755
39929
  return {
39756
39930
  tag: "block-source",
@@ -42251,9 +42425,10 @@ function cx(...classes) {
42251
42425
  * Server-safe placeholder for event registration.
42252
42426
  * Provides a static container for island hydration without importing client hooks.
42253
42427
  */
42254
- function EventRegistrationSSR({ blockId, subject, children, ...sourceProps }) {
42428
+ function EventRegistrationSSR({ blockId, subject, loaderFailures, children, ...sourceProps }) {
42255
42429
  const islandProps = buildEventRegistrationInteractiveIslandProps({
42256
42430
  ...sourceProps,
42431
+ eventLoaderFailures: blockId ? loaderFailures?.[blockId] : undefined,
42257
42432
  subject: normalizeEventRegistrationPageSurfaceSubject(subject)
42258
42433
  });
42259
42434
  const display = islandProps.render.display;
@@ -42601,7 +42776,7 @@ function NewsletterFormSSR(props$1) {
42601
42776
  className: clsx_default("newsletter-form-ssr", className),
42602
42777
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
42603
42778
  role: "status",
42604
- children: "Mailing-list signup is not available right now."
42779
+ children: "We can’t accept signups right now. Please try again later."
42605
42780
  })
42606
42781
  });
42607
42782
  }
@@ -42648,14 +42823,18 @@ function NewsletterFormSSR(props$1) {
42648
42823
  children: [
42649
42824
  fields$2.map(renderField$1),
42650
42825
  islandProps.render.hydration.choicePresentation === "visitor_choice" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("fieldset", {
42651
- className: "newsletter-topics",
42652
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("legend", { children: "What would you like to hear about?" }), display.choices.map((choice) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", {
42653
- className: "newsletter-topic-choice",
42826
+ className: "fb-fieldset newsletter-topics",
42827
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("legend", {
42828
+ className: "form-label",
42829
+ children: "What would you like to hear about?"
42830
+ }), display.choices.map((choice) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("label", {
42831
+ className: "fb-inline form-label newsletter-topic-choice",
42654
42832
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("input", {
42655
42833
  type: "checkbox",
42656
42834
  name: "mailingListChoice",
42657
- value: choice.id
42658
- }), choice.label]
42835
+ value: choice.id,
42836
+ className: "form-checkbox"
42837
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: choice.label })]
42659
42838
  }, choice.id))]
42660
42839
  }) : null,
42661
42840
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -43785,6 +43964,18 @@ function resolveChildren(nodes, context) {
43785
43964
  function isReactNode(value) {
43786
43965
  return value !== null && value !== undefined;
43787
43966
  }
43967
+ function resolveNodeMetadata(nodeType, context) {
43968
+ return {
43969
+ pathBase: context.pathBase,
43970
+ blockId: context.blockId,
43971
+ blockKind: context.blockKind,
43972
+ blockContent: context.blockContent,
43973
+ fragmentRegistry: context.fragmentRegistry,
43974
+ previewAuthoring: context.previewAuthoring,
43975
+ ...nodeType.toLowerCase() === "newsletter-form" ? { contentVersionId: context.contentVersionId } : {},
43976
+ ...nodeType === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {}
43977
+ };
43978
+ }
43788
43979
  /**
43789
43980
  * Resolves a node definition into a React element.
43790
43981
  * Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.
@@ -43827,13 +44018,7 @@ function resolveNode(node, context, indexFallback) {
43827
44018
  const elementProps = {
43828
44019
  ...props$1,
43829
44020
  key: node.key ?? indexFallback,
43830
- pathBase: context.pathBase,
43831
- blockId: context.blockId,
43832
- blockKind: context.blockKind,
43833
- blockContent: context.blockContent,
43834
- ...node.type === "media" && context.imageResolveContext ? { imageResolveContext: context.imageResolveContext } : {},
43835
- fragmentRegistry: context.fragmentRegistry,
43836
- previewAuthoring: context.previewAuthoring
44021
+ ...resolveNodeMetadata(node.type, context)
43837
44022
  };
43838
44023
  const element = import_react.createElement(component, elementProps, ...children);
43839
44024
  if (headingDecorationPlan.kind === "skip") {
@@ -48404,7 +48589,7 @@ function pageBlockPosition(index, blockCount) {
48404
48589
  //#endregion
48405
48590
  //#region ../blocks/src/pageRendererContracts.ts
48406
48591
  function buildPageRendererRootRuntime(dataContext) {
48407
- const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false } = dataContext ?? {};
48592
+ const { siteId = null, pageId = null, pathname = null, bookingTimeZone, previewStage = "published", apiBaseUrl = null, portalToken = null, bookingOfferingPresets = [], mailingList = { tag: "not_configured" }, eventRegistrationOverlayEnabled = false, loaderFailures = {} } = dataContext ?? {};
48408
48593
  return {
48409
48594
  siteId,
48410
48595
  pageId,
@@ -48415,7 +48600,8 @@ function buildPageRendererRootRuntime(dataContext) {
48415
48600
  portalToken,
48416
48601
  bookingOfferingPresets,
48417
48602
  mailingList,
48418
- eventRegistrationOverlayEnabled
48603
+ eventRegistrationOverlayEnabled,
48604
+ loaderFailures
48419
48605
  };
48420
48606
  }
48421
48607
 
@@ -58558,7 +58744,7 @@ function collectNestedPreviewFieldConstraintEntries(field, path$3) {
58558
58744
  }
58559
58745
  function makeDefaultBlockComponent(args) {
58560
58746
  const { manifest } = args;
58561
- return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry: fragmentRegistry$1, imageResolveContext, previewAuthoring }) {
58747
+ return function DefaultBlockComponent({ content, data, registry, theme, themeConfig, transforms, viewModelOverrides, pathBase, blockId, contentVersionId, blockKind, blockBindings, editableRouteMetadataFieldIds, fragmentRegistry: fragmentRegistry$1, imageResolveContext, previewAuthoring }) {
58562
58748
  const perf = beginBlockRenderMeasurement();
58563
58749
  if (!theme) {
58564
58750
  throw new Error("Block rendering requires theme tokens; none were provided to makeDefaultBlockComponent");
@@ -58587,6 +58773,7 @@ function makeDefaultBlockComponent(args) {
58587
58773
  theme: themeForTransforms,
58588
58774
  pathBase,
58589
58775
  blockId,
58776
+ contentVersionId,
58590
58777
  blockKind,
58591
58778
  blockContent: mergedContent,
58592
58779
  blockBindings,
@@ -59856,6 +60043,7 @@ function buildBlockOverrideProps(input) {
59856
60043
  ...blockSubjectProps(dataContext),
59857
60044
  imageResolveContext: input.imageResolveContext,
59858
60045
  blockId: block.id ?? null,
60046
+ contentVersionId: block.contentVersionId ?? null,
59859
60047
  blockKind: block.kind
59860
60048
  };
59861
60049
  }
@@ -59960,6 +60148,7 @@ function toPresentationPage(page) {
59960
60148
  id: block.id,
59961
60149
  kind: block.kind,
59962
60150
  purpose: block.purpose,
60151
+ ...block.contentVersionId ? { contentVersionId: block.contentVersionId } : {},
59963
60152
  ...block.bindings ? { bindings: block.bindings } : {}
59964
60153
  };
59965
60154
  return block.admission.kind === "renderable" ? {
@@ -71282,7 +71471,9 @@ const containerResponsiveThemeCss = `/*
71282
71471
  text-align: left;
71283
71472
  }
71284
71473
 
71285
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__subtitle {
71474
+ :where(.theme-scope)
71475
+ :where([data-block="customer-portal"])
71476
+ .cp-login__subtitle {
71286
71477
  color: var(--cp-muted);
71287
71478
  font-size: 0.9375rem;
71288
71479
  text-align: left;
@@ -71309,7 +71500,9 @@ const containerResponsiveThemeCss = `/*
71309
71500
  text-align: left;
71310
71501
  }
71311
71502
 
71312
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link {
71503
+ :where(.theme-scope)
71504
+ :where([data-block="customer-portal"])
71505
+ .cp-login__reset-link {
71313
71506
  appearance: none;
71314
71507
  background: none;
71315
71508
  border: 0;
@@ -71323,11 +71516,15 @@ const containerResponsiveThemeCss = `/*
71323
71516
  text-underline-offset: 0.15em;
71324
71517
  }
71325
71518
 
71326
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:hover {
71519
+ :where(.theme-scope)
71520
+ :where([data-block="customer-portal"])
71521
+ .cp-login__reset-link:hover {
71327
71522
  color: var(--cp-text);
71328
71523
  }
71329
71524
 
71330
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-login__reset-link:focus-visible {
71525
+ :where(.theme-scope)
71526
+ :where([data-block="customer-portal"])
71527
+ .cp-login__reset-link:focus-visible {
71331
71528
  outline: 2px solid currentColor;
71332
71529
  outline-offset: 3px;
71333
71530
  }
@@ -71372,7 +71569,9 @@ const containerResponsiveThemeCss = `/*
71372
71569
  border-bottom: none;
71373
71570
  }
71374
71571
 
71375
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-header__welcome {
71572
+ :where(.theme-scope)
71573
+ :where([data-block="customer-portal"])
71574
+ .cp-header__welcome {
71376
71575
  font-size: 1.125rem;
71377
71576
  font-weight: 500;
71378
71577
  }
@@ -71388,8 +71587,14 @@ const containerResponsiveThemeCss = `/*
71388
71587
  }
71389
71588
 
71390
71589
  @keyframes cp-fade-in {
71391
- from { opacity: 0; transform: translateY(4px); }
71392
- to { opacity: 1; transform: translateY(0); }
71590
+ from {
71591
+ opacity: 0;
71592
+ transform: translateY(4px);
71593
+ }
71594
+ to {
71595
+ opacity: 1;
71596
+ transform: translateY(0);
71597
+ }
71393
71598
  }
71394
71599
 
71395
71600
  /* Empty state */
@@ -71478,6 +71683,77 @@ const containerResponsiveThemeCss = `/*
71478
71683
  margin-top: 1rem;
71479
71684
  }
71480
71685
 
71686
+ /* Event waitlists */
71687
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-list {
71688
+ display: grid;
71689
+ gap: 1rem;
71690
+ }
71691
+
71692
+ :where(.theme-scope)
71693
+ :where([data-block="customer-portal"])
71694
+ .cp-waitlists
71695
+ > .cp-alert {
71696
+ margin-bottom: 1rem;
71697
+ }
71698
+
71699
+ :where(.theme-scope) :where([data-block="customer-portal"]) .cp-waitlist-card {
71700
+ transition:
71701
+ border-color 180ms ease,
71702
+ box-shadow 180ms ease;
71703
+ }
71704
+
71705
+ :where(.theme-scope)
71706
+ :where([data-block="customer-portal"])
71707
+ .cp-waitlist-card--focused {
71708
+ border-color: var(--cp-primary);
71709
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--cp-primary) 22%, transparent);
71710
+ }
71711
+
71712
+ :where(.theme-scope)
71713
+ :where([data-block="customer-portal"])
71714
+ .cp-waitlist-card__summary,
71715
+ :where(.theme-scope)
71716
+ :where([data-block="customer-portal"])
71717
+ .cp-waitlist-card__position {
71718
+ font-weight: 600;
71719
+ }
71720
+
71721
+ :where(.theme-scope)
71722
+ :where([data-block="customer-portal"])
71723
+ .cp-waitlist-card
71724
+ .cp-card-body
71725
+ p {
71726
+ margin: 0.4rem 0;
71727
+ }
71728
+
71729
+ @container rb-site (max-width: 640px) {
71730
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
71731
+ :where(.theme-scope)
71732
+ :where([data-block="customer-portal"])
71733
+ .cp-waitlist-card
71734
+ .cp-card-header {
71735
+ flex-direction: column-reverse;
71736
+ }
71737
+
71738
+ :where(.theme-scope)
71739
+ :where([data-block="customer-portal"])
71740
+ .cp-waitlist-card
71741
+ .cp-card-actions {
71742
+ align-items: stretch;
71743
+ flex-direction: column;
71744
+ }
71745
+
71746
+ :where(.theme-scope)
71747
+ :where([data-block="customer-portal"])
71748
+ .cp-waitlist-card
71749
+ .cp-card-actions
71750
+ > * {
71751
+ justify-content: center;
71752
+ text-align: center;
71753
+ }
71754
+ }
71755
+ }
71756
+
71481
71757
  /* Badge */
71482
71758
  :where(.theme-scope) :where([data-block="customer-portal"]) .cp-badge {
71483
71759
  display: inline-flex;
@@ -71614,11 +71890,18 @@ const containerResponsiveThemeCss = `/*
71614
71890
  background: rgba(var(--tb-border), 0.2);
71615
71891
  }
71616
71892
 
71617
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table tbody tr:last-child td {
71893
+ :where(.theme-scope)
71894
+ :where([data-block="customer-portal"])
71895
+ .cp-table
71896
+ tbody
71897
+ tr:last-child
71898
+ td {
71618
71899
  border-bottom: none;
71619
71900
  }
71620
71901
 
71621
- :where(.theme-scope) :where([data-block="customer-portal"]) :is(.cp-row--past, .cp-row--muted) {
71902
+ :where(.theme-scope)
71903
+ :where([data-block="customer-portal"])
71904
+ :is(.cp-row--past, .cp-row--muted) {
71622
71905
  opacity: 0.65;
71623
71906
  }
71624
71907
 
@@ -71631,7 +71914,9 @@ const containerResponsiveThemeCss = `/*
71631
71914
  line-height: 1.2;
71632
71915
  }
71633
71916
 
71634
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__badges {
71917
+ :where(.theme-scope)
71918
+ :where([data-block="customer-portal"])
71919
+ .cp-row-title__badges {
71635
71920
  margin-left: auto;
71636
71921
  display: flex;
71637
71922
  flex-wrap: wrap;
@@ -71639,7 +71924,9 @@ const containerResponsiveThemeCss = `/*
71639
71924
  gap: 0.375rem;
71640
71925
  }
71641
71926
 
71642
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__text {
71927
+ :where(.theme-scope)
71928
+ :where([data-block="customer-portal"])
71929
+ .cp-row-title__text {
71643
71930
  min-width: 0;
71644
71931
  }
71645
71932
 
@@ -71659,12 +71946,16 @@ const containerResponsiveThemeCss = `/*
71659
71946
  line-height: 1.35;
71660
71947
  }
71661
71948
 
71662
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--success {
71949
+ :where(.theme-scope)
71950
+ :where([data-block="customer-portal"])
71951
+ .cp-row-note--success {
71663
71952
  border-left-color: rgb(var(--tb-success));
71664
71953
  color: rgb(var(--tb-success));
71665
71954
  }
71666
71955
 
71667
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-note--error {
71956
+ :where(.theme-scope)
71957
+ :where([data-block="customer-portal"])
71958
+ .cp-row-note--error {
71668
71959
  border-left-color: rgb(var(--tb-destructive));
71669
71960
  color: rgb(var(--tb-destructive));
71670
71961
  }
@@ -71683,16 +71974,23 @@ const containerResponsiveThemeCss = `/*
71683
71974
  white-space: nowrap;
71684
71975
  }
71685
71976
 
71686
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-col-actions .btn-sm {
71977
+ :where(.theme-scope)
71978
+ :where([data-block="customer-portal"])
71979
+ .cp-col-actions
71980
+ .btn-sm {
71687
71981
  white-space: nowrap;
71688
71982
  }
71689
71983
 
71690
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link {
71984
+ :where(.theme-scope)
71985
+ :where([data-block="customer-portal"])
71986
+ .cp-row-title__link {
71691
71987
  color: inherit;
71692
71988
  text-decoration: none;
71693
71989
  }
71694
71990
 
71695
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-title__link:hover {
71991
+ :where(.theme-scope)
71992
+ :where([data-block="customer-portal"])
71993
+ .cp-row-title__link:hover {
71696
71994
  text-decoration: underline;
71697
71995
  text-decoration-thickness: 2px;
71698
71996
  text-underline-offset: 2px;
@@ -71714,7 +72012,9 @@ const containerResponsiveThemeCss = `/*
71714
72012
  }
71715
72013
 
71716
72014
  /* Profile actions */
71717
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__actions {
72015
+ :where(.theme-scope)
72016
+ :where([data-block="customer-portal"])
72017
+ .cp-profile__actions {
71718
72018
  display: flex;
71719
72019
  gap: 0.75rem;
71720
72020
  margin-top: 1rem;
@@ -71781,28 +72081,39 @@ const containerResponsiveThemeCss = `/*
71781
72081
  gap: 0.375rem;
71782
72082
  }
71783
72083
 
71784
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__index {
72084
+ :where(.theme-scope)
72085
+ :where([data-block="customer-portal"])
72086
+ .cp-guest-edit-row__index {
71785
72087
  font-size: 0.75rem;
71786
72088
  font-weight: 500;
71787
72089
  color: var(--cp-muted);
71788
72090
  }
71789
72091
 
71790
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields {
72092
+ :where(.theme-scope)
72093
+ :where([data-block="customer-portal"])
72094
+ .cp-guest-edit-row__fields {
71791
72095
  display: flex;
71792
72096
  gap: 0.5rem;
71793
72097
  }
71794
72098
 
71795
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__fields input {
72099
+ :where(.theme-scope)
72100
+ :where([data-block="customer-portal"])
72101
+ .cp-guest-edit-row__fields
72102
+ input {
71796
72103
  flex: 1;
71797
72104
  min-width: 0;
71798
72105
  }
71799
72106
 
71800
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guest-edit-row__error {
72107
+ :where(.theme-scope)
72108
+ :where([data-block="customer-portal"])
72109
+ .cp-guest-edit-row__error {
71801
72110
  font-size: 0.75rem;
71802
72111
  color: var(--cp-error);
71803
72112
  }
71804
72113
 
71805
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-guests__actions {
72114
+ :where(.theme-scope)
72115
+ :where([data-block="customer-portal"])
72116
+ .cp-guests__actions {
71806
72117
  display: flex;
71807
72118
  gap: 0.5rem;
71808
72119
  margin-top: 0.5rem;
@@ -71816,13 +72127,18 @@ const containerResponsiveThemeCss = `/*
71816
72127
  }
71817
72128
 
71818
72129
  /* In the actions modal, tiles sit on a surface modal, so use "background" for contrast. */
71819
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-list :where(.rb-tile) {
72130
+ :where(.theme-scope)
72131
+ :where([data-block="customer-portal"])
72132
+ .cp-actions-list
72133
+ :where(.rb-tile) {
71820
72134
  --rb-event-tile-bg: rgb(var(--tb-background));
71821
72135
  --rb-event-tile-border: rgb(var(--tb-border));
71822
72136
  }
71823
72137
 
71824
72138
  /* Actions trigger: icon-only kebab button */
71825
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-actions-trigger.btn-sm {
72139
+ :where(.theme-scope)
72140
+ :where([data-block="customer-portal"])
72141
+ .cp-actions-trigger.btn-sm {
71826
72142
  padding: 0.35rem !important;
71827
72143
  line-height: 1 !important;
71828
72144
  min-width: 32px;
@@ -71846,17 +72162,24 @@ const containerResponsiveThemeCss = `/*
71846
72162
  gap: 0.25rem;
71847
72163
  }
71848
72164
 
71849
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__title {
72165
+ :where(.theme-scope)
72166
+ :where([data-block="customer-portal"])
72167
+ .cp-action-tile__title {
71850
72168
  font-weight: 600;
71851
72169
  font-size: 0.9375rem;
71852
72170
  }
71853
72171
 
71854
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile__desc {
72172
+ :where(.theme-scope)
72173
+ :where([data-block="customer-portal"])
72174
+ .cp-action-tile__desc {
71855
72175
  font-size: 0.875rem;
71856
72176
  line-height: 1.35;
71857
72177
  }
71858
72178
 
71859
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-action-tile--danger .cp-action-tile__title {
72179
+ :where(.theme-scope)
72180
+ :where([data-block="customer-portal"])
72181
+ .cp-action-tile--danger
72182
+ .cp-action-tile__title {
71860
72183
  color: rgb(var(--tb-destructive));
71861
72184
  }
71862
72185
 
@@ -71878,7 +72201,9 @@ const containerResponsiveThemeCss = `/*
71878
72201
  text-decoration: underline;
71879
72202
  }
71880
72203
 
71881
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-btn--link:hover {
72204
+ :where(.theme-scope)
72205
+ :where([data-block="customer-portal"])
72206
+ .cp-btn--link:hover {
71882
72207
  color: var(--cp-primary-hover);
71883
72208
  }
71884
72209
 
@@ -71917,34 +72242,48 @@ const containerResponsiveThemeCss = `/*
71917
72242
  margin-top: 0.75rem;
71918
72243
  }
71919
72244
 
71920
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__title {
72245
+ :where(.theme-scope)
72246
+ :where([data-block="customer-portal"])
72247
+ .cp-cancel-confirm__title {
71921
72248
  font-weight: 600;
71922
72249
  margin-bottom: 0.5rem;
71923
72250
  }
71924
72251
 
71925
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__message {
72252
+ :where(.theme-scope)
72253
+ :where([data-block="customer-portal"])
72254
+ .cp-cancel-confirm__message {
71926
72255
  margin-bottom: 0.25rem;
71927
72256
  }
71928
72257
 
71929
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__warning {
72258
+ :where(.theme-scope)
72259
+ :where([data-block="customer-portal"])
72260
+ .cp-cancel-confirm__warning {
71930
72261
  margin-bottom: 0.75rem;
71931
72262
  }
71932
72263
 
71933
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-cancel-confirm__actions {
72264
+ :where(.theme-scope)
72265
+ :where([data-block="customer-portal"])
72266
+ .cp-cancel-confirm__actions {
71934
72267
  display: flex;
71935
72268
  gap: 0.75rem;
71936
72269
  }
71937
72270
 
71938
72271
  /* Membership actions */
71939
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-membership-actions {
72272
+ :where(.theme-scope)
72273
+ :where([data-block="customer-portal"])
72274
+ .cp-membership-actions {
71940
72275
  margin-top: 0.75rem;
71941
72276
  }
71942
72277
 
71943
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-section-actions {
72278
+ :where(.theme-scope)
72279
+ :where([data-block="customer-portal"])
72280
+ .cp-section-actions {
71944
72281
  margin-top: 1rem;
71945
72282
  }
71946
72283
 
71947
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-card-subtitle--spaced {
72284
+ :where(.theme-scope)
72285
+ :where([data-block="customer-portal"])
72286
+ .cp-card-subtitle--spaced {
71948
72287
  margin-top: 0.75rem;
71949
72288
  }
71950
72289
 
@@ -71968,9 +72307,18 @@ const containerResponsiveThemeCss = `/*
71968
72307
  display: none;
71969
72308
  }
71970
72309
 
71971
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-guests,
71972
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-tickets,
71973
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-table :is(th, td).cp-col-actions {
72310
+ :where(.theme-scope)
72311
+ :where([data-block="customer-portal"])
72312
+ .cp-table
72313
+ :is(th, td).cp-col-guests,
72314
+ :where(.theme-scope)
72315
+ :where([data-block="customer-portal"])
72316
+ .cp-table
72317
+ :is(th, td).cp-col-tickets,
72318
+ :where(.theme-scope)
72319
+ :where([data-block="customer-portal"])
72320
+ .cp-table
72321
+ :is(th, td).cp-col-actions {
71974
72322
  display: none;
71975
72323
  }
71976
72324
 
@@ -71979,24 +72327,34 @@ const containerResponsiveThemeCss = `/*
71979
72327
  }
71980
72328
 
71981
72329
  /* Make the cell a positioning context for the kebab */
71982
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row > td:first-child {
72330
+ :where(.theme-scope)
72331
+ :where([data-block="customer-portal"])
72332
+ .cp-row
72333
+ > td:first-child {
71983
72334
  position: relative;
71984
72335
  padding-right: 2.5rem;
71985
72336
  }
71986
72337
 
71987
72338
  /* Position kebab in top-right of the cell */
71988
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions {
72339
+ :where(.theme-scope)
72340
+ :where([data-block="customer-portal"])
72341
+ .cp-row-mobile-actions {
71989
72342
  position: absolute;
71990
72343
  top: 0.5rem;
71991
72344
  right: 0.5rem;
71992
72345
  margin-top: 0;
71993
72346
  }
71994
72347
 
71995
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-row-mobile-actions .btn-sm {
72348
+ :where(.theme-scope)
72349
+ :where([data-block="customer-portal"])
72350
+ .cp-row-mobile-actions
72351
+ .btn-sm {
71996
72352
  width: auto;
71997
72353
  }
71998
72354
 
71999
- :where(.theme-scope) :where([data-block="customer-portal"]) .cp-profile__edit {
72355
+ :where(.theme-scope)
72356
+ :where([data-block="customer-portal"])
72357
+ .cp-profile__edit {
72000
72358
  align-self: stretch;
72001
72359
  }
72002
72360
  }
@@ -72444,6 +72802,30 @@ const containerResponsiveThemeCss = `/*
72444
72802
  gap: 0.25rem;
72445
72803
  }
72446
72804
 
72805
+ /* Topic choices (visitor picks what to hear about). Same treatment as the
72806
+ form block's .fb-fieldset / .fb-inline, defined here because the newsletter
72807
+ form also renders inside contact-newsletter and the site footer. */
72808
+ :where(.theme-scope) .newsletter-topics {
72809
+ display: flex;
72810
+ flex-direction: column;
72811
+ gap: 0.5rem;
72812
+ border: none;
72813
+ padding: 0;
72814
+ margin: 0;
72815
+ min-width: 0;
72816
+ }
72817
+
72818
+ :where(.theme-scope) .newsletter-topics > legend {
72819
+ padding: 0;
72820
+ margin-bottom: 0.25rem;
72821
+ }
72822
+
72823
+ :where(.theme-scope) .newsletter-topic-choice {
72824
+ display: flex;
72825
+ align-items: center;
72826
+ gap: 0.5rem;
72827
+ }
72828
+
72447
72829
  /* Required indicator */
72448
72830
  :where(.theme-scope) .newsletter-required {
72449
72831
  color: rgb(var(--tb-primary));
@@ -72493,6 +72875,10 @@ const containerResponsiveThemeCss = `/*
72493
72875
  flex-shrink: 0;
72494
72876
  }
72495
72877
 
72878
+ :where(.theme-scope) .newsletter-inline .newsletter-topics {
72879
+ flex-basis: 100%;
72880
+ }
72881
+
72496
72882
  /* Mobile fallback for inline variant */
72497
72883
  @container rb-site (max-width: 640px) {
72498
72884
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
@@ -75540,27 +75926,21 @@ function normalizeTokenValue(value) {
75540
75926
  }
75541
75927
  return trimmedValue;
75542
75928
  }
75543
- /**
75544
- * Legacy css-var-only bridge helper. Prefer buildThemeBridgeRuntime() for SDK
75545
- * sites that need the full ThemeScopeCore runtime contract.
75546
- */
75547
75929
  function buildThemeRuntimeFromBridge(config$1) {
75548
75930
  validateThemeBridgeConfig(config$1);
75549
75931
  return buildBridgeCssVars(config$1);
75550
75932
  }
75551
75933
  function buildThemeBridgeRuntime(config$1) {
75552
- validateThemeBridgeConfig(config$1);
75934
+ const cssVars = buildThemeRuntimeFromBridge(config$1);
75553
75935
  const themeId = THEME_BRIDGE_SCOPE_ID;
75554
75936
  const corners = config$1.corners ?? "rounded";
75555
- const shadows = config$1.shadows ?? "medium";
75556
- const cssVars = buildBridgeCssVars(config$1);
75557
75937
  const generatorTheme = buildBridgeGeneratorTheme(corners);
75558
75938
  return {
75559
75939
  themeId,
75560
75940
  cssVars,
75561
- buttonCss: shouldGenerateComponent(config$1.components?.buttons) ? generateButtonsCss(config$1, corners, shadows) : undefined,
75562
- cardCss: generateCardsCss(config$1, corners, shadows),
75563
- inputCss: shouldGenerateComponent(config$1.components?.inputs) ? generateInputsCss(corners, shadows) : undefined,
75941
+ buttonCss: shouldGenerateComponent(config$1.components?.buttons) ? generateButtonsCss(config$1, corners, config$1.shadows ?? "medium") : undefined,
75942
+ cardCss: generateCardsCss(config$1, corners, config$1.shadows ?? "medium"),
75943
+ inputCss: shouldGenerateComponent(config$1.components?.inputs) ? generateInputsCss(corners, config$1.shadows ?? "medium") : undefined,
75564
75944
  statusCss: generateStatusCss({
75565
75945
  themeId,
75566
75946
  theme: generatorTheme
@@ -75569,6 +75949,7 @@ function buildThemeBridgeRuntime(config$1) {
75569
75949
  themeId,
75570
75950
  theme: generatorTheme
75571
75951
  }),
75952
+ typographyCss: generateTypographyCss({ themeId }),
75572
75953
  blockVarsCss: generateAllBlockVarsCss({
75573
75954
  themeId,
75574
75955
  theme: generatorTheme
@@ -75889,7 +76270,7 @@ function shouldGenerateComponent(value) {
75889
76270
  function generateButtonsCss(config$1, corners, shadows) {
75890
76271
  let variants = getDefaultButtonVariants();
75891
76272
  const buttonConfig = config$1.components?.buttons;
75892
- if (buttonConfig !== undefined && buttonConfig !== true && buttonConfig !== false && buttonConfig.variants) {
76273
+ if (typeof buttonConfig === "object" && buttonConfig.variants) {
75893
76274
  const requestedIds = new Set(buttonConfig.variants);
75894
76275
  variants = variants.filter((variant) => requestedIds.has(variant.id));
75895
76276
  }
@@ -76381,8 +76762,12 @@ function shouldSkipResolvedLoader(input) {
76381
76762
  * ```
76382
76763
  */
76383
76764
  async function prefetchBlockData(page, context, options) {
76765
+ return (await prefetchBlockDataWithFailures(page, context, options)).resolvedData;
76766
+ }
76767
+ async function prefetchBlockDataWithFailures(page, context, options) {
76384
76768
  const { apiClient, isValidEndpoint, onError, getCustomBlockLoaders, getBlockDefinition: getBlockDefinition$1 = getBlockDefinition, resolveParamsBindings: resolveParamsBindings$1 = resolveParamsBindings } = options;
76385
76769
  const results = {};
76770
+ const loaderFailures = {};
76386
76771
  const tasks = [];
76387
76772
  for (const block of page.blocks) {
76388
76773
  const blockId = block.id;
@@ -76443,6 +76828,11 @@ async function prefetchBlockData(page, context, options) {
76443
76828
  const blockResults = results[blockId] ??= {};
76444
76829
  blockResults[key] = data;
76445
76830
  } catch (error$1) {
76831
+ const blockFailures = loaderFailures[blockId] ??= {};
76832
+ blockFailures[key] = {
76833
+ endpoint: endpoint$1,
76834
+ params
76835
+ };
76446
76836
  if (onError) {
76447
76837
  onError(error$1, {
76448
76838
  block: block.kind,
@@ -76456,7 +76846,10 @@ async function prefetchBlockData(page, context, options) {
76456
76846
  if (tasks.length > 0) {
76457
76847
  await Promise.all(tasks);
76458
76848
  }
76459
- return results;
76849
+ return {
76850
+ resolvedData: results,
76851
+ loaderFailures
76852
+ };
76460
76853
  }
76461
76854
 
76462
76855
  //#endregion
@@ -79569,13 +79962,16 @@ async function listFooterForms(apiClient, siteId) {
79569
79962
  }));
79570
79963
  }
79571
79964
  async function getFooterEngagementAuthoringOptions(apiClient, siteId) {
79572
- const [forms, mailingList] = await Promise.all([listFooterForms(apiClient, siteId), apiClient({
79965
+ const [forms, authoringContext] = await Promise.all([listFooterForms(apiClient, siteId), apiClient({
79573
79966
  endpoint: "getMailingListAuthoringContext",
79574
79967
  params: { siteId }
79575
79968
  }).then(unwrapResponse)]);
79576
79969
  return {
79577
79970
  forms,
79578
- mailingList
79971
+ mailingList: authoringContext.runtime,
79972
+ expectedMailingListProviderScope: authoringContext.expectedProviderScope,
79973
+ confirmation: authoringContext.confirmation,
79974
+ canManageMailingListSetup: authoringContext.canManageSetup
79579
79975
  };
79580
79976
  }
79581
79977
  async function updateFooterComposition(apiClient, siteId, body) {
@@ -80255,7 +80651,17 @@ const riverbankSiteConfigInputSchema = z.object({
80255
80651
  const pushSdkConfigBodySchema = z.object({
80256
80652
  config: riverbankSiteConfigInputSchema,
80257
80653
  forceContentTypes: z.boolean().optional(),
80258
- mode: z.enum(["apply", "preview"]).optional()
80654
+ mode: z.enum(["apply", "preview"]).optional(),
80655
+ expectedMailingListProviderScope: z.unknown().transform((value, ctx) => {
80656
+ if (value === undefined) return undefined;
80657
+ const parsed = parseMailingListProviderScope(value);
80658
+ if (parsed.ok) return parsed.value;
80659
+ ctx.addIssue({
80660
+ code: "custom",
80661
+ message: "Invalid mailing-list provider scope"
80662
+ });
80663
+ return z.NEVER;
80664
+ }).optional()
80259
80665
  }).strict();
80260
80666
 
80261
80667
  //#endregion
@@ -81230,6 +81636,7 @@ function resolveEventDestinationMode(input) {
81230
81636
  const presetOverride = policy.presetOverrides[input.preset];
81231
81637
  if (presetOverride) return presetOverride;
81232
81638
  }
81639
+ if (input.publicExperience === "hosted_booking") return "system-managed";
81233
81640
  return policy.defaultMode;
81234
81641
  }
81235
81642
  function macadamiaDefaultEventDestinationPolicy(selectedPresets) {
@@ -82781,7 +83188,8 @@ async function mutateBlockContent(apiClient, args) {
82781
83188
  if ("data" in args) {
82782
83189
  const payload$1 = {
82783
83190
  data: args.data,
82784
- optimistic_hash: args.optimisticHash ?? undefined
83191
+ optimistic_hash: args.optimisticHash ?? undefined,
83192
+ expected_mailing_list_provider_scope: args.expectedMailingListProviderScope
82785
83193
  };
82786
83194
  return unwrapResponse(await apiClient({
82787
83195
  endpoint: "saveBlockContent",
@@ -82793,7 +83201,8 @@ async function mutateBlockContent(apiClient, args) {
82793
83201
  const payload = {
82794
83202
  path: args.path,
82795
83203
  value: args.value,
82796
- optimistic_hash: args.optimisticHash ?? undefined
83204
+ optimistic_hash: args.optimisticHash ?? undefined,
83205
+ expected_mailing_list_provider_scope: args.expectedMailingListProviderScope
82797
83206
  };
82798
83207
  return unwrapResponse(await apiClient({
82799
83208
  endpoint: "saveBlockContent",
@@ -83682,11 +84091,12 @@ async function deleteRedirectRule(apiClient, { siteId, ruleId, options }) {
83682
84091
 
83683
84092
  //#endregion
83684
84093
  //#region ../api/src/billing.ts
83685
- async function changePlan(apiClient, { planId, interval, prorationBehavior, options }) {
84094
+ async function changePlan(apiClient, { attemptId, planId, interval, prorationBehavior, options }) {
83686
84095
  try {
83687
84096
  return unwrapResponse(await apiClient({
83688
84097
  endpoint: "changePlan",
83689
84098
  body: {
84099
+ attemptId,
83690
84100
  planId,
83691
84101
  interval,
83692
84102
  prorationBehavior
@@ -83697,6 +84107,16 @@ async function changePlan(apiClient, { planId, interval, prorationBehavior, opti
83697
84107
  return normalizeApiError(error$1, "Failed to update billing plan");
83698
84108
  }
83699
84109
  }
84110
+ async function createBillingPortalSession(apiClient, options) {
84111
+ try {
84112
+ return unwrapResponse(await apiClient({
84113
+ endpoint: "createBillingPortalSession",
84114
+ options
84115
+ }));
84116
+ } catch (error$1) {
84117
+ return normalizeApiError(error$1, "Failed to open billing details");
84118
+ }
84119
+ }
83700
84120
  async function billingCheckout(apiClient, { planId, interval, continuation, options }) {
83701
84121
  try {
83702
84122
  return unwrapResponse(await apiClient({
@@ -84287,7 +84707,10 @@ async function adminChangePlan(apiClient, body, options) {
84287
84707
  try {
84288
84708
  return unwrapResponse(await apiClient({
84289
84709
  endpoint: "adminChangePlan",
84290
- body,
84710
+ body: {
84711
+ ...body,
84712
+ attemptId: body.attemptId ?? crypto.randomUUID()
84713
+ },
84291
84714
  options
84292
84715
  }));
84293
84716
  } catch (error$1) {
@@ -102630,7 +103053,7 @@ async function loadConfig(configPath, output) {
102630
103053
  return { errorMessage: "No config path provided." };
102631
103054
  }
102632
103055
  try {
102633
- const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-CZ9qKC9m.mjs");
103056
+ const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-Dgi_eByc.mjs");
102634
103057
  const rawConfig = await loadConfigFile$1(configPath);
102635
103058
  const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);
102636
103059
  if (!parsed.success) {