import { CSSProperties } from 'vue' import { GraphEdge, Edge } from './edge' import { GraphNode, CoordinateExtent, Node } from './node' import { ConnectionLineType, ConnectionMode } from './connection' import { KeyCode, PanOnScrollMode } from './zoom' import { EdgeTypes, NodeTypes } from './components' export type FlowElement = GraphNode | GraphEdge export type FlowElements = FlowElement[] export interface Element { id: string label?: string type?: string data?: Data class?: string style?: CSSProperties hidden?: boolean } export type Elements = (Node | Edge)[] export type NextElements = { nodes: GraphNode[] edges: GraphEdge[] } export type Transform = [number, number, number] export enum Position { Left = 'left', Top = 'top', Right = 'right', Bottom = 'bottom', } export interface XYPosition { x: number y: number } export type XYZPosition = XYPosition & { z: number } export interface Dimensions { width: number height: number } export interface Box extends XYPosition { x2: number y2: number } export interface Rect extends Dimensions, XYPosition {} export type SnapGrid = [number, number] export enum BackgroundVariant { Lines = 'lines', Dots = 'dots', } export interface SelectionRect extends Rect { startX: number startY: number draw: boolean } export type FitViewParams = { padding?: number includeHiddenNodes?: boolean minZoom?: number maxZoom?: number offset?: { x?: number y?: number } transitionDuration?: number nodes?: string[] } export type FlowExportObject = { nodes: GraphNode[] edges: GraphEdge[] position: [number, number] zoom: number } export type FlowTransform = { x: number y: number zoom: number } export type FitViewFunc = (fitViewOptions?: FitViewParams) => void export type ProjectFunc = (position: XYPosition) => XYPosition export type ToObjectFunc = () => FlowExportObject export type FlowInstance = { zoomIn: () => void zoomOut: () => void zoomTo: (zoomLevel: number) => void fitView: FitViewFunc project: ProjectFunc getElements: () => FlowElements getNodes: () => GraphNode[] getEdges: () => GraphEdge[] setTransform: (transform: FlowTransform) => void toObject: ToObjectFunc } export interface FlowProps { modelValue?: any[] nodes?: Node[] edges?: Edge[] elements?: Elements id?: string nodeTypes?: NodeTypes edgeTypes?: EdgeTypes connectionMode?: ConnectionMode connectionLineType?: ConnectionLineType connectionLineStyle?: CSSProperties deleteKeyCode?: KeyCode selectionKeyCode?: KeyCode multiSelectionKeyCode?: KeyCode zoomActivationKeyCode?: KeyCode snapToGrid?: boolean snapGrid?: [number, number] onlyRenderVisibleElements?: boolean edgesUpdatable?: boolean nodesDraggable?: boolean nodesConnectable?: boolean elementsSelectable?: boolean selectNodesOnDrag?: boolean paneMoveable?: boolean minZoom?: number maxZoom?: number defaultZoom?: number defaultPosition?: [number, number] translateExtent?: CoordinateExtent nodeExtent?: CoordinateExtent defaultMarkerColor?: string zoomOnScroll?: boolean zoomOnPinch?: boolean panOnScroll?: boolean panOnScrollSpeed?: number panOnScrollMode?: PanOnScrollMode zoomOnDoubleClick?: boolean preventScrolling?: boolean edgeUpdaterRadius?: number storageKey?: string loading?: string } export type FlowOptions = FlowProps