@selenite/graph-editor
Version:
A graph editor for visual programming, based on rete and svelte.
53 lines (52 loc) • 1.89 kB
TypeScript
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 {};