import { CSSProperties } from 'vue' import { XYPosition, Position, SnapGrid, Element, XYZPosition, Dimensions } from './flow' import { HandleElement, ValidConnectionFunc } from './components' export type CoordinateExtent = [[number, number], [number, number]] export type HandleBounds = { source?: HandleElement[] target?: HandleElement[] } 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 { computedPosition: XYZPosition handleBounds: HandleBounds dimensions: Dimensions parentNode?: GraphNode isParent?: boolean selected?: boolean dragging?: boolean } export interface NodeProps { id: string dimensions: Dimensions handleBounds: HandleBounds computedPosition: XYZPosition position: XYPosition draggable?: boolean selectable?: boolean connectable?: boolean label?: | string | { props?: any component: any } class?: string style?: CSSProperties hidden?: boolean type?: string data?: T selected?: boolean targetPosition?: Position sourcePosition?: Position dragging?: boolean isValidTargetPos?: ValidConnectionFunc isValidSourcePos?: ValidConnectionFunc parentNode?: any isParent?: boolean children?: Node[] nodeElement: HTMLDivElement }