import { Component, CSSProperties, DefineComponent } from 'vue' import { DraggableOptions } from '@braks/revue-draggable' import { XYPosition, ElementId, Position, SnapGrid } from './flow' import { HandleElement } from './components' export interface VFInternals { isDragging?: boolean width: number height: number handleBounds: { source?: HandleElement[] target?: HandleElement[] } } export interface NodeProps { id: ElementId type?: string data?: T selected?: boolean connectable?: boolean xPos?: number yPos?: number targetPosition?: Position sourcePosition?: Position dragging?: boolean } export type NodeComponent = Component | DefineComponent | string export type DefaultNodeTypes = { [key in 'input' | 'output' | 'default']: Component } export type NodeTypes = (keyof DefaultNodeTypes | string)[] export type Draggable = Omit | boolean export interface Node { id: ElementId position: XYPosition type?: NodeTypes[number] class?: string style?: CSSProperties data?: T targetPosition?: Position sourcePosition?: Position isHidden?: boolean draggable?: Draggable selectable?: boolean connectable?: boolean dragHandle?: string snapGrid?: SnapGrid } export interface GraphNode extends Node { __vf: VFInternals } export type SourceTargetNode = { sourceNode: GraphNode targetNode: GraphNode } export type TranslateExtent = [[number, number], [number, number]] export type NodeExtent = TranslateExtent export type NodeDimensionUpdate = { id: ElementId nodeElement: HTMLDivElement forceUpdate?: boolean }