import { ComputedRef, Ref, UnwrapRef, WatchStopHandle } from 'vue'; import { EdgeLabelStyle, MarkerStyle, StrokeStyle } from '../common/configs'; import { Edge, Edges, LinePosition, Position } from '../common/types'; import { Vector2D } from '../modules/vector2d'; export interface EdgeLayoutPoint { edge: Edge; pointInGroup: number; groupWidth: number; } export interface EdgeGroup { edges: Edges; groupWidth: number; summarize: boolean; } export interface EdgeGroupStates { edgeLayoutPoints: Record; edgeGroups: Record; summarizedEdges: Record; } export interface Line { stroke: StrokeStyle; normalWidth: number; source: MarkerStyle; target: MarkerStyle; } export interface Curve { center: Vector2D; theta: number; circle: { center: Vector2D; radius: number; }; control: Position[]; } export interface Arc { center: Vector2D; radius: [number, number]; isLargeArc: boolean; isClockwise: boolean; } export interface EdgeStateDatum { id: string; line: Ref; label: ComputedRef; selectable: ComputedRef; selected: boolean; hovered: boolean; origin: LinePosition; labelPosition: LinePosition; position: LinePosition; curve?: Curve; loop?: Arc; sourceMarkerId?: string; targetMarkerId?: string; zIndex: ComputedRef; stopWatchHandle: WatchStopHandle; } interface SummarizedEdgeStateDatum { stroke: Ref; } export type EdgeState = UnwrapRef; export type EdgeStates = Record; export type SummarizedEdgeState = UnwrapRef; export type SummarizedEdgeStates = Record; export interface EdgeItem { id: string; summarized: boolean; key: string; zIndex: number; } export interface SummarizedEdgeItem extends EdgeItem { group: EdgeGroup; } export interface SingleEdgeItem extends EdgeItem { edge: Edge; } export type EdgeEntry = SummarizedEdgeItem | SingleEdgeItem; export {};