import { XYPosition, Position, SnapGrid, Element, XYZPosition, Dimensions } from './flow' import { HandleElement, ValidConnectionFunc } from './components' export type CoordinateExtent = [[number, number], [number, number]] export interface Node extends Element { position: XYPosition targetPosition?: Position sourcePosition?: Position draggable?: boolean selectable?: boolean connectable?: boolean dragHandle?: string snapGrid?: SnapGrid isValidTargetPos?: ValidConnectionFunc isValidSourcePos?: ValidConnectionFunc extent?: 'parent' | CoordinateExtent children?: Node[] dimensions?: Dimensions } export interface GraphNode extends Node { handleBounds: { source?: HandleElement[] target?: HandleElement[] } parentNode?: GraphNode isParent?: boolean computedPosition: XYZPosition selected?: boolean dragging?: boolean dimensions: Dimensions } export interface NodeProps extends GraphNode { id: string type?: string data?: T selected?: boolean connectable?: boolean targetPosition?: Position sourcePosition?: Position dragging?: boolean isValidTargetPos?: ValidConnectionFunc isValidSourcePos?: ValidConnectionFunc handleBounds: { source?: HandleElement[] target?: HandleElement[] } parentNode?: GraphNode isParent?: boolean position: XYZPosition } export type NodeDimensionUpdate = { id: string nodeElement: HTMLDivElement dimensions: Dimensions }