import { type ReactNode } from 'react';
import type { BlockManifest } from './manifest';
import type { SystemBlockComponent } from './registry';
import { resolveTree } from './runtime';
import type { Theme } from '@riverbankcms/theme-core/schema';
import type { NodeDefinition } from './node';
type RenderOptions = {
    registry?: Parameters<typeof resolveTree>[1]["registry"];
    theme?: Parameters<typeof resolveTree>[1]["theme"];
    themeConfig?: Theme;
    transforms?: Parameters<typeof resolveTree>[1]["transforms"];
    viewModelOverrides?: Record<string, unknown>;
    data?: Record<string, unknown>;
    pathBase?: string;
};
/**
 * Resolves the layout definition for a block based on its manifest and content.
 *
 * Fallback chain:
 * 1. content.variant (if manifest.variants exists and contains the key)
 * 2. content.layout (legacy blog listing support)
 * 3. manifest.defaultVariant (if manifest.variants exists)
 * 4. First key in manifest.variants
 * 5. manifest.layout
 *
 * @param manifest - The block manifest
 * @param content - The block content object
 * @returns The resolved NodeDefinition layout or null if none found
 */
export declare function resolveBlockVariantKey(manifest: BlockManifest, content: Record<string, unknown>): string | null;
export declare function resolveBlockLayout(manifest: BlockManifest, content: Record<string, unknown>): NodeDefinition | NodeDefinition[] | null;
export declare function makeDefaultBlockComponent<TContent = Record<string, unknown>>(args: {
    manifest: BlockManifest;
}): SystemBlockComponent<TContent>;
export declare function renderBlock<TContent>(manifest: BlockManifest, content: TContent, options?: RenderOptions): ReactNode;
export {};
