import { type Codec, type InteractiveBlockRuntime, type RuntimeKind, type RuntimeRender, type RuntimeSource } from './runtime';
type AnyInteractiveRuntime = InteractiveBlockRuntime<any, any, any>;
type InteractiveIslandRender<TMode extends string, TRuntime extends AnyInteractiveRuntime> = Readonly<{
    mode: TMode;
} & RuntimeRender<TRuntime>>;
type InteractiveIslandMetaKeys<TMeta extends object> = readonly Extract<keyof TMeta, string>[];
type RequireAllMetaKeys<TMeta extends object, TKeys extends InteractiveIslandMetaKeys<TMeta>> = Exclude<Extract<keyof TMeta, string>, TKeys[number]> extends never ? TKeys : never;
export type InteractiveIslandProps<TMeta extends object, TMode extends string, TRuntime extends AnyInteractiveRuntime> = Readonly<TMeta & {
    renderKind: RuntimeKind<TRuntime>;
    render: InteractiveIslandRender<TMode, TRuntime>;
}>;
type InteractiveIslandCodecOptions<TMeta extends object, TMode extends string, TRuntime extends AnyInteractiveRuntime, TMetaKeys extends InteractiveIslandMetaKeys<TMeta>> = Readonly<{
    runtime: TRuntime;
    mode: TMode;
    meta: Codec<TMeta>;
    metaKeys: RequireAllMetaKeys<TMeta, TMetaKeys>;
    selectMeta: (value: InteractiveIslandProps<TMeta, TMode, TRuntime>) => TMeta;
}>;
type BuildInteractiveIslandPropsOptions<TMeta extends object, TMode extends string, TRuntime extends AnyInteractiveRuntime> = Readonly<{
    runtime: TRuntime;
    mode: TMode;
    meta: TMeta;
    source: RuntimeSource<TRuntime>;
}>;
export declare function defineInteractiveIslandMetaKeys<TMeta extends object, TKeys extends InteractiveIslandMetaKeys<TMeta> = InteractiveIslandMetaKeys<TMeta>>(...keys: RequireAllMetaKeys<TMeta, TKeys>): TKeys;
export declare function buildInteractiveIslandProps<TMeta extends object, TMode extends string, TRuntime extends AnyInteractiveRuntime>(options: BuildInteractiveIslandPropsOptions<TMeta, TMode, TRuntime>): InteractiveIslandProps<TMeta, TMode, TRuntime>;
export declare function createInteractiveIslandCodec<TMeta extends object, TMode extends string, TRuntime extends AnyInteractiveRuntime, TMetaKeys extends InteractiveIslandMetaKeys<TMeta>>(options: InteractiveIslandCodecOptions<TMeta, TMode, TRuntime, TMetaKeys>): Codec<InteractiveIslandProps<TMeta, TMode, TRuntime>>;
export {};
