import { CSSProperties, ToRefs } from 'vue' import { GraphEdge, Edge } from './edge' import { GraphNode, CoordinateExtent, Node } from './node' import { ConnectionLineType, ConnectionMode } from './connection' import { KeyCode, PanOnScrollMode, UseZoomPanHelper } from './zoom' import { Actions, ComputedGetters, State, FlowStore } from './store' import { FlowHooksOn } from './hooks' export type FlowElement = GraphNode | GraphEdge export type FlowElements = FlowElement[] export interface Element { id: string label?: | string | { props?: any component: any } type?: string data?: Data class?: string style?: CSSProperties hidden?: boolean } export type Elements = (Node | Edge)[] 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', None = 'none', } export interface SelectionRect extends Rect { startX: number startY: number draw: boolean } export type FlowExportObject = { nodes: GraphNode[] edges: GraphEdge[] position: [number, number] zoom: number } export type ToObject = () => FlowExportObject export type FlowInstance = { getElements: () => FlowElements getNodes: () => GraphNode[] getEdges: () => GraphEdge[] toObject: ToObject } & UseZoomPanHelper export interface FlowProps { /** @deprecated use nodes / edges instead */ modelValue?: Elements nodes?: Node[] edges?: Edge[] id?: string connectionMode?: ConnectionMode connectionLineType?: ConnectionLineType connectionLineStyle?: CSSProperties deleteKeyCode?: KeyCode selectionKeyCode?: KeyCode multiSelectionKeyCode?: KeyCode zoomActivationKeyCode?: KeyCode snapToGrid?: boolean snapGrid?: SnapGrid onlyRenderVisibleElements?: boolean edgesUpdatable?: boolean nodesDraggable?: boolean nodesConnectable?: boolean elementsSelectable?: boolean selectNodesOnDrag?: boolean paneMovable?: 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 fitViewOnInit?: boolean applyDefault?: boolean } export type FlowOptions = FlowProps export type UseVueFlow = { id: string store: FlowStore } & FlowHooksOn & ToRefs> & ComputedGetters & Actions