@delove/reaflow
Version:
Node-based Visualizations for React
79 lines (78 loc) • 2.06 kB
TypeScript
import { RefObject } from 'react';
import { CanvasPosition, EdgeData, NodeData } from '../types';
import { CanvasDirection, ElkCanvasLayoutOptions } from './elkLayout';
export interface ElkRoot {
x?: number;
y?: number;
width?: number;
height?: number;
children?: any[];
edges?: any[];
direction?: CanvasDirection;
}
export interface LayoutProps {
maxHeight: number;
maxWidth: number;
nodes: NodeData[];
edges: EdgeData[];
pannable: boolean;
defaultPosition: CanvasPosition;
fit: boolean;
zoom: number;
layoutOptions?: ElkCanvasLayoutOptions;
direction: CanvasDirection;
setZoom: (factor: number) => void;
onLayoutChange: (layout: ElkRoot) => void;
}
export interface LayoutResult {
/**
* X/Y offset.
*/
xy: [number, number];
/**
* Scroll offset.
*/
scrollXY: [number, number];
/**
* ELK Layout object.
*/
layout: ElkRoot;
/**
* Ref to container div.
*/
containerRef: RefObject<HTMLDivElement | null>;
/**
* Height of the svg.
*/
canvasHeight?: number;
/**
* Width of the svg.
*/
canvasWidth?: number;
/**
* Width of the container div.
*/
containerWidth?: number;
/**
* Height of the container div.
*/
containerHeight?: number;
/**
* Positions the canvas to the viewport.
*/
positionCanvas?: (position: CanvasPosition, animated?: boolean) => void;
/**
* Fit the canvas to the viewport.
*/
fitCanvas?: (animated?: boolean) => void;
/**
* Fit a group of nodes to the viewport.
*/
fitNodes?: (nodeIds: string | string[], animated?: boolean) => void;
/**
* Scroll to X/Y
*/
setScrollXY?: (xy: [number, number], animated?: boolean) => void;
observe: (el: HTMLDivElement) => void;
}
export declare const useLayout: ({ maxWidth, maxHeight, nodes, edges, fit, pannable, defaultPosition, direction, layoutOptions, zoom, setZoom, onLayoutChange }: LayoutProps) => LayoutResult;