riverbankcms 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -27,9 +27,6 @@ Media replacement flags have been removed. `--overwrite-media` and
27
27
  or identifier already belong to another asset, keep the existing asset, choose
28
28
  a new identifier, or delete and upload the asset again in the dashboard.
29
29
 
30
- This is a breaking CLI change and must be included in the next breaking-version
31
- release. Deploy the identifier backfill migration before deploying application
32
- code that requires canonical identifiers on every media row. If the migration
33
- reports unexpected rows in a local, staging, or restored database, assign those
34
- listed assets canonical, site-unique identifiers and rerun the migration; do not
35
- bypass its guard.
30
+ Every persisted media asset now has a canonical, site-unique identifier. Backup
31
+ restore preserves an existing asset's identifier and rejects an archive that
32
+ tries to replace it.
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { $ as require_jsx_runtime, $n as NAV_LINK_LETTER_SPACING_MAP, $r as surfaceForegroundDeclarations, $t as formatIgnoredDocumentSyncSectionWarning, A as getImageUrl, An as MQ_SM_DOWN, Ar as isCssColorLiteral, At as parseJsonData, B as createDryRunReport, Bn as eyebrowTreatmentValues, Br as resolveSurfaceForeground, Bt as planEnvironmentExecution, C as rotateNormalizedPoint, Cn as BREAKPOINT_LG, Cr as RESOLVED_BUTTON_DISABLED_DECLARATIONS, Ct as currentInvocationEnvelope, D as resolveMediaTransformForAspect, Dn as MQ_LG_UP, Dr as contextualButtonSurfaceStyles, Dt as handleCommandError, E as parseAspectRatioValue, En as BREAKPOINT_XL, Er as contextualButtonSurfaceResetStyles, Et as getOutputOnlyContext, F as parseRelativeStoragePath, Fn as assertNever$4, Fr as borderColorStyle, Ft as withConfirmation, G as getSiteCommandMetadata, Gn as testimonialsCompositionTreatmentValues, Gr as TokenResolver, Gt as CliExit, H as mapEventCommandContent, Hn as headingDecorationColorTokenValues, Hr as generateEffectsCSS, Ht as requireEnvironmentWriteAuthorization, I as classifyKnownMimeType, In as defineBlockDesignCapability, Ir as cssVarValue, It as withErrorHandling, J as entryIdentifierForCommand, Jn as getComponentBorderWidthPx, Jr as parseThemeForPersistence, Jt as getEnvironmentDebugInfo, K as blockIdentifierForCommand, Kn as tileTreatmentValues, Kr as parseThemeButtonVariantId, Kt as getEnvPrefix, L as venueManagementFields, Ln as defineFrameCapability, Lr as mergeStyles, Lt as withOutputOnlyErrorHandling, M as deriveVideoSlotPolicy, Mn as MQ_TABLET_ONLY, Mr as resolveThemeColorReferenceValue, Mt as resolveCommandPath, N as resolveVideoSelectionIntentForMediaField, Nn as headerVariantValues, Nr as resolveTokenOrCssColorValue, Nt as runWithInvocation, O as getDirectImageUrlForRelativePath, On as MQ_MD_DOWN, Or as deriveButtonSurfaceContext, Ot as mapEntryForOutput, P as asRecord$1, Pn as pageDesignEditorBackgroundOverrideOwner, Pr as backgroundColorStyle, Pt as withCommandContext, Q as hasConfiguredBookingVertical, Qn as NAV_LINK_BORDER_RADIUS_MAP, Qr as DEFAULT_SURFACE_TEXT_COLOR, Qt as createManagementClient, R as sortRecord, Rn as defineNoBlockDesignCapability, Rr as rgbColorValue, Rt as executeEnvironmentPlan, S as deleteEnvSpecificKeys, Sn as renderHeaderPaintTargetRules, Sr as generateButtonCss, St as createOutputForCommand, T as isExplicitRectCrop, Tn as BREAKPOINT_SM, Tr as resolvedButtonFocusDeclarations, Tt as getOutputContext, U as evaluateSiteCommandBatchExposure, Un as introCompositionTreatmentValues, Ur as generateBaseInteractiveCSS, Ut as withRiverbankEnv, V as parseAndPlanCommandBatchForTypes, Vn as featureCardCompositionTreatmentValues, Vr as generateDefaultButtonSystem, Vt as planEnvironmentWriteAuthorization, W as evaluateSiteCommandExposure, Wn as offeringsPreviewCompositionTreatmentValues, Wr as generateInteractiveChildInheritanceCSS, Wt as formatError, X as pageIdentifierForCommand, Xn as parseBlockCustomCssRules, Xr as formatButtonColourContractError, Xt as isRemoteConfigured, Y as pageIdentifierForBlockCommand, Yn as getComponentShadowVar, Yr as compileButtonColourStates, Yt as isLocalConfigured, Z as pagePathForCommand, Zn as parseCustomCssRules, Zr as generateShadowValue, Zt as loadSdkEnvironment, _ as hasOwnSettingsField, _i as linkPayloadSchema, _n as boxBackgroundOverlaySchema, _r as cardRoleSchema, _t as confirmAction, a as syncLocalMediaForPull, ai as getTextColorForBackground, an as GRADIENT_PRESET_IDS, ar as INPUT_SPACING_MAP, at as createCommandRef, b as attachRenderableMediaAssetFields, bn as generateMobileOverlayBackdropFilterFix, br as PUBLIC_BUTTON_ROLES, bt as createGetCommand, c as sha256, ci as hexToRgb, cn as boundaryRuntimeMetricsForTransition, cr as ACCORDION_SPACING_MAP, ct as createEventSeriesRef, d as walkLocalContentMedia, di as unsafeAsOpaqueButtonColourToken, dn as parseBackgroundAppearanceColorToken, dr as ICON_CONFIG, dt as createNavigationRef, ei as surfaceForegroundStyle, en as ManagementApiError, er as NAV_LINK_PADDING_MAP, et as require_react, f as buildStorageUrl, fi as parseBlockColorToken, fn as defaultThemeTokens, fr as ICON_SIZE_PX, ft as createPageRef, g as buildSettingsUpdateInput, gi as persistableMediaSchema, gn as themeSchema, gr as generateShadowValue$1, gt as slugPart, h as SETTINGS_FILE_FIELDS, hi as mediaTypeDiscriminants, hn as sdkThemeWireSchema, hr as generateCardCss, ht as refSlug, ii as onColorTokenName, in as gradientToCss, ir as INPUT_FONT_SIZE_MAP, it as createBlocksRef, j as isSiteScopedDirectImageStoragePath, jn as MQ_SM_UP, jr as resolveOnColorForThemeToken, jt as parsePaginationOptions, k as getDirectImageUrlForSiteScopedPath, kn as MQ_MD_UP, kr as resolveContextualButtonRole, kt as parseJsonArray, l as normalizeMediaIdentifierInput, li as VARIANT_ROLES, ln as backgroundAppearanceColorTokenNames, lr as ACCORDION_TRIGGER_FONT_SCALE, lt as createFooterRef, m as extractMediaIdentifiers, mi as mediaSchema, mn as sdkSettingsUpdateSchema, mr as getDefaultCardVariants, mt as createVenueRef, n as createStyleCommand, ni as expandPalette, nn as readHeaderNavFontSizePreference, nr as NAV_LINK_TEXT_SIZE_MAP, nt as generateCssVars, o as applyLocalMediaPush, oi as ORDINARY_TEXT_MIN_CONTRAST_RATIO, on as getGradientPreset, or as LABEL_FONT_SIZE_MAP, ot as createContentEntryRef, p as downloadMedia, pi as mediaIdentifierSchema, pn as defineBlockDesignMetadata, pr as generateCardCoreCss, pt as createSiteCommandSiteRef, q as blockOrderIdentifiersForCommand, qn as visibleHeadingDecorationFamilyValues, qr as themeButtonClassName, qt as getEnvVarName, r as revalidateLocalMediaPushPlan, ri as isOnColorBackgroundCandidateToken, rn as getCuratedSiteStyle, rr as FONT_WEIGHT_MAP, rt as createBlockRef, s as prepareLocalMediaForPush, si as featuresFromHex, sn as parseGradientPresetId, sr as ACCORDION_OPEN_ACCENT_THICKNESS, st as createEventCategoryRef, ti as surfaceForegroundValue, tn as mergeHeaderNavTypographyPreference, tr as NAV_LINK_PADDING_X_MAP, tt as pickShadeTowardBackground, u as normalizeMediaValueToIdentifierOnly, ui as buttonVariantIdSchema, un as backgroundAppearanceQuickColorTokenNames, ur as ACCORDION_TRIGGER_LETTER_SPACING, ut as createFormRef, v as writeMediaManifest, vi as sdkConfiguredBookingVerticalConfigSchema, vn as boxBackgroundSchema, vr as cardVariantRoleValues, vt as createClientForEnv, w as normalizeWidthCandidates, wn as BREAKPOINT_MD, wr as resolvedButtonColourDeclarations, wt as formatDateShort, x as buildRenderableMediaAssetIndex, xn as getHeaderPaintTargets, xr as AFFORDANCE_SUPPRESS_CLASS, xt as createListCommand, y as isMediaValue, yi as __toESM, yn as generateHeaderScrollTreatmentStyles, yr as normalizeCardRole, yt as createCommandContext, z as stableStringify, zn as eventListTreatmentValues, zr as textColorStyle, zt as parseEnvironmentSelection } from "../style-TmApGKZX.mjs";
2
+ import { $ as require_jsx_runtime, $n as NAV_LINK_LETTER_SPACING_MAP, $r as surfaceForegroundDeclarations, $t as formatIgnoredDocumentSyncSectionWarning, A as getImageUrl, Ai as __toESM, An as MQ_SM_DOWN, Ar as isCssColorLiteral, At as parseJsonData, B as createDryRunReport, Bn as eyebrowTreatmentValues, Br as resolveSurfaceForeground, Bt as planEnvironmentExecution, C as rotateNormalizedPoint, Ci as internalResolvedLinkSchema, Cn as BREAKPOINT_LG, Cr as RESOLVED_BUTTON_DISABLED_DECLARATIONS, Ct as currentInvocationEnvelope, D as resolveMediaTransformForAspect, Di as linkSchema, Dn as MQ_LG_UP, Dr as contextualButtonSurfaceStyles, Dt as handleCommandError, E as parseAspectRatioValue, Ei as isResolvedInternalLinkEntityType, En as BREAKPOINT_XL, Er as contextualButtonSurfaceResetStyles, Et as getOutputOnlyContext, F as parseRelativeStoragePath, Fn as assertNever$4, Fr as borderColorStyle, Ft as withConfirmation, G as getSiteCommandMetadata, Gn as testimonialsCompositionTreatmentValues, Gr as TokenResolver, Gt as CliExit, H as mapEventCommandContent, Hn as headingDecorationColorTokenValues, Hr as generateEffectsCSS, Ht as requireEnvironmentWriteAuthorization, I as classifyKnownMimeType, In as defineBlockDesignCapability, Ir as cssVarValue, It as withErrorHandling, J as entryIdentifierForCommand, Jn as getComponentBorderWidthPx, Jr as parseThemeForPersistence, Jt as getEnvironmentDebugInfo, K as blockIdentifierForCommand, Kn as tileTreatmentValues, Kr as parseThemeButtonVariantId, Kt as getEnvPrefix, L as venueManagementFields, Ln as defineFrameCapability, Lr as mergeStyles, Lt as withOutputOnlyErrorHandling, M as deriveVideoSlotPolicy, Mn as MQ_TABLET_ONLY, Mr as resolveThemeColorReferenceValue, Mt as resolveCommandPath, N as resolveVideoSelectionIntentForMediaField, Nn as headerVariantValues, Nr as resolveTokenOrCssColorValue, Nt as runWithInvocation, O as getDirectImageUrlForRelativePath, Oi as pageLinkSchema$1, On as MQ_MD_DOWN, Or as deriveButtonSurfaceContext, Ot as mapEntryForOutput, P as asRecord$1, Pn as pageDesignEditorBackgroundOverrideOwner, Pr as backgroundColorStyle, Pt as withCommandContext, Q as hasConfiguredBookingVertical, Qn as NAV_LINK_BORDER_RADIUS_MAP, Qr as DEFAULT_SURFACE_TEXT_COLOR, Qt as createManagementClient, R as sortRecord, Rn as defineNoBlockDesignCapability, Rr as rgbColorValue, Rt as executeEnvironmentPlan, S as deleteEnvSpecificKeys, Si as internalLinkSchema, Sn as renderHeaderPaintTargetRules, Sr as generateButtonCss, St as createOutputForCommand, T as isExplicitRectCrop, Ti as isInternalResolvedLinkValue, Tn as BREAKPOINT_SM, Tr as resolvedButtonFocusDeclarations, Tt as getOutputContext, U as evaluateSiteCommandBatchExposure, Un as introCompositionTreatmentValues, Ur as generateBaseInteractiveCSS, Ut as withRiverbankEnv, V as parseAndPlanCommandBatchForTypes, Vn as featureCardCompositionTreatmentValues, Vr as generateDefaultButtonSystem, Vt as planEnvironmentWriteAuthorization, W as evaluateSiteCommandExposure, Wn as offeringsPreviewCompositionTreatmentValues, Wr as generateInteractiveChildInheritanceCSS, Wt as formatError, X as pageIdentifierForCommand, Xn as parseBlockCustomCssRules, Xr as formatButtonColourContractError, Xt as isRemoteConfigured, Y as pageIdentifierForBlockCommand, Yn as getComponentShadowVar, Yr as compileButtonColourStates, Yt as isLocalConfigured, Z as pagePathForCommand, Zn as parseCustomCssRules, Zr as generateShadowValue, Zt as loadSdkEnvironment, _ as hasOwnSettingsField, _i as linkPayloadSchema, _n as boxBackgroundOverlaySchema, _r as cardRoleSchema, _t as confirmAction, a as syncLocalMediaForPull, ai as getTextColorForBackground, an as GRADIENT_PRESET_IDS, ar as INPUT_SPACING_MAP, at as createCommandRef, b as attachRenderableMediaAssetFields, bi as entryLinkSchema$1, bn as generateMobileOverlayBackdropFilterFix, br as PUBLIC_BUTTON_ROLES, bt as createGetCommand, c as sha256, ci as hexToRgb, cn as boundaryRuntimeMetricsForTransition, cr as ACCORDION_SPACING_MAP, ct as createEventSeriesRef, d as walkLocalContentMedia, di as unsafeAsOpaqueButtonColourToken, dn as parseBackgroundAppearanceColorToken, dr as ICON_CONFIG, dt as createNavigationRef, ei as surfaceForegroundStyle, en as ManagementApiError, er as NAV_LINK_PADDING_MAP, et as require_react, f as buildStorageUrl, fi as parseBlockColorToken, fn as defaultThemeTokens, fr as ICON_SIZE_PX, ft as createPageRef, g as buildSettingsUpdateInput, gi as persistableMediaSchema, gn as themeSchema, gr as generateShadowValue$1, gt as slugPart, h as SETTINGS_FILE_FIELDS, hi as mediaTypeDiscriminants, hn as sdkThemeWireSchema, hr as generateCardCss, ht as refSlug, ii as onColorTokenName, in as gradientToCss, ir as INPUT_FONT_SIZE_MAP, it as createBlocksRef, j as isSiteScopedDirectImageStoragePath, jn as MQ_SM_UP, jr as resolveOnColorForThemeToken, jt as parsePaginationOptions, k as getDirectImageUrlForSiteScopedPath, ki as sdkConfiguredBookingVerticalConfigSchema, kn as MQ_MD_UP, kr as resolveContextualButtonRole, kt as parseJsonArray, l as normalizeMediaIdentifierInput, li as VARIANT_ROLES, ln as backgroundAppearanceColorTokenNames, lr as ACCORDION_TRIGGER_FONT_SCALE, lt as createFooterRef, m as extractMediaIdentifiers, mi as mediaSchema, mn as sdkSettingsUpdateSchema, mr as getDefaultCardVariants, mt as createVenueRef, n as createStyleCommand, ni as expandPalette, nn as readHeaderNavFontSizePreference, nr as NAV_LINK_TEXT_SIZE_MAP, nt as generateCssVars, o as applyLocalMediaPush, oi as ORDINARY_TEXT_MIN_CONTRAST_RATIO, on as getGradientPreset, or as LABEL_FONT_SIZE_MAP, ot as createContentEntryRef, p as downloadMedia, pi as mediaIdentifierSchema, pn as defineBlockDesignMetadata, pr as generateCardCoreCss, pt as createSiteCommandSiteRef, q as blockOrderIdentifiersForCommand, qn as visibleHeadingDecorationFamilyValues, qr as themeButtonClassName, qt as getEnvVarName, r as revalidateLocalMediaPushPlan, ri as isOnColorBackgroundCandidateToken, rn as getCuratedSiteStyle, rr as FONT_WEIGHT_MAP, rt as createBlockRef, s as prepareLocalMediaForPush, si as featuresFromHex, sn as parseGradientPresetId, sr as ACCORDION_OPEN_ACCENT_THICKNESS, st as createEventCategoryRef, ti as surfaceForegroundValue, tn as mergeHeaderNavTypographyPreference, tr as NAV_LINK_PADDING_X_MAP, tt as pickShadeTowardBackground, u as normalizeMediaValueToIdentifierOnly, ui as buttonVariantIdSchema, un as backgroundAppearanceQuickColorTokenNames, ur as ACCORDION_TRIGGER_LETTER_SPACING, ut as createFormRef, v as writeMediaManifest, vi as RESOLVED_INTERNAL_LINK_ENTITY_TYPES, vn as boxBackgroundSchema, vr as cardVariantRoleValues, vt as createClientForEnv, w as normalizeWidthCandidates, wi as internalRouteOnlyLinkSchema, wn as BREAKPOINT_MD, wr as resolvedButtonColourDeclarations, wt as formatDateShort, x as buildRenderableMediaAssetIndex, xi as externalLinkSchema$1, xn as getHeaderPaintTargets, xr as AFFORDANCE_SUPPRESS_CLASS, xt as createListCommand, y as isMediaValue, yi as customLinkSchema$1, yn as generateHeaderScrollTreatmentStyles, yr as normalizeCardRole, yt as createCommandContext, z as stableStringify, zn as eventListTreatmentValues, zr as textColorStyle, zt as parseEnvironmentSelection } from "../style-qH8rqy9H.mjs";
3
3
  import { $ as parseEventSeriesId, A as normalizeLocationAddressText, At as ok, C as parseNewsletterSignupDestinationProvider, F as formatLocalScheduleDate, G as parseEventPageSurfaceSubject, H as toScheduledBookingDateRange, I as formatLocalScheduleTime, J as publicEventPricingCurrency, K as formatBookingPriceDisplay, L as getBookingLocalDateKey, M as formatBookingDate, N as formatBookingDateParts, P as formatBookingTime, Q as parseApiKeyId, R as getLocalScheduleDate, S as parseNewsletterSignupAuthoringDestinationValue, T as assertAllowedPublicUrl, U as toScheduledBookingDateTime, V as toBookingTimeZone, X as formatCurrencyAmount, Y as publicEventPricingType, Z as assertNever, _ as parseFooterCompositionV1, b as parseMailchimpTagName, c as EVENT_PRESET_VALUES, ct as unsafeAsDemoCapability, d as resolvePlanningDateInput, et as parseMediaAssetId, f as createSecret, it as unsafeAsAppointmentResourceId, j as toLocationCoordinates, kt as err, m as parseManagementKey, mt as unsafeAsMediaAssetId, nt as parseSiteId, o as resolveSiteVerticalBookingConfig, p as exposeSecret, q as formatEventPricing, r as isEventSeriesVerticalPresetDefinition, rt as parseUserId, s as DEFAULT_EVENT_TYPE_PRESETS, t as areConfiguredBookingVerticalConfigsEqual, tt as parsePageId, u as SURFACE_EVENT_PRESET_VALUES, v as parseFooterModuleId, wt as unsafeAsStaffMemberId, x as parseNewsletterListId, y as parseMailchimpAudienceId$1, z as getLocalScheduleTime } from "../src-BRAF1Dee.mjs";
