reaflow
Version:
Node-based Visualizations for React
71 lines (70 loc) • 1.78 kB
TypeScript
import { RefObject } from 'react';
import { CanvasDirection, ElkCanvasLayoutOptions } from './elkLayout';
import { EdgeData, NodeData } from '../types';
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;
center: boolean;
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;
/**
* Center the canvas to the viewport.
*/
centerCanvas?: () => void;
/**
* Fit the canvas to the viewport.
*/
fitCanvas?: () => void;
observe: (el: HTMLDivElement) => void;
}
export declare const useLayout: ({ maxWidth, maxHeight, nodes, edges, fit, pannable, center, direction, layoutOptions, zoom, setZoom, onLayoutChange }: LayoutProps) => LayoutResult;