{"version":3,"file":"plait-flow.mjs","sources":["../../../packages/flow/src/interfaces/element.ts","../../../packages/flow/src/utils/node/get-node.ts","../../../packages/flow/src/utils/edge/get-edges-by-node.ts","../../../packages/flow/src/interfaces/edge.ts","../../../packages/flow/src/utils/edge/get-elbow-points.ts","../../../packages/flow/src/constants/default.ts","../../../packages/flow/src/constants/edge.ts","../../../packages/flow/src/utils/edge/dragging-edge.ts","../../../packages/flow/src/utils/edge/get-curve-points.ts","../../../packages/flow/src/utils/edge/get-straight-points.ts","../../../packages/flow/src/utils/handle/get-handle-position.ts","../../../packages/flow/src/utils/edge/edge.ts","../../../packages/flow/src/draw/edge.ts","../../../packages/flow/src/constants/handle.ts","../../../packages/flow/src/utils/handle/get-default-handles.ts","../../../packages/flow/src/utils/handle/edge.ts","../../../packages/flow/src/draw/handle.ts","../../../packages/flow/src/generators/edge-generator.ts","../../../packages/flow/src/utils/edge/get-overlap-edges.ts","../../../packages/flow/src/utils/edge/get-label-points.ts","../../../packages/flow/src/utils/edge/text.ts","../../../packages/flow/src/interfaces/flow.ts","../../../packages/flow/src/utils/edge/label-space.ts","../../../packages/flow/src/generators/edge-label-generator.ts","../../../packages/flow/src/utils/edge/edge-render.ts","../../../packages/flow/src/constants/node.ts","../../../packages/flow/src/draw/node.ts","../../../packages/flow/src/generators/node.generator.ts","../../../packages/flow/src/generators/node-active.generator.ts","../../../packages/flow/src/node.component.ts","../../../packages/flow/src/utils/edge/create-edge.ts","../../../packages/flow/src/utils/edge/is-hit-edge.ts","../../../packages/flow/src/utils/edge/get-hit-edge.ts","../../../packages/flow/src/utils/edge/placeholder-edge.ts","../../../packages/flow/src/utils/node/is-hit-node.ts","../../../packages/flow/src/utils/node/get-hit-node.ts","../../../packages/flow/src/utils/handle/node.ts","../../../packages/flow/src/utils/node/render-all-nodes-handle.ts","../../../packages/flow/src/core/edge-ref.ts","../../../packages/flow/src/edge.component.ts","../../../packages/flow/src/interfaces/node.ts","../../../packages/flow/src/utils/handle/hover-handle.ts","../../../packages/flow/src/plugins/with-edge-dnd.ts","../../../packages/flow/src/plugins/with-edge-create.ts","../../../packages/flow/src/plugins/with-handle-blink.ts","../../../packages/flow/src/utils/edge/node-render.ts","../../../packages/flow/src/plugins/with-hovering.ts","../../../packages/flow/src/plugins/with-label-icon.ts","../../../packages/flow/src/plugins/with-flow.ts","../../../packages/flow/src/core/edge-label-icon-base.component.ts","../../../packages/flow/src/public-api.ts","../../../packages/flow/src/plait-flow.ts"],"sourcesContent":["import { Direction, PlaitElement } from '@plait/core';\nimport { Element } from 'slate';\n\nexport enum FlowElementType {\n    node = 'node',\n    edge = 'edge'\n}\n\nexport interface FlowHandle {\n    position: Direction;\n    handleId?: string;\n    offsetX?: number;\n    offsetY?: number;\n}\n\nexport interface FlowElementStyles {\n    stroke?: string;\n    strokeWidth?: number;\n    fill?: string;\n    fillStyle?: string;\n    activeStroke?: string;\n    activeFill?: string;\n    borderRadius?: number;\n    hoverStroke?: string;\n}\n\nexport interface FlowBaseData {\n    text?: Element;\n    icon?: string;\n}\n\nexport interface FlowElement<T extends FlowBaseData = FlowBaseData> extends PlaitElement {\n    id: string;\n    type: FlowElementType;\n    data?: T;\n    undeletable?: boolean;\n    styles?: FlowElementStyles;\n}\n\nexport const isFlowElement = <T extends FlowBaseData>(value: PlaitElement): value is FlowElement<T> => {\n    return [FlowElementType.node, FlowElementType.edge].includes(value.type as FlowElementType);\n};\n\nexport const FlowElement = {\n    isFlowElement\n};\n","import { PlaitBoard } from '@plait/core';\nimport { FlowNode } from '../../interfaces/node';\nimport { FlowElement, FlowElementType } from '../../interfaces/element';\n\nexport function getFlowNodeById(board: PlaitBoard, id: string): FlowNode {\n    let node = board.children.find((item) => item.id === id) as FlowNode;\n    return node;\n}\n\nexport function getFakeFlowNodeById(board: PlaitBoard, id: string, offsetX = 0, offsetY = 0): FlowNode {\n    const node = getFlowNodeById(board, id);\n    const [x, y] = node.points![0];\n    return {\n        ...node,\n        points: [[x + offsetX, y + offsetY]]\n    };\n}\n\nexport function getFlowElementsByType(board: PlaitBoard, type: FlowElementType) {\n    return (board.children as FlowElement[]).filter((item) => item.type === type);\n}\n","import { FlowEdge } from '../../interfaces/edge';\nimport { FlowElementType } from '../../interfaces/element';\nimport { PlaitBoard } from '@plait/core';\nimport { getFlowElementsByType } from '../node/get-node';\n\nexport const getEdgesByNodeId = (board: PlaitBoard, nodeId: string) => {\n    const edges = getFlowElementsByType(board, FlowElementType.edge) as FlowEdge[];\n    return edges.filter((item) => item.target.nodeId === nodeId || item.source?.nodeId === nodeId);\n};\n","import { Direction } from '@plait/core';\nimport { FlowBaseData, FlowElement, FlowElementType, FlowHandle } from './element';\nimport { FlowNode } from './node';\n\nexport type FlowEdgeMarkerType = 'arrow' | 'none';\n\nexport type FlowEdgeHandleType = 'source' | 'target';\n\nexport enum FlowEdgeShape {\n    straight = 'straight',\n    curve = 'curve',\n    elbow = 'elbow'\n}\n\nexport interface FlowEdgeHandleRef extends FlowHandle {\n    node: FlowNode;\n    type?: FlowEdgeHandleType;\n}\n\nexport interface FlowEdgeDragInfo {\n    offsetX: number;\n    offsetY: number;\n    handleType: FlowEdgeHandleType;\n}\n\nexport interface FlowEdgeHandle {\n    nodeId: string;\n    position: Direction;\n    handleId?: string;\n    marker?: FlowEdgeMarkerType;\n}\n\nexport interface FlowEdge<T extends FlowBaseData = FlowBaseData> extends FlowElement<T> {\n    target: FlowEdgeHandle;\n    source?: FlowEdgeHandle;\n    shape?: FlowEdgeShape;\n}\n\nexport function isFlowEdgeElement(value: FlowElement): value is FlowEdge {\n    return value.type === FlowElementType.edge;\n}\n\nexport const hasLabelIcon = (value: FlowEdge) => {\n    return value.data?.icon;\n};\n\nexport const hasLabelText = (value: FlowEdge) => {\n    return value.data?.text;\n};\n\nexport const hasLabel = (value: FlowEdge) => {\n    return value.data?.text;\n};\n\nexport const FlowEdge = {\n    isFlowEdgeElement,\n    hasLabelIcon,\n    hasLabelText,\n    hasLabel\n};\n\nexport enum EdgeStableState {\n    'active' = 'active',\n    'highlight' = 'highlight',\n    '' = ''\n}\n\nexport type EdgeState = EdgeStableState | 'hovering';\n","import {\n    ElbowLineRouteOptions,\n    generateElbowLineRoute,\n    getNextPoint,\n    getPoints,\n    getSourceAndTargetOuterRectangle,\n    isSourceAndTargetIntersect\n} from '@plait/common';\nimport { Direction, Point, RectangleClient } from '@plait/core';\n\nexport function getElbowPoints({\n    sourceRectangle,\n    sourcePoint,\n    sourceDirection = Direction.bottom,\n    targetRectangle,\n    targetPoint,\n    targetDirection = Direction.top,\n    offset = 30\n}: {\n    sourceRectangle: RectangleClient;\n    sourceDirection: Direction;\n    sourcePoint: Point;\n    targetRectangle: RectangleClient;\n    targetDirection: Direction;\n    targetPoint: Point;\n    offset?: number;\n}) {\n    let points: Point[] = [];\n    const { sourceOuterRectangle, targetOuterRectangle } = getSourceAndTargetOuterRectangle(sourceRectangle, targetRectangle);\n    const nextSourcePoint = getNextPoint(sourcePoint, sourceOuterRectangle, sourceDirection);\n    const nextTargetPoint = getNextPoint(targetPoint, targetOuterRectangle, targetDirection);\n\n    const params: ElbowLineRouteOptions = {\n        sourcePoint,\n        nextSourcePoint,\n        sourceRectangle,\n        sourceOuterRectangle,\n        targetPoint,\n        nextTargetPoint,\n        targetRectangle,\n        targetOuterRectangle\n    };\n    const isIntersect = isSourceAndTargetIntersect(params);\n    if (!isIntersect) {\n        points = generateElbowLineRoute(params);\n    } else {\n        points = getPoints(sourcePoint, sourceDirection, targetPoint, targetDirection, offset);\n    }\n    return points;\n}\n","import { Options } from 'roughjs/bin/core';\n\nexport const DEFAULT_STYLES: Options = {\n    fillStyle: 'solid',\n    strokeWidth: 2\n};\n\nexport const PRIMARY_COLOR = '#6698FF';\n\nexport const HOVER_COLOR = '#aaaaaa';\n","import { Options } from 'roughjs/bin/core';\nimport { DEFAULT_STYLES, HOVER_COLOR, PRIMARY_COLOR } from './default';\n\nexport const HIT_THRESHOLD = 10;\n\nexport const EDGE_LABEL_PADDING = 10;\n\nexport const EDGE_LABEL_FONTSIZE = 12;\n\nexport const EDGE_LABEL_ICON_PADDING = 2;\n\nexport const DEFAULT_EDGE_STYLES: Options = {\n    ...DEFAULT_STYLES,\n    stroke: '#ccc',\n    fill: '#fff'\n};\n\nexport const DEFAULT_EDGE_ACTIVE_STYLES: Options = {\n    stroke: PRIMARY_COLOR\n};\n\nexport const DEFAULT_PLACEHOLDER_EDGE_STYLES: Options = {\n    stroke: PRIMARY_COLOR,\n    strokeWidth: 1,\n    strokeLineDash: [5]\n};\n\nexport const DEFAULT_EDGE_HOVER_STYLES: Options = {\n    stroke: HOVER_COLOR\n};\n","import { PlaitBoard } from '@plait/core';\nimport { getFlowElementsByType } from '../node/get-node';\nimport { FlowElement, FlowElementType } from '../../interfaces/element';\nimport { FlowEdge, FlowEdgeDragInfo } from '../../interfaces/edge';\n\nexport const isEdgeDragging = (board: PlaitBoard) => {\n    const edges = getFlowElementsByType(board, FlowElementType.edge) as FlowElement[];\n    return edges.some((item) => FLOW_EDGE_DRAGGING_INFO.get(item));\n};\n\nexport const addEdgeDraggingInfo = (edge: FlowEdge, data: FlowEdgeDragInfo) => {\n    FLOW_EDGE_DRAGGING_INFO.set(edge, data);\n};\n\nexport const deleteEdgeDraggingInfo = (edge: FlowEdge) => {\n    FLOW_EDGE_DRAGGING_INFO.delete(edge);\n};\n\nexport const getEdgeDraggingInfo = (edge: FlowEdge) => {\n    return FLOW_EDGE_DRAGGING_INFO.get(edge);\n};\n\nexport const FLOW_EDGE_DRAGGING_INFO: WeakMap<FlowElement, FlowEdgeDragInfo> = new WeakMap();\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { pointsOnBezierCurves } from 'points-on-curve';\nimport { getDirectionFactor, getPointByVectorComponent } from '@plait/common';\n\nexport function getCurvePoints({\n    sourceDirection = Direction.bottom,\n    sourcePoint,\n    targetDirection = Direction.top,\n    targetPoint\n}: {\n    sourceDirection: Direction;\n    sourcePoint: Point;\n    targetDirection: Direction;\n    targetPoint: Point;\n}) {\n    let curvePoints: Point[] = [sourcePoint];\n    const sumDistance = distanceBetweenPointAndPoint(...sourcePoint, ...targetPoint);\n    const offset = 12 + sumDistance / 3;\n\n    const sourceFactor = getDirectionFactor(sourceDirection!);\n    curvePoints.push(getPointByVectorComponent(sourcePoint, [sourceFactor.x, sourceFactor.y], offset));\n\n    const targetFactor = getDirectionFactor(targetDirection);\n    curvePoints.push(getPointByVectorComponent(targetPoint, [targetFactor.x, targetFactor.y], offset));\n\n    curvePoints.push(targetPoint);\n    return pointsOnBezierCurves(curvePoints) as Point[];\n}\n","import { Point } from '@plait/core';\n\nexport function getStraightPoints({ sourcePoint, targetPoint }: { sourcePoint: Point; targetPoint: Point }) {\n    return [sourcePoint, targetPoint];\n}\n","import { Direction, RectangleClient, XYPosition } from '@plait/core';\nimport { FlowHandle } from '../../interfaces/element';\n\nexport function getHandleXYPosition(position: Direction, nodeRect: RectangleClient, handle: FlowHandle | null = null): XYPosition {\n    const x = (handle?.offsetX || 0) + nodeRect.x;\n    const y = (handle?.offsetY || 0) + nodeRect.y;\n    const width = nodeRect.width;\n    const height = nodeRect.height;\n\n    switch (position) {\n        case Direction.top:\n            return {\n                x: x + width / 2,\n                y\n            };\n        case Direction.right:\n            return {\n                x: x + width,\n                y: y + height / 2\n            };\n        case Direction.bottom:\n            return {\n                x: x + width / 2,\n                y: y + height\n            };\n        case Direction.left:\n            return {\n                x,\n                y: y + height / 2\n            };\n    }\n}\n","import { FlowElementStyles } from '../../interfaces/element';\nimport { Direction, PlaitBoard, PlaitElement, Point, RectangleClient, normalizePoint } from '@plait/core';\nimport { getElbowPoints } from './get-elbow-points';\nimport { getFakeFlowNodeById, getFlowNodeById } from '../node/get-node';\nimport { EdgeStableState, FlowEdge, FlowEdgeShape } from '../../interfaces/edge';\nimport { DEFAULT_EDGE_ACTIVE_STYLES, DEFAULT_EDGE_HOVER_STYLES, DEFAULT_EDGE_STYLES } from '../../constants/edge';\nimport { FlowNode } from '../../interfaces/node';\nimport { getEdgeDraggingInfo } from './dragging-edge';\nimport { EdgeState } from '../../interfaces/edge';\nimport { getCurvePoints } from './get-curve-points';\nimport { getStraightPoints } from './get-straight-points';\nimport { getHandleXYPosition } from '../handle/get-handle-position';\nimport { EdgeElementRef } from '../../core/edge-ref';\n\ninterface GetPointsParams {\n    sourceRectangle: RectangleClient;\n    sourceDirection: Direction;\n    sourcePoint: Point;\n    targetRectangle: RectangleClient;\n    targetDirection: Direction;\n    targetPoint: Point;\n}\n\n// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\nexport function getEdgeCenter({\n    sourceX,\n    sourceY,\n    targetX,\n    targetY\n}: {\n    sourceX: number;\n    sourceY: number;\n    targetX: number;\n    targetY: number;\n}): [number, number, number, number] {\n    const xOffset = Math.abs(targetX - sourceX) / 2;\n    const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n    const yOffset = Math.abs(targetY - sourceY) / 2;\n    const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n    return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getShapePoints(shape: FlowEdgeShape = FlowEdgeShape.elbow, params: GetPointsParams): Point[] {\n    switch (shape) {\n        case FlowEdgeShape.straight: {\n            return getStraightPoints({\n                sourcePoint: params.sourcePoint,\n                targetPoint: params.targetPoint\n            });\n        }\n        case FlowEdgeShape.curve: {\n            return getCurvePoints({\n                sourceDirection: params.sourceDirection,\n                sourcePoint: params.sourcePoint,\n                targetDirection: params.targetDirection,\n                targetPoint: params.targetPoint\n            });\n        }\n        default: {\n            return getElbowPoints(params);\n        }\n    }\n}\n\nexport const buildEdgePathPoints = (board: PlaitBoard, edge: FlowEdge) => {\n    let sourceNode: FlowNode, targetNode: FlowNode;\n    const dragEdgeInfo = FlowEdge.isFlowEdgeElement(edge) && getEdgeDraggingInfo(edge);\n\n    if (dragEdgeInfo && dragEdgeInfo.handleType === 'source') {\n        sourceNode = getFakeFlowNodeById(board, edge.source?.nodeId!, dragEdgeInfo.offsetX, dragEdgeInfo.offsetY);\n    } else {\n        sourceNode = getFlowNodeById(board, edge.source?.nodeId!);\n    }\n\n    if (dragEdgeInfo && dragEdgeInfo.handleType === 'target') {\n        targetNode = getFakeFlowNodeById(board, edge.target?.nodeId!, dragEdgeInfo.offsetX, dragEdgeInfo.offsetY);\n    } else {\n        targetNode = getFlowNodeById(board, edge.target?.nodeId!);\n    }\n\n    if (!sourceNode || !targetNode) {\n        throw new Error(`unable to find sourceNode or targetNode by edge with id ${edge.nodeId}`);\n    }\n\n    let { x: sourceNodeX, y: sourceNodeY } = normalizePoint(sourceNode.points![0]);\n    let { x: targetNodeX, y: targetNodeY } = normalizePoint(targetNode.points![0]);\n    const { width: sourceNodeWidth, height: sourceNodeHeight } = sourceNode;\n    const { width: targetNodeWidth, height: targetNodeHeight } = targetNode;\n\n    const { position: sourceDirection } = edge.source!;\n    const { position: targetDirection } = edge.target;\n\n    const sourceRectangle = {\n        x: sourceNodeX,\n        y: sourceNodeY,\n        width: sourceNodeWidth,\n        height: sourceNodeHeight\n    };\n    const targetRectangle = {\n        x: targetNodeX,\n        y: targetNodeY,\n        width: targetNodeWidth,\n        height: targetNodeHeight\n    };\n    let sourceHandle, targetHandle;\n    if (edge.source?.handleId) {\n        sourceHandle = sourceNode.handles?.find((item) => item.handleId === edge.source?.handleId);\n    }\n    if (edge.target?.handleId) {\n        targetHandle = targetNode.handles?.find((item) => item.handleId === edge.target?.handleId);\n    }\n    const sourcePosition = getHandleXYPosition(sourceDirection, sourceRectangle, sourceHandle);\n    const targetPosition = getHandleXYPosition(targetDirection, targetRectangle, targetHandle);\n    const sourcePoint: Point = [sourcePosition.x, sourcePosition.y];\n    const targetPoint: Point = [targetPosition.x, targetPosition.y];\n\n    const params: GetPointsParams = {\n        sourceRectangle,\n        sourceDirection,\n        sourcePoint,\n        targetRectangle,\n        targetDirection,\n        targetPoint\n    };\n    const points = getShapePoints(edge.shape, params);\n    return points.map((item) => {\n        return {\n            x: item[0],\n            y: item[1]\n        };\n    });\n};\n\nexport const getEdgePoints = (board: PlaitBoard, edge: FlowEdge) => {\n    const edgeRef = PlaitElement.getElementRef<EdgeElementRef>(edge);\n    return edgeRef.getPoints();\n};\n\nexport const getEdgeStyle = (edge: FlowEdge, state: EdgeState = EdgeStableState['']) => {\n    const edgeStyles: FlowElementStyles = {\n        ...DEFAULT_EDGE_STYLES,\n        ...(edge.styles || {}),\n        stroke:\n            state === EdgeStableState.active\n                ? edge.styles?.activeStroke || DEFAULT_EDGE_ACTIVE_STYLES.stroke\n                : state === EdgeStableState.highlight || state === 'hovering'\n                ? edge.styles?.hoverStroke || DEFAULT_EDGE_HOVER_STYLES.stroke\n                : edge.styles?.stroke || DEFAULT_EDGE_STYLES.stroke\n    };\n    return edgeStyles;\n};\n","import { PlaitBoard, drawRoundRectangle, RectangleClient, drawArrow } from '@plait/core';\nimport { getEdgePoints, getEdgeStyle } from '../utils/edge/edge';\nimport { FlowEdge } from '../interfaces/edge';\nimport { EdgeState } from '../interfaces/edge';\nimport { getExtendPoint } from '@plait/common';\n\nexport const drawEdgeRoute = (board: PlaitBoard, edge: FlowEdge, state: EdgeState) => {\n    const roughSVG = PlaitBoard.getRoughSVG(board);\n    const pathPoints = getEdgePoints(board, edge);\n    const edgeStyles = getEdgeStyle(edge, state);\n    return roughSVG.linearPath(\n        pathPoints.map((item) => [item.x, item.y]),\n        edgeStyles\n    );\n};\n\nexport const drawEdgeLabelShape = (board: PlaitBoard, edge: FlowEdge, textBackgroundRect: RectangleClient, state: EdgeState) => {\n    const edgeStyles = getEdgeStyle(edge, state);\n    const { x, y, width, height } = textBackgroundRect;\n    return drawRoundRectangle(PlaitBoard.getRoughSVG(board), x, y, x + width, y + height, edgeStyles, false, Math.min(width, height) / 2);\n};\n\nexport const drawEdgeMarkers = (board: PlaitBoard, edge: FlowEdge, state: EdgeState) => {\n    const roughSVG = PlaitBoard.getRoughSVG(board);\n    const pathPoints = [...getEdgePoints(board, edge)];\n    const edgeStyles = getEdgeStyle(edge, state);\n    const edgeMarkers: SVGGElement[] = [];\n    if (edge.target.marker) {\n        const [start, end] = pathPoints.splice(-2);\n        const startPoint = getExtendPoint([end.x, end.y], [start.x, start.y], 20);\n        const targetMarker = drawArrow(roughSVG, startPoint, [end.x, end.y], edgeStyles);\n        edgeMarkers.push(...targetMarker);\n    }\n    if (edge.source?.marker) {\n        const [end, start] = pathPoints.splice(0, 2);\n        const startPoint = getExtendPoint([end.x, end.y], [start.x, start.y], 20);\n        const sourceMarker = drawArrow(roughSVG, startPoint, [end.x, end.y], edgeStyles);\n        edgeMarkers.push(...sourceMarker);\n    }\n    return edgeMarkers;\n};\n","import { Options } from 'roughjs/bin/core';\nimport { DEFAULT_STYLES, PRIMARY_COLOR } from './default';\nimport { Direction } from '@plait/core';\n\nexport const DEFAULT_POSITIONS = [Direction.top, Direction.right, Direction.bottom, Direction.left];\n\nexport const HANDLE_DIAMETER = 8;\n\nexport const HANDLE_BUFFER = 6;\n\nexport const DEFAULT_HANDLE_STYLES: Options = {\n    ...DEFAULT_STYLES,\n    stroke: PRIMARY_COLOR,\n    fill: '#fff'\n};\n","import { DEFAULT_POSITIONS } from '../../constants/handle';\nimport { FlowHandle } from '../../interfaces/element';\n\nexport const getDefaultHandles: () => FlowHandle[] = () => {\n    return DEFAULT_POSITIONS.map((item) => {\n        return {\n            position: item\n        };\n    });\n};\n","import { PlaitBoard, Point, distanceBetweenPointAndPoint, normalizePoint } from '@plait/core';\nimport { FlowEdge, FlowEdgeHandleRef, FlowEdgeHandleType } from '../../interfaces/edge';\nimport { HANDLE_DIAMETER } from '../../constants/handle';\nimport { getHandleXYPosition } from './get-handle-position';\nimport { getEdgeDraggingInfo } from '../edge/dragging-edge';\nimport { getFakeFlowNodeById, getFlowNodeById } from '../node/get-node';\nimport { FlowNodeHandle } from '../../interfaces/node';\n\nexport const getEdgeHandles = (board: PlaitBoard, edge: FlowEdge) => {\n    const handles: FlowEdgeHandleRef[] = [];\n    let sourceNode, targetNode;\n    const dragEdgeInfo = FlowEdge.isFlowEdgeElement(edge) && getEdgeDraggingInfo(edge);\n    if (edge.source) {\n        if (dragEdgeInfo && dragEdgeInfo.handleType === 'source') {\n            sourceNode = getFakeFlowNodeById(board, edge.source.nodeId, dragEdgeInfo.offsetX, dragEdgeInfo.offsetY);\n        } else {\n            sourceNode = getFlowNodeById(board, edge.source.nodeId);\n        }\n        let sourceHandle: FlowNodeHandle;\n        if (sourceNode.handles && edge.source.handleId) {\n            sourceHandle = sourceNode.handles.find((item) => item.handleId === edge.source!.handleId) as FlowNodeHandle;\n        } else {\n            sourceHandle = {\n                position: edge.source.position\n            };\n        }\n        handles.push({\n            ...sourceHandle,\n            node: sourceNode,\n            type: 'source'\n        });\n    }\n    if (edge.target) {\n        if (dragEdgeInfo && dragEdgeInfo.handleType === 'target') {\n            targetNode = getFakeFlowNodeById(board, edge.target.nodeId, dragEdgeInfo.offsetX, dragEdgeInfo.offsetY);\n        } else {\n            targetNode = getFlowNodeById(board, edge.target.nodeId);\n        }\n        let targetHandle: FlowNodeHandle;\n        if (targetNode.handles && edge.target?.handleId) {\n            targetHandle = targetNode.handles.find((item) => item.handleId === edge.target?.handleId) as FlowNodeHandle;\n        } else {\n            targetHandle = {\n                position: edge.target.position\n            };\n        }\n        handles.push({\n            ...targetHandle,\n            node: targetNode,\n            type: 'target'\n        });\n    }\n    return handles;\n};\n\nexport function isHitEdgeHandle(board: PlaitBoard, edge: FlowEdge, point: Point): boolean {\n    let isHitHandle = false;\n    const handles = getEdgeHandles(board, edge);\n    handles.find((handle) => {\n        const { x, y } = normalizePoint(handle.node.points![0]);\n        const position = getHandleXYPosition(\n            handle.position,\n            {\n                x,\n                y,\n                width: handle.node.width,\n                height: handle.node.height\n            },\n            handle\n        );\n        const distance = distanceBetweenPointAndPoint(position.x, position.y, point[0], point[1]);\n        if (distance < HANDLE_DIAMETER / 2) {\n            isHitHandle = true;\n        }\n    });\n    return isHitHandle;\n}\n\nexport function getHitHandleTypeByEdge(board: PlaitBoard, point: Point, edge: FlowEdge): FlowEdgeHandleType | null {\n    let handleType = null;\n    const handles = getEdgeHandles(board, edge);\n    handles.find((handle) => {\n        const { x, y } = normalizePoint(handle.node.points![0]);\n        const position = getHandleXYPosition(\n            handle.position,\n            {\n                x,\n                y,\n                width: handle.node.width,\n                height: handle.node.height\n            },\n            handle\n        );\n        const distance = distanceBetweenPointAndPoint(position.x, position.y, point[0], point[1]);\n        if (distance < HANDLE_DIAMETER / 2) {\n            handleType = handle.type;\n        }\n    });\n    return handleType;\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { PlaitBoard, normalizePoint } from '@plait/core';\nimport { getDefaultHandles } from '../utils/handle/get-default-handles';\nimport { FlowNode } from '../interfaces/node';\nimport { getHandleXYPosition } from '../utils/handle/get-handle-position';\nimport { FlowEdge } from '../interfaces/edge';\nimport { DEFAULT_HANDLE_STYLES, HANDLE_DIAMETER } from '../constants/handle';\nimport { getEdgeHandles } from '../utils/handle/edge';\n\nexport function drawNodeHandles(board: PlaitBoard, node: FlowNode) {\n    const roughSVG = PlaitBoard.getRoughSVG(board);\n    const handles = node.handles || getDefaultHandles();\n    const { x, y } = normalizePoint(node.points![0]);\n    return handles.map((handle) => {\n        const position = getHandleXYPosition(\n            handle.position,\n            {\n                x,\n                y,\n                width: node.width,\n                height: node.height\n            },\n            handle\n        );\n        return roughSVG.circle(position.x, position.y, HANDLE_DIAMETER, DEFAULT_HANDLE_STYLES);\n    });\n}\n\nexport function drawEdgeHandles(board: PlaitBoard, edge: FlowEdge) {\n    const handles = getEdgeHandles(board, edge);\n    return handles.map((handle) => {\n        let { x, y } = normalizePoint(handle.node.points![0]);\n        const position = getHandleXYPosition(\n            handle.position,\n            {\n                x: x,\n                y: y,\n                width: handle.node.width,\n                height: handle.node.height\n            },\n            handle\n        );\n        return PlaitBoard.getRoughSVG(board).circle(position.x, position.y, HANDLE_DIAMETER, DEFAULT_HANDLE_STYLES);\n    });\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { Generator, GeneratorOptions } from '@plait/common';\nimport { EdgeStableState, EdgeState, FlowEdge } from '../interfaces/edge';\nimport { drawEdgeMarkers, drawEdgeRoute } from '../draw/edge';\nimport { drawEdgeHandles } from '../draw/handle';\n\nexport interface EdgeData {\n    state: EdgeState;\n}\n\nexport class EdgeGenerator extends Generator<FlowEdge, EdgeData, GeneratorOptions, PlaitBoard> {\n    static key = 'edge-generator';\n\n    constructor(board: PlaitBoard) {\n        super(board, { prepend: true });\n    }\n\n    canDraw(element: FlowEdge, data: EdgeData): boolean {\n        return true;\n    }\n\n    draw(element: FlowEdge, data: EdgeData) {\n        const edgeG = createG();\n        const edgeRouteG = drawEdgeRoute(this.board, element, data.state);\n        const edgeMarksG = drawEdgeMarkers(this.board, element, data.state);\n        edgeG.append(edgeRouteG);\n        edgeG.append(...edgeMarksG);\n        if (data.state === EdgeStableState.active) {\n            const handles = drawEdgeHandles(this.board, element);\n            handles.forEach((item) => {\n                item.classList.add('flow-handle');\n                item.setAttribute('stroke-linecap', 'round');\n            });\n            edgeG.append(...handles);\n        }\n        return edgeG;\n    }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { FlowElementType } from '../../interfaces/element';\nimport { FlowEdge } from '../../interfaces/edge';\nimport { getFlowElementsByType } from '../node/get-node';\n\nexport const getOverlapEdges = (board: PlaitBoard, edge: FlowEdge): FlowEdge[] => {\n    const edges = getFlowElementsByType(board, FlowElementType.edge) as FlowEdge[];\n    const sameEdges: FlowEdge[] = [];\n    const overlapEdges: FlowEdge[] = [];\n    edges.forEach((item) => {\n        if (\n            item.source?.nodeId === edge.target?.nodeId &&\n            item.target.nodeId === edge.source?.nodeId &&\n            item.source?.position === edge.target?.position &&\n            item.target?.position === edge.source?.position &&\n            item?.shape === edge?.shape\n        ) {\n            overlapEdges.push(item);\n        } else if (\n            item.target?.nodeId === edge.target?.nodeId &&\n            item.source?.nodeId === edge.source?.nodeId &&\n            item.target?.position === edge.target?.position &&\n            item.source?.position === edge.source?.position &&\n            item?.shape === edge?.shape\n        ) {\n            sameEdges.push(item);\n        }\n    });\n    return [...sameEdges, ...overlapEdges];\n};\n","import { XYPosition } from '@plait/core';\nimport { FlowEdgeShape } from '../../interfaces/edge';\n\nexport function getLabelPoints(\n    shape: FlowEdgeShape = FlowEdgeShape.elbow,\n    pathPoints: XYPosition[],\n    segmentNumber: number = 2\n): XYPosition[] {\n    switch (shape) {\n        case FlowEdgeShape.straight: {\n            return getStraightLabelPoints(pathPoints, segmentNumber);\n        }\n        case FlowEdgeShape.curve: {\n            return getCurveLabelPoints(pathPoints, segmentNumber);\n        }\n        default: {\n            return getElbowLabelPoints(pathPoints, segmentNumber);\n        }\n    }\n}\n\nexport const getStraightLabelPoints = (pathPoints: XYPosition[], segmentNumber: number = 2): XYPosition[] => {\n    const points = [];\n    for (let i = 1; i < segmentNumber; i++) {\n        const t = i / segmentNumber;\n        const x = linearInterpolation(pathPoints[0].x, pathPoints[1].x, t);\n        const y = linearInterpolation(pathPoints[0].y, pathPoints[1].y, t);\n        points.push({ x, y });\n    }\n    return points;\n};\n\nexport const getCurveLabelPoints = (pathPoints: XYPosition[], segmentNumber: number = 2): XYPosition[] => {\n    var bezierPoints = [];\n    for (var i = 1; i < segmentNumber; i++) {\n        let t = i / segmentNumber;\n        var point = curvePoint(t, pathPoints);\n        bezierPoints.push(point);\n    }\n    return bezierPoints;\n};\n\nexport const getElbowLabelPoints = (pathPoints: XYPosition[], segmentNumber: number = 2): XYPosition[] => {\n    const points = [...pathPoints];\n    const segmentDistances = [];\n    let totalLength = 0;\n    for (let i = 1; i < points.length; i++) {\n        const dx = points[i].x - points[i - 1].x;\n        const dy = points[i].y - points[i - 1].y;\n        const length = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n        totalLength += length;\n        segmentDistances.push(length);\n    }\n    const segmentLength = totalLength / segmentNumber;\n    const segmentPoints: XYPosition[] = [];\n    let _currentPoint = points[0];\n    let _currentSegmentNumber = 2;\n    let _remainingLength = segmentLength;\n    let _usedLength = 0;\n    let i = 0;\n\n    while (i < points.length - 1) {\n        const segmentDistance = segmentDistances[i];\n        // 两点间距离包含剩余长度\n        if (segmentDistance - _usedLength >= _remainingLength) {\n            const directionX = points[i + 1].x === _currentPoint.x ? 0 : points[i + 1].x > _currentPoint.x ? 1 : -1;\n            const directionY = points[i + 1].y === _currentPoint.y ? 0 : points[i + 1].y > _currentPoint.y ? 1 : -1;\n            const x = _currentPoint.x + _remainingLength * directionX;\n            const y = _currentPoint.y + _remainingLength * directionY;\n            const segment = { x: x, y: y };\n            segmentPoints.push(segment);\n            _currentSegmentNumber++;\n            if (_currentSegmentNumber > segmentNumber) {\n                break;\n            }\n            _usedLength += Math.sqrt(Math.pow(x - _currentPoint.x, 2) + Math.pow(y - _currentPoint.y, 2));\n            _currentPoint = segment;\n            _remainingLength = segmentLength;\n        } else {\n            _currentPoint = points[i + 1];\n            _remainingLength = _remainingLength - (segmentDistance - _usedLength);\n            _usedLength = 0;\n            i++;\n        }\n    }\n    return segmentPoints;\n};\n\n// 线性插值\nfunction linearInterpolation(start: number, end: number, t: number) {\n    return start + t * (end - start);\n}\n\nfunction curvePoint(t: number, points: XYPosition[]): XYPosition {\n    if (points.length === 1) {\n        return points[0];\n    }\n    var newPoints: XYPosition[] = [];\n    for (var i = 0; i < points.length - 1; i++) {\n        var x = linearInterpolation(points[i].x, points[i + 1].x, t);\n        var y = linearInterpolation(points[i].y, points[i + 1].y, t);\n        newPoints.push({ x, y });\n    }\n    return curvePoint(t, newPoints);\n}\n","import { FlowEdge } from '../../interfaces/edge';\nimport { PlaitBoard, XYPosition } from '@plait/core';\nimport { getEdgePoints } from './edge';\nimport { getOverlapEdges } from './get-overlap-edges';\nimport { getLabelPoints } from './get-label-points';\n\nexport function getEdgeTextXYPosition(board: PlaitBoard, edge: FlowEdge, width: number, height: number): XYPosition {\n    const pathPoints = getEdgePoints(board, edge);\n    const overlapEdges = getOverlapEdges(board, edge);\n    const labelPoints = getLabelPoints(edge.shape, [...pathPoints].reverse(), overlapEdges?.length + 1);\n    const index = overlapEdges.findIndex((value) => value.id === edge.id);\n    const x = labelPoints[index]?.x - width / 2;\n    const y = labelPoints[index]?.y - height / 2;\n    return {\n        x,\n        y\n    };\n}\n","export enum FlowPluginKey {\n    'flowOptions' = 'flowOptions'\n}\n\nexport interface FlowPluginOptions {\n    edgeLabelOptions: EdgeLabelOptions;\n}\n\nexport interface EdgeLabelOptions {\n    height?: number;\n    maxWidth?: number;\n}\n","import { FlowEdge } from '../../interfaces/edge';\nimport { PlaitBoard, PlaitOptionsBoard, RectangleClient } from '@plait/core';\nimport { EDGE_LABEL_FONTSIZE, EDGE_LABEL_ICON_PADDING, EDGE_LABEL_PADDING } from '../../constants/edge';\nimport { getEdgeTextXYPosition } from './text';\nimport { FlowPluginOptions, FlowPluginKey } from '../../interfaces/flow';\nimport { DEFAULT_FONT_FAMILY, measureElement } from '@plait/common';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\n\nfunction getLabelTextRectangle(board: PlaitBoard, edge: FlowEdge): RectangleClient {\n    const { width: labelTextWidth } = measureElement(board, edge.data!.text!, {\n        fontSize: EDGE_LABEL_FONTSIZE,\n        fontFamily: DEFAULT_FONT_FAMILY\n    });\n\n    const { edgeLabelOptions } = (board as PlaitOptionsBoard).getPluginOptions<FlowPluginOptions>(FlowPluginKey.flowOptions);\n    const width = edgeLabelOptions.maxWidth\n        ? labelTextWidth > edgeLabelOptions.maxWidth\n            ? edgeLabelOptions.maxWidth\n            : labelTextWidth\n        : labelTextWidth;\n    const height = edgeLabelOptions.height || TEXT_DEFAULT_HEIGHT;\n\n    const { x, y } = getEdgeTextXYPosition(board, edge, width, height);\n    return {\n        x,\n        y,\n        width,\n        height\n    };\n}\n\nfunction getLabelIconFontSize() {\n    return EDGE_LABEL_FONTSIZE;\n}\n\nfunction getLabelIconWidth() {\n    return EDGE_LABEL_FONTSIZE + EDGE_LABEL_ICON_PADDING;\n}\n\nfunction getLabelIconRectangle(textRect: RectangleClient): RectangleClient {\n    const { x, y, height } = textRect!;\n    return {\n        x: x - getLabelIconWidth() - EDGE_LABEL_ICON_PADDING,\n        y,\n        width: getLabelIconWidth(),\n        height: height\n    };\n}\n\nfunction getLabelRect(textRect: RectangleClient, element: FlowEdge): RectangleClient {\n    let { x, y, width, height } = textRect;\n    x = x - EDGE_LABEL_PADDING;\n    width = width + EDGE_LABEL_PADDING * 2;\n\n    if (FlowEdge.hasLabelIcon(element)) {\n        x = x - getLabelIconWidth();\n        width = width + getLabelIconWidth();\n    }\n\n    return {\n        x,\n        y,\n        width,\n        height\n    };\n}\n\nexport const EdgeLabelSpace = {\n    getLabelTextRectangle,\n    getLabelIconFontSize,\n    getLabelIconRectangle,\n    getLabelRect\n};\n","import { PlaitBoard, createForeignObject, createG, updateForeignObject } from '@plait/core';\nimport { Generator, GeneratorOptions, RenderComponentRef, TextManage } from '@plait/common';\nimport { EdgeState, FlowEdge } from '../interfaces/edge';\nimport { drawEdgeLabelShape } from '../draw/edge';\nimport { EdgeLabelSpace } from '../utils/edge/label-space';\nimport { LabelIconItem } from '../interfaces/icon';\nimport { LabelIconProps, PlaitFlowLabelIconBoard } from '../plugins/with-label-icon';\n\nexport interface EdgeData {\n    state: EdgeState;\n    className?: string;\n}\n\nexport class EdgeLabelGenerator extends Generator<FlowEdge, EdgeData, GeneratorOptions, PlaitBoard> {\n    static key = 'edge-label-generator';\n\n    labelIconRef: { ref: RenderComponentRef<LabelIconProps>; labelIconG: SVGGElement } | null = null;\n\n    labelTextG: SVGGElement | null = null;\n\n    constructor(board: PlaitBoard, public textManage: TextManage) {\n        super(board);\n    }\n\n    canDraw(element: FlowEdge, data: EdgeData): boolean {\n        if (FlowEdge.hasLabel(element)) {\n            return true;\n        }\n        return false;\n    }\n\n    draw(element: FlowEdge, data: EdgeData) {\n        const edgeLabelG = createG();\n        edgeLabelG.classList.add('plait-edge-label');\n        if (data.className) {\n            edgeLabelG.classList.add(data.className);\n        }\n        if (FlowEdge.hasLabel(element)) {\n            const textRectangle = EdgeLabelSpace.getLabelTextRectangle(this.board, element);\n            const labelRectangle = EdgeLabelSpace.getLabelRect(textRectangle, element);\n            const labelShapeG = drawEdgeLabelShape(this.board, element, labelRectangle, data.state);\n            edgeLabelG.append(labelShapeG);\n            if (this.labelIconRef) {\n                this.updateLabelIcon(element);\n                edgeLabelG.append(this.labelIconRef.labelIconG);\n            } else {\n                const labelIconRef = this.drawLabelIcon(element);\n                if (labelIconRef) {\n                    edgeLabelG.append(labelIconRef.labelIconG);\n                    this.labelIconRef = labelIconRef;\n                }\n            }\n            if (this.labelTextG) {\n                this.updateLabelText(element);\n                edgeLabelG.append(this.labelTextG);\n            } else {\n                this.labelTextG = this.drawLabelText(element);\n                if (this.labelTextG) {\n                    edgeLabelG.append(this.labelTextG);\n                }\n            }\n        }\n        return edgeLabelG;\n    }\n\n    drawLabelIcon(element: FlowEdge) {\n        if (FlowEdge.hasLabelIcon(element)) {\n            const labelIconG = createG();\n            const textRectangle = EdgeLabelSpace.getLabelTextRectangle(this.board, element);\n            const labelIconRectangle = EdgeLabelSpace.getLabelIconRectangle(textRectangle);\n            const foreignObject = createForeignObject(\n                labelIconRectangle.x,\n                labelIconRectangle.y,\n                labelIconRectangle.width,\n                labelIconRectangle.height\n            );\n            labelIconG.append(foreignObject);\n            const container = document.createElement('div');\n            container.classList.add('flow-edge-label-icon');\n            foreignObject.append(container);\n            const labelIconItem: LabelIconItem = { name: element.data!.icon! };\n            const props: LabelIconProps = {\n                iconItem: labelIconItem,\n                board: this.board,\n                element: element,\n                fontSize: EdgeLabelSpace.getLabelIconFontSize()\n            };\n            const ref = (this.board as unknown as PlaitFlowLabelIconBoard).renderLabelIcon(container, props);\n            return { ref, labelIconG };\n        }\n        return null;\n    }\n\n    updateLabelIcon(element: FlowEdge) {\n        if (FlowEdge.hasLabelIcon(element) && this.labelIconRef) {\n            const textRectangle = EdgeLabelSpace.getLabelTextRectangle(this.board, element);\n            const labelIconRectangle = EdgeLabelSpace.getLabelIconRectangle(textRectangle);\n            updateForeignObject(\n                this.labelIconRef.labelIconG,\n                labelIconRectangle.width,\n                labelIconRectangle.height,\n                labelIconRectangle.x,\n                labelIconRectangle.y\n            );\n        }\n    }\n\n    drawLabelText(element: FlowEdge) {\n        const text = element.data?.text;\n        if (text) {\n            this.textManage.draw(text);\n            const g = this.textManage.g;\n            g.classList.add('flow-edge-richtext');\n            return g;\n        }\n        return null;\n    }\n\n    updateLabelText(element: FlowEdge) {\n        const text = element.data?.text;\n        if (text) {\n            this.textManage.updateText(text);\n            this.textManage.updateRectangle();\n        }\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.textManage.destroy();\n        this.labelIconRef && this.labelIconRef.ref.destroy();\n    }\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\nimport { getEdgesByNodeId } from './get-edges-by-node';\nimport { EdgeGenerator } from '../../generators/edge-generator';\nimport { EdgeStableState, EdgeState, FlowEdge } from '../../interfaces/edge';\nimport { EdgeElementRef } from '../../core/edge-ref';\nimport { EdgeLabelGenerator } from '../../generators/edge-label-generator';\n\nexport const updateRelatedEdgeHighlight = (board: PlaitBoard, nodeId: string, highlight: boolean) => {\n    const relationEdges = getEdgesByNodeId(board, nodeId);\n    (relationEdges || []).forEach((edge) => {\n        const elementRef = PlaitElement.getElementRef<EdgeElementRef>(edge);\n        const currentState = elementRef.getState();\n        const state = highlight\n            ? EdgeStableState.highlight\n            : currentState === EdgeStableState.active\n            ? EdgeStableState.active\n            : EdgeStableState[''];\n        elementRef.setState(state);\n        renderEdge(board, edge, state);\n    });\n};\n\nexport const renderEdge = (board: PlaitBoard, edge: FlowEdge, state?: EdgeState, labelClassName = '') => {\n    const elementRef = PlaitElement.getElementRef<EdgeElementRef>(edge);\n    const edgeGenerator = elementRef.getGenerator<EdgeGenerator>(EdgeGenerator.key);\n    const edgeLabelGenerator = elementRef.getGenerator<EdgeLabelGenerator>(EdgeLabelGenerator.key);\n    const currentEdgeState = elementRef.getState();\n    if (state === 'hovering' && (currentEdgeState === EdgeStableState.active || currentEdgeState === EdgeStableState.highlight)) {\n        return;\n    }\n    const renderState = state || elementRef.getState();\n    edgeGenerator.processDrawing(edge, getEdgeLayer(board, edge, renderState), { state: renderState });\n    edgeLabelGenerator.processDrawing(edge, PlaitElement.getElementG(edge), { state: renderState, className: labelClassName });\n    if (renderState !== EdgeStableState['']) {\n        const upperHost = PlaitBoard.getElementUpperHost(board);\n        const elementG = PlaitElement.getElementG(edge);\n        upperHost.append(elementG);\n    } else {\n        const elementHost = PlaitBoard.getElementHost(board);\n        const elementG = PlaitElement.getElementG(edge);\n        elementHost.append(elementG);\n    }\n};\n\nexport const renderRelatedEdges = (board: PlaitBoard, nodeId: string, state?: EdgeState) => {\n    const relationEdges = getEdgesByNodeId(board, nodeId);\n    (relationEdges || []).forEach((edge) => {\n        renderEdge(board, edge, state);\n    });\n};\n\nexport const renderEdgeOnDragging = (board: PlaitBoard, edge: FlowEdge) => {\n    const edgeRef = PlaitElement.getElementRef<EdgeElementRef>(edge);\n    edgeRef.buildPathPoints(board, edge);\n    const edgeGenerator = edgeRef.getGenerator<EdgeGenerator>(EdgeGenerator.key);\n    const edgeLabelGenerator = edgeRef.getGenerator<EdgeLabelGenerator>(EdgeLabelGenerator.key);\n    const state = edgeRef.getState();\n    edgeGenerator.processDrawing(edge, getEdgeLayer(board, edge, state), { state });\n    edgeLabelGenerator.processDrawing(edge, PlaitElement.getElementG(edge), { state });\n};\n\nexport const getEdgeLayer = (board: PlaitBoard, edge: FlowEdge, state: EdgeState) => {\n    if (state === EdgeStableState['']) {\n        const lowerHost = PlaitBoard.getElementLowerHost(board);\n        return lowerHost;\n    } else {\n        return PlaitElement.getElementG(edge);\n    }\n};\n","import { Options } from 'roughjs/bin/core';\nimport { DEFAULT_STYLES } from './default';\n\nexport const OUTLINE_BUFFER = 4;\n\nexport const DEFAULT_NODE_STYLES: Options = {\n    ...DEFAULT_STYLES,\n    fill: 'rgb(223, 225, 230)',\n    stroke: 'rgb(193, 199, 208)'\n};\n\nexport const DEFAULT_NODE_ACTIVE_STYLES: Options = {\n    stroke: '#4e8afa',\n    fillStyle: 'solid',\n    strokeWidth: 2,\n    fill: ''\n};\n","import { PlaitBoard, drawRoundRectangle, normalizePoint } from '@plait/core';\nimport { FlowElementStyles } from '../interfaces/element';\nimport { FlowNode } from '../interfaces/node';\nimport { DEFAULT_NODE_ACTIVE_STYLES, DEFAULT_NODE_STYLES, OUTLINE_BUFFER } from '../constants/node';\n\nexport function drawNode(board: PlaitBoard, node: FlowNode, outline = false) {\n    const roughSVG = PlaitBoard.getRoughSVG(board);\n    let nodeStyles: FlowElementStyles = {\n        ...DEFAULT_NODE_STYLES,\n        ...(node.styles || {})\n    };\n    let { x, y } = normalizePoint(node.points![0]);\n    let { width, height } = node;\n    x = x + OUTLINE_BUFFER;\n    y = y + OUTLINE_BUFFER;\n    width = width - OUTLINE_BUFFER * 2;\n    height = height - OUTLINE_BUFFER * 2;\n    const nodeG = drawRoundRectangle(\n        roughSVG,\n        x,\n        y,\n        x + width,\n        y + height,\n        nodeStyles,\n        outline,\n        nodeStyles.borderRadius || Math.min(width, height) / 2\n    );\n    return nodeG;\n}\n\nexport function drawNodeActiveMask(board: PlaitBoard, node: FlowNode) {\n    const roughSVG = PlaitBoard.getRoughSVG(board);\n    let nodeStyles: FlowElementStyles = {\n        ...DEFAULT_NODE_ACTIVE_STYLES,\n        ...(node.styles || {})\n    };\n    let { x, y } = normalizePoint(node.points![0]);\n    let { width, height } = node;\n    nodeStyles = {\n        ...nodeStyles,\n        stroke: node.styles?.activeStroke || DEFAULT_NODE_ACTIVE_STYLES.stroke,\n        // TODO: 这个是否有异议，存在 fill 目前会导致层级盖住文本及 node\n        fill: ''\n    };\n    const nodeG = drawRoundRectangle(\n        roughSVG,\n        x,\n        y,\n        x + width,\n        y + height,\n        nodeStyles,\n        true,\n        nodeStyles.borderRadius || Math.min(width, height) / 2\n    );\n    return nodeG;\n}\n","import { PlaitBoard } from '@plait/core';\nimport { Generator } from '@plait/common';\nimport { FlowNode } from '../interfaces/node';\nimport { drawNode } from '../draw/node';\n\nexport class NodeGenerator extends Generator<FlowNode> {\n    static key = 'node-generator';\n\n    constructor(board: PlaitBoard) {\n        super(board);\n    }\n\n    canDraw(element: FlowNode): boolean {\n        return true;\n    }\n\n    draw(element: FlowNode) {\n        return drawNode(this.board, element);\n    }\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { Generator } from '@plait/common';\nimport { FlowNode } from '../interfaces/node';\nimport { drawNodeActiveMask } from '../draw/node';\nimport { drawNodeHandles } from '../draw/handle';\n\nexport interface NodeActiveData {\n    selected: boolean;\n    hovered: boolean;\n}\n\nexport class NodeActiveGenerator extends Generator<FlowNode, NodeActiveData> {\n    static key = 'node-active-generator';\n\n    constructor(board: PlaitBoard) {\n        super(board);\n    }\n\n    canDraw(element: FlowNode, data: NodeActiveData): boolean {\n        return data.selected || data.hovered;\n    }\n\n    draw(element: FlowNode, data: NodeActiveData) {\n        const activeG = createG();\n        const hasHandle = data.hovered || data.selected;\n        const hasActiveMask = data.selected;\n        if (hasActiveMask) {\n            const activeMaskG = drawNodeActiveMask(this.board, element);\n            activeG.append(activeMaskG);\n        }\n        if (hasHandle) {\n            const handlesG = createG();\n            const handles = drawNodeHandles(this.board, element);\n            handles.forEach((item) => {\n                handlesG.append(item);\n                item.classList.add('flow-handle');\n            });\n            handlesG.setAttribute('stroke-linecap', 'round');\n            activeG.append(handlesG);\n        }\n        return activeG;\n    }\n}\n","import { PlaitPluginElementContext, PlaitBoard, normalizePoint, OnContextChanged, ACTIVE_MOVING_CLASS_NAME } from '@plait/core';\nimport { FlowNode } from './interfaces/node';\nimport { FlowBaseData } from './interfaces/element';\nimport { updateRelatedEdgeHighlight } from './utils/edge/edge-render';\nimport { NodeGenerator } from './generators/node.generator';\nimport { NodeActiveGenerator } from './generators/node-active.generator';\nimport { CommonElementFlavour, TextManage } from '@plait/common';\n\nexport class FlowNodeComponent<T extends FlowBaseData = FlowBaseData>\n    extends CommonElementFlavour<FlowNode<T>>\n    implements OnContextChanged<FlowNode, PlaitBoard>\n{\n    nodeGenerator!: NodeGenerator;\n\n    nodeActiveGenerator!: NodeActiveGenerator;\n\n    textManage!: TextManage;\n\n    constructor() {\n        super();\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.initializeGenerator();\n        this.nodeGenerator.processDrawing(this.element, this.getElementG());\n        this.drawText();\n    }\n\n    initializeGenerator() {\n        this.nodeGenerator = new NodeGenerator(this.board);\n        this.nodeActiveGenerator = new NodeActiveGenerator(this.board);\n        this.textManage = new TextManage(this.board, {\n            getRectangle: () => {\n                const { x, y } = normalizePoint(this.element.points![0]);\n                const width = this.element.width;\n                const height = this.element.height;\n                return { x, y, width, height };\n            },\n            textPlugins: []\n        });\n        this.getRef().addGenerator<NodeActiveGenerator>(NodeActiveGenerator.key, this.nodeActiveGenerator);\n        this.getRef().addGenerator<NodeGenerator>(NodeGenerator.key, this.nodeGenerator);\n        this.getRef().initializeTextManage(this.textManage);\n    }\n\n    onContextChanged(value: PlaitPluginElementContext<FlowNode, PlaitBoard>, previous: PlaitPluginElementContext<FlowNode, PlaitBoard>) {\n        if (this.initialized && (value.element !== previous.element || value.selected !== previous.selected)) {\n            if (value.selected) {\n                this.nodeGenerator.processDrawing(this.element, PlaitBoard.getElementTopHost(this.board));\n                this.nodeGenerator.g!.classList.add(ACTIVE_MOVING_CLASS_NAME);\n            } else {\n                this.nodeGenerator.processDrawing(this.element, this.getElementG());\n            }\n            this.updateText();\n            this.nodeActiveGenerator.destroy();\n            this.nodeActiveGenerator.processDrawing(this.element, PlaitBoard.getElementTopHost(this.board), {\n                selected: value.selected,\n                hovered: false\n            });\n        }\n        // update related edge\n        if (previous.selected !== value.selected) {\n            if (value.selected) {\n                // setTimeout 解决当多个节点关联 edge 有交集时，先执行清空在执行选中操作\n                setTimeout(() => {\n                    updateRelatedEdgeHighlight(this.board, this.element.id, true);\n                }, 0);\n            } else {\n                updateRelatedEdgeHighlight(this.board, this.element.id, false);\n            }\n        }\n    }\n\n    drawText(element: FlowNode = this.element) {\n        const text = this.element.data?.text;\n        if (text) {\n            this.textManage.draw(text);\n            const g = this.textManage.g;\n            g.classList.add('flow-node-richtext');\n            this.getElementG().append(g);\n        }\n    }\n\n    updateText() {\n        const text = this.element.data?.text;\n        if (text) {\n            this.textManage.updateText(text);\n            this.textManage.updateRectangle();\n            if (this.selected) {\n                this.textManage.g.classList.add(ACTIVE_MOVING_CLASS_NAME);\n                PlaitBoard.getElementTopHost(this.board).append(this.textManage.g);\n            } else {\n                this.textManage.g.classList.remove(ACTIVE_MOVING_CLASS_NAME);\n                this.getElementG().append(this.textManage.g);\n            }\n        }\n    }\n\n    destroyText() {\n        this.textManage.destroy();\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.destroyText();\n        this.nodeActiveGenerator.destroy();\n        this.nodeGenerator.destroy();\n    }\n}\n","import { Path, PlaitBoard, Transforms } from '@plait/core';\nimport { FlowEdge } from '../../interfaces/edge';\nimport { FlowBaseData } from '../../interfaces/element';\n\nexport function createFlowEdge<T extends FlowBaseData = FlowBaseData>(board: PlaitBoard, data: T, edge: FlowEdge, path?: Path) {\n    Transforms.insertNode(\n        board,\n        {\n            data,\n            ...edge,\n            point: []\n        },\n        path || [0]\n    );\n}\n\nexport const addCreateEdgeInfo = (board: PlaitBoard, edge: FlowEdge) => {\n    FLOW_CREATE_EDGE_INFO.set(board, edge);\n};\n\nexport const deleteCreateEdgeInfo = (board: PlaitBoard) => {\n    FLOW_CREATE_EDGE_INFO.delete(board);\n};\n\nexport const getCreateEdgeInfo = (board: PlaitBoard) => {\n    return FLOW_CREATE_EDGE_INFO.get(board);\n};\n\nexport const FLOW_CREATE_EDGE_INFO: WeakMap<PlaitBoard, FlowEdge> = new WeakMap();\n","import { Point, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, isSelectedElement } from '@plait/core';\nimport { PlaitBoard } from '@plait/core';\nimport { FlowEdge } from '../../interfaces/edge';\nimport { HIT_THRESHOLD } from '../../constants/edge';\nimport { getEdgePoints } from './edge';\nimport { isHitEdgeHandle } from '../handle/edge';\nimport { EdgeLabelSpace } from './label-space';\nimport { FlowBaseData } from '../../interfaces/element';\n\nexport function isHitEdge(board: PlaitBoard, edge: FlowEdge, point: Point) {\n    const pathPoints = getEdgePoints(board, edge);\n    let minDistance = Number.MAX_VALUE;\n    if (board.selection) {\n        pathPoints.map((path, index) => {\n            if (index < pathPoints.length - 1) {\n                const nextPath = pathPoints[index + 1];\n                if (!(nextPath.x === path.x && nextPath.y === path.y)) {\n                    let distance = distanceBetweenPointAndSegment(point[0], point[1], path.x, path.y, nextPath.x, nextPath.y);\n                    if (distance < minDistance) {\n                        minDistance = distance;\n                    }\n                }\n            }\n        });\n\n        const hitFlowEdgeText = (edge.data?.text?.children[0] as FlowBaseData)?.text && isHitEdgeText(board, edge, point);\n        const hitEdgeHandle = isHitEdgeHandle(board, edge, point);\n        const isActiveEdge = isSelectedElement(board, edge);\n        let hitFlowEdge = minDistance < HIT_THRESHOLD;\n        if (!isActiveEdge && hitEdgeHandle) {\n            hitFlowEdge = false;\n        }\n        return hitFlowEdge || !!hitFlowEdgeText;\n    }\n    return false;\n}\n\nexport function isHitEdgeText(board: PlaitBoard, edge: FlowEdge, point: Point) {\n    const textRect = EdgeLabelSpace.getLabelTextRectangle(board, edge);\n    const labelRect = EdgeLabelSpace.getLabelRect(textRect, edge);\n    const distance = distanceBetweenPointAndRectangle(point[0], point[1], labelRect);\n    return distance === 0;\n}\n","import { PlaitBoard, Point } from '@plait/core';\nimport { FlowElementType } from '../../interfaces/element';\nimport { getFlowElementsByType } from '../node/get-node';\nimport { isHitEdge } from './is-hit-edge';\nimport { FlowEdge } from '../../interfaces/edge';\n\nexport function getHitEdge(board: PlaitBoard, point: Point): FlowEdge | null {\n    let flowEdge: FlowEdge | null = null;\n    const flowEdges = getFlowElementsByType(board, FlowElementType.edge) as FlowEdge[];\n    flowEdges.reverse().map((value, index) => {\n        if (!flowEdge && isHitEdge(board, value, point)) {\n            flowEdge = value;\n        }\n    });\n    return flowEdge;\n}\n","import { PlaitBoard } from '@plait/core';\n\nexport const addPlaceholderEdgeInfo = (board: PlaitBoard, placeholder: SVGElement) => {\n    FLOW_PLACEHOLDER_EDGE_INFO.set(board, placeholder);\n};\n\nexport const deletePlaceholderEdgeInfo = (board: PlaitBoard) => {\n    FLOW_PLACEHOLDER_EDGE_INFO.delete(board);\n};\n\nexport const isPlaceholderEdgeInfo = (board: PlaitBoard) => {\n    return FLOW_PLACEHOLDER_EDGE_INFO.get(board);\n};\n\nexport const FLOW_PLACEHOLDER_EDGE_INFO: WeakMap<PlaitBoard, SVGElement> = new WeakMap();\n","import { PlaitBoard, Point, RectangleClient, isSelectedElement, normalizePoint } from '@plait/core';\nimport { FlowNode } from '../../interfaces/node';\nimport { OUTLINE_BUFFER } from '../../constants/node';\nimport { getHitHandleByNode } from '../handle/node';\n\nexport function isHitNode(board: PlaitBoard, node: FlowNode, point: [Point, Point]) {\n    const { x, y } = normalizePoint(node.points![0]);\n    const isSelected = isSelectedElement(board, node);\n    const isHitNodeHandle = !!getHitHandleByNode(node, point[0]);\n    let hitFlowNode = RectangleClient.isHit(RectangleClient.getRectangleByPoints(point), {\n        x: isSelected ? x : x + OUTLINE_BUFFER,\n        y: isSelected ? y : y + OUTLINE_BUFFER,\n        width: isSelected ? node.width : node.width - OUTLINE_BUFFER * 2,\n        height: isSelected ? node.height : node.height - OUTLINE_BUFFER * 2\n    });\n    if (hitFlowNode || (isSelected && isHitNodeHandle)) {\n        return true;\n    }\n    return false;\n}\n","import { PlaitBoard, Point } from '@plait/core';\nimport { getFlowElementsByType } from './get-node';\nimport { FlowElementType } from '../../interfaces/element';\nimport { FlowNode } from '../../interfaces/node';\nimport { isHitNode } from './is-hit-node';\n\nexport function getHitNode(board: PlaitBoard, point: Point): FlowNode | null {\n    let flowNode: FlowNode | null = null;\n    const flowNodes = getFlowElementsByType(board, FlowElementType.node) as FlowNode[];\n    flowNodes.reverse().map((value, index) => {\n        if (!flowNode && isHitNode(board, value, [point, point])) {\n            flowNode = value;\n        }\n    });\n    return flowNode;\n}\n","import { PlaitBoard, Point, distanceBetweenPointAndPoint, normalizePoint } from '@plait/core';\nimport { getDefaultHandles } from './get-default-handles';\nimport { FlowNode } from '../../interfaces/node';\nimport { getHandleXYPosition } from './get-handle-position';\nimport { HANDLE_BUFFER, HANDLE_DIAMETER } from '../../constants/handle';\nimport { FlowEdgeHandleRef } from '../../interfaces/edge';\nimport { getFlowElementsByType } from '../node/get-node';\nimport { FlowElementType } from '../../interfaces/element';\nimport { getHitNode } from '../node/get-hit-node';\n\nexport interface HitNodeHandle extends FlowEdgeHandleRef {\n    handlePoint: Point;\n}\n\nexport function getHitNodeHandle(board: PlaitBoard, point: Point): HitNodeHandle | null {\n    let nodeHandle: HitNodeHandle | null = null;\n    const hitNode = getHitNode(board, point);\n    if (hitNode) {\n        nodeHandle = getHitHandleByNode(hitNode, point);\n    }\n    if (!nodeHandle) {\n        const flowNodeElements = getFlowElementsByType(board, FlowElementType.node) as FlowNode[];\n        flowNodeElements.map((item) => {\n            const handles = item.handles || getDefaultHandles();\n            handles.filter((handle) => {\n                const { x, y } = normalizePoint(item.points![0]);\n                let { x: handleX, y: handleY } = getHandleXYPosition(\n                    handle.position,\n                    {\n                        x,\n                        y,\n                        width: item.width,\n                        height: item.height\n                    },\n                    handle\n                );\n                const distance = distanceBetweenPointAndPoint(handleX, handleY, point[0], point[1]);\n                if (distance < HANDLE_DIAMETER / 2 + HANDLE_BUFFER) {\n                    nodeHandle = {\n                        ...handle,\n                        handlePoint: [handleX, handleY],\n                        node: item\n                    };\n                }\n            });\n        });\n    }\n    return nodeHandle;\n}\n\nexport function getHitHandleByNode(node: FlowNode, point: Point): HitNodeHandle | null {\n    const handles = node.handles || getDefaultHandles();\n    let hitHandle: HitNodeHandle | null = null;\n    const { x, y } = normalizePoint(node.points![0]);\n    handles.find((handle) => {\n        const position = getHandleXYPosition(\n            handle.position,\n            {\n                x,\n                y,\n                width: node.width,\n                height: node.height\n            },\n            handle\n        );\n        const distance = distanceBetweenPointAndPoint(position.x, position.y, point[0], point[1]);\n        if (distance < HANDLE_DIAMETER / 2) {\n            hitHandle = {\n                ...handle,\n                node: node,\n                handlePoint: [position.x, position.y]\n            };\n        }\n    });\n    return hitHandle;\n}\n","import { FlowElementType } from '../../interfaces/element';\nimport { FlowNode } from '../../interfaces/node';\nimport { PlaitBoard, PlaitElement, isSelectedElement } from '@plait/core';\nimport { getFlowElementsByType } from './get-node';\nimport { PlaitCommonElementRef } from '@plait/common';\nimport { NodeActiveGenerator } from '../../generators/node-active.generator';\n\nexport function drawAllNodesHandle(board: PlaitBoard) {\n    const flowNodeElements = getFlowElementsByType(board, FlowElementType.node) as FlowNode[];\n    flowNodeElements.map((item) => {\n        const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(item);\n        const activeGenerator = elementRef.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n        const selected = isSelectedElement(board, item);\n        activeGenerator.processDrawing(item, PlaitBoard.getElementTopHost(board), { hovered: true, selected });\n    });\n    return flowNodeElements;\n}\n\nexport function destroyAllNodesHandle(board: PlaitBoard, flowNodeElements: FlowNode[]) {\n    flowNodeElements.map((item) => {\n        const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(item);\n        const selected = isSelectedElement(board, item);\n        const handleGenerator = elementRef.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n        if (!selected) {\n            handleGenerator.destroy();\n        }\n    });\n}\n","import { PlaitCommonElementRef } from '@plait/common';\nimport { PlaitBoard, XYPosition } from '@plait/core';\nimport { EdgeStableState, FlowEdge } from '../interfaces/edge';\nimport { buildEdgePathPoints } from '../utils/edge/edge';\n\nexport class EdgeElementRef extends PlaitCommonElementRef {\n    private pathPoints: XYPosition[] = [];\n\n    private state: EdgeStableState = EdgeStableState[''];\n\n    buildPathPoints(board: PlaitBoard & PlaitBoard, element: FlowEdge) {\n        this.pathPoints = buildEdgePathPoints(board, element);\n    }\n\n    getPoints() {\n        return [...this.pathPoints];\n    }\n\n    setState(state: EdgeStableState) {\n        this.state = state;\n    }\n\n    getState() {\n        return this.state;\n    }\n}\n","import { PlaitPluginElementContext, getElementById, isMovingElements } from '@plait/core';\nimport { PlaitBoard, OnContextChanged } from '@plait/core';\nimport { EdgeStableState, FlowEdge } from './interfaces/edge';\nimport { FlowBaseData } from './interfaces/element';\nimport { EdgeLabelSpace, renderEdge } from './utils';\nimport { FlowNode } from './interfaces/node';\nimport { EdgeGenerator } from './generators/edge-generator';\nimport { CommonElementFlavour, TextManage } from '@plait/common';\nimport { EdgeElementRef } from './core/edge-ref';\nimport { EdgeLabelGenerator } from './generators/edge-label-generator';\n\ninterface BoundedElements {\n    source?: FlowNode;\n    target?: FlowNode;\n}\n\nexport class FlowEdgeComponent<T extends FlowBaseData = FlowBaseData>\n    extends CommonElementFlavour<FlowEdge<T>, PlaitBoard, EdgeElementRef>\n    implements OnContextChanged<FlowEdge, PlaitBoard>\n{\n    edgeGenerator!: EdgeGenerator;\n\n    edgeLabelGenerator!: EdgeLabelGenerator;\n\n    boundedElements!: BoundedElements;\n\n    constructor() {\n        const edgeElementRef = new EdgeElementRef();\n        super(edgeElementRef);\n    }\n\n    initializeGenerator() {\n        const textManage = new TextManage(this.board, {\n            getRectangle: () => {\n                return EdgeLabelSpace.getLabelTextRectangle(this.board, this.element);\n            },\n            textPlugins: []\n        });\n        this.edgeGenerator = new EdgeGenerator(this.board);\n        this.edgeLabelGenerator = new EdgeLabelGenerator(this.board, textManage);\n        this.getRef().addGenerator<EdgeGenerator>(EdgeGenerator.key, this.edgeGenerator);\n        this.getRef().addGenerator<EdgeLabelGenerator>(EdgeLabelGenerator.key, this.edgeLabelGenerator);\n    }\n\n    initialize(): void {\n        super.initialize();\n        this.getRef().setState(this.context.selected ? EdgeStableState.active : EdgeStableState['']);\n        this.initializeGenerator();\n        this.getRef().buildPathPoints(this.board, this.element);\n        renderEdge(this.board, this.element, this.getRef().getState());\n        this.boundedElements = this.getBoundedElements();\n    }\n\n    onContextChanged(value: PlaitPluginElementContext<FlowEdge, PlaitBoard>, previous: PlaitPluginElementContext<FlowEdge, PlaitBoard>) {\n        const boundedElements = this.getBoundedElements();\n        const isBoundedElementsChanged =\n            boundedElements?.source !== this.boundedElements?.source || boundedElements?.target !== this.boundedElements?.target;\n        this.boundedElements = boundedElements;\n        if (value.element !== previous.element || isBoundedElementsChanged) {\n            this.getRef().buildPathPoints(this.board, this.element);\n        }\n        if (this.initialized && (value.element !== previous.element || value.selected !== previous.selected || isBoundedElementsChanged)) {\n            const currentState = this.getRef().getState();\n            this.getRef().setState(\n                value.selected\n                    ? EdgeStableState.active\n                    : currentState === EdgeStableState.highlight\n                    ? EdgeStableState.highlight\n                    : EdgeStableState['']\n            );\n            const isMovingEdge = isMovingElements(this.board) && isBoundedElementsChanged;\n            renderEdge(this.board, this.element, this.getRef().getState(), isMovingEdge ? 'edge-label-with-moving' : '');\n        }\n    }\n\n    getBoundedElements() {\n        let boundedElements: BoundedElements = {};\n        if (this.element.source?.nodeId) {\n            const boundElement = getElementById<FlowNode>(this.board, this.element.source.nodeId);\n            if (boundElement) {\n                boundedElements.source = boundElement;\n            }\n        }\n        if (this.element.target?.nodeId) {\n            const boundElement = getElementById<FlowNode>(this.board, this.element.target.nodeId);\n            if (boundElement) {\n                boundedElements.target = boundElement;\n            }\n        }\n        return boundedElements;\n    }\n\n    destroy(): void {\n        super.destroy();\n        this.edgeGenerator.destroy();\n        this.edgeLabelGenerator.destroy();\n    }\n}\n","import { FlowBaseData, FlowElement, FlowElementType, FlowHandle } from './element';\n\nexport interface FlowNodeHandle extends FlowHandle {}\n\nexport interface FlowNode<T extends FlowBaseData = FlowBaseData> extends FlowElement<T> {\n    width: number;\n    height: number;\n    handles?: FlowNodeHandle[];\n}\n\nexport const isFlowNodeElement = <T extends FlowBaseData>(value: FlowElement): value is FlowNode<T> => {\n    return FlowElementType.node === value.type;\n};\n\nexport const FlowNode = {\n    isFlowNodeElement\n};\n\nexport enum NodeState {\n    'hovering' = 'hovering',\n    '' = ''\n}\n","import { PlaitBoard } from '@plait/core';\nimport { HitNodeHandle } from './node';\n\nexport const addHoverHandleInfo = (board: PlaitBoard, handle: HitNodeHandle | null) => {\n    FLOW_HOVER_HANDLE_INFO.set(board, handle);\n};\n\nexport const deleteHoverHandleInfo = (board: PlaitBoard) => {\n    FLOW_HOVER_HANDLE_INFO.delete(board);\n};\n\nexport const getHoverHandleInfo = (board: PlaitBoard) => {\n    return FLOW_HOVER_HANDLE_INFO.get(board);\n};\n\nexport const FLOW_HOVER_HANDLE_INFO: WeakMap<PlaitBoard, HitNodeHandle | null> = new WeakMap();\n","import {\n    PlaitBoard,\n    PlaitElement,\n    PlaitPlugin,\n    Point,\n    Transforms,\n    getSelectedElements,\n    throttleRAF,\n    toHostPoint,\n    toViewBoxPoint\n} from '@plait/core';\nimport { FlowEdge, FlowEdgeHandleType } from '../interfaces/edge';\nimport { FlowNode } from '../interfaces/node';\nimport { deleteEdgeDraggingInfo, addEdgeDraggingInfo } from '../utils/edge/dragging-edge';\nimport { destroyAllNodesHandle, drawAllNodesHandle } from '../utils/node/render-all-nodes-handle';\nimport { HitNodeHandle } from '../utils/handle/node';\nimport { getHitHandleTypeByEdge } from '../utils/handle/edge';\nimport { getHoverHandleInfo } from '../utils/handle/hover-handle';\nimport { FlowElement } from '../interfaces/element';\nimport { EdgeElementRef } from '../core/edge-ref';\nimport { EdgeGenerator } from '../generators/edge-generator';\nimport { renderEdgeOnDragging } from '../utils/edge/edge-render';\n\nexport const withFlowEdgeDnd: PlaitPlugin = (board: PlaitBoard) => {\n    const { pointerDown, pointerMove, globalPointerUp } = board;\n\n    let activeElement: FlowEdge | null;\n    let startPoint: Point | null;\n    let handleType: FlowEdgeHandleType | null;\n    let offsetX: number = 0;\n    let offsetY: number = 0;\n    let flowNodeElements: FlowNode[] = [];\n    let hitNodeHandle: HitNodeHandle | null = null;\n    let drawNodeHandles = true;\n\n    board.pointerDown = (event: PointerEvent) => {\n        if (board.options.readonly || PlaitBoard.hasBeenTextEditing(board) || event.button === 2) {\n            pointerDown(event);\n            return;\n        }\n        const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const selectElements = getSelectedElements(board);\n        if (selectElements.length && FlowEdge.isFlowEdgeElement(selectElements[0] as FlowElement)) {\n            activeElement = selectElements[0] as FlowEdge;\n            handleType = getHitHandleTypeByEdge(board, point, activeElement);\n            if (handleType) {\n                startPoint = point;\n                return;\n            }\n        }\n        pointerDown(event);\n    };\n\n    board.pointerMove = (event: PointerEvent) => {\n        if (!board.options.readonly && startPoint && handleType) {\n            const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            offsetX = endPoint[0] - startPoint[0];\n            offsetY = endPoint[1] - startPoint[1];\n            event.preventDefault();\n            if (activeElement) {\n                throttleRAF(board, 'with-flow-edge-dnd', () => {\n                    if (!activeElement) {\n                        return;\n                    }\n                    addEdgeDraggingInfo(activeElement!, {\n                        offsetX,\n                        offsetY,\n                        handleType: handleType!\n                    });\n                    renderEdgeOnDragging(board, activeElement);\n                    hitNodeHandle = getHoverHandleInfo(board) as HitNodeHandle;\n                    if (drawNodeHandles) {\n                        drawNodeHandles = false;\n                        // 所有的 node 节点显示 handle\n                        flowNodeElements = drawAllNodesHandle(board);\n                    }\n                });\n            }\n        }\n        pointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        if (!board.options.readonly && handleType && activeElement) {\n            const activePath = PlaitBoard.findPath(board, activeElement);\n            deleteEdgeDraggingInfo(activeElement);\n            if (hitNodeHandle) {\n                const { position, handleId, offsetX: handleOffsetX, offsetY: handleOffsetY, node } = hitNodeHandle;\n                Transforms.setNode(\n                    board,\n                    {\n                        [handleType]: {\n                            ...activeElement[handleType],\n                            nodeId: node.id,\n                            position,\n                            handleId,\n                            offsetX: handleOffsetX,\n                            offsetY: handleOffsetY\n                        }\n                    },\n                    activePath\n                );\n            } else {\n                const edgeRef = PlaitElement.getElementRef<EdgeElementRef>(activeElement);\n                const edgeGenerator = edgeRef.getGenerator<EdgeGenerator>(EdgeGenerator.key);\n                edgeGenerator.processDrawing(activeElement, PlaitElement.getElementG(activeElement), { state: edgeRef.getState() });\n            }\n            destroyAllNodesHandle(board, flowNodeElements);\n        }\n        activeElement = null;\n        startPoint = null;\n        handleType = null;\n        offsetX = 0;\n        offsetY = 0;\n        flowNodeElements = [];\n        drawNodeHandles = true;\n        globalPointerUp(event);\n    };\n    return board;\n};\n","import { PlaitBoard, PlaitPlugin, drawLine, idCreator, throttleRAF, drawCircle, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { FlowNode } from '../interfaces/node';\nimport { FlowElementType } from '../interfaces/element';\nimport { isEdgeDragging } from '../utils/edge/dragging-edge';\nimport { destroyAllNodesHandle, drawAllNodesHandle } from '../utils/node/render-all-nodes-handle';\nimport { addCreateEdgeInfo, deleteCreateEdgeInfo } from '../utils/edge/create-edge';\nimport { DEFAULT_PLACEHOLDER_EDGE_STYLES } from '../constants/edge';\nimport { getHitHandleByNode, HitNodeHandle } from '../utils/handle/node';\nimport { getHitNode } from '../utils/node/get-hit-node';\nimport { DEFAULT_HANDLE_STYLES, HANDLE_DIAMETER } from '../constants/handle';\nimport { getHoverHandleInfo } from '../utils/handle/hover-handle';\nimport { addPlaceholderEdgeInfo, deletePlaceholderEdgeInfo } from '../utils/edge/placeholder-edge';\n\nexport const withEdgeCreate: PlaitPlugin = (board: PlaitBoard) => {\n    const { pointerDown, globalPointerMove, globalPointerUp } = board;\n\n    let sourceFlowNodeHandle: HitNodeHandle | null = null;\n    let targetFlowNodeHandle: HitNodeHandle | null = null;\n    let placeholderEdge: SVGElement;\n    let flowNodeElements: FlowNode[] = [];\n    let drawNodeHandles = true;\n    let hoveredNode: FlowNode | null;\n\n    board.pointerDown = (event) => {\n        const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        if (hoveredNode) {\n            sourceFlowNodeHandle = getHitHandleByNode(hoveredNode, point);\n            if (sourceFlowNodeHandle) {\n                return;\n            }\n        }\n        pointerDown(event);\n    };\n\n    board.globalPointerMove = (event: PointerEvent) => {\n        if (!board.options.readonly) {\n            if (sourceFlowNodeHandle) {\n                event.preventDefault();\n                const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n                placeholderEdge?.remove();\n                throttleRAF(board, 'with-common-edge-create', () => {\n                    if (sourceFlowNodeHandle) {\n                        placeholderEdge = drawLine(\n                            PlaitBoard.getRoughSVG(board),\n                            sourceFlowNodeHandle.handlePoint,\n                            point,\n                            DEFAULT_PLACEHOLDER_EDGE_STYLES\n                        );\n                        const circleElement = drawCircle(PlaitBoard.getRoughSVG(board), point, HANDLE_DIAMETER, DEFAULT_HANDLE_STYLES);\n                        circleElement?.setAttribute('stroke-linecap', 'round');\n                        placeholderEdge.append(circleElement);\n                        addPlaceholderEdgeInfo(board, placeholderEdge);\n                    }\n                    PlaitBoard.getHost(board).append(placeholderEdge);\n                    if (drawNodeHandles) {\n                        drawNodeHandles = false;\n                        flowNodeElements = drawAllNodesHandle(board);\n                    }\n                    if (placeholderEdge) {\n                        targetFlowNodeHandle = null;\n                        targetFlowNodeHandle = getHoverHandleInfo(board) as HitNodeHandle;\n                        if (\n                            targetFlowNodeHandle &&\n                            sourceFlowNodeHandle &&\n                            targetFlowNodeHandle.handlePoint?.toString() !== sourceFlowNodeHandle.handlePoint.toString()\n                        ) {\n                            addCreateEdgeInfo(board, {\n                                id: idCreator(),\n                                type: FlowElementType.edge,\n                                source: {\n                                    nodeId: sourceFlowNodeHandle!.node.id,\n                                    position: sourceFlowNodeHandle!.position\n                                },\n                                target: {\n                                    nodeId: targetFlowNodeHandle.node.id,\n                                    position: targetFlowNodeHandle.position,\n                                    marker: 'arrow'\n                                }\n                            });\n                        }\n                    }\n                });\n                return;\n            } else {\n                if (isEdgeDragging(board)) {\n                    return;\n                }\n                // 鼠标移入 flowNode 展示 handles\n                const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n                const newHitNode = getHitNode(board, point);\n                if (hoveredNode) {\n                    const isHitHoveredNodeHandle = !!getHitHandleByNode(hoveredNode, point);\n                    if (newHitNode == hoveredNode || isHitHoveredNodeHandle) {\n                        return;\n                    }\n                }\n                hoveredNode = newHitNode;\n            }\n        }\n        globalPointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        globalPointerUp(event);\n        if (placeholderEdge) {\n            sourceFlowNodeHandle = null;\n            targetFlowNodeHandle = null;\n            placeholderEdge?.remove();\n            deletePlaceholderEdgeInfo(board);\n            deleteCreateEdgeInfo(board);\n            drawNodeHandles = true;\n            destroyAllNodesHandle(board, flowNodeElements);\n            flowNodeElements = [];\n            hoveredNode = null;\n        }\n    };\n\n    return board;\n};\n","import { PlaitBoard, PlaitPlugin, PlaitElement, drawCircle, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { HitNodeHandle, getHitNodeHandle } from '../utils/handle/node';\nimport { addHoverHandleInfo, deleteHoverHandleInfo } from '../utils/handle/hover-handle';\nimport { DEFAULT_HANDLE_STYLES, HANDLE_BUFFER, HANDLE_DIAMETER } from '../constants/handle';\nimport { isEdgeDragging } from '../utils/edge/dragging-edge';\nimport { deleteCreateEdgeInfo, getCreateEdgeInfo } from '../utils/edge/create-edge';\n\nexport const withHandleBlink: PlaitPlugin = (board: PlaitBoard) => {\n    const { globalPointerMove, globalPointerUp } = board;\n\n    let previousHoveredHandle: HitNodeHandle | null = null;\n    let hoveredHandle: HitNodeHandle | null;\n    let activeHandleElement: SVGGElement;\n\n    board.globalPointerMove = (event: PointerEvent) => {\n        if (!board.options.readonly) {\n            const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n            hoveredHandle = getHitNodeHandle(board, point);\n            addHoverHandleInfo(board, hoveredHandle);\n            if (isEdgeDragging(board) || getCreateEdgeInfo(board)) {\n                if (hoveredHandle && previousHoveredHandle?.handlePoint.toString() !== hoveredHandle.handlePoint.toString()) {\n                    previousHoveredHandle = hoveredHandle;\n                    activeHandleElement?.remove();\n                    activeHandleElement = drawCircle(\n                        PlaitBoard.getRoughSVG(board),\n                        hoveredHandle.handlePoint,\n                        HANDLE_DIAMETER + HANDLE_BUFFER,\n                        {\n                            ...DEFAULT_HANDLE_STYLES,\n                            stroke: 'rgba(102, 152, 255, 0.3)',\n                            strokeWidth: HANDLE_BUFFER\n                        }\n                    );\n                    activeHandleElement?.setAttribute('stroke-linecap', 'round');\n                    PlaitElement.getElementG(hoveredHandle.node).append(activeHandleElement);\n                }\n                if (previousHoveredHandle && !hoveredHandle) {\n                    activeHandleElement?.remove();\n                    previousHoveredHandle = null;\n                    deleteCreateEdgeInfo(board);\n                }\n            }\n        }\n        globalPointerMove(event);\n    };\n\n    board.globalPointerUp = (event: PointerEvent) => {\n        globalPointerUp(event);\n        deleteHoverHandleInfo(board);\n        if (hoveredHandle) {\n            previousHoveredHandle = null;\n            hoveredHandle = null;\n            activeHandleElement?.remove();\n        }\n    };\n\n    return board;\n};\n","import { PlaitBoard, PlaitElement, isSelectedElement } from '@plait/core';\nimport { NodeState } from '../../interfaces/node';\nimport { PlaitCommonElementRef, getFirstTextManage } from '@plait/common';\nimport { NodeActiveGenerator } from '../../generators/node-active.generator';\nimport { NodeGenerator } from '../../generators/node.generator';\nimport { getFlowNodeById } from '../node/get-node';\n\nexport const renderNode = (board: PlaitBoard, nodeId: string, state?: NodeState) => {\n    const node = getFlowNodeById(board, nodeId);\n    const selected = isSelectedElement(board, node);\n    const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(node);\n    const textManage = getFirstTextManage(node);\n    const handleGenerator = elementRef.getGenerator<NodeActiveGenerator>(NodeActiveGenerator.key);\n    const nodeGenerator = elementRef.getGenerator<NodeGenerator>(NodeGenerator.key);\n    if (!selected) {\n        if (state === NodeState.hovering) {\n            nodeGenerator && nodeGenerator.processDrawing(node, PlaitBoard.getElementTopHost(board));\n            textManage && PlaitBoard.getElementTopHost(board).append(textManage.g);\n            handleGenerator.processDrawing(node, PlaitBoard.getElementTopHost(board), { selected, hovered: true });\n        } else {\n            handleGenerator.destroy();\n            nodeGenerator && nodeGenerator.processDrawing(node, PlaitElement.getElementG(node));\n            textManage && PlaitElement.getElementG(node).append(textManage.g);\n        }\n    }\n};\n","import { PlaitBoard, PlaitElement, PlaitPlugin, getMovingElements, toHostPoint, toViewBoxPoint } from '@plait/core';\nimport { FlowNode, NodeState } from '../interfaces/node';\nimport { FlowEdge } from '../interfaces/edge';\nimport { getHitEdge, getHitNode, isEdgeDragging, isPlaceholderEdgeInfo, renderEdge, renderRelatedEdges } from '../utils';\nimport { renderNode } from '../utils/edge/node-render';\n\nexport const withHovering: PlaitPlugin = (board: PlaitBoard) => {\n    const { pointerMove, pointerLeave } = board;\n\n    let hoveredElement: FlowNode | FlowEdge | null;\n\n    board.pointerMove = (event: PointerEvent) => {\n        pointerMove(event);\n        const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n        const newHitNode = getHitNode(board, point) || getHitEdge(board, point);\n        const movingNodes = getMovingElements(board);\n\n        // 当移动节点、更改箭头方位、拖拽连线不执行\n        if (movingNodes?.length || isEdgeDragging(board) || isPlaceholderEdgeInfo(board) || newHitNode?.id === hoveredElement?.id) {\n            hoveredElement = newHitNode;\n            return;\n        }\n        if (hoveredElement && PlaitElement.hasMounted(hoveredElement)) {\n            if (FlowNode.isFlowNodeElement(hoveredElement)) {\n                renderNode(board, hoveredElement.id);\n                renderRelatedEdges(board, hoveredElement.id);\n            } else {\n                renderEdge(board, hoveredElement);\n            }\n        }\n        hoveredElement = newHitNode;\n        if (hoveredElement) {\n            if (FlowNode.isFlowNodeElement(hoveredElement)) {\n                renderNode(board, hoveredElement.id, NodeState.hovering);\n                renderRelatedEdges(board, hoveredElement.id, 'hovering');\n            } else {\n                renderEdge(board, hoveredElement, 'hovering');\n            }\n        }\n    };\n\n    board.pointerLeave = (event: PointerEvent) => {\n        hoveredElement = null;\n        pointerLeave(event);\n    };\n\n    return board;\n};\n","import { PlaitBoard } from '@plait/core';\nimport { LabelIconItem } from '../interfaces/icon';\nimport { FlowElement } from '../interfaces/element';\nimport { RenderComponentRef } from '@plait/common';\n\nexport interface PlaitFlowLabelIconBoard {\n    renderLabelIcon: (container: Element | DocumentFragment, props: LabelIconProps) => RenderComponentRef<LabelIconProps>;\n}\n\nexport const withLabelIcon = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n    const newBoard = board as T & PlaitFlowLabelIconBoard;\n\n    newBoard.renderLabelIcon = (container: Element | DocumentFragment, props: LabelIconProps) => {\n        throw new Error('No implementation for renderLabeIcon method.');\n    };\n    return newBoard;\n};\n\nexport interface LabelIconProps {\n    board: PlaitBoard;\n    iconItem: LabelIconItem;\n    element: FlowElement;\n    fontSize: number;\n}\n","import {\n    PlaitBoard,\n    PlaitPlugin,\n    PlaitPluginElementContext,\n    PlaitElement,\n    PlaitOptionsBoard,\n    PlaitPluginKey,\n    setSelectionOptions\n} from '@plait/core';\nimport { FlowNodeComponent } from '../node.component';\nimport { FlowEdgeComponent } from '../edge.component';\nimport { isHitEdge } from '../utils/edge/is-hit-edge';\nimport { FlowElement } from '../interfaces/element';\nimport { FlowEdge } from '../interfaces/edge';\nimport { FlowNode } from '../interfaces/node';\nimport { withFlowEdgeDnd } from './with-edge-dnd';\nimport { withEdgeCreate } from './with-edge-create';\nimport { isHitNode } from '../utils/node/is-hit-node';\nimport { withHandleBlink } from './with-handle-blink';\nimport { FlowPluginOptions, FlowPluginKey } from '../interfaces/flow';\nimport { withHovering } from './with-hovering';\nimport { TEXT_DEFAULT_HEIGHT } from '@plait/text-plugins';\nimport { withLabelIcon } from './with-label-icon';\n\nexport const withFlow: PlaitPlugin = (board: PlaitBoard) => {\n    const { drawElement, isRectangleHit, isHit, isMovable, getRectangle } = board;\n\n    board.drawElement = (context: PlaitPluginElementContext) => {\n        if (FlowElement.isFlowElement(context.element)) {\n            if (FlowEdge.isFlowEdgeElement(context.element)) {\n                return FlowEdgeComponent;\n            }\n            return FlowNodeComponent;\n        }\n        return drawElement(context);\n    };\n\n    board.isRectangleHit = (element, range) => {\n        if (!board.options.readonly) {\n            if (FlowElement.isFlowElement(element) && PlaitElement.hasMounted(element) && board.selection) {\n                if (FlowNode.isFlowNodeElement(element)) {\n                    return isHitNode(board, element, [range.anchor, range.focus]);\n                }\n                if (FlowEdge.isFlowEdgeElement(element)) {\n                    return isHitEdge(board, element, range.focus);\n                }\n            }\n        }\n        return isRectangleHit(element, range);\n    };\n\n    board.isHit = (element, point, isStrict?: boolean) => {\n        if (!board.options.readonly) {\n            if (FlowElement.isFlowElement(element) && PlaitElement.hasMounted(element)) {\n                if (FlowNode.isFlowNodeElement(element)) {\n                    return isHitNode(board, element, [point, point]);\n                }\n                if (FlowEdge.isFlowEdgeElement(element)) {\n                    return isHitEdge(board, element, point);\n                }\n            }\n        }\n        return isHit(element, point, isStrict);\n    };\n\n    board.isMovable = (element) => {\n        if (FlowNode.isFlowNodeElement(element as FlowElement)) {\n            return true;\n        }\n        return isMovable(element);\n    };\n\n    board.getRectangle = (element) => {\n        if (FlowNode.isFlowNodeElement(element as FlowElement)) {\n            const { width, height, points } = element;\n            return {\n                x: points![0][0],\n                y: points![0][1],\n                width,\n                height\n            };\n        }\n        if (FlowEdge.isFlowEdgeElement(element as FlowElement)) {\n            return {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0\n            };\n        }\n        return getRectangle(element);\n    };\n\n    setSelectionOptions(board, { isMultipleSelection: false });\n\n    (board as PlaitOptionsBoard).setPluginOptions<FlowPluginOptions>(FlowPluginKey.flowOptions, {\n        edgeLabelOptions: { height: TEXT_DEFAULT_HEIGHT }\n    });\n\n    return withLabelIcon(withHandleBlink(withFlowEdgeDnd(withEdgeCreate(withHovering(board)))));\n};\n","import { PlaitBoard } from '@plait/core';\nimport { LabelIconItem } from '../interfaces/icon';\nimport { FlowElement } from '../interfaces/element';\nimport { EDGE_LABEL_FONTSIZE } from '../constants/edge';\n\nexport abstract class FlowEdgeLabelIconBaseComponent {\n    fontSize: number = EDGE_LABEL_FONTSIZE;\n\n    iconItem!: LabelIconItem;\n\n    board!: PlaitBoard;\n\n    element!: FlowElement;\n\n    abstract nativeElement(): HTMLElement;\n\n    initialize() {\n        this.nativeElement().style.fontSize = `${this.fontSize}px`;\n        this.nativeElement().classList.add('flow-edge-label-icon');\n    }\n}\n","/*\n * Public API Surface of flow\n */\n\nexport * from './node.component';\nexport * from './edge.component';\nexport * from './plugins/with-flow';\nexport * from './plugins/with-edge-dnd';\nexport * from './plugins/with-label-icon';\nexport * from './interfaces/element';\nexport * from './interfaces/edge';\nexport * from './interfaces/node';\nexport * from './interfaces/icon';\nexport * from './interfaces/index';\nexport * from './interfaces/flow';\nexport * from './constants/default';\nexport * from './constants/edge';\nexport * from './constants/handle';\nexport * from './constants/node';\nexport * from './utils/index';\nexport * from './draw/edge';\nexport * from './draw/handle';\nexport * from './draw/node';\nexport * from './core/edge-label-icon-base.component';\nexport * from './generators';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}