/**
 * Read-time media enrichment for the `/resolve` endpoint (WS-E E3).
 *
 * Section content stores image references as plain URL strings (the value the
 * media picker hands back — usually a public blob URL). The public renderer can
 * lay out images without shift and fall back to library alt text if it also
 * knows each image's intrinsic `width`/`height` and `altText`. Rather than
 * change the stored shape, we look those up from `actuate_media` at read time
 * and attach them as optional sibling fields the renderers already read:
 *
 *   - `feature` sections gain `imageWidth` / `imageHeight`; empty `imageAlt`
 *     is backfilled from the library.
 *   - `gallery` rows gain `width` / `height`; empty `alt` is backfilled.
 *
 * This is purely additive and non-destructive — the stored document is never
 * mutated, only the resolve response. The pure functions here are unit-tested;
 * the (mockable) DB lookup is wired in the handler.
 */
/** Metadata pulled from a media record, keyed by its public URL. */
export interface MediaMeta {
    width?: number | null;
    height?: number | null;
    alt?: string | null;
    title?: string | null;
}
type Section = Record<string, unknown>;
/**
 * Collect the distinct image URLs referenced by `feature` and `gallery`
 * sections, so the caller can batch-load their media metadata in one query.
 */
export declare function collectSectionImageUrls(sections: unknown): string[];
/**
 * Return a new sections array with intrinsic dimensions + library alt text
 * applied from `lookup`. Sections without a matching image are returned as-is
 * (by reference); enriched sections get a shallow-cloned `content`.
 */
export declare function applyMediaMeta(sections: unknown, lookup: Map<string, MediaMeta>): Section[];
export {};
//# sourceMappingURL=media-enrich.d.ts.map