import type { Schemes } from '../../schemes';
import type { SetupFunction } from '../../setup';
import { Scope, type BaseSchemes } from 'rete';
import type { RenderSignal } from 'rete-area-plugin';
import type { Position } from 'rete-area-plugin/_types/types';
import type { Component } from 'svelte';
import { type SvelteRenderer } from './renderer.svelte';
import type { Setup } from '../../setup/Setup';
type ComponentProps = Record<string, any> | undefined | void | null;
type RenderResult = {
    component: Component;
    props: ComponentProps;
} | undefined | void | null;
export type RenderPreset = {
    attach?: (plugin: SveltePlugin) => void;
    update: (context: Extract<Requires<Schemes>, {
        type: 'render';
    }>, plugin: SveltePlugin<Requires<Schemes>>) => ComponentProps;
    render: (context: Extract<Requires<Schemes>, {
        type: 'render';
    }>, plugin: SveltePlugin<Requires<Schemes>>) => RenderResult;
};
type Requires<Schemes extends BaseSchemes> = RenderSignal<'node', {
    payload: Schemes['Node'];
}> | RenderSignal<'connection', {
    payload: Schemes['Connection'];
    start?: Position;
    end?: Position;
}> | {
    type: 'unmount';
    data: {
        element: HTMLElement;
    };
};
declare class SveltePlugin<T = Requires<Schemes>> extends Scope<Schemes, [T | Requires<Schemes>]> {
    renderer: SvelteRenderer;
    readonly presets: RenderPreset[];
    owners: WeakMap<HTMLElement, RenderPreset>;
    constructor();
    apps: Map<HTMLElement, Node>;
    setParent(scope: Scope<Requires<Schemes>>): void;
    private unmount;
    private mount;
    /**
     * Adds a preset to the plugin.
     * @param preset Preset that can render nodes, connections and other elements.
     */
    addPreset<K>(preset: RenderPreset): void;
}
export declare const setupSvelteRender: SetupFunction;
export declare const svelteRenderSetup: Setup;
export {};
