import type { MediaAssetIndexItem } from '@riverbankcms/blocks';
export type RuntimeMediaAssetState = Readonly<{
    siteId: string;
    baseAssets: readonly MediaAssetIndexItem[];
    registeredAssets: readonly MediaAssetIndexItem[];
}>;
export type RuntimeMediaAssetAction = Readonly<{
    type: 'siteSnapshotReplaced';
    siteId: string;
    baseAssets: readonly MediaAssetIndexItem[];
}> | Readonly<{
    type: 'assetRegistered';
    siteId: string;
    asset: MediaAssetIndexItem;
}>;
export declare function createRuntimeMediaAssetState(siteId: string, baseAssets: readonly MediaAssetIndexItem[]): RuntimeMediaAssetState;
export declare function reduceRuntimeMediaAssetState(state: RuntimeMediaAssetState, action: RuntimeMediaAssetAction): RuntimeMediaAssetState;
/**
 * Returns a freshly deduped merge of base and runtime assets.
 * Callers should memoize the result if referential stability matters downstream.
 */
export declare function selectRuntimeMediaAssets(state: RuntimeMediaAssetState): readonly MediaAssetIndexItem[];
export declare function createRuntimeMediaAssetSnapshotKey(siteId: string, assets: readonly MediaAssetIndexItem[]): string;