4
4
  import { a as classifySdkEventPricing, o as classifySdkEventPaymentTerms, t as classifySdkEventTiming } from "../sdk-event-upsert-C6zsxDcf.mjs";
5
- import { r as CLI_VERSION } from "../sdk-peer-DZNUBvf5.mjs";
6
- import { t as loadConfigFile } from "../load-config-Co37ncZD.mjs";
5
+ import { r as CLI_VERSION } from "../sdk-peer-C6kOODEY.mjs";
6
+ import { t as loadConfigFile } from "../load-config-CCaUI4HN.mjs";
7
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-Dg60PKJI.mjs";
8
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-CaWqAqfn.mjs";
9
9
  import { config } from "dotenv";
@@ -9768,21 +9768,29 @@ function internalNavigationLinkToLocalLink(item) {
9768
9768
  * Falls back to an internal route payload for legacy rows or incomplete data.
9769
9769
  */
9770
9770
  function toRoutableLinkPayload(item) {
9771
- if (item.identifier) {
9772
- if (item.entityType === "page") {
9773
- return {
9774
- kind: "page",
9775
- identifier: item.identifier
9776
- };
9777
- }
9778
- if (item.entityType === "content" && item.contentTypeKey) {
9779
- return {
9780
- kind: "entry",
9781
- contentType: item.contentTypeKey,
9782
- identifier: item.identifier
9783
- };
9784
- }
9771
+ switch (item.entityType) {
9772
+ case "page":
9773
+ if (item.identifier) {
9774
+ return {
9775
+ kind: "page",
9776
+ identifier: item.identifier
9777
+ };
9778
+ }
9779
+ return toResolvedInternalPayload(item);
9780
+ case "content":
9781
+ if (item.identifier && item.contentTypeKey) {
9782
+ return {
9783
+ kind: "entry",
9784
+ contentType: item.contentTypeKey,
9785
+ identifier: item.identifier
9786
+ };
9787
+ }
9788
+ return toResolvedInternalPayload(item);
9789
+ case "pageSurface": return toResolvedInternalPayload(item);
9790
+ default: return assertNever(item);
9785
9791
  }
9792
+ }
9793
+ function toResolvedInternalPayload(item) {
9786
9794
  return {
9787
9795
  kind: "internal",
9788
9796
  routeId: item.routeId,
@@ -11871,88 +11879,6 @@ function resolveBlockTitle(manifest, blockContent, blockKind) {
11871
11879
  };
11872
11880
  }
11873
11881
 
11874
- //#endregion
11875
- //#region ../blocks/src/system/types/link.ts
11876
- const nullableString = z.union([z.string().min(1), z.null()]);
11877
- const resolvedInternalLinkKeys = [
11878
- "entityId",
11879
- "entityType",
11880
- "href",
11881
- "title",
11882
- "typeLabel"
11883
- ];
11884
- const internalRouteOnlyLinkSchema = z.object({
11885
- kind: z.literal("internal"),
11886
- routeId: z.string().min(1)
11887
- }).passthrough().superRefine((value, ctx) => {
11888
- const hasResolvedMetadata = resolvedInternalLinkKeys.some((key) => value[key] != null);
11889
- if (!hasResolvedMetadata) return;
11890
- ctx.addIssue({
11891
- code: "custom",
11892
- message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
11893
- });
11894
- });
11895
- const internalResolvedLinkSchema = z.object({
11896
- kind: z.literal("internal"),
11897
- routeId: z.string().min(1),
11898
- entityId: z.string().min(1),
11899
- entityType: z.enum(["page", "content"]),
11900
- href: z.string().min(1),
11901
- title: z.string().min(1),
11902
- typeLabel: z.string().min(1),
11903
- contentTypeKey: nullableString.optional(),
11904
- contentTypeName: nullableString.optional(),
11905
- updatedAt: nullableString.optional()
11906
- }).passthrough();
11907
- const internalLinkSchema = z.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
11908
- const externalLinkSchema$1 = z.object({
11909
- kind: z.literal("external"),
11910
- href: z.string().min(1)
11911
- }).passthrough();
11912
- const customLinkSchema$1 = z.object({
11913
- kind: z.literal("url"),
11914
- href: z.string().min(1)
11915
- }).passthrough();
11916
- const pageLinkSchema$1 = z.object({
11917
- kind: z.literal("page"),
11918
- identifier: z.string().min(1)
11919
- }).passthrough();
11920
- const entryLinkSchema$1 = z.object({
11921
- kind: z.literal("entry"),
11922
- contentType: z.string().min(1),
11923
- identifier: z.string().min(1)
11924
- }).passthrough();
11925
- const linkSchema = z.union([
11926
- internalLinkSchema,
11927
- externalLinkSchema$1,
11928
- customLinkSchema$1,
11929
- pageLinkSchema$1,
11930
- entryLinkSchema$1
11931
- ]);
11932
- function visitLinkValueReferences(value, visitor) {
11933
- const parsed = linkSchema.safeParse(value);
11934
- if (!parsed.success) {
11935
- return;
11936
- }
11937
- const link$1 = parsed.data;
11938
- switch (link$1.kind) {
11939
- case "internal":
11940
- visitor.routeIds.add(link$1.routeId);
11941
- return;
11942
- case "page":
11943
- visitor.pageIdentifiers.add(link$1.identifier);
11944
- return;
11945
- case "entry":
11946
- visitor.entryIdentifiers.add(link$1.contentType, link$1.identifier);
11947
- return;
11948
- case "external":
11949
- case "url": return;
11950
- }
11951
- }
11952
- function isInternalResolvedLinkValue(value) {
11953
- return value?.kind === "internal" && "entityId" in value && "entityType" in value && "href" in value && "title" in value && "typeLabel" in value && typeof value.entityId === "string" && typeof value.entityType === "string" && typeof value.href === "string" && typeof value.title === "string" && typeof value.typeLabel === "string";
11954
- }
11955
-
11956
11882
  //#endregion
11957
11883
  //#region ../blocks/src/system/node/schema.ts
11958
11884
  const transformStepSchema = z.object({
@@ -28279,6 +28205,42 @@ const blockBookingPaymentCollectionOptionSchema = z.union([
28279
28205
  ]);
28280
28206
  const blockBookingPaymentTermsSchema = z.object({ allowedOptions: z.array(blockBookingPaymentCollectionOptionSchema).min(1) });
28281
28207
 
28208
+ //#endregion
28209
+ //#region ../blocks/src/system/blocks/shared/bookingConsent.ts
28210
+ const BOOKING_REQUIREMENT_CONSENT_FIELD_PREFIX = "booking_requirement_consent_";
28211
+ function toBookingRequirementConsentFieldId(requirementId) {
28212
+ return `${BOOKING_REQUIREMENT_CONSENT_FIELD_PREFIX}${requirementId}`;
28213
+ }
28214
+ function isBookingRequirementConsentFieldId(value) {
28215
+ return value.startsWith(BOOKING_REQUIREMENT_CONSENT_FIELD_PREFIX);
28216
+ }
28217
+ function toBookingRequirementConsentField(consent) {
28218
+ return {
28219
+ id: toBookingRequirementConsentFieldId(consent.requirementId),
28220
+ label: consent.title,
28221
+ type: "booking_requirement_consent",
28222
+ required: true,
28223
+ agreement: consent.agreement,
28224
+ checkboxLabel: consent.checkboxLabel
28225
+ };
28226
+ }
28227
+ const blockBookingConsentSchema = z.object({
28228
+ requirementId: z.string(),
28229
+ title: z.string(),
28230
+ agreement: RichTextDocSchema,
28231
+ checkboxLabel: z.string()
28232
+ });
28233
+ const bookingRequirementConsentFieldSchema = z.object({
28234
+ id: z.string(),
28235
+ label: z.string(),
28236
+ type: z.literal("booking_requirement_consent"),
28237
+ required: z.literal(true),
28238
+ agreement: RichTextDocSchema,
28239
+ checkboxLabel: z.string().min(1)
28240
+ });
28241
+ /** The two live public carriers for consent copy: Event data and appointment fields. */
28242
+ const bookingConsentCarrierSchema = z.union([blockBookingConsentSchema, bookingRequirementConsentFieldSchema]);
28243
+
28282
28244
  //#endregion
28283
28245
  //#region ../blocks/src/system/blocks/events/whole-series/pricing.ts
28284
28246
  function isSaleWindowOpen(option, now) {
@@ -28546,6 +28508,7 @@ const publicWholeSeriesOfferingSchema = z.object({
28546
28508
  pricing: wholeSeriesPricingSchema,
28547
28509
  currency: z.string(),
28548
28510
  paymentTerms: blockBookingPaymentTermsSchema,
28511
+ consent: blockBookingConsentSchema.nullable(),
28549
28512
  enrollmentCapacity: z.number().nullable(),
28550
28513
  acceptsMemberships: z.boolean(),
28551
28514
  status: z.enum([
@@ -28867,6 +28830,7 @@ const publicEventSchema = z.object({
28867
28830
  timeZone: z.string(),
28868
28831
  pricing: publicEventPricingSchema,
28869
28832
  paymentTerms: blockBookingPaymentTermsSchema,
28833
+ consent: blockBookingConsentSchema.nullable(),
28870
28834
  accessRestriction: accessRestrictionSchema,
28871
28835
  allowedCategoryIds: z.array(z.string()),
28872
28836
  requireGuestDetails: z.boolean().optional(),
@@ -29274,6 +29238,71 @@ function resolveEventRegistrationScopedEvents(events, context) {
29274
29238
  return applyEventRegistrationScope(events, resolveEventRegistrationScope(context));
29275
29239
  }
29276
29240
 
29241
+ //#endregion
29242
+ //#region ../blocks/src/system/runtime/nodes/event-registration/registrationSurface.ts
29243
+ function planEventRegistrationScope(input) {
29244
+ const subject = input.subject;
29245
+ const selectedRunOffering = input.wholeSeriesOffering;
29246
+ if (subject?.kind !== "eventOffering" || !selectedRunOffering) {
29247
+ return {
29248
+ kind: "context",
29249
+ events: resolveEventRegistrationScopedEvents(input.events, {
29250
+ occurrenceContext: input.occurrenceContext,
29251
+ subject
29252
+ })
29253
+ };
29254
+ }
29255
+ const belongsToSubject = selectedRunOffering.eventOfferingId === subject.eventOfferingId && subject.availableEventSeriesIds.some((seriesId) => seriesId === selectedRunOffering.eventSeriesId);
29256
+ if (!belongsToSubject) {
29257
+ return { kind: "invalidSelectedRun" };
29258
+ }
29259
+ return {
29260
+ kind: "selectedRun",
29261
+ events: input.events.filter((event) => event.seriesId === selectedRunOffering.eventSeriesId),
29262
+ offering: selectedRunOffering
29263
+ };
29264
+ }
29265
+ function planEventRegistrationSurface(input) {
29266
+ const scope = planEventRegistrationScope(input);
29267
+ if (scope.kind === "invalidSelectedRun") {
29268
+ return { kind: "unavailableWholeSeries" };
29269
+ }
29270
+ const scopedEvents = scope.events;
29271
+ const bookingScopes = new Set(scopedEvents.map((event) => event.bookingScope));
29272
+ if (scope.kind === "selectedRun") {
29273
+ if (bookingScopes.size !== 1 || !bookingScopes.has("whole_series")) {
29274
+ return { kind: "unavailableWholeSeries" };
29275
+ }
29276
+ return {
29277
+ kind: "wholeSeries",
29278
+ offerings: [scope.offering]
29279
+ };
29280
+ }
29281
+ const isUnscoped = !input.occurrenceContext && !input.subject;
29282
+ if (isUnscoped && bookingScopes.has("single_occurrence")) {
29283
+ return {
29284
+ kind: "occurrence",
29285
+ events: scopedEvents.filter((event) => event.bookingScope === "single_occurrence")
29286
+ };
29287
+ }
29288
+ if (bookingScopes.size === 0 || bookingScopes.has("single_occurrence")) {
29289
+ return bookingScopes.has("whole_series") ? { kind: "mixedBookingScopes" } : {
29290
+ kind: "occurrence",
29291
+ events: scopedEvents
29292
+ };
29293
+ }
29294
+ const requiredSeriesIds = new Set(scopedEvents.map((event) => event.seriesId));
29295
+ const wholeSeriesOffering = input.wholeSeriesOffering;
29296
+ const availableOfferings = wholeSeriesOffering ? [wholeSeriesOffering, ...input.wholeSeriesOfferings.filter((offering) => offering.eventSeriesId !== wholeSeriesOffering.eventSeriesId)] : input.wholeSeriesOfferings;
29297
+ const offerings = availableOfferings.filter((offering) => requiredSeriesIds.has(offering.eventSeriesId));
29298
+ const loadedSeriesIds = new Set(offerings.map((offering) => offering.eventSeriesId));
29299
+ const hasEveryOffering = [...requiredSeriesIds].every((seriesId) => loadedSeriesIds.has(seriesId));
29300
+ return hasEveryOffering && offerings.length > 0 ? {
29301
+ kind: "wholeSeries",
29302
+ offerings
29303
+ } : { kind: "unavailableWholeSeries" };
29304
+ }
29305
+
29277
29306
  //#endregion
29278
29307
  //#region ../blocks/src/system/runtime/nodes/events/shared/destination.ts
29279
29308
  function isRecord$33(value) {
@@ -29869,10 +29898,13 @@ function buildEventRegistrationShellStepLabels(source) {
29869
29898
  }
29870
29899
  function scopeEventRegistrationEvents(source) {
29871
29900
  const events = toRegistrationEvents(source.events ?? []);
29872
- return resolveEventRegistrationScopedEvents(events, {
29901
+ const scope = planEventRegistrationScope({
29902
+ events,
29903
+ wholeSeriesOffering: source.wholeSeriesOffering,
29873
29904
  occurrenceContext: source.occurrenceContext,
29874
29905
  subject: source.subject
29875
29906
  });
29907
+ return scope.kind === "invalidSelectedRun" ? [] : scope.events;
29876
29908
  }
29877
29909
  function shellLabelForRegistrationStep(step, events) {
29878
29910
  switch (step) {
@@ -35893,7 +35925,7 @@ function isLinkValue(value) {
35893
35925
  case "external": return typeof value.href === "string" && value.href.trim().length > 0;
35894
35926
  case "page": return typeof value.identifier === "string" && value.identifier.trim().length > 0;
35895
35927
  case "entry": return typeof value.contentType === "string" && value.contentType.trim().length > 0 && typeof value.identifier === "string" && value.identifier.trim().length > 0;
35896
- case "internal": return typeof value.routeId === "string" && typeof value.entityId === "string" && (value.entityType === "page" || value.entityType === "content") && typeof value.href === "string" && typeof value.title === "string" && typeof value.typeLabel === "string";
35928
+ case "internal": return typeof value.routeId === "string" && typeof value.entityId === "string" && isResolvedInternalLinkEntityType(value.entityType) && typeof value.href === "string" && typeof value.title === "string" && typeof value.typeLabel === "string";
35897
35929
  default: return false;
35898
35930
  }
35899
35931
  }
@@ -36687,6 +36719,7 @@ function normalizeGroupPresentation(value) {
36687
36719
  function resolveAutoCtaPath(source, routes) {
36688
36720
  const routeByNormalizedPath = new Map();
36689
36721
  for (const route of routes ?? []) {
36722
+ if (route.kind === "pageSurface") continue;
36690
36723
  const normalized = normalizeRoutePath(route.path);
36691
36724
  if (normalized && !routeByNormalizedPath.has(normalized)) {
36692
36725
  routeByNormalizedPath.set(normalized, route.path);
@@ -36741,7 +36774,7 @@ const publicRouteCandidatesSchema = z.object({ routes: z.array(z.object({
36741
36774
  entityId: z.string(),
36742
36775
  path: z.string(),
36743
36776
  title: z.string(),
36744
- kind: z.enum(["page", "content"]),
36777
+ kind: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
36745
36778
  contentTypeKey: z.string().nullable().optional()
36746
36779
  })) });
36747
36780
  const groupOverrideFields = [
@@ -44498,7 +44531,7 @@ function normalizeRel(target, rel) {
44498
44531
  tokens.add("noreferrer");
44499
44532
  return Array.from(tokens).join(" ");
44500
44533
  }
44501
- function renderMarks(text$1, marks, key) {
44534
+ function renderMarks(text$1, marks, key, linkTarget) {
44502
44535
  if (!marks || marks.length === 0) return text$1;
44503
44536
  return marks.reduce((acc, mark) => {
44504
44537
  switch (mark.type) {
@@ -44511,7 +44544,8 @@ function renderMarks(text$1, marks, key) {
44511
44544
  const attrs = mark.attrs ?? {};
44512
44545
  const href = sanitizeHref(attrs.href);
44513
44546
  if (!href) return acc;
44514
- const target = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : undefined;
44547
+ const storedTarget = typeof attrs.target === "string" && attrs.target.trim().length > 0 ? attrs.target.trim() : undefined;
44548
+ const target = linkTarget === "new-tab" ? "_blank" : storedTarget;
44515
44549
  const rel = typeof attrs.rel === "string" ? attrs.rel : undefined;
44516
44550
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
44517
44551
  href,
@@ -44524,14 +44558,14 @@ function renderMarks(text$1, marks, key) {
44524
44558
  }
44525
44559
  }, text$1);
44526
44560
  }
44527
- function renderDoc(node, key, imageResolveContext) {
44561
+ function renderDoc(node, key, imageResolveContext, linkTarget) {
44528
44562
  if (!node || !node.type) return null;
44529
- const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext));
44563
+ const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`, imageResolveContext, linkTarget));
44530
44564
  switch (node.type) {
44531
44565
  case "doc": return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
44532
44566
  case "paragraph":
44533
44567
  if (!children && !node.text) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {}, key);
44534
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key) }, key);
44568
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: children ?? renderMarks(node.text ?? "", node.marks, key, linkTarget) }, key);
44535
44569
  case "heading": {
44536
44570
  const level = Math.min(Math.max(node.attrs?.level ?? 2, 1), 6);
44537
44571
  const headingTag = `h${level}`;
@@ -44574,14 +44608,14 @@ function renderDoc(node, key, imageResolveContext) {
44574
44608
  decoding: "async"
44575
44609
  }, key);
44576
44610
  }
44577
- case "text": return renderMarks(node.text ?? "", node.marks, key);
44611
+ case "text": return renderMarks(node.text ?? "", node.marks, key, linkTarget);
44578
44612
  default: return null;
44579
44613
  }
44580
44614
  }
44581
44615
  const DEFAULT_RICH_TEXT_CLASS = "rb-prose rb-max-w-none";
44582
- function RichText$1({ as: Comp = "div", className, doc, path: path$3 }) {
44616
+ function RichText$1({ as: Comp = "div", className, doc, path: path$3, linkTarget = "stored" }) {
44583
44617
  const imageResolveContext = getCurrentResolveImageUrlContext() ?? null;
44584
- const content = doc ? renderDoc(doc, "doc", imageResolveContext) : null;
44618
+ const content = doc ? renderDoc(doc, "doc", imageResolveContext, linkTarget) : null;
44585
44619
  const dataAttributes = path$3 ? { "data-builder-richtext": path$3 } : undefined;
44586
44620
  const resolvedClassName = className?.trim() || DEFAULT_RICH_TEXT_CLASS;
44587
44621
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, {
@@ -48088,6 +48122,31 @@ function isBookingSettings(value) {
48088
48122
  return typeof value === "object" && value !== null && !Array.isArray(value) && value.type === "booking";
48089
48123
  }
48090
48124
 
48125
+ //#endregion
48126
+ //#region ../blocks/src/system/runtime/nodes/booking-form.consent.ts
48127
+ function resolveSelectedAppointmentConsent(service) {
48128
+ return service?.consent ? {
48129
+ kind: "required-for-selected-service",
48130
+ field: toBookingRequirementConsentField(service.consent)
48131
+ } : { kind: "not-applicable" };
48132
+ }
48133
+ function projectSelectedAppointmentConsentIntoForm(form$1, selectedConsent) {
48134
+ if (!form$1) return null;
48135
+ const sourceFields = form$1.schema?.fields ?? [];
48136
+ const baseFields = sourceFields.filter((field) => field.type !== "booking_requirement_consent");
48137
+ const fields$2 = selectedConsent.kind === "required-for-selected-service" ? [...baseFields, selectedConsent.field] : baseFields;
48138
+ if (selectedConsent.kind === "not-applicable" && baseFields.length === sourceFields.length) {
48139
+ return form$1;
48140
+ }
48141
+ return {
48142
+ ...form$1,
48143
+ schema: {
48144
+ ...form$1.schema,
48145
+ fields: fields$2
48146
+ }
48147
+ };
48148
+ }
48149
+
48091
48150
  //#endregion
48092
48151
  //#region ../blocks/src/system/runtime/nodes/booking-form.state.ts
48093
48152
  function toTrimmedString(value) {
@@ -48303,7 +48362,6 @@ function readBookingFieldType(value) {
48303
48362
  case "select":
48304
48363
  case "radio":
48305
48364
  case "checkbox":
48306
- case "booking_requirement_consent":
48307
48365
  case "tel":
48308
48366
  case "url":
48309
48367
  case "number":
@@ -48338,7 +48396,7 @@ function normalizeBookingSettings(value) {
48338
48396
  };
48339
48397
  }
48340
48398
  function isBookingFormService(value) {
48341
- return isRecord$22(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
48399
+ return isRecord$22(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string" && (value.consent === undefined || blockBookingConsentSchema.safeParse(value.consent).success);
48342
48400
  }
48343
48401
  function collectBookingCustomFields(data) {
48344
48402
  const customFields = {};
@@ -48630,7 +48688,16 @@ const bookingFieldOptionSchema = z.object({
48630
48688
  value: z.string(),
48631
48689
  label: z.string()
48632
48690
  });
48633
- const bookingFieldSchema = z.object({
48691
+ const standardBookingFieldRules = {
48692
+ options: z.array(bookingFieldOptionSchema).optional(),
48693
+ multiple: z.boolean().optional(),
48694
+ minLength: z.number().optional(),
48695
+ maxLength: z.number().optional(),
48696
+ pattern: z.string().optional(),
48697
+ min: z.number().optional(),
48698
+ max: z.number().optional()
48699
+ };
48700
+ const standardBookingFieldSchema = z.object({
48634
48701
  id: z.string(),
48635
48702
  label: z.string(),
48636
48703
  type: z.enum([
@@ -48640,7 +48707,6 @@ const bookingFieldSchema = z.object({
48640
48707
  "select",
48641
48708
  "radio",
48642
48709
  "checkbox",
48643
- "booking_requirement_consent",
48644
48710
  "tel",
48645
48711
  "url",
48646
48712
  "number",
@@ -48650,14 +48716,9 @@ const bookingFieldSchema = z.object({
48650
48716
  required: z.boolean().optional(),
48651
48717
  placeholder: z.string().optional(),
48652
48718
  helpText: z.string().optional(),
48653
- options: z.array(bookingFieldOptionSchema).optional(),
48654
- multiple: z.boolean().optional(),
48655
- minLength: z.number().optional(),
48656
- maxLength: z.number().optional(),
48657
- pattern: z.string().optional(),
48658
- min: z.number().optional(),
48659
- max: z.number().optional()
48719
+ ...standardBookingFieldRules
48660
48720
  });
48721
+ const bookingFieldSchema = standardBookingFieldSchema;
48661
48722
  const bookingSettingsSchema = z.object({
48662
48723
  type: z.literal("booking"),
48663
48724
  serviceId: z.string().optional(),
@@ -48745,7 +48806,8 @@ function normalizeAppointmentBookingServices(input) {
48745
48806
  priceAmount: service.priceAmount,
48746
48807
  priceCurrency: service.priceCurrency,
48747
48808
  paymentTerms: service.paymentTerms,
48748
- paymentTermsAvailability: service.paymentTermsAvailability
48809
+ paymentTermsAvailability: service.paymentTermsAvailability,
48810
+ consent: service.consent
48749
48811
  }));
48750
48812
  }
48751
48813
  function buildAppointmentBookingSourceProps(input) {
@@ -48828,7 +48890,8 @@ const bookingServiceSchema = z.object({
48828
48890
  priceAmount: z.number().nullable().optional(),
48829
48891
  priceCurrency: z.string().nullable().optional(),
48830
48892
  paymentTerms: blockBookingPaymentTermsSchema.optional(),
48831
- paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional()
48893
+ paymentTermsAvailability: blockBookingPaymentTermsAvailabilitySchema.optional(),
48894
+ consent: blockBookingConsentSchema.optional()
48832
48895
  });
48833
48896
  const bookingServicesSourceSchema = z.union([
48834
48897
  z.array(bookingServiceSchema),
@@ -55227,13 +55290,49 @@ function hydrateManifestLinks(manifest, content, routes, pagesByIdentifier, entr
55227
55290
  if (!routes || !manifest?.fields?.length) {
55228
55291
  return content;
55229
55292
  }
55293
+ return hydrateLinks(content, routes, pagesByIdentifier, entriesByIdentifier);
55294
+ }
55295
+ /** Hydrate identifier-aware links in data loaded after manifest content. */
55296
+ function hydrateLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
55230
55297
  const context = {
55231
55298
  routes,
55232
55299
  pagesByIdentifier,
55233
55300
  entriesByIdentifier
55234
55301
  };
55235
- const hydrated = hydrateValue(content, context);
55236
- return hydrated;
55302
+ return hydrateValue(value, context);
55303
+ }
55304
+ /**
55305
+ * Hydrate links only inside resolved booking-consent documents. Loader payloads are
55306
+ * otherwise opaque and may legitimately contain objects that resemble link values.
55307
+ */
55308
+ function hydrateResolvedBookingConsentLinks(value, routes, pagesByIdentifier, entriesByIdentifier) {
55309
+ const context = {
55310
+ routes,
55311
+ pagesByIdentifier,
55312
+ entriesByIdentifier
55313
+ };
55314
+ return hydrateResolvedBookingConsentValue(value, context);
55315
+ }
55316
+ function hydrateResolvedBookingConsentValue(value, context) {
55317
+ if (Array.isArray(value)) {
55318
+ const hydratedItems = value.map((item) => hydrateResolvedBookingConsentValue(item, context));
55319
+ return hydratedItems.every((item, index) => item === value[index]) ? value : hydratedItems;
55320
+ }
55321
+ if (!isRecord$17(value)) {
55322
+ return value;
55323
+ }
55324
+ if (isBookingConsentCarrier(value)) {
55325
+ const agreement = hydrateValue(value.agreement, context);
55326
+ return agreement === value.agreement ? value : {
55327
+ ...value,
55328
+ agreement
55329
+ };
55330
+ }
55331
+ const hydratedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateResolvedBookingConsentValue(entry, context)]);
55332
+ return hydratedEntries.every(([key, entry]) => entry === value[key]) ? value : Object.fromEntries(hydratedEntries);
55333
+ }
55334
+ function isBookingConsentCarrier(value) {
55335
+ return bookingConsentCarrierSchema.safeParse(value).success;
55237
55336
  }
55238
55337
  function hydrateValue(value, context) {
55239
55338
  try {
@@ -55335,6 +55434,16 @@ function hydrateEntryLink(link$1, context) {
55335
55434
  };
55336
55435
  }
55337
55436
 
55437
+ //#endregion
55438
+ //#region ../blocks/src/system/manifest/resolveBlockData.ts
55439
+ function resolveBlockData(blockId, dataLoaders$2, dataContext, routes) {
55440
+ const raw = blockId ? dataContext?.resolvedData?.[blockId] : undefined;
55441
+ if (isRecord$17(raw)) {
55442
+ return routes ? hydrateResolvedBookingConsentLinks(raw, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : raw;
55443
+ }
55444
+ return dataLoaders$2 && typeof dataLoaders$2 === "object" && Object.keys(dataLoaders$2).length > 0 ? {} : undefined;
55445
+ }
55446
+
55338
55447
  //#endregion
55339
55448
  //#region ../blocks/src/sdkBlockTransform.ts
55340
55449
  /**
@@ -56010,8 +56119,8 @@ function generateInputCss({ themeId, theme, inputSystem }) {
56010
56119
  const radioSelector = `${rootSelector} .form-radio`;
56011
56120
  const checkableRules = [];
56012
56121
  checkableRules.push("appearance: none");
56013
- checkableRules.push("width: 1rem");
56014
- checkableRules.push("height: 1rem");
56122
+ checkableRules.push("width: 1.125rem");
56123
+ checkableRules.push("height: 1.125rem");
56015
56124
  checkableRules.push("flex-shrink: 0");
56016
56125
  checkableRules.push(`border: ${borderPx} solid ${rgbColorValue(inputSystem.base.border.colorToken)}`);
56017
56126
  if (inputSystem.base.background.type === "transparent") {
@@ -60283,11 +60392,7 @@ const MemoBlockSection = import_react.memo(function MemoBlockSection$1({ themeRe
60283
60392
  try {
60284
60393
  const routes = routeMap ?? dataContext?.routes;
60285
60394
  const hydratedContent = routes ? hydrateManifestLinks(definition$1.manifest, data, routes, dataContext?.pagesByIdentifier, dataContext?.entriesByIdentifier) : data;
60286
- const resolved = resolveBlockData({
60287
- block,
60288
- definition: definition$1,
60289
- dataContext
60290
- });
60395
+ const resolved = resolveBlockData(block.id, definition$1.dataLoaders, dataContext, routes);
60291
60396
  const hasResolvedData = !!resolved && typeof resolved === "object" && Object.keys(resolved).length > 0;
60292
60397
  const baseProps = {
60293
60398
  content: hydratedContent,
@@ -60382,15 +60487,6 @@ function shouldDebugCustomBlocks() {
60382
60487
  return false;
60383
60488
  }
60384
60489
  }
60385
- function resolveBlockData({ block, definition: definition$1, dataContext }) {
60386
- const blockId = block.id ?? null;
60387
- const raw = blockId ? dataContext?.resolvedData?.[blockId] : undefined;
60388
- if (isObjectRecord(raw)) {
60389
- return { ...raw };
60390
- }
60391
- const hasDataLoaders = definition$1.dataLoaders && Object.keys(definition$1.dataLoaders).length > 0;
60392
- return hasDataLoaders ? {} : undefined;
60393
- }
60394
60490
  /**
60395
60491
  * Resolves block content based on stage priority.
60396
60492
  * For draft/preview: draftContent takes priority over content.
@@ -61383,8 +61479,8 @@ ${root} .form-select:disabled {
61383
61479
  }`);
61384
61480
  cssBlocks.push(`${root} .form-checkbox {
61385
61481
  appearance: none;
61386
- width: 1rem;
61387
- height: 1rem;
61482
+ width: 1.125rem;
61483
+ height: 1.125rem;
61388
61484
  flex-shrink: 0;
61389
61485
  border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));
61390
61486
  border-radius: 0.25rem;
@@ -61394,8 +61490,8 @@ ${root} .form-select:disabled {
61394
61490
  }`);
61395
61491
  cssBlocks.push(`${root} .form-radio {
61396
61492
  appearance: none;
61397
- width: 1rem;
61398
- height: 1rem;
61493
+ width: 1.125rem;
61494
+ height: 1.125rem;
61399
61495
  flex-shrink: 0;
61400
61496
  border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));
61401
61497
  border-radius: 9999px;
@@ -78647,6 +78743,17 @@ function hasPositionChanged(remoteItem, localPosition) {
78647
78743
  function hasCtaChanged(localItem, remoteItem) {
78648
78744
  return Boolean(localItem.isCta) !== Boolean(remoteItem.isCta);
78649
78745
  }
78746
+ function hasLabelChanged(localItem, remoteItem) {
78747
+ return localItem.label.trim() !== remoteItem.label.trim();
78748
+ }
78749
+ function hasLinkSpellingChanged(localItem, remoteItem) {
78750
+ return normalizeLocalLink(localItem).trim() !== normalizeRemoteLink(remoteItem).trim();
78751
+ }
78752
+ function findUniqueLinkMatch(localItem, remoteItems, matchedRemoteIds) {
78753
+ const localLinkKey = normalizeLocalLink(localItem).toLowerCase().trim();
78754
+ const candidates = remoteItems.filter((item) => !matchedRemoteIds.has(item.id) && normalizeRemoteLink(item).toLowerCase().trim() === localLinkKey);
78755
+ return candidates.length === 1 ? candidates[0] : undefined;
78756
+ }
78650
78757
  /**
78651
78758
  * Match local navigation items to remote items by label+URL composite key.
78652
78759
  *
@@ -78672,15 +78779,17 @@ function matchNavigationItems(localItems, remoteItems) {
78672
78779
  const localItem = localItems[i];
78673
78780
  if (!localItem) continue;
78674
78781
  const key = itemKey(localItem.label, normalizeLocalLink(localItem));
78675
- const remoteItem = remoteByKey.get(key);
78782
+ const remoteItem = remoteByKey.get(key) ?? findUniqueLinkMatch(localItem, remoteItems, matchedRemoteIds);
78676
78783
  if (remoteItem) {
78677
78784
  matchedRemoteIds.add(remoteItem.id);
78678
78785
  const positionChanged = hasPositionChanged(remoteItem, i);
78679
78786
  const ctaChanged = hasCtaChanged(localItem, remoteItem);
78787
+ const labelChanged = hasLabelChanged(localItem, remoteItem);
78788
+ const linkSpellingChanged = hasLinkSpellingChanged(localItem, remoteItem);
78680
78789
  matches.push({
78681
78790
  localItem,
78682
78791
  remoteItem,
78683
- action: positionChanged || ctaChanged ? "update" : "unchanged",
78792
+ action: positionChanged || ctaChanged || labelChanged || linkSpellingChanged ? "update" : "unchanged",
78684
78793
  position: i
78685
78794
  });
78686
78795
  } else {
@@ -89796,7 +89905,7 @@ function rejectUnauthorizedMediaSync(input) {
89796
89905
  if (input.sourceTarget === "local") {
89797
89906
  input.output.error("Media sync to remote requires --yes", { suggestion: "Use --yes, or pull from remote (the default) to sync remote → local safely." });
89798
89907
  } else {
89799
- input.output.error("--sync-media during a remote pull may write to the source CMS (identifier migration).", { suggestion: "Re-run with --yes to allow remote media identifier assignment/imports." });
89908
+ input.output.error("--sync-media during a remote pull uploads missing media files to the local target.", { suggestion: "Re-run with --yes to allow media uploads to the local target." });
89800
89909
  }
89801
89910
  return true;
89802
89911
  }
@@ -103164,7 +103273,7 @@ async function loadConfig(configPath, output) {
103164
103273
  return { errorMessage: "No config path provided." };
103165
103274
  }
103166
103275
  try {
103167
- const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-Dz8ygC-Z.mjs");
103276
+ const { loadConfigFile: loadConfigFile$1 } = await import("../load-config-CNhueqVc.mjs");
103168
103277
  const rawConfig = await loadConfigFile$1(configPath);
103169
103278
  const parsed = riverbankSiteConfigSchema.safeParse(rawConfig);
103170
103279
  if (!parsed.success) {
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as assertCompatibleSdkPeer } from "./sdk-peer-DZNUBvf5.mjs";
2
+ import { n as assertCompatibleSdkPeer } from "./sdk-peer-C6kOODEY.mjs";
3
3
  import { dirname, resolve } from "path";
4
4
  import { createJiti } from "jiti";
5
5
  import { existsSync } from "fs";
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import "./sdk-peer-C6kOODEY.mjs";
3
+ import { t as loadConfigFile } from "./load-config-CCaUI4HN.mjs";
4
+
5
+ export { loadConfigFile };
@@ -3,7 +3,7 @@ import { existsSync, readFileSync } from "node:fs";
3
3
  import { dirname, join, parse } from "node:path";
4
4
 
5
5
  //#region package.json
6
- var version = "0.4.0";
6
+ var version = "0.4.2";
7
7
  var peerDependencies = { "@riverbankcms/sdk": ">=0.130.0 <1.0.0" };
8
8
  var package_default = {
9
9
  name: "riverbankcms",
@@ -79,7 +79,7 @@ var package_default = {
79
79
  //#endregion
80
80
  //#region src/version.ts
81
81
  /** The package manifest is the source-run fallback; builds inject this value. */
82
- const CLI_VERSION = typeof "0.4.0" === "string" ? "0.4.0" : version;
82
+ const CLI_VERSION = typeof "0.4.2" === "string" ? "0.4.2" : version;
83
83
  /**
84
84
  * The CLI's SDK peer range is bundled from the CLI manifest alongside its
85
85
  * version. Runtime config loading uses this value as the single compatibility
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { At as ok, B as parseUtcIsoDateTimeString, Ct as unsafeAsSiteScopedStoragePath, D as mapNonEmptyArray, Dt as unsafeAsUploadSessionId, E as fromArray, Et as unsafeAsStoragePath, O as hasText, Ot as unsafeAsUserId, St as unsafeAsSiteId, Tt as unsafeAsStorageBucketName, Z as assertNever, _ as parseFooterCompositionV1, _t as unsafeAsPositiveByteCount, a as parseVerticalPresetId, at as unsafeAsBookingRequirementId, bt as unsafeAsSafeDownloadFilename, c as EVENT_PRESET_VALUES, dt as unsafeAsEventOfferingId, f as createSecret, ft as unsafeAsEventSeriesId, g as footerNavigationLayouts, gt as unsafeAsOriginalFilename, h as stableJsonStringify, ht as unsafeAsOccurrenceId, i as parseVerticalId, k as isPresent, kt as err, l as ORDINARY_EVENT_PRESET_VALUES, lt as unsafeAsDetectedMimeType, m as parseManagementKey, mt as unsafeAsMediaAssetId, n as canonicalizeConfiguredBookingVerticalConfig, nt as parseSiteId, o as resolveSiteVerticalBookingConfig, ot as unsafeAsBookingSessionId, p as exposeSecret, pt as unsafeAsFileChecksumSha256, st as unsafeAsDeclaredMimeType, ut as unsafeAsEntitlementId, vt as unsafeAsPositiveSeconds, w as isCanonicalRichTextDoc, xt as unsafeAsSiteFontId, yt as unsafeAsProductId } from "./src-BRAF1Dee.mjs";
3
3
  import { a as classifySdkEventPricing, n as sdkEventOccurrenceInputSchema, o as classifySdkEventPaymentTerms } from "./sdk-event-upsert-C6zsxDcf.mjs";
4
- import { t as CliSdkPeerError } from "./sdk-peer-DZNUBvf5.mjs";
4
+ import { t as CliSdkPeerError } from "./sdk-peer-C6kOODEY.mjs";
5
5
  import "node:module";
6
6
  import { Command } from "commander";
7
7
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -214,6 +214,96 @@ const sdkEventOccurrenceResponseSchema = z.object({ occurrence: sdkManagementEve
214
214
  const sdkDeleteEventOccurrenceResponseSchema = z.object({ deleted: z.literal(true) });
215
215
  const sdkReorderResponseSchema = z.object({ reordered: z.literal(true) });
216
216
 
217
+ //#endregion
218
+ //#region ../blocks/src/system/types/link.ts
219
+ const nullableString = z.union([z.string().min(1), z.null()]);
220
+ const RESOLVED_INTERNAL_LINK_ENTITY_TYPES = [
221
+ "page",
222
+ "content",
223
+ "pageSurface"
224
+ ];
225
+ function isResolvedInternalLinkEntityType(value) {
226
+ return typeof value === "string" && RESOLVED_INTERNAL_LINK_ENTITY_TYPES.includes(value);
227
+ }
228
+ const resolvedInternalLinkKeys = [
229
+ "entityId",
230
+ "entityType",
231
+ "href",
232
+ "title",
233
+ "typeLabel"
234
+ ];
235
+ const internalRouteOnlyLinkSchema = z.object({
236
+ kind: z.literal("internal"),
237
+ routeId: z.string().min(1)
238
+ }).passthrough().superRefine((value, ctx) => {
239
+ const hasResolvedMetadata = resolvedInternalLinkKeys.some((key) => value[key] != null);
240
+ if (!hasResolvedMetadata) return;
241
+ ctx.addIssue({
242
+ code: "custom",
243
+ message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
244
+ });
245
+ });
246
+ const internalResolvedLinkSchema = z.object({
247
+ kind: z.literal("internal"),
248
+ routeId: z.string().min(1),
249
+ entityId: z.string().min(1),
250
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
251
+ href: z.string().min(1),
252
+ title: z.string().min(1),
253
+ typeLabel: z.string().min(1),
254
+ contentTypeKey: nullableString.optional(),
255
+ contentTypeName: nullableString.optional(),
256
+ updatedAt: nullableString.optional()
257
+ }).passthrough();
258
+ const internalLinkSchema = z.union([internalResolvedLinkSchema, internalRouteOnlyLinkSchema]);
259
+ const externalLinkSchema$1 = z.object({
260
+ kind: z.literal("external"),
261
+ href: z.string().min(1)
262
+ }).passthrough();
263
+ const customLinkSchema$1 = z.object({
264
+ kind: z.literal("url"),
265
+ href: z.string().min(1)
266
+ }).passthrough();
267
+ const pageLinkSchema$1 = z.object({
268
+ kind: z.literal("page"),
269
+ identifier: z.string().min(1)
270
+ }).passthrough();
271
+ const entryLinkSchema$1 = z.object({
272
+ kind: z.literal("entry"),
273
+ contentType: z.string().min(1),
274
+ identifier: z.string().min(1)
275
+ }).passthrough();
276
+ const linkSchema = z.union([
277
+ internalLinkSchema,
278
+ externalLinkSchema$1,
279
+ customLinkSchema$1,
280
+ pageLinkSchema$1,
281
+ entryLinkSchema$1
282
+ ]);
283
+ function visitLinkValueReferences(value, visitor) {
284
+ const parsed = linkSchema.safeParse(value);
285
+ if (!parsed.success) {
286
+ return;
287
+ }
288
+ const link = parsed.data;
289
+ switch (link.kind) {
290
+ case "internal":
291
+ visitor.routeIds.add(link.routeId);
292
+ return;
293
+ case "page":
294
+ visitor.pageIdentifiers.add(link.identifier);
295
+ return;
296
+ case "entry":
297
+ visitor.entryIdentifiers.add(link.contentType, link.identifier);
298
+ return;
299
+ case "external":
300
+ case "url": return;
301
+ }
302
+ }
303
+ function isInternalResolvedLinkValue(value) {
304
+ return value?.kind === "internal" && "entityId" in value && "entityType" in value && "href" in value && "title" in value && "typeLabel" in value && typeof value.entityId === "string" && isResolvedInternalLinkEntityType(value.entityType) && typeof value.href === "string" && typeof value.title === "string" && typeof value.typeLabel === "string";
305
+ }
306
+
217
307
  //#endregion
218
308
  //#region ../api/src/navigation/contracts.ts
219
309
  /**
@@ -244,7 +334,7 @@ const internalLinkPayloadSchema = z.object({
244
334
  kind: z.literal("internal"),
245
335
  routeId: z.string().uuid(),
246
336
  entityId: z.string().uuid(),
247
- entityType: z.enum(["page", "content"]),
337
+ entityType: z.enum(RESOLVED_INTERNAL_LINK_ENTITY_TYPES),
248
338
  href: z.string().min(1),
249
339
  title: z.string().min(1),
250
340
  typeLabel: z.string().min(1),
@@ -39193,7 +39283,7 @@ function buildTokenMaps(assets) {
39193
39283
  const byStoragePath = new Map();
39194
39284
  for (const asset of assets) {
39195
39285
  byAssetId.set(asset.id, asset.id);
39196
- const identifier = asset.identifier?.trim();
39286
+ const identifier = asset.identifier.trim();
39197
39287
  if (identifier) {
39198
39288
  byIdentifier.set(identifier, asset.id);
39199
39289
  }
@@ -44855,4 +44945,4 @@ Examples:
44855
44945
  }
44856
44946
 
44857
44947
  //#endregion
44858
- export { require_jsx_runtime as $, NAV_LINK_LETTER_SPACING_MAP as $n, surfaceForegroundDeclarations as $r, formatIgnoredDocumentSyncSectionWarning as $t, getImageUrl as A, MQ_SM_DOWN as An, isCssColorLiteral as Ar, parseJsonData as At, createDryRunReport as B, eyebrowTreatmentValues as Bn, resolveSurfaceForeground as Br, planEnvironmentExecution as Bt, rotateNormalizedPoint as C, BREAKPOINT_LG as Cn, RESOLVED_BUTTON_DISABLED_DECLARATIONS as Cr, currentInvocationEnvelope as Ct, resolveMediaTransformForAspect as D, MQ_LG_UP as Dn, contextualButtonSurfaceStyles as Dr, handleCommandError as Dt, parseAspectRatioValue as E, BREAKPOINT_XL as En, contextualButtonSurfaceResetStyles as Er, getOutputOnlyContext as Et, parseRelativeStoragePath as F, assertNever$5 as Fn, borderColorStyle as Fr, withConfirmation as Ft, getSiteCommandMetadata as G, testimonialsCompositionTreatmentValues as Gn, TokenResolver as Gr, CliExit as Gt, mapEventCommandContent as H, headingDecorationColorTokenValues as Hn, generateEffectsCSS as Hr, requireEnvironmentWriteAuthorization as Ht, classifyKnownMimeType as I, defineBlockDesignCapability as In, cssVarValue as Ir, withErrorHandling as It, entryIdentifierForCommand as J, getComponentBorderWidthPx as Jn, parseThemeForPersistence as Jr, getEnvironmentDebugInfo as Jt, blockIdentifierForCommand as K, tileTreatmentValues as Kn, parseThemeButtonVariantId as Kr, getEnvPrefix as Kt, venueManagementFields as L, defineFrameCapability as Ln, mergeStyles as Lr, withOutputOnlyErrorHandling as Lt, deriveVideoSlotPolicy as M, MQ_TABLET_ONLY as Mn, resolveThemeColorReferenceValue as Mr, resolveCommandPath as Mt, resolveVideoSelectionIntentForMediaField as N, headerVariantValues as Nn, resolveTokenOrCssColorValue as Nr, runWithInvocation as Nt, getDirectImageUrlForRelativePath as O, MQ_MD_DOWN as On, deriveButtonSurfaceContext as Or, mapEntryForOutput as Ot, asRecord as P, pageDesignEditorBackgroundOverrideOwner as Pn, backgroundColorStyle as Pr, withCommandContext as Pt, hasConfiguredBookingVertical as Q, NAV_LINK_BORDER_RADIUS_MAP as Qn, DEFAULT_SURFACE_TEXT_COLOR as Qr, createManagementClient as Qt, sortRecord as R, defineNoBlockDesignCapability as Rn, rgbColorValue as Rr, executeEnvironmentPlan as Rt, deleteEnvSpecificKeys as S, renderHeaderPaintTargetRules as Sn, generateButtonCss as Sr, createOutputForCommand as St, isExplicitRectCrop as T, BREAKPOINT_SM as Tn, resolvedButtonFocusDeclarations as Tr, getOutputContext as Tt, evaluateSiteCommandBatchExposure as U, introCompositionTreatmentValues as Un, generateBaseInteractiveCSS as Ur, withRiverbankEnv as Ut, parseAndPlanCommandBatchForTypes as V, featureCardCompositionTreatmentValues as Vn, generateDefaultButtonSystem as Vr, planEnvironmentWriteAuthorization as Vt, evaluateSiteCommandExposure as W, offeringsPreviewCompositionTreatmentValues as Wn, generateInteractiveChildInheritanceCSS as Wr, formatError as Wt, pageIdentifierForCommand as X, parseBlockCustomCssRules as Xn, formatButtonColourContractError as Xr, isRemoteConfigured as Xt, pageIdentifierForBlockCommand as Y, getComponentShadowVar as Yn, compileButtonColourStates as Yr, isLocalConfigured as Yt, pagePathForCommand as Z, parseCustomCssRules as Zn, generateShadowValue$1 as Zr, loadSdkEnvironment as Zt, hasOwnSettingsField as _, linkPayloadSchema as _i, boxBackgroundOverlaySchema as _n, cardRoleSchema as _r, confirmAction as _t, syncLocalMediaForPull as a, getTextColorForBackground as ai, GRADIENT_PRESET_IDS as an, INPUT_SPACING_MAP as ar, createCommandRef as at, attachRenderableMediaAssetFields as b, generateMobileOverlayBackdropFilterFix as bn, PUBLIC_BUTTON_ROLES as br, createGetCommand as bt, sha256 as c, hexToRgb$1 as ci, boundaryRuntimeMetricsForTransition as cn, ACCORDION_SPACING_MAP as cr, createEventSeriesRef as ct, walkLocalContentMedia as d, unsafeAsOpaqueButtonColourToken as di, parseBackgroundAppearanceColorToken as dn, ICON_CONFIG as dr, createNavigationRef as dt, surfaceForegroundStyle as ei, ManagementApiError as en, NAV_LINK_PADDING_MAP as er, require_react as et, buildStorageUrl as f, parseBlockColorToken as fi, defaultThemeTokens as fn, ICON_SIZE_PX as fr, createPageRef as ft, buildSettingsUpdateInput as g, persistableMediaSchema as gi, themeSchema as gn, generateShadowValue as gr, slugPart as gt, SETTINGS_FILE_FIELDS as h, mediaTypeDiscriminants as hi, sdkThemeWireSchema as hn, generateCardCss as hr, refSlug as ht, syncLocalMediaForPush as i, onColorTokenName as ii, gradientToCss as in, INPUT_FONT_SIZE_MAP as ir, createBlocksRef as it, isSiteScopedDirectImageStoragePath as j, MQ_SM_UP as jn, resolveOnColorForThemeToken as jr, parsePaginationOptions as jt, getDirectImageUrlForSiteScopedPath as k, MQ_MD_UP as kn, resolveContextualButtonRole as kr, parseJsonArray as kt, normalizeMediaIdentifierInput as l, VARIANT_ROLES as li, backgroundAppearanceColorTokenNames as ln, ACCORDION_TRIGGER_FONT_SCALE as lr, createFooterRef as lt, extractMediaIdentifiers as m, mediaSchema as mi, sdkSettingsUpdateSchema as mn, getDefaultCardVariants as mr, createVenueRef as mt, createStyleCommand as n, expandPalette as ni, readHeaderNavFontSizePreference as nn, NAV_LINK_TEXT_SIZE_MAP as nr, generateCssVars as nt, applyLocalMediaPush as o, ORDINARY_TEXT_MIN_CONTRAST_RATIO as oi, getGradientPreset as on, LABEL_FONT_SIZE_MAP as or, createContentEntryRef as ot, downloadMedia as p, mediaIdentifierSchema as pi, defineBlockDesignMetadata as pn, generateCardCoreCss as pr, createSiteCommandSiteRef as pt, blockOrderIdentifiersForCommand as q, visibleHeadingDecorationFamilyValues as qn, themeButtonClassName as qr, getEnvVarName as qt, revalidateLocalMediaPushPlan as r, isOnColorBackgroundCandidateToken as ri, getCuratedSiteStyle as rn, FONT_WEIGHT_MAP as rr, createBlockRef as rt, prepareLocalMediaForPush as s, featuresFromHex as si, parseGradientPresetId as sn, ACCORDION_OPEN_ACCENT_THICKNESS as sr, createEventCategoryRef as st, buildStyleSelectionInitializeCommandFromOptions as t, surfaceForegroundValue as ti, mergeHeaderNavTypographyPreference as tn, NAV_LINK_PADDING_X_MAP as tr, pickShadeTowardBackground as tt, normalizeMediaValueToIdentifierOnly as u, buttonVariantIdSchema as ui, backgroundAppearanceQuickColorTokenNames as un, ACCORDION_TRIGGER_LETTER_SPACING as ur, createFormRef as ut, writeMediaManifest as v, sdkConfiguredBookingVerticalConfigSchema as vi, boxBackgroundSchema as vn, cardVariantRoleValues as vr, createClientForEnv as vt, normalizeWidthCandidates as w, BREAKPOINT_MD as wn, resolvedButtonColourDeclarations as wr, formatDateShort as wt, buildRenderableMediaAssetIndex as x, getHeaderPaintTargets as xn, AFFORDANCE_SUPPRESS_CLASS as xr, createListCommand$1 as xt, isMediaValue as y, __toESM as yi, generateHeaderScrollTreatmentStyles as yn, normalizeCardRole as yr, createCommandContext as yt, stableStringify as z, eventListTreatmentValues as zn, textColorStyle as zr, parseEnvironmentSelection as zt };
44948
+ export { require_jsx_runtime as $, NAV_LINK_LETTER_SPACING_MAP as $n, surfaceForegroundDeclarations as $r, formatIgnoredDocumentSyncSectionWarning as $t, getImageUrl as A, __toESM as Ai, MQ_SM_DOWN as An, isCssColorLiteral as Ar, parseJsonData as At, createDryRunReport as B, eyebrowTreatmentValues as Bn, resolveSurfaceForeground as Br, planEnvironmentExecution as Bt, rotateNormalizedPoint as C, internalResolvedLinkSchema as Ci, BREAKPOINT_LG as Cn, RESOLVED_BUTTON_DISABLED_DECLARATIONS as Cr, currentInvocationEnvelope as Ct, resolveMediaTransformForAspect as D, linkSchema as Di, MQ_LG_UP as Dn, contextualButtonSurfaceStyles as Dr, handleCommandError as Dt, parseAspectRatioValue as E, isResolvedInternalLinkEntityType as Ei, BREAKPOINT_XL as En, contextualButtonSurfaceResetStyles as Er, getOutputOnlyContext as Et, parseRelativeStoragePath as F, assertNever$5 as Fn, borderColorStyle as Fr, withConfirmation as Ft, getSiteCommandMetadata as G, testimonialsCompositionTreatmentValues as Gn, TokenResolver as Gr, CliExit as Gt, mapEventCommandContent as H, headingDecorationColorTokenValues as Hn, generateEffectsCSS as Hr, requireEnvironmentWriteAuthorization as Ht, classifyKnownMimeType as I, defineBlockDesignCapability as In, cssVarValue as Ir, withErrorHandling as It, entryIdentifierForCommand as J, getComponentBorderWidthPx as Jn, parseThemeForPersistence as Jr, getEnvironmentDebugInfo as Jt, blockIdentifierForCommand as K, tileTreatmentValues as Kn, parseThemeButtonVariantId as Kr, getEnvPrefix as Kt, venueManagementFields as L, defineFrameCapability as Ln, mergeStyles as Lr, withOutputOnlyErrorHandling as Lt, deriveVideoSlotPolicy as M, MQ_TABLET_ONLY as Mn, resolveThemeColorReferenceValue as Mr, resolveCommandPath as Mt, resolveVideoSelectionIntentForMediaField as N, headerVariantValues as Nn, resolveTokenOrCssColorValue as Nr, runWithInvocation as Nt, getDirectImageUrlForRelativePath as O, pageLinkSchema$1 as Oi, MQ_MD_DOWN as On, deriveButtonSurfaceContext as Or, mapEntryForOutput as Ot, asRecord as P, pageDesignEditorBackgroundOverrideOwner as Pn, backgroundColorStyle as Pr, withCommandContext as Pt, hasConfiguredBookingVertical as Q, NAV_LINK_BORDER_RADIUS_MAP as Qn, DEFAULT_SURFACE_TEXT_COLOR as Qr, createManagementClient as Qt, sortRecord as R, defineNoBlockDesignCapability as Rn, rgbColorValue as Rr, executeEnvironmentPlan as Rt, deleteEnvSpecificKeys as S, internalLinkSchema as Si, renderHeaderPaintTargetRules as Sn, generateButtonCss as Sr, createOutputForCommand as St, isExplicitRectCrop as T, isInternalResolvedLinkValue as Ti, BREAKPOINT_SM as Tn, resolvedButtonFocusDeclarations as Tr, getOutputContext as Tt, evaluateSiteCommandBatchExposure as U, introCompositionTreatmentValues as Un, generateBaseInteractiveCSS as Ur, withRiverbankEnv as Ut, parseAndPlanCommandBatchForTypes as V, featureCardCompositionTreatmentValues as Vn, generateDefaultButtonSystem as Vr, planEnvironmentWriteAuthorization as Vt, evaluateSiteCommandExposure as W, offeringsPreviewCompositionTreatmentValues as Wn, generateInteractiveChildInheritanceCSS as Wr, formatError as Wt, pageIdentifierForCommand as X, parseBlockCustomCssRules as Xn, formatButtonColourContractError as Xr, isRemoteConfigured as Xt, pageIdentifierForBlockCommand as Y, getComponentShadowVar as Yn, compileButtonColourStates as Yr, isLocalConfigured as Yt, pagePathForCommand as Z, parseCustomCssRules as Zn, generateShadowValue$1 as Zr, loadSdkEnvironment as Zt, hasOwnSettingsField as _, linkPayloadSchema as _i, boxBackgroundOverlaySchema as _n, cardRoleSchema as _r, confirmAction as _t, syncLocalMediaForPull as a, getTextColorForBackground as ai, GRADIENT_PRESET_IDS as an, INPUT_SPACING_MAP as ar, createCommandRef as at, attachRenderableMediaAssetFields as b, entryLinkSchema$1 as bi, generateMobileOverlayBackdropFilterFix as bn, PUBLIC_BUTTON_ROLES as br, createGetCommand as bt, sha256 as c, hexToRgb$1 as ci, boundaryRuntimeMetricsForTransition as cn, ACCORDION_SPACING_MAP as cr, createEventSeriesRef as ct, walkLocalContentMedia as d, unsafeAsOpaqueButtonColourToken as di, parseBackgroundAppearanceColorToken as dn, ICON_CONFIG as dr, createNavigationRef as dt, surfaceForegroundStyle as ei, ManagementApiError as en, NAV_LINK_PADDING_MAP as er, require_react as et, buildStorageUrl as f, parseBlockColorToken as fi, defaultThemeTokens as fn, ICON_SIZE_PX as fr, createPageRef as ft, buildSettingsUpdateInput as g, persistableMediaSchema as gi, themeSchema as gn, generateShadowValue as gr, slugPart as gt, SETTINGS_FILE_FIELDS as h, mediaTypeDiscriminants as hi, sdkThemeWireSchema as hn, generateCardCss as hr, refSlug as ht, syncLocalMediaForPush as i, onColorTokenName as ii, gradientToCss as in, INPUT_FONT_SIZE_MAP as ir, createBlocksRef as it, isSiteScopedDirectImageStoragePath as j, MQ_SM_UP as jn, resolveOnColorForThemeToken as jr, parsePaginationOptions as jt, getDirectImageUrlForSiteScopedPath as k, sdkConfiguredBookingVerticalConfigSchema as ki, MQ_MD_UP as kn, resolveContextualButtonRole as kr, parseJsonArray as kt, normalizeMediaIdentifierInput as l, VARIANT_ROLES as li, backgroundAppearanceColorTokenNames as ln, ACCORDION_TRIGGER_FONT_SCALE as lr, createFooterRef as lt, extractMediaIdentifiers as m, mediaSchema as mi, sdkSettingsUpdateSchema as mn, getDefaultCardVariants as mr, createVenueRef as mt, createStyleCommand as n, expandPalette as ni, readHeaderNavFontSizePreference as nn, NAV_LINK_TEXT_SIZE_MAP as nr, generateCssVars as nt, applyLocalMediaPush as o, ORDINARY_TEXT_MIN_CONTRAST_RATIO as oi, getGradientPreset as on, LABEL_FONT_SIZE_MAP as or, createContentEntryRef as ot, downloadMedia as p, mediaIdentifierSchema as pi, defineBlockDesignMetadata as pn, generateCardCoreCss as pr, createSiteCommandSiteRef as pt, blockOrderIdentifiersForCommand as q, visibleHeadingDecorationFamilyValues as qn, themeButtonClassName as qr, getEnvVarName as qt, revalidateLocalMediaPushPlan as r, isOnColorBackgroundCandidateToken as ri, getCuratedSiteStyle as rn, FONT_WEIGHT_MAP as rr, createBlockRef as rt, prepareLocalMediaForPush as s, featuresFromHex as si, parseGradientPresetId as sn, ACCORDION_OPEN_ACCENT_THICKNESS as sr, createEventCategoryRef as st, buildStyleSelectionInitializeCommandFromOptions as t, surfaceForegroundValue as ti, mergeHeaderNavTypographyPreference as tn, NAV_LINK_PADDING_X_MAP as tr, pickShadeTowardBackground as tt, normalizeMediaValueToIdentifierOnly as u, buttonVariantIdSchema as ui, backgroundAppearanceQuickColorTokenNames as un, ACCORDION_TRIGGER_LETTER_SPACING as ur, createFormRef as ut, writeMediaManifest as v, RESOLVED_INTERNAL_LINK_ENTITY_TYPES as vi, boxBackgroundSchema as vn, cardVariantRoleValues as vr, createClientForEnv as vt, normalizeWidthCandidates as w, internalRouteOnlyLinkSchema as wi, BREAKPOINT_MD as wn, resolvedButtonColourDeclarations as wr, formatDateShort as wt, buildRenderableMediaAssetIndex as x, externalLinkSchema$1 as xi, getHeaderPaintTargets as xn, AFFORDANCE_SUPPRESS_CLASS as xr, createListCommand$1 as xt, isMediaValue as y, customLinkSchema$1 as yi, generateHeaderScrollTreatmentStyles as yn, normalizeCardRole as yr, createCommandContext as yt, stableStringify as z, eventListTreatmentValues as zn, textColorStyle as zr, parseEnvironmentSelection as zt };
package/dist/testing.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { a as syncLocalMediaForPull, i as syncLocalMediaForPush, t as buildStyleSelectionInitializeCommandFromOptions, v as writeMediaManifest } from "./style-TmApGKZX.mjs";
2
+ import { a as syncLocalMediaForPull, i as syncLocalMediaForPush, t as buildStyleSelectionInitializeCommandFromOptions, v as writeMediaManifest } from "./style-qH8rqy9H.mjs";
3
3
  import "./src-BRAF1Dee.mjs";
4
4
  import "./sdk-event-upsert-C6zsxDcf.mjs";
5
- import "./sdk-peer-DZNUBvf5.mjs";
5
+ import "./sdk-peer-C6kOODEY.mjs";
6
6
 
7
7
  export { buildStyleSelectionInitializeCommandFromOptions, syncLocalMediaForPull, syncLocalMediaForPush, writeMediaManifest };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "riverbankcms",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "Riverbank CMS command-line tools for SDK site developers",
5
5
  "bin": {
6
6
  "riverbankcms": "dist/cli/index.mjs"
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
- import "./sdk-peer-DZNUBvf5.mjs";
3
- import { t as loadConfigFile } from "./load-config-Co37ncZD.mjs";
4
-
5
- export { loadConfigFile };